public function do_render() { $url = admin_url('admin.php?page=nelioab-add-experiment&experiment-type='); // LANDING PAGE $page_on_front = get_option('page_on_front'); if ($page_on_front != 0) { $this->print_beautiful_box('landing-page', __('A/B Test Your Landing Page', 'nelioab'), array(&$this, 'print_new_exp_box', array('landing-page', $url . NelioABExperiment::PAGE_ALT_EXP . '&lp', __('<strong>Pure A/B Testing from the very beginning!</strong> Create one or more alternatives of your landing page and see which one converts better! If your website starts at your Landing Page, why shouldn\'t you start it first?', 'nelioab')))); } // PAGE $this->print_beautiful_box('page', __('New A/B Test for Pages', 'nelioab'), array(&$this, 'print_new_exp_box', array('page', $url . NelioABExperiment::PAGE_ALT_EXP, __('<strong>Pure A/B Testing!</strong> Create one or more alternatives of a page and <strong>change whatever you want</strong>: the colors, the text, the layout... and do it using your default WordPress editor! Then define the goals and you\'re ready!', 'nelioab')))); // POST $this->print_beautiful_box('post', __('New A/B Test for Posts', 'nelioab'), array(&$this, 'print_new_exp_box', array('post', $url . NelioABExperiment::POST_ALT_EXP, __('<strong>Pure A/B Testing!</strong> Create one or more alternatives of a post and <strong>change whatever you want</strong>: the colors, the text, the layout... and do it using your default WordPress editor! Then define the goals and you\'re ready!', 'nelioab')))); // WOOCOMMERCE PRODUCT SUMMARY if (NelioABWooCommerceSupport::is_plugin_active()) { $this->print_beautiful_box('wc-product-summary', __('WooCommerce Product Summary', 'nelioab'), array(&$this, 'print_new_exp_box', array('wc-product-summary', $url . NelioABExperiment::WC_PRODUCT_SUMMARY_ALT_EXP, __('<strong>Change the name, short description, and featured image of your product, and discover which combination leads to more sales</strong>. Every time the product appears in your website, it is counted as a visit. Once a purchase containing that product is completed, you have a new conversion. Easy, right?', 'nelioab')))); } // HEADLINE ONLY $this->print_beautiful_box('title', __('New A/B Test for Headlines', 'nelioab'), array(&$this, 'print_new_exp_box', array('title', $url . NelioABExperiment::HEADLINE_ALT_EXP, __('Headline Testing is perfect for Publishers. <strong>Try with different Titles, Featured Images, and Excerpts, and check which combination is more appealing</strong>. Every time the Headline is printed somewhere in your site, it is counted as a visit. If a visitor accesses the post, you have a conversion!', 'nelioab')))); // THEMES (enabled starting at version 3.4) if (NelioABWpHelper::is_at_least_version(3.4)) { $this->print_beautiful_box('theme', __('New A/B Theme Test ', 'nelioab'), array(&$this, 'print_new_exp_box', array('theme', $url . NelioABExperiment::THEME_ALT_EXP, __('Would you like to <strong>change your WordPress completely</strong>? Do you want to <strong>test small variations of two child themes</strong>? Then this gives you what you need! Just keep in mind to configure each theme individually before using this kind of experiment.', 'nelioab')))); } // HEATMAPS $this->print_beautiful_box('heatmap', __('New Heatmap Experiment for Pages or (Custom) Posts', 'nelioab'), array(&$this, 'print_new_exp_box', array('heatmap', $url . NelioABExperiment::HEATMAP_EXP, __('If you don\'t know how to get started with A/B Testing, run a Heatmap Experiment and <strong>discover how your users behave when navigating through your website</strong>! This is one of the easiest ways to get ideas on what to do next.', 'nelioab')))); // CSS $this->print_beautiful_box('css', __('New A/B CSS Test', 'nelioab'), array(&$this, 'print_new_exp_box', array('css', $url . NelioABExperiment::CSS_ALT_EXP, __('Do you want to <strong>change the appearence of your WordPress site, but tweaking only small elements here and there</strong>? Then CSS Tests is what you\'re looking for. Create one or more CSS fragments that will be applied to your website and discover which one offers the better results.', 'nelioab')))); // CUSTOM POST TYPES $this->print_beautiful_box('cpt', __('New Custom Post Type Test', 'nelioab'), array(&$this, 'print_new_exp_box', array('cpt', $url . NelioABExperiment::CPT_ALT_EXP, __('<strong>Pure A/B Testing!</strong> Create one or more alternatives of a custom post type and <strong>change whatever you want</strong>: the title, the text, the custom fields... and do it using your default WordPress editor! Then define the goals and you\'re ready!', 'nelioab')))); // WIDGET $this->print_beautiful_box('widget', __('New Widget Test', 'nelioab'), array(&$this, 'print_new_exp_box', array('widget', $url . NelioABExperiment::WIDGET_ALT_EXP, __('Do you want to <strong>arrange widgets in a different order, use different widget setups, or even introduce completely new widgets?</strong> Then Widget Tests is what you need. Select and arrange the widgets you need as a new alternative and discover which one offers the better results.', 'nelioab')))); // MENU $this->print_beautiful_box('menu', __('New Menu Test', 'nelioab'), array(&$this, 'print_new_exp_box', array('menu', $url . NelioABExperiment::MENU_ALT_EXP, __('Menus are one of the most important elements in your WordPress site, for they get a lot of attention from your visitors. <strong>Modify the labels of your menu items, rearrange them, or use a completely different menu</strong> and test which one helps you get more conversions!', 'nelioab')))); }
/** * Creates a new instance of this class. * * @return NelioABFreeTrialPage the new instance of this class. * * @since 4.1.3 */ public function __construct() { $colorscheme = NelioABWpHelper::get_current_colorscheme(); $title = __('Nelio A/B Testing — Free Trial', 'nelioab'); $title .= sprintf(' <span class="nelio-ftcode" style="color:%1$s;border-color:%1$s;">%2$s%3$s</span>', $colorscheme['primary'], __('Code:', 'nelioab'), NelioABAccountSettings::get_nelioab_option('free_trial_code')); parent::__construct($title); }
public function __construct($title) { parent::__construct($title); $this->set_icon('icon-nelioab'); $this->exp = null; $this->goal = null; $this->results = null; require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $this->colorscheme = NelioABWpHelper::get_current_colorscheme(); }
public function __construct($title, $alt_type = NelioABExperiment::CPT_ALT_EXP) { parent::__construct($title); $this->set_icon('icon-nelioab'); $this->set_form_name('nelioab_edit_ab_cpt_exp_form'); $this->alt_type = $alt_type; $this->original_id = -1; $this->post_type_name = false; require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $this->post_types = NelioABWpHelper::get_custom_post_types(); // Prepare tabs $this->add_tab('info', __('General', 'nelioab'), array($this, 'print_basic_info')); $this->add_tab('alts', __('Alternatives', 'nelioab'), array($this, 'print_alternatives')); $this->add_tab('goals', __('Goals', 'nelioab'), array($this, 'print_goals')); }
protected function print_the_real_alternatives() { // REAL ALTERNATIVES // ----------------------------------------- $exp = $this->exp; if ($this->results == null) { $alt_results = null; $ori_conversions = 0; } else { $alt_results = $this->results->get_alternative_results(); $ori_conversions = $alt_results[0]->get_num_of_conversions(); // in this function, the original alternative is NOT used $alt_results = array_slice($alt_results, 1); } $conversions_label = __('Conversions', 'nelioab'); $pageviews_label = __('Pageviews', 'nelioab'); $conversion_views_label = __('Conversions / Views', 'nelioab'); $conversion_rate_label = __('Conversion Rate', 'nelioab'); $alternative_label = __('Alternative', 'nelioab'); $colorscheme = NelioABWpHelper::get_current_colorscheme(); $color = $colorscheme['primary']; $base_color = $color; $i = 0; foreach ($exp->get_alternatives() as $alt) { $i++; $name = $this->trunk($alt->get_name()); $icon = $this->get_experiment_icon($exp); $id = $alt->get_id(); $graphic_id = 'graphic-' . $id; if ($alt_results != null) { $alt_result = $alt_results[$i - 1]; $pageviews = $alt_result->get_num_of_visitors(); $conversions = $alt_result->get_num_of_conversions(); $conversion_rate = $alt_result->get_conversion_rate(); $improvement_factor = $alt_result->get_improvement_factor(); } else { $pageviews = 0; $conversions = 0; $conversion_rate = 0.0; $improvement_factor = 0.0; } $alt_conversion_views = $conversions . ' / ' . $pageviews; $aux = $ori_conversions * $this->goal->get_benefit() * $improvement_factor / 100; $print_improvement = true; // format improvement factor if ($improvement_factor < 0) { $arrow = 'fa-arrow-down'; $stats_color = 'red'; $improvement_factor = $improvement_factor * -1; } else { if ($improvement_factor > 0) { $arrow = 'fa-arrow-up'; $stats_color = 'green'; } else { // $improvement_factor = 0.0 $arrow = 'fa-none'; $stats_color = 'black'; $print_improvement = false; } } if ($aux > 0) { $gain = sprintf(__('%1$s%2$s', 'nelioab', 'money'), NelioABSettings::get_conv_unit(), number_format_i18n($aux, 2)); } else { $gain = sprintf(__('%1$s%2$s', 'nelioab', 'money'), NelioABSettings::get_conv_unit(), number_format_i18n($aux * -1, 2)); } $alt_conversion_rate = number_format_i18n(floatval($conversion_rate), 2) . ' %'; $alt_improvement_factor = number_format_i18n(floatval($improvement_factor), 2) . ' %'; $alternative_number = $i; $winner = false; $winner_color = ''; if ($this->is_winner($alt->get_id())) { $icon = $this->get_winner_icon($exp); $color = $colorscheme['winner']; $winner_color = 'style="background-color:' . $colorscheme['primary'] . ';color:' . $colorscheme['foreground'] . ';"'; $winner = true; } else { $color = $base_color; } $action_links = $this->get_action_links($exp, $alt->get_id(), $winner); $buttons = implode(' ', $action_links); if (!$print_improvement) { $gain = ''; $alt_improvement_factor = ''; } $result = <<<HTML \t\t\t\t<div class="nelio-alternative alternative-{$i} postbox nelio-card"> \t\t\t\t\t<div class="alt-info-header" {$winner_color}> \t\t\t\t\t\t{$icon} \t\t\t\t\t\t<span class="alt-title">{$name}</span> \t\t\t\t\t</div> \t\t\t\t\t<div class="alt-info-body"> \t\t\t\t\t\t<div class="alt-screen no-hover" id="{$id}" style="color:{$color};"> \t\t\t\t\t\t\t\t<div class="alt-name"> \t\t\t\t\t\t\t\t\t{$alternative_label} \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t<div class="alt-number"> \t\t\t\t\t\t\t\t\t{$alternative_number} \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t</div> \t\t\t\t\t\t<div class="alt-stats"> \t\t\t\t\t\t\t<div class="alt-stats-graphic" id="{$graphic_id}"></div> \t\t\t\t\t\t\t<div class="alt-status"> \t\t\t\t\t\t\t\t<div class="alt-cv"> \t\t\t\t\t\t\t\t\t<span class="alt-cv-title">{$conversion_views_label}</span> \t\t\t\t\t\t\t\t\t<span class="alt-cv">{$alt_conversion_views}</span> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t<div class="alt-cr"> \t\t\t\t\t\t\t\t\t<span class="alt-cr-title">{$conversion_rate_label}</span> \t\t\t\t\t\t\t\t\t<span class="alt-cr">{$alt_conversion_rate}</span> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t<div class="alt-stats" style="color:{$stats_color};"> \t\t\t\t\t\t\t\t\t<span class="alt-if"><i class="fa {$arrow}" style="vertical-align: top;"></i>{$alt_improvement_factor}</span> \t\t\t\t\t\t\t\t\t<span class="alt-ii"><i class="fa {$arrow}" style="vertical-align: top;"></i>{$gain}</span> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t</div> \t\t\t\t\t\t</div> \t\t\t\t\t</div> \t\t\t\t\t<div class="alt-info-footer"> \t\t\t\t\t\t<div class="alt-info-footer-content"> \t\t\t\t\t\t\t{$buttons} \t\t\t\t\t\t</div> \t\t\t\t\t</div> \t\t\t\t</div> \t\t\t\t<script> \t\t\t\tjQuery(document).ready(function() { \t\t\t\t\tdrawAlternativeGraphic('{$graphic_id}', \t\t\t\t\t\t{$conversions}, \t\t\t\t\t\t'{$conversions_label}', \t\t\t\t\t\t'{$color}', \t\t\t\t\t\t{$pageviews}, \t\t\t\t\t\t'{$pageviews_label}'); \t\t\t\t}); \t\t\t\t</script> HTML; echo $result; } }
/** * PHPDOC * * @param string $name PHPDOC * @param int $src_post_id PHPDOC * @param boolean|array $ori_post PHPDOC * * @return boolean|int PHPDOC * * @since PHPDOC */ public function create_alternative_copying_content($name, $src_post_id, $ori_post = false) { require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; // Retrieve original post $src_post = get_post($src_post_id, ARRAY_A); if (!$src_post) { return false; } if ($ori_post && $src_post['post_type'] != $ori_post['post_type']) { switch ($ori_post['post_type']) { case 'page': $aux = NelioABExperiment::PAGE_ALT_EXP; break; case 'post': $aux = NelioABExperiment::POST_ALT_EXP; break; default: $aux = NelioABExperiment::CPT_ALT_EXP; } return $this->create_empty_alternative($name, $aux, $ori_post['post_type']); } // Create new empty post $post_data = array('post_author' => $src_post['post_author'], 'post_type' => $src_post['post_type'], 'post_title' => $src_post['post_title'], 'post_content' => $src_post['post_content'], 'post_excerpt' => $src_post['post_excerpt'], 'post_status' => 'draft', 'post_name' => 'nelioab_' . rand(1, 10)); $new_post_id = wp_insert_post($post_data, true); if (is_wp_error($new_post_id)) { return false; } $new_post = get_post($new_post_id, ARRAY_A); // Update the post_name $new_post['post_name'] = 'nelioab_' . $new_post_id; wp_update_post($new_post); // Prepare custom metadata add_post_meta($new_post_id, '_is_nelioab_alternative', 'true'); // Override all information NelioABWpHelper::overwrite($new_post_id, $src_post_id); // Custom Permalinks compatibility require_once NELIOAB_UTILS_DIR . '/custom-permalinks-support.php'; if (NelioABCustomPermalinksSupport::is_plugin_active()) { NelioABCustomPermalinksSupport::remove_custom_permalink($new_post_id); } return $new_post_id; }
/** * This function adds just one script in the nav-menus.php page. The script * checks if the user is currently editing a menu exp alternative and, if * it is, it'll hide all menus except the alternative's. */ public function add_code_to_hide_menus_when_editing_menu_exp() { require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $colorscheme = NelioABWpHelper::get_current_colorscheme(); ?> <div id="nelioab-edit-alt-menus" class="widgets-holder-wrap" style="margin-bottom:1em;display:none;border: 1px solid #e5e5e5;-webkit-box-shadow: 0 1px 1px rgba(0,0,0,.04);box-shadow: 0 1px 1px rgba(0,0,0,.04);"> <div class="widgets-sortables ui-sortable"> <div class="sidebar-name" style="padding:0.2em 1em;background-color:<?php echo $colorscheme['focus']; ?> ;"> <div class="sidebar-name-arrow"><br></div> <h3 style="color:<?php echo $colorscheme['foreground']; ?> ;"><?php _e('Alternative Menu', 'nelioab'); ?> </h3> </div> </div> <div class="content" style="padding:0em 1em 1em 1em;"> <p><strong><?php _e('Go back to...', 'nelioab'); ?> </strong></p> <ul style="margin-left:1.5em;"> <?php if (isset($_GET['back_to_edit'])) { $url = admin_url('admin.php?page=nelioab-experiments&action=edit&id=' . $_GET['nelioab_exp'] . '&ctab=tab-alts&exp_type=' . NelioABExperiment::MENU_ALT_EXP); ?> <li><a href="<?php echo $url; ?> "><?php _e('Editing this experiment', 'nelioab'); ?> </a></li> <?php } else { $url = admin_url('admin.php?page=nelioab-experiments&action=progress&id=' . $_GET['nelioab_exp'] . '&exp_type=' . NelioABExperiment::MENU_ALT_EXP); ?> <li><a href="<?php echo $url; ?> "><?php _e('The results of the related experiment', 'nelioab'); ?> </a></li> <?php } ?> <?php $url = admin_url('admin.php?page=nelioab-experiments'); ?> <li><a href="<?php echo $url; ?> "><?php _e('My list of experiments', 'nelioab'); ?> </a></li> </ul> </div> </div> <script type="text/javascript"> (function($) { // Hide Top Area $('.nav-tab-wrapper').hide(); $('.manage-menus').hide(); $('#nav-menus-frame').css('padding-top', '30px'); // Hide Menu Box $('.menu-name-label').hide(); $('.menu-settings').hide(); $('.delete-action').hide(); // Add Alternative Box $content = $('#nelioab-edit-alt-menus .content'); $('#nelioab-edit-alt-menus .sidebar-name').on('click', function() { $content.toggle(); }); var $aux = $('#nelioab-edit-alt-menus').detach(); $('#nav-menu-meta').prepend($aux); $aux.show(); var $msg = $('#message'); $msg.html($msg.html().replace(/Menu[0-9.\s]+(\s)?/, '<?php echo esc_html(__('Alternative Menu', 'nelioab')); ?> \1')); })(jQuery); </script> <?php }
protected function print_the_real_alternatives() { // REAL ALTERNATIVES // ----------------------------------------- $exp = $this->exp; $the_themes = wp_get_themes(); if ($this->results == null) { $alt_results = null; $ori_conversions = 0; } else { $alt_results = $this->results->get_alternative_results(); $ori_conversions = $alt_results[0]->get_num_of_conversions(); // in this function, the original alternative is NOT used $alt_results = array_slice($alt_results, 1); } $conversions_label = __('Conversions', 'nelioab'); $pageviews_label = __('Pageviews', 'nelioab'); $conversion_views_label = __('Conversions / Views', 'nelioab'); $conversion_rate_label = __('Conversion Rate', 'nelioab'); $alternative_label = __('Alternative', 'nelioab'); $colorscheme = NelioABWpHelper::get_current_colorscheme(); $color = $colorscheme['primary']; $base_color = $color; $i = 0; foreach ($exp->get_alternatives() as $alt) { $i++; $action_links = array(); $name = $this->trunk($alt->get_name()); $icon = $this->get_experiment_icon($exp); $id = $alt->get_id(); $graphic_id = 'graphic-' . $id; if ($alt_results != null) { $alt_result = $alt_results[$i - 1]; $pageviews = $alt_result->get_num_of_visitors(); $conversions = $alt_result->get_num_of_conversions(); $conversion_rate = $alt_result->get_conversion_rate(); $improvement_factor = $alt_result->get_improvement_factor(); } else { $pageviews = 0; $conversions = 0; $conversion_rate = 0.0; $improvement_factor = 0.0; } $alt_conversion_views = $conversions . ' / ' . $pageviews; $aux = $ori_conversions * $this->goal->get_benefit() * $improvement_factor / 100; $print_improvement = true; // format improvement factor if ($improvement_factor < 0) { $arrow = 'fa-arrow-down'; $stats_color = 'red'; $improvement_factor = $improvement_factor * -1; } else { if ($improvement_factor > 0) { $arrow = 'fa-arrow-up'; $stats_color = 'green'; } else { // $improvement_factor = 0.0 $arrow = 'fa-none'; $stats_color = 'black'; $print_improvement = false; } } if ($aux > 0) { $gain = sprintf(__('%1$s%2$s', 'nelioab', 'money'), NelioABSettings::get_conv_unit(), number_format_i18n($aux, 2)); } else { $gain = sprintf(__('%1$s%2$s', 'nelioab', 'money'), NelioABSettings::get_conv_unit(), number_format_i18n($aux * -1, 2)); } $alt_conversion_rate = number_format_i18n(floatval($conversion_rate), 2) . ' %'; $alt_improvement_factor = number_format_i18n(floatval($improvement_factor), 2) . ' %'; $alternative_number = $i; $winner_color = ''; if ($this->is_winner($alt->get_id())) { $icon = $this->get_winner_icon($exp); $color = $colorscheme['winner']; $winner_color = 'style="background-color:' . $colorscheme['primary'] . ';color:' . $colorscheme['foreground'] . ';"'; } else { $color = $base_color; } $theme = null; $theme_image = '#'; foreach ($the_themes as $t) { if ($t['Stylesheet'] == $alt->get_value()) { $theme = $t; $theme_image = $t->get_screenshot(); break; } } if ($theme != NULL && $exp->get_status() == NelioABExperiment::STATUS_FINISHED) { $img = '<span id="loading-' . $alt->get_value() . '" class="dashicons dashicons-update fa-spin animated nelio-apply"></span>'; $aux = sprintf(' <a class="apply-link button" href="javascript:nelioab_confirm_overwriting(\'%1$s\', \'%2$s\', \'%3$s\');">%4$s %5$s</a>', $alt->get_value(), $theme['Stylesheet'], $theme['Template'], $img, __('Apply', 'nelioab')); array_push($action_links, $aux); } $buttons = implode(' ', $action_links); if (!$print_improvement) { $gain = ''; $alt_improvement_factor = ''; } $result = <<<HTML \t\t\t\t<div class="nelio-alternative alternative-{$i} postbox nelio-card"> \t\t\t\t\t<div class="alt-info-header" {$winner_color}> \t\t\t\t\t\t{$icon} \t\t\t\t\t\t<span class="alt-title">{$name}</span> \t\t\t\t\t</div> \t\t\t\t\t<div class="alt-info-body"> \t\t\t\t\t\t<div class="alt-screen hover-img-fade" id="{$id}" style="color:{$color};"> \t\t\t\t\t\t\t<img class="alt-theme-img" src="{$theme_image}" width="320" height="240"> \t\t\t\t\t\t\t\t<div class="alt-name"> \t\t\t\t\t\t\t\t\t{$alternative_label} \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t<div class="alt-number"> \t\t\t\t\t\t\t\t\t{$alternative_number} \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t</div> \t\t\t\t\t\t<div class="alt-stats"> \t\t\t\t\t\t\t<div class="alt-stats-graphic" id="{$graphic_id}"></div> \t\t\t\t\t\t\t<div class="alt-status"> \t\t\t\t\t\t\t\t<div class="alt-cv"> \t\t\t\t\t\t\t\t\t<span class="alt-cv-title">{$conversion_views_label}</span> \t\t\t\t\t\t\t\t\t<span class="alt-cv">{$alt_conversion_views}</span> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t<div class="alt-cr"> \t\t\t\t\t\t\t\t\t<span class="alt-cr-title">{$conversion_rate_label}</span> \t\t\t\t\t\t\t\t\t<span class="alt-cr">{$alt_conversion_rate}</span> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t<div class="alt-stats" style="color:{$stats_color};"> \t\t\t\t\t\t\t\t\t<span class="alt-if"><i class="fa {$arrow}" style="vertical-align: top;"></i>{$alt_improvement_factor}</span> \t\t\t\t\t\t\t\t\t<span class="alt-ii"><i class="fa {$arrow}" style="vertical-align: top;"></i>{$gain}</span> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t</div> \t\t\t\t\t\t</div> \t\t\t\t\t</div> \t\t\t\t\t<div class="alt-info-footer"> \t\t\t\t\t\t<div class="alt-info-footer-content"> \t\t\t\t\t\t\t{$buttons} \t\t\t\t\t\t</div> \t\t\t\t\t</div> \t\t\t\t</div> \t\t\t\t<script> \t\t\t\tjQuery(document).ready(function() { \t\t\t\t\tdrawAlternativeGraphic('{$graphic_id}', \t\t\t\t\t\t{$conversions}, \t\t\t\t\t\t'{$conversions_label}', \t\t\t\t\t\t'{$color}', \t\t\t\t\t\t{$pageviews}, \t\t\t\t\t\t'{$pageviews_label}'); \t\t\t\t}); \t\t\t\t</script> HTML; echo $result; } }
protected function do_build() { // Check settings require_once NELIOAB_ADMIN_DIR . '/error-controller.php'; $error = NelioABErrorController::build_error_page_on_invalid_settings(); if ($error) { return; } // Preparing labels for CUSTOM POST alternatives // ---------------------------------------------- $alt_type = NelioABExperiment::CPT_ALT_EXP; $title = __('Edit Custom Post Type Experiment', 'nelioab'); // We recover the experiment (if any) // ---------------------------------------------- global $nelioab_admin_controller; $experiment = NULL; $other_names = array(); if (!empty($nelioab_admin_controller->data)) { $experiment = $nelioab_admin_controller->data; $alt_type = $experiment->get_type(); } else { $experiment = new NelioABPostAlternativeExperiment(-time()); $experiment->clear(); } // ...and we also recover other experiment names (if any) if (isset($_POST['other_names'])) { $other_names = json_decode(urldecode($_POST['other_names'])); } else { foreach (NelioABExperimentsManager::get_experiments() as $aux) { if ($aux->get_id() != $experiment->get_id()) { array_push($other_names, $aux->get_name()); } } } // Get id of Original custom post type // ---------------------------------------------- if (isset($_GET['post-id']) && $_GET['experiment-type'] == NelioABExperiment::CPT_ALT_EXP) { $experiment->set_original($_GET['post-id']); } // Checking whether there are custom post types available // --------------------------------------------------- require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $post_types = NelioABWpHelper::get_custom_post_types(); if ($alt_type == NelioABExperiment::CPT_ALT_EXP && count($post_types) == 0) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(__('There are no custom post types available.', 'nelioab'), __('You have to create a public custom post type and publish some custom posts first to use this type of experiment.', 'nelioab')); return $view; } $found = false; foreach ($post_types as $post_type) { $options_for_posts = array('posts_per_page' => 1, 'post_type' => $post_type->name, 'post_status' => 'publish'); $list_of_posts = get_posts($options_for_posts); require_once NELIOAB_UTILS_DIR . '/data-manager.php'; NelioABArrays::sort_posts($list_of_posts); if (count($list_of_posts) > 0) { $found = true; break; } } if ($alt_type == NelioABExperiment::CPT_ALT_EXP && !$found) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(__('There are no custom posts available.', 'nelioab'), __('Please, create one custom post and try again.', 'nelioab')); return $view; } // If everything is OK, we keep going! // --------------------------------------------------- // Creating the view $view = $this->create_view($alt_type); foreach ($other_names as $name) { $view->add_another_experiment_name($name); } // Experiment information $view->set_basic_info($experiment->get_id(), $experiment->get_name(), $experiment->get_description(), $experiment->get_finalization_mode(), $experiment->get_finalization_value()); // Experiment specific variables and alternatives $view->set_custom_post_type($experiment->get_post_type()); $view->set_original_id($experiment->get_originals_id()); $view->set_alternatives($experiment->get_json4js_alternatives()); // Goals $goals = $experiment->get_goals(); foreach ($goals as $goal) { $view->add_goal($goal->json4js()); } return $view; }
/** * This function is an AJAX callback that looks for posts. * * It returns a list of up to 20 posts (or pages). It is used by the * select2 widget (an item selector that looks more beautiful than regular * the "select>option" combo. * * Accepted POST params are: * * * term: {string} the (part of the) string used to look for items. * * type: {array} array containing the types of element are we looking. * * default_id: {int} (optional) if set, the item with that ID will be * returned. If that item is not found, then we'll perform a regular search * (as if the param had not been set). * * @return array a list of matching posts. * * @since PHPDOC */ public static function search_posts() { $term = false; if (isset($_POST['term']) & !empty($_POST['term'])) { $term = $_POST['term']; } $types = array(); if (isset($_POST['type'])) { $types = $_POST['type']; } if (!is_array($types)) { $types = array($types); } $status = 'publish'; if (isset($_POST['drafts']) && 'show-drafts' == $_POST['drafts']) { $status = array('publish', 'draft'); } $default_id = false; if (isset($_POST['default_id'])) { $default_id = $_POST['default_id']; } if ($default_id == -1) { $default_id = false; } $default_thumbnail = sprintf('<img src="data:image/gif;%s" class="%s" alt="%s" />', 'base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', 'attachment-thumbnail wp-post-image nelioab-no-thumbnail', __('No featured image available', 'nelioab')); $args = array('post_title_like' => $term, 'posts_per_page' => 20, 'meta_key' => '_is_nelioab_alternative', 'meta_compare' => 'NOT EXISTS', 'post_status' => $status); if (count($types) > 0) { $aux = array(); foreach ($types as $type) { if (strpos($type, 'nelioab-') === false) { array_push($aux, $type); } } foreach ($types as $type) { if ('nelioab-all-post-types' == $type) { array_push($aux, 'page'); array_push($aux, 'post'); foreach (NelioABWpHelper::get_custom_post_types() as $cpt) { array_push($aux, $cpt->name); } } } if (count($aux) > 0) { $args['post_type'] = $aux; } } if ($types && count($types) == 1 && 'page' === $types[0] && !$term) { $args['order'] = 'asc'; $args['orderby'] = 'title'; } $latest_post_item = false; if (in_array('nelioab-latest-posts', $types) || false !== $default_id) { $lp_title = __('Your latest posts', 'nelioab'); if (!$term || strpos(strtolower($lp_title), strtolower($term)) !== false) { $latest_post_item = array('id' => NelioABController::FRONT_PAGE__YOUR_LATEST_POSTS, 'type' => '<i>latest-posts</i>', 'title' => self::fix_title($lp_title), 'status' => '<i>dynamic</i>', 'date' => '', 'author' => 'WordPress', 'thumbnail' => $default_thumbnail); } } $theme_based_landing_page = false; if (in_array('nelioab-theme-landing-page', $types) && NelioABSettings::does_theme_use_a_custom_landing_page() || NelioABController::FRONT_PAGE__THEME_BASED_LANDING == $default_id) { $lp_title = __('Landing Page (Theme-based)', 'nelioab'); if (!$term || strpos(strtolower($lp_title), strtolower($term)) !== false) { $theme_based_landing_page = array('id' => NelioABController::FRONT_PAGE__THEME_BASED_LANDING, 'type' => '<i>landing-page</i>', 'title' => self::fix_title($lp_title), 'status' => '<i>dynamic</i>', 'date' => '', 'author' => 'WordPress', 'thumbnail' => $default_thumbnail); } } // If there's a default_id set, it means that the user is interested // in one post only; I'm going to return that post to him if ($default_id !== false) { $id = $default_id; $post = false; if ($id == NelioABController::FRONT_PAGE__YOUR_LATEST_POSTS) { header('Content-Type: application/json'); echo json_encode(array($latest_post_item)); die; } if ($id == NelioABController::FRONT_PAGE__THEME_BASED_LANDING) { header('Content-Type: application/json'); echo json_encode(array($theme_based_landing_page)); die; } if ($id > 0) { $post = get_post($id); } if ($post) { $thumbnail = get_the_post_thumbnail($post->ID, 'thumbnail'); if ($thumbnail === '') { $thumbnail = $default_thumbnail; } $item = array('id' => $post->ID, 'title' => self::fix_title($post->post_title), 'thumbnail' => $thumbnail, 'excerpt' => $post->post_excerpt); header('Content-Type: application/json'); echo json_encode(array($item)); die; } } $result = array(); add_filter('posts_where', array('NelioABWpHelper', 'add_title_filter_to_wpquery'), 10, 2); $my_query = new WP_Query($args); remove_filter('posts_where', array('NelioABWpHelper', 'add_title_filter_to_wpquery'), 10, 2); if ($my_query->have_posts()) { global $post; while ($my_query->have_posts()) { $my_query->the_post(); $thumbnail = get_the_post_thumbnail($post->ID, 'thumbnail'); if ($thumbnail === '') { $thumbnail = $default_thumbnail; } $item = array('id' => $post->ID, 'type' => $post->post_type, 'title' => self::fix_title($post->post_title), 'status' => $post->post_status, 'date' => $post->post_date, 'excerpt' => $post->post_excerpt, 'author' => get_the_author(), 'thumbnail' => $thumbnail); array_push($result, $item); } } if ($latest_post_item) { array_unshift($result, $latest_post_item); } if ($theme_based_landing_page) { array_unshift($result, $theme_based_landing_page); } header('Content-Type: application/json'); echo json_encode($result); die; }
protected function print_alternatives() { ?> <h2 style="padding-top:2em;"><?php _e('Alternatives', 'nelioab'); ?> </h2> <?php $this->print_theme($this->current_theme['id'], $this->current_theme['name'], $this->current_theme['image'], $this->current_theme['creator'], true, true); foreach ($this->themes as $theme) { $this->print_theme($theme['id'], $theme['name'], $theme['image'], $theme['creator'], $theme['selected']); } ?> <input type="hidden" name="nelioab_selected_themes" id="nelioab_selected_themes" value="<?php echo rawurlencode(json_encode($this->selected_themes)); ?> " /> <input type="hidden" name="nelioab_appspot_ids" id="nelioab_appspot_ids" value="<?php echo rawurlencode(json_encode($this->appspot_ids)); ?> " /> <script type="text/javascript"> var NelioABSelectedThemes; (function($) { <?php require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $colorscheme = NelioABWpHelper::get_current_colorscheme(); ?> NelioABParams = {css:{}}; NelioABParams.css.value = document.createElement('style'); NelioABParams.css.value.setAttribute('type', 'text/css'); NelioABParams.css.value.innerHTML = '' + '.nelioab-selected .theme-image-selector { ' + ' border-color:<?php echo $colorscheme['primary']; ?> !important;' + '} ' + '.nelioab-theme.nelioab-selected, .nelioab-theme.nelioab-selected:hover { ' + ' background:<?php echo $colorscheme['primary']; ?> !important;' + '}'; document.getElementsByTagName('head')[0].appendChild(NelioABParams.css.value); NelioABSelectedThemes = JSON.parse( decodeURIComponent( jQuery('#nelioab_selected_themes').attr('value') ) ); function validate() { var isOneSelected = false; for( var i = 0; i < NelioABSelectedThemes.length && !isOneSelected; ++i ) if ( NelioABSelectedThemes[i].isSelected ) isOneSelected = true; if ( isOneSelected ) return [true,true]; else return [true,false]; } function toggleTheme( theme ) { if ( theme.hasClass( 'nelioab-is-current-theme' ) ) return; var selected; if ( theme.hasClass('nelioab-selected') ) { theme.removeClass('nelioab-selected'); selected = false; } else { theme.addClass('nelioab-selected'); selected = true; } var id = theme.attr('id'); var name = theme.find('.the-whole-name').first().text(); var found = false; for( var i = 0; i < NelioABSelectedThemes.length && !found; ++i ) { var st = NelioABSelectedThemes[i]; if ( st.value == id ) found = st; } if ( !found ) { found = { value: id, name: name }; NelioABSelectedThemes.push( found ); } found.isSelected = selected; validate(); } $('.nelioab-theme').click(function() { toggleTheme($(this)); }); // Save the experiment (and encode the alternatives) $(document).on('save-experiment', function() { $( '#nelioab_selected_themes' ).attr('value', encodeURIComponent( JSON.stringify( NelioABSelectedThemes ) ) .replace( /'/g, "%27") ); }); $(document).on( 'tab-changed', function( e, tabId ) { if ( tabId == 'tab-theme-alts' ) NelioABEditExperiment.validateCurrentTab = validate; }); })(jQuery); </script> <?php }
/** * This function adds just one script in the widgets.php page. The script * checks if the user is currently editing a widget exp alternative and, if * it is, it'll hide all widgets except the alternative's. * * If he's editing no alternative, then all widgets that belong to one will * be hidden. */ public function add_code_to_hide_widgets_when_editing_widget_exp() { $widgets_in_experiments = self::get_widgets_in_experiments(); $viewing_original = !$this->validate($_GET, 'check'); $exp_id = ''; $alt_id = ''; if ($viewing_original) { $widgets_to_hide = array_keys($widgets_in_experiments); $exp_id = 'original'; $alt_id = 'original'; ?> <script type="text/javascript"> jQuery(document).ready(function() { var ids = <?php echo json_encode($widgets_to_hide); ?> ; for ( i = 0; i < ids.length; ++i ) { jQuery('#widgets-right .nelioab-widget-' + ids[i]).closest('.widget').hide(); jQuery('#wp_inactive_widgets .nelioab-widget-' + ids[i]).closest('.widget').hide(); } }); </script> <?php } else { $widgets_to_show = array(); $exp_id = $_GET['nelioab_exp']; $alt_id = $_GET['nelioab_alt']; foreach ($widgets_in_experiments as $widget_id => $exp_info) { if ($exp_info['exp'] == $exp_id && $exp_info['alt'] == $alt_id) { array_push($widgets_to_show, $widget_id); } } require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $colorscheme = NelioABWpHelper::get_current_colorscheme(); ?> <div id="nelioab-edit-alt-widgets" class="widgets-holder-wrap" style="border: 1px solid #e5e5e5;-webkit-box-shadow: 0 1px 1px rgba(0,0,0,.04);box-shadow: 0 1px 1px rgba(0,0,0,.04);"> <div class="widgets-sortables ui-sortable"> <div class="sidebar-name" style="padding:0.2em 1em;background-color:<?php echo $colorscheme['focus']; ?> ;"> <div class="sidebar-name-arrow"><br></div> <h3 style="color:<?php echo $colorscheme['foreground']; ?> ;"><?php _e('Alternative Widget Set', 'nelioab'); ?> </h3> </div> </div> <div class="content" style="padding:0em 1em 1em 1em;"> <p><?php _e('Use the following button to duplicate the widgets you\'re currently using in your site.', 'nelioab'); ?> </p> <a class="button button-primary" id="duplicate-widgets"><?php _e('Duplicate Widgets', 'nelioab'); ?> </a> <span class="spinner" style="float:none;"></span> <p><strong><?php _e('Go back to...', 'nelioab'); ?> </strong></p> <ul style="margin-left:1.5em;"> <?php if (isset($_GET['back_to_edit'])) { $url = admin_url('admin.php?page=nelioab-experiments&action=edit&id=' . $_GET['nelioab_exp'] . '&ctab=tab-alts&exp_type=' . NelioABExperiment::WIDGET_ALT_EXP); ?> <li><a href="<?php echo $url; ?> "><?php _e('Editing this experiment', 'nelioab'); ?> </a></li> <?php } else { $url = admin_url('admin.php?page=nelioab-experiments&action=progress&id=' . $_GET['nelioab_exp'] . '&exp_type=' . NelioABExperiment::WIDGET_ALT_EXP); ?> <li><a href="<?php echo $url; ?> "><?php _e('The results of the related experiment', 'nelioab'); ?> </a></li> <?php } ?> <?php $url = admin_url('admin.php?page=nelioab-experiments'); ?> <li><a href="<?php echo $url; ?> "><?php _e('My list of experiments', 'nelioab'); ?> </a></li> </ul> </div> </div> <script type="text/javascript"> (function($) { var $content = jQuery('#nelioab-edit-alt-widgets .content'); $('#nelioab-edit-alt-widgets .sidebar-name').on('click', function() { $content.toggle(); }); $('#duplicate-widgets').on('click', function() { if ( $(this).hasClass('disabled') ) return; $(this).addClass('disabled'); $('#nelioab-edit-alt-widgets .spinner').css('display', 'inline-block'); $('#available-widgets,.inactive-sidebar,.widget-liquid-right').fadeOut(); jQuery.ajax({ type: 'POST', async: false, url: ajaxurl, data: { action: 'nelioab_duplicate_original_widgets', exp_id: <?php echo $_GET['nelioab_exp']; ?> , alt_id: <?php echo $_GET['nelioab_alt']; ?> , check: '<?php echo hash('md5', $_GET['nelioab_exp'] . $_GET['nelioab_alt']); ?> ', }, success: function(data) { window.location.reload(); }, error: function(data) { // Something failed :-( }, }); }); $(document).ajaxComplete(function() { if ( jQuery("#widgets-right .widget:visible").length > 0 ) jQuery('#duplicate-widgets').addClass('disabled'); else jQuery('#duplicate-widgets').removeClass('disabled'); }); })(jQuery); jQuery(document).ready(function() { // Hide all widgets and then show only those that belong to this alt/exp combo jQuery('#widgets-right .widget').hide(); jQuery('#wp_inactive_widgets .widget').hide(); var ids = <?php echo json_encode($widgets_to_show); ?> ; for ( i = 0; i < ids.length; ++i ) jQuery('.nelioab-widget-' + ids[i]).closest('.widget').css('display',''); // Disable "duplicate widgets" button if there are widgets if ( jQuery("#widgets-right .widget:visible").length > 0 ) jQuery('#duplicate-widgets').addClass('disabled'); else jQuery('#duplicate-widgets').removeClass('disabled'); // Add controls var $block = jQuery('#nelioab-edit-alt-widgets').detach(); jQuery('#widgets-left').prepend($block); $block.show(); }); </script> <?php } // Set the proper EXP/ALT combo values for new widgets ?> <script type="text/javascript"> jQuery(document).ready(function() { jQuery('#available-widgets .widget input[name=nelioab_exp]').attr('value','<?php echo $exp_id; ?> '); jQuery('#available-widgets .widget input[name=nelioab_alt]').attr('value','<?php echo $alt_id; ?> '); }); </script> <?php }
/** * Deactivates our plugin. * * This function is called by the "registed_deactivation_hook". Alternatives * are regular pages or posts (draft status) with a special metaoption that * is used to hide them from the admin menu. When the plugin is deactivated, * no one hides the alternatives... In order to prevent them from appearing, * we change their post_type to a fake type. * * @return void * * @since PHPDOC */ function nelioab_deactivate_plugin() { /** @var wpdb $wpdb */ global $wpdb; require_once NELIOAB_EXP_CONTROLLERS_DIR . '/widget-experiment-controller.php'; require_once NELIOAB_EXP_CONTROLLERS_DIR . '/menu-experiment-controller.php'; if (isset($_GET['action']) && 'clean-and-deactivate' == $_GET['action']) { // Remove all alternative widgets NelioABWidgetExpAdminController::clean_all_alternative_widgets(); // Remove all alternative menus NelioABMenuExpAdminController::clean_all_alternative_menus(); // Remove all alternative pages and posts $query = '' . 'DELETE FROM ' . $wpdb->posts . ' WHERE ' . 'id IN (' . 'SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE ' . 'meta_key = \'_is_nelioab_alternative\' ' . ')'; $wpdb->query($query); // Clean all experiments in AE require_once NELIOAB_UTILS_DIR . '/backend.php'; for ($i = 0; $i < 5; ++$i) { try { NelioABBackend::remote_get(sprintf(NELIOAB_BACKEND_URL . '/site/%s/clean', NelioABAccountSettings::get_site_id())); break; } catch (Exception $e) { } } // Remove all Nelio options $query = 'DELETE FROM ' . $wpdb->postmeta . ' WHERE meta_key LIKE \'%nelioab%\''; $wpdb->query($query); $query = 'DELETE FROM ' . $wpdb->options . ' WHERE option_name LIKE \'%nelioab%\''; $wpdb->query($query); } else { // Hiding alternative posts $query = '' . 'UPDATE ' . $wpdb->posts . ' SET post_type = %s WHERE ' . 'id IN (' . 'SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE ' . 'meta_key = \'_is_nelioab_alternative\' ' . ') AND ' . 'post_type = %s'; // recover post type names require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $cpts = NelioABWpHelper::get_custom_post_types(); $post_types = array('post', 'page'); foreach ($cpts as $post_type) { array_push($post_types, $post_type->name); } // execute the query foreach ($post_types as $post_type) { $wpdb->query($wpdb->prepare($query, 'nelioab_alt_' . $post_type, $post_type)); } // Hiding widget alternatives NelioABWidgetExpAdminController::backup_alternative_widgets(); // Hiding menu alternatives NelioABMenuExpAdminController::backup_alternative_menus(); } }
public function do_render() { echo '<div id="post-body" class="metabox-holder columns-2">'; echo '<div id="post-body-content">'; if (count($this->experiments) == 0) { echo "<div class='nelio-message'>"; echo sprintf('<img class="animated flipInY" src="%s" alt="%s" />', nelioab_admin_asset_link('/images/dashboard.png'), __('Dashboard Icon', 'nelioab')); echo '<h2 style="max-width:750px;">'; printf('%1$s<br><br><a class="button button-primary" href="%3$s">%2$s</a>', __('Here you\'ll find relevant information about your running experiments.', 'nelioab'), __('Create One Now!', 'nelioab', 'create-experiment'), 'admin.php?page=nelioab-add-experiment'); echo '</h2>'; echo '</div>'; } else { echo '<h2>' . __('Running Experiments', 'nelioab') . '</h2>'; $this->print_cards(); } echo '</div>'; ?> <div id="postbox-container-1" class="postbox-container" style="overflow:hidden;"> <h2> </h2> <?php require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $cs = NelioABWpHelper::get_current_colorscheme(); ?> <div class="numbers" style="height:40px;"> <div class="left" style="float:left; width:55%;"> <span style="font-weight:bold;"><?php _e('AVAILABLE QUOTA', 'nelioab'); ?> </span><br> <span style="color:<?php echo $cs['primary']; ?> ; font-size:10px;"><?php echo number_format_i18n($this->quota['regular'], 0); ?> </span><span style="font-size:10px;"> / <?php echo number_format_i18n($this->quota['monthly'], 0); if ($this->quota['extra'] > 0) { echo ' <span style="color:#999;">'; printf(__('(+%s extra)', 'nelioab'), number_format_i18n($this->quota['extra'], 0)); echo '</span>'; } ?> </span> </div> <div class="right" style="font-size:32px; text-align:right; float:right; width:38%; padding-right:5%; margin-top:8px; opacity:0.7;"> <span><?php // Let's compute the size of the extra quota (if any) if ($this->quota['extra'] > 0) { $extra = $this->quota['extra']; $max_extra = $this->quota['monthly'] / 2; if ($extra > $max_extra) { $extra = $max_extra; } $extra_perc = $extra / $max_extra * 20; } else { $extra_perc = 0; } $extra_perc = number_format($extra_perc, 0); // Now let's compute the size of the regular bar if ($this->quota['regular'] > 0) { $perc = $this->quota['regular'] / $this->quota['monthly'] * 100; } else { $perc = 0; } $num_of_decs = 1; if (100 == $perc) { $num_of_decs = 0; } echo number_format($perc, $num_of_decs); ?> %</span> </div> </div> <div class="progress-bar-container" style="background:none;border:2px solid rgba(0,0,0,0.1); width:95%; margin:0px; height:20px;"><?php $bar = '<div class="progress-bar" style="margin:0;padding:0;display:inline-block;height:20px;background-color:%s;width:%s%%;"></div>'; $perc = number_format($perc, 0); if ($perc + $extra_perc > 100) { $perc = 100 - $extra_perc; } printf($bar, $cs['primary'], $perc); printf($bar, $cs['secondary'], $extra_perc); ?> </div> <?php $this->print_rss(); echo '</div>'; // #post-body }
private static function prepare_pro_label($label, $help = true) { if (!NelioABAccountSettings::is_plan_at_least(NelioABAccountSettings::PROFESSIONAL_SUBSCRIPTION_PLAN)) { $res = '<span class="pro-setting-label setting-disabled">' . $label; if ($help) { $res .= ' ' . self::get_icon('#AAA'); } $res .= '</span>'; return $res; } else { $aux = NelioABWpHelper::get_current_colorscheme(); $color = $aux['primary']; $res = '<span class="pro-setting-label">' . $label; if ($help) { $res .= ' ' . self::get_icon($color); } $res .= '</span>'; return $res; } }
protected function do_render() { ?> <div id="post-body" class="metabox-holder columns-2"> <form id="css_edit_value" method="POST" action="#"> <input type="hidden" name="css_save_alt" id="css_save_alt" value="true"></input> <div id="post-body-content"> <div id="titlediv"> <div id="titlewrap"> <label class="screen-reader-text" id="title-prompt-text" for="title">Enter title here</label> <input type="text" name="post_title" size="30" value="<?php echo $this->css_alt->get_name(); ?> " id="title" autocomplete="off"></input> </div> <div class="inside"> <div id="postdivrich" class="postarea edit-form-section"> <div id="wp-content-wrap" class="wp-core-ui wp-editor-wrap tmce-active"> <div class="wp-editor-tabs"> <br> <!-- <a id="content-html" class="wp-switch-editor switch-html" onclick="switchEditors.switchto(this);">Plain</a> --> <!-- <a id="content-tmce" class="wp-switch-editor switch-tmce" onclick="switchEditors.switchto(this);">Visual</a> --> </div> </div> <input type="hidden" id="content" name="content"></input> <pre id="editor"><?php echo $this->css_alt->get_value(); ?> </pre> <script type="text/javascript" src="<?php echo nelioab_admin_asset_link('/lib/ace-editor/ace.js'); ?> "></script> <script type="text/javascript"> var nelioabCssEditor = ace.edit('editor'); nelioabCssEditor.setTheme('ace/theme/tomorrow'); nelioabCssEditor.session.setMode('ace/mode/css'); nelioabCssEditor.setAutoScrollEditorIntoView(true); nelioabCssEditor.setOption('minLines', 20); nelioabCssEditor.setOption('maxLines', 100); nelioabCssEditor.setFontSize(15); </script> </div> </div> </div> </div><!-- /post-body-content --> <div id="postbox-container-1" class="postbox-container"> <div id="save_nelioab_alternative_box" class="meta-box-sortables ui-sortable"> <div id="submitdiv" class="postbox"><?php require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $colorscheme = NelioABWpHelper::get_current_colorscheme(); ?> <script> var nelioab_style_metabox = document.createElement("style"); nelioab_style_metabox.setAttribute("type", "text/css"); nelioab_style_metabox.innerHTML = "#save_nelioab_alternative_box h3.hndle { " + "color:<?php echo $colorscheme['foreground']; ?> ; " + "background: <?php echo $colorscheme['focus']; ?> ;" + "border: 1px solid <?php echo $colorscheme['focus']; ?> ;" + "}" + "#favorite-actions, #message, .add-new-h2, .tablenav, #edit-slug-box { display:none; }" + "#save_nelioab_alternative_box .handlediv," + "#save_nelioab_alternative_box .handlediv:hover { visibility:visible; color:white; }"; document.getElementsByTagName('head')[0].appendChild(nelioab_style_metabox); </script> <h3 style="cursor:auto;" class="hndle"><span><?php _e('Update'); ?> </span></h3> <div class="inside"> <div class="submitbox" id="submitpost"> <div style="margin:1em;"> <p><?php _e('Select a page or post for preview', 'nelioab'); ?> </p> <?php require_once NELIOAB_UTILS_DIR . '/html-generator.php'; NelioABHtmlGenerator::print_full_searcher('post-options', false, 'show-drafts'); ?> </div> <div class="misc-pub-section" style="min-height:4em;"> <div style="float:right;margin-top:1em;"> <input name="original_publish" type="hidden" id="original_publish" value="Update"> <input name="save" type="submit" class="button button-primary" id="publish" tabindex="5" value="<?php _e('Update'); ?> " /> <script type="text/javascript"> jQuery( "#css_edit_value" ).on( 'submit', function() { jQuery("#content").attr('value', nelioabCssEditor.getValue()); }); </script> </div> <div style="float:right;margin-top:1em;margin-right:1em;"> <div id="preview-action"> <a id="preview-button" class="preview button" target="wp-preview" id="post-preview" tabindex="4"><?php _e('Preview'); ?> </a> <input type="hidden" name="wp-preview" id="wp-preview" value="" /> </div> </div> </div> <?php $url = admin_url('admin.php'); $url = add_query_arg(array('nelioab-page' => 'save-css', 'preview' => 'true', 'nelioab_preview_css' => $_REQUEST['css_id']), $url); ?> <script> jQuery("#preview-button").click(function(e) { var aux = jQuery("#post-options").attr('value'); if ( aux == -1 || aux == "" || aux == undefined ) return; if ( aux == <?php echo NelioABController::FRONT_PAGE__YOUR_LATEST_POSTS; ?> ) aux = ""; else aux = "&p=" + aux; jQuery("#css_edit_value").attr('action', "<?php echo $url; ?> " + aux); jQuery("#css_edit_value").attr('target', '_blank'); jQuery("#css_edit_value").submit(); jQuery("#css_edit_value").attr('action', '#'); jQuery("#css_edit_value").attr('target', ''); }); </script> <div style="margin:10px;"> <b><?php _e('Go back to...', 'nelioab'); ?> </b> <?php $url = admin_url('admin.php?page=nelioab-experiments'); $exp_id = $this->experiment->get_id(); $exp_status = $this->experiment->get_status(); ?> <ul style="margin-left:1.5em;"> <?php require_once NELIOAB_MODELS_DIR . '/experiment.php'; switch ($exp_status) { case NelioABExperiment::STATUS_DRAFT: case NelioABExperiment::STATUS_READY: ?> <li><a href="<?php echo $url . '&action=edit&ctab=tab-alts&id=' . $exp_id . '&exp_type=' . $this->experiment->get_type(); ?> "><?php _e('Editing this experiment', 'nelioab'); ?> </a></li><?php break; case NelioABExperiment::STATUS_RUNNING: case NelioABExperiment::STATUS_FINISHED: ?> <li><a href="<?php echo $url . '&action=progress&id=' . $exp_id . '&exp_type=' . $this->experiment->get_type(); ?> "><?php _e('The results of the related experiment', 'nelioab'); ?> </a></li><?php break; case NelioABExperiment::STATUS_TRASH: case NelioABExperiment::STATUS_PAUSED: default: // Nothing here } ?> <li><a href="<?php echo $url; ?> "><?php _e('My list of experiments', 'nelioab'); ?> </a></li> <li><a href="<?php echo admin_url('admin.php?page=nelioab-dashboard'); ?> "><?php _e('The Dashboard', 'nelioab'); ?> </a></li> </ul> </div> </div> </div> </div> </div> <!-- END OF SIDEBAR --> </div> </form> </div> <?php }
public function print_alternative_box() { ?> <div id="submitdiv"><?php require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $colorscheme = NelioABWpHelper::get_current_colorscheme(); ?> <script> var nelioab_style_metabox = document.createElement("style"); nelioab_style_metabox.setAttribute("type", "text/css"); nelioab_style_metabox.innerHTML = "#save_nelioab_alternative_box h3.hndle { " + "color:<?php echo $colorscheme['foreground']; ?> ; " + "background: <?php echo $colorscheme['focus']; ?> ;" + "border: 1px solid <?php echo $colorscheme['focus']; ?> ;" + "}" + "#favorite-actions, #message, .add-new-h2, .tablenav, #edit-slug-box { display:none; }" + "#save_nelioab_alternative_box .handlediv," + "#save_nelioab_alternative_box .handlediv:hover { visibility:visible; color:white; }"; document.getElementsByTagName('head')[0].appendChild(nelioab_style_metabox); </script> <div class="submitbox" id="submitpost"> <div class="misc-pub-section" style="min-height:4em;"> <div style="float:right;margin-top:1em;"> <input name="original_publish" type="hidden" id="original_publish" value="Update"> <input name="save" type="submit" class="button button-primary" id="publish" tabindex="5" value="<?php _e('Update'); ?> " /> </div> <?php $the_post_id = 0; if (isset($_GET['post'])) { $the_post_id = $_GET['post']; } $url = admin_url('admin.php?page=nelioab-experiments'); $values = explode(',', get_post_meta($the_post_id, '_is_nelioab_alternative', true)); $exp_id = $values[0]; $exp_status = $values[1]; ?> <div style="float:right;margin-top:1em;margin-right:1em;"> <div id="preview-action"> <?php $type = 'post'; $ori_id = get_post_meta($_GET['post'], '_nelioab_original_id', true); if (NelioABExperiment::STATUS_RUNNING == $exp_status || NelioABExperiment::STATUS_FINISHED == $exp_status) { $preview_button = __('Preview Changes'); } else { $preview_button = __('Preview'); } $preview_link = get_permalink($_GET['post']); $preview_link = esc_url(add_query_arg('preview', 'true', $preview_link)); ?> <a class="preview button" href="<?php echo $preview_link; ?> " target="wp-preview-<?php echo $_GET['post']; ?> " id="post-preview"><?php echo $preview_button; ?> </a> <input type="hidden" name="wp-preview" id="wp-preview" value="" /> </div> </div> </div> <div style="margin:0.8em 0.2em 0.8em 0.2em;"> <b><?php _e('Go back to...', 'nelioab'); ?> </b> <ul style="margin-left:1.5em;"> <?php switch ($exp_status) { case NelioABExperiment::STATUS_DRAFT: case NelioABExperiment::STATUS_READY: ?> <li><a href="<?php echo $url . '&action=edit&ctab=tab-alts&id=' . $exp_id . '&exp_type=' . NelioABExperiment::PAGE_OR_POST_ALT_EXP; ?> "><?php _e('Editing this experiment', 'nelioab'); ?> </a></li><?php break; case NelioABExperiment::STATUS_RUNNING: case NelioABExperiment::STATUS_FINISHED: ?> <li><a href="<?php echo $url . '&action=progress&id=' . $exp_id . '&exp_type=' . NelioABExperiment::PAGE_OR_POST_ALT_EXP; ?> "><?php _e('The results of the related experiment', 'nelioab'); ?> </a></li><?php break; case NelioABExperiment::STATUS_TRASH: case NelioABExperiment::STATUS_PAUSED: default: // Nothing here } ?> <li><a href="<?php echo $url; ?> "><?php _e('My list of experiments', 'nelioab'); ?> </a></li> <?php if ($exp_status == NelioABExperiment::STATUS_RUNNING) { ?> <li><a href="<?php echo admin_url('admin.php?page=nelioab-dashboard'); ?> "><?php _e('The Dashboard', 'nelioab'); ?> </a></li> <?php } ?> </ul> </div> </div> </div><?php }
/** * It initializes the controller. * * If Nelio's subscription has been deactivated, the plugin will do * nothing at all. * * @return void */ public function init() { // If the user has been disabled... get out of here try { NelioABAccountSettings::check_user_settings(); } catch (Exception $e) { // It is important we add the check here: if the user was deactivated, but it no // longer is, then it's important his settings are rechecked so that we can // re-enable it. if ($e->getCode() == NelioABErrCodes::DEACTIVATED_USER) { return; } } // Load the Visitor class so that all assigned alternatives are require_once NELIOAB_MODELS_DIR . '/visitor.php'; NelioABVisitor::load(); // Trick for proper THEME ALT EXP testing require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; // Theme alt exp related if (NelioABWpHelper::is_at_least_version(3.4)) { $aux = $this->controllers['alt-exp']; add_filter('stylesheet', array(&$aux, 'modify_stylesheet')); add_filter('template', array(&$aux, 'modify_template')); add_filter('sidebars_widgets', array(&$aux, 'show_the_appropriate_widgets')); add_filter('option_stylesheet', array(&$aux, 'modify_option_stylesheet')); add_filter('option_current_theme', array(&$aux, 'modify_option_current_theme')); require_once NELIOAB_UTILS_DIR . '/theme-compatibility-layer.php'; NelioABThemeCompatibilityLayer::make_compat(); } add_action('init', array(&$this, 'do_init')); add_action('init', array(&$this, 'init_admin_stuff')); }