Portions created by the Initial Developer are Copyright (C) 2008-2021 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane Luis Daniel Lucio Quiroz */ //set the include path $conf = glob("{/usr/local/etc,/etc}/fusionpbx/config.conf", GLOB_BRACE); set_include_path(parse_ini_file($conf[0])['document.root']); //includes files require_once "resources/require.php"; require_once "resources/check_auth.php"; require_once "resources/paging.php"; //check permissions if (permission_exists('dialplan_add') || permission_exists('dialplan_edit') || permission_exists('inbound_route_add') || permission_exists('inbound_route_edit') || permission_exists('outbound_route_add') || permission_exists('outbound_route_edit') || permission_exists('fifo_add') || permission_exists('fifo_edit') || permission_exists('time_condition_add') || permission_exists('time_condition_edit')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //set the action as an add or an update if (is_uuid($_GET["id"])) { $action = "update"; $dialplan_uuid = $_GET["id"]; } else { $action = "add"; } //set the app_uuid if (is_uuid($_REQUEST["app_uuid"])) { $app_uuid = $_REQUEST["app_uuid"]; } //get the http post values and set them as php variables if (count($_POST) > 0) { $hostname = $_POST["hostname"]; $dialplan_name = $_POST["dialplan_name"]; $dialplan_number = $_POST["dialplan_number"]; $dialplan_order = $_POST["dialplan_order"]; $dialplan_continue = $_POST["dialplan_continue"] != '' ? $_POST["dialplan_continue"] : 'false'; $dialplan_details = $_POST["dialplan_details"]; $dialplan_context = $_POST["dialplan_context"]; $dialplan_enabled = $_POST["dialplan_enabled"]; $dialplan_description = $_POST["dialplan_description"]; $dialplan_details_delete = $_POST["dialplan_details_delete"]; } //get the list of applications if (!is_array($_SESSION['switch']['applications'])) { $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); if ($fp) { $result = event_socket_request($fp, 'api show application'); $show_applications = explode("\n\n", $result); $raw_applications = explode("\n", $show_applications[0]); unset($result); unset($fp); $previous_application = null; foreach($raw_applications as $row) { if (!empty($row)) { $application_array = explode(",", $row); $application = $application_array[0]; if ( $application != "name" && $application != "system" && $application != "bgsystem" && $application != "spawn" && $application != "bg_spawn" && $application != "spawn_stream" && stristr($application, "[") != true ) { if ($application != $previous_application) { $applications[] = $application; } } $previous_application = $application; } } $_SESSION['switch']['applications'] = $applications; } else { $_SESSION['switch']['applications'] = Array(); } } //process and save the data if (count($_POST) > 0 && empty($_POST["persistformvar"])) { //get the dialplan uuid if ($action == "update") { $dialplan_uuid = $_POST["dialplan_uuid"]; } //process the http post data by submitted action if ($_POST['action'] != '' && is_uuid($_POST['dialplan_uuid'])) { $array[0]['checked'] = 'true'; $array[0]['uuid'] = $_POST['dialplan_uuid']; $list_page = 'dialplans.php'.(is_uuid($app_uuid) ? '?app_uuid='.urlencode($app_uuid) : null); switch ($_POST['action']) { case 'copy': if ( permission_exists('dialplan_add') || permission_exists('inbound_route_add') || permission_exists('outbound_route_add') || permission_exists('fifo_add') || permission_exists('time_condition_add') ) { $obj = new dialplan; $obj->app_uuid = $app_uuid; $obj->list_page = $list_page; $obj->copy($array); } break; case 'delete': if ( permission_exists('dialplan_delete') || permission_exists('inbound_route_delete') || permission_exists('outbound_route_delete') || permission_exists('fifo_delete') || permission_exists('time_condition_delete') ) { $obj = new dialplan; $obj->app_uuid = $app_uuid; $obj->list_page = $list_page; $obj->delete($array); } break; } header('Location: '.$list_page); exit; } //validate the token $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { message::add($text['message-invalid_token'],'negative'); header('Location: dialplans.php'); exit; } //check for all required data $msg = ''; if (empty($dialplan_name)) { $msg .= $text['message-required'].$text['label-name']."
\n"; } if (empty($dialplan_order)) { $msg .= $text['message-required'].$text['label-order']."
\n"; } if (empty($dialplan_continue)) { $msg .= $text['message-required'].$text['label-continue']."
\n"; } if (empty($dialplan_context)) { $msg .= $text['message-required'].$text['label-context']."
\n"; } if (empty($dialplan_enabled)) { $msg .= $text['message-required'].$text['label-enabled']."
\n"; } //if (empty($dialplan_description)) { $msg .= $text['message-required'].$text['label-description']."
\n"; } if (!empty($msg) && empty($_POST["persistformvar"])) { 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; } //remove the invalid characters from the dialplan name $dialplan_name = $_POST["dialplan_name"]; $dialplan_name = str_replace(" ", "_", $dialplan_name); $dialplan_name = str_replace("/", "", $dialplan_name); //build the array $x = 0; if (is_uuid($_POST["dialplan_uuid"])) { $array['dialplans'][$x]['dialplan_uuid'] = $_POST["dialplan_uuid"]; } else { $dialplan_uuid = uuid(); $array['dialplans'][$x]['dialplan_uuid'] = $dialplan_uuid; } if (permission_exists('dialplan_domain')) { if (is_uuid($_POST["domain_uuid"])) { $array['dialplans'][$x]['domain_uuid'] = $_POST['domain_uuid']; } else { $array['dialplans'][$x]['domain_uuid'] = ''; //global } } else { $array['dialplans'][$x]['domain_uuid'] = $_SESSION['domain_uuid']; } if ($action == 'add') { $array['dialplans'][$x]['app_uuid'] = uuid(); } $array['dialplans'][$x]['hostname'] = $hostname; $array['dialplans'][$x]['dialplan_name'] = $dialplan_name; $array['dialplans'][$x]['dialplan_number'] = $_POST["dialplan_number"]; $array['dialplans'][$x]['dialplan_destination'] = $_POST["dialplan_destination"]; $array['dialplans'][$x]['dialplan_context'] = $_POST["dialplan_context"]; $array['dialplans'][$x]['dialplan_continue'] = $_POST["dialplan_continue"]; $array['dialplans'][$x]['dialplan_order'] = $_POST["dialplan_order"]; $array['dialplans'][$x]['dialplan_enabled'] = $_POST["dialplan_enabled"]; $array['dialplans'][$x]['dialplan_description'] = $_POST["dialplan_description"]; $y = 0; if (is_array($_POST["dialplan_details"])) { foreach ($_POST["dialplan_details"] as $row) { if (!empty($row["dialplan_detail_tag"])) { if (!empty($row["dialplan_detail_uuid"])) { $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = $row["dialplan_detail_uuid"]; } if (!preg_match("/system/i", $row["dialplan_detail_type"])) { $dialplan_detail_type = $row["dialplan_detail_type"]; } if (!preg_match("/spawn/i", $row["dialplan_detail_type"])) { $dialplan_detail_type = $row["dialplan_detail_type"]; } if (!preg_match("/system/i", $row["dialplan_detail_data"])) { $dialplan_detail_data = $row["dialplan_detail_data"]; } if (!preg_match("/spawn/i", $row["dialplan_detail_data"])) { $dialplan_detail_data = $row["dialplan_detail_data"]; } $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = is_uuid($_POST["domain_uuid"]) ? $_POST["domain_uuid"] : null; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = $row["dialplan_detail_tag"]; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = $dialplan_detail_type; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = $dialplan_detail_data; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_break'] = $row["dialplan_detail_break"]; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_inline'] = $row["dialplan_detail_inline"]; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = ($row["dialplan_detail_group"] != '') ? $row["dialplan_detail_group"] : '0'; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $row["dialplan_detail_order"]; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_enabled'] = $row["dialplan_detail_enabled"]; } $y++; } } //add or update the database $database = new database; $database->app_name = 'dialplans'; $database->app_uuid = $app_uuid; if ( strlen($dialplan_uuid)>0 ) $database->uuid($dialplan_uuid); $database->save($array); unset($array); //remove checked dialplan details if ( $action == 'update' && permission_exists('dialplan_detail_delete') && is_array($dialplan_details_delete) && @sizeof($dialplan_details_delete) != 0 ) { $obj = new dialplan; $obj->dialplan_uuid = $dialplan_uuid; $obj->app_uuid = $app_uuid; $obj->delete_details($dialplan_details_delete); } //update the dialplan xml $dialplans = new dialplan; $dialplans->source = "details"; $dialplans->destination = "database"; $dialplans->uuid = $dialplan_uuid; $dialplans->xml(); //clear the cache $cache = new cache; if ($dialplan_context == "\${domain_name}" or $dialplan_context == "global") { $dialplan_context = "*"; } $cache->delete("dialplan:".$dialplan_context); //clear the destinations session array if (isset($_SESSION['destinations']['array'])) { unset($_SESSION['destinations']['array']); } //set the message if ($action == "add") { message::add($text['message-add']); } else if ($action == "update") { message::add($text['message-update']); } header("Location: ?id=".escape($dialplan_uuid).(is_uuid($app_uuid) ? "&app_uuid=".$app_uuid : null)); exit; } //(count($_POST)>0 && empty($_POST["persistformvar"])) //pre-populate the form if (count($_GET) > 0 && $_POST["persistformvar"] != "true") { $sql = "select * from v_dialplans "; $sql .= "where dialplan_uuid = :dialplan_uuid "; $parameters['dialplan_uuid'] = $dialplan_uuid; $database = new database; $row = $database->select($sql, $parameters, 'row'); if (is_array($row) && @sizeof($row) != 0) { $domain_uuid = $row["domain_uuid"]; $hostname = $row["hostname"]; $dialplan_name = $row["dialplan_name"]; $dialplan_number = $row["dialplan_number"]; $dialplan_destination = $row["dialplan_destination"]; $dialplan_order = $row["dialplan_order"]; $dialplan_continue = $row["dialplan_continue"]; $dialplan_context = $row["dialplan_context"]; $dialplan_enabled = $row["dialplan_enabled"]; $dialplan_description = $row["dialplan_description"]; } unset($sql, $parameters, $row); } //set the defaults if (empty($dialplan_context)) { $dialplan_context = $_SESSION['domain_name']; } if (empty($dialplan_order)) { $dialplan_order = '200'; } if (empty($dialplan_destination)) { $dialplan_destination = 'false'; } //get the dialplan details in an array $sql = "select "; $sql .= "domain_uuid, dialplan_uuid, dialplan_detail_uuid, dialplan_detail_tag, dialplan_detail_type, dialplan_detail_data, "; $sql .= "dialplan_detail_break, dialplan_detail_inline, dialplan_detail_group, dialplan_detail_order, cast(dialplan_detail_enabled as text) "; $sql .= "from v_dialplan_details "; $sql .= "where dialplan_uuid = :dialplan_uuid "; $sql .= "order by dialplan_detail_group asc, dialplan_detail_order asc"; $parameters['dialplan_uuid'] = $dialplan_uuid; $database = new database; $result = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); //create a new array that is sorted into groups and put the tags in order conditions, actions, anti-actions //set the array index $x = 0; //define the array $details = array(); //conditions if (is_array($result) && @sizeof($result) != 0) { foreach ($result as $row) { if ($row['dialplan_detail_tag'] == "condition") { $group = $row['dialplan_detail_group']; foreach ($row as $key => $val) { $details[$group][$x][$key] = $val; } } $x++; } } //regex if (is_array($result) && @sizeof($result) != 0) { foreach ($result as $row) { if ($row['dialplan_detail_tag'] == "regex") { $group = $row['dialplan_detail_group']; foreach ($row as $key => $val) { $details[$group][$x][$key] = $val; } } $x++; } } //actions if (is_array($result) && @sizeof($result) != 0) { foreach ($result as $row) { if ($row['dialplan_detail_tag'] == "action") { $group = $row['dialplan_detail_group']; foreach ($row as $key => $val) { $details[$group][$x][$key] = $val; } } $x++; } } //anti-actions if (is_array($result) && @sizeof($result) != 0) { foreach ($result as $row) { if ($row['dialplan_detail_tag'] == "anti-action") { $group = $row['dialplan_detail_group']; foreach ($row as $key => $val) { $details[$group][$x][$key] = $val; } } $x++; } } unset($result); //blank row if (is_array($details) && @sizeof($details) != 0) { foreach ($details as $group => $row) { //set the array key for the empty row $x = "999"; //get the highest dialplan_detail_order if (is_array($row) && @sizeof($details) != 0) { foreach ($row as $key => $field) { $dialplan_detail_order = 0; if ($dialplan_detail_order < $field['dialplan_detail_order']) { $dialplan_detail_order = $field['dialplan_detail_order']; } } } //increment the highest order by 5 $dialplan_detail_order = $dialplan_detail_order + 10; //set the rest of the empty array //$details[$group][$x]['domain_uuid'] = ''; //$details[$group][$x]['dialplan_uuid'] = ''; $details[$group][$x]['dialplan_detail_tag'] = ''; $details[$group][$x]['dialplan_detail_type'] = ''; $details[$group][$x]['dialplan_detail_data'] = ''; $details[$group][$x]['dialplan_detail_break'] = ''; $details[$group][$x]['dialplan_detail_inline'] = ''; $details[$group][$x]['dialplan_detail_group'] = $group; $details[$group][$x]['dialplan_detail_order'] = $dialplan_detail_order; $details[$group][$x]['dialplan_detail_enabled'] = 'true'; } } //sort the details array by group number if (is_array($details)) { ksort($details); } //create token $object = new token; $token = $object->create($_SERVER['PHP_SELF']); //show the header $document['title'] = $text['title-dialplan_edit']; require_once "resources/header.php"; //javascript to change select to input and back again ?> \n"; echo "
\n"; echo "
".$text['title-dialplan_edit']."
\n"; echo "
\n"; echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>'dialplans.php'.(is_uuid($app_uuid) ? "?app_uuid=".urlencode($app_uuid) : null)]); if ($action == 'update') { if (permission_exists('dialplan_xml')) { echo button::create(['type'=>'button','label'=>$text['button-xml'],'icon'=>'code','style'=>'margin-left: 15px;','link'=>'dialplan_xml.php?id='.urlencode($dialplan_uuid).(is_uuid($app_uuid) ? "&app_uuid=".urlencode($app_uuid) : null)]); } $button_margin = 'margin-left: 15px;'; if ( permission_exists('dialplan_add') || permission_exists('inbound_route_add') || permission_exists('outbound_route_add') || permission_exists('fifo_add') || permission_exists('time_condition_add') ) { echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'name'=>'btn_copy','style'=>$button_margin,'onclick'=>"modal_open('modal-copy','btn_copy');"]); unset($button_margin); } if ( permission_exists('dialplan_delete') || permission_exists('dialplan_detail_delete') || permission_exists('inbound_route_delete') || permission_exists('outbound_route_delete') || permission_exists('fifo_delete') || permission_exists('time_condition_delete') ) { echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'name'=>'btn_delete','style'=>$button_margin,'onclick'=>"modal_open('modal-delete','btn_delete');"]); unset($button_margin); } } echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','style'=>'margin-left: 15px;']); echo "
\n"; echo "
\n"; echo "
\n"; if ($action == 'update') { if ( permission_exists('dialplan_add') || permission_exists('inbound_route_add') || permission_exists('outbound_route_add') || permission_exists('fifo_add') || permission_exists('time_condition_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('dialplan_delete') || permission_exists('dialplan_detail_delete') || permission_exists('inbound_route_delete') || permission_exists('outbound_route_delete') || permission_exists('fifo_delete') || permission_exists('time_condition_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 $text['description-dialplan-edit']."\n"; echo "

\n"; echo "\n"; echo "\n"; echo ""; echo ""; echo ""; 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-name']."\n"; echo " \n"; echo " \n"; echo "
\n"; echo " ".$text['label-number']."\n"; echo " \n"; echo " \n"; echo "
\n"; echo " ".$text['label-hostname']."\n"; echo " \n"; echo " \n"; echo "
\n"; //echo " ".$text['description-hostname']."\n"; echo "
\n"; echo " ".$text['label-context']."\n"; echo " \n"; echo " \n"; echo "
\n"; echo " ".$text['label-continue']."\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('dialplan_domain')) { 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-order']."\n"; echo " \n"; echo " \n"; echo "
\n"; echo "
\n"; echo " ".$text['label-destination']."\n"; echo " \n"; echo " \n"; echo "
\n"; echo " ".$text['label-domain']."\n"; echo " \n"; echo " \n"; echo "
\n"; //echo " ".$text['description-domain_name']."\n"; echo "
\n"; echo " ".$text['label-enabled']."\n"; echo " \n"; echo " \n"; echo "
\n"; echo " ".$text['label-description']."\n"; echo " \n"; //echo " \n"; echo " \n"; echo "
\n"; echo "
"; echo "

"; //dialplan details if ($action == "update") { ?> \n"; $x = 0; foreach($details as $g => $group) { if ($x != 0) { echo "

"; } echo "\n"; echo "".$text['label-tag']."\n"; echo "".$text['label-type']."\n"; echo "".$text['label-data']."\n"; echo "".$text['label-break']."\n"; echo "".$text['label-inline']."\n"; echo "".$text['label-group']."\n"; echo "".$text['label-order']."\n"; echo "".$text['label-enabled']."\n"; if (permission_exists('dialplan_detail_delete')) { echo "\n"; echo " ".$text['label-delete']."\n"; echo " \n"; echo "\n"; } echo "\n"; if (is_array($group) && @sizeof($group) != 0) { foreach($group as $index => $row) { //get the values from the database and set as variables $dialplan_detail_uuid = $row['dialplan_detail_uuid']; $dialplan_detail_tag = $row['dialplan_detail_tag']; $dialplan_detail_type = $row['dialplan_detail_type']; $dialplan_detail_data = $row['dialplan_detail_data']; $dialplan_detail_break = $row['dialplan_detail_break']; $dialplan_detail_inline = $row['dialplan_detail_inline']; $dialplan_detail_group = $row['dialplan_detail_group']; $dialplan_detail_order = $row['dialplan_detail_order']; $dialplan_detail_enabled = $row['dialplan_detail_enabled']; //default to enabled true if (empty($dialplan_detail_enabled)) { $dialplan_detail_enabled = 'true'; } //no border on last row $no_border = ($index == 999) ? "border: none;" : null; //begin the row echo "\n"; //determine whether to hide the element if (empty($dialplan_detail_tag)) { $element['hidden'] = false; $element['visibility'] = ""; } else { $element['hidden'] = true; $element['visibility'] = "display: none;"; } //add the primary key uuid if (is_uuid($dialplan_detail_uuid)) { echo " \n"; } //tag $selected = "selected=\"selected\" "; echo "\n"; if ($element['hidden']) { echo " \n"; } echo " \n"; echo "\n"; //type echo "\n"; if ($element['hidden']) { echo " \n"; } echo " \n"; //echo " \n"; echo "\n"; //data echo "\n"; if ($element['hidden']) { $dialplan_detail_data_mod = $dialplan_detail_data; if ($dialplan_detail_type == 'bridge') { // split up failover bridges and get variables in statement $failover_bridges = explode('|', $dialplan_detail_data); preg_match('/^\{.*\}/', $failover_bridges[0], $bridge_vars); $bridge_vars = $bridge_vars[0]; // rename parse and rename each gateway foreach ($failover_bridges as $bridge_statement_exploded) { // parse out gateway uuid $bridge_statement = str_replace($bridge_vars, '', explode('/', $bridge_statement_exploded)); array_unshift($bridge_statement, $bridge_vars); if ($bridge_statement[1] == 'sofia' && $bridge_statement[2] == 'gateway' && is_uuid($bridge_statement[3])) { // retrieve gateway name from db $sql = "select gateway from v_gateways where gateway_uuid = :gateway_uuid "; $parameters['gateway_uuid'] = $bridge_statement[3]; $database = new database; $gateways = $database->select($sql, $parameters, 'all'); if (is_array($gateways) && @sizeof($gateways) != 0) { $gateway_name = $gateways[0]['gateway']; $bridge_statement_exploded_mod = str_replace($bridge_statement[3], $gateway_name, $bridge_statement_exploded); } $dialplan_detail_data_mod = str_replace($bridge_statement_exploded, $bridge_statement_exploded_mod, $dialplan_detail_data_mod); unset($sql, $parameters, $bridge_statement, $gateways, $bridge_statement_exploded, $bridge_statement_exploded_mod); } } } echo " \n"; } echo " \n"; echo "\n"; //break echo "\n"; if ($element['hidden']) { echo " \n"; } echo " \n"; echo "\n"; //inline echo "\n"; if ($element['hidden']) { echo " \n"; } echo " \n"; echo "\n"; //group echo "\n"; if ($element['hidden']) { echo " \n"; } echo " \n"; /* echo " \n"; */ echo "\n"; //order echo "\n"; if ($element['hidden']) { echo " \n"; } echo " \n"; /* echo " \n"; */ echo "\n"; //enabled echo "\n"; if ($element['hidden']) { echo " \n"; } echo " \n"; echo "\n"; //tools if (permission_exists('dialplan_detail_delete')) { if (is_uuid($dialplan_detail_uuid)) { echo ""; echo " \n"; echo " \n"; } else { echo "\n"; } echo " \n"; } //end the row echo "\n"; //increment the value $x++; } } $x++; } //end foreach unset($details); echo ""; } //end if results } //end if update echo "

\n"; echo "\n"; if ($action == "update") { echo " \n"; } echo " \n"; echo ""; //show the footer require_once "resources/footer.php"; ?>