function article($id = FALSE, $condition = FALSE, $article_id = FALSE) { $this->view_data['submenu'] = array($this->lang->line('application_back') => 'ctickets', $this->lang->line('application_overview') => 'ctickets/view/' . $id); switch ($condition) { case 'add': $this->content_view = 'tickets/client_views/_note'; if ($_POST) { $config['upload_path'] = './files/media/'; $config['encrypt_name'] = TRUE; $config['allowed_types'] = '*'; $this->load->library('upload', $config); $this->load->helper('notification'); unset($_POST['userfile']); unset($_POST['file-name']); unset($_POST['send']); unset($_POST['_wysihtml5_mode']); $ticket = Ticket::find_by_id($id); $ticket->updated = "1"; $ticket->save(); if ($ticket->company_id != $this->client->company->id || $ticket->client_id != $this->client->id) { redirect('ctickets'); } send_ticket_notification($ticket->user->email, '[Ticket#' . $ticket->reference . '] - ' . $_POST['subject'], $_POST['message'], $ticket->id); $_POST['internal'] = "0"; unset($_POST['notify']); $_POST['subject'] = htmlspecialchars($_POST['subject']); $_POST['datetime'] = time(); $_POST['ticket_id'] = $id; $_POST['from'] = $this->client->firstname . " " . $this->client->lastname . ' - ' . $this->client->email; $_POST['reply_to'] = $this->client->email; $article = TicketHasArticle::create($_POST); if (!$this->upload->do_upload()) { $error = $this->upload->display_errors('', ' '); $this->session->set_flashdata('message', 'error:' . $error); } else { $data = array('upload_data' => $this->upload->data()); $attributes = array('article_id' => $article->id, 'filename' => $data['upload_data']['orig_name'], 'savename' => $data['upload_data']['file_name']); $attachment = ArticleHasAttachment::create($attributes); } if (!$article) { $this->session->set_flashdata('message', 'error:' . $this->lang->line('messages_save_article_error')); } else { $this->session->set_flashdata('message', 'success:' . $this->lang->line('messages_save_article_success')); } redirect('ctickets/view/' . $id); } else { $this->theme_view = 'modal'; $this->view_data['ticket'] = Ticket::find($id); $this->view_data['title'] = $this->lang->line('application_add_note'); $this->view_data['form_action'] = 'ctickets/article/' . $id . '/add'; $this->content_view = 'tickets/client_views/_note'; } break; default: redirect('ctickets'); break; } }
function index() { $this->load->helper('notification'); $this->load->helper('string'); $emailconfig = Setting::first(); if ($emailconfig->ticket_config_active == "1") { $emailconfig->ticket_config_timestamp = time(); $emailconfig->save(); // this shows basic IMAP, no TLS required $config['login'] = $emailconfig->ticket_config_login; $config['pass'] = $emailconfig->ticket_config_pass; $config['host'] = $emailconfig->ticket_config_host; $config['port'] = $emailconfig->ticket_config_port; $config['mailbox'] = $emailconfig->ticket_config_mailbox; if ($emailconfig->ticket_config_imap == "1") { $flags = "/imap"; } else { $flags = "/pop3"; } if ($emailconfig->ticket_config_ssl == "1") { $flags .= "/ssl"; } $config['service_flags'] = $flags . $emailconfig->ticket_config_flags; $this->load->library('peeker', $config); //attachment folder $bool = $this->peeker->set_attachment_dir('files/media/'); //Search Filter $this->peeker->set_search($emailconfig->ticket_config_search); if ($this->peeker->search_and_count_messages() != "0") { log_message('error', 'Postmaster fetched ' . $this->peeker->search_and_count_messages() . ' new email tickets.'); $id_array = $this->peeker->get_ids_from_search(); //walk trough emails foreach ($id_array as $email_id) { $ticket = false; $email = $this->peeker->get_message($email_id); $email->rewrite_html_transform_img_tags('files/media/'); $emailbody = utf8_encode(nl2br($email->get_plain())); $emailaddr = $email->get_from_array(); $emailaddr = $emailaddr[0]->mailbox . '@' . $emailaddr[0]->host; //get next ticket number $settings = Setting::first(); $ticket_reference = $settings->ticket_reference; $settings->ticket_reference = $settings->ticket_reference + 1; $settings->save(); if (preg_match('/(?<=\\[Ticket\\#)(.+)(?=\\])/is', $email->get_subject(), $matches)) { $ticket = Ticket::find_by_reference($matches[1]); } if ($ticket) { log_message('error', 'Fetched email merged to ticket #' . $matches[1]); $article_attributes = array('ticket_id' => $ticket->id, 'internal' => '0', 'from' => $email->get_from() . ' - ' . $emailaddr, 'reply_to' => $emailaddr, 'to' => $email->get_to(), 'cc' => $email->get_cc(), 'subject' => htmlspecialchars($email->get_subject()), 'message' => $emailbody, 'datetime' => time()); if ($ticket->status == "closed") { $ticket->status = 'reopened'; $ticket->updated = '1'; $ticket->save(); } $ticket->updated = '1'; $ticket->save(); $article = TicketHasArticle::create($article_attributes); if (isset($ticket->user->email)) { send_ticket_notification($ticket->user->email, '[Ticket#' . $ticket->reference . '] - ' . $ticket->subject, $emailbody, $ticket->id); } //Attachments $parts = $email->get_parts_array(); if ($email->has_attachment()) { foreach ($parts as $part) { $savename = $email->get_fingerprint() . random_string('alnum', 8) . $part->get_filename(); $orgname = $part->get_filename(); $part->filename = $savename; $attributes = array('article_id' => $article->id, 'filename' => $orgname, 'savename' => $savename); $attachment = ArticleHasAttachment::create($attributes); } $email->save_all_attachments('files/media/'); } } else { //Ticket Attributes $ticket_attributes = array('reference' => $ticket_reference, 'from' => $email->get_from() . ' - ' . $emailaddr, 'subject' => $email->get_subject(), 'text' => $emailbody, 'updated' => "1", 'created' => time(), 'user_id' => $settings->ticket_default_owner, 'type_id' => $settings->ticket_default_type, 'status' => $settings->ticket_default_status, 'queue_id' => $settings->ticket_default_queue); //check if sender is client $client = Client::find_by_email($emailaddr); if (isset($client)) { $ticket_attributes['client_id'] = $client->id; $ticket_attributes['company_id'] = $client->company->id; } //create Ticket $ticket = Ticket::create($ticket_attributes); //Attachments $parts = $email->get_parts_array(); if ($email->has_attachment()) { foreach ($parts as $part) { $savename = $email->get_fingerprint() . random_string('alnum', 8) . $part->get_filename(); $orgname = $part->get_filename(); $part->filename = $savename; $attributes = array('ticket_id' => $ticket->id, 'filename' => $orgname, 'savename' => $savename); $attachment = TicketHasAttachment::create($attributes); } $email->save_all_attachments('files/media/'); } send_ticket_notification($ticket->user->email, '[Ticket#' . $ticket->reference . '] - ' . $ticket->subject, $emailbody, $ticket->id); log_message('error', 'New ticket created #' . $ticket->reference); } if ($emailconfig->ticket_config_delete == "1") { $email->set_delete(); $email->expunge(); $this->peeker->delete_and_expunge($email_id); } } } $this->peeker->close(); // tell the story of the connection (only for debuging) //echo "<pre>"; print_r($this->peeker->trace()); echo "</pre>"; } die; }