From c62051eefda948b20ea332bfe67177c0ebafe488 Mon Sep 17 00:00:00 2001 From: Nate Date: Mon, 18 Nov 2019 09:22:59 -0700 Subject: [PATCH] Email Templates: List view updates. --- app/email_templates/app_languages.php | 2 +- app/email_templates/email_templates.php | 266 +++++++++-------- .../resources/classes/email_templates.php | 270 +++++++++++++++--- 3 files changed, 373 insertions(+), 165 deletions(-) diff --git a/app/email_templates/app_languages.php b/app/email_templates/app_languages.php index 4126ad51c5..edf25b51cd 100644 --- a/app/email_templates/app_languages.php +++ b/app/email_templates/app_languages.php @@ -41,7 +41,7 @@ $text['title-email_template']['sv-se'] = ''; $text['title-email_template']['uk-ua'] = ''; - $text['title_description-email_template']['en-us'] = ''; + $text['title_description-email_template']['en-us'] = 'Define and manage dynamic templates used for system generated outbound emails.'; $text['title_description-email_template']['ar-eg'] = ''; $text['title_description-email_template']['de-at'] = ''; $text['title_description-email_template']['de-ch'] = ''; diff --git a/app/email_templates/email_templates.php b/app/email_templates/email_templates.php index 0e10aa5a28..fde317d9dd 100644 --- a/app/email_templates/email_templates.php +++ b/app/email_templates/email_templates.php @@ -24,9 +24,10 @@ //includes require_once "root.php"; require_once "resources/require.php"; + require_once "resources/check_auth.php"; + require_once "resources/paging.php"; //check permissions - require_once "resources/check_auth.php"; if (permission_exists('email_template_view')) { //access granted } @@ -39,26 +40,45 @@ $language = new text; $text = $language->get(); -//get the action - if (is_array($_POST["email_templates"])) { - $email_templates = $_POST["email_templates"]; - foreach($email_templates as $row) { - if ($row['action'] == 'delete') { - $action = 'delete'; - break; - } +//get posted data + if (is_array($_POST['email_templates'])) { + $action = $_POST['action']; + $search = $_POST['search']; + $email_templates = $_POST['email_templates']; + } + +//copy the email_templates + if (permission_exists('email_template_add')) { + if ($action == 'copy' && is_array($email_templates) && @sizeof($email_templates) != 0) { + //copy + $obj = new email_templates; + $obj->copy($email_templates); + //redirect + header('Location: email_templates.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } + +//toggle the email_templates + if (permission_exists('email_template_edit')) { + if ($action == 'toggle' && is_array($email_templates) && @sizeof($email_templates) != 0) { + //toggle + $obj = new email_templates; + $obj->toggle($email_templates); + //redirect + header('Location: email_templates.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; } } //delete the email_templates if (permission_exists('email_template_delete')) { - if ($action == "delete") { - //download + if ($action == 'delete' && is_array($email_templates) && @sizeof($email_templates) != 0) { + //delete $obj = new email_templates; $obj->delete($email_templates); //redirect - message::add($text['message-delete']); - header('Location: '.$_SERVER['PHP_SELF']); + header('Location: email_templates.php'.($search != '' ? '?search='.urlencode($search) : null)); exit; } } @@ -74,8 +94,8 @@ $sql_search .= " lower(template_language) like :search "; $sql_search .= " or lower(template_category) like :search "; $sql_search .= " or lower(template_subcategory) like :search "; - //$sql_search .= " or lower(template_subject) like :search "; - //$sql_search .= " or lower(template_body) like :search "; + $sql_search .= " or lower(template_subject) like :search "; + $sql_search .= " or lower(template_body) like :search "; $sql_search .= " or lower(template_type) like :search "; $sql_search .= " or lower(template_enabled) like :search "; $sql_search .= " or lower(template_description) like :search "; @@ -83,10 +103,6 @@ $parameters['search'] = '%'.$search.'%'; } -//additional includes - require_once "resources/header.php"; - require_once "resources/paging.php"; - //prepare to page the results $sql = "select count(*) from v_email_templates "; if ($_GET['show'] == "all" && permission_exists('email_template_all')) { @@ -106,156 +122,164 @@ //prepare to page the results $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; - $param = ""; + $param = "&search=".$search; $page = $_GET['page']; if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; } - list($paging_controls, $rows_per_page, $var3) = paging($num_rows, $param, $rows_per_page); + 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 = str_replace('count(*)', '*', $sql); - $sql .= order_by($order_by, $order, 'template_language', 'asc'); + if ($order_by) { + $sql .= order_by($order_by, $order); + } + else { + $sql .= "order by domain_uuid, template_language asc, template_category asc, template_subcategory asc, template_type asc, template_description asc "; + } $sql .= limit_offset($rows_per_page, $offset); $database = new database; $result = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); -//alternate the row style - $c = 0; - $row_style["0"] = "row_style0"; - $row_style["1"] = "row_style1"; +//create token + $object = new token; + $token = $object->create($_SERVER['PHP_SELF']); -//define the checkbox_toggle function - echo "\n"; +//additional includes + require_once "resources/header.php"; //show the content - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; + echo ""; + echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search','style'=>($search != '' ? 'display: none;' : null)]); + echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'email_templates.php','style'=>($search == '' ? 'display: none;' : null)]); + if ($paging_controls_mini != '') { + echo "".$paging_controls_mini.""; + } echo " \n"; - echo " \n"; - echo "
".$text['title-email_templates']."
\n"; + echo "
\n"; + echo "
".$text['title-email_templates']." (".$num_rows.")
\n"; + echo "
\n"; + if (permission_exists('email_template_add')) { + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'link'=>'email_template_edit.php']); + } + if (permission_exists('email_template_add') && $result) { + echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'onclick'=>"if (confirm('".$text['confirm-copy']."')) { list_action_set('copy'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + if (permission_exists('email_template_edit') && $result) { + echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'onclick'=>"if (confirm('".$text['confirm-toggle']."')) { list_action_set('toggle'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + if (permission_exists('email_template_delete') && $result) { + echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'onclick'=>"if (confirm('".$text['confirm-delete']."')) { list_action_set('delete'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + echo "\n"; if (permission_exists('email_template_all')) { if ($_GET['show'] == 'all') { echo " "; } else { - echo " \n"; + echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?show=all']); } } - echo " \n"; - echo " \n"; - echo "
\n"; + echo " \n"; + echo "
\n"; + echo "\n"; - echo "
\n"; - echo "\n"; - echo "\n"; - echo " \n"; + echo $text['title_description-email_template']."\n"; + echo "

\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + + echo "
\n"; - echo " \n"; - echo "
\n"; + echo "\n"; + if (permission_exists('email_template_add') || permission_exists('email_template_edit') || permission_exists('email_template_delete')) { + echo " \n"; + } if ($_GET['show'] == "all" && permission_exists('email_template_all')) { - echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, '', '', $param); + echo "\n"; + //echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, null, null, $param); } - echo th_order_by('template_language', $text['label-template_language'], $order_by, $order); - echo th_order_by('template_category', $text['label-template_category'], $order_by, $order); - echo th_order_by('template_subcategory', $text['label-template_subcategory'], $order_by, $order); - //echo th_order_by('domain_uuid', $text['label-domain_uuid'], $order_by, $order); - echo th_order_by('template_type', $text['label-template_type'], $order_by, $order); - echo th_order_by('template_enabled', $text['label-template_enabled'], $order_by, $order); - echo th_order_by('template_description', $text['label-template_description'], $order_by, $order); - echo " \n"; } - else { - echo " \n"; - } - echo " \n"; - echo "\n"; + echo "\n"; if (is_array($result) && @sizeof($result) != 0) { $x = 0; foreach($result as $row) { if (permission_exists('email_template_edit')) { - $tr_link = "href='email_template_edit.php?id=".escape($row['email_template_uuid'])."'"; + $list_row_url = "email_template_edit.php?id=".urlencode($row['email_template_uuid']); + } + echo "\n"; + if (permission_exists('email_template_add') || permission_exists('email_template_edit') || permission_exists('email_template_delete')) { + echo " \n"; } - echo "\n"; - echo " \n"; if ($_GET['show'] == "all" && permission_exists('email_template_all')) { - if (strlen($_SESSION['domains'][$row['domain_uuid']]['domain_name']) > 0) { - $domain = $_SESSION['domains'][$row['domain_uuid']]['domain_name']; + 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"; + if (permission_exists('email_template_edit')) { + echo " \n"; + echo " \n"; + if (permission_exists('email_template_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; + } echo "\n"; $x++; - if ($c==0) { $c=1; } else { $c=0; } } } - unset($result, $row); + unset($result); + + echo "
\n"; + echo " \n"; + echo " ".$text['label-domain'].""; - if (permission_exists('email_template_add')) { - echo " $v_link_label_add"; + echo th_order_by('template_language', $text['label-template_language'], $order_by, $order, null, "class='shrink'", $param); + echo th_order_by('template_category', $text['label-template_category'], $order_by, $order, null, "class='shrink' style='min-width: 15%'", $param); + echo th_order_by('template_subcategory', $text['label-template_subcategory'], $order_by, $order, null, "class='shrink' style='min-width: 15%'", $param); + echo th_order_by('template_subject', $text['label-template_subject'], $order_by, $order, null, "class='hide-sm-dn' style='min-width: 20%'", $param); + echo th_order_by('template_type', $text['label-template_type'], $order_by, $order, null, "class='shrink'", $param); + echo th_order_by('template_enabled', $text['label-template_enabled'], $order_by, $order, null, "class='center' style='min-width: 15%'", $param); + echo th_order_by('template_description', $text['label-template_description'], $order_by, $order, null, "class='hide-sm-dn'", $param); + if (permission_exists('email_template_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo "  
\n"; + echo " \n"; + echo " \n"; + echo "
"; + if (is_uuid($row['domain_uuid'])) { + echo escape($_SESSION['domains'][$row['domain_uuid']]['domain_name']); } else { - $domain = $text['label-global']; + echo $text['label-global']; } - echo " ".escape($domain)."".escape($row['template_language'])." ".escape($row['template_category'])." ".escape($row['template_subcategory'])." ".escape($row['template_subject'])." ".escape($row['template_body'])." ".escape($row['domain_uuid'])." ".escape($row['template_type'])." ".escape($row['template_enabled'])." ".escape($row['template_description'])." "; + echo " ".escape($row['template_language'])." ".escape($row['template_category'])." ".escape($row['template_subcategory'])." "; if (permission_exists('email_template_edit')) { - echo "$v_link_label_edit"; + echo "".escape($row['template_subject']).""; } - if (permission_exists('email_template_delete')) { - echo ""; + else { + echo escape($row['template_subject']); } echo " ".escape($row['template_type'])." "; + echo $text['label-'.$row['template_enabled']]; + } + echo " ".escape($row['template_description']).""; + 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"; - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
 $paging_controls"; - if (permission_exists('email_template_add')) { - echo "$v_link_label_add"; - } - else { - echo " "; - } - echo "
\n"; - echo "\n"; - echo "\n"; - echo ""; echo "
\n"; - echo "

"; //include the footer require_once "resources/footer.php"; -?> +?> \ No newline at end of file diff --git a/app/email_templates/resources/classes/email_templates.php b/app/email_templates/resources/classes/email_templates.php index 985c809180..1e57565a73 100644 --- a/app/email_templates/resources/classes/email_templates.php +++ b/app/email_templates/resources/classes/email_templates.php @@ -1,30 +1,64 @@ + Portions created by the Initial Developer are Copyright (C) 2008-2019 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//define the email templates class if (!class_exists('email_templates')) { class email_templates { - public $db; + /** + * declare private variables + */ + private $app_name; + private $app_uuid; + private $permission_prefix; + private $list_page; + private $table; + private $uuid_prefix; + private $toggle_field; + private $toggle_values; /** - * Called when the object is created + * called when the object is created */ public function __construct() { - //connect to the database if not connected - if (!$this->db) { - require_once "resources/classes/database.php"; - $database = new database; - $database->connect(); - $this->db = $database->db; - } + + //assign private variables + $this->app_name = 'email_templates'; + $this->app_uuid = '8173e738-2523-46d5-8943-13883befd2fd'; + $this->permission_prefix = 'email_template_'; + $this->list_page = 'email_templates.php'; + $this->table = 'email_templates'; + $this->uuid_prefix = 'email_template_'; + $this->toggle_field = 'template_enabled'; + $this->toggle_values = ['true','false']; + } /** - * Called when there are no references to a particular object + * called when there are no references to a particular object * unset the variables used in the class */ public function __destruct() { @@ -34,42 +68,192 @@ if (!class_exists('email_templates')) { } /** - * delete email_templates + * delete records */ - public function delete($email_templates) { - if (permission_exists('email_template_delete')) { + public function delete($records) { + if (permission_exists($this->permission_prefix.'delete')) { - //delete multiple email_templates - if (is_array($email_templates)) { - //get the action - foreach($email_templates as $row) { - if ($row['action'] == 'delete') { - $action = 'delete'; - break; + //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->list_page); + exit; + } + + //delete multiple records + if (is_array($records) && @sizeof($records) != 0) { + + //build the delete array + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid']; } } + //delete the checked rows - if ($action == 'delete') { - foreach($email_templates as $row) { - if ($row['checked'] == 'true') { - $sql = "delete from v_email_templates "; - $sql .= "where email_template_uuid = '".$row['email_template_uuid']."'; "; - $this->db->query($sql); - unset($sql); - } - } - unset($email_templates); + 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); } } - } //end the delete function + } - } //end the class + /** + * toggle records + */ + public function toggle($records) { + if (permission_exists($this->permission_prefix.'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->list_page); + exit; + } + + //toggle the checked records + if (is_array($records) && @sizeof($records) != 0) { + + //get current toggle state + foreach($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $record_uuids[] = $this->uuid_prefix."uuid = '".$record['uuid']."'"; + } + } + if (is_array($record_uuids) && @sizeof($record_uuids) != 0) { + $sql = "select ".$this->uuid_prefix."uuid as uuid, ".$this->toggle_field." as toggle from v_".$this->table." "; + $sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) "; + $sql .= "and ( ".implode(' or ', $record_uuids)." ) "; + $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) { + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $uuid; + $array[$this->table][$x][$this->toggle_field] = $state == $this->toggle_values[0] ? $this->toggle_values[1] : $this->toggle_values[0]; + $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 records + */ + public function copy($records) { + if (permission_exists($this->permission_prefix.'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->list_page); + exit; + } + + //copy the checked records + if (is_array($records) && @sizeof($records) != 0) { + + //get checked records + foreach($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $record_uuids[] = $this->uuid_prefix."uuid = '".$record['uuid']."'"; + } + } + + //create insert array from existing data + if (is_array($record_uuids) && @sizeof($record_uuids) != 0) { + $sql = "select * from v_".$this->table." "; + $sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) "; + $sql .= "and ( ".implode(' or ', $record_uuids)." ) "; + $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 $x => $row) { + + //copy data + $array[$this->table][$x] = $row; + + //overwrite + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = uuid(); + $array[$this->table][$x]['template_description'] = trim($row['template_description'].' ('.$text['label-copy'].')'); + + } + } + 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); + } + + } + } + + } } -/* -$obj = new email_templates; -$obj->delete(); -*/ - -?> +?> \ No newline at end of file