request_var('incoming', '') ); $error = validate_data($validate_ary, array( 'incoming' => array( array('string', false, 1, 20)) )); return_error_data($error); } else { // Establish Variables based on PBX or RETAIL if ( isset($user->data['is_pbx']) && $user->data['is_pbx'] ) { $cust_id = $user->data['cust_id']; $acct_id = $user->data['acct_id']; $xml = new SimpleXMLElement(''); $xml->addChild('CUST_ID', $cust_id); $xml->addChild('ACCT_ID', $acct_id); $xml->addChild('FEATURE_TYPE_ID', 13); $xml->addChild('filter', "CUST_ID|=|".$cust_id ."|ACCT_ID|=|".$acct_id //."|FEATURE_TYPE_ID|=|13" ); $status = 'billing3'; $result = $soap->send(GET_FEATURE_OFFERINGS_XML, $xml->asXML(), $status, false, true); $result = $result->xpath('//row'); $name_arr = array(); foreach ($result as $row) { $name_arr[(string)$row->FEATURE_TYPE_ID] = $row->FEATURE_NAME; } $sub_id = request_var('sub_id', ''); if (isset($config['sip_trunk']) && $config['sip_trunk']) { $page = array( 'SIP_TRUNK_CENTREX_USERS' => str_replace('mode=' . $mode, 'mode=centrex_users', $this->u_action), 'NETWORK_FEATURES' => str_replace('mode=' . $mode, 'mode=network_features', $this->u_action).'&main_number='.$main_number.'&sub_id='.$sub_id, ); } else { $page = array( 'CENTREX_USERS' => str_replace('mode=' . $mode, 'mode=centrex_users', $this->u_action), 'NETWORK_FEATURES' => str_replace('mode=' . $mode, 'mode=network_features', $this->u_action).'&main_number='.$main_number.'&sub_id='.$sub_id, ); } // $page = array( // 'CENTREX_USERS' => str_replace('mode=' . $mode, 'mode=centrex_users', $this->u_action), // 'NETWORK_FEATURES' => str_replace('mode=' . $mode, 'mode=network_features', $this->u_action).'&main_number='.$main_number.'&sub_id='.$sub_id, // ); } else { $acct_id = request_var('acct_id', 0); $cust_id = request_var('cust_id', 0); $fee_id = request_var('fee_id', 0); $xml = new SimpleXMLElement(''); $xml->addChild('CUST_ID', $cust_id); $xml->addChild('ACCT_ID', $acct_id); $xml->addChild('FEATURE_TYPE_ID', 13); $xml->addChild('filter', "CUST_ID|=|".$cust_id ."|ACCT_ID|=|".$acct_id //."|FEATURE_TYPE_ID|=|13" ); $status = 'billing3'; $result = $soap->send(GET_FEATURE_OFFERINGS_XML, $xml->asXML(), $status, false, true); $result = $result->xpath('//row'); $name_arr = array(); foreach ($result as $row) { $name_arr[(string)$row->FEATURE_TYPE_ID] = $row->FEATURE_NAME; } if ($acct_id && $cust_id) { $u_params = '&acct_id=' . $acct_id . '&cust_id=' . $cust_id . '&fee_id=' . $fee_id . '&did=' . $main_number. '&sub_id=' . $sub_id; $this->u_action .= $u_params; } $page = array( 'AGENTS' => str_replace(array('i=' . $id, 'mode=' . $mode), array('i=subscriber', 'mode=maintain'), $this->u_action), 'SUBSCRIBERS' => str_replace(array('i=' . $id, 'mode=' . $mode), array('i=subscriber', 'mode=maintain'), $this->u_action) . '&action=details', ); } if (empty($name_arr[13])) { $name_arr[13] = $user->lang['ADVANCED_CALL_FORWARDING']; } // Actually Develop page. try { $ani_list = ($main_number && (!$route_number && !$new_route_id)) ? true : false; if ( !$ani_list ) { // if (isset($config['sip_trunk']) && $config['sip_trunk']) { // $page['SIP_TRUNK_CALL_FORWARDING'] = $this->u_action . '&did=' . $main_number; // } // else { $page['CALL_FORWARDING'] = $this->u_action . '&did=' . $main_number. '&sub_id=' . $sub_id; // } } breadcrumbs($page); if ( !$main_number ) { throw new Exception($user->lang['NO_MAIN_NUMBER_DEFINED']); } $status = 'billing3'; $result = $soap->send(GET_FEATURE_ACF_TZ, array($main_number, $cust_id, $sub_id), $status, false, true); if ( $result->error ) { throw new Exception($result->error->errorMessage); } elseif ($result->data->row->STATUS === 0) // 0 = Unsubscribed { throw new Exception($user->lang['REQ_SUB']); } elseif ($result->data->row->STATUS === 2) // 2 = disabled { throw new Exception($user->lang['REQ_ENBL']); } // Shorten up XML $acf_master = $result->data->row; if ( $ani_list ) { switch ($action) { case 'add': $f_number = request_var('incoming', ''); $pbx_internal = request_var('pbx_internal', false); $f_parm = $this->availableNumbers($acf_master->xpath("//FPARM")); $request = new SimpleXMLElement (''); $data = $request->addChild('data'); $row = $data->addChild('row'); foreach ($acf_master->parm as $parm_item) { $this->simplexml_append($row, $parm_item); } $parm = new SimpleXMLElement(''); $parm->addChild('FPARM', $f_parm); $parm->addChild('FNUMBER', $f_number); $parm->FNUMBER[0]->addAttribute('pbx_internal', $pbx_internal ? 'true' : 'false'); $parm->FNUMBER[0]->addAttribute('cust_id', $cust_id); $parm->addChild('SEND_TO', 1); $parm->addChild('TIME_ROUTE'); $this->simplexml_append($row, $parm); $req_ary = array( $main_number, $acf_master->STATUS, $request->asXML(), $user_id, $cust_id, $sub_id ); $status = 'billing3'; $result = $soap->send(CHANGE_FEATURE_ACF_TZ, $req_ary, $status); confirmation_box($status, $name_arr[13] . ' ' . $user->lang['ADDED_INC_NUM']); break; case 'edit': $f_number = request_var('incoming', ''); $pbx_internal = request_var('pbx_internal', false); $f_parm = request_var('f_parm', -1); if( !$f_number) { confirmation_box(array('status' => '', 'error_message' => $name_arr[13] . ' ' . $user->lang['TOO_SHORT_INCOMING']), 'TOO_SHORT_INCOMING'); } else { if ( $f_parm >= 0 ) { // $request = new SimpleXMLElement (''); // $data = $request->addChild('data'); // $row = $data->addChild('row'); $request = new SimpleXMLElement (''); $data = $request->addChild('data'); $row = $data->addChild('row'); foreach ($acf_master->parm as $parm_item) { if ( $parm_item->FPARM == $f_parm ) { if ( $f_number != '' ) { $parm_item->FNUMBER = $f_number; $parm_item->FNUMBER['pbx_internal'] = $pbx_internal ? 'true' : 'false'; $parm_item->FNUMBER['cust_id'] = $cust_id ; } } $this->simplexml_append($row, $parm_item); } $req_ary = array( $main_number, $acf_master->STATUS, $request->asXML(), $user_id, $cust_id, $sub_id ); $status = 'billing3'; $result = $soap->send(CHANGE_FEATURE_ACF_TZ, $req_ary, $status); confirmation_box($status, $name_arr[13] . ' ' . $user->lang['UPDATED_INC_NUM']); } else { throw new Exception($user->lang['INVALID_PARM']); } } break; case 'delete': $f_parm = request_var('f_parm', -1); if ( $f_parm >= 0 ) { $request = new SimpleXMLElement (''); $data = $request->addChild('data'); $row = $data->addChild('row'); $request = new SimpleXMLElement (''); $data = $request->addChild('data'); $row = $data->addChild('row'); foreach ($acf_master->parm as $parm_item) { if ( $parm_item->FPARM != $f_parm ) { $this->simplexml_append($row, $parm_item); } } $req_ary = array( $main_number, $acf_master->STATUS, $request->asXML(), $user_id, $cust_id, $sub_id ); $status = 'billing3'; $result = $soap->send(CHANGE_FEATURE_ACF_TZ, $req_ary, $status); confirmation_box($status, $name_arr[13] . ' ' . $user->lang['DELETED_INC_NUM']); } else { throw new Exception($user->lang['INVALID_PARM']); } break; } // Refresh acf_master with changes. $status = 'billing3'; $result = $soap->send(GET_FEATURE_ACF_TZ, array($main_number, $cust_id, $sub_id), $status, false, true); $acf_master = $result->data->row; foreach ($acf_master->parm as $parms) { if ( strlen($parms->FNUMBER) > 0 ) { $time_route = $parms->TIME_ROUTE; ((string)$time_route)? '' : $time_route = 'new'; $f_parm = $parms->FPARM; $template->assign_block_vars('blockrow', array( 'INCOMING_NUMBER' => $parms->FNUMBER, 'PBX_INTERNAL' => $parms->FNUMBER[0]['pbx_internal'], 'TIME_ROUTE' => $time_route, 'MAIN_NUMBER' => $main_number, 'U_EDIT_TIME_ROUTE' => $this->u_action . '&sub_id='.$sub_id. '&did='.$main_number.'&route_id='.$time_route.'&f_parm='.$f_parm, 'F_PARM' => $f_parm, 'U_DELETE' => $this->u_action . '&action=delete&f_parm='.$f_parm. '&did='.$main_number. '&sub_id='.$sub_id, )); } } $template->assign_vars(array( 'S_ANI_LIST' => true, 'ACF_NAME' => $name_arr[13], 'U_EDIT_INCOMING' => $this->u_action . '&action=edit&did=' . $main_number, 'U_ADD_INCOMING' => $this->u_action . '&action=add&did=' . $main_number, )); } else { $route_id = request_var('route_id', 0); $f_parm = request_var('f_parm', 0); $submit = isset($_REQUEST['submit']) ? true : false; $priority = request_var('priority', 0); // Process Timed Route List if ($action == 'delete' && $route_id && $priority) { $request = new SimpleXMLElement (''); $data = $request->addChild('data'); $row = $data->addChild('row'); foreach ($acf_master->parm as $parm_item) { if ( $parm_item->FPARM == $f_parm ) { $item_num = 0; foreach ($parm_item->timedRoute as $single_timedRoute) { if ( $single_timedRoute->PRIORITY == $priority && $single_timedRoute->T_ROUTE_ID == $route_id ) { break; } $item_num++; } } if ( isset($item_num) ) { unset($parm_item->timedRoute[$item_num]); unset($item_num); } $this->simplexml_append($row, $parm_item); } $req_ary = array( $main_number, $acf_master->STATUS, $request->asXML(), $user_id, $cust_id, $sub_id ); $status = 'billing3'; $result = $soap->send(CHANGE_FEATURE_ACF_TZ, $req_ary, $status); confirmation_box($status, 'DELETED_TIMED_ROUTE'); $submit = false; } if ($submit) { $always_forward = request_var('always_forward', ''); $no_answer_forward = request_var('no_answer_forward', ''); $busy_forward = request_var('busy_forward', ''); $end_week_day = request_var('end_week_day', 0); $start_week_day = request_var('start_week_day', 0); $end_minute = request_var('end_minute', 0); $start_minute = request_var('start_minute', 0); $end_hour = request_var('end_hour', 0); $start_hour = request_var('start_hour', 0); $end_month = request_var('end_month', 0); $start_month = request_var('start_month', 0); $end_day = request_var('end_day', 0); $start_day = request_var('start_day', 0); $route_id = request_var('t_route_id', $route_id); $msg = $this->validate_timed_route($start_month, $start_day, $start_week_day, $start_hour, $start_minute, $end_month, $end_day, $end_week_day, $end_hour, $end_minute); if (sizeof($msg)) { trigger_error(implode('
', $msg) . back_link($this->u_action . '&did=' . $main_number . '&route_id=' . $route_id . '&f_parm=' . $f_parm)); } if ($route_id && $priority && $action != 'add') { $request = new SimpleXMLElement (''); $data = $request->addChild('data'); $row = $data->addChild('row'); foreach ($acf_master->parm as $parm_item) { if ( $parm_item->FPARM == $f_parm ) { foreach ($parm_item->timedRoute as $single_timedRoute) { if ( $single_timedRoute->PRIORITY == $priority && $single_timedRoute->T_ROUTE_ID == $route_id ) { // Don't want to change these // $single_timedRoute->T_ROUTE_ID; // $single_timedRoute->PRIORITY; // $single_timedRoute->ROUTE_TYPE; // $single_timedRoute->S_DESC; $single_timedRoute->START_MONTH = $start_month; $single_timedRoute->START_DAY = $start_day; $single_timedRoute->START_HOUR = $start_hour; $single_timedRoute->START_MIN = $start_minute; $single_timedRoute->START_WK_DAY = $start_week_day; $single_timedRoute->END_MONTH = $end_month; $single_timedRoute->END_DAY = $end_day; $single_timedRoute->END_HOUR = $end_hour; $single_timedRoute->END_MIN = $end_minute; $single_timedRoute->END_WK_DAY = $end_week_day; $single_timedRoute->TRANSLATED_NUMBER = $always_forward; $single_timedRoute->CFWD_BUSY_NUMBER = $busy_forward; $single_timedRoute->CFWD_NOANS_NUMBER = $no_answer_forward; break; } } } $this->simplexml_append($row, $parm_item); } $req_ary = array( $main_number, $acf_master->STATUS, $request->asXML(), get_soap_user_id(), $cust_id, $sub_id ); $status = 'billing3'; $result = $soap->send(CHANGE_FEATURE_ACF_TZ, $req_ary, $status); confirmation_box($status, 'UPDATED_TIMED_ROUTE'); } else { $request = new SimpleXMLElement (''); $data = $request->addChild('data'); $row = $data->addChild('row'); foreach ($acf_master->parm as $parm_item) { if ( $parm_item->FPARM == $f_parm ) { $t_route_id = null; foreach ($parm_item->timedRoute as $single_timedRoute) { $t_route_id = $single_timedRoute->T_ROUTE_ID; } $timedRoute = new SimpleXMLElement(''); if ( isset($t_route_id) ) { $timedRoute->addChild('T_ROUTE_ID', $t_route_id); unset($t_route_id); } $timedRoute->addChild('PRIORITY', ($priority) ? $priority : ''); $timedRoute->addChild('START_MONTH', $start_month); $timedRoute->addChild('START_DAY', $start_day); $timedRoute->addChild('START_HOUR', $start_hour); $timedRoute->addChild('START_MIN', $start_minute); $timedRoute->addChild('START_WK_DAY', $start_week_day); $timedRoute->addChild('ROUTE_TYPE', 'R'); $timedRoute->addChild('END_MONTH', $end_month); $timedRoute->addChild('END_DAY', $end_day); $timedRoute->addChild('END_HOUR', $end_hour); $timedRoute->addChild('END_MIN', $end_minute); $timedRoute->addChild('END_WK_DAY', $end_week_day); $timedRoute->addChild('S_DESC', $main_number); $timedRoute->addChild('TRANSLATED_NUMBER', $always_forward); $timedRoute->addChild('CFWD_BUSY_NUMBER', $busy_forward); $timedRoute->addChild('CFWD_NOANS_NUMBER', $no_answer_forward); $this->simplexml_append($parm_item, $timedRoute); } $this->simplexml_append($row, $parm_item); } $req_ary = array( $main_number, $acf_master->STATUS, $request->asXML(), get_soap_user_id(), $cust_id, $sub_id ); $status = 'billing3'; $result = $soap->send(CHANGE_FEATURE_ACF_TZ, $req_ary, $status); confirmation_box($status, 'ADDED_TIMED_ROUTE'); } } // Refresh acf_master with changes. $status = 'billing3'; $result = $soap->send(GET_FEATURE_ACF_TZ, array($main_number, $cust_id, $sub_id), $status, false, true); $acf_master = $result->data->row; $inc_num = $acf_master->xpath("//parm[FPARM = \"$f_parm\"]/FNUMBER"); $template->assign_var('INC_NUM', $inc_num[0]); $timed_routes = $acf_master->xpath("//parm[FPARM = \"$f_parm\"]/timedRoute"); $priority_ary = array(); foreach ($timed_routes as $key => $row) { $priority_ary[$key] = $row->PRIORITY; } foreach ($timed_routes as $row) { $priority_options = $this->priority_options($priority_ary, $row->PRIORITY); $template->assign_block_vars('blockrow', array( 'T_ROUTE_ID' => $row->T_ROUTE_ID, 'PRIORITY' => $row->PRIORITY, 'PRIORITY_OPTIONS' => $priority_options, 'DATE_RANGE_START' => $this->display_date_range((string)$row->START_MONTH, (string)$row->START_DAY, (string)$row->START_HOUR, (string)$row->START_MIN, (string)$row->START_WK_DAY), 'DATE_RANGE_END' => $this->display_date_range((string)$row->END_MONTH, (string)$row->END_DAY, (string)$row->END_HOUR, (string)$row->END_MIN, (string)$row->END_WK_DAY), 'START_MONTH' => ((int)$row->START_MONTH) ? $user->lang['datetime'][date('F', mktime(0, 0, 0, (string)$row->START_MONTH))] : $user->lang['EVERY_MONTH'], 'START_DAY' => ((int)$row->START_DAY) ? date('jS', mktime(0, 0, 0, 0, (string)$row->START_DAY)) : $user->lang['EVERY_DAY'], 'START_TIME' => ((int)$row->START_HOUR) ? sprintf("%02d", (string)$row->START_HOUR-1).':'.sprintf("%02d",$row->START_MIN-1) : $user->lang['ALL_TIME'], 'START_DOW' => ((int)$row->START_WK_DAY) ? $user->lang['dow'][(int)$row->START_WK_DAY] : $user->lang['ANY_DAY'], 'END_MONTH' => ((int)$row->END_MONTH) ? $user->lang['datetime'][date('F', mktime(0, 0, 0, (int)$row->END_MONTH))] : $user->lang['EVERY_MONTH'], 'END_DAY' => ((int)$row->END_DAY) ? date('jS', mktime(0, 0, 0, 0, (int)$row->END_DAY)) : $user->lang['EVERY_DAY'], 'END_TIME' => ((int)$row->END_HOUR) ? sprintf("%02d", (int)$row->END_HOUR-1).':'.sprintf("%02d",(int)$row->END_MIN-1) : $user->lang['ALL_TIME'], 'END_DOW' => ((int)$row->END_WK_DAY) ? $user->lang['dow'][(int)$row->END_WK_DAY] : $user->lang['ANY_DAY'], 'START_MONTH_OPTIONS' => $this->date_loop(1, 12, $row->START_MONTH), 'ROUTE_LIST_ID' => (string)$row->ROUTE_LIST_ID, 'START_DAY_OPTIONS' => $this->date_loop(1, 31, (int)$row->START_DAY), 'ROUTE_TYPE' => $row['route_type'], 'START_HOUR_OPTIONS' => $this->date_loop(1, 24, (int)$row->START_HOUR, true), 'START_MINUTE_OPTIONS' => $this->date_loop(1, 60, (int)$row->START_MIN, true, 1), 'START_DAY_OF_WEEK_OPTIONS' => $this->day_of_week((int)$row->START_WK_DAY), 'END_MONTH_OPTIONS' => $this->date_loop(1, 12, (int)$row->END_MONTH), 'END_DAY_OPTIONS' => $this->date_loop(1, 31, (int)$row->END_DAY), 'END_HOUR_OPTIONS' => $this->date_loop(1, 24, (int)$row->END_HOUR, true), 'END_MINUTE_OPTIONS' => $this->date_loop(1, 61, (int)$row->END_MIN, true, 1), 'END_DAY_OF_WEEK_OPTIONS' => $this->day_of_week((int)$row->END_WK_DAY), 'ALWAYS_FORWARD' => $row->TRANSLATED_NUMBER, 'FEATURE' => $row->FEATURE, 'CFWD_BUSY_NUMBER' => $row->CFWD_BUSY_NUMBER, 'CFWD_NOANS_NUMBER' => $row->CFWD_NOANS_NUMBER, 'U_DELETE' => $this->u_action . '&action=delete&route_id=' . $row->T_ROUTE_ID . '&f_parm=' . $f_parm . '&priority=' . $row->PRIORITY. '&did='.$main_number. '&sub_id='.$sub_id , )); } $template->assign_vars(array( 'START_MONTH_OPTIONS' => $this->date_loop(1, 12), 'START_DAY_OPTIONS' => $this->date_loop(1, 31), 'START_HOUR_OPTIONS' => $this->date_loop(1, 24, 0, true), 'START_MINUTE_OPTIONS' => $this->date_loop(1, 60, 0, true, 5), 'START_DAY_OF_WEEK_OPTIONS' => $this->day_of_week(), 'END_MONTH_OPTIONS' => $this->date_loop(1, 12), 'END_DAY_OPTIONS' => $this->date_loop(1, 31), 'END_HOUR_OPTIONS' => $this->date_loop(1, 24, 0, true), 'END_MINUTE_OPTIONS' => $this->date_loop(1, 61, 0, true, 5), 'END_DAY_OF_WEEK_OPTIONS' => $this->day_of_week(), 'PRIORITY_OPTIONS' => $this->priority_options($priority_ary), 'U_ADD_TIMED_ROUTE' => $this->u_action . '&f_parm=' . $f_parm . '&route_id=' . (($route_id) ? $route_id : 'new') . '&action=add', )); } $s_hidden_fields = build_hidden_fields(array( 'did' => $main_number, 'sub_id' => $sub_id, )); $template->assign_vars(array( 'S_HIDDEN_FIELDS' => $s_hidden_fields, 'MAIN_NUMBER' => $main_number, 'U_READ_ONLY' => $read_only, 'IS_PBX' => isset($user->data['is_pbx'])? $user->data['is_pbx']: false, 'U_ACTION' => $this->u_action, )); } catch (Exception $e) { confirmation_box(array('status' => '', 'error_message' => $e->getMessage()), $e->getMessage()); } } // if we are in the ani list (subfeatureparm) we perform the following actions // if ($ani_list) // { // $f_parm = request_var('f_parm', 0); // $f_number = request_var('incoming', ''); // // $status = 'entice'; // $result = $soap->send(GET_SUBSCRIBER_FEATURE_PARMS, array($main_number, CALL_FORWARD_FEATURE_CODE), $status, false, false, true); // // $f_action = 1; // // switch ($action) // { // case 'add': // $f_parm_ary = array(); // foreach ($result as $key => $row) // { // $f_parm_ary[$key] = $row['f_parm']; // } // // $f_parm = (sizeof($f_parm_ary)) ? max($f_parm_ary) + 1 : 1; // // $sub_feature_parms = array(); // $sub_feature_parms[] = new subfeatureparm($main_number, CALL_FORWARD_FEATURE_CODE, $f_parm, $f_number, $f_action); // $status = 'entice'; // $soap->send(ADD_SUBSCRIBER_FEATURE_PARMS, $sub_feature_parms, $status, false, false, true, false); // // if ($status['status'] == STATUS_SUCCESSFUL) // { // $result[] = array( // 'f_number' => $f_number, // 'f_parm' => $f_parm, // 'time_route' => '', // 'main_number' => $main_number, // 'f_action' => $f_action, // ); // } // break; // // case 'edit': // $xml_ary = array( // 'UPDATE' => UPDATE_SUBSCRIBER_FEATURE_PARM, // 'SET' => array( // 'main_number' => $main_number, // 'feature' => CALL_FORWARD_FEATURE_CODE, // 'f_parm' => $f_parm, // 'f_number' => $f_number, // 'action' => $f_action, // ), // ); // $status = 'entice'; // $soap->soap_update($xml_ary, $status, true, false); // // if ($status['status'] == STATUS_SUCCESSFUL) // { // foreach ($result as $key => $row) // { // if ($row['f_parm'] == $f_parm) // { // $result[$key]['f_number'] = $f_number; // break; // } // } // } // break; // // case 'delete': // $status = 'entice'; // $soap->send(DELETE_SUBSCRIBER_FEATURE_PARM, array($main_number, CALL_FORWARD_FEATURE_CODE, $f_parm), $status, false, false, true); // // if ($status['status'] == STATUS_SUCCESSFUL) // { // $status = 'entice'; // $routes = $soap->send(GET_TIMED_ROUTES, array($route_number), $status, false, false, true); // foreach ($routes as $row) // { // $status = 'entice'; // $soap->send(DELETE_TIMED_ROUTE, array($row['t_route_id'], $row['priority']), $status, false, false, true); // } // // foreach ($result as $key => $row) // { // if ($row['f_parm'] == $f_parm) // { // unset($result[$key]); // break; // } // } // } // break; // } // foreach ($result as $row) // { // $row['time_route'] = ($row['time_route']) ? $row['time_route'] : 'new'; // // $template->assign_block_vars('blockrow', array( // 'INCOMING_NUMBER' => $row['f_number'], // 'TIME_ROUTE' => $row['time_route'], // 'MAIN_NUMBER' => $row['main_number'], // 'U_EDIT_TIME_ROUTE' => $this->u_action . '&did=' . $main_number . '&route_id=' . $row['time_route'] . '&f_parm=' . $row['f_parm'], // 'F_PARM' => $row['f_parm'], // 'U_DELETE' => $this->u_action . '&action=delete&f_parm=' . $row['f_parm'] . '&did=' . $main_number, // )); // } // $template->assign_vars(array( // 'S_ANI_LIST' => true, // 'U_EDIT_INCOMING' => $this->u_action . '&action=edit&did=' . $main_number, // 'U_ADD_INCOMING' => $this->u_action . '&action=add&did=' . $main_number, // )); // } // else // { // $route_id = request_var('route_id', 0); // $priority = request_var('priority', 0); // $f_parm = request_var('f_parm', 0); // $f_action = 1; // // $new_route_id = (isset($_REQUEST['route_id']) == 'new') ? true : false; // // if ($action == 'delete' && $route_id && $priority) // { // $status = 'entice'; // $soap->send(DELETE_TIMED_ROUTE, array($route_id, $priority), $status, false, false, true); // confirmation_box($status, 'TIMED_ROUTE_DELETED', array($route_id, $priority)); // } // // if ($submit) // { // $always_forward = request_var('always_forward', ''); // // $no_answer_forward = request_var('no_answer_forward', ''); // $busy_forward = request_var('busy_forward', ''); // $end_week_day = request_var('end_week_day', 0); // $start_week_day = request_var('start_week_day', 0); // $end_minute = request_var('end_minute', 0); // $start_minute = request_var('start_minute', 0); // $end_hour = request_var('end_hour', 0); // $start_hour = request_var('start_hour', 0); // $end_month = request_var('end_month', 0); // $start_month = request_var('start_month', 0); // $end_day = request_var('end_day', 0); // $start_day = request_var('start_day', 0); // $route_id = request_var('t_route_id', $route_id); // // $msg = $this->validate_timed_route($start_month, $start_day, $start_week_day, $start_hour, $start_minute, $end_month, $end_day, $end_week_day, $end_hour, $end_minute); // if (sizeof($msg)) // { // trigger_error(implode('
', $msg) . back_link($this->u_action . '&did=' . $main_number . '&route_id=' . $route_id . '&f_parm=' . $f_parm)); // } // // if ($route_id && $priority && $action != 'add') // { // $xml_ary = array( // 'UPDATE' => UPDATE_TIMED_ROUTE, // 'SET' => array( // 't_route_id' => $route_id, // 'priority' => $priority, // 'translated_number' => $always_forward, // 'start_day' => $start_day, // 'start_month' => $start_month, // 'start_hour' => $start_hour, // 'start_min' => $start_minute, // 'start_wk_day' => $start_week_day, // 'end_day' => $end_day, // 'end_month' => $end_month, // 'end_hour' => $end_hour, // 'end_min' => $end_minute, // 'end_wk_day' => $end_week_day, // 'cfwd_busy_number' => $busy_forward, // 'cfwd_noans_number' => $no_answer_forward, // ), // ); // // $status = 'entice'; // $soap->soap_update($xml_ary, $status, true); // } // else // { // $xml_ary = array( // 'translated_number' => $always_forward, // 'start_day' => $start_day, // 'start_month' => $start_month, // 'start_hour' => $start_hour, // 'start_min' => $start_minute, // 'start_wk_day' => $start_week_day, // 'end_day' => $end_day, // 'end_month' => $end_month, // 'end_hour' => $end_hour, // 'end_min' => $end_minute, // 'end_wk_day' => $end_week_day, // 'cfwd_busy_number' => $busy_forward, // 'cfwd_noans_number' => $no_answer_forward, // 'priority' => ($priority) ? $priority : '', // 'route_type' => 'R', // 's_desc' => $main_number, // 't_route_id' => ($route_number) ? $route_number : '', // ); // // $status = 'entice'; // $result = $soap->soap_add(ADD_TIMED_ROUTE, $xml_ary, $status); // // if (!$route_number) // { // $xml_ary = array( // 'UPDATE' => UPDATE_SUBSCRIBER_FEATURE_PARM, // 'SET' => array( // 'main_number' => $main_number, // 'feature' => CALL_FORWARD_FEATURE_CODE, // 'f_parm' => $f_parm, // 'time_route' => $result, // 'action' => $f_action, // ), // ); // $status = 'entice'; // $soap->soap_update($xml_ary, $status, true, false); // // $route_id = $route_number = $result; // } // } // } // // if ($route_number) // { // $status = 'entice'; // $result = $soap->send(GET_TIMED_ROUTES, array($route_number), $status, false, false, true); // } // else // { // $result = array(); // } // // $priority_ary = array(); // foreach ($result as $key => $row) // { // $priority_ary[$key] = $row['priority']; // } // // if ($route_number) // { // array_multisort($priority_ary, SORT_ASC, $result); // } // // foreach ($result as $row) // { // $priority_options = $this->priority_options($priority_ary, $row['priority']); // // $template->assign_block_vars('blockrow', array( // 'T_ROUTE_ID' => $row['t_route_id'], // 'PRIORITY' => $row['priority'], // 'PRIORITY_OPTIONS' => $priority_options, // 'DATE_RANGE_START' => $this->display_date_range($row['start_month'], $row['start_day'], $row['start_hour'], $row['start_min'], $row['start_wk_day']), // 'DATE_RANGE_END' => $this->display_date_range($row['end_month'], $row['end_day'], $row['end_hour'], $row['end_min'], $row['end_wk_day']), // // 'START_MONTH' => ($row['start_month']) ? $user->lang['datetime'][date('F', mktime(0, 0, 0, $row['start_month']))] : $user->lang['EVERY_MONTH'], // 'START_DAY' => ($row['start_day']) ? date('jS', mktime(0, 0, 0, 0, $row['start_day'])) : $user->lang['EVERY_DAY'], // 'START_TIME' => ($row['start_hour']) ? sprintf("%02d",$row['start_hour']-1).':'.sprintf("%02d",$row['start_min']-1) : $user->lang['ALL_TIME'], // 'START_DOW' => ($row['start_wk_day']) ? $user->lang['dow'][$row['start_wk_day']] : $user->lang['ANY_DAY'], // // 'END_MONTH' => ($row['end_month']) ? $user->lang['datetime'][date('F', mktime(0, 0, 0, $row['end_month']))] : $user->lang['EVERY_MONTH'], // 'END_DAY' => ($row['end_day']) ? date('jS', mktime(0, 0, 0, 0, $row['end_day'])) : $user->lang['EVERY_DAY'], // 'END_TIME' => ($row['end_hour']) ? sprintf("%02d",$row['end_hour']-1).':'.sprintf("%02d",$row['end_min']-1) : $user->lang['ALL_TIME'], // 'END_DOW' => ($row['end_wk_day']) ? $user->lang['dow'][$row['end_wk_day']] : $user->lang['ANY_DAY'], // // 'START_MONTH_OPTIONS' => $this->date_loop(1, 12, $row['start_month']), // 'ROUTE_LIST_ID' => $row['route_list_id'], // 'START_DAY_OPTIONS' => $this->date_loop(1, 31, $row['start_day']), // 'ROUTE_TYPE' => $row['route_type'], // 'START_HOUR_OPTIONS' => $this->date_loop(1, 24, $row['start_hour'], true), // 'START_MINUTE_OPTIONS' => $this->date_loop(1, 60, $row['start_min'], true), // 'START_DAY_OF_WEEK_OPTIONS' => $this->day_of_week($row['start_wk_day']), // 'END_MONTH_OPTIONS' => $this->date_loop(1, 12, $row['end_month']), // 'END_DAY_OPTIONS' => $this->date_loop(1, 31, $row['end_day']), // 'END_HOUR_OPTIONS' => $this->date_loop(1, 24, $row['end_hour'], true), // 'END_MINUTE_OPTIONS' => $this->date_loop(1, 60, $row['end_min'], true), // 'END_DAY_OF_WEEK_OPTIONS' => $this->day_of_week($row['end_wk_day']), // 'ALWAYS_FORWARD' => $row['translated_number'], // 'FEATURE' => $row['feature'], // 'CFWD_BUSY_NUMBER' => $row['cfwd_busy_number'], // 'CFWD_NOANS_NUMBER' => $row['cfwd_noans_number'], // 'U_DELETE' => $this->u_action . '&action=delete&route_id=' . $row['t_route_id'] . '&priority=' . $row['priority'], // )); // } // // $template->assign_vars(array( // 'U_READ_ONLY' => $read_only, // 'START_MONTH_OPTIONS' => $this->date_loop(1, 12), // 'START_DAY_OPTIONS' => $this->date_loop(1, 31), // 'START_HOUR_OPTIONS' => $this->date_loop(1, 24, 0, true), // 'START_MINUTE_OPTIONS' => $this->date_loop(1, 60, 0, true), // 'START_DAY_OF_WEEK_OPTIONS' => $this->day_of_week(), // 'END_MONTH_OPTIONS' => $this->date_loop(1, 12), // 'END_DAY_OPTIONS' => $this->date_loop(1, 31), // 'END_HOUR_OPTIONS' => $this->date_loop(1, 24, 0, true), // 'END_MINUTE_OPTIONS' => $this->date_loop(1, 60, 0, true), // 'END_DAY_OF_WEEK_OPTIONS' => $this->day_of_week(), // 'PRIORITY_OPTIONS' => $this->priority_options($priority_ary), // 'U_ADD_TIMED_ROUTE' => $this->u_action . '&did=' . $main_number . '&f_parm=' . $f_parm . '&route_id=' . (($route_id) ? $route_id : 'new') . '&action=add', // )); // } // if (isset($foo)) // { // $xml_ary = array( // $main_number, // $user->data['user_id'], // ); // // $status = 'entice'; // $result = $soap->send(GET_SUBSCRIBER_FEATURE, $xml_ary, $status); // // if (sizeof($result)) // { // $sfeature = new subfeature(); // // foreach ($result as $key => $row) // { // if ($key == 'main_number') // { // $key = 'mainNumber'; // } // $sfeature->$key = $row; // } // } // // //delete records if they exist, since there is no update call // $status = 'entice'; // $result = $soap->send(DELETE_SUBSCRIBER_FEATURE, $main_number, $status, false, false, true); // $sfeature->status8 = 1; // $sfeature->feature8 = CALL_FORWARD_FEATURE_CODE; // $status = 'entice'; // $xml = $soap->send(ADD_SUBSCRIBER_FEATURE, $sfeature, $status, false, false, true); // } } /** * day of week drop down options * * @param string $week_day * @return string of options */ function day_of_week($week_day = '') { global $user; $day_of_week_ary = array( $user->lang['ANY_DAY'], $user->lang['datetime']['Sunday'], $user->lang['datetime']['Monday'], $user->lang['datetime']['Tuesday'], $user->lang['datetime']['Wednesday'], $user->lang['datetime']['Thursday'], $user->lang['datetime']['Friday'], $user->lang['datetime']['Saturday'], ); $day_of_week_options = ''; foreach ($day_of_week_ary as $key => $day) { $selected = ($key == $week_day) ? ' selected="selected"' : ''; $day_of_week_options .= '\n"; } return $day_of_week_options; } /** * Display a date drop down menu * * @param int $start * @param int $end * @param int $selection * @return string of options */ function date_loop($start, $end, $selection = 0, $offset_display_by_one = false, $increment_by = 1) { $date_options = '' . "\n"; for ($i = $start; $i < $end + 1; $i+=$increment_by) { $selected = ($selection == $i) ? ' selected="selected"' : ''; $display_value = $offset_display_by_one ? sprintf("%02d", $i-1) : $i; $date_options .= '\n"; } return $date_options; } /** * Validate the start and end of a date entry, might become obsolete. * * @param unknown_type $start * @param unknown_type $end */ function validate_start_end(&$start, &$end) { if ($start && !$end) { $end = $start + 1; } else if ($end && !$start) { $start = $end - 1; } } /** * Display the date ranges in table view. * * @param int $s_month * @param int $s_day * @param int $s_hour * @param int $s_minute * @param int $week_day * @return string of date range */ function display_date_range($s_month, $s_day, $s_hour, $s_minute, $week_day) { global $user; $r_day = ($s_day) ? $s_day : 1; $r_month = ($s_month) ? $s_month : 1; $r_hour = ($s_hour) ? $s_hour - 1 : 1; $r_minute = ($s_minute) ? $s_minute - 1 : 1; list($day, $suffix, $month, $hour, $minute) = explode(',', date('d,S,M,H,i', mktime($r_hour, $r_minute, 0, $r_month, $r_day, date('Y')))); $day = ($s_day) ? $day . $suffix : (($week_day == 0) ? $user->lang['EVERY_DAY'] : ''); $month = ($s_month) ? $month : $user->lang['EVERY_MONTH']; $hour = ($s_hour) ? $hour : $user->lang['EVERY_HOUR']; $minute = ($s_minute) ? $minute : $user->lang['EVERY_MINUTE']; $week_day = ($week_day) ? $week_day : ''; return $day . ', ' . $month . ', ' . $hour . ':' . $minute . ', ' . $week_day; } /** * Function to display the timed route priorities while limiting the list only acceptable priorities. * * @param array $priority_ary * @param int $selection * @return string option drop down menu */ function priority_options($priority_ary, $selection = 0) { $priority_options = ''; for ($i = 1; $i < 11; $i++) { if (in_array($i, $priority_ary)) { continue; } $selected = ($i == $selection) ? ' selected="selected"' : ''; $priority_options .= '\n"; } return $priority_options; } /** * Validate a Timed Route Submission * * @param int $start_month * @param int $start_day * @param int $start_dow * @param int $start_hour * @param int $start_min * @param int $end_month * @param int $end_day * @param int $end_dow * @param int $end_hour * @param int $end_min * @return array of errors */ function validate_timed_route(&$start_month, $start_day, $start_dow, $start_hour, &$start_min, &$end_month, &$end_day, &$end_dow, &$end_hour, &$end_min) { global $user; // trigger_error(print_r($_REQUEST, true)); $error = array(); $now = array(); // Validate Month if ($start_month === 0) { // No Start Month specified, all months is set. $end_month = 0; } else if ($start_month > 0 && $end_month <= 12 && $end_month >= $start_month) { // if start month greater than 0 and end month less than or equal to 12 // and end month is greater than or equal to the start month: Month is valid. } else { // All other month entries are not valid. $now = getdate(); $lang_start_month = $user->lang['datetime'][date('F', mktime(0, 0, 0, $start_month, 1, $now['year']))]; $lang_end_month = $user->lang['datetime'][date('F', mktime(0, 0, 0, $end_month, 1, $now['year']))]; $error[] = sprintf($user->lang['INVALID_MONTH_RANGE'], $lang_start_month, $lang_end_month); } // Validate Day if ($start_day === 0) { // No Start Day specified, All days are set. $end_day = 0; } // Should be valid to have days spanning months, say first 7 days of each month // else if ($start_day && $start_month != $end_month) // { // // if a start day is specified and the start and end month are not the same, fail. // $now = (sizeof($now)) ? $now : getdate(); // $lang_start_month = $user->lang['datetime'][date('F', mktime(0, 0, 0, $start_month, 1, $now['year']))]; // $lang_end_month = $user->lang['datetime'][date('F', mktime(0, 0, 0, $end_month, 1, $now['year']))]; // // $error[] = sprintf($user->lang['INVALID_MONTH_DAY_RANGE'], $lang_start_month, $start_day, $lang_end_month, $end_day); // } else if ($start_day > 0 && $end_day <= 31 && $end_day >= $start_day) { // if start day is greater than 0 and end day is less than or equal to 31 // and the end day is greater or equal to the start day: it is a valid day. } else { // All other days are not valid. $error[] = sprintf($user->lang['INVALID_DAY_RANGE'], $start_day, $end_day); } // Validate Day of Week if ($start_dow === 0) { // No start day of week specified, all week is set. $end_dow = 0; } else if ($start_dow > 0 && $start_dow <= 7 && $end_dow > 0 && $end_dow <= 7) { // if start day of week is greater than 0 and start day of week is less than or equal to 7 // and end day of week is greater than 0 and end day of week is less than or equal to 7 } else { // all other day of week entries are not valid. $error[] = sprintf($user->lang['INVALID_DAY_OF_WEEK_RANGE'], $start_dow, $end_dow); } // Validate Hour/Minute $starting_min = $start_hour * 30 + $start_min / 2; $ending_min = $end_hour * 30 + $end_min / 2; if ($start_hour === 0) { // All day. $start_min = 0; $end_hour = 0; $end_min = 0; } else if ($start_hour > 0 && $end_hour > 0 && $start_min > 0 && $end_min > 0 && $starting_min < (25 * 30) && $ending_min >= $starting_min) { // its valid } else { $error[] = sprintf($user->lang['INVALID_HOUR_MINUTE_RANGE'], $start_hour, $start_min, $end_hour, $end_min); } return $error; } function availableNumbers($array, $allAvailable = false){ sort($array); if( is_array($array) && sizeof($array) ) { $output=array_values( array_diff(range(1, $array[sizeof($array)-1]+1), $array) ); return ($allAvailable)?$output:$output[0]; } else if( is_array($array) && !sizeof($array) ) { return ($allAvailable)?array(1):1; } return false; } function simplexml_append(SimpleXMLElement $parent, SimpleXMLElement $new_child) { $node1 = dom_import_simplexml($parent); $dom_sxe = dom_import_simplexml($new_child); $node2 = $node1->ownerDocument->importNode($dom_sxe, true); $node1->appendChild($node2); } } ?>