From d5e6d0ec616fe93c775a4d1cfdb13fe1dee21938 Mon Sep 17 00:00:00 2001 From: Nate Date: Tue, 26 Nov 2019 14:55:21 -0700 Subject: [PATCH] Number Translations: List view updates. --- .../number_translations.php | 257 ++++++++------- .../resources/classes/number_translations.php | 312 ++++++++++++++---- 2 files changed, 389 insertions(+), 180 deletions(-) diff --git a/app/number_translations/number_translations.php b/app/number_translations/number_translations.php index e9f1aa39d1..e5850e82c9 100644 --- a/app/number_translations/number_translations.php +++ b/app/number_translations/number_translations.php @@ -21,6 +21,7 @@ require_once "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; + require_once "resources/paging.php"; //check permissions if (permission_exists('number_translation_view')) { @@ -35,182 +36,192 @@ $language = new text; $text = $language->get(); -//get the action - if (is_array($_POST["number_translations"])) { - $number_translations = $_POST["number_translations"]; - foreach($number_translations as $row) { - if ($row['action'] == 'delete') { - $action = 'delete'; - break; - } +//get posted data + if (is_array($_POST['number_translations'])) { + $action = $_POST['action']; + $search = $_POST['search']; + $number_translations = $_POST['number_translations']; + } + +//copy the number translations + if (permission_exists('number_translation_add')) { + if ($action == 'copy' && is_array($number_translations) && @sizeof($number_translations) != 0) { + //copy + $obj = new number_translations; + $obj->copy($number_translations); + //redirect + header('Location: number_translations.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; } } -//delete the number_translations +//toggle the number translations + if (permission_exists('number_translation_edit')) { + if ($action == 'toggle' && is_array($number_translations) && @sizeof($number_translations) != 0) { + //toggle + $obj = new number_translations; + $obj->toggle($number_translations); + //redirect + header('Location: number_translations.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } + +//delete the number translations if (permission_exists('number_translation_delete')) { - if ($action == "delete") { - //download + if ($action == 'delete' && is_array($number_translations) && @sizeof($number_translations) != 0) { + //delete $obj = new number_translations; $obj->delete($number_translations); - //delete message - message::add($text['message-delete']); + //redirect + header('Location: number_translations.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; } } -//get variables used to control the order +//get order and order by $order_by = $_GET["order_by"]; $order = $_GET["order"]; //add the search term $search = strtolower($_GET["search"]); if (strlen($search) > 0) { - $sql_search = " ("; - $sql_search .= " lower(number_translation_name) like :search "; - $sql_search .= " or lower(number_translation_enabled) like :search "; - $sql_search .= " or lower(number_translation_description) like :search "; - $sql_search .= " ) "; + $sql_search = "where ("; + $sql_search .= "lower(number_translation_name) like :search "; + $sql_search .= "or lower(number_translation_enabled) like :search "; + $sql_search .= "or lower(number_translation_description) like :search "; + $sql_search .= ") "; $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_number_translations "; - if (isset($sql_search)) { - $sql .= "where ".$sql_search; - } + $sql .= $sql_search; $database = new database; - $num_rows = $database->select($sql, (is_array($parameters) ? $parameters : null), 'column'); + $num_rows = $database->select($sql, $parameters, 'column'); //prepare to page the results $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; $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); + $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 = str_replace('count(*)', '*', $sql); - $sql .= order_by($order_by, $order); + $sql .= order_by($order_by, $order, 'number_translation_name', 'asc'); $sql .= limit_offset($rows_per_page, $offset); $database = new database; - $result = $database->select($sql, (is_array($parameters) ? $parameters : null), 'all'); + $number_translations = $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 " \n"; - echo " \n"; - echo " \n"; - echo "
".$text['title-number_translations']."\n"; - echo "
\n"; - if (permission_exists('number_translation_delete')) { - echo " \n"; - } - echo " \n"; - echo " \n"; - echo "
\n"; - echo "
\n"; - echo " ".$text['title_description-number_translation']."

\n"; - echo "
\n"; - - echo "
\n"; - echo "\n"; - echo "\n"; - echo " \n"; - echo th_order_by('number_translation_name', $text['label-number_translation_name'], $order_by, $order); - echo th_order_by('number_translation_enabled', $text['label-number_translation_enabled'], $order_by, $order); - echo th_order_by('number_translation_description', $text['label-number_translation_description'], $order_by, $order); - echo " \n"; - echo "\n"; + if (permission_exists('number_translation_edit') && $number_translations) { + 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('number_translation_delete') && $number_translations) { + 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"; + 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'=>'number_translations.php','style'=>($search == '' ? 'display: none;' : null)]); + if ($paging_controls_mini != '') { + echo "".$paging_controls_mini.""; + } + echo " \n"; + echo " \n"; + echo "
\n"; + echo "\n"; - if (is_array($result) && @sizeof($result) != 0) { + echo $text['title_description-number_translation']."\n"; + echo "

\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + + echo "
\n"; - echo " \n"; - echo " "; + echo "
\n"; + echo "
".$text['title-number_translations']." (".$num_rows.")
\n"; + echo "
\n"; if (permission_exists('number_translation_add')) { - echo " $v_link_label_add"; + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'link'=>'number_translation_edit.php']); } - else { - echo " \n"; + if (permission_exists('number_translation_add') && $number_translations) { + 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; }"]); } - echo "
\n"; + echo "\n"; + if (permission_exists('number_translation_add') || permission_exists('number_translation_edit') || permission_exists('number_translation_delete')) { + echo " \n"; + } + echo th_order_by('number_translation_name', $text['label-number_translation_name'], $order_by, $order); + echo th_order_by('number_translation_enabled', $text['label-number_translation_enabled'], $order_by, $order, null, "class='center'"); + echo th_order_by('number_translation_description', $text['label-number_translation_description'], $order_by, $order, null, "class='hide-sm-dn'"); + if (permission_exists('number_translation_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; + } + echo "\n"; + + if (is_array($number_translations) && @sizeof($number_translations) != 0) { $x = 0; - foreach($result as $row) { + foreach ($number_translations as $row) { if (permission_exists('number_translation_edit')) { - $tr_link = "href='number_translation_edit.php?id=".escape($row['number_translation_uuid'])."'"; + $list_row_url = "number_translation_edit.php?id=".urlencode($row['number_translation_uuid']); } - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; + if (permission_exists('number_translation_add') || permission_exists('number_translation_edit') || permission_exists('number_translation_delete')) { + echo " \n"; + } + echo " \n"; + if (permission_exists('number_translation_edit')) { + echo " \n"; + echo " \n"; + if (permission_exists('number_translation_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($number_translations, $row); + + echo "
\n"; + echo " \n"; + echo "  
".escape($row['number_translation_name'])." ".escape($row['number_translation_enabled'])." ".escape($row['number_translation_description'])." "; + echo "
\n"; + echo " \n"; + echo " \n"; + echo " "; if (permission_exists('number_translation_edit')) { - echo "$v_link_label_edit"; + echo "".escape($row['number_translation_name']).""; } - if (permission_exists('number_translation_delete')) { - echo "$v_link_label_delete"; + else { + echo escape($row['number_translation_name']); } echo " "; + echo $text['label-'.$row['number_translation_enabled']]; + } + echo " ".escape($row['number_translation_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('number_translation_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"; diff --git a/app/number_translations/resources/classes/number_translations.php b/app/number_translations/resources/classes/number_translations.php index 9fe595771c..93f91efb7f 100644 --- a/app/number_translations/resources/classes/number_translations.php +++ b/app/number_translations/resources/classes/number_translations.php @@ -1,46 +1,64 @@ - Portions created by the Initial Developer are Copyright (C) 2017 - the Initial Developer. All Rights Reserved. + The Initial Developer of the Original Code is + Mark J Crane + Portions created by the Initial Developer are Copyright (C) 2008-2019 + the Initial Developer. All Rights Reserved. - Contributor(s): - Matthew Vale + Contributor(s): + Mark J Crane */ -/** - * call_recordings class - * - * @method null download - */ +//define the number translations class if (!class_exists('number_translations')) { class number_translations { /** - * Called when the object is created + * 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 */ public function __construct() { + //assign private variables + $this->app_name = 'number_translations'; + $this->app_uuid = '6ad54de6-4909-11e7-a919-92ebcb67fe33'; + $this->permission_prefix = 'number_translation_'; + $this->list_page = 'number_translations.php'; + $this->table = 'number_translations'; + $this->uuid_prefix = 'number_translation_'; + $this->toggle_field = 'number_translation_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() { @@ -130,48 +148,228 @@ if (!class_exists('number_translations')) { } /** - * delete number_translations + * delete records */ - public function delete($number_translations) { - if (permission_exists('number_translation_delete')) { + public function delete($records) { + if (permission_exists($this->permission_prefix.'delete')) { - //delete multiple number_translations - if (is_array($number_translations)) { - //get the action - foreach ($number_translations 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']; + $array['number_translation_details'][$x][$this->uuid_prefix.'uuid'] = $record['uuid']; } } + //delete the checked rows - if ($action == 'delete') { - foreach ($number_translations as $row) { - if ($row['action'] == 'delete' or $row['checked'] == 'true') { - //build delete array - $array['number_translations'][]['number_translation_uuid'] = $row['number_translation_uuid']; - } - if (is_array($array) && @sizeof($array) != 0) { - //grant temporary permissions - $p = new permissions; - $p->add('number_translation_delete', 'temp'); - //execute delete - $database = new database; - $database->app_name = 'number_translations'; - $database->app_uuid = '6ad54de6-4909-11e7-a919-92ebcb67fe33'; - $database->delete($array); - unset($array); - //revoke temporary permissions - $p->delete('number_translation_delete', 'temp'); - } - } - unset($number_translations); + if (is_array($array) && @sizeof($array) != 0) { + + //grant temporary permissions + $p = new permissions; + $p->add('number_translation_details_delete', 'temp'); + + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + + //revoke temporary permissions + $p->delete('number_translation_details_delete', 'temp'); + + //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 ( ".implode(' or ', $record_uuids)." ) "; + $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) { + + //primary table + $sql = "select * from v_".$this->table." "; + $sql .= "where ".implode(' or ', $record_uuids)." "; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + $y = 0; + foreach ($rows as $x => $row) { + $primary_uuid = uuid(); + + //copy data + $array[$this->table][$x] = $row; + + //overwrite + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $primary_uuid; + $array[$this->table][$x]['number_translation_description'] = trim($row['number_translation_description'].' ('.$text['label-copy'].')'); + + //nodes sub table + $sql_2 = "select * from v_number_translation_details where number_translation_uuid = :number_translation_uuid"; + $parameters_2['number_translation_uuid'] = $row['number_translation_uuid']; + $database = new database; + $rows_2 = $database->select($sql_2, $parameters_2, 'all'); + if (is_array($rows_2) && @sizeof($rows_2) != 0) { + foreach ($rows_2 as $row_2) { + + //copy data + $array['number_translation_details'][$y] = $row_2; + + //overwrite + $array['number_translation_details'][$y]['number_translation_detail_uuid'] = uuid(); + $array['number_translation_details'][$y]['number_translation_uuid'] = $primary_uuid; + + //increment + $y++; + + } + } + unset($sql_2, $parameters_2, $rows_2, $row_2); + } + } + unset($sql, $parameters, $rows, $row); + } + + //save the changes and set the message + if (is_array($array) && @sizeof($array) != 0) { + + //grant temporary permissions + $p = new permissions; + $p->add('number_translation_detail_add', 'temp'); + + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //revoke temporary permissions + $p->delete('number_translation_detail_add', 'temp'); + + //set message + message::add($text['message-copy']); + + } + unset($records); + } + + } + } //method + + } //class } /*