/** * Render the edit ui */ public function displayEditUI($is_partial = 0) { $image_id = esc_html(parse_req('image_id')); $current_preset = esc_html(parse_req('preset')); $partial = parse_req('partial', $is_partial); $size = esc_html(parse_req('size', 'full')); $meta = wp_get_attachment_metadata($image_id); $attrs = wp_get_attachment_image_src($image_id, $size); list($full_src, $full_width, $full_height, $full_cropped) = $attrs; $imgix_settings = []; $presets = get_option('ilab-imgix-presets'); $sizePresets = get_option('ilab-imgix-size-presets'); $presetsUI = $this->buildPresetsUI($image_id, $size); if ($current_preset && $presets && isset($presets[$current_preset])) { $imgix_settings = $presets[$current_preset]['settings']; $full_src = $this->buildImgixImage($image_id, $size, $imgix_settings)[0]; } else { if ($size == 'full') { if (!$imgix_settings) { if (isset($meta['imgix-params'])) { $imgix_settings = $meta['imgix-params']; } } } else { if (isset($meta['imgix-size-params'][$size])) { $imgix_settings = $meta['imgix-size-params'][$size]; } else { if ($presets && $sizePresets && isset($sizePresets[$size]) && isset($presets[$sizePresets[$size]])) { $imgix_settings = $presets[$sizePresets[$size]]['settings']; if (!$current_preset) { $current_preset = $sizePresets[$size]; } } } if (!$imgix_settings && isset($meta['imgix-params'])) { $imgix_settings = $meta['imgix-params']; } } } foreach ($this->paramPropsByType['media-chooser'] as $key => $info) { if (isset($imgix_settings[$key]) && !empty($imgix_settings[$key])) { $media_id = $imgix_settings[$key]; $imgix_settings[$key . '_url'] = wp_get_attachment_url($media_id); } } if (current_user_can('edit_post', $image_id)) { if (!$partial) { echo ILabMediaToolView::render_view('imgix/ilab-imgix-ui.php', ['partial' => $partial, 'image_id' => $image_id, 'modal_id' => gen_uuid(8), 'size' => $size, 'sizes' => ilab_get_image_sizes(), 'meta' => $meta, 'full_width' => $full_width, 'full_height' => $full_height, 'tool' => $this, 'settings' => $imgix_settings, 'src' => $full_src, 'presets' => $presetsUI, 'currentPreset' => $current_preset, 'params' => $this->toolInfo['settings']['params'], 'paramProps' => $this->paramProps]); } else { json_response(['status' => 'ok', 'image_id' => $image_id, 'size' => $size, 'settings' => $imgix_settings, 'src' => $full_src, 'presets' => $presetsUI, 'currentPreset' => $current_preset, 'paramProps' => $this->paramProps]); } } die; }
/** * Perform the actual crop */ public function performCrop() { $req_post = esc_html($_POST['post']); if (!current_user_can('edit_post', $req_post)) { json_response(['status' => 'error', 'message' => 'You are not strong enough, smart enough or fast enough.']); } $size = esc_html($_POST['size']); $crop_width = esc_html($_POST['width']); $crop_height = esc_html($_POST['height']); $crop_x = esc_html($_POST['x']); $crop_y = esc_html($_POST['y']); $img_path = _load_image_to_edit_path($req_post); $meta = wp_get_attachment_metadata($req_post); $img_editor = wp_get_image_editor($img_path); if (is_wp_error($img_editor)) { json_response(['status' => 'error', 'message' => 'Could not create image editor.']); } $crop_size = ilab_get_image_sizes($size); $dest_width = $crop_size['width']; $dest_height = $crop_size['height']; $img_editor->crop($crop_x, $crop_y, $crop_width, $crop_height, $dest_width, $dest_height, false); $img_editor->set_quality(get_option('ilab-media-crop-quality', 92)); $save_path_parts = pathinfo($img_path); $path_url = parse_url($img_path); if ($path_url !== false && isset($path_url['scheme'])) { $parsed_path = pathinfo($path_url['path']); $img_subpath = apply_filters('ilab-s3-process-file-name', $parsed_path['dirname']); $upload_dir = wp_upload_dir(); $save_path = $upload_dir['basedir'] . $img_subpath; @mkdir($save_path, 0777, true); } else { $save_path = $save_path_parts['dirname']; } $extension = $save_path_parts['extension']; $filename = preg_replace('#^(IL[0-9-]*)#', '', $save_path_parts['filename']); $filename = 'IL' . date("YmdHis") . '-' . $filename . '-' . $dest_width . 'x' . $dest_height . '.' . $extension; if (isset($meta['sizes'][$size])) { $meta['sizes'][$size]['file'] = $filename; $meta['sizes'][$size]['width'] = $dest_width; $meta['sizes'][$size]['height'] = $dest_height; $meta['sizes'][$size]['crop'] = ['x' => round($crop_x), 'y' => round($crop_y), 'w' => round($crop_width), 'h' => round($crop_height)]; } else { $meta['sizes'][$size] = array('file' => $filename, 'width' => $dest_width, 'height' => $dest_height, 'mime-type' => $meta['sizes']['thumbnail']['mime-type'], 'crop' => ['x' => round($crop_x), 'y' => round($crop_y), 'w' => round($crop_width), 'h' => round($crop_height)]); } $img_editor->save($save_path . '/' . $filename); // Let S3 upload the new crop $processedSize = apply_filters('ilab-s3-process-crop', $size, $filename, $meta['sizes'][$size]); if ($processedSize) { $meta['sizes'][$size] = $processedSize; } wp_update_attachment_metadata($req_post, $meta); $attrs = wp_get_attachment_image_src($req_post, $size); list($full_src, $full_width, $full_height, $full_cropped) = $attrs; json_response(['status' => 'ok', 'src' => $full_src, 'width' => $full_width, 'height' => $full_height]); }