Add analytics
[bus.git] / busui / owa / modules / base / reportGoalFunnel.php
blob:a/busui/owa/modules/base/reportGoalFunnel.php -> blob:b/busui/owa/modules/base/reportGoalFunnel.php
--- a/busui/owa/modules/base/reportGoalFunnel.php
+++ b/busui/owa/modules/base/reportGoalFunnel.php
@@ -1,1 +1,151 @@
-
+<?php

+

+//

+// Open Web Analytics - An Open Source Web Analytics Framework

+//

+// Copyright 2006 Peter Adams. All rights reserved.

+//

+// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html

+//

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+//

+// $Id$

+//

+

+require_once(OWA_BASE_DIR.'/owa_reportController.php');

+

+/**

+ * Goal Funnel Report Controller

+ * 

+ * @author      Peter Adams <peter@openwebanalytics.com>

+ * @copyright   Copyright &copy; 2006 Peter Adams <peter@openwebanalytics.com>

+ * @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 <peter@openwebanalytics.com>

+ * @copyright   Copyright &copy; 2006 Peter Adams <peter@openwebanalytics.com>

+ * @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') );

+	}

+}

+

+?>