Files
faveo/app/Http/Controllers/Agent/helpdesk/MailController.php
sujitprasad 5fc77c9205 v1.0.3.4
2015-12-24 18:39:37 +05:30

226 lines
6.7 KiB
PHP

<?php namespace App\Http\Controllers\Agent\helpdesk;
// controllers
use App\Http\Controllers\Controller;
use App\Http\Controllers\Agent\helpdesk\TicketController;
// models
use App\User;
use App\Model\helpdesk\Email\Emails;
use App\Model\helpdesk\Settings\Email;
use App\Model\helpdesk\Ticket\Ticket_attachments;
use App\Model\helpdesk\Ticket\Ticket_Thread;
use App\Model\helpdesk\Settings\System;
// classes
use PhpImap\Mailbox as ImapMailbox;
use PhpImap\IncomingMail;
use PhpImap\IncomingMailAttachment;
use \ForceUTF8\Encoding;
use App;
use DB;
use Crypt;
use Schedule;
use File;
use Artisan;
/**
* MailController
*
* @package Controllers
* @subpackage Controller
* @author Ladybird <info@ladybirdweb.com>
*/
class MailController extends Controller {
/**
* constructor
* Create a new controller instance.
* @param type TicketController $TicketController
*/
public function __construct(TicketController $TicketController) {
$this->TicketController = $TicketController;
}
/**
* Reademails
* @return type
*/
public function readmails(Emails $emails, Email $settings_email, System $system)
{
$path_url = $system->first()->url;
if($settings_email->first()->email_fetching == 1)
{
if($settings_email->first()->all_emails == 1)
{
$helptopic = $this->TicketController->default_helptopic();
$sla = $this->TicketController->default_sla();
$email = $emails->get();
foreach($email as $e_mail)
{
$dept = $e_mail->department;
$host = $e_mail->fetching_host;
$port = $e_mail->fetching_port;
$protocol = $e_mail->mailbox_protocol;
$imap_config = '{'.$host.':'.$port.$protocol.'}INBOX';
$password = Crypt::decrypt($e_mail->password);
$mailbox = new ImapMailbox($imap_config, $e_mail->user_name, $password, __DIR__);
$mails = array();
$mailsIds = $mailbox->searchMailBox('SINCE '. date('d-M-Y', strtotime("-1 day")));
if(!$mailsIds) {
die('Mailbox is empty');
}
// dd($mailsIds);
foreach($mailsIds as $mailId) {
$overview = $mailbox->get_overview($mailId);
$var = $overview[0]->seen ? 'read' : 'unread';
if ($var == 'unread') {
$mail = $mailbox->getMail($mailId);
if($settings_email->email_collaborator == 1) {
$collaborator = $mail->cc;
} else {
$collaborator = null;
}
$body = $mail->textHtml;
// dd($mailId);
if($body == null) {
$body = $mailbox->backup_getmail($mailId);
$body = str_replace('\r\n', '<br/>', $body);
// var_dump($body);
}
// dd($body);
$date = $mail->date;
$datetime = $overview[0]->date;
$date_time = explode(" ", $datetime);
$date = $date_time[1] . "-" . $date_time[2] . "-" . $date_time[3] . " " . $date_time[4];
$date = date('Y-m-d H:i:s', strtotime($date));
if(isset($mail->subject)){
$subject = $mail->subject;
} else {
$subject = "No Subject";
}
$fromname = $mail->fromName;
$fromaddress = $mail->fromAddress;
$source = "2";
$phone = "";
$priority = '1';
$assign = "";
$form_data = null;
if ($this->TicketController->create_user($fromaddress, $fromname, $subject, $body, $phone, $helptopic, $sla, $priority, $source, $collaborator, $dept, $assign, $form_data) == true) {
$thread_id = Ticket_Thread::whereRaw('id = (select max(`id`) from ticket_thread)')->first();
$thread_id = $thread_id->id;
foreach($mail->getAttachments() as $attachment) {
$support = "support";
// echo $_SERVER['DOCUMENT_ROOT'];
$dir_img_paths = __DIR__;
$dir_img_path = explode('/code', $dir_img_paths);
$filepath = explode('../../../../../public/',$attachment->filePath);
$path = $dir_img_path[0]."/code/public/".$filepath[1];
// dd($path);
$filesize = filesize($path);
$file_data = file_get_contents($path);
$ext = pathinfo($attachment->filePath, PATHINFO_EXTENSION);
$imageid = $attachment->id;
$string = str_replace('-', '', $attachment->name);
$filename = explode('src', $attachment->filePath);
$filename = str_replace('\\', '', $filename);
$body = str_replace("cid:".$imageid, $filepath[1], $body);
$pos = strpos($body, $filepath[1]);
if($pos == false) {
if($settings_email->first()->attachment == 1) {
$upload = new Ticket_attachments;
$upload->file = $file_data;
$upload->thread_id = $thread_id;
$upload->name = $filepath[1];
$upload->type = $ext;
$upload->size = $filesize;
$upload->poster = "ATTACHMENT";
$upload->save();
}
} else {
$upload = new Ticket_attachments;
$upload->file = $file_data;
$upload->thread_id = $thread_id;
$upload->name = $filepath[1];
$upload->type = $ext;
$upload->size = $filesize;
$upload->poster = "INLINE";
$upload->save();
}
unlink($path);
}
$body = Encoding::fixUTF8($body);
$thread = Ticket_Thread::where('id','=',$thread_id)->first();
$thread->body = $this->separate_reply($body) ;
$thread->save();
}
}
}
}
}
}
}
/**
* separate reply
* @param type $body
* @return type string
*/
public function separate_reply($body) {
$body2 = explode('---Reply above this line---', $body);
$body3 = $body2[0];
return $body3;
}
/**
* Decode Imap text
* @param type $str
* @return type string
*/
public function decode_imap_text($str) {
$result = '';
$decode_header = imap_mime_header_decode($str);
foreach ($decode_header AS $obj) {
$result .= htmlspecialchars(rtrim($obj->text, "\t"));
}
return $result;
}
/**
* fetch_attachments
* @return type
*/
public function fetch_attachments(){
$uploads = Upload::all();
foreach($uploads as $attachment) {
$image = @imagecreatefromstring($attachment->file);
ob_start();
imagejpeg($image, null, 80);
$data = ob_get_contents();
ob_end_clean();
$var = '<a href="" target="_blank"><img src="data:image/jpg;base64,' . base64_encode($data) . '"/></a>';
echo '<br/><span class="mailbox-attachment-icon has-img">'.$var.'</span>';
}
}
/**
* function to load data
* @param type $id
* @return type file
*/
public function get_data($id){
$attachments = App\Model\helpdesk\Ticket\Ticket_attachments::where('id','=',$id)->get();
foreach($attachments as $attachment)
{
header('Content-type: application/'.$attachment->type.'');
header('Content-Disposition: inline; filename='.$attachment->name.'');
header('Content-Transfer-Encoding: binary');
echo $attachment->file;
}
}
}