124 lines
5.4 KiB
PHP

<?php
/*+**********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
************************************************************************************/
header('Content-Type: text/json');
chdir (dirname(__FILE__) . '/../../');
// Define GetRelatedList API before including the core files
// NOTE: Make sure GetRelatedList function_exists check is made in include/utils/RelatedListView.php
include_once dirname(__FILE__) . '/api/Relation.php';
include_once dirname(__FILE__) . '/api/Request.php';
include_once dirname(__FILE__) . '/api/Response.php';
include_once dirname(__FILE__) . '/api/Session.php';
include_once dirname(__FILE__) . '/api/ws/Controller.php';
class Mobile_API_Controller {
static $opControllers = array(
'login' => array('file' => '/api/ws/Login.php', 'class' => 'Mobile_WS_Login'),
'loginAndFetchModules' => array('file' => '/api/ws/LoginAndFetchModules.php', 'class' => 'Mobile_WS_LoginAndFetchModules'),
'fetchModuleFilters' => array('file' => '/api/ws/FetchModuleFilters.php' , 'class' => 'Mobile_WS_FetchModuleFilters'),
'filterDetailsWithCount' => array('file' => '/api/ws/FilterDetailsWithCount.php', 'class' => 'Mobile_WS_FilterDetailsWithCount'),
'fetchAllAlerts' => array('file' => '/api/ws/FetchAllAlerts.php', 'class' => 'Mobile_WS_FetchAllAlerts'),
'alertDetailsWithMessage' => array('file' => '/api/ws/AlertDetailsWithMessage.php', 'class' => 'Mobile_WS_AlertDetailsWithMessage'),
'listModuleRecords' => array('file' => '/api/ws/ListModuleRecords.php', 'class' => 'Mobile_WS_ListModuleRecords'),
'fetchRecord' => array('file' => '/api/ws/FetchRecord.php', 'class' => 'Mobile_WS_FetchRecord'),
'fetchRecordWithGrouping' => array('file' => '/api/ws/FetchRecordWithGrouping.php', 'class' => 'Mobile_WS_FetchRecordWithGrouping'),
'fetchRecordsWithGrouping' => array('file' => '/api/ws/FetchRecordsWithGrouping.php', 'class' => 'Mobile_WS_FetchRecordsWithGrouping'),
'describe' => array('file' => '/api/ws/Describe.php', 'class' => 'Mobile_WS_Describe'),
'saveRecord' => array('file' => '/api/ws/SaveRecord.php', 'class' => 'Mobile_WS_SaveRecord'),
'syncModuleRecords' => array('file' => '/api/ws/SyncModuleRecords.php', 'class' => 'Mobile_WS_SyncModuleRecords'),
'query' => array('file' => '/api/ws/Query.php', 'class' => 'Mobile_WS_Query'),
'queryWithGrouping' => array('file' => '/api/ws/QueryWithGrouping.php', 'class' => 'Mobile_WS_QueryWithGrouping'),
'relatedRecordsWithGrouping' => array('file' => '/api/ws/RelatedRecordsWithGrouping.php', 'class' => 'Mobile_WS_RelatedRecordsWithGrouping'),
'deleteRecords' => array('file' => '/api/ws/DeleteRecords.php', 'class' => 'Mobile_WS_DeleteRecords'),
'addRecordComment' => array('file' => '/api/ws/AddRecordComment.php', 'class' => 'Mobile_WS_AddRecordComment'),
);
static function process(Mobile_API_Request $request) {
$operation = $request->getOperation();
$sessionid = $request->getSession();
$response = false;
if(isset(self::$opControllers[$operation])) {
$operationFile = self::$opControllers[$operation]['file'];
$operationClass= self::$opControllers[$operation]['class'];
include_once dirname(__FILE__) . $operationFile;
$operationController = new $operationClass;
$operationSession = false;
if($operationController->requireLogin()) {
$operationSession = Mobile_API_Session::init($sessionid);
if($operationController->hasActiveUser() === false) {
$operationSession = false;
}
//Mobile_WS_Utils::initAppGlobals();
} else {
// By-pass login
$operationSession = true;
}
if($operationSession === false) {
$response = new Mobile_API_Response();
$response->setError(1501, 'Login required');
} else {
try {
$response = $operationController->process($request);
} catch(Exception $e) {
$response = new Mobile_API_Response();
$response->setError($e->getCode(), $e->getMessage());
}
}
} else {
$response = new Mobile_API_Response();
$response->setError(1404, 'Operation not found: ' . $operation);
}
if($response !== false) {
echo $response->emitJSON();
}
}
}
/** Take care of stripping the slashes */
function stripslashes_recursive($value) {
$value = is_array($value) ? array_map('stripslashes_recursive', $value) : stripslashes($value);
return $value;
}
/** END **/
if(!defined('MOBILE_API_CONTROLLER_AVOID_TRIGGER')) {
$clientRequestValues = $_POST; // $_REQUEST or $_GET
$clientRequestValuesRaw = array();
// Set of request key few controllers are interested in raw values (example, SaveRecord)
/*$rawValueHeaders = array('values');
foreach($rawValueHeaders as $rawValueHeader) {
if(isset($clientRequestValues[$rawValueHeader])) {
$clientRequestValuesRaw[$rawValueHeader] = $clientRequestValues[$rawValueHeader];
}
}*/
// END
if (get_magic_quotes_gpc()) {
$clientRequestValues = stripslashes_recursive($clientRequestValues);
}
Mobile_API_Controller::process(new Mobile_API_Request($clientRequestValues, $clientRequestValuesRaw));
}