/** * Conflict incoming mail * * @param void * @return void */ function conflict() { if ($this->active_mail->isNew()) { $this->httpError(HTTP_ERR_NOT_FOUND); } // if require_once INCOMING_MAIL_MODULE_PATH . '/models/IncomingMailImporter.class.php'; $mail_data = $this->request->post('mail'); if (!is_foreachable($mail_data)) { flash_error(incoming_mail_module_get_status_description($this->active_mail->getState())); $mail_data = array('subject' => $this->active_mail->getSubject(), 'body' => $this->active_mail->getBody(), 'created_by_id' => $this->active_mail->getCreatedById(), 'project_id' => $this->active_mail->getProjectId()); } // if if ($this->request->isSubmitted()) { $this->active_mail->setSubject(array_var($mail_data, 'subject')); $this->active_mail->setBody(array_var($mail_data, 'body')); $creator_id = array_var($mail_data, 'created_by_id'); if ($creator_id && $creator_id != 'original_author') { $creator = Users::findById($creator_id); if (instance_of($creator, 'User')) { $this->active_mail->setCreatedBy($creator); } // if } // if $this->active_mail->setCreatedById(array_var($mail_data, 'created_by_id')); $this->active_mail->setObjectType(array_var($mail_data, 'object_type')); if (array_var($mail_data, 'object_type') == 'comment') { $this->active_mail->setParentId(array_var($mail_data, 'parent_id')); } // if // import email if (instance_of($importing_result = IncomingMailImporter::importPendingEmail($this->active_mail, $creator_id == 'original_author'), 'ProjectObject')) { // we have successfully imported email $this->active_mail->delete(); if ($this->request->isAsyncCall()) { $this->renderText(lang('<p>Conflict Solved Successfully!</p><p>View created <a href=":url">:object</a>.</p>', array('object' => $this->active_mail->getObjectType(), 'url' => $importing_result->getViewUrl()))); } else { flash_success('Conflict Solved Successfully!'); $this->redirectTo('incoming_mail'); } // if } else { if ($this->request->isAsyncCall()) { $this->httpError(HTTP_ERR_INVALID_PROPERTIES, null, false, 2); } else { flash_error($importing_result->getMessage()); } // if } // if } // if $user = $this->active_mail->getCreatedBy(); if (instance_of($user, 'User')) { $this->smarty->assign('object_user', $user); } else { $this->smarty->assign('object_user', $this->logged_user); } // if $this->smarty->assign(array('async' => $this->request->isAsyncCall(), 'form_url' => $this->active_mail->getImportUrl() . ($this->request->isAsyncCall() ? '?skip_layout=1&async=1' : ''), 'status_message' => incoming_mail_module_get_status_description($this->active_mail->getState()), 'mail_data' => $mail_data, 'project' => $this->active_mail->getProject())); $flash =& Flash::instance(); $flash->init(); js_assign('additional_fields_url', assemble_url('incoming_mail_additional_form_fields')); }
/** * Use $incoming_mail as a base for creating ProjectObject * * @param IncomingMail $incoming_mail * @return integer */ function importPendingEmail(&$incoming_mail, $skip_permission_checking = false, $is_report = false) { $mailbox = IncomingMailboxes::findById($incoming_mail->getIncomingMailboxId()); if ($is_report) { $incoming_mail->setState(INCOMING_MAIL_STATUS_REPORT_EMAIL); $incoming_mail->save(); return new Error(incoming_mail_module_get_status_description(INCOMING_MAIL_STATUS_REPORT_EMAIL)); } // if $project = $incoming_mail->getProject(); if (!instance_of($project, 'Project')) { // project does not exists $incoming_mail->setState(INCOMING_MAIL_STATUS_PROJECT_DOES_NOT_EXISTS); $incoming_mail_save = $incoming_mail->save(); return new Error(incoming_mail_module_get_status_description(INCOMING_MAIL_STATUS_PROJECT_DOES_NOT_EXISTS)); } // if $user = $incoming_mail->getCreatedBy(); if (!$skip_permission_checking) { // check additional permissions if (instance_of($user, 'User')) { // if it's registered user // if object type is not comment and all users cannot create objects and current user cant create object if ($incoming_mail->getObjectType() != 'comment' && !$mailbox->getAcceptAllRegistered() && !ProjectObject::canAdd($user, $project, $incoming_mail->getObjectType())) { $incoming_mail->setState(INCOMING_MAIL_STATUS_USER_CANNOT_CREATE_OBJECT); $incoming_mail_save = $incoming_mail->save(); return new Error(incoming_mail_module_get_status_description(INCOMING_MAIL_STATUS_USER_CANNOT_CREATE_OBJECT)); } // if } else { // if it's anonymous user // if mailbox does not accept anonymous users if (!$mailbox->getAcceptAnonymous()) { $incoming_mail->setState(INCOMING_MAIL_STATUS_ANONYMOUS_NOT_ALLOWED); $incoming_mail_save = $incoming_mail->save(); return new Error(incoming_mail_module_get_status_description(INCOMING_MAIL_STATUS_ANONYMOUS_NOT_ALLOWED)); } // if } // if } // if // create new object instance dependable of object type switch ($incoming_mail->getObjectType()) { case 'discussion': $import =& IncomingMailImporter::importPendingEmailAsDiscussion($incoming_mail, $project, $user); break; case 'ticket': $import =& IncomingMailImporter::importPendingEmailAsTicket($incoming_mail, $project, $user); break; case 'comment': //$pos = strpos($incoming_mail->getSubject(), '{ID'); //if ($pos!==false){ $parent_id = $incoming_mail->getParentId(); if (!empty($parent_id)) { $import =& IncomingMailImporter::importPendingEmailAsComment($incoming_mail, $project, $user, $mailbox); } else { $import =& IncomingMailImporter::importPendingEmailAsTicket($incoming_mail, $project, $user); } break; //BOF:mod 20120809 //BOF:mod 20120809 case 'task': //BOF:mod 20120820 /* //EOF:mod 20120820 $import = & IncomingMailImporter::importPendingEmailToTaskList($incoming_mail, $project, $user); //BOF:mod 20120820 */ $page_id = IncomingMailImporter::getPageId($incoming_mail, $project, $user); $attachments = $incoming_mail->getAttachments(); $comment = null; if (strpos($incoming_mail->getSubject(), '}') !== false || strlen(strip_tags($incoming_mail->getBody())) > 150 || count($attachments)) { $import =& IncomingMailImporter::importPendingEmailAsComment($incoming_mail, $project, $user, $mailbox, $page_id); } else { $import =& IncomingMailImporter::importPendingEmailToTaskList($incoming_mail, $project, $user, $page_id, null); } //BOF:mod 20120820 break; //EOF:mod 20120809 } // switch return $import; }