--- a/busui/owa/modules/base/reportGoalFunnel.php +++ b/busui/owa/modules/base/reportGoalFunnel.php @@ -1,1 +1,151 @@ - + + * @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') ); + } +} + +?>