[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Calendar/actions/ -> Save.php (source)

   1  <?php
   2  /*+***********************************************************************************
   3   * The contents of this file are subject to the vtiger CRM Public License Version 1.0
   4   * ("License"); You may not use this file except in compliance with the License
   5   * The Original Code is:  vtiger CRM Open Source
   6   * The Initial Developer of the Original Code is vtiger.
   7   * Portions created by vtiger are Copyright (C) vtiger.
   8   * All Rights Reserved.
   9   *************************************************************************************/
  10  
  11  class Calendar_Save_Action extends Vtiger_Save_Action {
  12  
  13  	public function checkPermission(Vtiger_Request $request) {
  14          $moduleName = $request->getModule();
  15          $record = $request->get('record');
  16  
  17          if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) {
  18              throw new AppException('LBL_PERMISSION_DENIED');
  19          }
  20      }
  21  
  22  	public function process(Vtiger_Request $request) {
  23          $recordModel = $this->saveRecord($request);
  24          $loadUrl = $recordModel->getDetailViewUrl();
  25  
  26          if($request->get('relationOperation')) {
  27              $parentModuleName = $request->get('sourceModule');
  28              $parentRecordId = $request->get('sourceRecord');
  29              $parentRecordModel = Vtiger_Record_Model::getInstanceById($parentRecordId, $parentModuleName);
  30              //TODO : Url should load the related list instead of detail view of record
  31              $loadUrl = $parentRecordModel->getDetailViewUrl();
  32          } else if ($request->get('returnToList')) {
  33              $moduleModel = $recordModel->getModule();
  34              $listViewUrl = $moduleModel->getListViewUrl();
  35  
  36              if ($recordModel->get('visibility') === 'Private') {
  37                  $loadUrl = $listViewUrl;
  38              } else {
  39                  $userId = $recordModel->get('assigned_user_id');
  40                  $sharedType = $moduleModel->getSharedType($userId);
  41                  if ($sharedType === 'selectedusers') {
  42                      $currentUserModel = Users_Record_Model::getCurrentUserModel();
  43                      $sharedUserIds = Calendar_Module_Model::getCaledarSharedUsers($userId);
  44                      if (!array_key_exists($currentUserModel->id, $sharedUserIds)) {
  45                          $loadUrl = $listViewUrl;
  46                      }
  47                  } else if ($sharedType === 'private') {
  48                      $loadUrl = $listViewUrl;
  49                  }
  50              }
  51          }
  52          header("Location: $loadUrl");
  53      }
  54  
  55      /**
  56       * Function to save record
  57       * @param <Vtiger_Request> $request - values of the record
  58       * @return <RecordModel> - record Model of saved record
  59       */
  60  	public function saveRecord($request) {
  61          $recordModel = $this->getRecordModelFromRequest($request);
  62          $recordModel->save();
  63          if($request->get('relationOperation')) {
  64              $parentModuleName = $request->get('sourceModule');
  65              $parentModuleModel = Vtiger_Module_Model::getInstance($parentModuleName);
  66              $parentRecordId = $request->get('sourceRecord');
  67              $relatedModule = $recordModel->getModule();
  68              if($relatedModule->getName() == 'Events'){
  69                  $relatedModule = Vtiger_Module_Model::getInstance('Calendar');
  70              }
  71              $relatedRecordId = $recordModel->getId();
  72  
  73              $relationModel = Vtiger_Relation_Model::getInstance($parentModuleModel, $relatedModule);
  74              $relationModel->addRelation($parentRecordId, $relatedRecordId);
  75          }
  76          return $recordModel;
  77      }
  78  
  79      /**
  80       * Function to get the record model based on the request parameters
  81       * @param Vtiger_Request $request
  82       * @return Vtiger_Record_Model or Module specific Record Model instance
  83       */
  84  	protected function getRecordModelFromRequest(Vtiger_Request $request) {
  85          $moduleName = $request->getModule();
  86          $recordId = $request->get('record');
  87  
  88          $moduleModel = Vtiger_Module_Model::getInstance($moduleName);
  89  
  90          if(!empty($recordId)) {
  91              $recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName);
  92              $modelData = $recordModel->getData();
  93              $recordModel->set('id', $recordId);
  94              $recordModel->set('mode', 'edit');
  95              //Due to dependencies on the activity_reminder api in Activity.php(5.x)
  96              $_REQUEST['mode'] = 'edit';
  97          } else {
  98              $recordModel = Vtiger_Record_Model::getCleanInstance($moduleName);
  99              $modelData = $recordModel->getData();
 100              $recordModel->set('mode', '');
 101          }
 102  
 103          $fieldModelList = $moduleModel->getFields();
 104          foreach ($fieldModelList as $fieldName => $fieldModel) {
 105              $fieldValue = $request->get($fieldName, null);
 106              // For custom time fields in Calendar, it was not converting to db insert format(sending as 10:00 AM/PM)
 107              $fieldDataType = $fieldModel->getFieldDataType();
 108              if($fieldDataType == 'time'){
 109                  $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue);
 110              }
 111              // End
 112              if($fieldValue !== null) {
 113                  if(!is_array($fieldValue)) {
 114                      $fieldValue = trim($fieldValue);
 115                  }
 116                  $recordModel->set($fieldName, $fieldValue);
 117              }
 118          }
 119  
 120          //Start Date and Time values
 121          $startTime = Vtiger_Time_UIType::getTimeValueWithSeconds($request->get('time_start'));
 122          $startDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('date_start')." ".$startTime);
 123          list($startDate, $startTime) = explode(' ', $startDateTime);
 124  
 125          $recordModel->set('date_start', $startDate);
 126          $recordModel->set('time_start', $startTime);
 127  
 128          //End Date and Time values
 129          $endTime = $request->get('time_end');
 130          $endDate = Vtiger_Date_UIType::getDBInsertedValue($request->get('due_date'));
 131  
 132          if ($endTime) {
 133              $endTime = Vtiger_Time_UIType::getTimeValueWithSeconds($endTime);
 134              $endDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('due_date')." ".$endTime);
 135              list($endDate, $endTime) = explode(' ', $endDateTime);
 136          }
 137  
 138          $recordModel->set('time_end', $endTime);
 139          $recordModel->set('due_date', $endDate);
 140  
 141          $activityType = $request->get('activitytype');
 142          if(empty($activityType)) {
 143              $recordModel->set('activitytype', 'Task');
 144              $recordModel->set('visibility', 'Private');
 145          }
 146  
 147          //Due to dependencies on the older code
 148          $setReminder = $request->get('set_reminder');
 149          if($setReminder) {
 150              $_REQUEST['set_reminder'] = 'Yes';
 151          } else {
 152              $_REQUEST['set_reminder'] = 'No';
 153          }
 154  
 155          $time = strtotime($request->get('due_date'))-strtotime($request->get('date_start'));
 156          $hours = (float)$time/3600;
 157          $minutes = ((float)$hours-(int)$hours)*60;
 158          $recordModel->set('duration_hours', (int)$hours);
 159          $recordModel->set('duration_minutes', $minutes);
 160  
 161          return $recordModel;
 162      }
 163  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1