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);
}
}
?>