horike37 /
wp-syndicate
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /* |
||
| 3 | en : https://gist.github.com/4084471 |
||
| 4 | ja : https://gist.github.com/4078027 |
||
| 5 | |||
| 6 | License: |
||
| 7 | Released under the GPL license |
||
| 8 | http://www.gnu.org/copyleft/gpl.html |
||
| 9 | |||
| 10 | Copyright 2013 (email : [email protected]) |
||
| 11 | |||
| 12 | This program is free software; you can redistribute it and/or modify |
||
| 13 | it under the terms of the GNU General Public License as published by |
||
| 14 | the Free Software Foundation; either version 2 of the License, or |
||
| 15 | (at your option) any later version. |
||
| 16 | |||
| 17 | This program is distributed in the hope that it will be useful, |
||
| 18 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
| 19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
| 20 | GNU General Public License for more details. |
||
| 21 | |||
| 22 | You should have received a copy of the GNU General Public License |
||
| 23 | along with this program; if not, write to the Free Software |
||
| 24 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
||
| 25 | */ |
||
| 26 | |||
| 27 | if ( defined( 'ABSPATH' ) ) : |
||
| 28 | |||
| 29 | require_once( ABSPATH . 'wp-admin/includes/image.php' ); |
||
| 30 | require_once( ABSPATH . 'wp-admin/includes/post.php' ); |
||
| 31 | |||
| 32 | class WP_Post_Helper { |
||
| 33 | public $post; |
||
| 34 | |||
| 35 | private $postid = false; |
||
| 36 | private $post_id = false; |
||
| 37 | private $attachment_id = array(); |
||
| 38 | |||
| 39 | private $tags = array(); |
||
| 40 | private $medias = array(); |
||
| 41 | private $metas = array(); |
||
| 42 | private $fields = array(); |
||
| 43 | private $media_count = 0; |
||
| 44 | private $terms = array(); |
||
| 45 | |||
| 46 | public function __construct($args = array()) { |
||
| 47 | $this->init( $args ); |
||
| 48 | } |
||
| 49 | |||
| 50 | // Get PostID |
||
| 51 | public function postid() { |
||
| 52 | return $this->postid; |
||
| 53 | } |
||
| 54 | |||
| 55 | // Get Attachment ID |
||
| 56 | public function attachment_id() { |
||
| 57 | return $this->attachment_id; |
||
| 58 | } |
||
| 59 | |||
| 60 | // Init Post Data |
||
| 61 | public function init($args = array()) { |
||
| 62 | if ( is_object( $args ) ) { |
||
| 63 | $args = (array) $args; } |
||
| 64 | $this->attachment_id = array(); |
||
| 65 | $this->tags = array(); |
||
| 66 | $this->medias = array(); |
||
| 67 | $this->metas = array(); |
||
| 68 | $this->fields = array(); |
||
| 69 | $this->media_count = 0; |
||
| 70 | |||
| 71 | if ( is_numeric( $args ) ) { |
||
| 72 | $post = get_post( intval( $args ) ); |
||
| 73 | if ( $post && isset( $post->ID ) && ! is_wp_error( $post ) ) { |
||
| 74 | $this->post_id = $post->ID; |
||
| 75 | $this->post = $post; |
||
| 76 | return true; |
||
| 77 | } else { |
||
| 78 | return false; |
||
| 79 | } |
||
| 80 | } else { |
||
| 81 | $this->post = get_default_post_to_edit(); |
||
| 82 | $this->post->post_category = null; |
||
| 83 | if ( is_array( $args ) && count( $args ) > 0 ) { |
||
| 84 | return $this->set( $args ); |
||
| 85 | } else { return true; } |
||
| 86 | } |
||
| 87 | } |
||
| 88 | |||
| 89 | // Set Post Data |
||
| 90 | public function set($args) { |
||
| 91 | if ( is_object( $args ) ) { |
||
| 92 | $args = (array) $args; } |
||
| 93 | if ( ! is_array( $args ) ) { |
||
| 94 | return false; } |
||
| 95 | |||
| 96 | if ( isset( $args['ID'] ) || isset( $args['post_id'] ) ) { |
||
| 97 | $post_id = isset( $args['ID'] ) ? $args['ID'] : $args['post_id']; |
||
| 98 | $post = get_post( $post_id, 'ARRAY_A' ); |
||
| 99 | if ( isset( $post['ID'] ) ) { |
||
| 100 | $this->post_id = $post_id; |
||
| 101 | $this->post->ID = $post_id; |
||
| 102 | unset( $post['ID'] ); |
||
| 103 | $this->set( $post ); |
||
| 104 | } |
||
| 105 | unset( $post ); |
||
| 106 | } |
||
| 107 | |||
| 108 | $post = $this->post; |
||
| 109 | foreach ( $post as $key => &$val ) { |
||
| 110 | if ( 'ID' !== $key && isset( $args[ $key ] ) ) { |
||
| 111 | $val = $args[ $key ]; |
||
| 112 | } |
||
| 113 | } |
||
| 114 | $this->post = $post; |
||
| 115 | |||
| 116 | if ( isset( $args['post_tags'] ) ) { |
||
| 117 | $this->add_tags( |
||
| 118 | is_array( $args['post_tags'] ) |
||
| 119 | ? $args['post_tags'] |
||
| 120 | : explode( ',', $args['post_tags'] ) |
||
| 121 | ); |
||
| 122 | } |
||
| 123 | |||
| 124 | return true; |
||
| 125 | } |
||
| 126 | |||
| 127 | // Add Post |
||
| 128 | public function insert() { |
||
| 129 | if ( ! isset( $this->post ) ) { |
||
| 130 | return false; } |
||
| 131 | |||
| 132 | $this->postid = 0; |
||
|
0 ignored issues
–
show
|
|||
| 133 | $this->post->ID = 0; |
||
| 134 | $postid = wp_insert_post( $this->post ); |
||
| 135 | View Code Duplication | if ( $postid && ! is_wp_error( $postid ) ) { |
|
| 136 | $this->postid = $postid; |
||
| 137 | $this->post->ID = $postid; |
||
| 138 | return $this->add_related_meta( $postid ) ? $postid : false; |
||
| 139 | } else { |
||
| 140 | $this->postid = $postid; |
||
| 141 | $this->post->ID = 0; |
||
| 142 | return false; |
||
| 143 | } |
||
| 144 | } |
||
| 145 | |||
| 146 | // Update Post |
||
| 147 | public function update() { |
||
| 148 | if ( ! isset( $this->post ) ) { |
||
| 149 | return false; } |
||
| 150 | |||
| 151 | $postid = $this->postid |
||
| 152 | ? wp_update_post( $this->post ) |
||
| 153 | : wp_insert_post( $this->post ); |
||
| 154 | View Code Duplication | if ( $postid && ! is_wp_error( $postid ) ) { |
|
| 155 | $this->postid = $postid; |
||
| 156 | $this->post->ID = $postid; |
||
| 157 | return $this->add_related_meta( $postid ) ? $postid : false; |
||
| 158 | } else { |
||
| 159 | $this->postid = false; |
||
| 160 | $this->post->ID = 0; |
||
| 161 | return false; |
||
| 162 | } |
||
| 163 | } |
||
| 164 | |||
| 165 | private function add_related_meta($postid) { |
||
| 166 | if ( ! $postid || is_wp_error( $postid ) ) { |
||
| 167 | return false; } |
||
| 168 | |||
| 169 | $this->postid = $postid; |
||
| 170 | |||
| 171 | // add Tags |
||
| 172 | if ( count( $this->tags ) > 0 ) { |
||
| 173 | $this->add_tags( $this->tags ); } |
||
| 174 | $this->tags = array(); |
||
| 175 | |||
| 176 | // add medias |
||
| 177 | foreach ( $this->medias as $key => $val ) { |
||
| 178 | $this->add_media( $key, $val[0], $val[1], $val[2], $val[3] ); |
||
| 179 | } |
||
| 180 | $this->medias = array(); |
||
| 181 | |||
| 182 | // add terms |
||
| 183 | foreach ( $this->terms as $taxonomy => $terms ) { |
||
| 184 | $this->add_terms( $taxonomy, $terms ); |
||
| 185 | } |
||
| 186 | $this->terms = array(); |
||
| 187 | |||
| 188 | // add Custom Fields |
||
| 189 | foreach ( $this->metas as $key => $val ) { |
||
| 190 | if ( is_array( $val ) ) { |
||
| 191 | $this->add_meta( $key, $val[0], isset( $val[1] ) ? $val[1] : true ); |
||
| 192 | } else { $this->add_meta( $key, $val ); } |
||
| 193 | } |
||
| 194 | $this->metas = array(); |
||
| 195 | |||
| 196 | // add ACF Fields |
||
| 197 | foreach ( $this->fields as $key => $val ) { |
||
| 198 | $this->add_field( $key, $val ); |
||
| 199 | } |
||
| 200 | $this->fields = array(); |
||
| 201 | |||
| 202 | return true; |
||
| 203 | } |
||
| 204 | |||
| 205 | // Add Tag |
||
| 206 | public function add_tags($tags = array()) { |
||
| 207 | $tags = is_array( $tags ) ? $tags : explode( ',', $tags ); |
||
| 208 | foreach ( $tags as $tag ) { |
||
| 209 | if ( ! empty( $tag ) && ! array_search( $tag, $this->tags ) ) { |
||
| 210 | $this->tags[] = $tag; } |
||
| 211 | } |
||
| 212 | unset( $tags ); |
||
| 213 | |||
| 214 | if ( $this->postid ) { |
||
| 215 | $tags = implode( ',', $this->tags ); |
||
| 216 | $this->tags = array(); |
||
| 217 | return wp_add_post_tags( $this->postid, $tags ); |
||
| 218 | } |
||
| 219 | } |
||
| 220 | |||
| 221 | // add terms |
||
| 222 | public function add_terms($taxonomy, $terms) { |
||
| 223 | if ( ! $this->postid ) { |
||
| 224 | if ( ! isset( $this->terms[ $taxonomy ] ) ) { |
||
| 225 | $this->terms[ $taxonomy ] = array(); } |
||
| 226 | foreach ( (array) $terms as $term ) { |
||
| 227 | if ( array_search( $term, $this->terms[ $taxonomy ] ) === false ) { |
||
| 228 | $this->terms[ $taxonomy ][] = $term; } |
||
| 229 | } |
||
| 230 | } else { |
||
| 231 | return wp_set_object_terms( $this->postid, $terms, $taxonomy ); |
||
| 232 | } |
||
| 233 | } |
||
| 234 | |||
| 235 | // Add Media |
||
| 236 | public function add_media($filename, $title = null, $content = null, $excerpt = null, $thumbnail = false) { |
||
| 237 | if ( ! $this->postid ) { |
||
| 238 | $this->medias[ $filename ] = array( |
||
| 239 | $title, |
||
| 240 | $content, |
||
| 241 | $excerpt, |
||
| 242 | $thumbnail, |
||
| 243 | ); |
||
| 244 | return; |
||
| 245 | } |
||
| 246 | |||
| 247 | if ( $filename && file_exists( $filename ) ) { |
||
| 248 | $mime_type = ''; |
||
| 249 | $wp_filetype = wp_check_filetype( basename( $filename ), null ); |
||
| 250 | if ( isset( $wp_filetype['type'] ) && $wp_filetype['type'] ) { |
||
| 251 | $mime_type = $wp_filetype['type']; } |
||
| 252 | unset( $wp_filetype ); |
||
| 253 | |||
| 254 | $title = isset( $title ) ? $title : preg_replace( '/\.[^.]+$/', '', basename( $filename ) ); |
||
| 255 | $content = isset( $content ) ? $content : $title; |
||
| 256 | $excerpt = isset( $excerpt ) ? $excerpt : $content; |
||
| 257 | $attachment = array( |
||
| 258 | 'post_mime_type' => $mime_type, |
||
| 259 | 'post_parent' => $this->postid, |
||
| 260 | 'post_author' => $this->post->post_author, |
||
| 261 | 'post_title' => $title, |
||
| 262 | 'post_content' => $content, |
||
| 263 | 'post_excerpt' => $excerpt, |
||
| 264 | 'post_status' => 'inherit', |
||
| 265 | 'menu_order' => $this->media_count + 1, |
||
| 266 | ); |
||
| 267 | if ( isset( $this->post->post_name ) && $this->post->post_name ) { |
||
| 268 | $attachment['post_name'] = $this->post->post_name; } |
||
| 269 | $attachment_id = wp_insert_attachment( $attachment, $filename, $this->postid ); |
||
| 270 | unset( $attachment ); |
||
| 271 | |||
| 272 | if ( ! is_wp_error( $attachment_id ) ) { |
||
| 273 | $this->media_count++; |
||
| 274 | $this->attachment_id[] = $attachment_id; |
||
| 275 | $attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename ); |
||
| 276 | wp_update_attachment_metadata( $attachment_id, $attachment_data ); |
||
| 277 | unset( $attachment_data ); |
||
| 278 | if ( $thumbnail ) { |
||
| 279 | set_post_thumbnail( $this->postid, $attachment_id ); } |
||
| 280 | |||
| 281 | return $attachment_id; |
||
| 282 | } else { |
||
| 283 | return false; |
||
| 284 | } |
||
| 285 | } else { |
||
| 286 | return false; |
||
| 287 | } |
||
| 288 | } |
||
| 289 | |||
| 290 | // Add Custom Field |
||
| 291 | public function add_meta($metakey, $val, $unique = true) { |
||
| 292 | if ( ! $this->postid ) { |
||
| 293 | $this->metas[ $metakey ] = array( $val, $unique ); |
||
| 294 | } else { return $val ? add_post_meta( $this->postid, $metakey, $val, $unique ) : false; } |
||
| 295 | } |
||
| 296 | |||
| 297 | // Add Advanced Custom Field |
||
| 298 | public function add_field($field_key, $val) { |
||
| 299 | if ( ! $this->postid ) { |
||
| 300 | $this->fields[ $field_key ] = $val; |
||
| 301 | } else { return $val ? update_field( $field_key, $val, $this->postid ) : false; } |
||
| 302 | } |
||
| 303 | } |
||
| 304 | |||
| 305 | function remote_get_file($url = null, $file_dir = '', $headers = array()) { |
||
| 306 | if ( ! $url ) { |
||
| 307 | return false; } |
||
| 308 | |||
| 309 | if ( empty( $file_dir ) ) { |
||
| 310 | $upload_dir = wp_upload_dir(); |
||
| 311 | $file_dir = isset( $upload_dir['path'] ) ? $upload_dir['path'] : ''; |
||
| 312 | } |
||
| 313 | $file_dir = trailingslashit( $file_dir ); |
||
| 314 | |||
| 315 | // make directory |
||
| 316 | if ( ! file_exists( $file_dir ) ) { |
||
| 317 | $dirs = explode( '/', $file_dir ); |
||
| 318 | $subdir = '/'; |
||
| 319 | foreach ( $dirs as $dir ) { |
||
| 320 | if ( ! empty( $dir ) ) { |
||
| 321 | $subdir .= $dir . '/'; |
||
| 322 | if ( ! file_exists( $subdir ) ) { |
||
| 323 | mkdir( $subdir ); |
||
| 324 | } |
||
| 325 | } |
||
| 326 | } |
||
| 327 | } |
||
| 328 | |||
| 329 | // remote get! |
||
| 330 | $photo = $file_dir . basename( $url ); |
||
| 331 | |||
| 332 | if ( ! file_exists( $photo ) ) { |
||
| 333 | $response = wp_remote_get( $url, $headers ); |
||
| 334 | if ( ! is_wp_error( $response ) && 200 === $response['response']['code'] ) { |
||
| 335 | $photo_data = $response['body']; |
||
| 336 | file_put_contents( $photo, $photo_data ); |
||
| 337 | unset( $photo_data ); |
||
| 338 | } else { |
||
| 339 | $photo = false; |
||
| 340 | } |
||
| 341 | unset( $response ); |
||
| 342 | } |
||
| 343 | return file_exists( $photo ) ? $photo : false; |
||
| 344 | } |
||
| 345 | |||
| 346 | endif; |
||
| 347 |
This check looks for assignments to scalar types that may be of the wrong type.
To ensure the code behaves as expected, it may be a good idea to add an explicit type cast.