diff --git a/app/email_queue/app_config.php b/app/email_queue/app_config.php new file mode 100644 index 0000000000..05ea72513e --- /dev/null +++ b/app/email_queue/app_config.php @@ -0,0 +1,216 @@ + diff --git a/app/email_queue/app_languages.php b/app/email_queue/app_languages.php new file mode 100644 index 0000000000..fa0e6ba9db --- /dev/null +++ b/app/email_queue/app_languages.php @@ -0,0 +1,504 @@ + \ No newline at end of file diff --git a/app/email_queue/app_menu.php b/app/email_queue/app_menu.php new file mode 100644 index 0000000000..281e63b3ab --- /dev/null +++ b/app/email_queue/app_menu.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app/email_queue/email_queue.php b/app/email_queue/email_queue.php new file mode 100644 index 0000000000..477f37c1a1 --- /dev/null +++ b/app/email_queue/email_queue.php @@ -0,0 +1,289 @@ +get(); + +//get the http post data + if (is_array($_POST['email_queue'])) { + $action = $_POST['action']; + $search = $_POST['search']; + $email_queue = $_POST['email_queue']; + } + +//process the http post data by action + if ($action != '' && is_array($email_queue) && @sizeof($email_queue) != 0) { + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: email_queue.php'); + exit; + } + + //prepare the array + foreach($email_queue as $row) { + //email class queue uuid + $array[$x]['checked'] = $row['checked']; + $array[$x]['uuid'] = $row['email_queue_uuid']; + + // database class uuid + //$array['email_queue'][$x]['checked'] = $row['checked']; + //$array['email_queue'][$x]['email_queue_uuid'] = $row['email_queue_uuid']; + $x++; + } + + //prepare the database object + $database = new database; + $database->app_name = 'email_queue'; + $database->app_uuid = '5befdf60-a242-445f-91b3-2e9ee3e0ddf7'; + + //send the array to the database class + switch ($action) { + case 'copy': + //if (permission_exists('email_queue_add')) { + // $database->copy($array); + //} + break; + case 'toggle': + //if (permission_exists('email_queue_edit')) { + // $database->toggle($array); + //} + break; + case 'delete': + if (permission_exists('email_queue_delete')) { + $obj = new email_queue; + $obj->delete($array); + //$database->delete($array); + } + break; + } + + //redirect the user + header('Location: email_queue.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + +//get order and order by + $order_by = $_GET["order_by"]; + $order = $_GET["order"]; + +//add the search + if (isset($_GET["search"])) { + $search = strtolower($_GET["search"]); + } + +//get the count + $sql = "select count(email_queue_uuid) "; + $sql .= "from v_email_queue "; + if (isset($search)) { + $sql .= "where ("; + $sql .= " lower(email_from) like :search "; + $sql .= " or lower(email_to) like :search "; + $sql .= " or lower(email_subject) like :search "; + $sql .= " or lower(email_body) like :search "; + $sql .= " or lower(email_status) like :search "; + $sql .= ") "; + $parameters['search'] = '%'.$search.'%'; + } + //else { + // $sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) "; + // $parameters['domain_uuid'] = $domain_uuid; + //} + $database = new database; + $num_rows = $database->select($sql, $parameters, 'column'); + unset($sql, $parameters); + +//prepare to page the results + $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; + $param = $search ? "&search=".$search : null; + $param = ($_GET['show'] == 'all' && permission_exists('email_queue_all')) ? "&show=all" : null; + $page = is_numeric($_GET['page']) ? $_GET['page'] : 0; + list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page); + list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true); + $offset = $rows_per_page * $page; + +//get the list + $sql = "select "; + $sql .= "email_date, "; + $sql .= "email_queue_uuid, "; + $sql .= "hostname, "; + $sql .= "email_from, "; + $sql .= "email_to, "; + $sql .= "email_subject, "; + $sql .= "email_body, "; + //$sql .= "email_action_before, "; + $sql .= "email_action_after, "; + $sql .= "email_status, "; + $sql .= "email_retry_count "; + $sql .= "from v_email_queue "; + if (isset($_GET["search"])) { + $sql .= "where ("; + $sql .= " lower(email_from) like :search "; + $sql .= " or lower(email_to) like :search "; + $sql .= " or lower(email_subject) like :search "; + $sql .= " or lower(email_body) like :search "; + $sql .= " or lower(email_status) like :search "; + $sql .= ") "; + $parameters['search'] = '%'.$search.'%'; + } + $sql .= order_by($order_by, $order, 'email_date', 'desc'); + $sql .= limit_offset($rows_per_page, $offset); + $database = new database; + $email_queue = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//create token + $object = new token; + $token = $object->create($_SERVER['PHP_SELF']); + +//additional includes + $document['title'] = $text['title-email_queue']; + require_once "resources/header.php"; + +//show the content + echo "
\n"; + echo "
".$text['title-email_queue']." (".$num_rows.")
\n"; + echo "
\n"; + //if (permission_exists('email_queue_add')) { + // echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','name'=>'btn_add','link'=>'email_queue_edit.php']); + //} + //if (permission_exists('email_queue_add') && $email_queue) { + // echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display:none;','onclick'=>"modal_open('modal-copy','btn_copy');"]); + //} + //if (permission_exists('email_queue_edit') && $email_queue) { + // echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','style'=>'display:none;','onclick'=>"modal_open('modal-toggle','btn_toggle');"]); + //} + if (permission_exists('email_queue_delete') && $email_queue) { + echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display:none;','onclick'=>"modal_open('modal-delete','btn_delete');"]); + } + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + + if (permission_exists('email_queue_add') && $email_queue) { + echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]); + } + if (permission_exists('email_queue_edit') && $email_queue) { + echo modal::create(['id'=>'modal-toggle','type'=>'toggle','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_toggle','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('toggle'); list_form_submit('form_list');"])]); + } + if (permission_exists('email_queue_delete') && $email_queue) { + echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]); + } + + echo "
\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "\n"; + if (permission_exists('email_queue_add') || permission_exists('email_queue_edit') || permission_exists('email_queue_delete')) { + echo " \n"; + } + //if ($_GET['show'] == 'all' && permission_exists('email_queue_all')) { + // echo th_order_by('domain_name', $text['label-domain'], $order_by, $order); + //} + echo th_order_by('email_date', $text['label-email_date'], $order_by, $order); + echo th_order_by('hostname', $text['label-hostname'], $order_by, $order); + echo th_order_by('email_from', $text['label-email_from'], $order_by, $order); + echo th_order_by('email_to', $text['label-email_to'], $order_by, $order); + echo th_order_by('email_subject', $text['label-email_subject'], $order_by, $order); + echo th_order_by('email_body', $text['label-email_body'], $order_by, $order); + echo th_order_by('email_status', $text['label-email_status'], $order_by, $order); + echo th_order_by('email_retry_count', $text['label-email_retry_count'], $order_by, $order); + + //echo th_order_by('email_action_before', $text['label-email_action_before'], $order_by, $order); + echo th_order_by('email_action_after', $text['label-email_action_after'], $order_by, $order); + if (permission_exists('email_queue_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; + } + echo "\n"; + + if (is_array($email_queue) && @sizeof($email_queue) != 0) { + $x = 0; + foreach ($email_queue as $row) { + if (permission_exists('email_queue_edit')) { + $list_row_url = "email_queue_edit.php?id=".urlencode($row['email_queue_uuid']); + } + echo "\n"; + if (permission_exists('email_queue_add') || permission_exists('email_queue_edit') || permission_exists('email_queue_delete')) { + echo " \n"; + } + //if ($_GET['show'] == 'all' && permission_exists('email_queue_all')) { + // echo " \n"; + //} + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + //echo " \n"; + echo " \n"; + if (permission_exists('email_queue_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; + } + echo "\n"; + $x++; + } + unset($email_queue); + } + + echo "
\n"; + echo " \n"; + echo "  
\n"; + echo " \n"; + echo " \n"; + echo " ".escape($_SESSION['domains'][$row['domain_uuid']]['domain_name'])."\n"; + if (permission_exists('email_queue_edit')) { + echo " ".escape($row['email_date'])."\n"; + } + else { + echo " ".escape($row['email_date']); + } + echo " ".escape($row['hostname'])."".escape($row['email_from'])."".escape($row['email_to'])."".iconv_mime_decode($row['email_subject'])."".escape($row['email_body'])."".escape($row['email_status'])."".escape($row['email_retry_count'])."".escape($row['email_action_before'])."".escape($row['email_action_after'])."\n"; + echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]); + echo "
\n"; + echo "
\n"; + echo "
".$paging_controls."
\n"; + echo "\n"; + echo "
\n"; + +//include the footer + require_once "resources/footer.php"; + +?> diff --git a/app/email_queue/email_queue_delete.php b/app/email_queue/email_queue_delete.php new file mode 100644 index 0000000000..251321f6ca --- /dev/null +++ b/app/email_queue/email_queue_delete.php @@ -0,0 +1,41 @@ +get(); + +//delete the message + message::add($text['message-delete']); + +//delete the data + if (isset($_GET["id"]) && is_uuid($_GET["id"])) { + + //get the id + $id = $_GET["id"]; + + //delete the data + $array['email_queue'][]['email_queue_uuid'] = $id; + $database = new database; + $database->delete($array); + unset($array); + + //redirect the user + header('Location: email_queues.php'); + } + + +?> \ No newline at end of file diff --git a/app/email_queue/email_queue_edit.php b/app/email_queue/email_queue_edit.php new file mode 100644 index 0000000000..a0d386eb33 --- /dev/null +++ b/app/email_queue/email_queue_edit.php @@ -0,0 +1,322 @@ +get(); + +//action add or update + if (is_uuid($_REQUEST["id"])) { + $action = "update"; + $email_queue_uuid = $_REQUEST["id"]; + $id = $_REQUEST["id"]; + } + else { + $action = "add"; + } + +//get http post variables and set them to php variables + if (is_array($_POST)) { + $email_date = $_POST["email_date"]; + $email_from = $_POST["email_from"]; + $email_to = $_POST["email_to"]; + $email_subject = $_POST["email_subject"]; + $email_body = $_POST["email_body"]; + $email_status = $_POST["email_status"]; + $email_retry_count = $_POST["email_retry_count"]; + //$email_action_before = $_POST["email_action_before"]; + $email_action_after = $_POST["email_action_after"]; + } + +//process the user data and save it to the database + if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) { + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: email_queue.php'); + exit; + } + + //process the http post data by submitted action + if ($_POST['action'] != '' && strlen($_POST['action']) > 0) { + + //prepare the array(s) + //send the array to the database class + switch ($_POST['action']) { + case 'copy': + if (permission_exists('email_queue_add')) { + $obj = new database; + $obj->copy($array); + } + break; + case 'delete': + if (permission_exists('email_queue_delete')) { + $obj = new database; + $obj->delete($array); + } + break; + case 'toggle': + if (permission_exists('email_queue_update')) { + $obj = new database; + $obj->toggle($array); + } + break; + } + + //redirect the user + if (in_array($_POST['action'], array('copy', 'delete', 'toggle'))) { + header('Location: email_queue_edit.php?id='.$id); + exit; + } + } + + //check for all required data + $msg = ''; + //if (strlen($email_date) == 0) { $msg .= $text['message-required']." ".$text['label-email_date']."
\n"; } + //if (strlen($email_from) == 0) { $msg .= $text['message-required']." ".$text['label-email_from']."
\n"; } + //if (strlen($email_to) == 0) { $msg .= $text['message-required']." ".$text['label-email_to']."
\n"; } + //if (strlen($email_subject) == 0) { $msg .= $text['message-required']." ".$text['label-email_subject']."
\n"; } + //if (strlen($email_body) == 0) { $msg .= $text['message-required']." ".$text['label-email_body']."
\n"; } + //if (strlen($email_status) == 0) { $msg .= $text['message-required']." ".$text['label-email_status']."
\n"; } + if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) { + require_once "resources/header.php"; + require_once "resources/persist_form_var.php"; + echo "
\n"; + echo "
\n"; + echo $msg."
"; + echo "
\n"; + persistformvar($_POST); + echo "
\n"; + require_once "resources/footer.php"; + return; + } + + //add the email_queue_uuid + if (!is_uuid($_POST["email_queue_uuid"])) { + $email_queue_uuid = uuid(); + } + + //prepare the array + $array['email_queue'][0]['email_queue_uuid'] = $email_queue_uuid; + $array['email_queue'][0]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['email_queue'][0]['email_date'] = $email_date; + $array['email_queue'][0]['email_from'] = $email_from; + $array['email_queue'][0]['email_to'] = $email_to; + $array['email_queue'][0]['email_subject'] = $email_subject; + $array['email_queue'][0]['email_body'] = $email_body; + $array['email_queue'][0]['email_status'] = $email_status; + $array['email_queue'][0]['email_retry_count'] = $email_retry_count; + //$array['email_queue'][0]['email_action_before'] = $email_action_before; + $array['email_queue'][0]['email_action_after'] = $email_action_after; + + //save the data + $database = new database; + $database->app_name = 'email queue'; + $database->app_uuid = '5befdf60-a242-445f-91b3-2e9ee3e0ddf7'; + $database->save($array); + + //redirect the user + if (isset($action)) { + if ($action == "add") { + $_SESSION["message"] = $text['message-add']; + } + if ($action == "update") { + $_SESSION["message"] = $text['message-update']; + } + //header('Location: email_queue.php'); + header('Location: email_queue_edit.php?id='.urlencode($email_queue_uuid)); + return; + } + } + +//pre-populate the form + if (is_array($_GET) && $_POST["persistformvar"] != "true") { + $sql = "select * from v_email_queue "; + $sql .= "where email_queue_uuid = :email_queue_uuid "; + //$sql .= "and domain_uuid = :domain_uuid "; + //$parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['email_queue_uuid'] = $email_queue_uuid; + $database = new database; + $row = $database->select($sql, $parameters, 'row'); + if (is_array($row) && @sizeof($row) != 0) { + $email_date = $row["email_date"]; + $email_from = $row["email_from"]; + $email_to = $row["email_to"]; + $email_subject = $row["email_subject"]; + $email_body = $row["email_body"]; + $email_status = $row["email_status"]; + $email_retry_count = $row["email_retry_count"]; + //$email_action_before = $row["email_action_before"]; + $email_action_after = $row["email_action_after"]; + } + unset($sql, $parameters, $row); + } + +//create token + $object = new token; + $token = $object->create($_SERVER['PHP_SELF']); + +//show the header + $document['title'] = $text['title-email_queue']; + require_once "resources/header.php"; + +//show the content + echo "
\n"; + echo "\n"; + + echo "
\n"; + echo "
".$text['title-email_queue']."
\n"; + echo "
\n"; + echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','collapse'=>'hide-xs','style'=>'margin-right: 15px;','link'=>'email_queue.php']); + if ($action == 'update') { + if (permission_exists('_add')) { + echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]); + } + if (permission_exists('_delete')) { + echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none; margin-right: 15px;','onclick'=>"modal_open('modal-delete','btn_delete');"]); + } + } + echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','collapse'=>'hide-xs']); + echo "
\n"; + echo "
\n"; + echo "
\n"; + + echo $text['title_description-email_queue']."\n"; + echo "

\n"; + + if ($action == 'update') { + if (permission_exists('email_queue_add')) { + echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'copy','onclick'=>"modal_close();"])]); + } + if (permission_exists('email_queue_delete')) { + echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]); + } + } + + echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + //echo "\n"; + //echo "\n"; + //echo "\n"; + //echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "
\n"; + echo " ".$text['label-email_date']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_date']."\n"; + echo "
\n"; + echo " ".$text['label-email_from']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_from']."\n"; + echo "
\n"; + echo " ".$text['label-email_to']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_to']."\n"; + echo "
\n"; + echo " ".$text['label-email_subject']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_subject']."\n"; + echo "
\n"; + echo " ".$text['label-email_body']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_body']."\n"; + echo "
\n"; + echo " ".$text['label-email_status']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_status']."\n"; + echo "
\n"; + echo " ".$text['label-email_retry_count']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_retry_count']."\n"; + echo "
\n"; + //echo " ".$text['label-email_action_before']."\n"; + //echo "\n"; + //echo " \n"; + //echo "
\n"; + //echo $text['description-email_action_before']."\n"; + //echo "
\n"; + echo " ".$text['label-email_action_after']."\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-email_action_after']."\n"; + echo "
"; + echo "

"; + + echo "\n"; + + echo "
"; + +//include the footer + require_once "resources/footer.php"; + +?> \ No newline at end of file diff --git a/app/email_queue/resources/classes/email_queue.php b/app/email_queue/resources/classes/email_queue.php new file mode 100644 index 0000000000..281bfd9ee0 --- /dev/null +++ b/app/email_queue/resources/classes/email_queue.php @@ -0,0 +1,240 @@ +app_name = 'email_queue'; + $this->app_uuid = '5befdf60-a242-445f-91b3-2e9ee3e0ddf7'; + $this->name = 'email_queue'; + $this->table = 'email_queue'; + $this->toggle_field = ''; + $this->toggle_values = ['true','false']; + $this->location = 'email_queue.php'; + } + + /** + * called when there are no references to a particular object + * unset the variables used in the class + */ + public function __destruct() { + foreach ($this as $key => $value) { + unset($this->$key); + } + } + + /** + * delete rows from the database + */ + public function delete($records) { + if (permission_exists($this->name.'_delete')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->location); + exit; + } + + //delete multiple records + if (is_array($records) && @sizeof($records) != 0) { + //build the delete array + $x = 0; + foreach ($records as $record) { + //add to the array + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $array[$this->table][$x][$this->name.'_uuid'] = $record['uuid']; + $array['email_queue_attachments'][$x][$this->name.'_uuid'] = $record['uuid']; + //$array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid']; + } + + //increment the id + $x++; + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + + //set message + message::add($text['message-delete']); + } + unset($records); + } + } + } + + /** + * toggle a field between two values + */ + public function toggle($records) { + if (permission_exists($this->name.'_edit')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->location); + exit; + } + + //toggle the checked records + if (is_array($records) && @sizeof($records) != 0) { + //get current toggle state + foreach($records as $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $uuids[] = "'".$record['uuid']."'"; + } + } + if (is_array($uuids) && @sizeof($uuids) != 0) { + $sql = "select ".$this->name."_uuid as uuid, ".$this->toggle_field." as toggle from v_".$this->table." "; + $sql .= "where ".$this->name."_uuid in (".implode(', ', $uuids).") "; + $sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + foreach ($rows as $row) { + $states[$row['uuid']] = $row['toggle']; + } + } + unset($sql, $parameters, $rows, $row); + } + + //build update array + $x = 0; + foreach($states as $uuid => $state) { + //create the array + $array[$this->table][$x][$this->name.'_uuid'] = $uuid; + $array[$this->table][$x][$this->toggle_field] = $state == $this->toggle_values[0] ? $this->toggle_values[1] : $this->toggle_values[0]; + + //increment the id + $x++; + } + + //save the changes + if (is_array($array) && @sizeof($array) != 0) { + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //set message + message::add($text['message-toggle']); + } + unset($records, $states); + } + } + } + + /** + * copy rows from the database + */ + public function copy($records) { + if (permission_exists($this->name.'_add')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->location); + exit; + } + + //copy the checked records + if (is_array($records) && @sizeof($records) != 0) { + + //get checked records + foreach($records as $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $uuids[] = "'".$record['uuid']."'"; + } + } + + //create the array from existing data + if (is_array($uuids) && @sizeof($uuids) != 0) { + $sql = "select * from v_".$this->table." "; + $sql .= "where ".$this->name."_uuid in (".implode(', ', $uuids).") "; + $sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + $x = 0; + foreach ($rows as $row) { + //copy data + $array[$this->table][$x] = $row; + + //add copy to the description + $array[$this->table][$x][$this->name.'_uuid'] = uuid(); + + //increment the id + $x++; + } + } + unset($sql, $parameters, $rows, $row); + } + + //save the changes and set the message + if (is_array($array) && @sizeof($array) != 0) { + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //set message + message::add($text['message-copy']); + } + unset($records); + } + } + } + + } +} + +?> diff --git a/app/email_queue/resources/functions/transcribe.php b/app/email_queue/resources/functions/transcribe.php new file mode 100644 index 0000000000..019e401ff9 --- /dev/null +++ b/app/email_queue/resources/functions/transcribe.php @@ -0,0 +1,229 @@ + diff --git a/app/email_queue/resources/jobs/email_queue.php b/app/email_queue/resources/jobs/email_queue.php new file mode 100644 index 0000000000..2dace7f8ca --- /dev/null +++ b/app/email_queue/resources/jobs/email_queue.php @@ -0,0 +1,198 @@ +select($sql, $parameters, 'all'); + unset($parameters); + + //process the messages + if (is_array($email_queue) && @sizeof($email_queue) != 0) { + foreach($email_queue as $row) { + $command = "/usr/bin/php /var/www/fusionpbx/app/email_queue/resources/job/email_send.php "; + $command .= "'action=send&email_queue_uuid=".$row["email_queue_uuid"]."&hostname=".$hostname."'"; + if (isset($debug)) { + //run process inline to see debug info + echo $command."\n"; + $result = system($command); + echo $result."\n"; + } + else { + //starts process rapidly doesn't wait for previous process to finish (used for production) + $handle = popen($command." > /dev/null &", 'r'); + echo "'$handle'; " . gettype($handle) . "\n"; + $read = fread($handle, 2096); + echo $read; + pclose($handle); + } + } + } + +//remove the old pid file + if (file_exists($file)) { + unlink($pid_file); + } + +//save output to + //$fp = fopen(sys_get_temp_dir()."/mailer-app.log", "a"); + +//prepare the output buffers + //ob_end_clean(); + //ob_start(); + +//message divider for log file + //echo "\n\n=============================================================================================================================================\n\n"; + +//get and save the output from the buffer + //$content = ob_get_contents(); //get the output from the buffer + //$content = str_replace("
", "", $content); + + //ob_end_clean(); //clean the buffer + + //fwrite($fp, $content); + //fclose($fp); + +//notes + //echo __line__."\n"; + // if not keeping the email then need to delete it after the voicemail is emailed + +//how to use this feature + // cd /var/www/fusionpbx; /usr/bin/php /var/www/fusionpbx/app/email_queue/resources/send.php + +?> diff --git a/app/email_queue/resources/jobs/email_send.php b/app/email_queue/resources/jobs/email_send.php new file mode 100644 index 0000000000..4759f6cb3d --- /dev/null +++ b/app/email_queue/resources/jobs/email_send.php @@ -0,0 +1,637 @@ +]*>/', ' ', $string); + + //remove control characters + $string = str_replace("\r", '', $string); // --- replace with empty space + $string = str_replace("\n", ' ', $string); // --- replace with space + $string = str_replace("\t", ' ', $string); // --- replace with space + + //remove multiple spaces + $string = trim(preg_replace('/ {2,}/', ' ', $string)); + return $string; + } + } + +//includes + include_once "resources/phpmailer/class.phpmailer.php"; + include_once "resources/phpmailer/class.smtp.php"; + +//set the GET array + if (!empty($argv[1])) { + parse_str($argv[1], $_GET); + } + +//get the primary key + $email_queue_uuid = $_GET['email_queue_uuid']; + $hostname = $_GET['hostname']; + +//get the email details to send + $sql = "select * from v_email_queue "; + $sql .= "where email_queue_uuid = :email_queue_uuid "; + $parameters['email_queue_uuid'] = $email_queue_uuid; + $database = new database; + $row = $database->select($sql, $parameters, 'row'); + if (is_array($row)) { + $domain_uuid = $row["domain_uuid"]; + $email_date = $row["email_date"]; + $email_from = $row["email_from"]; + $email_to = $row["email_to"]; + $email_subject = $row["email_subject"]; + $email_body = $row["email_body"]; + $email_status = $row["email_status"]; + $email_retry_count = $row["email_retry_count"]; + $email_uuid = $row["email_uuid"]; + //$email_action_before = $row["email_action_before"]; + $email_action_after = $row["email_action_after"]; + } + unset($parameters); + +//get the call center settings + $retry_limit = $_SESSION['email_queue']['retry_limit']['numeric']; + //$retry_interval = $_SESSION['email_queue']['retry_interval']['numeric']; + +//set defaults + if (strlen($email_retry_count) == 0) { + $email_retry_count = 0; + } + +//create the email object +/* + $mail = new PHPMailer(); + if (isset($_SESSION['email']['method'])) { + switch ($_SESSION['email']['method']['text']) { + case 'sendmail': $mail->IsSendmail(); break; + case 'qmail': $mail->IsQmail(); break; + case 'mail': $mail->IsMail(); break; + default: $mail->IsSMTP(); break; + } + } + else { + $mail->IsSMTP(); + } +*/ + +//load default smtp settings +/* + if ($_SESSION['email']['smtp_hostname']['text'] != '') { + $smtp['hostname'] = $_SESSION['email']['smtp_hostname']['text']; + } + $smtp['host'] = (strlen($_SESSION['email']['smtp_host']['text']) ? $_SESSION['email']['smtp_host']['text']: '127.0.0.1'); + if (isset($_SESSION['email']['smtp_port'])) { + $smtp['port'] = (int) $_SESSION['email']['smtp_port']['numeric']; + } + else { + $smtp['port'] = 0; + } + $smtp['secure'] = $_SESSION['email']['smtp_secure']['text']; + $smtp['auth'] = $_SESSION['email']['smtp_auth']['text']; + $smtp['username'] = $_SESSION['email']['smtp_username']['text']; + $smtp['password'] = $_SESSION['email']['smtp_password']['text']; + $smtp['from'] = $_SESSION['email']['smtp_from']['text']; + $smtp['from_name'] = $_SESSION['email']['smtp_from_name']['text']; + + if (isset($_SESSION['voicemail']['smtp_from']) && strlen($_SESSION['voicemail']['smtp_from']['text']) > 0) { + $smtp['from'] = $_SESSION['voicemail']['smtp_from']['text']; + } + if (isset($_SESSION['voicemail']['smtp_from_name']) && strlen($_SESSION['voicemail']['smtp_from_name']['text']) > 0) { + $smtp['from_name'] = $_SESSION['voicemail']['smtp_from_name']['text']; + } +*/ + +//overwrite with domain-specific smtp server settings, if any + $sql = "select domain_setting_subcategory, domain_setting_value "; + $sql .= "from v_domain_settings "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and (domain_setting_category = 'email' or domain_setting_category = 'voicemail') "; + $sql .= "and domain_setting_enabled = 'true' "; + $parameters['domain_uuid'] = $domain_uuid; + $database = new database; + $result = $database->select($sql, $parameters, 'all'); + if (is_array($result) && @sizeof($result) != 0) { + foreach ($result as $row) { + if ($row['domain_setting_value'] != '') { + $smtp[str_replace('smtp_','',$row["domain_setting_subcategory"])] = $row['domain_setting_value']; + } + } + } + unset($sql, $parameters, $result, $row); + +//value adjustments + $smtp['auth'] = ($smtp['auth'] == "true") ? true : false; + $smtp['password'] = ($smtp['password'] != '') ? $smtp['password'] : null; + $smtp['secure'] = ($smtp['secure'] != "none") ? $smtp['secure'] : null; + $smtp['username'] = ($smtp['username'] != '') ? $smtp['username'] : null; + +//option to disable smtp ssl or tls validation +/* + if (isset($_SESSION['email']['smtp_validate_certificate'])) { + if ($_SESSION['email']['smtp_validate_certificate']['boolean'] == "false") { + $mail->SMTPOptions = array( + 'ssl' => array( + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true + ) + ); + } + } +*/ + +//add smtp authentication +/* + $mail->SMTPAuth = $smtp['auth']; + if (isset($smtp['hostname'])) { + $mail->Hostname = $smtp['hostname']; + } + $mail->Host = $smtp['host']; + if ($smtp['port'] != 0) { + $mail->Port = $smtp['port']; + } + if ($smtp['secure'] != '') { + $mail->SMTPSecure = $smtp['secure']; + } + if ($smtp['auth']) { + $mail->Username = $smtp['username']; + $mail->Password = $smtp['password']; + } + $mail->SMTPDebug = 4; +*/ + +//get the voicemail details + $sql = "select * from v_voicemails "; + $sql .= "where voicemail_uuid in ( "; + $sql .= " select voicemail_uuid from v_voicemail_messages "; + $sql .= " where voicemail_message_uuid = :voicemail_message_uuid "; + $sql .= ") "; + $parameters['voicemail_message_uuid'] = $email_uuid; + $database = new database; + $row = $database->select($sql, $parameters, 'row'); + if (is_array($row)) { + //$domain_uuid = $row["domain_uuid"]; + //$voicemail_uuid = $row["voicemail_uuid"]; + $voicemail_id = $row["voicemail_id"]; + //$voicemail_password = $row["voicemail_password"]; + //$greeting_id = $row["greeting_id"]; + //$voicemail_alternate_greet_id = $row["voicemail_alternate_greet_id"]; + //$voicemail_mail_to = $row["voicemail_mail_to"]; + //$voicemail_sms_to = $row["voicemail_sms_to "]; + $voicemail_transcription_enabled = $row["voicemail_transcription_enabled"]; + //$voicemail_attach_file = $row["voicemail_attach_file"]; + //$voicemail_file = $row["voicemail_file"]; + //$voicemail_local_after_email = $row["voicemail_local_after_email"]; + //$voicemail_enabled = $row["voicemail_enabled"]; + //$voicemail_description = $row["voicemail_description"]; + //$voicemail_name_base64 = $row["voicemail_name_base64"]; + //$voicemail_tutorial = $row["voicemail_tutorial"]; + echo "transcribe enabled: ".$voicemail_transcription_enabled."\n"; + } + unset($parameters); + +//get the attachments and add to the email + $sql = "select * from v_email_queue_attachments "; + $sql .= "where email_queue_uuid = :email_queue_uuid "; + $parameters['email_queue_uuid'] = $email_queue_uuid; + $database = new database; + $email_queue_attachments = $database->select($sql, $parameters, 'all'); + if (is_array($email_queue_attachments) && @sizeof($email_queue_attachments) != 0) { + foreach($email_queue_attachments as $field) { + + $email_queue_attachment_uuid = $field['email_queue_attachment_uuid']; + $domain_uuid = $field['domain_uuid']; + $email_attachment_type = $field['email_attachment_type']; + $email_attachment_path = $field['email_attachment_path']; + $email_attachment_name = $field['email_attachment_name']; + //$email_attachment_base64= $field['email_attachment_base64']; + + switch ($email_attachment_type) { + case "wav": + $mime_type = "audio/x-wav"; + break; + case "mp3": + $mime_type = "audio/x-mp3"; + break; + case "pdf": + $mime_type = "application/pdf"; + break; + case "tif": + $mime_type = "image/tiff"; + break; + case "tiff": + $mime_type = "image/tiff"; + break; + default: + $mime_type = "binary/octet-stream"; + break; + } + + if (isset($voicemail_transcription_enabled) && $voicemail_transcription_enabled == 'true') { + //transcribe the attachment + if ($email_attachment_type == 'wav' || $email_attachment_type == 'mp3') { + $field = transcribe($email_attachment_path, $email_attachment_name, $email_attachment_type); + echo "transcribe path: ".$email_attachment_path."\n"; + echo "transcribe name: ".$email_attachment_name."\n"; + echo "transcribe type: ".$email_attachment_type."\n"; + echo "transcribe command: ".$field['command']."\n"; + echo "transcribe message: ".$field['message']."\n"; + $transcribe_message = $field['message']; + } + + //echo "email_body before: ".$email_body."\n"; + $email_body = str_replace('${message_text}', $transcribe_message, $email_body); + //$email_debug = $field['message']; + //echo "email_body after: ".$email_body."\n"; + //unset($field); + } + else { + $email_body = str_replace('${message_text}', '', $email_body); + } + + //base64 encode the file + //$file_contents = base64_encode(file_get_contents($email_attachment_path.'/'.$email_attachment_name)); + + //add an attachment + //public addAttachment ( string $path, string $name = '', string $encoding = 'base64', string $type = '', string $disposition = 'attachment' ) : boolean + //$mail->AddAttachment($email_attachment_path.'/'.$email_attachment_name, $email_attachment_name, 'base64', 'attachment'); + + //add email attachments as a string for the send_email function + //$email_attachments[0]['type'] = 'string'; + //$email_attachments[0]['name'] = $email_attachment_path.'/'.$email_attachment_name; + //$email_attachments[0]['value'] = base64_encode(file_get_contents($email_attachment_path.'/'.$email_attachment_name)); + + //add email attachment as a file for the send_email function + $email_attachments[0]['type'] = 'file'; + $email_attachments[0]['name'] = $email_attachment_name; + $email_attachments[0]['value'] = $email_attachment_path.'/'.$email_attachment_name; + } + } + unset($parameters); + +//send context to the temp log + echo "Subject: ".$email_subject."\n"; + echo "From: ".$email_from."\n"; + echo "Reply-to: ".$email_from."\n"; + echo "To: ".$email_to."\n"; + echo "Date: ".$email_date."\n"; + //echo "Transcript: ".$array['message']."\n"; + //echo "Body: ".$email_body."\n"; + +//update the message transcription + if (isset($voicemail_transcription_enabled) && $voicemail_transcription_enabled == 'true' && isset($transcribe_message)) { + $sql = "update v_voicemail_messages "; + $sql .= "set message_transcription = :message_transcription "; + $sql .= "where voicemail_message_uuid = :voicemail_message_uuid; "; + $parameters['voicemail_message_uuid'] = $email_uuid; + $parameters['message_transcription'] = $transcribe_message; + //echo $sql."\n"; + //print_r($parameters); + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + } + +//send email + //ob_start(); + //$sent = !send_email($email_to, $email_subject, $email_body, $email_error, null, null, null, null, $email_attachments) ? false : true; + //$response = ob_get_clean(); + //echo $response; + +//send the email + $email = new email; + $email->from_address = $email_from_address; + $email->from_name = $email_from_name; + $email->recipients = $email_to; + $email->subject = $email_subject; + $email->body = $email_body; + $email->attachments = $email_attachments; + $email->method = 'direct'; + $sent = $email->send(); + //$response = $email->email_error; + +//add to, from, fromname, custom headers and subject to the email +/* + $mail->From = $smtp['from'] ; + $mail->FromName = $smtp['from_name']; + $mail->Subject = $email_subject; + + $email_to = trim($email_to, "<> "); + $email_to = str_replace(";", ",", $email_to); + $email_to_array = explode(",", $email_to); + if (count($email_to_array) == 0) { + $mail->AddAddress($email_to); + } + else { + foreach ($email_to_array as $email_address) { + if (strlen($email_address) > 0) { + echo "Add Address: $email_address\n"; + $mail->AddAddress(trim($email_address)); + } + } + } +*/ + +//add the body to the email +/* + $body_plain = remove_tags($email_body); + //echo "body_plain = $body_plain\n"; + if ((substr($email_body, 0, 5) == "ContentType = "text/html; charset=utf-8"; + $mail->Body = $email_body."

"; + $mail->AltBody = $body_plain."\n"; + $mail->isHTML(true); + } + else { + //$mail->Body = ($body != '') ? $body : $body_plain; + $mail->Body = $body_plain."\n"; + $mail->AltBody = $body_plain."\n"; + $mail->isHTML(false); + } + $mail->CharSet = "utf-8"; +*/ + +//send the email + if ($sent) { + //if ($mail->Send()) { + + /* + $sql = "delete from v_email_queue_attachments "; + $sql .= "where email_queue_uuid = :email_queue_uuid; "; + $parameters['email_queue_uuid'] = $email_queue_uuid; + $database = new database; + $database->select($sql, $parameters); + + $sql = "delete from v_email_queue "; + $sql .= "where email_queue_uuid = :email_queue_uuid; "; + $parameters['email_queue_uuid'] = $email_queue_uuid; + $database = new database; + $database->select($sql, $parameters); + */ + + /* + //build insert array + $email_log_uuid = uuid(); + $array['email_queue'][0]['email_queue_uuid'] = $email_queue_uuid; + $array['email_queue'][0]['email_status'] = 'sent'; + if (isset($field['message'])) { + $array['email_queue'][0]['email_transcription'] = $field['message']; + } + + //grant temporary permissions + $p = new permissions; + $p->add('email_queue_add', 'temp'); + + //execute insert + $database = new database; + $database->app_name = 'email_queue'; + $database->app_uuid = 'ba41954e-9d21-4b10-bbc2-fa5ceabeb184'; + $database->save($array); + unset($array); + + //revoke temporary permissions + $p->delete('email_queue_add', 'temp'); + */ + + //set the email status to sent + $sql = "update v_email_queue "; + $sql .= "set email_status = 'sent' "; + //$sql .= "set email_status = 'waiting' "; //debug + if (isset($transcribe_message)) { + $sql .= ", email_transcription = :email_transcription "; + } + $sql .= "where email_queue_uuid = :email_queue_uuid; "; + $parameters['email_queue_uuid'] = $email_queue_uuid; + if (isset($transcribe_message)) { + $parameters['email_transcription'] = $transcribe_message; + } + //echo $sql."\n"; + //print_r($parameters); + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + + //delete the email after it is sent + if ($email_action_after == 'delete') { + //remove the email file after it has been sent + if (is_array($email_queue_attachments) && @sizeof($email_queue_attachments) != 0) { + foreach($email_queue_attachments as $field) { + $email_attachment_path = $field['email_attachment_path']; + $email_attachment_name = $field['email_attachment_name']; + if (file_exists($email_attachment_path.'/'.$email_attachment_name)) { + unlink($email_attachment_path.'/'.$email_attachment_name); + } + } + } + + //delete the voicemail message from the database + $sql = "delete from v_voicemail_messages "; + $sql .= "where voicemail_message_uuid = :voicemail_message_uuid; "; + $parameters['voicemail_message_uuid'] = $email_uuid; + //echo $sql."\n"; + //print_r($parameters); + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + + //get the domain_name + $sql = "select domain_name from v_domains "; + $sql .= "where domain_uuid = :domain_uuid "; + $parameters['domain_uuid'] = $domain_uuid; + $database = new database; + $domain_name = $database->select($sql, $parameters, 'column'); + + //send the message waiting status + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + if ($fp) { + //$switch_cmd .= "luarun app.lua voicemail mwi ".$voicemail_id."@".$domain_name; + $switch_cmd .= "luarun app/voicemail/resources/scripts/mwi_notify.lua ".$voicemail_id." ".$domain_name." 0 0"; + $switch_result = event_socket_request($fp, 'api '.$switch_cmd); + echo $switch_cmd."\n"; + } + else { + echo "event socket connection failed\n"; + } + } + + /* + //build insert array + $array['email_queue'][0]['email_queue_uuid'] = $email_queue_uuid; + //$array['email_queue'][0]['sent_date'] = 'now()'; + $array['email_queue'][0]['email_status'] = 'sent'; + + //grant temporary permissions + $p = new permissions; + $p->add('email_queue_add', 'temp'); + $p->add('email_queue_update', 'temp'); + //execute insert + $database = new database; + $database->app_name = 'email_queue'; + $database->app_uuid = '5befdf60-a242-445f-91b3-2e9ee3e0ddf7'; + print_r($array); + $message = $database->save($array); + print_r($message); + unset($array); + //revoke temporary permissions + $p->delete('email_queue_add', 'temp'); + $p->delete('email_queue_update', 'temp'); + */ + + //send a message to the console + echo "Message sent!\n"; + + } + else { + + $mailer_error = $mail->ErrorInfo; + echo "Mailer Error: ".$mailer_error."\n\n"; + + /* + //build insert array + $email_log_uuid = uuid(); + $array['email_queue'][0]['email_queue_uuid'] = $email_queue_uuid; + $array['email_queue'][0]['email_status'] = 'failed'; + + //grant temporary permissions + $p = new permissions; + $p->add('email_queue_add', 'temp'); + + //execute insert + $database = new database; + $database->app_name = 'email_queue'; + $database->app_uuid = 'ba41954e-9d21-4b10-bbc2-fa5ceabeb184'; + $database->save($array); + unset($array); + + //revoke temporary permissions + $p->delete('email_queue_add', 'temp'); + */ + + //set the email retry count + $email_retry_count++; + + //set the email status to failed + $sql = "update v_email_queue "; + if ($email_retry_count >= $retry_limit) { + $sql .= "set email_status = 'failed', "; + } + else { + $sql .= "set email_status = 'trying', "; + } + $sql .= "email_retry_count = :email_retry_count "; + //$sql .= ", email_debug = :email_debug "; + $sql .= "where email_queue_uuid = :email_queue_uuid; "; + $parameters['email_queue_uuid'] = $email_queue_uuid; + //$parameters['email_debug'] = $mailer_error; + $parameters['email_retry_count'] = $email_retry_count; + //echo $sql."\n"; + //print_r($parameters); + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + + /* + $call_uuid = $headers["X-FusionPBX-Call-UUID"]; + if ($resend == true) { + echo "Retained in v_email_logs \n"; + } + else { + // log/store message in database for review + if (!isset($email_log_uuid)) { + //build insert array + $email_log_uuid = uuid(); + $array['email_logs'][0]['email_log_uuid'] = $email_log_uuid; + if (is_uuid($call_uuid)) { + $array['email_logs'][0]['call_uuid'] = $call_uuid; + } + $array['email_logs'][0]['domain_uuid'] = $headers["X-FusionPBX-Domain-UUID"]; + $array['email_logs'][0]['sent_date'] = 'now()'; + $array['email_logs'][0]['type'] = $headers["X-FusionPBX-Email-Type"]; + $array['email_logs'][0]['status'] = 'failed'; + $array['email_logs'][0]['email'] = str_replace("'", "''", $msg); + //grant temporary permissions + $p = new permissions; + $p->add('email_log_add', 'temp'); + //execute insert + $database = new database; + $database->app_name = 'v_mailto'; + $database->app_uuid = 'ba41954e-9d21-4b10-bbc2-fa5ceabeb184'; + $database->save($array); + unset($array); + //revoke temporary permissions + $p->delete('email_log_add', 'temp'); + } + + echo "Retained in v_email_logs as email_log_uuid = ".$email_log_uuid."\n"; + } + */ + + } + +//unset the php mail object + unset($mail); + +//save output to + //$fp = fopen(sys_get_temp_dir()."/mailer-app.log", "a"); + +//prepare the output buffers + //ob_end_clean(); + //ob_start(); + +//message divider for log file + //echo "\n\n====================================================\n\n"; + +//get and save the output from the buffer + //$content = ob_get_contents(); //get the output from the buffer + //$content = str_replace("
", "", $content); + + //ob_end_clean(); //clean the buffer + + //fwrite($fp, $content); + //fclose($fp); + +?> diff --git a/app/email_queue/resources/service/debian.service b/app/email_queue/resources/service/debian.service new file mode 100644 index 0000000000..a3baec5f76 --- /dev/null +++ b/app/email_queue/resources/service/debian.service @@ -0,0 +1,30 @@ +; Author: Mark J Crane +; cp /var/www/fusionpbx/app/email_queue/resources/service/debian.service /etc/systemd/system/email_queue.service +; systemctl enable email_queue +; systemctl start email_queue +; systemctl daemon-reload + +[Unit] +Description=FusionPBX Email Queue +Wants=network-online.target +Requires=network.target local-fs.target postgresql.service +After=network.target network-online.target local-fs.target postgresql.service +StartLimitIntervalSec=0 + +[Service] +Type=simple +;Type=forking +PIDFile=/var/run/fusionpbx/email_queue.pid +WorkingDirectory=/var/www/fusionpbx +;Environment="USER=www-data" +;Environment="GROUP=www-data" +;EnvironmentFile=-/etc/default/fusionpbx +ExecStartPre=/bin/mkdir -p /var/run/fusionpbx +;ExecStartPre=/bin/chown -R ${USER}:${GROUP} /var/www/fusionpbx +ExecStart=/usr/bin/php /var/www/fusionpbx/app/email_queue/resources/service/email_queue.php +TimeoutSec=55s +Restart=always + +[Install] +WantedBy=multi-user.target +Also= diff --git a/app/email_queue/resources/service/email_queue.php b/app/email_queue/resources/service/email_queue.php new file mode 100644 index 0000000000..c960e7321c --- /dev/null +++ b/app/email_queue/resources/service/email_queue.php @@ -0,0 +1,204 @@ +select($sql, $parameters, 'all'); + unset($parameters); + + //process the messages + if (is_array($email_queue) && @sizeof($email_queue) != 0) { + foreach($email_queue as $row) { + $command = "/usr/bin/php /var/www/fusionpbx/app/email_queue/resources/jobs/email_send.php "; + $command .= "'action=send&email_queue_uuid=".$row["email_queue_uuid"]."&hostname=".$hostname."'"; + if (isset($debug)) { + //run process inline to see debug info + echo $command."\n"; + $result = system($command); + echo $result."\n"; + } + else { + //starts process rapidly doesn't wait for previous process to finish (used for production) + $handle = popen($command." > /dev/null &", 'r'); + echo "'$handle'; " . gettype($handle) . "\n"; + $read = fread($handle, 2096); + echo $read; + pclose($handle); + } + } + } + + //pause to prevent excessive database queries + sleep($interval); + } + +//remove the old pid file + if (file_exists($file)) { + unlink($pid_file); + } + +//save output to + //$fp = fopen(sys_get_temp_dir()."/mailer-app.log", "a"); + +//prepare the output buffers + //ob_end_clean(); + //ob_start(); + +//message divider for log file + //echo "\n\n=============================================================================================================================================\n\n"; + +//get and save the output from the buffer + //$content = ob_get_contents(); //get the output from the buffer + //$content = str_replace("
", "", $content); + + //ob_end_clean(); //clean the buffer + + //fwrite($fp, $content); + //fclose($fp); + +//notes + //echo __line__."\n"; + // if not keeping the email then need to delete it after the voicemail is emailed + +//how to use this feature + // cd /var/www/fusionpbx; /usr/bin/php /var/www/fusionpbx/app/email_queue/resources/send.php + +?> diff --git a/app/email_queue/root.php b/app/email_queue/root.php new file mode 100644 index 0000000000..b35ebdf68d --- /dev/null +++ b/app/email_queue/root.php @@ -0,0 +1,66 @@ +