/**
  * Add images to database
  *
  * @class nggAdmin
  * @param int $galleryID
  * @param array $imageslist
  * @return array $image_ids Id's which are sucessful added
  */
 static function add_Images($galleryID, $imageslist)
 {
     global $wpdb, $ngg;
     $image_ids = array();
     if (is_array($imageslist)) {
         foreach ($imageslist as $picture) {
             // filter function to rename/change/modify image before
             $picture = apply_filters('ngg_pre_add_new_image', $picture, $galleryID);
             // strip off the extension of the filename
             $path_parts = M_I18n::mb_pathinfo($picture);
             $alttext = !isset($path_parts['filename']) ? substr($path_parts['basename'], 0, strpos($path_parts['basename'], '.')) : $path_parts['filename'];
             // save it to the database
             $pic_id = nggdb::add_image($galleryID, $picture, '', $alttext);
             if (C_NextGen_Settings::get_instance()->imgBackup && !empty($pic_id)) {
                 $storage = C_Gallery_Storage::get_instance();
                 $storage->backup_image($pic_id);
             }
             if (!empty($pic_id)) {
                 $image_ids[] = $pic_id;
             }
             // add the metadata
             nggAdmin::import_MetaData($pic_id);
             // auto rotate
             nggAdmin::rotate_image($pic_id);
             // Autoresize image if required
             if ($ngg->options['imgAutoResize']) {
                 $imagetmp = nggdb::find_image($pic_id);
                 $sizetmp = @getimagesize($imagetmp->imagePath);
                 $widthtmp = $ngg->options['imgWidth'];
                 $heighttmp = $ngg->options['imgHeight'];
                 if ($sizetmp[0] > $widthtmp && $widthtmp || $sizetmp[1] > $heighttmp && $heighttmp) {
                     nggAdmin::resize_image($pic_id);
                 }
             }
             // action hook for post process after the image is added to the database
             $image = array('id' => $pic_id, 'filename' => $picture, 'galleryID' => $galleryID);
             do_action('ngg_added_new_image', $image);
         }
     }
     // is_array
     // delete dirsize after adding new images
     delete_transient('dirsize_cache');
     do_action('ngg_after_new_images_added', $galleryID, $image_ids);
     return $image_ids;
 }
 public function get_params_from_name($name, $is_only_size_name = false)
 {
     $prefix_list = $this->object->_get_name_prefix_list();
     $id_prefix = $prefix_list['id'];
     $size_prefix = $prefix_list['size'];
     $flags_prefix = $prefix_list['flags'];
     $max_value_length = $prefix_list['max_value_length'];
     $size_name = null;
     $id_name = null;
     $params = array();
     if (!$is_only_size_name) {
         $extension = M_I18n::mb_pathinfo($name, PATHINFO_EXTENSION);
         if ($extension != null) {
             $extension = '.' . $extension;
         }
         $name = M_I18n::mb_basename($name, $extension);
     }
     $size_index = strrpos($name, $size_prefix);
     if ($size_index > 0 || $size_index === 0) {
         // check if name contains dynamic size/params info by looking for prefix
         $size_name = substr($name, $size_index);
     }
     if (!$is_only_size_name) {
         // name should contain the image id, search for prefix
         $id_index = strrpos($name, $id_prefix);
         if ($id_index > 0 || $id_index === 0) {
             if ($size_index > 0 && $size_index > $id_index) {
                 $id_name = substr($name, $id_index, $size_index - $id_index);
             } else {
                 $id_name = substr($name, $id_index);
             }
         }
     }
     // Double check we got a correct dynamic size/params string
     if (substr($size_name, 0, strlen($size_prefix)) == $size_prefix) {
         $flags = $prefix_list['flag'];
         // get the length of the flag id (the key in the $flags array) in the string (how many characters to consume)
         $flag_id_len = $prefix_list['flag_len'];
         $params_str = substr($size_name, strlen($size_prefix));
         $params_parts = explode('-', $params_str);
         // $param_part is a single param, separated by '-'
         foreach ($params_parts as $param_part) {
             // Parse WxHxQ - Q=quality
             $param_size = explode('x', $param_part);
             $param_size_count = count($param_size);
             if (substr($param_part, 0, strlen($flags_prefix)) == $flags_prefix) {
                 /* Set flags, using $flags keys as prefixes */
                 // move string pointer up (after the main flags prefix)
                 $param_flags = substr($param_part, strlen($flags_prefix));
                 $param_flags_len = strlen($param_flags);
                 $flags_todo = $flags;
                 while (true) {
                     // ensure we don't run into an infinite loop ;)
                     if (count($flags_todo) == 0 || strlen($param_flags) == 0) {
                         break;
                     }
                     // get the flag prefix (a key in the $flags array) using flag id length
                     $flag_prefix = substr($param_flags, 0, $flag_id_len);
                     // move string pointer up (after the single flag prefix)
                     $param_flags = substr($param_flags, $flag_id_len);
                     // get the length of the flag value in the string (how many characters to consume)
                     // flag value length is stored in a single hexadecimal character next to the flag prefix
                     $flag_value_len = min(hexdec(substr($param_flags, 0, 1)), min($max_value_length, strlen($param_flags) - 1));
                     // get the flag value
                     $flag_value = substr($param_flags, 1, $flag_value_len);
                     // move string pointer up (after the entire flag)
                     $param_flags = substr($param_flags, $flag_value_len + 1);
                     // make sure the flag is supported
                     if (isset($flags[$flag_prefix])) {
                         $flag_name = $flags[$flag_prefix];
                         if (is_numeric($flag_value)) {
                             // convert numerical flags to integers
                             $flag_value = intval($flag_value);
                         }
                         $params[$flag_name] = $flag_value;
                         if (isset($flags_todo[$flag_prefix])) {
                             unset($flags_todo[$flag_prefix]);
                         }
                     } else {
                     }
                 }
             } else {
                 if ($param_size_count == 2 || $param_size_count == 3) {
                     // Set W H Q
                     $params['width'] = intval($param_size[0]);
                     $params['height'] = intval($param_size[1]);
                     if (isset($param_size[2]) && intval($param_size[2]) > 0) {
                         $params['quality'] = intval($param_size[2]);
                     }
                 }
             }
         }
     }
     // Double check we got a correct id string
     if (substr($id_name, 0, strlen($id_prefix)) == $id_prefix) {
         // move string pointer up (after the prefix)
         $id_name = substr($id_name, strlen($id_prefix));
         // get the length of the image id in the string (how many characters to consume)
         $id_len = min(hexdec(substr($id_name, 0, 1)), min($max_value_length, strlen($id_name) - 1));
         // get the id based on old position and id length
         $image_id = intval(substr($id_name, 1, $id_len));
         if ($image_id > 0) {
             $params['image'] = $image_id;
         }
     }
     return $this->object->_get_params_sanitized($params);
 }
 /**
  * Gets the url of a particular-sized image
  * @param int|object $image
  * @param string $size
  * @returns array
  */
 public function get_image_url($image, $size = 'full', $check_existance = FALSE, $image_abspath = FALSE)
 {
     $retval = NULL;
     $fs = C_Fs::get_instance();
     $router = C_Router::get_instance();
     if (!$image_abspath) {
         $image_abspath = $this->object->get_image_abspath($image, $size, $check_existance);
     }
     if ($image_abspath) {
         // encode the filename: because filesystems will let you name things like%@this.jpg
         $parts = M_I18n::mb_pathinfo($image_abspath);
         $parts['basename'] = urlencode($parts['basename']);
         $image_abspath = $parts['dirname'] . DIRECTORY_SEPARATOR . $parts['basename'];
         $doc_root = $fs->get_document_root('gallery');
         if ($doc_root != null) {
             $doc_root = rtrim($doc_root, '/\\') . DIRECTORY_SEPARATOR;
         }
         // if docroot is "/" we would generate urls like /wp-contentpluginsnextgen-galleryetcetc
         if ($doc_root !== '/') {
             $request_uri = str_replace($doc_root, '', $image_abspath);
         } else {
             $request_uri = $image_abspath;
         }
         $request_uri = '/' . ltrim(str_replace('\\', '/', $request_uri), '/');
         $retval = $router->remove_url_segment('/index.php', $router->get_url($request_uri, FALSE, 'gallery'));
     }
     return apply_filters('ngg_get_image_url', $retval, $image, $size);
 }
 public function set_post_thumbnail($post, $image)
 {
     $attachment_id = null;
     // Get the post id
     $post_id = $post;
     if (is_object($post)) {
         if (property_exists($post, 'ID')) {
             $post_id = $post->ID;
         } elseif (property_exists($post, 'post_id')) {
             $post_id = $post->post_id;
         }
     } elseif (is_array($post)) {
         if (isset($post['ID'])) {
             $post_id = $post['ID'];
         } elseif (isset($post['post_id'])) {
             $post_id = $post['post_id'];
         }
     }
     // Get the image object
     if (is_int($image)) {
         $image = C_Image_Mapper::get_instance()->find($image);
     }
     // Do we have what we need?
     if ($image && is_int($post_id)) {
         $args = array('post_type' => 'attachment', 'meta_key' => '_ngg_image_id', 'meta_compare' => '==', 'meta_value' => $image->{$image->id_field});
         $upload_dir = wp_upload_dir();
         $basedir = $upload_dir['basedir'];
         $thumbs_dir = implode(DIRECTORY_SEPARATOR, array($basedir, 'ngg_featured'));
         $gallery_abspath = $this->object->get_gallery_abspath($image->galleryid);
         $image_abspath = $this->object->get_full_abspath($image);
         $target_path = null;
         $copy_image = TRUE;
         // Have we previously set the post thumbnail?
         if ($posts = get_posts($args)) {
             $attachment_id = $posts[0]->ID;
             $attachment_file = get_attached_file($attachment_id);
             $target_path = $attachment_file;
             if (filemtime($image_abspath) > filemtime($target_path)) {
                 $copy_image = TRUE;
             }
         } else {
             $url = $this->object->get_full_url($image);
             $target_relpath = null;
             $target_basename = M_I18n::mb_basename($image_abspath);
             if (strpos($image_abspath, $gallery_abspath) === 0) {
                 $target_relpath = substr($image_abspath, strlen($gallery_abspath));
             } else {
                 if ($image->galleryid) {
                     $target_relpath = path_join(strval($image->galleryid), $target_basename);
                 } else {
                     $target_relpath = $target_basename;
                 }
             }
             $target_relpath = trim($target_relpath, '\\/');
             $target_path = path_join($thumbs_dir, $target_relpath);
             $max_count = 100;
             $count = 0;
             while (file_exists($target_path) && $count <= $max_count) {
                 $count++;
                 $pathinfo = M_I18n::mb_pathinfo($target_path);
                 $dirname = $pathinfo['dirname'];
                 $filename = $pathinfo['filename'];
                 $extension = $pathinfo['extension'];
                 $rand = mt_rand(1, 9999);
                 $basename = $filename . '_' . sprintf('%04d', $rand) . '.' . $extension;
                 $target_path = path_join($dirname, $basename);
             }
             if (file_exists($target_path)) {
             }
             $target_dir = dirname($target_path);
             wp_mkdir_p($target_dir);
         }
         if ($copy_image) {
             @copy($image_abspath, $target_path);
             if (!$attachment_id) {
                 $size = @getimagesize($target_path);
                 $image_type = $size ? $size['mime'] : 'image/jpeg';
                 $title = sanitize_file_name($image->alttext);
                 $caption = sanitize_file_name($image->description);
                 $attachment = array('post_title' => $title, 'post_content' => $caption, 'post_status' => 'attachment', 'post_parent' => 0, 'post_mime_type' => $image_type, 'guid' => $url);
                 $attachment_id = wp_insert_attachment($attachment, $target_path);
             }
             update_post_meta($attachment_id, '_ngg_image_id', $image->{$image->id_field});
             wp_update_attachment_metadata($attachment_id, wp_generate_attachment_metadata($attachment_id, $target_path));
             set_post_thumbnail($post_id, $attachment_id);
         }
     }
     return $attachment_id;
 }
 /**
  * nggPostThumbnail::ajax_set_post_thumbnail()
  * 
  * @return void
  */
 function ajax_set_post_thumbnail()
 {
     global $post_ID;
     // check for correct capability
     if (!is_user_logged_in()) {
         die('-1');
     }
     // get the post id as global variable, otherwise the ajax_nonce failed later
     $post_ID = intval($_POST['post_id']);
     if (!current_user_can('edit_post', $post_ID)) {
         die('-1');
     }
     $thumbnail_id = intval($_POST['thumbnail_id']);
     // delete the image
     if ($thumbnail_id == '-1') {
         delete_post_meta($post_ID, '_thumbnail_id');
         die('0');
     }
     if ($thumbnail_id != null) {
         $imap = C_Image_Mapper::get_instance();
         $storage = C_Gallery_Storage::get_instance();
         $image = $imap->find($thumbnail_id);
         // for NGG we look for the image id
         if ($image) {
             $image_id = $thumbnail_id;
             $args = array('post_type' => 'attachment', 'meta_key' => '_ngg_image_id', 'meta_compare' => '==', 'meta_value' => $image_id);
             $upload_dir = wp_upload_dir();
             $basedir = $upload_dir['basedir'];
             $thumbs_dir = implode(DIRECTORY_SEPARATOR, array($basedir, 'ngg_featured'));
             $gallery_abspath = $storage->get_gallery_abspath($image->galleryid);
             $image_abspath = $storage->get_full_abspath($image);
             $target_path = null;
             $posts = get_posts($args);
             $attachment_id = null;
             if ($posts != null) {
                 $attachment_id = $posts[0]->ID;
             } else {
                 $url = $storage->get_full_url($image);
                 $target_relpath = null;
                 $target_basename = M_I18n::mb_basename($image_abspath);
                 if (strpos($image_abspath, $gallery_abspath) === 0) {
                     $target_relpath = substr($image_abspath, strlen($gallery_abspath));
                 } else {
                     if ($image->galleryid) {
                         $target_relpath = path_join(strval($image->galleryid), $target_basename);
                     } else {
                         $target_relpath = $target_basename;
                     }
                 }
                 $target_relpath = trim($target_relpath, '\\/');
                 $target_path = path_join($thumbs_dir, $target_relpath);
                 $max_count = 100;
                 $count = 0;
                 while (file_exists($target_path) && $count <= $max_count) {
                     $count++;
                     $pathinfo = M_I18n::mb_pathinfo($target_path);
                     $dirname = $pathinfo['dirname'];
                     $filename = $pathinfo['filename'];
                     $extension = $pathinfo['extension'];
                     $rand = mt_rand(1, 9999);
                     $basename = $filename . '_' . sprintf('%04d', $rand) . '.' . $extension;
                     $target_path = path_join($dirname, $basename);
                 }
                 if (file_exists($target_path)) {
                     // XXX handle very rare case in which $max_count wasn't enough?
                 }
                 $target_dir = dirname($target_path);
                 wp_mkdir_p($target_dir);
                 if (@copy($image_abspath, $target_path)) {
                     $size = @getimagesize($target_path);
                     $image_type = $size ? $size['mime'] : 'image/jpeg';
                     $title = sanitize_file_name($image->alttext);
                     $caption = sanitize_file_name($image->description);
                     $attachment = array('post_title' => $title, 'post_content' => $caption, 'post_status' => 'attachment', 'post_parent' => 0, 'post_mime_type' => $image_type, 'guid' => $url);
                     // Save the data
                     $attachment_id = wp_insert_attachment($attachment, $target_path);
                     if ($attachment_id) {
                         wp_update_attachment_metadata($attachment_id, wp_generate_attachment_metadata($attachment_id, $target_path));
                         update_post_meta($attachment_id, '_ngg_image_id', $image_id);
                     }
                 }
             }
             if ($attachment_id) {
                 //$attachment = get_post($attachment_id);
                 //$attachment_meta = wp_get_attachment_metadata($attachment_id);
                 $attachment_file = get_attached_file($attachment_id);
                 $target_path = $attachment_file;
                 if (filemtime($image_abspath) > filemtime($target_path)) {
                     if (@copy($image_abspath, $target_path)) {
                         wp_update_attachment_metadata($attachment_id, wp_generate_attachment_metadata($attachment_id, $target_path));
                     }
                 }
                 die(strval($attachment_id));
             }
         }
     }
     die('0');
 }