<?php
abstract class Sphere_Controller {
function __construct() {
}
function loginRequired() {
return true;
}
abstract function getViewer(Sphere_Request $request);
abstract function process(Sphere_Request $request);
function validateRequest(Sphere_Request $request) {
}
function preProcess(Sphere_Request $request) {
}
function postProcess(Sphere_Request $request) {
}
// Control the exposure of methods to be invoked from client (kind-of RPC)
protected $exposedMethods = array ();
/**
* Function that will expose methods for external access
*
* @param <String> $name
* - method name
*/
protected function exposeMethod($name) {
if (! in_array ( $name, $this->exposedMethods )) {
$this->exposedMethods [] = $name;
}
}
/**
* Function checks if the method is exposed for client usage
*
* @param string $name
* - method name
* @return boolean
*/
function isMethodExposed($name) {
if (in_array ( $name, $this->exposedMethods )) {
return true;
}
return false;
}
/**
* Function invokes exposed methods for this class
*
* @param string $name
* - method name
* @param Sphere_Request $request
* @throws Exception
*/
function invokeExposedMethod() {
$parameters = func_get_args ();
$name = array_shift ( $parameters );
if (! empty ( $name ) && $this->isMethodExposed ( $name )) {
return call_user_func_array ( array (
$this,
$name
), $parameters );
}
throw new Exception ( vtranslate ( 'LBL_NOT_ACCESSIBLE' ) );
}
}
/**
* Abstract Action Controller Class
*/
abstract class Sphere_Action_Controller extends Sphere_Controller {
function __construct() {
parent::__construct ();
}
function getViewer(Sphere_Request $request) {
throw new AppException ( 'Action - implement getViewer - JSONViewer' );
}
function validateRequest(Sphere_Request $request) {
return $request->validateReadAccess ();
}
function preProcess(Sphere_Request $request) {
return true;
}
protected function preProcessDisplay(Sphere_Request $request) {
}
protected function preProcessTplName(Sphere_Request $request) {
return false;
}
// TODO: need to revisit on this as we are not sure if this is helpful
/*
* function preProcessParentTplName(Sphere_Request $request) {
* return false;
* }
*/
function postProcess(Sphere_Request $request) {
return true;
}
}
/**
* Abstract View Controller Class
*/
abstract class Sphere_View_Controller extends Sphere_Action_Controller {
protected $viewer;
function __construct() {
parent::__construct ();
}
function getViewer(Sphere_Request $request) {
if (! $this->viewer) {
global $vtiger_current_version;
$viewer = new Sphere_Viewer ();
$viewer->assign ( 'APPTITLE', getTranslatedString ( 'APPTITLE' ) );
$viewer->assign ( 'VTIGER_VERSION', $vtiger_current_version );
$viewer->assign ( 'MODULE_NAME', $request->getModule () );
$this->viewer = $viewer;
}
return $this->viewer;
}
function getPageTitle(Sphere_Request $request) {
return spheretranslate ( $request->getModule (), $request->get ( 'module' ) );
}
function preProcess(Sphere_Request $request, $display = true) {
$currentUser = Users_Record_Model::getCurrentUserModel ();
$viewer = $this->getViewer ( $request );
$viewer->assign ( 'PAGETITLE', $this->getPageTitle ( $request ) );
$viewer->assign ( 'SCRIPTS', $this->getHeaderScripts ( $request ) );
$viewer->assign ( 'STYLES', $this->getHeaderCss ( $request ) );
$viewer->assign ( 'SKIN_PATH', Sphere_Theme::getCurrentUserThemePath () );
$viewer->assign ( 'LANGUAGE_STRINGS', $this->getJSLanguageStrings ( $request ) );
$viewer->assign ( 'LANGUAGE', $currentUser->get ( 'language' ) );
if ($display) {
$this->preProcessDisplay ( $request );
}
}
protected function preProcessTplName(Sphere_Request $request) {
return 'Header.tpl';
}
// Note : To get the right hook for immediate parent in PHP,
// specially in case of deep hierarchy
// TODO: Need to revisit this.
/*
* function preProcessParentTplName(Sphere_Request $request) {
* return parent::preProcessTplName($request);
* }
*/
protected function preProcessDisplay(Sphere_Request $request) {
$viewer = $this->getViewer ( $request );
$displayed = $viewer->view ( $this->preProcessTplName ( $request ), $request->getModule () );
/*
* if(!$displayed) {
* $tplName = $this->preProcessParentTplName($request);
* if($tplName) {
* $viewer->view($tplName, $request->getModule());
* }
* }
*/
}
function postProcess(Sphere_Request $request) {
$viewer = $this->getViewer ( $request );
$currentUser = Users_Record_Model::getCurrentUserModel ();
//MrOlsen $viewer->assign ( 'ACTIVITY_REMINDER', $currentUser->getCurrentUserActivityReminderInSeconds () );
$viewer->view ( 'Footer.tpl' );
}
/**
* Retrieves headers scripts that need to loaded in the page
*
* @param Sphere_Request $request
* - request model
* @return <array> - array of Sphere_JsScript_Model
*/
function getHeaderScripts(Sphere_Request $request) {
$headerScriptInstances = array ();
$languageHandlerShortName = Sphere_Language_Handler::getShortLanguageName ();
$fileName = "libraries/jquery/posabsolute-jQuery-Validation-Engine/js/languages/jquery.validationEngine-$languageHandlerShortName.js";
if (! file_exists ( $fileName )) {
$fileName = "~libraries/jquery/posabsolute-jQuery-Validation-Engine/js/languages/jquery.validationEngine-en.js";
}
else {
$fileName = "~libraries/jquery/posabsolute-jQuery-Validation-Engine/js/languages/jquery.validationEngine-$languageHandlerShortName.js";
}
$jsFileNames = array (
$fileName
);
$jsScriptInstances = $this->checkAndConvertJsScripts ( $jsFileNames );
$headerScriptInstances = array_merge ( $jsScriptInstances, $headerScriptInstances );
return $headerScriptInstances;
}
function checkAndConvertJsScripts($jsFileNames) {
$fileExtension = 'js';
$jsScriptInstances = array ();
foreach ( $jsFileNames as $jsFileName ) {
// TODO Handle absolute inclusions (~/...) like in checkAndConvertCssStyles
$jsScript = new Sphere_JsScript_Model ();
// external javascript source file handling
if (strpos ( $jsFileName, 'http://' ) === 0 || strpos ( $jsFileName, 'https://' ) === 0) {
$jsScriptInstances [$jsFileName] = $jsScript->set ( 'src', $jsFileName );
continue;
}
$completeFilePath = Sphere_Loader::resolveNameToPath ( $jsFileName, $fileExtension );
if (file_exists ( $completeFilePath )) {
if (strpos ( $jsFileName, '~' ) === 0) {
$filePath = ltrim ( ltrim ( $jsFileName, '~' ), '/' );
// if ~~ (reference is outside vtiger6 folder)
if (substr_count ( $jsFileName, "~" ) == 2) {
$filePath = "../" . $filePath;
}
}
else {
$filePath = str_replace ( '.', '/', $jsFileName ) . '.' . $fileExtension;
}
$jsScriptInstances [$jsFileName] = $jsScript->set ( 'src', $filePath );
}
else {
$fallBackFilePath = Sphere_Loader::resolveNameToPath ( Sphere_JavaScript::getBaseJavaScriptPath () . '/' . $jsFileName, 'js' );
if (file_exists ( $fallBackFilePath )) {
$filePath = str_replace ( '.', '/', $jsFileName ) . '.js';
$jsScriptInstances [$jsFileName] = $jsScript->set ( 'src', Sphere_JavaScript::getFilePath ( $filePath ) );
}
}
}
return $jsScriptInstances;
}
/**
* Function returns the css files
*
* @param <Array> $cssFileNames
* @param <String> $fileExtension
* @return <Array of Sphere_CssScript_Model>
*
* First check if $cssFileName exists
* if not, check under layout folder $cssFileName eg:layouts/slayout/$cssFileName
*/
function checkAndConvertCssStyles($cssFileNames, $fileExtension = 'css') {
$cssStyleInstances = array ();
foreach ( $cssFileNames as $cssFileName ) {
$cssScriptModel = new Sphere_CssScript_Model ();
if (strpos ( $cssFileName, 'http://' ) === 0 || strpos ( $cssFileName, 'https://' ) === 0) {
$cssStyleInstances [] = $cssScriptModel->set ( 'href', $cssFileName );
continue;
}
$completeFilePath = Sphere_Loader::resolveNameToPath ( $cssFileName, $fileExtension );
$filePath = NULL;
if (file_exists ( $completeFilePath )) {
if (strpos ( $cssFileName, '~' ) === 0) {
$filePath = ltrim ( ltrim ( $cssFileName, '~' ), '/' );
// if ~~ (reference is outside vtiger6 folder)
if (substr_count ( $cssFileName, "~" ) == 2) {
$filePath = "../" . $filePath;
}
}
else {
$filePath = str_replace ( '.', '/', $cssFileName ) . '.' . $fileExtension;
$filePath = Sphere_Theme::getStylePath ( $filePath );
}
$cssStyleInstances [] = $cssScriptModel->set ( 'href', $filePath );
}
}
return $cssStyleInstances;
}
/**
* Retrieves css styles that need to loaded in the page
*
* @param Sphere_Request $request
* - request model
* @return <array> - array of Sphere_CssScript_Model
*/
function getHeaderCss(Sphere_Request $request) {
return array ();
}
/**
* Function returns the Client side language string
*
* @param Sphere_Request $request
*/
function getJSLanguageStrings(Sphere_Request $request) {
$moduleName = $request->getModule ( false );
return Sphere_Language_Handler::export ( $moduleName, 'jsLanguageStrings' );
}
}
?>