get('record'); $actionName = 'CreateView'; if ($record && !$request->get('isDuplicate')) { $actionName = 'EditView'; } $permissions[] = array('module_parameter' => 'module', 'action' => $actionName, 'record_parameter' => 'record'); return $permissions; } public function checkPermission(Vtiger_Request $request) { $moduleName = $request->getModule(); $record = $request->get('record'); $nonEntityModules = array('Users', 'Events', 'Calendar', 'Portal', 'Reports', 'Rss', 'EmailTemplates'); if ($record && !in_array($moduleName, $nonEntityModules)) { $recordEntityName = getSalesEntityType($record); if ($recordEntityName !== $moduleName) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } } return parent::checkPermission($request); } public function setModuleInfo($request, $moduleModel) { $fieldsInfo = array(); $basicLinks = array(); $settingLinks = array(); $moduleFields = $moduleModel->getFields(); foreach($moduleFields as $fieldName => $fieldModel){ $fieldsInfo[$fieldName] = $fieldModel->getFieldInfo(); } $viewer = $this->getViewer($request); $viewer->assign('FIELDS_INFO', json_encode($fieldsInfo)); $viewer->assign('MODULE_BASIC_ACTIONS', $basicLinks); $viewer->assign('MODULE_SETTING_ACTIONS', $settingLinks); } function preProcess(Vtiger_Request $request, $display=true) { //Vtiger7 - TO show custom view name in Module Header $viewer = $this->getViewer ($request); $moduleName = $request->getModule(); $viewer->assign('CUSTOM_VIEWS', CustomView_Record_Model::getAllByGroup($moduleName)); $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $record = $request->get('record'); if(!empty($record) && $moduleModel->isEntityModule()) { $recordModel = $this->record?$this->record:Vtiger_Record_Model::getInstanceById($record, $moduleName); $viewer->assign('RECORD',$recordModel); } $duplicateRecordsList = array(); $duplicateRecords = $request->get('duplicateRecords'); if (is_array($duplicateRecords)) { $duplicateRecordsList = $duplicateRecords; } $viewer = $this->getViewer($request); $viewer->assign('DUPLICATE_RECORDS', $duplicateRecordsList); parent::preProcess($request, $display); } public function process(Vtiger_Request $request) { $viewer = $this->getViewer ($request); $moduleName = $request->getModule(); $record = $request->get('record'); if(!empty($record) && $request->get('isDuplicate') == true) { $recordModel = $this->record?$this->record:Vtiger_Record_Model::getInstanceById($record, $moduleName); $viewer->assign('MODE', ''); //While Duplicating record, If the related record is deleted then we are removing related record info in record model $mandatoryFieldModels = $recordModel->getModule()->getMandatoryFieldModels(); foreach ($mandatoryFieldModels as $fieldModel) { if ($fieldModel->isReferenceField()) { $fieldName = $fieldModel->get('name'); if (Vtiger_Util_Helper::checkRecordExistance($recordModel->get($fieldName))) { $recordModel->set($fieldName, ''); } } } }else if(!empty($record)) { $recordModel = $this->record?$this->record:Vtiger_Record_Model::getInstanceById($record, $moduleName); $viewer->assign('RECORD_ID', $record); $viewer->assign('MODE', 'edit'); } else { $recordModel = Vtiger_Record_Model::getCleanInstance($moduleName); $viewer->assign('MODE', ''); } if(!$this->record){ $this->record = $recordModel; } $moduleModel = $recordModel->getModule(); $fieldList = $moduleModel->getFields(); $requestFieldList = array_intersect_key($request->getAllPurified(), $fieldList); $relContactId = $request->get('contact_id'); if ($relContactId && $moduleName == 'Calendar') { $contactRecordModel = Vtiger_Record_Model::getInstanceById($relContactId); $requestFieldList['parent_id'] = $contactRecordModel->get('account_id'); } foreach($requestFieldList as $fieldName=>$fieldValue){ $fieldModel = $fieldList[$fieldName]; $specialField = false; // We collate date and time part together in the EditView UI handling // so a bit of special treatment is required if we come from QuickCreate if ($moduleName == 'Calendar' && empty($record) && $fieldName == 'time_start' && !empty($fieldValue)) { $specialField = true; // Convert the incoming user-picked time to GMT time // which will get re-translated based on user-time zone on EditForm $fieldValue = DateTimeField::convertToDBTimeZone($fieldValue)->format("H:i"); } if ($moduleName == 'Calendar' && empty($record) && $fieldName == 'date_start' && !empty($fieldValue)) { $startTime = Vtiger_Time_UIType::getTimeValueWithSeconds($requestFieldList['time_start']); $startDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($fieldValue." ".$startTime); list($startDate, $startTime) = explode(' ', $startDateTime); $fieldValue = Vtiger_Date_UIType::getDisplayDateValue($startDate); } if($fieldModel->isEditable() || $specialField) { $recordModel->set($fieldName, $fieldModel->getDBInsertValue($fieldValue)); } } // SalesPlatform.ru begin Unifying method for EditView preparing $recordModel = prepareEditView($recordModel, $_REQUEST, $viewer); // SalesPlatform.ru end // SalesPlatform.ru begin Set company if($request->get('relationOperation')) { $sourceRecordModel = Vtiger_Record_Model::getInstanceById($request->get('sourceRecord')); if($sourceRecordModel->get('spcompany') != null && $sourceRecordModel->get('spcompany') != '') { if($recordModel->getField('spcompany')) { $recordModel->set('spcompany', $sourceRecordModel->get('spcompany')); } } } // SalesPlatform.ru end $recordStructureInstance = Vtiger_RecordStructure_Model::getInstanceFromRecordModel($recordModel, Vtiger_RecordStructure_Model::RECORD_STRUCTURE_MODE_EDIT); $picklistDependencyDatasource = Vtiger_DependencyPicklist::getPicklistDependencyDatasource($moduleName); // SalesPlatform.ru begin Field Validation Information $tabid = getTabid($moduleName); $validationData = getDBValidationData($recordModel->get('tab_name'),$tabid); $validationArray = split_validationdataArray($validationData); $viewer->assign("VALIDATION_DATA_FIELDNAME",$validationArray['fieldname']); $viewer->assign("VALIDATION_DATA_FIELDDATATYPE",$validationArray['datatype']); $viewer->assign("VALIDATION_DATA_FIELDLABEL",$validationArray['fieldlabel']); $viewer->assign('ID', $record); // SalesPlatform.ru end $viewer->assign('PICKIST_DEPENDENCY_DATASOURCE',Vtiger_Functions::jsonEncode($picklistDependencyDatasource)); $viewer->assign('RECORD_STRUCTURE_MODEL', $recordStructureInstance); $viewer->assign('RECORD_STRUCTURE', $recordStructureInstance->getStructure()); $viewer->assign('MODULE', $moduleName); $viewer->assign('CURRENTDATE', date('Y-n-j')); $viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel()); $isRelationOperation = $request->get('relationOperation'); //if it is relation edit $viewer->assign('IS_RELATION_OPERATION', $isRelationOperation); if($isRelationOperation) { $viewer->assign('SOURCE_MODULE', $request->get('sourceModule')); $viewer->assign('SOURCE_RECORD', $request->get('sourceRecord')); } // added to set the return values if($request->get('returnview')) { $request->setViewerReturnValues($viewer); } $viewer->assign('MAX_UPLOAD_LIMIT_MB', Vtiger_Util_Helper::getMaxUploadSize()); $viewer->assign('MAX_UPLOAD_LIMIT_BYTES', Vtiger_Util_Helper::getMaxUploadSizeInBytes()); if($request->get('displayMode')=='overlay'){ $viewer->assign('SCRIPTS',$this->getOverlayHeaderScripts($request)); $viewer->view('OverlayEditView.tpl', $moduleName); } else{ $viewer->view('EditView.tpl', $moduleName); } } public function getOverlayHeaderScripts(Vtiger_Request $request) { $moduleName = $request->getModule(); $jsFileNames = array( "modules.$moduleName.resources.Edit", ); $jsScriptInstances = $this->checkAndConvertJsScripts($jsFileNames); return $jsScriptInstances; } }