/** * Function for uploading of images via the upload form * * @class nggAdmin * @return void */ function upload_images() { global $nggdb; // WPMU action if (nggWPMU::check_quota()) { return; } // Images must be an array $imageslist = array(); // get selected gallery $galleryID = (int) $_POST['galleryselect']; if ($galleryID == 0) { nggGallery::show_error(__('No gallery selected !', 'nggallery')); return; } // get the path to the gallery $gallery = $nggdb->find_gallery($galleryID); if (empty($gallery->path)) { nggGallery::show_error(__('Failure in database, no gallery path set !', 'nggallery')); return; } // read list of images $dirlist = nggAdmin::scandir($gallery->abspath); $imagefiles = $_FILES['imagefiles']; if (is_array($imagefiles)) { foreach ($imagefiles['name'] as $key => $value) { // look only for uploded files if ($imagefiles['error'][$key] == 0) { $temp_file = $imagefiles['tmp_name'][$key]; //clean filename and extract extension $filepart = nggGallery::fileinfo($imagefiles['name'][$key]); $filename = $filepart['basename']; // check for allowed extension and if it's an image file $ext = array('jpg', 'png', 'gif'); if (!in_array($filepart['extension'], $ext) || !@getimagesize($temp_file)) { nggGallery::show_error('<strong>' . $imagefiles['name'][$key] . ' </strong>' . __('is no valid image file!', 'nggallery')); continue; } // check if this filename already exist in the folder $i = 0; while (in_array($filename, $dirlist)) { $filename = $filepart['filename'] . '_' . $i++ . '.' . $filepart['extension']; } $dest_file = $gallery->abspath . '/' . $filename; //check for folder permission if (!is_writeable($gallery->abspath)) { $message = sprintf(__('Unable to write to directory %s. Is this directory writable by the server?', 'nggallery'), $gallery->abspath); nggGallery::show_error($message); return; } // save temp file to gallery if (!@move_uploaded_file($temp_file, $dest_file)) { nggGallery::show_error(__('Error, the file could not be moved to : ', 'nggallery') . $dest_file); nggAdmin::check_safemode($gallery->abspath); continue; } if (!nggAdmin::chmod($dest_file)) { nggGallery::show_error(__('Error, the file permissions could not be set', 'nggallery')); continue; } // add to imagelist & dirlist $imageslist[] = $filename; $dirlist[] = $filename; } } } if (count($imageslist) > 0) { // add images to database $image_ids = nggAdmin::add_Images($galleryID, $imageslist); //create thumbnails nggAdmin::do_ajax_operation('create_thumbnail', $image_ids, __('Create new thumbnails', 'nggallery')); //add the preview image if needed nggAdmin::set_gallery_preview($galleryID); nggGallery::show_message(count($image_ids) . __(' Image(s) successfully added', 'nggallery')); } return; }
/** * Method "ngg.uploadImage" * Uploads a image to a gallery * * @since 1.4 * * @copyright addapted from WP Core * @param array $args Method parameters. * - int blog_id * - string username * - string password * - struct data * o string name * o string type (optional) * o base64 bits * o bool overwrite (optional) * o int gallery * o int image_id (optional) * @return array with image meta data */ function uploadImage($args) { global $wpdb; require_once dirname(dirname(__FILE__)) . '/admin/functions.php'; // admin functions require_once 'meta.php'; // meta data import $blog_ID = (int) $args[0]; $username = $wpdb->escape($args[1]); $password = $wpdb->escape($args[2]); $data = $args[3]; $name = $data['name']; $type = $data['type']; $bits = $data['bits']; // gallery & image id $gid = (int) $data['gallery']; // required field $pid = (int) $data['image_id']; // optional but more foolproof of overwrite $image = false; // container for the image object logIO('O', '(NGG) Received ' . strlen($bits) . ' bytes'); if (!($user = $this->login($username, $password))) { return $this->error; } // Check if you have the correct capability for upload if (!current_user_can('NextGEN Upload images')) { logIO('O', '(NGG) User does not have upload_files capability'); $this->error = new IXR_Error(401, __('You are not allowed to upload files to this site.')); return $this->error; } // Look for the gallery , could we find it ? if (!($gallery = nggdb::find_gallery($gid))) { return new IXR_Error(404, __('Could not find gallery ' . $gid)); } // Now check if you have the correct capability for this gallery if (!nggAdmin::can_manage_this_gallery($gallery->author)) { logIO('O', '(NGG) User does not have upload_files capability'); $this->error = new IXR_Error(401, __('You are not allowed to upload files to this gallery.')); return $this->error; } //clean filename and extract extension $filepart = nggGallery::fileinfo($name); $name = $filepart['basename']; // check for allowed extension and if it's an image file $ext = array('jpg', 'png', 'gif'); if (!in_array($filepart['extension'], $ext)) { logIO('O', '(NGG) Not allowed file type'); $this->error = new IXR_Error(401, __('This is no valid image file.', 'nggallery')); return $this->error; } // in the case you would overwrite the image, let's delete the old one first if (!empty($data["overwrite"]) && $data["overwrite"] == true) { // search for the image based on the filename, if it's not already provided if ($pid == 0) { $pid = $wpdb->get_col(" SELECT pid FROM {$wpdb->nggpictures} WHERE filename = '{$name}' AND galleryid = '{$gid}' "); } if (!($image = nggdb::find_image($pid))) { return new IXR_Error(404, __('Could not find image id ' . $pid)); } // sync the gallery<->image parameter, otherwise we may copy it to the wrong gallery $gallery = $image; // delete now the image if (!@unlink($image->imagePath)) { $errorString = sprintf(__('Failed to delete image %1$s ', 'nggallery'), $image->imagePath); logIO('O', '(NGG) ' . $errorString); return new IXR_Error(500, $errorString); } } // upload routine from wp core, load first the image to the upload folder, $upload['file'] contain the path $upload = wp_upload_bits($name, $type, $bits); if (!empty($upload['error'])) { $errorString = sprintf(__('Could not write file %1$s (%2$s)'), $name, $upload['error']); logIO('O', '(NGG) ' . $errorString); return new IXR_Error(500, $errorString); } // this is the dir to the gallery $path = WINABSPATH . $gallery->path; // check if the filename already exist, if not add a counter index $filename = wp_unique_filename($path, $name); $destination = $path . '/' . $filename; // Move files to gallery folder if (!@rename($upload['file'], $destination)) { $errorString = sprintf(__('Failed to move image %1$s to %2$s', 'nggallery'), '<strong>' . $upload['file'] . '</strong>', $destination); logIO('O', '(NGG) ' . $errorString); return new IXR_Error(500, $errorString); } //add to database if it's a new image if (empty($data["overwrite"]) || $data["overwrite"] == false) { $pid_array = nggAdmin::add_Images($gallery->gid, array($filename)); // the first element is our new image id if (count($pid_array) == 1) { $pid = $pid_array[0]; } } //get all information about the image, in the case it's a new one if (!$image) { $image = nggdb::find_image($pid); } // create again the thumbnail, should return a '1' nggAdmin::create_thumbnail($image); return apply_filters('ngg_upload_image', $image); }
/** * nggAdmin::import_gallery() * TODO: Check permission of existing thumb folder & images * * @class nggAdmin * @param string $galleryfolder contains relative path to the gallery itself * @return void */ static function import_gallery($galleryfolder, $gallery_id = NULL) { global $wpdb, $user_ID; // get the current user ID wp_get_current_user(); $created_msg = ''; // remove trailing slash at the end, if somebody use it $galleryfolder = untrailingslashit($galleryfolder); $fs = C_Fs::get_instance(); if (is_null($gallery_id)) { $gallerypath = $fs->join_paths($fs->get_document_root('content'), $galleryfolder); } else { $storage = C_Gallery_Storage::get_instance(); $gallerypath = $storage->get_gallery_abspath($gallery_id); } if (!is_dir($gallerypath)) { nggGallery::show_error(sprintf(__("Directory <strong>%s</strong> doesn`t exist!", 'nggallery'), esc_html($gallerypath))); return; } // read list of images $new_imageslist = nggAdmin::scandir($gallerypath); if (empty($new_imageslist)) { nggGallery::show_message(sprintf(__("Directory <strong>%s</strong> contains no pictures", 'nggallery'), esc_html($gallerypath))); return; } // take folder name as gallery name $galleryname = basename($galleryfolder); $galleryname = apply_filters('ngg_gallery_name', $galleryname); // check for existing gallery folder if (is_null($gallery_id)) { $gallery_id = $wpdb->get_var("SELECT gid FROM {$wpdb->nggallery} WHERE path = '{$galleryfolder}' "); } if (!$gallery_id) { // now add the gallery to the database $gallery_id = nggdb::add_gallery($galleryname, $galleryfolder, '', 0, 0, $user_ID); if (!$gallery_id) { nggGallery::show_error(__('Database error. Could not add gallery!', 'nggallery')); return; } else { do_action('ngg_created_new_gallery', $gallery_id); } $created_msg = sprintf(_n("Gallery <strong>%s</strong> successfully created!", 'Galleries <strong>%s</strong> successfully created!', 1, 'nggallery'), esc_html($galleryname)); } // Look for existing image list $old_imageslist = $wpdb->get_col("SELECT filename FROM {$wpdb->nggpictures} WHERE galleryid = '{$gallery_id}' "); // if no images are there, create empty array if ($old_imageslist == NULL) { $old_imageslist = array(); } // check difference $new_images = array_diff($new_imageslist, $old_imageslist); // all images must be valid files foreach ($new_images as $key => $picture) { // filter function to rename/change/modify image before $picture = apply_filters('ngg_pre_add_new_image', $picture, $gallery_id); $new_images[$key] = $picture; if (!@getimagesize($gallerypath . '/' . $picture)) { unset($new_images[$key]); @unlink($gallerypath . '/' . $picture); } } // add images to database $image_ids = nggAdmin::add_Images($gallery_id, $new_images); do_action('ngg_after_new_images_added', $gallery_id, $image_ids); //add the preview image if needed nggAdmin::set_gallery_preview($gallery_id); // now create thumbnails nggAdmin::do_ajax_operation('create_thumbnail', $image_ids, __('Create new thumbnails', 'nggallery')); //TODO:Message will not shown, because AJAX routine require more time, message should be passed to AJAX $message = $created_msg . sprintf(_n('%s picture successfully added', '%s pictures successfully added', count($image_ids), 'nggallery'), count($image_ids)); $message .= ' [<a href="' . admin_url() . 'admin.php?page=nggallery-manage-gallery&mode=edit&gid=' . $gallery_id . '" >'; $message .= __('Edit gallery', 'nggallery'); $message .= '</a>]'; nggGallery::show_message($message); return; }
function upload_images() { // upload of pictures global $wpdb; // WPMU action if (nggAdmin::check_quota()) { return; } // Images must be an array $imageslist = array(); // get selected gallery $galleryID = (int) $_POST['galleryselect']; if ($galleryID == 0) { nggGallery::show_error(__('No gallery selected !', 'nggallery')); return; } // get the path to the gallery $gallerypath = $wpdb->get_var("SELECT path FROM {$wpdb->nggallery} WHERE gid = '{$galleryID}' "); if (!$gallerypath) { nggGallery::show_error(__('Failure in database, no gallery path set !', 'nggallery')); return; } // read list of images $dirlist = nggAdmin::scandir(WINABSPATH . $gallerypath); foreach ($_FILES as $key => $value) { // look only for uploded files if ($_FILES[$key]['error'] == 0) { $temp_file = $_FILES[$key]['tmp_name']; $filepart = pathinfo(strtolower($_FILES[$key]['name'])); // required until PHP 5.2.0 $filepart['filename'] = substr($filepart["basename"], 0, strlen($filepart["basename"]) - (strlen($filepart["extension"]) + 1)); $filename = sanitize_title($filepart['filename']) . '.' . $filepart['extension']; // check for allowed extension $ext = array('jpeg', 'jpg', 'png', 'gif'); if (!in_array($filepart['extension'], $ext)) { nggGallery::show_error('<strong>' . $_FILES[$key]['name'] . ' </strong>' . __('is no valid image file!', 'nggallery')); continue; } // check if this filename already exist in the folder $i = 0; while (in_array($filename, $dirlist)) { $filename = sanitize_title($filepart['filename']) . '_' . $i++ . '.' . $filepart['extension']; } $dest_file = WINABSPATH . $gallerypath . '/' . $filename; //check for folder permission if (!is_writeable(WINABSPATH . $gallerypath)) { $message = sprintf(__('Unable to write to directory %s. Is this directory writable by the server?', 'nggallery'), WINABSPATH . $gallerypath); nggGallery::show_error($message); return; } // save temp file to gallery if (!@move_uploaded_file($_FILES[$key]['tmp_name'], $dest_file)) { nggGallery::show_error(__('Error, the file could not moved to : ', 'nggallery') . $dest_file); nggAdmin::check_safemode(WINABSPATH . $gallerypath); continue; } if (!nggAdmin::chmod($dest_file)) { nggGallery::show_error(__('Error, the file permissions could not set', 'nggallery')); continue; } // add to imagelist & dirlist $imageslist[] = $filename; $dirlist[] = $filename; } } if (count($imageslist) > 0) { // add images to database $image_ids = nggAdmin::add_Images($galleryID, $imageslist); //create thumbnails nggAdmin::do_ajax_operation('create_thumbnail', $image_ids, __('Create new thumbnails', 'nggallery')); //add the preview image if needed nggAdmin::set_gallery_preview($galleryID); nggGallery::show_message(count($image_ids) . __(' Image(s) successfully added', 'nggallery')); } return; }