Add analytics
[bus.git] / busui / owa / owa_view.php
blob:a/busui/owa/owa_view.php -> blob:b/busui/owa/owa_view.php
  <?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_template.php');
  require_once(OWA_BASE_CLASSES_DIR.'owa_requestContainer.php'); // ??
   
  /**
  * Abstract View 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_view extends owa_base {
   
  /**
  * Main view template object
  *
  * @var object
  */
  var $t;
   
  /**
  * Body content template object
  *
  * @var object
  */
  var $body;
   
  /**
  * Sub View object
  *
  * @var object
  */
  var $subview;
   
  /**
  * Rednered subview
  *
  * @var string
  */
  var $subview_rendered;
   
  /**
  * CSS file for main template
  *
  * @var unknown_type
  */
  var $css_file;
   
  /**
  * The priviledge level required to access this view
  * @depricated
  * @var string
  */
  var $priviledge_level;
   
  /**
  * Type of page
  *
  * @var unknown_type
  */
  var $page_type;
   
  /**
  * Request Params
  *
  * @var unknown_type
  */
  var $params;
   
  /**
  * Authorization object
  *
  * @var object
  */
  var $auth;
   
  var $module; // set by factory.
   
  var $data;
   
  var $default_subview;
   
  var $is_subview;
   
  var $js = array();
   
  var $css = array();
   
  var $postProcessView = false;
   
  var $renderJsInline;
   
  /**
  * Constructor
  *
  */
  function __construct($params = null) {
   
  parent::__construct($params);
   
  $this->t = new owa_template();
  $this->body = new owa_template($this->module);
  $this->setTheme();
  //header('Content-type: text/html; charset=utf-8');
  }
   
  /**
  * Assembles the view using passed model objects
  *
  * @param unknown_type $data
  * @return unknown
  */
  function assembleView($data) {
   
  $this->e->debug('Assembling view: '.get_class($this));
   
  // set view name in template class. used for navigation.
  if (array_key_exists('view', $this->data)) {
  $this->body->caller_params['view'] = $this->data['view'];
  }
   
  if (array_key_exists('params', $this->data)):
  $this->body->set('params', $this->data['params']);
  endif;
   
  if (array_key_exists('subview', $this->data)):
  $this->body->caller_params['subview'] = $this->data['subview'];
  endif;
   
  // Assign status msg
  if (array_key_exists('status_msg', $this->data)):
  $this->t->set('status_msg', $this->data['status_msg']);
  endif;
   
  // get status msg from code passed on the query string from a redirect.
  if (array_key_exists('status_code', $this->data)):
  $this->t->set('status_msg', $this->getMsg($this->data['status_code']));
  endif;
   
  // set error msg directly if passed from constructor
  if (array_key_exists('error_msg', $this->data)):
  $this->t->set('error_msg', $this->data['error_msg']);
  endif;
   
  // authentication status
  if (array_key_exists('auth_status', $this->data)):
  $this->t->set('authStatus', $this->data['auth_status']);
  endif;
   
  // get error msg from error code passed on the query string from a redirect.
  if (array_key_exists('error_code', $this->data)):
  $this->t->set('error_msg', $this->getMsg($this->data['error_code']));
  endif;
   
  // load subview
  if (!empty($this->data['subview']) || !empty($this->default_subview)):
  // Load subview
  $this->loadSubView($this->data['subview']);
  endif;
   
  // construct main view. This might set some properties of the subview.
  if (method_exists($this, 'render')) {
  $this->render($this->data);
  } else {
  // old style
  $this->construct($this->data);
  }
  //array of errors usually used for field validations
  if (array_key_exists('validation_errors', $this->data)):
  $this->body->set('validation_errors', $this->data['validation_errors']);
  endif;
   
  // pagination
  if (array_key_exists('pagination', $this->data)):
  $this->body->set('pagination', $this->data['pagination']);
  endif;
   
  $this->_setLinkState();
   
  // assemble subview
  if (!empty($this->data['subview'])):
   
  // set view name in template. used for navigation.
  $this->subview->body->caller_params['view'] = $this->data['subview'];
   
  // Set validation errors
  $this->subview->body->set('validation_errors', $this->get('validation_errors'));
   
  // pagination
  if (array_key_exists('pagination', $this->data)):
  $this->subview->body->set('pagination', $this->data['pagination']);
  endif;
   
  if (array_key_exists('params', $this->data)):
  $this->subview->body->set('params', $this->data['params']);
  $this->subview->body->set('do', $this->data['params']['do']);
  endif;
   
  // Load subview
  $this->renderSubView($this->data);
   
  // assign subview to body template
  $this->body->set('subview', $this->subview_rendered);
   
   
  endif;
   
  // assign validation errors
  if (!empty($this->data['validation_errors'])) {
  $ves = new owa_template('base');
  $ves->set_template('error_validation_summary.tpl');
  $ves->set('validation_errors', $this->data['validation_errors']);
  $validation_errors_summary = $ves->fetch();
  $this->t->set('error_msg', $validation_errors_summary);
  }
   
   
  // fire post method
  $this->post();
   
  // assign css and js ellements if the view is not a subview.
  // subview css/js have been merged/pulls from subview and assigned here.
  if ($this->is_subview != true) {
  if (!empty($this->css)) {
  $this->t->set('css', $this->css);
  }
   
  if (!empty($this->js)) {
  $this->t->set('js', $this->js);
  }
  }
   
  //Assign body to main template
  $this->t->set('config', $this->config);
   
  //Assign body to main template
  $this->t->set('body', $this->body);
   
  if ($this->postProcessView === true){
  return $this->postProcess();
  } else {
  // Return fully asembled View
  return $this->t->fetch();
  }
  }
   
  /**
  * Abstract Alternative rendering method reuires the setting of $this->postProcessView to fire
  *
  */
  function postProcess() {
   
  return false;
  }
   
  /**
  * Post method fired right before view is rendered and returned
  * as output
  */
  function post() {
   
  return false;
  }
   
   
  /**
  * Sets the theme to be used by a view
  *
  */
  function setTheme() {
   
  $this->t->set_template($this->config['report_wrapper']);
   
  return;
  }
   
  /**
  * Abstract method for assembling a view
  * @depricated
  * @param array $data
  */
  function construct($data) {
   
  return;
   
  }
   
  /**
  * Assembles subview
  *
  * @param array $data
  */
  function loadSubView($subview) {
   
  if (empty($subview)):
  if (!empty($this->default_subview)):
  $subview = $this->default_subview;
  $this->data['subview'] = $this->default_subview;
  else:
  return $this->e->debug("No Subview was specified by caller.");
  endif;
  endif;
   
  $this->subview = owa_coreAPI::subViewFactory($subview);
  //print_r($subview.'///');
  $this->subview->setData($this->data);
   
  return;
   
  }
   
  /**
  * Assembles subview
  *
  * @param array $data
  */
  function renderSubView($data) {
   
  // Stores subview as string into $this->subview
  $this->subview_rendered = $this->subview->assembleSubView($data);
   
  // pull css and jas elements needed by subview
  $this->css = array_merge($this->css, $this->subview->css);
  $this->js = array_merge($this->js, $this->subview->js);
   
  return;
   
  }
   
  /**
  * Assembles the view using passed model objects
  *
  * @param unknown_type $data
  * @return unknown
  */
  function assembleSubView($data) {
   
  // construct main view. This might set some properties of the subview.
  if (method_exists($this, 'render')) {
  $this->render($data);
  } else {
  // old style
  $this->construct($data);
  }
   
  $this->t->set_template('wrapper_subview.tpl');
   
  //Assign body to main template
  $this->t->set('body', $this->body);
   
  // Return fully asembled View
  $page = $this->t->fetch();
   
  return $page;
   
  }
   
  function setCss($path) {
   
  $url = owa_coreAPI::getSetting('base', 'modules_url').$path;
  $this->css[] = $url;
  return;
  }
   
  function setJs($name, $path, $version ='', $deps = array(), $ie_only = false) {
   
  if (empty($version)) {
  $version = OWA_VERSION;
  }
   
  $uid = $name.$version;
   
  $url = sprintf('%s?version=%s', owa_coreAPI::getSetting('base', 'modules_url').$path, $version);
  $this->js[$uid]['url'] = $url;
   
  // build file system path just in case we need to concatenate the JS into a single file.
  $fs_path = OWA_MODULES_DIR.$path;
  $this->js[$uid]['path'] = $fs_path;
  $this->js[$uid]['deps'] = $deps;