예제 #1
0
 function wr2x_vt_resize($file_path, $width, $height, $newfile)
 {
     $orig_size = getimagesize($file_path);
     $image_src[0] = $file_path;
     $image_src[1] = $orig_size[0];
     $image_src[2] = $orig_size[1];
     $file_info = pathinfo($file_path);
     $extension = '.' . $file_info['extension'];
     $no_ext_path = $file_info['dirname'] . '/' . $file_info['filename'];
     $cropped_img_path = $no_ext_path . '-' . $width . 'x' . $height . "-tmp" . $extension;
     $image = wp_get_image_editor($file_path);
     $image->resize($width, $height, true);
     $quality = wr2x_getoption("image_quality", "wr2x_advanced", "80");
     if (is_numeric($quality)) {
         $image->set_quality(intval($quality));
     }
     $image->save($cropped_img_path);
     if (rename($cropped_img_path, $newfile)) {
         $cropped_img_path = $newfile;
     }
     $new_img_size = getimagesize($cropped_img_path);
     $new_img = str_replace(basename($image_src[0]), basename($cropped_img_path), $image_src[0]);
     $vt_image = array('url' => $new_img, 'width' => $new_img_size[0], 'height' => $new_img_size[1]);
     return $vt_image;
 }
예제 #2
0
/**
 *
 * SUPPORT FOR WP 4.4
 *
 */
function wr2x_wp_calculate_image_srcset($srcset, $size)
{
    if (wr2x_getoption("disable_responsive", "wr2x_basics", false)) {
        return null;
    }
    $method = wr2x_getoption("method", "wr2x_advanced", 'Picturefill');
    if ($method == "none") {
        return $srcset;
    }
    $count = 0;
    $total = 0;
    $retinized_srcset = $srcset;
    if (empty($srcset)) {
        return $srcset;
    }
    foreach ($srcset as $s => $cfg) {
        $total++;
        $retina = wr2x_get_retina_from_url($cfg['url']);
        if (!empty($retina)) {
            $count++;
            $retinized_srcset[(int) $s * 2] = array('url' => $retina, 'descriptor' => 'w', 'value' => (int) $s * 2);
        }
    }
    wr2x_log("WP's srcset: " . $count . " retina files added out of " . $total . " image sizes");
    return $retinized_srcset;
}
예제 #3
0
function wr2x_generate_rewrite_rules($wp_rewrite, $flush = false)
{
    global $wp_rewrite;
    $method = wr2x_getoption("method", "wr2x_advanced", "retina.js");
    if ($method == "Retina-Images") {
        // MODIFICATION: docwhat
        // get_home_url() -> trailingslashit(site_url())
        // REFERENCE: http://wordpress.org/support/topic/plugin-wp-retina-2x-htaccess-generated-with-incorrect-rewriterule
        // MODIFICATION BY h4ir9
        // .*\.(jpg|jpeg|gif|png|bmp) -> (.+.(?:jpe?g|gif|png))
        // REFERENCE: http://wordpress.org/support/topic/great-but-needs-a-little-update
        $handlerurl = str_replace(trailingslashit(site_url()), '', plugins_url('wr2x_image.php', __FILE__));
        add_rewrite_rule('(.+.(?:jpe?g|gif|png))', $handlerurl, 'top');
    }
    if ($flush == true) {
        $wp_rewrite->flush_rules();
    }
}
 function wr2x_vt_resize($file_path, $width, $height, $crop, $newfile, $customCrop = false)
 {
     $crop_params = $crop == '1' ? true : $crop;
     $orig_size = getimagesize($file_path);
     $image_src[0] = $file_path;
     $image_src[1] = $orig_size[0];
     $image_src[2] = $orig_size[1];
     $file_info = pathinfo($file_path);
     $newfile_info = pathinfo($newfile);
     $extension = '.' . $newfile_info['extension'];
     $no_ext_path = $file_info['dirname'] . '/' . $file_info['filename'];
     $cropped_img_path = $no_ext_path . '-' . $width . 'x' . $height . "-tmp" . $extension;
     $image = wp_get_image_editor($file_path);
     if (is_wp_error($image)) {
         wr2x_log("Resize failure: " . $image->get_error_message());
         error_log("Resize failure: " . $image->get_error_message());
         return null;
     }
     // Resize or use Custom Crop
     if (!$customCrop) {
         $image->resize($width, $height, $crop_params);
     } else {
         $image->crop($customCrop['x'] * $customCrop['scale'], $customCrop['y'] * $customCrop['scale'], $customCrop['w'] * $customCrop['scale'], $customCrop['h'] * $customCrop['scale'], $width, $height, false);
     }
     $quality = wr2x_getoption("image_quality", "wr2x_advanced", "80");
     if (is_numeric($quality)) {
         $image->set_quality(intval($quality));
     }
     $saved = $image->save($cropped_img_path);
     if (rename($saved['path'], $newfile)) {
         $cropped_img_path = $newfile;
     } else {
         trigger_error("Retina: Could not move " . $saved['path'] . " to " . $newfile . ".", E_WARNING);
         error_log("Retina: Could not move " . $saved['path'] . " to " . $newfile . ".");
         return null;
     }
     $new_img_size = getimagesize($cropped_img_path);
     $new_img = str_replace(basename($image_src[0]), basename($cropped_img_path), $image_src[0]);
     $vt_image = array('url' => $new_img, 'width' => $new_img_size[0], 'height' => $new_img_size[1]);
     return $vt_image;
 }
예제 #5
0
/**
 *
 * LOAD SCRIPTS IF REQUIRED
 *
 */
function wr2x_wp_enqueue_scripts()
{
    global $wr2x_version, $wr2x_retinajs, $wr2x_retina_image, $wr2x_picturefill, $wr2x_lazysizes;
    $method = wr2x_getoption("method", "wr2x_advanced", 'Picturefill');
    if (is_admin() && !wr2x_getoption("retina_admin", "wr2x_advanced", false)) {
        return;
    }
    // Picturefill
    if ($method == "Picturefill") {
        if (wr2x_is_debug()) {
            wp_enqueue_script('wr2x-debug', plugins_url('/js/debug.js', __FILE__), array(), $wr2x_version, false);
        }
        // Picturefill
        if (!wr2x_getoption("picturefill_noscript", "wr2x_advanced", false)) {
            wp_enqueue_script('picturefill', plugins_url('/js/picturefill.min.js', __FILE__), array(), $wr2x_picturefill, false);
        }
        // Lazysizes
        if (wr2x_getoption("picturefill_lazysizes", "wr2x_advanced", false) && wr2x_is_pro()) {
            wp_enqueue_script('lazysizes', plugins_url('/js/lazysizes.min.js', __FILE__), array(), $wr2x_lazysizes, false);
        }
        return;
    }
    // Debug + HTML Rewrite = No JS!
    if (wr2x_is_debug() && $method == "HTML Rewrite") {
        return;
    }
    // Debug mode, we force the devicePixelRatio to be Retina
    if (wr2x_is_debug()) {
        wp_enqueue_script('wr2x-debug', plugins_url('/js/debug.js', __FILE__), array(), $wr2x_version, false);
    } else {
        if (wr2x_getoption("ignore_mobile", "wr2x_advanced", false)) {
            $mobileDetect = new Mobile_Detect();
            if ($mobileDetect->isMobile()) {
                return;
            }
        }
    }
    // Retina-Images and HTML Rewrite both need the devicePixelRatio cookie on the server-side
    if ($method == "Retina-Images" || $method == "HTML Rewrite") {
        wp_enqueue_script('retina-images', plugins_url('/js/retina-cookie.js', __FILE__), array(), $wr2x_retina_image, false);
    }
    // Retina.js only needs itself
    if ($method == "retina.js") {
        wp_enqueue_script('retinajs', plugins_url('/js/retina.min.js', __FILE__), array(), $wr2x_retinajs, true);
    }
}
function wpr2x_wp_retina_2x()
{
    $view = isset($_GET['view']) ? $_GET['view'] : 'issues';
    $paged = isset($_GET['paged']) ? $_GET['paged'] : 1;
    $s = isset($_GET['s']) ? $_GET['s'] : null;
    $issues = $count = 0;
    $sizes = wr2x_get_image_sizes();
    $posts_per_page = 15;
    // TODO: HOW TO GET THE NUMBER OF MEDIA PER PAGES? IT IS NOT get_option('posts_per_page');
    $issues = wr2x_get_issues();
    $ignored = wr2x_get_ignores();
    ?>
	<div class='wrap'>
	<?php 
    jordy_meow_donation(true);
    ?>
	<div id="icon-upload" class="icon32"><br></div>
	<h2>WP Retina 2x <?php 
    by_jordy_meow();
    ?>
</h2>

	<?php 
    if ($view == 'issues') {
        global $wpdb;
        $totalcount = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT COUNT(*)\n\t\t\tFROM {$wpdb->posts} p\n\t\t\tWHERE post_status = 'inherit'\n\t\t\tAND post_type = 'attachment'\n\t\t\tAND post_title LIKE %s\n\t\t\tAND ( post_mime_type = 'image/jpeg' OR\n\t\t\tpost_mime_type = 'image/png' OR\n\t\t\tpost_mime_type = 'image/gif' )\n\t\t", '%' . $s . '%'));
        $postin = count($issues) < 1 ? array(-1) : $issues;
        $query = new WP_Query(array('post_status' => 'inherit', 'post_type' => 'attachment', 'post__in' => $postin, 'paged' => $paged, 'posts_per_page' => $posts_per_page, 's' => $s));
    } else {
        if ($view == 'ignored') {
            global $wpdb;
            $totalcount = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT COUNT(*)\n\t\t\tFROM {$wpdb->posts} p\n\t\t\tWHERE post_status = 'inherit'\n\t\t\tAND post_type = 'attachment'\n\t\t\tAND post_title LIKE %s\n\t\t\tAND ( post_mime_type = 'image/jpeg' OR\n\t\t\tpost_mime_type = 'image/jpg' OR\n\t\t\tpost_mime_type = 'image/png' OR\n\t\t\tpost_mime_type = 'image/gif' )\n\t\t", '%' . $s . '%'));
            $postin = count($ignored) < 1 ? array(-1) : $ignored;
            $query = new WP_Query(array('post_status' => 'inherit', 'post_type' => 'attachment', 'post__in' => $postin, 'paged' => $paged, 'posts_per_page' => $posts_per_page, 's' => $s));
        } else {
            $query = new WP_Query(array('post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image/jpeg,image/gif,image/jpg,image/png', 'paged' => $paged, 'posts_per_page' => $posts_per_page, 's' => $s));
            //$s
            $totalcount = $query->found_posts;
        }
    }
    $issues_count = count($issues);
    // If 'search', then we need to clean-up the issues count
    if ($s && $issues_count > 0) {
        global $wpdb;
        $issues_count = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT COUNT(*)\n\t\t\tFROM {$wpdb->posts} p\n\t\t\tWHERE id IN ( " . implode(',', $issues) . " )\n\t\t\tAND post_title LIKE %s\n\t\t", '%' . $s . '%'));
    }
    $results = array();
    $count = $query->found_posts;
    $pagescount = $query->max_num_pages;
    foreach ($query->posts as $post) {
        $info = wr2x_retina_info($post->ID);
        array_push($results, array('post' => $post, 'info' => $info));
    }
    ?>

	<div style='background: #FFF; padding: 5px; border-radius: 4px; height: 28px; box-shadow: 0px 0px 6px #C2C2C2;'>
		
		<!-- GENERATE ALL -->
		<a id='wr2x_generate_button_all' onclick='wr2x_generate_all()' class='button-primary' style='float: left;'><img style='position: relative; top: 3px; left: -2px; margin-right: 3px; width: 16px; height: 16px;' src='<?php 
    echo trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img');
    ?>
photo-album--plus.png' /><?php 
    _e("Generate", 'wp-retina-2x');
    ?>
</a>
		
		<!-- SEARCH -->
		<form id="posts-filter" action="upload.php" method="get">
			<p class="search-box" style='margin-left: 5px; float: left;'>
				<input type="search" name="s" value="<?php 
    echo $s ? $s : "";
    ?>
">
				<input type="hidden" name="page" value="wp-retina-2x">
				<input type="hidden" name="view" value="<?php 
    echo $view;
    ?>
">
				<input type="hidden" name="paged" value="<?php 
    echo $paged;
    ?>
">
				<input type="submit" class="button" value="Search">
			</p>
		</form>

		<!-- REMOVE BUTTON ALL -->
		<a id='wr2x_remove_button_all' onclick='wr2x_delete_all()' class='button button-red' style='float: right;'><img style='position: relative; top: 3px; left: -2px; margin-right: 3px; width: 16px; height: 16px;' src='<?php 
    echo trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img');
    ?>
burn.png' /><?php 
    _e("Delete all @2x", 'wp-retina-2x');
    ?>
</a>

		<!-- REFRESH -->
		<a id='wr2x_refresh' href='?page=wp-retina-2x&view=issues&refresh=true' class='button-primary' style='float: right; margin-right: 5px;'><img style='position: relative; top: 3px; left: -2px; margin-right: 3px; width: 16px; height: 16px;' src='<?php 
    echo trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img');
    ?>
refresh.png' /><?php 
    _e("Refresh issues", 'wp-retina-2x');
    ?>
</a>

		<!-- PROGRESS -->
		<span style='margin-left: 12px; font-size: 15px; top: 5px; position: relative; color: #747474;' id='wr2x_progression'></span>
		
	</div>

	<?php 
    if (isset($_GET['refresh']) ? $_GET['refresh'] : 0) {
        echo "<div class='updated' style='margin-top: 20px;'><p>";
        _e("Issues has been refreshed.", 'wp-retina-2x');
        echo "</p></div>";
    }
    ?>
	
	<p><?php 
    _e("You can upload/replace the images by drag & drop on the grid.", 'wp-retina-2x');
    ?>
</p>

	<div id='wr2x-pages'>
	<?php 
    echo paginate_links(array('base' => '?page=wp-retina-2x&s=' . urlencode($s) . '&view=' . $view . '%_%', 'current' => $paged, 'format' => '&paged=%#%', 'total' => $pagescount, 'prev_next' => false));
    ?>
	</div>
	
	<ul class="subsubsub">
		<li class="all"><a <?php 
    if ($view == 'all') {
        echo "class='current'";
    }
    ?>
 href='?page=wp-retina-2x&s=<?php 
    echo $s;
    ?>
&view=all'><?php 
    _e("All", 'wp-retina-2x');
    ?>
</a><span class="count">(<?php 
    echo $totalcount;
    ?>
)</span></li> |
		<li class="all"><a <?php 
    if ($view == 'issues') {
        echo "class='current'";
    }
    ?>
 href='?page=wp-retina-2x&s=<?php 
    echo $s;
    ?>
&view=issues'><?php 
    _e("Issues", 'wp-retina-2x');
    ?>
</a><span class="count">(<?php 
    echo $issues_count;
    ?>
)</span></li> |
		<li class="all"><a <?php 
    if ($view == 'ignored') {
        echo "class='current'";
    }
    ?>
 href='?page=wp-retina-2x&s=<?php 
    echo $s;
    ?>
&view=ignored'><?php 
    _e("Ignored", 'wp-retina-2x');
    ?>
</a><span class="count">(<?php 
    echo count($ignored);
    ?>
)</span></li>
	</ul>
	<table class='wp-list-table widefat fixed media'>
		<thead><tr>
			<?php 
    echo "<th style='width: 64px;''></th>";
    echo "<th style='font-size: 11px; font-family: Verdana;'>" . __("Title", 'wp-retina-2x') . "</th>";
    $ignore_cols = wr2x_getoption("ignore_sizes", "wr2x_basics", array());
    foreach ($sizes as $name => $attr) {
        if (!in_array($name, $ignore_cols)) {
            echo "<th style='width: 80px; font-size: 11px; font-family: Verdana;' class='manage-column'>" . $name . "</th>";
        }
    }
    echo "<th style='font-size: 11px; font-family: Verdana; width: 88px;'>" . __("Actions", 'wp-retina-2x') . "</th>";
    echo "<th style='font-size: 11px; font-family: Verdana; width: 70px;'></th>";
    ?>
		</tr></thead>
		<tbody>
			<?php 
    foreach ($results as $index => $attr) {
        $meta = wp_get_attachment_metadata($attr['post']->ID);
        // Let's clean the issues status
        if ($view != 'issues') {
            wr2x_update_issue_status($attr['post']->ID, $issues, $attr['info']);
        }
        if (isset($meta) && isset($meta['width'])) {
            $original_width = $meta['width'];
            $original_height = $meta['height'];
        }
        $attachmentsrc = wp_get_attachment_image_src($attr['post']->ID, 'thumbnail');
        echo "<tr class='wr2x-file-row' postId='" . $attr['post']->ID . "'>";
        echo "<td class='wr2x-image'><img style='max-width: 42px; max-height: 42px;' src='" . $attachmentsrc[0] . "' /></td>";
        echo "<td class='wr2x-title'><a style='position: relative; top: -2px;' href='media.php?attachment_id=" . $attr['post']->ID . "&action=edit'>" . $attr['post']->post_title . '<br />' . "<span style='font-size: 9px; line-height: 10px; display: block;'>" . $original_width . "×" . $original_height . "</span>";
        "</a></td>";
        foreach ($sizes as $aindex => $aval) {
            if (in_array($aindex, $ignore_cols)) {
                continue;
            }
            $aval = isset($attr['info']) && isset($attr['info'][$aindex]) ? $attr['info'][$aindex] : null;
            echo "<td id='wr2x_" . $aindex . "_" . $attr['post']->ID . "'>";
            if (is_array($aval)) {
                echo "<img title='Please upload a bigger original image.' style='margin-top: 3px; width: 16px; height: 16px;' src='" . trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img') . "exclamation.png' />" . "<span style='font-size: 9px; margin-left: 5px; position: relative; top: -10px;'><br />< " . $aval['width'] . "×" . $aval['height'] . "</span>";
            } else {
                if ($aval == 'EXISTS') {
                    echo "<img style='margin-top: 3px; width: 16px; height: 16px;' src='" . trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img') . "tick-circle.png' />";
                } else {
                    if ($aval == 'PENDING') {
                        echo "<img title='Click on \"Generate\".' style='margin-top: 3px; width: 16px; height: 16px;' src='" . trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img') . "clock.png' />";
                    } else {
                        if ($aval == 'MISSING') {
                            echo "<img title='The file related to this size is missing.' style='margin-top: 3px; width: 16px; height: 16px;' src='" . trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img') . "cross-small.png' />";
                        } else {
                            if ($aval == 'IGNORED') {
                                echo "<img title='Retina disabled.' style='margin-top: 3px; width: 16px; height: 16px;' src='" . trailingslashit(WP_PLUGIN_URL) . trailingslashit('wp-retina-2x/img') . "prohibition-small.png' />";
                            } else {
                                echo "<span style='position: relative; top: 3px;'>" . $aval . "</span>";
                            }
                        }
                    }
                }
            }
            echo "</td>";
        }
        echo "<td><a style='position: relative; top: 0px;' onclick='wr2x_generate(" . $attr['post']->ID . ", true)' id='wr2x_generate_button_" . $attr['post']->ID . "' class='button-secondary'>" . __("GENERATE", 'wp-retina-2x') . "</a></td>";
        if (!wr2x_is_ignore($attr['post']->ID)) {
            echo "<td><a style='position: relative; top: 0px;' href='?page=wp-retina-2x&view=" . $view . "&paged=" . $paged . "&ignore=" . $attr['post']->ID . "' id='wr2x_generate_button_" . $attr['post']->ID . "' class='button-secondary'>" . __("IGNORE", 'wp-retina-2x') . "</a></td>";
        }
        echo "</tr>";
    }
    ?>
		</tbody>
	</table>
	</div>

	<?php 
    jordy_meow_footer();
}
예제 #7
0
function wpr2x_wp_retina_2x()
{
    $view = isset($_GET['view']) ? $_GET['view'] : 'issues';
    $paged = isset($_GET['paged']) ? $_GET['paged'] : 1;
    $s = isset($_GET['s']) && !empty($_GET['s']) ? sanitize_text_field($_GET['s']) : null;
    $issues = $count = 0;
    $posts_per_page = 15;
    // TODO: HOW TO GET THE NUMBER OF MEDIA PER PAGES? IT IS NOT get_option('posts_per_page');
    $issues = wr2x_get_issues();
    $ignored = wr2x_get_ignores();
    echo '<div class="wrap">';
    jordy_meow_donation(true);
    echo "<h1>Retina";
    by_jordy_meow();
    echo "</h1>";
    if (wr2x_is_pro() && $view == 'issues') {
        global $wpdb;
        $totalcount = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT COUNT(*)\n\t\t\tFROM {$wpdb->posts} p\n\t\t\tWHERE post_status = 'inherit'\n\t\t\tAND post_type = 'attachment'" . wr2x_create_sql_if_wpml_original() . "\n\t\t\tAND post_title LIKE %s\n\t\t\tAND ( post_mime_type = 'image/jpeg' OR\n\t\t\tpost_mime_type = 'image/png' OR\n\t\t\tpost_mime_type = 'image/gif' )\n\t\t", '%' . $s . '%'));
        $postin = count($issues) < 1 ? array(-1) : $issues;
        $query = new WP_Query(array('post_status' => 'inherit', 'post_type' => 'attachment', 'post__in' => $postin, 'paged' => $paged, 'posts_per_page' => $posts_per_page, 's' => $s));
    } else {
        if (wr2x_is_pro() && $view == 'ignored') {
            global $wpdb;
            $totalcount = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT COUNT(*)\n\t\t\tFROM {$wpdb->posts} p\n\t\t\tWHERE post_status = 'inherit'\n\t\t\tAND post_type = 'attachment'" . wr2x_create_sql_if_wpml_original() . "\n\t\t\tAND post_title LIKE %s\n\t\t\tAND ( post_mime_type = 'image/jpeg' OR\n\t\t\tpost_mime_type = 'image/jpg' OR\n\t\t\tpost_mime_type = 'image/png' OR\n\t\t\tpost_mime_type = 'image/gif' )\n\t\t", '%' . $s . '%'));
            $postin = count($ignored) < 1 ? array(-1) : $ignored;
            $query = new WP_Query(array('post_status' => 'inherit', 'post_type' => 'attachment', 'post__in' => $postin, 'paged' => $paged, 'posts_per_page' => $posts_per_page, 's' => $s));
        } else {
            $query = new WP_Query(array('post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image/jpeg,image/gif,image/jpg,image/png', 'paged' => $paged, 'posts_per_page' => $posts_per_page, 's' => $s));
            //$s
            $totalcount = $query->found_posts;
        }
    }
    $issues_count = count($issues);
    // If 'search', then we need to clean-up the issues count
    if ($s && $issues_count > 0) {
        global $wpdb;
        $issues_count = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT COUNT(*)\n\t\t\tFROM {$wpdb->posts} p\n\t\t\tWHERE id IN ( " . implode(',', $issues) . " )" . wr2x_create_sql_if_wpml_original() . "\n\t\t\tAND post_title LIKE %s\n\t\t", '%' . $s . '%'));
    }
    $results = array();
    $count = $query->found_posts;
    $pagescount = $query->max_num_pages;
    foreach ($query->posts as $post) {
        $info = wr2x_retina_info($post->ID);
        array_push($results, array('post' => $post, 'info' => $info));
    }
    ?>

	<div style='background: #FFF; padding: 5px; border-radius: 4px; height: 28px; box-shadow: 0px 0px 6px #C2C2C2;'>

		<!-- REFRESH -->
		<a id='wr2x_refresh' href='?page=wp-retina-2x&view=issues&refresh=true' class='button' style='float: left;'><img style='position: relative; top: 3px; left: -2px; margin-right: 3px; width: 16px; height: 16px;' src='<?php 
    echo plugin_dir_url(__FILE__);
    ?>
img/refresh.png' /><?php 
    _e("Refresh", 'wp-retina-2x');
    ?>
</a>

		<!-- SEARCH -->
		<form id="posts-filter" action="upload.php" method="get">
			<p class="search-box" style='margin-left: 5px; float: left;'>
				<input type="search" name="s" value="<?php 
    echo $s ? $s : "";
    ?>
">
				<input type="hidden" name="page" value="wp-retina-2x">
				<input type="hidden" name="view" value="<?php 
    echo $view;
    ?>
">
				<input type="hidden" name="paged" value="<?php 
    echo $paged;
    ?>
">
				<input type="submit" class="button" value="Search">
			</p>
		</form>

		<!-- REMOVE BUTTON ALL -->
		<a id='wr2x_remove_button_all' onclick='wr2x_delete_all()' class='button button-red' style='float: right;'><img style='position: relative; top: 3px; left: -2px; margin-right: 3px; width: 16px; height: 16px;' src='<?php 
    echo plugin_dir_url(__FILE__);
    ?>
img/burn.png' /><?php 
    _e("Bulk Delete", 'wp-retina-2x');
    ?>
</a>

		<!-- GENERATE ALL -->
		<a id='wr2x_generate_button_all' onclick='wr2x_generate_all()' class='button-primary' style='float: right; margin-right: 5px;'><img style='position: relative; top: 3px; left: -2px; margin-right: 3px; width: 16px; height: 16px;' src='<?php 
    echo plugin_dir_url(__FILE__);
    ?>
img/photo-album--plus.png' /><?php 
    _e("Bulk Generate", 'wp-retina-2x');
    ?>
</a>


		<!-- PROGRESS -->
		<span style='margin-left: 12px; font-size: 13px; top: 5px; position: relative; color: #24547C; font-weight: bold;' id='wr2x_progression'></span>

	</div>

	<?php 
    if (isset($_GET['clearlogs']) ? $_GET['clearlogs'] : 0) {
        echo "<div class='updated' style='margin-top: 20px;'><p>";
        _e("The logs have been cleared.", 'wp-retina-2x');
        echo "</p></div>";
    }
    $active_sizes = wr2x_get_active_image_sizes();
    $full_size_needed = wr2x_getoption("full_size", "wr2x_basics", false);
    $max_width = 0;
    $max_height = 0;
    foreach ($active_sizes as $name => $active_size) {
        if ($active_size['height'] != 9999 && $active_size['height'] > $max_height) {
            $max_height = $active_size['height'];
        }
        if ($active_size['width'] != 9999 && $active_size['width'] > $max_width) {
            $max_width = $active_size['width'];
        }
    }
    $max_width = $max_width * 2;
    $max_height = $max_height * 2;
    $upload_max_size = ini_get('upload_max_filesize');
    ?>

	<p>
		<?php 
    printf(__('The full-size images should have a resolution of <b>%d×%d</b> at least for the plugin to be able generate the <b>%d retina images</b> required by your website.', 'wp-retina-2x'), $max_width, $max_height, count($active_sizes));
    ?>
		<?php 
    if ($full_size_needed) {
        printf(__("You <b>also need</b> to upload a retina image for the Full-Size image (might be <b>%d×%d</b>).", 'wp-retina-2x'), $max_width * 2, $max_height * 2);
    }
    ?>
		<?php 
    _e("You can upload or replace the images by drag & drop.", 'wp-retina-2x');
    ?>
		<?php 
    printf(__("Your PHP configuration allows uploads of <b>%dMB</b> maximum.", 'wp-retina-2x'), $upload_max_size);
    ?>

		<?php 
    if (file_exists(plugin_dir_path(__FILE__) . '/wp-retina-2x.log')) {
        printf(__('The <a target="_blank" href="%s/wp-retina-2x.log">log file</a> is available. You can also <a href="?page=wp-retina-2x&view=issues&clearlogs=true">clear</a> it.', 'wp-retina-2x'), plugin_dir_url(__FILE__));
    }
    ?>
	</p>

	<?php 
    if (!wr2x_is_pro()) {
        echo '<div class="updated"><p>';
        echo __('<b>Only Pro users have access to the features of this dashboard.</b> As a standard user, the dashboard allow you to Bulk Generate, Bulk Delete and access the Retina Logs. If you wish to stay a standard user and never see this dashboard aver again, you can hide it in the settings.<br /><br />The main features of the Pro version are: filter by <b>Issues</b> or Ignored, <b>Ignore</b> media (from the retina process), <b>Details</b> for more information, <b>replace</b> a full-size directly by drag & drop, upload a retina version of the full-size, various options and direct support by the developer. The serial key for the Pro has to be inserted in your WP Settings > Retina > Pro tab. Thank you for your support :)<br /><br /><a class="button-primary" href="http://apps.meow.fr/wp-retina-2x/" target="_blank">Get the serial key for the Pro</a>', 'wp-retina-2x');
        echo '</p></div>';
    }
    ?>

	<div id='wr2x-pages'>
	<?php 
    echo paginate_links(array('base' => '?page=wp-retina-2x&s=' . urlencode($s) . '&view=' . $view . '%_%', 'current' => $paged, 'format' => '&paged=%#%', 'total' => $pagescount, 'prev_next' => false));
    ?>
	</div>

	<ul class="subsubsub">
		<li class="all"><a <?php 
    if ($view == 'all') {
        echo "class='current'";
    }
    ?>
 href='?page=wp-retina-2x&s=<?php 
    echo $s;
    ?>
&view=all'><?php 
    _e("All", 'wp-retina-2x');
    ?>
</a><span class="count">(<?php 
    echo $totalcount;
    ?>
)</span></li> |

		<?php 
    if (wr2x_is_pro()) {
        ?>

		<li class="all"><a <?php 
        if ($view == 'issues') {
            echo "class='current'";
        }
        ?>
 href='?page=wp-retina-2x&s=<?php 
        echo $s;
        ?>
&view=issues'><?php 
        _e("Issues", 'wp-retina-2x');
        ?>
</a><span class="count">(<?php 
        echo $issues_count;
        ?>
)</span></li> |
		<li class="all"><a <?php 
        if ($view == 'ignored') {
            echo "class='current'";
        }
        ?>
 href='?page=wp-retina-2x&s=<?php 
        echo $s;
        ?>
&view=ignored'><?php 
        _e("Ignored", 'wp-retina-2x');
        ?>
</a><span class="count">(<?php 
        echo count($ignored);
        ?>
)</span></li>

		<?php 
    } else {
        ?>

		<li class="all"><span><?php 
        _e("Issues", 'wp-retina-2x');
        ?>
</span> <span class="count">(<?php 
        echo $issues_count;
        ?>
)</span></li> |
		<li class="all"><span><?php 
        _e("Ignored", 'wp-retina-2x');
        ?>
</span> <span class="count">(<?php 
        echo count($ignored);
        ?>
)</span></li>

		<?php 
    }
    ?>


	</ul>
	<table class='wp-list-table widefat fixed media wr2x-table'>
		<thead><tr>
			<?php 
    echo "<th style='width: 56px;'>Thumbnail</th>";
    echo "<th style=' width: 360px;'>" . __("Base image", 'wp-retina-2x') . "</th>";
    echo "<th style=''>" . __("Media Sizes<br />Retina-ized", 'wp-retina-2x') . "</th>";
    echo "<th style=''>" . __("Full-Size<br/><b>Replace</b>", 'wp-retina-2x') . "</th>";
    echo "<th style=''>" . __("Full-Size Retina", 'wp-retina-2x') . "</th>";
    echo "<th style=''>" . __("Full-Size Retina<br/><b>Upload</b>", 'wp-retina-2x') . "</th>";
    ?>
		</tr></thead>
		<tbody>
			<?php 
    foreach ($results as $index => $attr) {
        $post = $attr['post'];
        $info = $attr['info'];
        $meta = wp_get_attachment_metadata($post->ID);
        // Let's clean the issues status
        if ($view != 'issues') {
            wr2x_update_issue_status($post->ID, $issues, $info);
        }
        if (isset($meta) && isset($meta['width'])) {
            $original_width = $meta['width'];
            $original_height = $meta['height'];
        }
        $attachmentsrc = wp_get_attachment_image_src($post->ID, 'thumbnail');
        echo "<tr class='wr2x-file-row' postId='" . $post->ID . "'>";
        echo "<td class='wr2x-image wr2x-info-thumbnail'><img src='" . $attachmentsrc[0] . "' /></td>";
        echo "<td class='wr2x-title'><a href='media.php?attachment_id=" . $post->ID . "&action=edit'>" . ($post->post_title ? $post->post_title : '<i>Untitled</i>') . '</a><br />' . "<span class='resolution'>Full-Size: <span class='" . ($original_width < $max_width ? "red" : "") . "'>" . $original_width . "</span>×<span class='" . ($original_height < $max_height ? "red" : "") . "'>" . $original_height . "</span></span>";
        echo "<div class='actions'>";
        echo "<a style='position: relative;' onclick='wr2x_generate(" . $post->ID . ", true)' id='wr2x_generate_button_" . $post->ID . "' class='wr2x-button'>" . __("GENERATE", 'wp-retina-2x') . "</a>";
        if (!wr2x_is_ignore($post->ID)) {
            echo " <a href='?page=wp-retina-2x&view=" . $view . "&paged=" . $paged . "&ignore=" . $post->ID . "' id='wr2x_generate_button_" . $post->ID . "' class='wr2x-button wr2x-button-ignore'>" . __("IGNORE", 'wp-retina-2x') . "</a>";
        }
        echo " <a style='position: relative;' class='wr2x-button wr2x-button-view'>" . __("DETAILS", 'wp-retina-2x') . "</a>";
        echo "</div></td>";
        // Media Sizes Retina-ized
        echo '<td id="wr2x-info-' . $post->ID . '" style="padding-top: 10px;" class="wr2x-info">';
        echo wpr2x_html_get_basic_retina_info($post, $info);
        echo "</td>";
        if (wr2x_is_pro()) {
            // Full-Size Replace
            echo "<td class='wr2x-fullsize-replace'><div class='wr2x-dragdrop'></div>";
            echo "</td>";
            // Full-Size Retina
            echo '<td id="wr2x-info-full-' . $post->ID . '" class="wr2x-image wr2x-info-full">';
            echo wpr2x_html_get_basic_retina_info_full($post->ID, $info);
            echo "</td>";
            // Full-Size Retina Upload
            echo "<td class='wr2x-fullsize-retina-upload'>";
            echo "<div class='wr2x-dragdrop'></div>";
            echo "</td>";
        } else {
            echo "<td colspan='3' style='text-align: center; background: #F9F9F9;'><small><br />PRO VERSION ONLY</small></td>";
        }
        echo "</tr>";
    }
    ?>
		</tbody>
	</table>
	</div>

	<div id="wr2x-modal-info-backdrop" style="display: none;">
	</div>

	<div id="wr2x-modal-info" style="display: none;" tabindex="1">
		<div class="close">X</div>
		<h2 style="margin-top: 0px;">Retina Details</h2>
		<div class="loading">
			<img src="<?php 
    echo plugin_dir_url(__FILE__);
    ?>
img/loading.gif" />
		</div>
		<div class="content">
		</div>
	</div>

	<?php 
    jordy_meow_footer();
}
예제 #8
0
function wr2x_wp_ajax_wr2x_list_all($issuesOnly)
{
    $issuesOnly = intval($_POST['issuesOnly']);
    if ($issuesOnly == 1) {
        $ids = wr2x_get_issues();
        echo json_encode(array('success' => true, 'message' => "List of issues only.", 'ids' => $ids, 'total' => count($ids)));
        die;
    }
    $reply = array();
    try {
        $ids = array();
        $total = 0;
        global $wpdb;
        $postids = $wpdb->get_col("\n\t\t\tSELECT p.ID\n\t\t\tFROM {$wpdb->posts} p\n\t\t\tWHERE post_status = 'inherit'\n\t\t\tAND post_type = 'attachment'\n\t\t\tAND ( post_mime_type = 'image/jpeg' OR\n\t\t\t\tpost_mime_type = 'image/png' OR\n\t\t\t\tpost_mime_type = 'image/gif' )\n\t\t");
        $ignore = wr2x_getoption("ignore_sizes", "wr2x_basics", array());
        foreach ($postids as $id) {
            if (wr2x_is_ignore($id)) {
                continue;
            }
            array_push($ids, $id);
            $total++;
        }
        echo json_encode(array('success' => true, 'message' => "List of everything.", 'ids' => $ids, 'total' => $total));
        die;
    } catch (Exception $e) {
        echo json_encode(array('success' => false, 'message' => $e->getMessage()));
        die;
    }
}
예제 #9
0
/**
 *
 * LOAD SCRIPTS IF REQUIRED
 *
 */
function wr2x_wp_enqueue_scripts()
{
    global $wr2x_version, $wr2x_retinajs, $wr2x_retina_image;
    $method = wr2x_getoption("method", "wr2x_advanced", 'retina.js');
    // Debug + HTML Rewrite = No JS!
    if (wr2x_is_debug() && $method == "HTML Rewrite") {
        return;
    }
    // Debug mode, we force the devicePixelRatio to be Retina
    if (wr2x_is_debug()) {
        wp_enqueue_script('debug', plugins_url('/js/debug.js', __FILE__), array(), $wr2x_version, false);
    } else {
        if (wr2x_getoption("ignore_mobile", "wr2x_advanced", false)) {
            $mobileDetect = new Mobile_Detect();
            if ($mobileDetect->isMobile()) {
                return;
            }
        }
    }
    // Retina-Images and HTML Rewrite both need the devicePixelRatio cookie on the server-side
    if ($method == "Retina-Images" || $method == "HTML Rewrite") {
        wp_enqueue_script('retina-images', plugins_url('/js/retina-cookie.js', __FILE__), array(), $wr2x_retina_image, false);
    }
    // Retina.js only needs itself
    if ($method == "retina.js") {
        wp_enqueue_script('retinajs', plugins_url('/js/retina.js', __FILE__), array(), $wr2x_retinajs, true);
    }
}
예제 #10
0
function ewww_image_optimizer_resize_upload($file)
{
    // parts adapted from Imsanity (THANKS Jason!)
    ewwwio_debug_message('<b>' . __FUNCTION__ . '()</b>');
    if (!$file) {
        return false;
    }
    //	ewwwio_debug_message( print_r( $_SERVER, true ) );
    if (!empty($_REQUEST['post_id']) || !empty($_REQUEST['action']) && $_REQUEST['action'] === 'upload-attachment' || !empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'media-new.php')) {
        $maxwidth = ewww_image_optimizer_get_option('ewww_image_optimizer_maxmediawidth');
        $maxheight = ewww_image_optimizer_get_option('ewww_image_optimizer_maxmediaheight');
        ewwwio_debug_message('resizing image from media library or attached to post');
    } else {
        $maxwidth = ewww_image_optimizer_get_option('ewww_image_optimizer_maxotherwidth');
        $maxheight = ewww_image_optimizer_get_option('ewww_image_optimizer_maxotherheight');
        ewwwio_debug_message('resizing images from somewhere else');
    }
    // allow other developers to modify the dimensions to their liking based on whatever parameters they might choose
    list($maxwidth, $maxheight) = apply_filters('ewww_image_optimizer_resize_dimensions', array($maxwidth, $maxheight));
    //check that options are not == 0
    if ($maxwidth == 0 && $maxheight == 0) {
        return false;
    }
    //check file type
    $type = ewww_image_optimizer_mimetype($file, 'i');
    if (strpos($type, 'image') === FALSE) {
        ewwwio_debug_message('not an image, cannot resize');
        return false;
    }
    //check file size (dimensions)
    list($oldwidth, $oldheight) = getimagesize($file);
    if ($oldwidth <= $maxwidth && $oldheight <= $maxheight) {
        ewwwio_debug_message('image too small for resizing');
        return false;
    }
    list($newwidth, $newheight) = wp_constrain_dimensions($oldwidth, $oldheight, $maxwidth, $maxheight);
    if (!function_exists('wp_get_image_editor')) {
        ewwwio_debug_message('no image editor function');
        return false;
    }
    remove_filter('wp_image_editors', 'ewww_image_optimizer_load_editor', 60);
    $editor = wp_get_image_editor($file);
    if (is_wp_error($editor)) {
        ewwwio_debug_message('could not get image editor');
        return false;
    }
    if (function_exists('exif_read_data') && $type === 'image/jpeg') {
        $exif = @exif_read_data($file);
        if (is_array($exif) && array_key_exists('Orientation', $exif)) {
            $orientation = $exif['Orientation'];
            switch ($orientation) {
                case 3:
                    $editor->rotate(180);
                    break;
                case 6:
                    $editor->rotate(-90);
                    break;
                case 8:
                    $editor->rotate(90);
                    break;
            }
        }
    }
    $resized_image = $editor->resize($newwidth, $newheight);
    if (is_wp_error($resized_image)) {
        ewwwio_debug_message('error during resizing');
        return false;
    }
    $new_file = $editor->generate_filename('tmp');
    $orig_size = filesize($file);
    $saved = $editor->save($new_file);
    if (is_wp_error($saved)) {
        ewwwio_debug_message('error saving resized image');
    }
    add_filter('wp_image_editors', 'ewww_image_optimizer_load_editor', 60);
    $new_size = ewww_image_optimizer_filesize($new_file);
    if ($new_size && $new_size < $orig_size) {
        // generate a retina file from the full original if they have WP Retina 2x Pro
        if (function_exists('wr2x_is_pro') && wr2x_is_pro()) {
            $full_size_needed = wr2x_getoption("full_size", "wr2x_basics", false);
            if ($full_size_needed) {
                // Is the file related to this size there?
                $retina_file = '';
                $pathinfo = pathinfo($file);
                $retina_file = trailingslashit($pathinfo['dirname']) . $pathinfo['filename'] . wr2x_retina_extension() . $pathinfo['extension'];
                if ($retina_file && !file_exists($retina_file) && wr2x_are_dimensions_ok($oldwidth, $oldheight, $newwidth * 2, $newheight * 2)) {
                    $image = wr2x_vt_resize($file, $newwidth * 2, $newheight * 2, false, $retina_file);
                }
            }
        }
        rename($new_file, $file);
        // store info on the current image for future reference
        global $wpdb;
        $already_optimized = ewww_image_optimizer_find_already_optimized($file);
        // if the original file has never been optimized, then just update the record that was created with the proper filename (because the resized file has usually been optimized)
        if (empty($already_optimized)) {
            $tmp_exists = $wpdb->update($wpdb->ewwwio_images, array('path' => $file, 'orig_size' => $orig_size), array('path' => $new_file));
            // if the tmp file didn't get optimized (and it shouldn't), then just insert a dummy record to be updated shortly
            if (!$tmp_exists) {
                $wpdb->insert($wpdb->ewwwio_images, array('path' => $file, 'orig_size' => $orig_size));
            }
            // otherwise, we delete the record created from optimizing the resized file, and update our records for the original file
        } else {
            $temp_optimized = ewww_image_optimizer_find_already_optimized($new_file);
            if (is_array($temp_optimized) && !empty($temp_optimized['id'])) {
                $wpdb->delete($wpdb->ewwwio_images, array('id' => $temp_optimized['id']), array('%d'));
            }
            // should not need this, as the image will get optimized shortly
            //ewww_image_optimizer_update_table( $file, $new_size, $orig_size );
        }
        return array($newwidth, $newheight);
    }
    if (file_exists($new_file)) {
        unlink($new_file);
    }
    return false;
}
function __rocket_cdn_on_images_from_wp_retina_x2($url)
{
    if (wr2x_is_pro()) {
        $cdn_domain = wr2x_getoption("cdn_domain", "wr2x_advanced", "");
    }
    if (empty($cdn_domain)) {
        return get_rocket_cdn_url($url, array('all', 'images'));
    }
    return $url;
}