/**
  * 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]);
 }