getModule(); $record = $request->get('record'); if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException('LBL_PERMISSION_DENIED'); } } public function process(Vtiger_Request $request) { $recordModel = $this->saveRecord($request); if($request->get('relationOperation')) { $parentModuleName = $request->get('sourceModule'); $parentRecordId = $request->get('sourceRecord'); $parentRecordModel = Vtiger_Record_Model::getInstanceById($parentRecordId, $parentModuleName); //TODO : Url should load the related list instead of detail view of record $loadUrl = $parentRecordModel->getDetailViewUrl(); } else if ($request->get('returnToList')) { $loadUrl = $recordModel->getModule()->getListViewUrl(); } else { $loadUrl = $recordModel->getDetailViewUrl(); } header("Location: $loadUrl"); } /** * Function to save record * @param $request - values of the record * @return - record Model of saved record */ public function saveRecord($request) { $recordModel = $this->getRecordModelFromRequest($request); $recordModel->save(); if($request->get('relationOperation')) { $parentModuleName = $request->get('sourceModule'); $parentModuleModel = Vtiger_Module_Model::getInstance($parentModuleName); $parentRecordId = $request->get('sourceRecord'); $relatedModule = $recordModel->getModule(); $relatedRecordId = $recordModel->getId(); $relationModel = Vtiger_Relation_Model::getInstance($parentModuleModel, $relatedModule); $relationModel->addRelation($parentRecordId, $relatedRecordId); } if($request->get('imgDeleted')) { $imageIds = $request->get('imageid'); foreach($imageIds as $imageId) { $status = $recordModel->deleteImage($imageId); } } return $recordModel; } /** * Function to get the record model based on the request parameters * @param Vtiger_Request $request * @return Vtiger_Record_Model or Module specific Record Model instance */ protected function getRecordModelFromRequest(Vtiger_Request $request) { $moduleName = $request->getModule(); $recordId = $request->get('record'); $moduleModel = Vtiger_Module_Model::getInstance($moduleName); if(!empty($recordId)) { $recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName); $modelData = $recordModel->getData(); $recordModel->set('id', $recordId); $recordModel->set('mode', 'edit'); } else { $recordModel = Vtiger_Record_Model::getCleanInstance($moduleName); $modelData = $recordModel->getData(); $recordModel->set('mode', ''); } $fieldModelList = $moduleModel->getFields(); foreach ($fieldModelList as $fieldName => $fieldModel) { $fieldValue = $request->get($fieldName, null); $fieldDataType = $fieldModel->getFieldDataType(); if($fieldDataType == 'time'){ $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue); } if($fieldValue !== null) { if(!is_array($fieldValue)) { $fieldValue = trim($fieldValue); } $recordModel->set($fieldName, $fieldValue); } } return $recordModel; } public function validateRequest(Vtiger_Request $request) { return $request->validateWriteAccess(); } }