" . _("Follow Me") . "

"; } return $ret; } /* * Acts on the user settings * * @param $args * Common arguments * @param $a * action */ function action($args) { global $STANDALONE; global $ARI_ADMIN_USERNAME; global $SETTINGS_ALLOW_VMX_SETTINGS; // args $m = getArgument($args,'m'); $a = getArgument($args,'a'); $lang_code = getArgument($args,'lang_code'); $follow_me_prering_time = getArgument($args,'follow_me_prering_time'); $follow_me_listring_time = getArgument($args,'follow_me_listring_time'); $follow_me_list = getArgument($args,'follow_me_list'); $follow_me_confirm = getArgument($args,'follow_me_confirm'); $follow_me_ddial = getArgument($args,'follow_me_ddial'); $follow_me_disabled = getArgument($args,'follow_me_disabled'); $language = new Language(); // Lets see if we can make heads or tails of this code?!? // The action is 'update if ($a=='update') { // Get the extension and make sure we are not in // admin mode $exten = $_SESSION['ari_user']['extension']; if ($exten!=$ARI_ADMIN_USERNAME) { // Make sure Follow-Me setup has not been deleted for this user since the last refresh $follow_me_disabled_delayed = $_COOKIE['ari_follow_me_disabled']; if (! $_COOKIE['ari_follow_me_disabled']) { $follow_me_disabled = ($this->getFollowMeListRingTime($exten) > 0)?0:1; if ($follow_me_disabled) { setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60); $follow_me_disabled_delayed = $follow_me_disabled; $_SESSION['ari_error'] = _("Your Follow-Me has been disabled, REFRESH your browser to remove this message") . "
" . sprintf(_("Check with your Telephone System Administrator if you think there is a problem")); } } if (! $follow_me_disabled_delayed) { // assume no errors, don't update SQL if errors occured $follow_me_update_succeeded=1; // update follow me pre-ring time if (!$STANDALONE['use']) { $stripped_follow_me_prering_time = preg_replace('/-|\s/','',$follow_me_prering_time); if (!is_numeric($stripped_follow_me_prering_time)) { $_SESSION['ari_error'] = _("Follow-Me pre-ring time not changed") . "
" . sprintf(_("Number %s must be an interger number of seconds"),$follow_me_prering_time); $follow_me_update_succeeded=0; } else { // set database $this->setFollowMePreRingTime($exten,$stripped_follow_me_prering_time); // store cookie $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_prering_time']); if ($follow_me_prering_time && $stripped!=$stripped_follow_me_prering_time) { setcookie("ari_follow_me_prering_time", $follow_me_prering_time, time()+365*24*60*60); } } } // update follow me list ring time if (!$STANDALONE['use']) { $stripped_follow_me_listring_time = preg_replace('/-|\s/','',$follow_me_listring_time); if (!is_numeric($stripped_follow_me_listring_time)) { $_SESSION['ari_error'] = _("Follow-Me list ring time not changed") . "
" . sprintf(_("Number %s must be an interger number of seconds"),$follow_me_listring_time); $follow_me_update_succeeded=0; } else { // set database $this->setFollowMeListRingTime($exten,$stripped_follow_me_listring_time); // store cookie $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_listring_time']); if ($follow_me_listring_time && $stripped!=$stripped_follow_me_listring_time) { setcookie("ari_follow_me_listring_time", $follow_me_listring_time, time()+365*24*60*60); } } } // update follow me list if (!$STANDALONE['use']) { $grplist = explode("\n", $follow_me_list); if (!$grplist) { $grplist = null; } foreach (array_keys($grplist) as $key) { //trim it $grplist[$key] = trim($grplist[$key]); // Lookup the extension and append hash if not a user, and remove invalid chars $grplist[$key] = $this->lookupSetExtensionFormat($grplist[$key]); // remove blanks if ($grplist[$key] == "") unset($grplist[$key]); } // check for duplicates, and re-sequence $grplist = array_values(array_unique($grplist)); $stripped_follow_me_list = implode("-",$grplist); if ($stripped_follow_me_list == "") { $_SESSION['ari_error'] = _("Follow-Me list must contain at least one valid number") . "
" . sprintf(_("The following: %s is not valid"),$follow_me_list); $follow_me_update_succeeded=0; } else { // set database $this->setFollowMeList($exten,$stripped_follow_me_list); // store cookie $stripped = preg_replace('/|\(|\)|\s/','',$_COOKIE['ari_follow_me_list']); if ($follow_me_list && $stripped!=$stripped_follow_me_list) { setcookie("ari_follow_me_list", $follow_me_list, time()+365*24*60*60); } } } // update follow me confirm if (!$STANDALONE['use']) { // set database $this->setFollowMeConfirm($exten,$follow_me_confirm); $this->setFollowMeDDial($exten,$follow_me_ddial); // store cookie setcookie("ari_follow_me_confirm", $follow_me_confirm, time()+365*24*60*60); setcookie("ari_follow_me_ddial", $follow_me_ddial, time()+365*24*60*60); } //If no errors than update the SQL table to keep in sync if ($follow_me_update_succeeded) { $this->setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm); } } //if !follow_me_disabled } } // redirect to see updated page $ret .= " "; return $ret; } /* * Displays stats page * * @param $args * Common arguments */ function display($args) { global $STANDALONE; global $ARI_ADMIN_USERNAME; global $SETTINGS_PRERING_LOW; global $SETTINGS_PRERING_HIGH; global $SETTINGS_LISTRING_LOW; global $SETTINGS_LISTRING_HIGH; global $SETTINGS_FOLLOW_ME_LIST_MAX; global $loaded_modules; // args $m = getArgument($args,'m'); $q = getArgument($args,'q'); $start = getArgument($args,'start'); $span = getArgument($args,'span'); $displayname = $_SESSION['ari_user']['displayname']; $exten = $_SESSION['ari_user']['extension']; $language = new Language(); $display = new DisplaySearch(); // build controls if ($exten!=$ARI_ADMIN_USERNAME) { // call forward settings if (!$STANDALONE['use']) { $follow_me_prering_time = $this->getFollowMePreRingTime($exten); $follow_me_listring_time = $this->getFollowMeListRingTime($exten); $follow_me_list = explode("-", $this->getFollowMeList($exten) ); $follow_me_confirm = $this->getFollowMeConfirm($exten); $follow_me_ddial = $this->getFollowMeDDial($exten); $FOLLOW_ME_LIST_MAX = (count($follow_me_list) > $SETTINGS_FOLLOW_ME_LIST_MAX) ? count($follow_me_list):$SETTINGS_FOLLOW_ME_LIST_MAX; //TODO: Set this better than this? $follow_me_disabled = ($follow_me_listring_time > 0)?0:1; setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60); $followme_text.= ""; if (!$follow_me_disabled) { // $followme_text .= ""; $followme_text .= ""; // Blank Line $followme_text .= ""; $followme_text .= ""; $followme_text .= ""; // Blank Line $followme_text .= ""; $followme_text .= ""; $followme_text .= ""; // Blank Line $followme_text .= ""; $followme_text .= ""; $followme_text .= ""; $followme_text .= ""; // Blank Line $followme_text .= ""; $followme_text .= ""; // Blank Line $followme_text .= "


" . _("Follow Me") . "

 
" . _("Enable") . ""; $followme_text .= _( "Dial-by-name Directory, IVR, and internal calls will ring the numbers in the FollowMe List. Any FreePBX routes that directly reference a FollowMe are unaffected by this enable/disable setting."); $followme_text .= "
 
" . _("Follow Me List:"); $followme_text .= "" . sprintf(_("Extensions and outside numbers to ring next.")) ."

"; $followme_text .= sprintf(_("Include %s to keep it ringing."),"".$exten."") . "
"; $followme_text .= "
 
"; $followme_text .= sprintf(_("Ring %s First For:"), $exten); $followme_text .= "" . sprintf( _("Time to ring extension %s before ringing the %s Follow Me List %s"), "".$exten."","",""); $followme_text .= "
"; $followme_text .= ""; $followme_text .= "" . _("seconds") . ""; $followme_text .= "
" . _("Ring Followme List for:") . "" . _("Time to ring the Follow Me List.") . "
"; $followme_text .= ""; $followme_text .= "" . _("seconds") . "
 
" . _("Use Confirmation:") . "". _("Outside lines that are part of the Follow Me List will be called and offered a menu:

\"You have an incoming call. Press 1 to accept or 2 to decline.\"

This keeps calls from ending up in external voicemail. Make sure that the List Ring Time is long enough to allow for you to hear and react to this message."); $followme_text .= "
"; $followme_text .= ""; $followme_text .= "" . _("Enable") . "
 
"; } } } // build page content $ret .= checkErrorMessage(); if ($_SESSION['ari_user']['admin_settings']) { $headerText = _("Followme Settings"); } else { $headerText = sprintf(_("Followme Settings for %s (%s)"),$displayname,$exten); } $ret .= $display->displayHeaderText($headerText); $ret .= $display->displayLine(); $ret .= "\n\n"; $ret .= "
" . $followme_text . "
"; return $ret; } /* * Sets Follow Me Pre-Ring Time * * @param $exten * Extension to modify * @param $follow_me_prering_time * Pre-Ring Time to ring */ function setFollowMePreRingTime($exten,$follow_me_prering_time) { global $asterisk_manager_interface; $value_opt = $follow_me_prering_time; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/prering $value_opt\r\n\r\n"); } /* * Gets Follow Me Pre-Ring Time if set * * @param $exten * Extension to get information about * @return $number * follow me pre-ring time returned if set */ function getFollowMePreRingTime($exten) { global $asterisk_manager_interface; $number = ''; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/prering\r\n\r\n"); if (is_numeric($response)) { $number = $response; } $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_prering_time']); if ($stripped==$number) { $number = $_COOKIE['ari_follow_me_prering_time']; } return $number; } /* * Sets Follow Me List Ring Time * * @param $exten * Extension to modify * @param $follow_me_listring_time * List Ring Time to ring */ function setFollowMeListRingTime($exten,$follow_me_listring_time) { global $asterisk_manager_interface; $value_opt = $follow_me_listring_time; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grptime $value_opt\r\n\r\n"); } /* * Gets Follow Me List-Ring Time if set * * @param $exten * Extension to get information about * @return $number * follow me list-ring time returned if set */ function getFollowMeListRingTime($exten) { global $asterisk_manager_interface; $number = ''; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grptime\r\n\r\n"); if (is_numeric($response)) { $number = $response; } $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_listring_time']); if ($stripped==$number) { $number = $_COOKIE['ari_follow_me_listring_time']; } return $number; } /* * Sets Follow Me List * * @param $exten * Extension to modify * @param $follow_me_list * Follow Me List */ function setFollowMeList($exten,$follow_me_list) { global $asterisk_manager_interface; $value_opt = $follow_me_list; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grplist $value_opt\r\n\r\n"); } /* * Gets Follow Me List if set * * @param $exten * Extension to get information about * @return $data * follow me list if set */ function getFollowMeList($exten) { global $asterisk_manager_interface; $number = ''; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grplist\r\n\r\n"); //TODO: really need to check for a bogus response, see how other side does it // return preg_replace("/[^0-9*\-]/", "", $response); } /* * Sets Follow Confirmation Setting * * @param $exten * Extension to modify * @param $follow_me_cofirm * Follow Me Confirm Setting */ function setFollowMeConfirm($exten,$follow_me_confirm) { global $asterisk_manager_interface; $value_opt = ($follow_me_confirm)?'ENABLED':'DISABLED'; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grpconf $value_opt\r\n\r\n"); } /* * Gets Follow Me Confirmation Setting * * @param $exten * Extension to get information about * @return $data * follow me confirm setting */ function getFollowMeConfirm($exten) { global $asterisk_manager_interface; $number = ''; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grpconf\r\n\r\n"); if (preg_match("/ENABLED/",$response)) { $response='checked'; } else { $response=''; } //TODO: really need to check for a bogus response, see how other side does it // return $response; } /* * Sets Follow Ddial Setting * * @param $exten * Extension to modify * @param $follow_me_ddial * Follow Me Ddial Setting */ function setFollowMeDDial($exten,$follow_me_ddial) { global $asterisk_manager_interface; $value_opt = ($follow_me_ddial)?'DIRECT':'EXTENSION'; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/ddial $value_opt\r\n\r\n"); } /* * Gets Follow Me Ddial Setting * * @param $exten * Extension to get information about * @return $data * follow me ddial setting */ function getFollowMeDDial($exten) { global $asterisk_manager_interface; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/ddial\r\n\r\n"); if (preg_match("/EXTENSION/",$response)) { $response=''; } else { $response='checked'; } //TODO: really need to check for a bogus response, see how other side does it // return $response; } /* * Gets FreePBX Version */ function getFreePBXVersion() { if (isset($_SESSION['dbh_asterisk'])) { $sql = "SELECT * FROM admin WHERE variable = 'version'"; $results = $_SESSION['dbh_asterisk']->getAll($sql); if(DB::IsError($results)) { $_SESSION['ari_error'] = $results->getMessage(); } return $results[0][1]; } } /* * Sets Follow-Me Settings in FreePBX MySQL Database * * @param $exten * Extension to modify * @param $follow_me_prering_time * Pre-Ring Time to ring * @param $follow_me_listring_time * List Ring Time to ring * @param $follow_me_list * Follow Me List * @param $follow_me_list * Follow Me Confirm Setting * */ function setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm) { if (isset($_SESSION['dbh_asterisk'])) { //format for SQL database $follow_me_confirm = ($follow_me_confirm)?'CHECKED':''; $sql = "UPDATE findmefollow SET grptime = '" . $follow_me_listring_time . "', grplist = '". str_replace("'", "''", trim($follow_me_list)) . "', pre_ring = '" . $follow_me_prering_time . "', needsconf = '" . $follow_me_confirm . "' WHERE grpnum = $exten LIMIT 1"; $results = $_SESSION['dbh_asterisk']->query($sql); if(DB::IsError($results)) { $_SESSION['ari_error'] = $results->getMessage(); } return 1; } } function lookupSetExtensionFormat($exten) { if (trim($exten) == "") return $exten; $exten = preg_replace("/[^0-9*]/", "", $exten); $sql = "SELECT extension FROM users WHERE extension = '".$exten."'"; $asa = $_SESSION['dbh_asterisk']->getrow($sql, DB_FETCHMODE_ASSOC); if (!is_array($asa)) { return $exten.'#'; } else { return $exten; } } } // class ?>