/** * 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')); }
/** * Creates pending incoming email from email message * * @param MailboxManagerEmail $email * @param IncomingMailbox $mailbox * * @return mixed */ function createPendingEmail(&$email, &$mailbox) { if (!instance_of($email, 'MailboxManagerEmail')) { return new Error(lang('Email provided is empty')); } // if $incoming_mail = new IncomingMail(); $incoming_mail->setProjectId($mailbox->getProjectId()); $incoming_mail->setIncomingMailboxId($mailbox->getId()); $incoming_mail->setHeaders($email->getHeaders()); // object subject $subject = $email->getSubject(); $incoming_mail->setSubject($subject); // object body $incoming_mail->setBody(incoming_mail_get_body($email)); // object type and parent id $object_type = $mailbox->getObjectType(); preg_match("/\\{ID(.*?)\\}(.*)/is", $subject, $results); if (count($results) > 0) { $parent_id = $results[1]; $parent = ProjectObjects::findById($parent_id); if (instance_of($parent, 'ProjectObject') && $parent->can_have_comments) { $object_type = 'comment'; $incoming_mail->setParentId($parent_id); } else { $incoming_mail->setParentId(null); } // if $subject = trim(str_replace($results[0], '', $subject)); $incoming_mail->setSubject($subject); } else { //BOF:mod 20120809 //echo $subject . "\n"; $temp = explode('-', $subject); if (count($temp) == 1 || count($temp) == 2) { list($user_name, $priority) = $temp; $user_name = trim($user_name); $priority = trim($priority); //echo $user_name . ' | ' . $priority . "\n"; $name_parts = explode(' ', $user_name); if (count($name_parts) == 1 || count($name_parts) == 2) { list($first_name, $last_name) = $name_parts; //echo $first_name . ' | ' . $last_name . "\n"; $link = mysql_connect(DB_HOST, DB_USER, DB_PASS); mysql_select_db(DB_NAME, $link); $query = "select id from healingcrystals_users where first_name='" . mysql_real_escape_string($first_name) . "' " . (!empty($last_name) ? " and last_name='" . mysql_real_escape_string($last_name) . "' " : ""); $result = mysql_query($query, $link); if (mysql_num_rows($result)) { $info = mysql_fetch_assoc($result); $user_id = $info['id']; $incoming_mail->setProjectId(TASK_LIST_PROJECT_ID); $object_type = 'task'; //echo $user_id . ' | ' . $object_type . "\n"; } mysql_close($link); } } if (empty($user_id)) { $temp_sender = $email->getAddress('from'); if (is_array($temp_sender)) { $temp_email_address = array_var($temp_sender, 'email', null); $temp_user = Users::findByEmail($temp_email_address); if (instance_of($temp_user, 'User')) { $incoming_mail->setProjectId(TASK_LIST_PROJECT_ID); $incoming_mail->setSubject($incoming_mail->getSubject() . '{' . $temp_user->getId() . '}'); $object_type = 'task'; } } } //EOF:mod 20120809 } //BOF: mod if ($object_type == 'comment' && empty($parent_id)) { $object_type = 'ticket'; } //EOF: mod $incoming_mail->setObjectType($object_type); if ($incoming_mail->getSubject() || $incoming_mail->getBody()) { if (!$incoming_mail->getSubject()) { $incoming_mail->setSubject(lang('[SUBJECT NOT PROVIDED]')); } // if if (!$incoming_mail->getBody() && in_array($incoming_mail->getObjectType(), array('comment', 'discussion'))) { $incoming_mail->setBody(lang('[CONTENT NOT PROVIDED]')); } // if } // if $sender = $email->getAddress('from'); if (!is_array($sender)) { return new Error(lang('Sender is unknown')); } // if // user details $email_address = array_var($sender, 'email', null); $user = Users::findByEmail($email_address); if (!instance_of($user, 'User')) { $user = new AnonymousUser(array_var($sender, 'name', null) ? array_var($sender, 'name', null) : $email_address, $email_address); } // if $incoming_mail->setCreatedBy($user); // creation time $incoming_mail->setCreatedOn(new DateTimeValue()); $result = $incoming_mail->save(); if (!$result || is_error($result)) { return $result; } // if // create attachment objects $attachments = $email->getAttachments(); if (is_foreachable($attachments)) { foreach ($attachments as $attachment) { $incoming_attachment = new IncomingMailAttachment(); $incoming_attachment->setTemporaryFilename(basename(array_var($attachment, 'path', null))); $incoming_attachment->setOriginalFilename(array_var($attachment, 'filename', null)); $incoming_attachment->setContentType(array_var($attachment, 'content_type', null)); $incoming_attachment->setFileSize(array_var($attachment, 'size', null)); $incoming_attachment->setMailId($incoming_mail->getId()); $attachment_save = $incoming_attachment->save(); if (!$attachment_save || is_error($attachment_save)) { // we couldn't create object in database so we need to remove file from system //@unlink(array_var($attachment,'path')); } // if } // foreach } // if return $incoming_mail; }