You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

318 lines
11 KiB

<?php
// Copyright 2014-2016 RealFaviconGenerator
?>
<div class="wrap">
<h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
<?php if ( $new_favicon_params_url ) { ?>
<div id="install_in_progress_message" class="updated">
<p><?php _e( 'Favicon installation in progress. Please wait...', FBRFG_PLUGIN_SLUG ) ?></p>
</div>
<div id="install_completed_message" class="updated" style="display:none">
<p>
<?php _e( 'Favicon installed!', FBRFG_PLUGIN_SLUG ) ?>
<span id="rank_notice" style="display:none">
<?php printf( __( 'Do you like the result? If so, would you like to <a %s>rate the plugin</a>?', FBRFG_PLUGIN_SLUG ),
'target="_blank" href="https://wordpress.org/support/view/plugin-reviews/favicon-by-realfavicongenerator"' ) ?>
</span>
</p>
</div>
<div id="install_error_message" class="error" style="display:none"><p></p></div>
<div id="install_completed_container" style="display:none">
<h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
<?php include_once( plugin_dir_path(__FILE__) . DIRECTORY_SEPARATOR .
'keep_active_notice.php' ); ?>
<p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
<img id="preview_image">
<p>
<?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
'id="checker_link" class="button-primary" href="#"' ) ?>
<?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
</p>
</div>
<?php } else { ?>
<h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
<?php if ( $favicon_configured) { ?>
<?php include_once( plugin_dir_path(__FILE__) . DIRECTORY_SEPARATOR .
'keep_active_notice.php' ); ?>
<p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
<?php } else { ?>
<p><?php _e( 'No favicon has been configured yet.', FBRFG_PLUGIN_SLUG ) ?></p>
<?php } ?>
<?php if ( $favicon_configured ) {
if ( $preview_url ) { ?>
<img src="<?php echo $preview_url ?>">
<?php } ?>
<p>
<?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
'class="button-primary" ' .
'href="https://realfavicongenerator.net/favicon_checker?site=' . urlencode( home_url() ) . ($favicon_in_root ? '' : '&ignore_root_issues=on') . '"' ) ?>
<?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
</p>
<?php
}
} ?>
<div id="favicon_form_container" <?php echo $new_favicon_params_url ? 'style="display:none"' : '' ?>>
<h3><?php _e( 'Favicon generation', FBRFG_PLUGIN_SLUG ) ?></h3>
<?php if ( $favicon_configured || $new_favicon_params_url ) { ?>
<p><?php _e( 'You can replace the existing favicon.', FBRFG_PLUGIN_SLUG ) ?></p>
<?php } ?>
<form role="form" method="post" action="https://realfavicongenerator.net/api/favicon_generator" id="favicon_form">
<input type="hidden" name="json_params" id="json_params"/>
<table class="form-table"><tbody>
<tr valign="top">
<th scope="row">
<label for="master_picture_url"><?php _e( 'Master picture URL', FBRFG_PLUGIN_SLUG ) ?></label>
</th>
<td>
<input id="master_picture_url" name="master_picture_url" size="55">
<button id="upload_image_button" value="<?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>">
<?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>
</button>
<p class="description">
<?php _e( 'Submit a square picture, at least 70x70 (recommended: 260x260 or more)', FBRFG_PLUGIN_SLUG ) ?>
<br>
<?php _e( 'If the picture is on your hard drive, you can leave this field blank and upload the picture from RealFaviconGenerator.', FBRFG_PLUGIN_SLUG ) ?>
</p>
</td>
</tr>
<?php if ( $can_rewrite ) { ?>
<tr valign="top">
<th scope="row">
<label for="rewrite"><?php _e( 'Favicon files in root directory', FBRFG_PLUGIN_SLUG ) ?></label>
</th>
<td>
<input type="checkbox" name="rewrite" id="rewrite" checked="true">
<p class="description">
<?php _e( 'The plugin always stores the favicon files in a dedicated directory.', FBRFG_PLUGIN_SLUG ) ?>
<br>
<?php _e( 'However, if this option is enabled, the plugin takes advantage of the permalink feature and the favicon files appear to be in the root directory', FBRFG_PLUGIN_SLUG ) ?>
(<a href="https://realfavicongenerator.net/faq#why_icons_in_root"><?php _e( 'recommended', FBRFG_PLUGIN_SLUG ) ?></a>)
</p>
</td>
</tr>
<?php } ?>
</tbody></table>
<p class="submit">
<input type="submit" name="Generate favicon" id="generate_favicon_button" class="button-primary"
value="<?php _e( 'Generate favicon', FBRFG_PLUGIN_SLUG ) ?>">
</p>
</form>
</div>
</div>
<script type="text/javascript">
var picData = null;
function urlToBase64(url, callback) {
var img = new Image();
img.onload = function() {
callback(getBase64Image(img));
}
img.onerror = function() {
callback(null);
}
img.src = url;
}
// See http://stackoverflow.com/questions/934012/get-image-data-in-javascript
// Credits: Matthew Crumley
function getBase64Image(img) {
try {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/png");
return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}
catch(err) {
console.log("Cannot get the picture from the Media Library: " + err);
return null;
}
}
function computeJson() {
var params = { favicon_generation: {
callback: {},
master_picture: {},
files_location: {},
api_key: "87d5cd739b05c00416c4a19cd14a8bb5632ea563"
}};
if (jQuery('#master_picture_url').val().length <= 0) {
params.favicon_generation.master_picture.type = "no_picture";
params.favicon_generation.master_picture.demo = true;
}
else if (pictureContent != null) {
params.favicon_generation.master_picture.type = "inline";
params.favicon_generation.master_picture.content = pictureContent;
}
else {
params.favicon_generation.master_picture.type = "url";
params.favicon_generation.master_picture.url = jQuery('#master_picture_url').val();
}
<?php if ( $can_rewrite ) { ?>
if ( jQuery("#rewrite").is(':checked') ) {
params.favicon_generation.files_location.type = 'root';
}
else {
params.favicon_generation.files_location.type = 'path';
params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
}
<?php } else { ?>
params.favicon_generation.files_location.type = 'path';
params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
<?php } ?>
params.favicon_generation.callback.type = 'url';
params.favicon_generation.callback.url = "<?php echo admin_url('themes.php?page=' . ( ( isset( $_REQUEST['page'] ) )
? $_REQUEST['page']
: 'favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-admin.phpfavicon_appearance_menu' ) ) ?>";
params.favicon_generation.callback.short_url = 'true';
params.favicon_generation.callback.path_only = 'true';
params.favicon_generation.callback.custom_parameter = "<?php echo $nonce ?>";
return params;
}
var pictureContent = null;
var pictureContentTimestamp = null;
function prepareInlinePicture(pictureUrl) {
var timestamp = new Date().getTime();
pictureContentTimestamp = timestamp;
jQuery('#generate_favicon_button').attr('disabled', 'disabled');
jQuery('#generate_favicon_button').val("<?php _e( 'Preparing master picture...', FBRFG_PLUGIN_SLUG ) ?>");
pictureContent = null;
urlToBase64(pictureUrl, function(content) {
if (content != null) {
pictureContent = content;
}
restoreGenerateFaviconButton();
});
setTimeout(function() {
if (pictureContentTimestamp == timestamp) {
restoreGenerateFaviconButton();
}
}, 3000);
}
function restoreGenerateFaviconButton() {
jQuery('#generate_favicon_button').removeAttr('disabled');
jQuery('#generate_favicon_button').val("<?php _e( 'Generate favicon', FBRFG_PLUGIN_SLUG ) ?>");
}
<?php if ( $new_favicon_params_url ) { ?>
var data = {
action: '<?php echo Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon' ?>',
json_result_url: '<?php echo $new_favicon_params_url ?>'
};
<?php } ?>
jQuery(document).ready(function() {
jQuery('#favicon_form').submit(function(e) {
jQuery('#json_params').val(JSON.stringify(computeJson()));
});
<?php if ( $new_favicon_params_url ) { ?>
jQuery.get('<?php echo $ajax_url ?>', data)
.done(function(response) {
if (response.status == 'success') {
jQuery('#preview_image').attr('src', response.preview_url);
var checkerUrl = "https://realfavicongenerator.net/favicon_checker?site=<?php echo urlencode( home_url() ) ?>" +
(response.favicon_in_root ? '' : '&ignore_root_issues=on');
jQuery('#checker_link').attr('href', checkerUrl);
jQuery('#install_in_progress_message').fadeOut(function() {
jQuery('#install_completed_message').fadeIn(function() {
jQuery('#rank_notice').fadeIn(function() {
jQuery('#rank_notice').effect('pulsate', {
times: 3,
duration: 2000
});
});
});
jQuery('#install_completed_container').fadeIn();
jQuery('#favicon_form_container').fadeIn();
});
}
else {
var msg = "<?php _e( "An error occured", FBRFG_PLUGIN_SLUG ) ?>";
if (response.message != null) {
msg += ": " + response.message;
}
jQuery('#install_error_message p').html(msg);
jQuery('#install_in_progress_message').fadeOut(function() {
jQuery('#install_error_message').fadeIn();
});
}
})
.fail(function() {
var msg = "<?php _e( "An internal error occurred", FBRFG_PLUGIN_SLUG ) ?>";
jQuery('#install_error_message p').html(msg);
jQuery('#install_in_progress_message').fadeOut(function() {
jQuery('#install_error_message').fadeIn();
});
});
<?php } ?>
var fileFrame;
jQuery('#upload_image_button').live('click', function(event) {
event.preventDefault();
if (fileFrame) {
fileFrame.open();
return;
}
// Create the media frame.
fileFrame = wp.media.frames.file_frame = wp.media({
title: jQuery(this).data('uploader_title'),
button: {
text: jQuery(this).data('uploader_button_text'),
},
multiple: false
});
fileFrame.on('select', function() {
attachment = fileFrame.state().get('selection').first().toJSON();
jQuery('#master_picture_url').val(attachment.url);
prepareInlinePicture(attachment.url);
});
fileFrame.open();
});
jQuery('#master_picture_url').change(function() {
// Whatever the previous content of the field, forget its cached data
pictureContent = null;
restoreGenerateFaviconButton();
});
});
</script>