/**
  * 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 
        }
Example #4
0
 /**
  * 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;
 }