wp/wp-admin/includes/image-edit.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * WordPress Image Editor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * @subpackage Administration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
function wp_image_editor($post_id, $msg = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
	$nonce = wp_create_nonce("image_editor-$post_id");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
	$meta = wp_get_attachment_metadata($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
	$thumb = image_get_intermediate_size($post_id, 'thumbnail');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
	$sub_sizes = isset($meta['sizes']) && is_array($meta['sizes']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
	$note = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
	if ( isset( $meta['width'], $meta['height'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
		$big = max( $meta['width'], $meta['height'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
		die( __('Image data does not exist. Please re-upload the image.') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
	$sizer = $big > 400 ? 400 / $big : 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
	$backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
	$can_restore = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
	if ( ! empty( $backup_sizes ) && isset( $backup_sizes['full-orig'], $meta['file'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		$can_restore = $backup_sizes['full-orig']['file'] != basename( $meta['file'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
	if ( $msg ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		if ( isset($msg->error) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
			$note = "<div class='error'><p>$msg->error</p></div>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
		elseif ( isset($msg->msg) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
			$note = "<div class='updated'><p>$msg->msg</p></div>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
	<div class="imgedit-wrap">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	<?php echo $note; ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
	<table id="imgedit-panel-<?php echo $post_id; ?>"><tbody>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
	<tr><td>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
	<div class="imgedit-menu">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		<div onclick="imageEdit.crop(<?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-crop disabled" title="<?php esc_attr_e( 'Crop' ); ?>"></div><?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
	// On some setups GD library does not provide imagerotate() - Ticket #11536
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
	if ( wp_image_editor_supports( array( 'mime_type' => get_post_mime_type( $post_id ), 'methods' => array( 'rotate' ) ) ) ) { ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		<div class="imgedit-rleft"  onclick="imageEdit.rotate( 90, <?php echo "$post_id, '$nonce'"; ?>, this)" title="<?php esc_attr_e( 'Rotate counter-clockwise' ); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		<div class="imgedit-rright" onclick="imageEdit.rotate(-90, <?php echo "$post_id, '$nonce'"; ?>, this)" title="<?php esc_attr_e( 'Rotate clockwise' ); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
<?php } else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
		$note_no_rotate = esc_attr__('Image rotation is not supported by your web host.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
	    <div class="imgedit-rleft disabled"  title="<?php echo $note_no_rotate; ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
	    <div class="imgedit-rright disabled" title="<?php echo $note_no_rotate; ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
<?php } ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		<div onclick="imageEdit.flip(1, <?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-flipv" title="<?php esc_attr_e( 'Flip vertically' ); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		<div onclick="imageEdit.flip(2, <?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-fliph" title="<?php esc_attr_e( 'Flip horizontally' ); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		<div id="image-undo-<?php echo $post_id; ?>" onclick="imageEdit.undo(<?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-undo disabled" title="<?php esc_attr_e( 'Undo' ); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		<div id="image-redo-<?php echo $post_id; ?>" onclick="imageEdit.redo(<?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-redo disabled" title="<?php esc_attr_e( 'Redo' ); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		<br class="clear" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	<input type="hidden" id="imgedit-sizer-<?php echo $post_id; ?>" value="<?php echo $sizer; ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
	<input type="hidden" id="imgedit-minthumb-<?php echo $post_id; ?>" value="<?php echo ( get_option('thumbnail_size_w') . ':' . get_option('thumbnail_size_h') ); ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	<input type="hidden" id="imgedit-history-<?php echo $post_id; ?>" value="" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
	<input type="hidden" id="imgedit-undone-<?php echo $post_id; ?>" value="0" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
	<input type="hidden" id="imgedit-selection-<?php echo $post_id; ?>" value="" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	<input type="hidden" id="imgedit-x-<?php echo $post_id; ?>" value="<?php echo isset( $meta['width'] ) ? $meta['width'] : 0; ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	<input type="hidden" id="imgedit-y-<?php echo $post_id; ?>" value="<?php echo isset( $meta['height'] ) ? $meta['height'] : 0; ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
	<div id="imgedit-crop-<?php echo $post_id; ?>" class="imgedit-crop-wrap">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
	<img id="image-preview-<?php echo $post_id; ?>" onload="imageEdit.imgLoaded('<?php echo $post_id; ?>')" src="<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>?action=imgedit-preview&amp;_ajax_nonce=<?php echo $nonce; ?>&amp;postid=<?php echo $post_id; ?>&amp;rand=<?php echo rand(1, 99999); ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
	<div class="imgedit-submit">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
		<input type="button" onclick="imageEdit.close(<?php echo $post_id; ?>, 1)" class="button" value="<?php esc_attr_e( 'Cancel' ); ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
		<input type="button" onclick="imageEdit.save(<?php echo "$post_id, '$nonce'"; ?>)" disabled="disabled" class="button-primary imgedit-submit-btn" value="<?php esc_attr_e( 'Save' ); ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
	</td>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
	<td class="imgedit-settings">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
	<div class="imgedit-group">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
	<div class="imgedit-group-top">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><strong><?php _e('Scale Image'); ?></strong></a>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		<div class="imgedit-help">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
		<p><?php _e('You can proportionally scale the original image. For best results the scaling should be done before performing any other operations on it like crop, rotate, etc. Note that images can only be scaled down, not up.'); ?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		<?php if ( isset( $meta['width'], $meta['height'] ) ): ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		<p><?php printf( __('Original dimensions %s'), $meta['width'] . '&times;' . $meta['height'] ); ?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
		<?php endif ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		<div class="imgedit-submit">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
		<span class="nowrap"><input type="text" id="imgedit-scale-width-<?php echo $post_id; ?>" onkeyup="imageEdit.scaleChanged(<?php echo $post_id; ?>, 1)" onblur="imageEdit.scaleChanged(<?php echo $post_id; ?>, 1)" style="width:4em;" value="<?php echo isset( $meta['width'] ) ? $meta['width'] : 0; ?>" />&times;<input type="text" id="imgedit-scale-height-<?php echo $post_id; ?>" onkeyup="imageEdit.scaleChanged(<?php echo $post_id; ?>, 0)" onblur="imageEdit.scaleChanged(<?php echo $post_id; ?>, 0)" style="width:4em;" value="<?php echo isset( $meta['height'] ) ? $meta['height'] : 0; ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
		<span class="imgedit-scale-warn" id="imgedit-scale-warn-<?php echo $post_id; ?>">!</span></span>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
		<input type="button" onclick="imageEdit.action(<?php echo "$post_id, '$nonce'"; ?>, 'scale')" class="button-primary" value="<?php esc_attr_e( 'Scale' ); ?>" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
		</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
		</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
<?php if ( $can_restore ) { ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
	<div class="imgedit-group-top">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><strong><?php _e('Restore Original Image'); ?></strong></a>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		<div class="imgedit-help">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		<p><?php _e('Discard any changes and restore the original image.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
		if ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
			echo ' '.__('Previously edited copies of the image will not be deleted.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		<div class="imgedit-submit">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		<input type="button" onclick="imageEdit.action(<?php echo "$post_id, '$nonce'"; ?>, 'restore')" class="button-primary" value="<?php esc_attr_e( 'Restore image' ); ?>" <?php echo $can_restore; ?> />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
<?php } ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
	<div class="imgedit-group">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
	<div class="imgedit-group-top">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		<strong><?php _e('Image Crop'); ?></strong>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><?php _e('(help)'); ?></a>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		<div class="imgedit-help">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		<p><?php _e('The image can be cropped by clicking on it and dragging to select the desired part. While dragging the dimensions of the selection are displayed below.'); ?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		<p><strong><?php _e('Crop Aspect Ratio'); ?></strong><br />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		<?php _e('You can specify the crop selection aspect ratio then hold down the Shift key while dragging to lock it. The values can be 1:1 (square), 4:3, 16:9, etc. If there is a selection, specifying aspect ratio will set it immediately.'); ?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
		<p><strong><?php _e('Crop Selection'); ?></strong><br />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		<?php _e('Once started, the selection can be adjusted by entering new values (in pixels). Note that these values are scaled to approximately match the original image dimensions. The minimum selection size equals the thumbnail size as set in the Media settings.'); ?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
		</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
	<p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
		<?php _e('Aspect ratio:'); ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
		<span  class="nowrap">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		<input type="text" id="imgedit-crop-width-<?php echo $post_id; ?>" onkeyup="imageEdit.setRatioSelection(<?php echo $post_id; ?>, 0, this)" style="width:3em;" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
		<input type="text" id="imgedit-crop-height-<?php echo $post_id; ?>" onkeyup="imageEdit.setRatioSelection(<?php echo $post_id; ?>, 1, this)" style="width:3em;" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		</span>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	</p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
	<p id="imgedit-crop-sel-<?php echo $post_id; ?>">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		<?php _e('Selection:'); ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
		<span  class="nowrap">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		<input type="text" id="imgedit-sel-width-<?php echo $post_id; ?>" onkeyup="imageEdit.setNumSelection(<?php echo $post_id; ?>)" style="width:4em;" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
		:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
		<input type="text" id="imgedit-sel-height-<?php echo $post_id; ?>" onkeyup="imageEdit.setNumSelection(<?php echo $post_id; ?>)" style="width:4em;" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
		</span>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
	</p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
	<?php if ( $thumb && $sub_sizes ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		$thumb_img = wp_constrain_dimensions( $thumb['width'], $thumb['height'], 160, 120 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
	?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
	<div class="imgedit-group imgedit-applyto">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
	<div class="imgedit-group-top">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
		<strong><?php _e('Thumbnail Settings'); ?></strong>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><?php _e('(help)'); ?></a>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
		<p class="imgedit-help"><?php _e('The thumbnail image can be cropped differently. For example it can be square or contain only a portion of the original image to showcase it better. Here you can select whether to apply changes to all image sizes or make the thumbnail different.'); ?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
	<p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
		<img src="<?php echo $thumb['url']; ?>" width="<?php echo $thumb_img[0]; ?>" height="<?php echo $thumb_img[1]; ?>" class="imgedit-size-preview" alt="" /><br /><?php _e('Current thumbnail'); ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
	</p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
	<p id="imgedit-save-target-<?php echo $post_id; ?>">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		<strong><?php _e('Apply changes to:'); ?></strong><br />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
		<label class="imgedit-label">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="all" checked="checked" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
		<?php _e('All image sizes'); ?></label>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
		<label class="imgedit-label">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="thumbnail" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		<?php _e('Thumbnail'); ?></label>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
		<label class="imgedit-label">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="nothumb" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		<?php _e('All sizes except thumbnail'); ?></label>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
	</p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
	<?php } ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
	</td></tr>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
	</tbody></table>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	<div class="imgedit-wait" id="imgedit-wait-<?php echo $post_id; ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	<script type="text/javascript">jQuery( function() { imageEdit.init(<?php echo $post_id; ?>); });</script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
	<div class="hidden" id="imgedit-leaving-<?php echo $post_id; ?>"><?php _e("There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor."); ?></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
 * Streams image in WP_Image_Editor to browser.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
 * Provided for backcompat reasons
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
 * @param WP_Image_Editor $image
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
 * @param string $mime_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
 * @param int $post_id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
 * @return boolean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
function wp_stream_image( $image, $mime_type, $post_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
	if ( $image instanceof WP_Image_Editor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		$image = apply_filters('image_editor_save_pre', $image, $post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		if ( is_wp_error( $image->stream( $mime_type ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
		_deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
		$image = apply_filters('image_save_pre', $image, $post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
		switch ( $mime_type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
			case 'image/jpeg':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
				header( 'Content-Type: image/jpeg' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
				return imagejpeg( $image, null, 90 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
			case 'image/png':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
				header( 'Content-Type: image/png' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
				return imagepng( $image );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
			case 'image/gif':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
				header( 'Content-Type: image/gif' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
				return imagegif( $image );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
 * Saves Image to File
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
 * @param string $filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
 * @param WP_Image_Editor $image
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
 * @param string $mime_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
 * @param int $post_id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
 * @return boolean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
function wp_save_image_file( $filename, $image, $mime_type, $post_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
	if ( $image instanceof WP_Image_Editor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
		$image = apply_filters('image_editor_save_pre', $image, $post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
		$saved = apply_filters('wp_save_image_editor_file', null, $filename, $image, $mime_type, $post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
		if ( null !== $saved )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
			return $saved;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
		return $image->save( $filename, $mime_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
		_deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
		$image = apply_filters('image_save_pre', $image, $post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
		$saved = apply_filters('wp_save_image_file', null, $filename, $image, $mime_type, $post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
		if ( null !== $saved )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			return $saved;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		switch ( $mime_type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
			case 'image/jpeg':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
				return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
			case 'image/png':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
				return imagepng( $image, $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
			case 'image/gif':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
				return imagegif( $image, $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
function _image_get_preview_ratio($w, $h) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
	$max = max($w, $h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
	return $max > 400 ? (400 / $max) : 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
// @TODO: Returns GD resource, but is NOT public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
function _rotate_image_resource($img, $angle) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
	_deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::rotate' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
	if ( function_exists('imagerotate') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
		$rotated = imagerotate($img, $angle, 0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
		if ( is_resource($rotated) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
			imagedestroy($img);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
			$img = $rotated;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
	return $img;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
 * @TODO: Only used within image_edit_apply_changes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
 *		  and receives/returns GD Resource.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
 *		  Consider removal.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
 * @param GD_Resource $img
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
 * @param boolean $horz
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
 * @param boolean $vert
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
 * @return GD_Resource
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
function _flip_image_resource($img, $horz, $vert) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
	_deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::flip' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
	$w = imagesx($img);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
	$h = imagesy($img);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
	$dst = wp_imagecreatetruecolor($w, $h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
	if ( is_resource($dst) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
		$sx = $vert ? ($w - 1) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
		$sy = $horz ? ($h - 1) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		$sw = $vert ? -$w : $w;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		$sh = $horz ? -$h : $h;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
		if ( imagecopyresampled($dst, $img, 0, 0, $sx, $sy, $w, $h, $sw, $sh) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
			imagedestroy($img);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
			$img = $dst;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
	return $img;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
 * @TODO: Only used within image_edit_apply_changes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
 *		  and receives/returns GD Resource.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
 *		  Consider removal.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
 * @param GD_Resource $img
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
 * @param float $x
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
 * @param float $y
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
 * @param float $w
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
 * @param float $h
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
 * @return GD_Resource
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
function _crop_image_resource($img, $x, $y, $w, $h) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
	$dst = wp_imagecreatetruecolor($w, $h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
	if ( is_resource($dst) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
		if ( imagecopy($dst, $img, 0, 0, $x, $y, $w, $h) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
			imagedestroy($img);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			$img = $dst;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
	return $img;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
 * Performs group of changes on Editor specified.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
 * @param WP_Image_Editor $image
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
 * @param type $changes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
 * @return WP_Image_Editor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
function image_edit_apply_changes( $image, $changes ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
	if ( is_resource( $image ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
		_deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
	if ( !is_array($changes) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
		return $image;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
	// expand change operations
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
	foreach ( $changes as $key => $obj ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
		if ( isset($obj->r) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			$obj->type = 'rotate';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
			$obj->angle = $obj->r;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
			unset($obj->r);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
		} elseif ( isset($obj->f) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			$obj->type = 'flip';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
			$obj->axis = $obj->f;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			unset($obj->f);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
		} elseif ( isset($obj->c) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
			$obj->type = 'crop';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
			$obj->sel = $obj->c;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
			unset($obj->c);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		$changes[$key] = $obj;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
	// combine operations
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
	if ( count($changes) > 1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
		$filtered = array($changes[0]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
		for ( $i = 0, $j = 1; $j < count($changes); $j++ ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			$combined = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
			if ( $filtered[$i]->type == $changes[$j]->type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
				switch ( $filtered[$i]->type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
					case 'rotate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
						$filtered[$i]->angle += $changes[$j]->angle;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
						$combined = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
					case 'flip':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
						$filtered[$i]->axis ^= $changes[$j]->axis;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
						$combined = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
			if ( !$combined )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
				$filtered[++$i] = $changes[$j];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
		$changes = $filtered;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
		unset($filtered);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
	// image resource before applying the changes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
	if ( $image instanceof WP_Image_Editor )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
		$image = apply_filters('wp_image_editor_before_change', $image, $changes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
	elseif ( is_resource( $image ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
		$image = apply_filters('image_edit_before_change', $image, $changes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
	foreach ( $changes as $operation ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
		switch ( $operation->type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
			case 'rotate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
				if ( $operation->angle != 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
					if ( $image instanceof WP_Image_Editor )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
						$image->rotate( $operation->angle );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
						$image = _rotate_image_resource( $image, $operation->angle );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
			case 'flip':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
				if ( $operation->axis != 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
					if ( $image instanceof WP_Image_Editor )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
						$image->flip( ($operation->axis & 1) != 0, ($operation->axis & 2) != 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
						$image = _flip_image_resource( $image, ( $operation->axis & 1 ) != 0, ( $operation->axis & 2 ) != 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
			case 'crop':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
				$sel = $operation->sel;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
				if ( $image instanceof WP_Image_Editor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
					$size = $image->get_size();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
					$w = $size['width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
					$h = $size['height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
					$scale = 1 / _image_get_preview_ratio( $w, $h ); // discard preview scaling
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
					$image->crop( $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
					$scale = 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // discard preview scaling
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
					$image = _crop_image_resource( $image, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
	return $image;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
 * Streams image in post to browser, along with enqueued changes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
 * in $_REQUEST['history']
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
 * @param int $post_id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
 * @return boolean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
function stream_preview_image( $post_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
	$post = get_post( $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
	@ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
	$img = wp_get_image_editor( _load_image_to_edit_path( $post_id ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
    if ( is_wp_error( $img ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
        return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
	$changes = !empty($_REQUEST['history']) ? json_decode( wp_unslash($_REQUEST['history']) ) : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
	if ( $changes )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
		$img = image_edit_apply_changes( $img, $changes );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
	// scale the image
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
	$size = $img->get_size();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
	$w = $size['width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
	$h = $size['height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
	$ratio = _image_get_preview_ratio( $w, $h );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
	$w2 = max ( 1, $w * $ratio );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
	$h2 = max ( 1, $h * $ratio );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
	if ( is_wp_error( $img->resize( $w2, $h2 ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
	return wp_stream_image( $img, $post->post_mime_type, $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
function wp_restore_image($post_id) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
	$meta = wp_get_attachment_metadata($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
	$file = get_attached_file($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
	$backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
	$restored = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
	$msg = new stdClass;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
	if ( !is_array($backup_sizes) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
		$msg->error = __('Cannot load image metadata.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
		return $msg;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
	$parts = pathinfo($file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
	$suffix = time() . rand(100, 999);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
	$default_sizes = get_intermediate_image_sizes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
	if ( isset($backup_sizes['full-orig']) && is_array($backup_sizes['full-orig']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
		$data = $backup_sizes['full-orig'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
		if ( $parts['basename'] != $data['file'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
			if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
				// delete only if it's edited image
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
				if ( preg_match('/-e[0-9]{13}\./', $parts['basename']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
					/** This filter is documented in wp-admin/custom-header.php */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
					$delpath = apply_filters('wp_delete_file', $file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
					@unlink($delpath);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
			} elseif ( isset( $meta['width'], $meta['height'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
				$backup_sizes["full-$suffix"] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $parts['basename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
		$restored_file = path_join($parts['dirname'], $data['file']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
		$restored = update_attached_file($post_id, $restored_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
		$meta['file'] = _wp_relative_upload_path( $restored_file );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
		$meta['width'] = $data['width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
		$meta['height'] = $data['height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
	foreach ( $default_sizes as $default_size ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
		if ( isset($backup_sizes["$default_size-orig"]) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
			$data = $backup_sizes["$default_size-orig"];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
			if ( isset($meta['sizes'][$default_size]) && $meta['sizes'][$default_size]['file'] != $data['file'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
				if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
					// delete only if it's edited image
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
					if ( preg_match('/-e[0-9]{13}-/', $meta['sizes'][$default_size]['file']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
						/** This filter is documented in wp-admin/custom-header.php */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
						$delpath = apply_filters( 'wp_delete_file', path_join($parts['dirname'], $meta['sizes'][$default_size]['file']) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
						@unlink($delpath);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
					$backup_sizes["$default_size-{$suffix}"] = $meta['sizes'][$default_size];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			$meta['sizes'][$default_size] = $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
			unset($meta['sizes'][$default_size]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
	if ( !wp_update_attachment_metadata($post_id, $meta) || !update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
		$msg->error = __('Cannot save image metadata.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
		return $msg;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
	if ( !$restored )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
		$msg->error = __('Image metadata is inconsistent.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
		$msg->msg = __('Image restored successfully.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
	return $msg;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
 * Saves image to post along with enqueued changes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
 * in $_REQUEST['history']
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
 * @param int $post_id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
 * @return \stdClass
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
function wp_save_image( $post_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
	$return = new stdClass;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
	$success = $delete = $scaled = $nocrop = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
	$post = get_post( $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
	$img = wp_get_image_editor( _load_image_to_edit_path( $post_id, 'full' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
	if ( is_wp_error( $img ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
		$return->error = esc_js( __('Unable to create new image.') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
	$fwidth = !empty($_REQUEST['fwidth']) ? intval($_REQUEST['fwidth']) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
	$fheight = !empty($_REQUEST['fheight']) ? intval($_REQUEST['fheight']) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
	$target = !empty($_REQUEST['target']) ? preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['target']) : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
	$scale = !empty($_REQUEST['do']) && 'scale' == $_REQUEST['do'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
	if ( $scale && $fwidth > 0 && $fheight > 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
		$size = $img->get_size();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
		$sX = $size['width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
		$sY = $size['height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
		// check if it has roughly the same w / h ratio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
		$diff = round($sX / $sY, 2) - round($fwidth / $fheight, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
		if ( -0.1 < $diff && $diff < 0.1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
			// scale the full size image
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			if ( $img->resize( $fwidth, $fheight ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
				$scaled = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
		if ( !$scaled ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
			$return->error = esc_js( __('Error while saving the scaled image. Please reload the page and try again.') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
			return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
	} elseif ( !empty($_REQUEST['history']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
		$changes = json_decode( wp_unslash($_REQUEST['history']) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
		if ( $changes )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
			$img = image_edit_apply_changes($img, $changes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
		$return->error = esc_js( __('Nothing to save, the image has not changed.') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
	$meta = wp_get_attachment_metadata($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
	$backup_sizes = get_post_meta( $post->ID, '_wp_attachment_backup_sizes', true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
	if ( !is_array($meta) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
		$return->error = esc_js( __('Image data does not exist. Please re-upload the image.') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
	if ( !is_array($backup_sizes) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
		$backup_sizes = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
	// generate new filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
	$path = get_attached_file($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
	$path_parts = pathinfo( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
	$filename = $path_parts['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
	$suffix = time() . rand(100, 999);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
	if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE &&
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
		isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
		if ( 'thumbnail' == $target )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
			$new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
			$new_path = $path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
		while( true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
			$filename = preg_replace( '/-e([0-9]+)$/', '', $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
			$filename .= "-e{$suffix}";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
			$new_filename = "{$filename}.{$path_parts['extension']}";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
			$new_path = "{$path_parts['dirname']}/$new_filename";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
			if ( file_exists($new_path) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
				$suffix++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
	// save the full-size file, also needed to create sub-sizes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
	if ( !wp_save_image_file($new_path, $img, $post->post_mime_type, $post_id) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
		$return->error = esc_js( __('Unable to save the image.') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
	if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
		$tag = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
		if ( isset($backup_sizes['full-orig']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
			if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
				$tag = "full-$suffix";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
			$tag = 'full-orig';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
		if ( $tag )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
			$backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $path_parts['basename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
		$success = update_attached_file( $post_id, $new_path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
		$meta['file'] = _wp_relative_upload_path( $new_path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
		$size = $img->get_size();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
		$meta['width'] = $size['width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
		$meta['height'] = $size['height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
		if ( $success && ('nothumb' == $target || 'all' == $target) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
			$sizes = get_intermediate_image_sizes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
			if ( 'nothumb' == $target )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
				$sizes = array_diff( $sizes, array('thumbnail') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
		$return->fw = $meta['width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
		$return->fh = $meta['height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
	} elseif ( 'thumbnail' == $target ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
		$sizes = array( 'thumbnail' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
		$success = $delete = $nocrop = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
	if ( isset( $sizes ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
		$_sizes = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
		foreach ( $sizes as $size ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
			$tag = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
			if ( isset( $meta['sizes'][$size] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
				if ( isset($backup_sizes["$size-orig"]) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
					if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes["$size-orig"]['file'] != $meta['sizes'][$size]['file'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
						$tag = "$size-$suffix";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
					$tag = "$size-orig";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
				if ( $tag )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
					$backup_sizes[$tag] = $meta['sizes'][$size];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
			$crop = $nocrop ? false : get_option("{$size}_crop");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
			$_sizes[ $size ] = array( 'width' => get_option("{$size}_size_w"), 'height' => get_option("{$size}_size_h"), 'crop' => $crop );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
		$meta['sizes'] = array_merge( $meta['sizes'], $img->multi_resize( $_sizes ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
	unset( $img );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
	if ( $success ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
		wp_update_attachment_metadata( $post_id, $meta );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
		update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
		if ( $target == 'thumbnail' || $target == 'all' || $target == 'full' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
			// Check if it's an image edit from attachment edit screen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
			if ( ! empty( $_REQUEST['context'] ) && 'edit-attachment' == $_REQUEST['context'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
				$thumb_url = wp_get_attachment_image_src( $post_id, array( 900, 600 ), true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
				$return->thumbnail = $thumb_url[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
				$file_url = wp_get_attachment_url($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
				if ( $thumb = $meta['sizes']['thumbnail'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
					$return->thumbnail = path_join( dirname($file_url), $thumb['file'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
					$return->thumbnail = "$file_url?w=128&h=128";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
		$delete = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
	if ( $delete ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
		/** This filter is documented in wp-admin/custom-header.php */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
		$delpath = apply_filters('wp_delete_file', $new_path);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
		@unlink( $delpath );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
	$return->msg = esc_js( __('Image saved') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
	return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
}