Add analytics
[bus.git] / busui / owa / modules / base / classes / widget.php
blob:a/busui/owa/modules/base/classes/widget.php -> blob:b/busui/owa/modules/base/classes/widget.php
--- a/busui/owa/modules/base/classes/widget.php
+++ b/busui/owa/modules/base/classes/widget.php
@@ -1,1 +1,237 @@
-
+<?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_CLASSES_DIR.'owa_controller.php');
+require_once(OWA_BASE_DIR.'/owa_lib.php');
+require_once(OWA_BASE_DIR.'/owa_view.php');
+
+/**
+ * Abstract Widget Controller Class
+ * 
+ * @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.0.0
+ */
+
+
+class owa_widgetController extends owa_controller {
+	
+	var $default_format = 'graph';
+	var $dom_id;
+	
+	/**
+	 * holding tank or metrics that need 
+	 * to be shared between action methods
+	 */
+	var $metrics = array();
+	
+	function __construct($params) {
+		
+		$this->type = 'widget';
+		//$this->setRequiredCapability('view_reports');
+		//print_r($params);
+		return parent::__construct($params);
+	}
+
+	function pre() {
+	
+	
+		$this->setPeriod($this->getParam('period'));
+		
+		// create dom safe id from do action param
+		$this->dom_id = str_replace('.', '-', $this->params['do']);
+		$this->data['dom_id'] = $this->dom_id;
+			
+		if (!array_key_exists('format', $this->params)):
+			
+				$this->params['format'] = $this->default_format;
+		
+		else:
+			if (empty($this->params['format'])):
+				$this->params['format'] = $this->default_format;
+			endif;
+		endif;
+		
+		return;
+	}
+	
+	function post() {
+	
+		// calls widget format specific functions
+		
+		$this->doFormatAction($this->params['format']);
+	
+		// used to add outer wrapper to widget if it's the first view.
+		$iv = $this->getParam('initial_view');
+		if ($iv == true):
+			$this->data['subview'] = $this->data['view'];
+			$this->data['view'] = 'base.widget';
+			// we dont want to keep passing this.
+			unset($this->data['params']['initial_view']);
+		endif;
+		
+		
+		$this->data['wrapper'] = $this->getParam('wrapper');
+		$this->data['widget'] = $this->params['do'];
+		$this->data['do'] = $this->params['do'];
+		
+		// set default dimensions
+		
+		if (array_key_exists('width', $this->params)):
+			$this->setWidth($this->params['width']);
+		endif;
+		
+		if (array_key_exists('height', $this->params)):
+			$this->setHeight($this->params['height']);
+		endif;
+
+	}
+	
+	function enableFormat($name, $label = '') {
+		
+		if (empty($label)):
+			$label = ucwords($name);
+		endif;
+		
+		$this->data['widget_views'][$name] = $label;
+		return;
+	
+	}
+	
+	function setHeight($height) {
+		
+			$this->data['height'] = $height;
+		
+		return;
+	}
+	
+	function setWidth($width) {
+	
+		$this->data['width'] = $width;
+		
+		return;
+	}
+	
+	function setDefaultFormat($format) {
+	
+		$this->default_format = $format;
+		
+		return;
+		
+	}
+	
+	function doFormatAction($format = '') {
+	
+	
+		$method = $this->params['format'].'Action';
+			
+		if (method_exists($this, $method)) {
+			$this->$method();
+		} else {
+			$this->e->debug("Widget format not implemented. No method named $method");
+		}
+	
+	}
+	
+	function setMetric($name, $obj) {
+		$this->metrics[$name] = $obj;
+		return;
+	}
+	
+	function getMetric($name) {
+		return $this->metrics[$name];
+	}
+
+}
+
+/**
+ * Widget  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.0.0
+ */
+
+class owa_widgetView extends owa_view {
+	
+	function owa_widgetView() {
+		
+		$this->owa_view();
+		
+		return;
+	}
+	
+	function render($data) {
+		
+		// load template
+		
+		if (array_key_exists('is_external', $data['params'])):
+			if ($data['params']['is_external'] == true):
+				$this->t->set_template('wrapper_widget.tpl');
+			else:
+				$this->t->set_template('wrapper_blank.tpl');
+			endif;
+		else:
+			$this->t->set_template('wrapper_blank.tpl');
+		endif;
+		
+		if (array_key_exists('width', $data)):
+			$data['params']['width'] = $data['width'];
+		endif;
+		
+		if (array_key_exists('height', $data)):
+			$data['params']['height'] = $data['height'];
+		endif;
+		
+		$this->_setLinkState();
+		
+		if ($data['wrapper'] === true):
+			$this->body->set_template('widget.tpl');
+		elseif ($data['wrapper'] === 'inpage'):
+			$this->body->set_template('widget_inpage.tpl');
+		endif;
+		
+		if (array_key_exists('format', $data['params'])):
+			$this->body->set('format', $data['params']['format']);
+		endif;
+		
+		$this->body->set('widget', str_replace('.', '-', $data['widget']));			
+		$this->body->set('params', $data['params']);	
+		$this->body->set('title', $data['title']);
+		$this->body->set('widget_views', $data['widget_views']);
+		$this->body->set('widget_views_count', count($data['widget_views']));
+		$this->body->set('do', $data['widget']);
+		
+		return;
+	}
+	
+	
+}
+
+
+	
+
+?>