diff --git a/app/call_flows/call_flows.php b/app/call_flows/call_flows.php index 4325a70f24..a0f382a08f 100644 --- a/app/call_flows/call_flows.php +++ b/app/call_flows/call_flows.php @@ -27,6 +27,7 @@ //includes require_once "root.php"; require_once "resources/require.php"; + require_once "resources/paging.php"; //check permissions require_once "resources/check_auth.php"; @@ -42,8 +43,48 @@ $language = new text; $text = $language->get(); -//set the page title - $document['title'] = $text['title-call_flows']; +//get posted data + if (is_array($_POST['call_flows'])) { + $action = $_POST['action']; + $search = $_POST['search']; + $call_flows = $_POST['call_flows']; + } + +//copy the call flows + if (permission_exists('call_flow_add')) { + if ($action == 'copy' && is_array($call_flows) && @sizeof($call_flows) != 0) { + //copy + $obj = new call_flows; + $obj->copy($call_flows); + //redirect + header('Location: call_flows.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } + +//toggle the call flows + if (permission_exists('call_flow_edit')) { + if ($action == 'toggle' && is_array($call_flows) && @sizeof($call_flows) != 0) { + //toggle + $obj = new call_flows; + $obj->toggle($call_flows); + //redirect + header('Location: call_flows.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } + +//delete the call flows + if (permission_exists('call_flow_delete')) { + if ($action == 'delete' && is_array($call_flows) && @sizeof($call_flows) != 0) { + //delete + $obj = new call_flows; + $obj->delete($call_flows); + //redirect + header('Location: call_flows.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } //get variables used to control the order $order_by = $_GET["order_by"]; @@ -57,172 +98,152 @@ $sql_search .= "or lower(call_flow_extension) like :search "; $sql_search .= "or lower(call_flow_feature_code) like :search "; $sql_search .= "or lower(call_flow_context) like :search "; - //$sql_search .= "or lower(call_flow_status) like :search "; $sql_search .= "or lower(call_flow_pin_number) like :search "; $sql_search .= "or lower(call_flow_label) like :search "; - //$sql_search .= "or lower(call_flow_sound) like :search "; - //$sql_search .= "or lower(call_flow_app) like :search "; - //$sql_search .= "or lower(call_flow_data) like :search "; $sql_search .= "or lower(call_flow_alternate_label) like :search "; - //$sql_search .= "or lower(call_flow_alternate_sound) like :search "; - //$sql_search .= "or lower(call_flow_alternate_app) like :search "; - //$sql_search .= "or lower(call_flow_alternate_data) like :search "; $sql_search .= "or lower(call_flow_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(call_flow_uuid) from v_call_flows "; + $sql = "select count(*) from v_call_flows "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= $sql_search; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $database = new database; $num_rows = $database->select($sql, $parameters, 'column'); - unset($sql); //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 = "select * from v_call_flows "; - $sql .= "where domain_uuid = :domain_uuid "; - $sql .= $sql_search; - $sql .= order_by($order_by, $order); + $sql = str_replace('count(*)', '*', $sql); + $sql .= order_by($order_by, $order, 'call_flow_name', 'asc'); $sql .= limit_offset($rows_per_page, $offset); $database = new database; $call_flows = $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']); + +//include header + $document['title'] = $text['title-call_flows']; + require_once "resources/header.php"; //show the content - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; + echo "
\n"; + echo "
".$text['title-call_flows']." (".$num_rows.")
\n"; + echo "
\n"; + if (permission_exists('call_flow_add')) { + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'link'=>'call_flow_edit.php']); + } + if (permission_exists('call_flow_add') && $call_flows) { + 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('call_flow_edit') && $call_flows) { + 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('call_flow_delete') && $call_flows) { + 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'=>'call_flows.php','style'=>($search == '' ? 'display: none;' : null)]); + if ($paging_controls_mini != '') { + echo " ".$paging_controls_mini.""; + } echo " \n"; - echo "
\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
".$text['title-call_flows']."
\n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo " ".$text['description-call_flows']."

\n"; - echo "
\n"; + echo " \n"; + echo "
\n"; + echo "\n"; - echo "\n"; - echo "\n"; - echo th_order_by('call_flow_status', $text['label-call_flow_status'], $order_by, $order); - //echo th_order_by('call_flow_name', $text['label-call_flow_name'], $order_by, $order); + echo $text['title_description-call_flows']."\n"; + echo "

\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + + echo "
\n"; + echo "\n"; + if (permission_exists('call_flow_add') || permission_exists('call_flow_edit') || permission_exists('call_flow_delete')) { + echo " \n"; + } + echo th_order_by('call_flow_name', $text['label-call_flow_name'], $order_by, $order); echo th_order_by('call_flow_extension', $text['label-call_flow_extension'], $order_by, $order); echo th_order_by('call_flow_feature_code', $text['label-call_flow_feature_code'], $order_by, $order); - //echo th_order_by('call_flow_context', $text['label-call_flow_context'], $order_by, $order); - //echo th_order_by('call_flow_pin_number', $text['label-call_flow_pin_number'], $order_by, $order); - //echo th_order_by('call_flow_label', $text['label-call_flow_label'], $order_by, $order); - //echo th_order_by('call_flow_sound', $text['label-call_flow_sound'], $order_by, $order); - //echo th_order_by('call_flow_app', $text['label-call_flow_app'], $order_by, $order); - //echo th_order_by('call_flow_data', $text['label-call_flow_data'], $order_by, $order); - //echo th_order_by('call_flow_alternate_label', $text['label-call_flow_alternate_label'], $order_by, $order); - //echo th_order_by('call_flow_alternate_sound', $text['label-call_flow_alternate_sound'], $order_by, $order); - //echo th_order_by('call_flow_alternate_app', $text['label-call_flow_alternate_app'], $order_by, $order); - //echo th_order_by('call_flow_alternate_data', $text['label-call_flow_alternate_data'], $order_by, $order); + echo th_order_by('call_flow_status', $text['label-call_flow_status'], $order_by, $order); if (permission_exists('call_flow_context')) { echo th_order_by('call_flow_context', $text['label-call_flow_context'], $order_by, $order); } - echo th_order_by('call_flow_description', $text['label-call_flow_description'], $order_by, $order); - echo "\n"; } - else { - echo " \n"; - } - echo "\n"; - echo "\n"; + echo "\n"; if (is_array($call_flows)) { - foreach($call_flows as $row) { + $x = 0; + foreach ($call_flows as $row) { if (permission_exists('call_flow_edit')) { - $tr_link = "href='call_flow_edit.php?id=".$row['call_flow_uuid']."'"; + $list_row_url = "call_flow_edit.php?id=".urlencode($row['call_flow_uuid']); } - echo "\n"; - echo " \n"; + if (permission_exists('call_flow_add') || permission_exists('call_flow_edit') || permission_exists('call_flow_delete')) { + echo " \n"; + } + echo " \n"; + echo " \n"; + echo " \n"; + $status_label = $row['call_flow_status'] != 'false' ? $row['call_flow_label'] : $row['call_flow_alternate_label']; + if (permission_exists('call_flow_edit')) { + echo " \n"; - //echo " \n"; - echo " \n"; - echo " \n"; if (permission_exists('call_flow_context')) { - 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('call_flow_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; } - if (permission_exists('call_flow_delete')) { - echo "$v_link_label_delete"; - } - echo " \n"; echo "\n"; - if ($c==0) { $c=1; } else { $c=0; } - } //end foreach + $x++; + } unset($call_flows); - } //end if results + } - echo "\n"; - echo "\n"; - echo "\n"; - echo "
\n"; + echo " \n"; + echo " "; - if (permission_exists('call_flow_add')) { - echo "$v_link_label_add"; + echo th_order_by('call_flow_description', $text['label-call_flow_description'], $order_by, $order, null, "class='hide-sm-dn'"); + if (permission_exists('call_flow_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo "  
"; - if ($row['call_flow_status'] != "false") { - echo escape($row['call_flow_label']); + echo "
\n"; + echo " \n"; + echo " \n"; + echo " ".escape($row['call_flow_name'])." ".escape($row['call_flow_extension'])." ".escape($row['call_flow_feature_code'])." "; + echo escape($status_label); } - echo " \n"; echo " ".escape($row['call_flow_name'])." ".escape($row['call_flow_extension'])." ".escape($row['call_flow_feature_code'])." ".escape($row['call_flow_context'])." ".escape($row['call_flow_context'])." ".escape($row['call_flow_pin_number'])." ".escape($row['call_flow_label'])." ".escape($row['call_flow_sound'])." ".escape($row['call_flow_app'])." ".escape($row['call_flow_data'])." ".escape($row['call_flow_alternate_label'])." ".escape($row['call_flow_alternate_sound'])." ".escape($row['call_flow_alternate_app'])." ".escape($row['call_flow_alternate_data'])." ".escape($row['call_flow_description'])." "; - if (permission_exists('call_flow_edit')) { - echo "$v_link_label_edit"; + echo " ".escape($row['call_flow_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 " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
 $paging_controls"; - if (permission_exists('call_flow_add')) { - echo "$v_link_label_add"; - } - else { - echo " "; - } - echo "
\n"; - echo "
"; - echo "

"; + echo "\n"; + echo "
\n"; + echo "
".$paging_controls."
\n"; + + echo "\n"; + + echo "\n"; //include the footer require_once "resources/footer.php"; -?> +?> \ No newline at end of file diff --git a/app/call_flows/resources/classes/call_flows.php b/app/call_flows/resources/classes/call_flows.php new file mode 100644 index 0000000000..f28c8b4c0b --- /dev/null +++ b/app/call_flows/resources/classes/call_flows.php @@ -0,0 +1,238 @@ +app_name = 'call_flows'; + $this->app_uuid = 'b1b70f85-6b42-429b-8c5a-60c8b02b7d14'; + $this->permission_prefix = 'call_flow_'; + $this->list_page = 'call_flows.php'; + $this->table = 'call_flows'; + $this->uuid_prefix = 'call_flow_'; + $this->toggle_field = 'call_flow_status'; + + } + + /** + * 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 records + */ + public function delete($records) { + if (permission_exists($this->permission_prefix.'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->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[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid']; + } + } + + //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 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 == 'true' ? 'false' : 'true'; + $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]['call_flow_description'] = trim($row['call_flow_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); + } + + } + } + + } +} + +?> \ No newline at end of file