* @copyright Copyright © 2006 Peter Adams * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 * @category owa * @package owa * @version $Revision$ * @since owa 1.4.0 */ class owa_reportGoalFunnelController extends owa_reportController { function action() { $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $this->getParam( 'siteId' ) ); $goal_number = $this->getParam('goalNumber'); if ( ! $goal_number ) { $goal_number = 1; } $goal = $gm->getGoal($goal_number); $funnel = $gm->getGoalFunnel($goal_number); if ( $funnel ) { $goal = $gm->getGoal($goal_number); // find required steps. build a constraint string. $required_step_constraints = ''; $steps_count = count($funnel); for ($i=1; $i <= $steps_count ;$i++ ) { if (array_key_exists('is_required', $funnel[$i]) && $funnel[$i]['is_required'] === true) { $required_step_constraints .= 'pagePath=='.$funnel[$i]['url'].','; } } $required_step_constraints = trim($required_step_constraints, ','); //print $required_step_constraints; // get total visits $total_visitors_rs = owa_coreAPI::executeApiCommand(array( 'period' => $this->get('period'), 'startDate' => $this->get('startDate'), 'endDate' => $this->get('endDate'), 'constraints' => $required_step_constraints, 'metrics' => 'visitors', 'do' => 'getResultSet', 'siteId' => $this->getParam( 'siteId' ) )); //print_r($total_visitors_rs); $total_visitors = $total_visitors_rs->getAggregateMetric( 'visitors' ); //print "Total visits: $total_visitors"; $this->set( 'total_visitors', $total_visitors); // get visits for each step // add goal url to steps array $funnel[] = array('url' => $goal['details']['goal_url'], 'name' => $goal['goal_name'], 'step_number' => $steps_count + 1); foreach ( $funnel as $k => $step ) { $operator = '=='; $rs = owa_coreAPI::executeApiCommand(array( 'period' => $this->get('period'), 'startDate' => $this->get('startDate'), 'endDate' => $this->get('endDate'), 'metrics' => 'visitors', 'constraints' => 'pagePath'.$operator.$step['url'], 'do' => 'getResultSet', 'siteId' => $this->getParam( 'siteId' ) )); $visitors = $rs->getAggregateMetric('visitors') ? $rs->getAggregateMetric('visitors'): 0; $funnel[$k]['visitors'] = $visitors; // backfill check in case there are more visitors to this step than were at prior step. if ($funnel[$k]['visitors'] <= $funnel[$k-1]['visitors']) { if ($funnel[$k-1]['visitors'] > 0 ) { $funnel[$k]['visitor_percentage'] = round($funnel[$k]['visitors'] / $funnel[$k-1]['visitors'], 4) * 100 . '%'; } else { $funnel[$k]['visitor_percentage'] = '0.00%'; } } else { $funnel[$k]['visitor_percentage'] = '100%'; } } //print_r($funnel); $goal_step = end($funnel); $goal_conversion_rate = round($goal_step['visitors'] / $total_visitors, 2) * 100 . '%'; $this->set('goal_conversion_rate', $goal_conversion_rate); $this->set('funnel', $funnel); } // set view stuff $this->setSubview('base.reportGoalFunnel'); $this->setTitle('Funnel Visualization:', 'Goal ' . $goal_number); $this->set('goal_number', $goal_number); } } require_once(OWA_BASE_DIR.'/owa_view.php'); /** * Goal Funnel Report View * * @author Peter Adams * @copyright Copyright © 2006 Peter Adams * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 * @category owa * @package owa * @version $Revision$ * @since owa 1.4.0 */ class owa_reportGoalFunnelView extends owa_view { function render() { $this->body->set_template('report_goal_funnel.php'); $this->body->set('funnel', $this->get('funnel')); $this->body->set('funnel_json', json_encode($this->get('funnel'))); $this->body->set('goal_conversion_rate', $this->get('goal_conversion_rate')); $this->body->set('numGoals', owa_coreAPI::getSetting('base', 'numGoals') ); $this->body->set('goal_number', $this->get('goal_number') ); } } ?>