<?php
require_once 'include/utils/Loader.php';
require_once 'include/Sphere/Entity.php';
require_once 'include/utils/NotImp.php';
sphere_import ( 'include.runtime.EntryPoint' );
class SiteUI extends Sphere_EntryPoint {
  function process(Sphere_Request $request) {
    Sphere_Session::init ();
    $currentUser = $this->getLogin ();
    $view = $request->get ( 'view' );
    $action = $request->get ( 'action' );
    $module = $request->get ( 'module' );
    print "TEST: [" . json_encode ( $currentUser ) . ":" . json_encode ( $view ) . ":" . json_encode ( $action ) . "]<br />";
    try {
      if (empty ( $module )) {
        if ($this->hasLogin ()) {
          print "We're Logged In Load Default Module!";
        }
        else {
          $module = 'Users';
          $qualifiedModuleName = 'Settings:Users';
          $view = 'Login';
        }
                                       $request->set('module', $module);
                                $request->set('view', $view);
      }
      if (empty ( $action )) {
        $componentType = 'View';
        if (empty ( $view ))
          $view = 'Index';
        $componentName = $view;
      }
      else {
        $componentType = 'Action';
        $componentName = $action;
      }
      $handlerClass = Sphere_Loader::getComponentClassName ( $componentType, $componentName, $qualifiedModuleName );
      $handler = new $handlerClass ();
      if ($handler) {
        print "We've Got A Handler!";
        $handler->validateRequest($request);
                                        if ($handler->loginRequired()) {
                                        $this->checkLogin ($request);
                                }
                  $this->triggerPreProcess($handler, $request);
                                $response = $handler->process($request);
                                $this->triggerPostProcess($handler, $request);
      }
      else {
        throw new AppException ( 'Handler Not Found!' );
      }
    }
    catch ( Exception $e ) {
      if ($view) {
        // log for development
        // global $log;
        // $log->debug($e->getMessage().":".$e->getTraceAsString());
        // $viewer = new Vtiger_Viewer();
        // $viewer->assign('MESSAGE', $e->getMessage());
        // $viewer->view('OperationNotPermitted.tpl', 'Vtiger');
        print "EXCEPTION: View! [" . $e->getMessage () . ":" . $e->getTraceAsString () . "]<br />\n";
      }
      else {
        // $response = new Vtiger_Response();
        // $response->setEmitType(Vtiger_Response::$EMIT_JSON);
        // $response->setError($e->getMessage());
        print "EXCEPTION: No View!";
      }
    }
  }
  function getLogin() {
    $user = parent::getLogin ();
    if (! $user && isset ( $_SESSION ['authenticated_user_id'] )) {
      $userid = Sphere_Session::get ( 'AUTHUSERID', $_SESSION ['authenticated_user_id'] );
      if ($userid && sphere_global ( 'application_unique_key' ) == $_SESSION ['app_unique_key']) {
        $user = CRMEntity::getInstance ( 'Users' );
        $user->retrieveCurrentUserInfoFromFile ( $userid );
        $this->setLogin ( $user );
      }
    }
    return $user;
  }
        protected function triggerPreProcess($handler, $request) {
                if($request->isAjax()){
                        return true;
                }
                $handler->preProcess($request);
        }
        protected function triggerPostProcess($handler, $request) {
                if($request->isAjax()){
                        return true;
                }
                $handler->postProcess($request);
        }
}
?>