Beispiel #1
0
 public function handleUpload()
 {
     $allowedFileExtension = array();
     $uploadLimit = MailManager_Config_Model::get('MAXUPLOADLIMIT', vglobal('upload_maxsize'));
     $filePath = decideFilePath();
     $upload = new MailManager_Upload_Action($allowedFileExtension, $uploadLimit);
     return $upload->handleUpload($filePath, false);
 }
Beispiel #2
0
 public function __getpart($imap, $messageid, $p, $partno)
 {
     // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart
     if ($partno) {
         $maxDownLoadLimit = MailManager_Config_Model::get('MAXDOWNLOADLIMIT');
         if ($p->bytes < $maxDownLoadLimit) {
             $data = imap_fetchbody($imap, $messageid, $partno);
             // multipart
         }
     } else {
         $data = imap_body($imap, $messageid);
         //not multipart
     }
     // Any part may be encoded, even plain text messages, so check everything.
     if ($p->encoding == 4) {
         $data = quoted_printable_decode($data);
     } elseif ($p->encoding == 3) {
         $data = base64_decode($data);
     }
     // no need to decode 7-bit, 8-bit, or binary
     // PARAMETERS
     // get all parameters, like charset, filenames of attachments, etc.
     $params = array();
     if ($p->parameters) {
         foreach ($p->parameters as $x) {
             $params[strtolower($x->attribute)] = $x->value;
         }
     }
     if ($p->dparameters) {
         foreach ($p->dparameters as $x) {
             $params[strtolower($x->attribute)] = $x->value;
         }
     }
     // ATTACHMENT
     // Any part with a filename is an attachment,
     // so an attached text file (type 0) is not mistaken as the message.
     if ($params['filename'] || $params['name'] && $p->ifid == 0 && empty($p->id)) {
         // filename may be given as 'Filename' or 'Name' or both
         $filename = $params['filename'] ? $params['filename'] : $params['name'];
         // filename may be encoded, so see imap_mime_header_decode()
         if (!$this->_attachments) {
             $this->_attachments = array();
         }
         $this->_attachments[$filename] = $data;
         // TODO: this is a problem if two files have same name
     } elseif ($p->ifdisposition && $p->disposition == "INLINE" && $p->bytes > 0 && $p->subtype != 'PLAIN' && $p->subtype != 'HTML') {
         $this->_attachments["noname" . $partno . "." . $p->subtype] = $data;
     } elseif ($p->ifid && !empty($p->id)) {
         $filename = $params['filename'] ? $params['filename'] : $params['name'];
         $this->_inline_attachments[] = array('cid' => substr($p->id, 1, strlen($p->id) - 2), 'filename' => $filename, 'data' => $data);
     } elseif ($p->type == 0 && $data) {
         $this->_charset = $params['charset'];
         // assume all parts are same charset
         $data = self::__convert_encoding($data, 'UTF-8', $this->_charset);
         // Messages may be split in different parts because of inline attachments,
         // so append parts together with blank row.
         if (strtolower($p->subtype) == 'plain') {
             $this->_plainmessage .= trim($data) . "\n\n";
         } else {
             $this->_htmlmessage .= $data . "<br><br>";
         }
     } elseif ($p->type == 2 && $data) {
         $this->_plainmessage .= trim($data) . "\n\n";
     }
     // SUBPART RECURSION
     if ($p->parts) {
         foreach ($p->parts as $partno0 => $p2) {
             $this->__getpart($imap, $messageid, $p2, $partno . '.' . ($partno0 + 1));
         }
         // 1.2, 1.2.1, etc.
     }
 }
Beispiel #3
0
 public function process(Vtiger_Request $request)
 {
     $db = PearDatabase::getInstance();
     $currentUserModel = Users_Record_Model::getCurrentUserModel();
     $moduleName = $request->getModule();
     $response = new Vtiger_Response();
     if ('open' == $this->getOperationArg($request)) {
         $foldername = $request->get('_folder');
         $connector = $this->getConnector($foldername);
         $folder = $connector->folderInstance($foldername);
         $connector->markMailRead($request->get('_msgno'));
         $mail = $connector->openMail($request->get('_msgno'));
         $connector->updateFolder($folder, SA_MESSAGES | SA_UNSEEN);
         $viewer = $this->getViewer($request);
         $viewer->assign('FOLDER', $folder);
         $viewer->assign('MAIL', $mail);
         $viewer->assign('ATTACHMENTS', $mail->attachments(false));
         $viewer->assign('MODULE', $moduleName);
         $uicontent = $viewer->view('MailOpen.tpl', 'MailManager', true);
         $metainfo = array('from' => $mail->from(), 'subject' => $mail->subject(), 'msgno' => $mail->msgNo(), 'msguid' => $mail->uniqueid(), 'folder' => $foldername);
         $response->isJson(true);
         $response->setResult(array('folder' => $foldername, 'unread' => $folder->unreadCount(), 'ui' => $uicontent, 'meta' => $metainfo));
     } else {
         if ('mark' == $this->getOperationArg($request)) {
             $foldername = $request->get('_folder');
             $connector = $this->getConnector($foldername);
             $folder = $connector->folderInstance($foldername);
             $connector->updateFolder($folder, SA_UNSEEN);
             if ('unread' == $request->get('_markas')) {
                 $connector->markMailUnread($request->get('_msgno'));
             }
             $response->isJson(true);
             $response->setResult(array('folder' => $foldername, 'unread' => $folder->unreadCount() + 1, 'status' => true, 'msgno' => $request->get('_msgno')));
         } else {
             if ('delete' == $this->getOperationArg($request)) {
                 $msg_no = $request->get('_msgno');
                 $foldername = $request->get('_folder');
                 $connector = $this->getConnector($foldername);
                 $connector->deleteMail($msg_no);
                 $response->isJson(true);
                 $response->setResult(array('folder' => $foldername, 'status' => true));
             } else {
                 if ('move' == $this->getOperationArg($request)) {
                     $msg_no = $request->get('_msgno');
                     $foldername = $request->get('_folder');
                     $moveToFolder = $request->get('_moveFolder');
                     $connector = $this->getConnector($foldername);
                     $connector->moveMail($msg_no, $moveToFolder);
                     $response->isJson(true);
                     $response->setResult(array('folder' => $foldername, 'status' => true));
                 } else {
                     if ('send' == $this->getOperationArg($request)) {
                         require_once 'modules/MailManager/Config.php';
                         $memory_limit = MailManager_Config_Model::get('MEMORY_LIMIT');
                         ini_set('memory_limit', $memory_limit);
                         $to_string = rtrim($request->get('to'), ',');
                         $connector = $this->getConnector('__vt_drafts');
                         if (!empty($to_string)) {
                             $toArray = explode(',', $to_string);
                             foreach ($toArray as $to) {
                                 $relatedtos = MailManager::lookupMailInVtiger($to, $currentUserModel);
                                 $referenceArray = array('Contacts', 'Accounts', 'Leads');
                                 for ($j = 0; $j < count($referenceArray); $j++) {
                                     $val = $referenceArray[$j];
                                     if (!empty($relatedtos) && is_array($relatedtos)) {
                                         for ($i = 0; $i < count($relatedtos); $i++) {
                                             if ($i == count($relatedtos) - 1) {
                                                 $relateto = vtws_getIdComponents($relatedtos[$i]['record']);
                                                 $parentIds = $relateto[1] . "@1";
                                             } elseif ($relatedtos[$i]['module'] == $val) {
                                                 $relateto = vtws_getIdComponents($relatedtos[$i]['record']);
                                                 $parentIds = $relateto[1] . "@1";
                                                 break;
                                             }
                                         }
                                     }
                                     if (isset($parentIds)) {
                                         break;
                                     }
                                 }
                                 if ($parentIds == '') {
                                     if (count($relatedtos) > 0) {
                                         $relateto = vtws_getIdComponents($relatedtos[0]['record']);
                                         $parentIds = $relateto[1] . "@1";
                                         break;
                                     }
                                 }
                                 $cc_string = rtrim($request->get('cc'), ',');
                                 $bcc_string = rtrim($request->get('bcc'), ',');
                                 $subject = $request->get('subject');
                                 $body = $request->get('body');
                                 if ($relateto[1] != NULL && $relateto[0] != '19') {
                                     $entityId = $relateto[1];
                                     $parent_module = getSalesEntityType($entityId);
                                     $description = getMergedDescription($body, $entityId, $parent_module);
                                 } else {
                                     if ($relateto[0] == '19') {
                                         $parentIds = $relateto[1] . '@-1';
                                     }
                                     $description = $body;
                                 }
                                 $fromEmail = $connector->getFromEmailAddress();
                                 $userFullName = getFullNameFromArray('Users', $currentUserModel->getData());
                                 $userId = $currentUserModel->getId();
                                 $mailer = new Vtiger_Mailer();
                                 $mailer->IsHTML(true);
                                 $mailer->ConfigSenderInfo($fromEmail, $userFullName, $currentUserModel->get('email1'));
                                 $mailer->Subject = $subject;
                                 $mailer->Body = $description;
                                 $mailer->addSignature($userId);
                                 if ($mailer->Signature != '') {
                                     $mailer->Body .= $mailer->Signature;
                                 }
                                 $ccs = empty($cc_string) ? array() : explode(',', $cc_string);
                                 $bccs = empty($bcc_string) ? array() : explode(',', $bcc_string);
                                 $emailId = $request->get('emailid');
                                 $attachments = $connector->getAttachmentDetails($emailId);
                                 $mailer->AddAddress($to);
                                 foreach ($ccs as $cc) {
                                     $mailer->AddCC($cc);
                                 }
                                 foreach ($bccs as $bcc) {
                                     $mailer->AddBCC($bcc);
                                 }
                                 if (is_array($attachments)) {
                                     foreach ($attachments as $attachment) {
                                         $fileNameWithPath = vglobal('root_directory') . $attachment['path'] . $attachment['fileid'] . "_" . $attachment['attachment'];
                                         if (is_file($fileNameWithPath)) {
                                             $mailer->AddAttachment($fileNameWithPath, $attachment['attachment']);
                                         }
                                     }
                                 }
                                 $status = $mailer->Send(true);
                                 if ($status === true) {
                                     $email = CRMEntity::getInstance('Emails');
                                     $email->column_fields['assigned_user_id'] = $currentUserModel->getId();
                                     $email->column_fields['date_start'] = date('Y-m-d');
                                     $email->column_fields['time_start'] = date('H:i');
                                     $email->column_fields['parent_id'] = $parentIds;
                                     $email->column_fields['subject'] = $mailer->Subject;
                                     $email->column_fields['description'] = $mailer->Body;
                                     $email->column_fields['activitytype'] = 'Emails';
                                     $email->column_fields['from_email'] = $mailer->From;
                                     $email->column_fields['saved_toid'] = $to;
                                     $email->column_fields['ccmail'] = $cc_string;
                                     $email->column_fields['bccmail'] = $bcc_string;
                                     $email->column_fields['email_flag'] = 'SENT';
                                     if (empty($emailId)) {
                                         $email->save('Emails');
                                     } else {
                                         $email->id = $emailId;
                                         $email->mode = 'edit';
                                         $email->save('Emails');
                                     }
                                     $realid = explode("@", $parentIds);
                                     $mycrmid = $realid[0];
                                     $params = array($mycrmid, $email->id);
                                     if ($realid[1] == -1) {
                                         $db->pquery('DELETE FROM vtiger_salesmanactivityrel WHERE smid=? AND activityid=?', $params);
                                         $db->pquery('INSERT INTO vtiger_salesmanactivityrel VALUES (?,?)', $params);
                                     } else {
                                         $db->pquery('DELETE FROM vtiger_seactivityrel WHERE crmid=? AND activityid=?', $params);
                                         $db->pquery('INSERT INTO vtiger_seactivityrel VALUES (?,?)', $params);
                                     }
                                 }
                             }
                         }
                         if ($status === true) {
                             $response->isJson(true);
                             $response->setResult(array('sent' => true));
                         } else {
                             $response->isJson(true);
                             $response->setError(112, 'please verify outgoing server.');
                         }
                     } else {
                         if ('attachment_dld' == $this->getOperationArg($request)) {
                             $attachmentName = $request->get('_atname');
                             $attachmentName = str_replace(' ', '_', $attachmentName);
                             if (MailManager_Utils_Helper::allowedFileExtension($attachmentName)) {
                                 // This is to handle larger uploads
                                 $memory_limit = MailManager_Config_Model::get('MEMORY_LIMIT');
                                 ini_set('memory_limit', $memory_limit);
                                 $mail = new MailManager_Message_Model(false, false);
                                 $mail->readFromDB($request->get('_muid'));
                                 $attachment = $mail->attachments(true, $attachmentName);
                                 if ($attachment[$attachmentName]) {
                                     header("Content-type: application/octet-stream");
                                     header("Pragma: public");
                                     header("Cache-Control: private");
                                     header("Content-Disposition: attachment; filename={$attachmentName}");
                                     echo $attachment[$attachmentName];
                                 } else {
                                     header("Content-Disposition: attachment; filename=INVALIDFILE");
                                     echo "";
                                 }
                             } else {
                                 header("Content-Disposition: attachment; filename=INVALIDFILE");
                                 echo "";
                             }
                             flush();
                             exit;
                         } elseif ('getdraftmail' == $this->getOperationArg($request)) {
                             $connector = $this->getConnector('__vt_drafts');
                             $draftMail = $connector->getDraftMail($request);
                             $response->isJson(true);
                             $response->setResult(array($draftMail));
                         } elseif ('save' == $this->getOperationArg($request)) {
                             $connector = $this->getConnector('__vt_drafts');
                             $draftId = $connector->saveDraft($request);
                             $response->isJson(true);
                             if (!empty($draftId)) {
                                 $response->setResult(array('success' => true, 'emailid' => $draftId));
                             } else {
                                 $response->setResult(array('success' => false, 'error' => "Draft was not saved"));
                             }
                         } elseif ('deleteAttachment' == $this->getOperationArg($request)) {
                             $connector = $this->getConnector('__vt_drafts');
                             $deleteResponse = $connector->deleteAttachment($request);
                             $response->isJson(true);
                             $response->setResult(array('success' => $deleteResponse));
                         } elseif ('forward' == $this->getOperationArg($request)) {
                             $messageId = $request->get('messageid');
                             $folderName = $request->get('folder');
                             $connector = $this->getConnector($folderName);
                             $mail = $connector->openMail($messageId);
                             $attachments = $mail->attachments(true);
                             $draftConnector = $this->getConnector('__vt_drafts');
                             $draftId = $draftConnector->saveDraft($request);
                             if (!empty($attachments)) {
                                 foreach ($attachments as $aName => $aValue) {
                                     $attachInfo = $mail->__SaveAttachmentFile($aName, $aValue);
                                     if (is_array($attachInfo) && !empty($attachInfo) && $attachInfo['size'] > 0) {
                                         if (!MailManager::checkModuleWriteAccessForCurrentUser('Documents')) {
                                             return;
                                         }
                                         $document = CRMEntity::getInstance('Documents');
                                         $document->column_fields['notes_title'] = $attachInfo['name'];
                                         $document->column_fields['filename'] = $attachInfo['name'];
                                         $document->column_fields['filestatus'] = 1;
                                         $document->column_fields['filelocationtype'] = 'I';
                                         $document->column_fields['folderid'] = 1;
                                         // Default Folder
                                         $document->column_fields['filesize'] = $attachInfo['size'];
                                         $document->column_fields['assigned_user_id'] = $currentUserModel->getId();
                                         $document->save('Documents');
                                         $draftConnector->saveAttachmentRel($document->id, $attachInfo['attachid']);
                                         $draftConnector->saveEmailDocumentRel($draftId, $document->id);
                                         $draftConnector->saveAttachmentRel($draftId, $attachInfo['attachid']);
                                         $attachmentInfo[] = array('name' => $attachInfo['name'], 'size' => $attachInfo['size'], 'emailid' => $draftId, 'docid' => $document->id);
                                     }
                                     unset($aValue);
                                 }
                             }
                             $response->isJson(true);
                             $response->setResult(array('attachments' => $attachmentInfo, 'emailid' => $draftId));
                         }
                     }
                 }
             }
         }
     }
     return $response;
 }
Beispiel #4
0
 /**
  * Process the request to perform relationship operations
  * @global Users Instance $currentUserModel
  * @global PearDataBase Instance $adb
  * @global String $currentModule
  * @param Vtiger_Request $request
  * @return boolean
  */
 public function process(Vtiger_Request $request)
 {
     $currentUserModel = Users_Record_Model::getCurrentUserModel();
     $response = new Vtiger_Response(true);
     $viewer = $this->getViewer($request);
     if ('find' == $this->getOperationArg($request)) {
         $this->skipConnection = true;
         // No need to connect to mailbox here, improves performance
         // Check if the message is already linked.
         $linkedto = MailManager_Relate_Action::associatedLink($request->get('_msguid'));
         // If the message was not linked, lookup for matching records, using FROM address
         if (empty($linkedto)) {
             $results = array();
             $modules = array();
             $allowedModules = $this->getCurrentUserMailManagerAllowedModules();
             foreach (self::$MODULES as $MODULE) {
                 if (!in_array($MODULE, $allowedModules)) {
                     continue;
                 }
                 $from = $request->get('_mfrom');
                 if (empty($from)) {
                     continue;
                 }
                 $results[$MODULE] = $this->lookupModuleRecordsWithEmail($MODULE, $from);
                 $describe = $this->ws_describe($MODULE);
                 $modules[$MODULE] = array('label' => $describe['label'], 'name' => textlength_check($describe['name']), 'id' => $describe['idPrefix']);
                 // If look is found in a module, skip rest. - for performance
                 //if (!empty($results[$MODULE])) break;
             }
             $viewer->assign('LOOKUPS', $results);
             $viewer->assign('MODULES', $modules);
         } else {
             $viewer->assign('LINKEDTO', $linkedto);
         }
         $viewer->assign('LINK_TO_AVAILABLE_ACTIONS', $this->linkToAvailableActions());
         $viewer->assign('ALLOWED_MODULES', $allowedModules);
         $viewer->assign('MSGNO', $request->get('_msgno'));
         $viewer->assign('FOLDER', $request->get('_folder'));
         $response->setResult(array('ui' => $viewer->view('Relationship.tpl', 'MailManager', true)));
     } else {
         if ('link' == $this->getOperationArg($request)) {
             $linkto = $request->get('_mlinkto');
             $foldername = $request->get('_folder');
             $connector = $this->getConnector($foldername);
             // This is to handle larger uploads
             $memory_limit = MailManager_Config_Model::get('MEMORY_LIMIT');
             ini_set('memory_limit', $memory_limit);
             $mail = $connector->openMail($request->get('_msgno'));
             $mail->attachments();
             // Initialize attachments
             $linkedto = MailManager_Relate_Action::associate($mail, $linkto);
             $viewer->assign('LINK_TO_AVAILABLE_ACTIONS', $this->linkToAvailableActions());
             $viewer->assign('ALLOWED_MODULES', $this->getCurrentUserMailManagerAllowedModules());
             $viewer->assign('LINKEDTO', $linkedto);
             $viewer->assign('MSGNO', $request->get('_msgno'));
             $viewer->assign('FOLDER', $foldername);
             $response->setResult(array('ui' => $viewer->view('Relationship.tpl', 'MailManager', true)));
         } else {
             if ('create_wizard' == $this->getOperationArg($request)) {
                 $moduleName = $request->get('_mlinktotype');
                 $parent = $request->get('_mlinkto');
                 $foldername = $request->get('_folder');
                 $connector = $this->getConnector($foldername);
                 $mail = $connector->openMail($request->get('_msgno'));
                 $formData = $this->processFormData($mail);
                 foreach ($formData as $key => $value) {
                     $request->set($key, $value);
                 }
                 $request->set('module', $moduleName);
                 // Delegate QuickCreate FormUI to the target view controller of module.
                 $quickCreateviewClassName = $moduleName . '_QuickCreateAjax_View';
                 if (!class_exists($quickCreateviewClassName)) {
                     $quickCreateviewClassName = 'Vtiger_QuickCreateAjax_View';
                 }
                 $quickCreateViewController = new $quickCreateviewClassName();
                 $quickCreateViewController->process($request);
                 // UI already sent
                 $response = false;
             } else {
                 if ('create' == $this->getOperationArg($request)) {
                     $linkModule = $request->get('_mlinktotype');
                     $parent = $request->get('_mlinkto');
                     $foldername = $request->get('_folder');
                     if (!empty($foldername)) {
                         // This is to handle larger uploads
                         $memory_limit = MailManager_Config_Model::get('MEMORY_LIMIT');
                         ini_set('memory_limit', $memory_limit);
                         $connector = $this->getConnector($foldername);
                         $mail = $connector->openMail($request->get('_msgno'));
                         $attachments = $mail->attachments();
                         // Initialize attachments
                     }
                     $linkedto = MailManager_Relate_Action::getSalesEntityInfo($parent);
                     $recordModel = Vtiger_Record_Model::getCleanInstance($linkModule);
                     $fields = $recordModel->getModule()->getFields();
                     foreach ($fields as $fieldName => $fieldModel) {
                         if ($request->has($fieldName)) {
                             $fieldValue = $request->get($fieldName);
                             $fieldDataType = $fieldModel->getFieldDataType();
                             if ($fieldDataType == 'time') {
                                 $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue);
                             }
                             $recordModel->set($fieldName, $fieldValue);
                         }
                     }
                     switch ($linkModule) {
                         case 'Calendar':
                             $activityType = $recordModel->get('activitytype');
                             if (!$activityType) {
                                 $activityType = 'Task';
                             }
                             $recordModel->set('activitytype', $activityType);
                             //Start Date and Time values
                             $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);
                             //End Date and Time values
                             $endDate = Vtiger_Date_UIType::getDBInsertedValue($request->get('due_date'));
                             if ($activityType != 'Task') {
                                 $endTime = Vtiger_Time_UIType::getTimeValueWithSeconds($request->get('time_end'));
                                 $endDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('due_date') . " " . $endTime);
                                 list($endDate, $endTime) = explode(' ', $endDateTime);
                             } else {
                                 $endTime = '';
                             }
                             $recordModel->set('time_end', $endTime);
                             $recordModel->set('due_date', $endDate);
                             if ($parent) {
                                 if ($linkedto['module'] == 'Contacts') {
                                     $recordModel->set('contact_id', $parent);
                                 } else {
                                     $recordModel->set('parent_id', $parent);
                                 }
                             }
                             $recordModel->set('visibility', 'Public');
                             break;
                         case 'HelpDesk':
                             $from = $mail->from();
                             if ($parent) {
                                 if ($linkedto['module'] == 'Contacts') {
                                     $referenceFieldName = 'contact_id';
                                 } elseif ($linkedto['module'] == 'Accounts') {
                                     $referenceFieldName = 'parent_id';
                                 }
                             }
                             $recordModel->set($referenceFieldName, $this->setParentForHelpDesk($parent, $from));
                             break;
                         case 'ModComments':
                             $recordModel->set('assigned_user_id', $currentUserModel->getId());
                             $recordModel->set('commentcontent', $request->getRaw('commentcontent'));
                             $recordModel->set('userid', $currentUserModel->getId());
                             $recordModel->set('creator', $currentUserModel->getId());
                             $recordModel->set('related_to', $parent);
                             break;
                     }
                     try {
                         $recordModel->save();
                         // This condition is added so that emails are not created for Tickets and Todo without Parent,
                         // as there is no way to relate them
                         if (empty($parent) && $linkModule != 'HelpDesk' && $linkModule != 'Calendar') {
                             $linkedto = MailManager_Relate_Action::associate($mail, $recordModel->getId());
                         }
                         if ($linkModule === 'Calendar') {
                             // Handled to save follow up event
                             $followupMode = $request->get('followup');
                             //Start Date and Time values
                             $startTime = Vtiger_Time_UIType::getTimeValueWithSeconds($request->get('followup_time_start'));
                             $startDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('followup_date_start') . " " . $startTime);
                             list($startDate, $startTime) = explode(' ', $startDateTime);
                             $subject = $request->get('subject');
                             if ($followupMode == 'on' && $startTime != '' && $startDate != '') {
                                 $recordModel->set('eventstatus', 'Planned');
                                 $recordModel->set('subject', '[Followup] ' . $subject);
                                 $recordModel->set('date_start', $startDate);
                                 $recordModel->set('time_start', $startTime);
                                 $currentUser = Users_Record_Model::getCurrentUserModel();
                                 $activityType = $recordModel->get('activitytype');
                                 if ($activityType == 'Call') {
                                     $minutes = $currentUser->get('callduration');
                                 } else {
                                     $minutes = $currentUser->get('othereventduration');
                                 }
                                 $dueDateTime = date('Y-m-d H:i:s', strtotime("{$startDateTime}+{$minutes} minutes"));
                                 list($startDate, $startTime) = explode(' ', $dueDateTime);
                                 $recordModel->set('due_date', $startDate);
                                 $recordModel->set('time_end', $startTime);
                                 $recordModel->set('recurringtype', '');
                                 $recordModel->set('mode', 'create');
                                 $recordModel->save();
                             }
                         }
                         // add attachments to the tickets as Documents
                         if ($linkModule == 'HelpDesk' && !empty($attachments)) {
                             $relationController = new MailManager_Relate_Action();
                             $relationController->__SaveAttachements($mail, $linkModule, $recordModel);
                         }
                         $viewer->assign('MSGNO', $request->get('_msgno'));
                         $viewer->assign('LINKEDTO', $linkedto);
                         $viewer->assign('ALLOWED_MODULES', $this->getCurrentUserMailManagerAllowedModules());
                         $viewer->assign('LINK_TO_AVAILABLE_ACTIONS', $this->linkToAvailableActions());
                         $viewer->assign('FOLDER', $foldername);
                         $response->setResult(array('ui' => $viewer->view('Relationship.tpl', 'MailManager', true)));
                     } catch (Exception $e) {
                         $response->setResult(array('ui' => '', 'error' => $e));
                     }
                 } else {
                     if ('savedraft' == $this->getOperationArg($request)) {
                         $connector = $this->getConnector('__vt_drafts');
                         $draftResponse = $connector->saveDraft($request);
                         $response->setResult($draftResponse);
                     } else {
                         if ('saveattachment' == $this->getOperationArg($request)) {
                             $connector = $this->getConnector('__vt_drafts');
                             $uploadResponse = $connector->saveAttachment($request);
                             $response->setResult($uploadResponse);
                         } else {
                             if ('commentwidget' == $this->getOperationArg($request)) {
                                 $viewer->assign('LINKMODULE', $request->get('_mlinktotype'));
                                 $viewer->assign('PARENT', $request->get('_mlinkto'));
                                 $viewer->assign('MSGNO', $request->get('_msgno'));
                                 $viewer->assign('FOLDER', $request->get('_folder'));
                                 $viewer->view('MailManagerCommentWidget.tpl', 'MailManager');
                                 $response = false;
                             }
                         }
                     }
                 }
             }
         }
     }
     return $response;
 }