Current File : /home/kelaby89/www/wp/wp-content/plugins/copy-delete-posts/modules/tryOutPlugins/tryOutPlugins.php |
<?php
/**
* File for our cool try it out module
* That allows people to try out any plugin within WP directory
* Before they install it on their real website, this feature
* Is completely free and available for everyone
*
* @category Child Plugin
* @version v0.1.3
* @since v0.1.0
* @author iClyde <[email protected]>
*/
// Namespace
namespace Inisev\Subs;
// Disallow direct access
if (defined('ABSPATH')) {
/**
* Main class for handling the Review
*/
if (!class_exists('Inisev\Subs\Inisev_Try_Out_Plugins')) {
class Inisev_Try_Out_Plugins {
public $pluginDir;
public $pluginFile;
public $pluginName;
public $pluginPageURL;
function __construct($plugin_file, $plugin_dir, $plugin_name, $plugin_menu_page) {
if (!is_admin() || !current_user_can('install_plugins')) return;
if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
add_action('wp_ajax_tifm_notice_actions', [&$this, 'noticeAjax']);
}
if (get_option('_tifm_feature_enabled') == 'enabled') {
update_option('_tifm_force_disable_feature_update', true);
} else if (get_option('_tifm_force_disable_feature_update', 'no') === 'no') {
delete_option('_tifm_feature_enabled');
delete_option('_tifm_hide_notice_forever');
delete_option('_tifm_disable_feature_forever');
update_option('_tifm_force_disable_feature_update', true);
}
global $pagenow;
if (!($pagenow == 'plugin-install.php' || $pagenow == 'admin-ajax.php')) return;
if (get_option('_tifm_disable_feature_forever', false) != false) return;
$this->pluginDir = $plugin_dir;
$this->pluginFile = $plugin_file;
$this->pluginName = $plugin_name;
$this->pluginPageURL = admin_url($plugin_menu_page) . '&scrollToSection=testPlugins';
$this->showInformativeNotice();
$this->insertActionButton();
}
public function showInformativeNotice() {
add_action('in_admin_footer', [&$this, 'tryItOutScript']);
if (get_option('_tifm_hide_notice_forever', false) != false) return;
add_action('admin_notices', [&$this, 'informativeAdminNoticeHandler']);
add_action('admin_head', [&$this, 'noticeStyles']);
add_action('in_admin_footer', [&$this, 'noticeScripts']);
}
public function noticeStyles() {
?>
<style media="screen">
#tifm_new_feature_notice {
margin-bottom: 32px;
}
#tifm_paragraph_notice {
display: flex;
flex-direction: row;
justify-content: space-between;
}
#tifm_new_feature_notice span {
line-height: 30px;
}
#tifm_new_feature_notice .tifm_poweredby {
line-height: 30px;
position: absolute;
right: 0;
}
#tifm_paragraph_notice .tifm_darker_a, #tifm_paragraph_notice .tifm_darker_a_preview {
color: #555;
}
#tifm_paragraph_notice .tifm_darker_a_muted {
color: #999;
}
#tifm_new_feature_notice .tifm_brought_url {
color: #00a32a;
text-decoration: none;
}
#tifm_paragraph_notice .tifm-grow-1 {
flex-grow: 1;
}
#tifm_paragraph_notice .tifm-grow-2 {
flex-grow: 2;
text-align: right;
padding-right: 15px;
}
#tifm_paragraph_notice .tifm-grow-5 {
flex-grow: 5;
}
#tifm_paragraph_notice .tifm_btn {
padding: 6px 18px;
border-radius: 4px;
font-size: 14px;
font-weight: 400;
text-decoration: none;
border: 1px solid black;
transition: 0.3s all;
opacity: 1;
}
#tifm_paragraph_notice .tifm_btn_green {
background: #00a32a;
color: white;
}
#tifm_paragraph_notice .tifm_btn_grey {
background: #d9e3f4;
margin-left: 15px;
color: black;
}
#tifm_paragraph_notice .tifm_btn_green:hover, #tifm_paragraph_notice .tifm_btn_grey:hover {
opacity: 0.8;
}
#tifm_paragraph_notice .tifm_btn_green:active, #tifm_paragraph_notice .tifm_btn_grey:active {
transition: 0 all !important;
opacity: 0.5;
}
@media screen and (max-width: 1400px) {
#tifm_paragraph_notice {
flex-direction: column;
}
}
</style>
<?php
}
public function noticeScripts() {
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('#tifm_new_feature_notice').on('click', '.notice-dismiss', hideAndDismissNotice);
$('#tifm_new_feature_notice').on('click', '.tifm_darker_a', enableAndDismissNotice);
$('#tifm_new_feature_notice').on('click', '.tifm_darker_a_preview', previewNotice);
$('#tifm_new_feature_notice').on('click', '.tifm_darker_a_muted', disableFeatureAndDismiss);
let nonce = "<?php echo wp_create_nonce('tifm_notice_nonce') ?>";
function hideAndDismissNotice(e) {
let dismiss = false;
let enable = false;
if (typeof e != 'string') {
e.preventDefault();
} else if (e == 'dismiss') {
dismiss = true;
} else if (e == 'enable') {
enable = true;
}
$('#tifm_new_feature_notice').hide(300);
setTimeout(function () {
$('#tifm_new_feature_notice').remove();
}, 350);
let method = 'dismiss_notice';
if (dismiss == true) {
method = 'dismiss_notice_and_disable';
}
if (enable == true) {
method = 'dismiss_notice_and_enable';
}
if (method == 'dismiss_notice') return;
$.post(ajaxurl, { action: 'tifm_notice_actions', nonce: nonce, method: method }).done(function () {
if (method == 'dismiss_notice_and_disable') {
window.location.reload();
}
}).fail(function (e) {
alert('Error occurred, please refresh and try again.' + JSON.stringify(e));
});
}
let isDisplayed = false;
function previewNotice(e) {
e.preventDefault();
if (isDisplayed) return hideNotice(e);
$('#tifmPreviewCSS').remove();
let $style = document.createElement('style');
$style.setAttribute('media', 'screen');
$style.setAttribute('id', 'tifmPreviewCSS');
$style.innerText = '.tifm-btn{transform:scale(1.0)!important;opacity:1!important;max-height:60px!important;}';
$('head').append($style);
$('.tifm_darker_a_preview').text('Hide preview');
isDisplayed = true;
window.tifmObserver = true;
}
function hideNotice(e) {
e.preventDefault();
if (!isDisplayed) return previewNotice(e);
$('#tifmPreviewCSS').remove();
$('.tifm_darker_a_preview').text('Show me a preview');
isDisplayed = false;
window.tifmObserver = false;
}
function disableFeatureAndDismiss(e) {
e.preventDefault();
hideNotice(e);
hideAndDismissNotice('dismiss');
}
function enableAndDismissNotice(e) {
e.preventDefault();
previewNotice(e);
hideAndDismissNotice('enable');
}
});
</script>
<?php
}
public function tryItOutScript() {
?>
<script type="text/javascript">
<?php if (get_option('_tifm_feature_enabled') == 'enabled'): ?>
window.tifmObserver = true;
<?php endif; ?>
jQuery(document).ready(function($) {
function makeButton(slug) {
if (typeof window.tifmObserver == 'undefined' || window.tifmObserver == false) return;
let a = document.createElement('A');
a.classList.add('button');
a.classList.add('button-primary');
a.classList.add('tifm-btn-iframe');
a.classList.add('right');
a.style.color = '#fff';
a.style.background = '#2d9418';
a.style.borderColor = '#2d9418';
a.style.boxShadow = 'none';
a.style.marginRight = '15px';
a.setAttribute('href', 'https://tastewp.com/plugins/' + slug);
a.setAttribute('target', '_blank');
a.innerText = 'Try it first';
return a;
}
const observer = new MutationObserver(function (mutations_list) {
mutations_list.forEach(function (mutation) {
mutation.addedNodes.forEach(function (added_node) {
if (added_node.id == 'TB_window') {
$('#TB_window #TB_iframeContent')[0].onload = function () {
let iframe = $('#TB_iframeContent').contents();
let footer = iframe.find('#plugin-information-footer');
let slug = footer.find('#plugin_install_from_iframe').data('slug');
let btn = makeButton(slug);
footer.append(btn);
}
}
});
});
});
observer.observe(document.querySelector('body'), { subtree: false, childList: true });
});
</script>
<?php
}
public function informativeAdminNoticeHandler() {
?>
<div class="notice notice-success is-dismissible" id="tifm_new_feature_notice">
<p id="tifm_paragraph_notice">
<span class="tifm-grow-1">
<b>New: </b> Add a
<a class="button" style="color:#2d9418;border-color:#2d9418;text-align:center;width:88px" href="#!">Try it first</a>
button to try out plugins before installing on your site.
</span>
<span class="tifm-grow-5">
<a class="tifm_darker_a tifm_btn tifm_btn_green" href="#">Sounds cool!</a>
<a class="tifm_darker_a_preview tifm_btn tifm_btn_grey" href="#">Show me a preview</a>
</span>
<span class="tifm-grow-2">
<a class="tifm_darker_a_muted" href="#">Not needed, I'm good</a>
</span>
</p>
<span class="tifm_poweredby">
Brought to you by <a class="tifm_brought_url" href="<?php echo esc_html($this->pluginPageURL); ?>"><?php echo esc_html($this->pluginName); ?></a>
</span>
</div>
<?php
}
public function insertActionButton() {
add_filter('plugin_install_action_links', [&$this, 'actionButtonHandler'], 10, 2);
}
public static function noticeAjax() {
// Nonce verification
if (!isset($_POST['nonce']) || !wp_verify_nonce(sanitize_text_field($_POST['nonce']), 'tifm_notice_nonce')) {
wp_send_json_error();
return;
}
$method = '';
if (isset($_POST['method'])) {
$method = sanitize_text_field($_POST['method']);
}
if ($method == 'dismiss_notice') {
update_option('_tifm_hide_notice_forever', true);
wp_send_json_success();
exit;
} else if ($method == 'dismiss_notice_and_enable') {
update_option('_tifm_feature_enabled', 'enabled');
update_option('_tifm_hide_notice_forever', true);
delete_option('_tifm_disable_feature_forever');
wp_send_json_success();
exit;
} else if ($method == 'dismiss_notice_and_disable') {
update_option('_tifm_hide_notice_forever', true);
update_option('_tifm_disable_feature_forever', true);
update_option('_tifm_feature_enabled', 'disabled');
wp_send_json_success();
exit;
} else {
wp_send_json_error();
exit;
}
}
public function actionButtonHandler($links, $plugin) {
$url = 'https://tastewp.com/plugins/' . $plugin['slug'] . '/?anchor=wpsite';
$css = 'style="transition: 0.4s all;transform: scale(0.0);opacity:0;max-height:0px;"';
if (get_option('_tifm_feature_enabled') == 'enabled') {
$css = '';
}
$button = ['<div class="tifm-btn" ' . $css . '><a class="button" style="color:#2d9418;border-color:#2d9418;text-align:center;width:88px;" target="_blank" href="' . $url . '">Try it first</a></div>'];
array_splice($links, 1, 0, $button);
return $links;
}
}
}
}