Newer
Older
<?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.
*************************************************************************************/
class Calendar_Save_Action extends Vtiger_Save_Action {
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
$record = $request->get('record');
parent::checkPermission($request);
if ($record) {
$activityModulesList = array('Calendar', 'Events');
$recordEntityName = getSalesEntityType($record);
if (!in_array($recordEntityName, $activityModulesList) || !in_array($moduleName, $activityModulesList)) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
}
}
public function process(Vtiger_Request $request) {

Satish
committed
try {
$recordModel = $this->saveRecord($request);
$loadUrl = $recordModel->getDetailViewUrl();

Satish
committed
if ($request->get('returntab_label')) {
$loadUrl = 'index.php?'.$request->getReturnURL();
} else 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')) {
$moduleModel = $recordModel->getModule();
$listViewUrl = $moduleModel->getListViewUrl();

Satish
committed
if ($recordModel->get('visibility') === 'Private') {
$loadUrl = $listViewUrl;
} else {
$userId = $recordModel->get('assigned_user_id');
$sharedType = $moduleModel->getSharedType($userId);
if ($sharedType === 'selectedusers') {
$currentUserModel = Users_Record_Model::getCurrentUserModel();
$sharedUserIds = Calendar_Module_Model::getCaledarSharedUsers($userId);
if (!array_key_exists($currentUserModel->id, $sharedUserIds)) {
$loadUrl = $listViewUrl;
}
} else if ($sharedType === 'private') {

Satish
committed
} else if ($request->get('returnmodule') && $request->get('returnview')){
$loadUrl = 'index.php?'.$request->getReturnURL();

Satish
committed
header("Location: $loadUrl");
} catch (DuplicateException $e) {
$mode = '';
if ($request->getModule() === 'Events') {
$mode = 'Events';
}
$requestData = $request->getAll();
unset($requestData['action']);
unset($requestData['__vtrftk']);
if ($request->isAjax()) {
$response = new Vtiger_Response();
$response->setError($e->getMessage(), $e->getDuplicationMessage(), $e->getMessage());
$response->emit();
} else {
$requestData['view'] = 'Edit';
$requestData['mode'] = $mode;
$requestData['module'] = 'Calendar';
$requestData['duplicateRecords'] = $e->getDuplicateRecordIds();
global $vtiger_current_version;
$viewer = new Vtiger_Viewer();
$viewer->assign('REQUEST_DATA', $requestData);
$viewer->assign('REQUEST_URL', "index.php?module=Calendar&view=Edit&mode=$mode&record=".$request->get('record'));
$viewer->view('RedirectToEditView.tpl', 'Vtiger');
}
} catch (Exception $e) {
throw new Exception($e->getMessage());
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
}
}
/**
* Function to save record
* @param <Vtiger_Request> $request - values of the record
* @return <RecordModel> - 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();
if($relatedModule->getName() == 'Events'){
$relatedModule = Vtiger_Module_Model::getInstance('Calendar');
}
$relatedRecordId = $recordModel->getId();
$relationModel = Vtiger_Relation_Model::getInstance($parentModuleModel, $relatedModule);
$relationModel->addRelation($parentRecordId, $relatedRecordId);
}
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');
//Due to dependencies on the activity_reminder api in Activity.php(5.x)
$_REQUEST['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);
// For custom time fields in Calendar, it was not converting to db insert format(sending as 10:00 AM/PM)
$fieldDataType = $fieldModel->getFieldDataType();

Uma
committed
if($fieldValue){
$fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel);
}
$fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue);
}
if(is_array($fieldValue) && $fieldDataType == 'multipicklist'){
// Concatenating the array values of a multipicklist using implode to store them in the database.
$fieldValue = implode(' |##| ',$fieldValue);
if ($fieldName === $request->get('field')) {
$fieldValue = $request->get('value');
}
if($fieldValue !== null) {
if(!is_array($fieldValue)) {
$fieldValue = trim($fieldValue);
}

Apparao G
committed
$fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue, $fieldModel);
$recordModel->set($fieldName, $fieldValue);
}
}
//Start Date and Time values
if($request->get('date_start') && $request->get('time_start')) {
$startTime = Vtiger_Time_UIType::getTimeValueWithSeconds($request->get('time_start'));
$startDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('date_start')." ".$startTime);
list($startDate, $startTime) = explode(' ', $startDateTime);
$recordModel->set('date_start', $startDate);
$recordModel->set('time_start', $startTime);
}
if($request->get('due_date')) {
$endTime = $request->get('time_end');
$endDate = Vtiger_Date_UIType::getDBInsertedValue($request->get('due_date'));
if ($endTime) {
$endTime = Vtiger_Time_UIType::getTimeValueWithSeconds($endTime);
$endDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('due_date')." ".$endTime);
list($endDate, $endTime) = explode(' ', $endDateTime);
}
$recordModel->set('time_end', $endTime);
$recordModel->set('due_date', $endDate);
}
$activityType = $request->get('activitytype');
if(empty($activityType)) {
$recordModel->set('activitytype', 'Task');
$recordModel->set('visibility', 'Private');
}
//Due to dependencies on the older code
$setReminder = $request->get('set_reminder');
if($setReminder) {
$_REQUEST['set_reminder'] = 'Yes';
} else {
$_REQUEST['set_reminder'] = 'No';
}
return $recordModel;
}
}