/** * Maps 'delete_attachment' to mpp_before_media_delete action * Also, cleans up cover, decrements media count and deletes activities associated * * @param type $media_id * @return type */ public function map_before_delete_attachment_action($media_id) { if (!mpp_is_valid_media($media_id)) { //the attachment is not media return; } //this is just a precaution in case some faulty plugin calls it again //if everything is normal, we don't need to check for this if ($this->is_queued($media_id)) { return; // } //push this media to teh queue $this->add_item($media_id, 'media'); /** * mpp_before_media_delete action fires before WordPress starts deleting an attachment which is a valid media( in MediaPress). * Any plugin utilizing this action can access the fully functional media object by using mpp_get_media() on the passed media id * */ do_action('mpp_before_media_delete', $media_id); $storage_manager = mpp_get_storage_manager($media_id); $storage_manager->delete_media($media_id); //delete if it is set as cover delete_metadata('post', null, '_mpp_cover_id', $media_id, true); // delete all for any posts. delete_metadata('post', null, '_mpp_unpublished_media_id', $media_id, true); // delete all for any posts. // //if media has cover, delete the cover $media = mpp_get_media($media_id); $gallery_id = $media->gallery_id; if (mpp_media_has_cover_image($media_id)) { mpp_delete_media(mpp_get_media_cover_id($media_id)); } if (apply_filters('mpp_cleanup_single_media_on_delete', true, $media_id, $gallery_id)) { mpp_gallery_decrement_media_count($gallery_id); if (mediapress()->is_bp_active()) { //delete all activities related to this media //mpp_media_delete_activities( $media_id ); mpp_delete_activity_for_single_published_media($media_id); //delete all activity meta key where this media is associated mpp_media_delete_activity_meta($media_id); } } return; }
/** * Prepare Media for JSON * this is a copy from send json for attachment, we will improve it in our 1.1 release * @todo refactor * @param type $attachment * @return type */ function mpp_media_to_json($attachment) { if (!($attachment = get_post($attachment))) { return; } if ('attachment' != $attachment->post_type) { return; } //the attachment can be either a media or a cover //in case of media, if it is non photo, we need the thumb.url to point to the cover(or generated cover) //in case of cover, we don't care $media = mpp_get_media($attachment->ID); $meta = wp_get_attachment_metadata($attachment->ID); if (false !== strpos($attachment->post_mime_type, '/')) { list($type, $subtype) = explode('/', $attachment->post_mime_type); } else { list($type, $subtype) = array($attachment->post_mime_type, ''); } $attachment_url = wp_get_attachment_url($attachment->ID); $response = array('id' => $media->id, 'title' => $media->title, 'filename' => wp_basename($attachment->guid), 'url' => $attachment_url, 'link' => mpp_get_media_permalink($media), 'alt' => $media->title, 'author' => $media->user_id, 'description' => $media->description, 'caption' => $media->excerpt, 'name' => $media->slug, 'status' => $media->status, 'parent_id' => $media->gallery_id, 'date' => strtotime($attachment->post_date_gmt) * 1000, 'modified' => strtotime($attachment->post_modified_gmt) * 1000, 'menuOrder' => $attachment->menu_order, 'mime' => $attachment->post_mime_type, 'type' => $media->type, 'subtype' => $subtype, 'dateFormatted' => mysql2date(get_option('date_format'), $attachment->post_date), 'meta' => false); if ($attachment->post_parent) { $post_parent = get_post($attachment->post_parent); $parent_type = get_post_type_object($post_parent->post_type); if ($parent_type && $parent_type->show_ui && current_user_can('edit_post', $attachment->post_parent)) { $response['uploadedToLink'] = get_edit_post_link($attachment->post_parent, 'raw'); } $response['uploadedToTitle'] = $post_parent->post_title ? $post_parent->post_title : __('(no title)'); } $attached_file = get_attached_file($attachment->ID); if (file_exists($attached_file)) { $bytes = filesize($attached_file); $response['filesizeInBytes'] = $bytes; $response['filesizeHumanReadable'] = size_format($bytes); } if ($meta && 'image' === $type) { $sizes = array(); /** This filter is documented in wp-admin/includes/media.php */ $possible_sizes = apply_filters('image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size'))); unset($possible_sizes['full']); // Loop through all potential sizes that may be chosen. Try to do this with some efficiency. // First: run the image_downsize filter. If it returns something, we can use its data. // If the filter does not return something, then image_downsize() is just an expensive // way to check the image metadata, which we do second. foreach ($possible_sizes as $size => $label) { /** This filter is documented in wp-includes/media.php */ if ($downsize = apply_filters('image_downsize', false, $attachment->ID, $size)) { if (!$downsize[3]) { continue; } $sizes[$size] = array('height' => $downsize[2], 'width' => $downsize[1], 'url' => $downsize[0], 'orientation' => $downsize[2] > $downsize[1] ? 'portrait' : 'landscape'); } elseif (isset($meta['sizes'][$size])) { if (!isset($base_url)) { $base_url = str_replace(wp_basename($attachment_url), '', $attachment_url); } // Nothing from the filter, so consult image metadata if we have it. $size_meta = $meta['sizes'][$size]; // We have the actual image size, but might need to further constrain it if content_width is narrower. // Thumbnail, medium, and full sizes are also checked against the site's height/width options. list($width, $height) = image_constrain_size_for_editor($size_meta['width'], $size_meta['height'], $size, 'edit'); $sizes[$size] = array('height' => $height, 'width' => $width, 'url' => $base_url . $size_meta['file'], 'orientation' => $height > $width ? 'portrait' : 'landscape'); } } $sizes['full'] = array('url' => $attachment_url); if (isset($meta['height'], $meta['width'])) { $sizes['full']['height'] = $meta['height']; $sizes['full']['width'] = $meta['width']; $sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape'; } $response = array_merge($response, array('sizes' => $sizes), $sizes['full']); } elseif ($meta && 'video' === $type) { if (isset($meta['width'])) { $response['width'] = (int) $meta['width']; } if (isset($meta['height'])) { $response['height'] = (int) $meta['height']; } } if ($meta && ('audio' === $type || 'video' === $type)) { if (isset($meta['length_formatted'])) { $response['fileLength'] = $meta['length_formatted']; } $response['meta'] = array(); foreach (wp_get_attachment_id3_keys($attachment, 'js') as $key => $label) { $response['meta'][$key] = false; if (!empty($meta[$key])) { $response['meta'][$key] = $meta[$key]; } } $id = mpp_get_media_cover_id($attachment->ID); if (!empty($id)) { list($url, $width, $height) = wp_get_attachment_image_src($id, 'full'); $response['image'] = compact('url', 'width', 'height'); list($url, $width, $height) = wp_get_attachment_image_src($id, 'thumbnail'); $response['thumb'] = compact('url', 'width', 'height'); } else { $url = mpp_get_media_cover_src('thumbnail', $media->id); $width = 48; $height = 64; $response['image'] = compact('url', 'width', 'height'); $response['thumb'] = compact('url', 'width', 'height'); } } if (!in_array($type, array('image', 'audio', 'video'))) { //inject thumbnail $url = mpp_get_media_cover_src('thumbnail', $media->id); $width = 48; $height = 64; $response['image'] = compact('url', 'width', 'height'); $response['thumb'] = compact('url', 'width', 'height'); } return apply_filters('mpp_prepare_media_for_js', $response, $attachment, $meta); }
/** * Check if media has cover set? * * @param type $media * @return type */ function mpp_media_has_cover_image($media = null) { $media = mpp_get_media($media); return mpp_get_media_cover_id($media->id); }
/** * Handles Media Cover deletion * * */ function mpp_action_delete_media_cover() { if (!mpp_is_media_management()) { return; } if (!isset($_REQUEST['mpp-action']) || $_REQUEST['mpp-action'] != 'cover-delete' || empty($_REQUEST['media_id'])) { return; } $media = mpp_get_media(absint($_REQUEST['media_id'])); if (empty($media)) { return; } $referer = $redirect_url = mpp_get_media_edit_url($media); if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'cover-delete')) { //add error message and return back to the old page mpp_add_feedback(__('Action not authorized!', 'mediapress'), 'error'); if ($referer) { mpp_redirect($referer); } return; } //we may want to allow passing of component from the form in future! if (!mpp_user_can_delete_media($media)) { mpp_add_feedback(__("You don't have permission to delete this cover!", 'mediapress'), 'error'); if ($referer) { mpp_redirect($referer); } return; } //we always need to delete this $cover_id = mpp_get_media_cover_id($media->id); mpp_delete_media_cover_id($media->id); mpp_delete_media($cover_id); mpp_add_feedback(__('Cover deleted successfully!', 'mediapress')); //if we are here, delete gallery and redirect to the component base url mpp_redirect($redirect_url); }
public function cover_upload() { check_ajax_referer('mpp_add_media'); //check for the referrer $response = array(); $file = $_FILES; $file_id = '_mpp_file'; //key name in the files array //find the components we are trying to add for $component = $component_id = 0; $context = 'cover'; $gallery_id = absint($_POST['mpp-gallery-id']); $parent_id = absint($_POST['mpp-parent-id']); $parent_type = isset($_POST['mpp-parent-type']) ? trim($_POST['mpp-parent-type']) : 'gallery'; //default upload to gallery cover if (!$gallery_id || !$parent_id) { return; } $gallery = mpp_get_gallery($gallery_id); $component = $gallery->component; $component_id = $gallery->component_id; //get the uploader $uploader = mpp_get_storage_manager(); //should we pass the component? //setup for component //$uploader->setup_for( $component, $component_id ); //check if the server can handle the upload? if (!$uploader->can_handle()) { wp_send_json_error(array('message' => __('Server can not handle this much amount of data. Please upload a smaller file or ask your server administrator to change the settings.', 'mediapress'))); } $media_type = mpp_get_media_type_from_extension(mpp_get_file_extension($file[$file_id]['name'])); //cover is always a photo, if ($media_type != 'photo') { wp_send_json(array('message' => sprintf(__('Please upload a photo. Only <strong>%s</strong> files are allowed!', 'mediapress'), mpp_get_allowed_file_extensions_as_string($media_type)))); } $error = false; //if we are here, all is well :) if (!mpp_user_can_upload($component, $component_id, $gallery)) { wp_send_json_error(array('message' => __("You don't have sufficient permissions to upload.", 'mediapress'))); } //if we are here, we have checked for all the basic errors, so let us just upload now $uploaded = $uploader->upload($file, array('file_id' => $file_id, 'gallery_id' => $gallery_id, 'component' => $component, 'component_id' => $component_id, 'is_cover' => 1)); //upload was succesfull? if (!isset($uploaded['error'])) { //file was uploaded successfully $title = $_FILES[$file_id]['name']; $title_parts = pathinfo($title); $title = trim(substr($title, 0, -(1 + strlen($title_parts['extension'])))); $url = $uploaded['url']; $type = $uploaded['type']; $file = $uploaded['file']; //$title = isset( $_POST['media_title'] ) ? $_POST['media_title'] : ''; $content = isset($_POST['media_description']) ? $_POST['media_description'] : ''; $meta = $uploader->get_meta($uploaded); $title_desc = $this->get_title_desc_from_meta($type, $meta); if (!empty($title_desc)) { if (empty($title) && !empty($title_desc['title'])) { $title = $title_desc['title']; } if (empty($content) && !empty($title_desc['content'])) { $content = $title_desc['content']; } } $status = isset($_POST['media_status']) ? $_POST['media_status'] : ''; if (empty($status) && $gallery) { $status = $gallery->status; //inherit from parent,gallery must have an status } //we may need some more enhancements here if (!$status) { $status = mpp_get_default_status(); } // print_r($upload_info); $is_orphan = 0; $media_data = array('title' => $title, 'description' => $content, 'gallery_id' => $parent_id, 'user_id' => get_current_user_id(), 'is_remote' => false, 'type' => $media_type, 'mime_type' => $type, 'src' => $file, 'url' => $url, 'status' => $status, 'comment_status' => 'open', 'storage_method' => mpp_get_storage_method(), 'component_id' => $component_id, 'component' => $component, 'context' => $context, 'is_orphan' => $is_orphan, 'is_cover' => true); //cover shuld never be recorded as activity add_filter('mpp_do_not_record_add_media_activity', '__return_true'); $id = mpp_add_media($media_data); if ($parent_type == 'gallery') { $old_cover = mpp_get_gallery_cover_id($parent_id); } else { $old_cover = mpp_get_media_cover_id($parent_id); } if ($gallery->type == 'photo') { mpp_gallery_increment_media_count($gallery_id); } else { //mark it as non gallery media mpp_delete_media_meta($id, '_mpp_is_mpp_media'); if ($old_cover) { mpp_delete_media($old_cover); } } mpp_update_media_cover_id($parent_id, $id); $attachment = mpp_media_to_json($id); //$attachment['data']['type_id'] = mpp_get_type_term_id( $gallery->type ); echo json_encode(array('success' => true, 'data' => $attachment)); //wp_send_json_success( array('name'=>'what') ); exit(0); } else { echo json_encode(array('error' => 1, 'message' => $uploaded['error'])); exit(0); } }