/** * Sets the result status of this experiment to the given status and confidence. * * @param int $status the new status of the experiment. * @param int $confidence the confidence (from 0 to 100) we have in the status of the current results. * * @return void * * @since 3.0.0 */ public function set_result_status($status, $confidence) { $this->result_status = NelioABGTest::get_result_status_from_str($status); if (NelioABGTest::WINNER == $this->result_status) { if (NelioABSettings::get_min_confidence_for_significance() <= $confidence) { $this->result_status = NelioABGTest::WINNER_WITH_CONFIDENCE; } } }
/** * PHPDOC * * @return NelioABAltExpGoalResult PHPDOC * * @since PHPDOC */ public function get_results() { $results = new NelioABAltExpGoalResult(); /** @var NelioABAlternativeExperiment $experiment */ $experiment = $this->get_experiment(); $url = sprintf(NELIOAB_BACKEND_URL . '/goal/alternativeexp/%s/result', $this->get_id()); $json_data = null; $json_data = NelioABBackend::remote_get($url); $json_data = json_decode($json_data['body'], true); $results->set_total_visitors($json_data['totalVisitors']); $results->set_total_conversions($json_data['totalConversions']); $results->set_total_conversion_rate($json_data['totalConversionRate']); $results->set_visitors_history($json_data['historyVisitors']); $results->set_conversions_history($json_data['historyConversions']); $results->set_first_update($json_data['firstUpdate']); $results->set_last_update($json_data['lastUpdate']); $confidence = 0; if (isset($json_data['resultStatus'])) { $confidence = $json_data['confidenceInResultStatus']; } $results->set_summary_status(NelioABGTest::get_result_status_from_str($json_data['resultStatus']), $confidence); $alt_res = new NelioABAltStats(true); // Original $alt_res->set_name(__('Original', 'nelioab')); $alt_res->set_alt_id($json_data['originalStats']['altId']); $alt_res->set_num_of_visitors($json_data['originalStats']['visitors']); $alt_res->set_num_of_conversions($json_data['originalStats']['conversions']); $alt_res->set_conversion_rate($json_data['originalStats']['conversionRate']); if (isset($json_data['originalStats']['historyVisitors'])) { $alt_res->set_visitors_history($json_data['originalStats']['historyVisitors']); } if (isset($json_data['originalStats']['historyConversions'])) { $alt_res->set_conversions_history($json_data['originalStats']['historyConversions']); } $results->add_alternative_results($alt_res); if (is_array($json_data['alternativeStats'])) { foreach ($json_data['alternativeStats'] as $json_alt) { $alt_res = new NelioABAltStats(); $alternative = null; foreach ($experiment->get_alternatives() as $alt) { /** @var NelioABAlternative $alt */ if ($alt->get_id() == $json_alt['altId']) { $alternative = $alt; } } if ($alternative == null) { foreach ($experiment->get_alternatives() as $alt) { if ($alt->applies_to_post_id($json_alt['altId'])) { $alternative = $alt; } } } if ($alternative == null) { continue; } $alt_res->set_name($alternative->get_name()); $alt_res->set_alt_id($json_alt['altId']); $alt_res->set_num_of_visitors($json_alt['visitors']); $alt_res->set_num_of_conversions($json_alt['conversions']); $alt_res->set_conversion_rate($json_alt['conversionRate']); $alt_res->set_improvement_factor($json_alt['improvementFactor']); if (isset($json_alt['historyVisitors'])) { $alt_res->set_visitors_history($json_alt['historyVisitors']); } if (isset($json_alt['historyConversions'])) { $alt_res->set_conversions_history($json_alt['historyConversions']); } $results->add_alternative_results($alt_res); } } if (is_array($json_data['gTests'])) { foreach ($json_data['gTests'] as $stats) { $g = new NelioABGTest($stats['message'], $experiment->get_originals_id()); $min_ver = NULL; if (isset($stats['minVersion'])) { $min_ver = $stats['minVersion']; $g->set_min($min_ver); } $max_ver = NULL; if (isset($stats['maxVersion'])) { $max_ver = $stats['maxVersion']; $g->set_max($max_ver); } if (isset($stats['gtest'])) { $g->set_gtest($stats['gtest']); } if (isset($stats['pvalue'])) { $g->set_pvalue($stats['pvalue']); } if (isset($stats['certainty'])) { $g->set_certainty($stats['certainty']); } $g->set_min_name(__('Unknown', 'nelioab')); $g->set_max_name(__('Unknown', 'nelioab')); $alts = $experiment->get_alternatives(); for ($i = 0; $i < count($alts); ++$i) { $alt = $alts[$i]; $short_name = sprintf(__('Alternative %s', 'nelioab'), $i + 1); if ($alt->get_identifiable_value() == $min_ver || $alt->get_id() == $min_ver) { $g->set_min_name($short_name, $alt->get_name()); } if ($alt->get_identifiable_value() == $max_ver || $alt->get_id() == $max_ver) { $g->set_max_name($short_name, $alt->get_name()); } } if ($experiment->get_originals_id() == $min_ver) { $g->set_min_name(__('Original', 'nelioab')); } if ($experiment->get_originals_id() == $max_ver) { $g->set_max_name(__('Original', 'nelioab')); } $results->add_gtest($g); } } return $results; }
protected function print_experiment_status($exp, $res, $the_winner, $the_winner_confidence, $originals_conversion_rate, $best_alt, $best_alt_conversion_rate, $best_alt_improvement_factor) { if ($res) { $message = NelioABGTest::generate_status_message($res->get_summary_status()); } else { $message = NelioABGTest::generate_status_message(false); } $src = nelioab_admin_asset_link('/images/progress-no.png'); if ($best_alt > 0) { $best_alt = '(' . __('Alternative', 'nelioab') . ' ' . $best_alt . ')'; } else { $best_alt = ''; } $arrow = ''; $stats_color = 'auto'; $gain = ''; if (self::NO_WINNER == $the_winner) { $main_message = __('Testing...', 'nelioab'); if (NelioABExperiment::STATUS_RUNNING == $exp->get_status()) { $status_message = __('No alternative is better than the rest', 'nelioab'); } else { $status_message = __('No alternative was better than the rest', 'nelioab'); } } else { $main_message = __('¡Winner!', 'nelioab'); if ($the_winner == 0) { if ($the_winner_confidence >= NelioABSettings::get_min_confidence_for_significance()) { $status_message = sprintf(__('Original wins with a %1$s%% confidence', 'nelioab'), $the_winner_confidence); } else { $status_message = sprintf(__('Original wins with just a %1$s%% confidence', 'nelioab'), $the_winner_confidence); } } else { if ($the_winner_confidence >= NelioABSettings::get_min_confidence_for_significance()) { $status_message = sprintf(__('Alternative %1$s wins with a %2$s%% confidence', 'nelioab'), $the_winner, $the_winner_confidence); } else { $status_message = sprintf(__('Alternative %1$s wins with just a %2$s%% confidence', 'nelioab'), $the_winner, $the_winner_confidence); } } if ($the_winner_confidence >= NelioABSettings::get_min_confidence_for_significance()) { $src = nelioab_admin_asset_link('/images/progress-yes.png'); } else { $src = nelioab_admin_asset_link('/images/progress-yes-no.png'); } } $print_improvement = false; if (is_numeric($best_alt_improvement_factor)) { // gain $alt_results = $this->results->get_alternative_results(); $ori_conversions = $alt_results[0]->get_num_of_conversions(); $aux = $ori_conversions * $this->goal->get_benefit() * $best_alt_improvement_factor / 100; $print_improvement = true; // format improvement factor if ($best_alt_improvement_factor < 0) { $arrow = 'fa-arrow-down'; $stats_color = 'red'; $best_alt_improvement_factor = $best_alt_improvement_factor * -1; } else { if ($best_alt_improvement_factor > 0) { $arrow = 'fa-arrow-up'; $stats_color = 'green'; } else { $print_improvement = false; $arrow = 'fa-arrow-none'; $stats_color = 'black'; } } 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)); } } ?> <div id="info-status"> <span class="main-message"><?php echo $main_message; ?> </span> <img src="<?php echo $src; ?> " title="<?php echo $message; ?> " alt="<?php echo $message; ?> " class="masterTooltip animated flipInY"/> <span class="additional-message"><?php echo $status_message; ?> </span> </div> <div id="ori-status"> <span class="ori-name"><?php _e('Original', 'nelioab'); ?> </span> <div id="ori-cr"> <span class="ori-cr-title"><?php _e('Conversion Rate', 'nelioab'); ?> </span> <span class="ori-cr-value"><?php printf('%s %%', $originals_conversion_rate); ?> </span> </div> </div> <div id="alt-status"> <span class="alt-name"><?php _e('Best Alternative', 'nelioab'); ?> <?php echo $best_alt; ?> </span> <div id="alt-cr"> <span class="alt-cr-title"><?php _e('Conversion Rate', 'nelioab'); ?> </span> <span class="alt-cr"><?php printf('%s %%', $best_alt_conversion_rate); ?> </span> </div> <div id="alt-stats" style="color:<?php echo $stats_color; ?> ;"> <span class="alt-if"><i class="fa <?php echo $arrow; ?> " style="vertical-align: top;"></i><?php if ($print_improvement) { printf('%s%%', $best_alt_improvement_factor); } ?> </span> <span class="alt-ii"><i class="fa <?php echo $arrow; ?> " style="vertical-align: top;"></i><?php if ($print_improvement) { echo $gain; } ?> </span> </div> </div> <?php }
/** * Creates a new instance of this class. * * @param int $type PHPDOC * @param int $original PHPDOC * * @return NelioABGTest a new instance of this class. * * @since PHPDOC */ public function __construct($type, $original) { $this->type = NelioABGTest::get_result_status_from_str($type); $this->original = $original; }
public function get_beautiful_title($exp) { $img = '<div class="tab-type tab-type-%1$s" alt="%2$s" title="%2$s"></div>'; switch ($exp->get_type()) { case NelioABExperiment::PAGE_ALT_EXP: try { $page_on_front = get_option('page_on_front'); $aux = $exp->get_alternative_info(); if ($page_on_front == $aux[0]['id']) { $img = sprintf($img, 'landing-page', __('Landing Page', 'nelioab')); } else { $img = sprintf($img, 'page', __('Page', 'nelioab')); } } catch (Exception $e) { $img = sprintf($img, 'page', __('Page', 'nelioab')); } break; case NelioABExperiment::POST_ALT_EXP: $img = sprintf($img, 'post', __('Post', 'nelioab')); break; case NelioABExperiment::CPT_ALT_EXP: $img = sprintf($img, 'cpt', __('Post', 'nelioab')); break; case NelioABExperiment::HEADLINE_ALT_EXP: $img = sprintf($img, 'title', __('Headline', 'nelioab')); break; case NelioABExperiment::WC_PRODUCT_SUMMARY_ALT_EXP: $img = sprintf($img, 'wc-product-summary', __('WooCommerce Product Summary', 'nelioab')); break; case NelioABExperiment::THEME_ALT_EXP: $img = sprintf($img, 'theme', __('Theme', 'nelioab')); break; case NelioABExperiment::CSS_ALT_EXP: $img = sprintf($img, 'css', __('CSS', 'nelioab')); break; case NelioABExperiment::HEATMAP_EXP: $img = sprintf($img, 'heatmap', __('Heatmap', 'nelioab')); break; case NelioABExperiment::WIDGET_ALT_EXP: $img = sprintf($img, 'widget', __('Widget', 'nelioab')); break; case NelioABExperiment::MENU_ALT_EXP: $img = sprintf($img, 'menu', __('Menu', 'nelioab')); break; default: $img = ''; } if ($exp->has_result_status()) { $light = NelioABGTest::generate_status_light($exp->get_result_status()); } else { $light = ''; } $title = ''; $name = $exp->get_name(); if (strlen($name) > 50) { $title = ' title="' . esc_html($name) . '"'; $name = substr($name, 0, 50) . '...'; } $name = '<span class="exp-title"' . $title . '>' . $name . '</span>'; $status = '<span id="info-summary">' . $light . '</span>'; return $img . $name . $status; }