File Editor
Directories:
.. (Back)
Files:
tryOutPlugins.php
Create New File
Create
Edit File: 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 <kontakt@iclyde.pl> */ // 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; } } } }
Save Changes
Rename File
Rename