summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 69169d3)
raw | patch | inline | side by side (parent: 69169d3)
author | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Wed, 10 Jan 2007 07:59:02 +0000 (07:59 +0000) | ||
committer | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Wed, 10 Jan 2007 07:59:02 +0000 (07:59 +0000) |
config.inc
users phoneAccount
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@5505 594d385d-05f5-0310-b6e9-bd551577e9d8
users phoneAccount
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@5505 594d385d-05f5-0310-b6e9-bd551577e9d8
include/class_config.inc | patch | blob | history | |
plugins/gofon/phoneaccount/class_phoneAccount.inc | patch | blob | history | |
plugins/gofon/phoneaccount/generic.tpl | patch | blob | history |
index 516195d7b43468767e91ee34c0ffe0ab00072cc2..b00926aba365a403fff9ce24793ad592cafc2cfe 100644 (file)
--- a/include/class_config.inc
+++ b/include/class_config.inc
'PASSWORD' => $attrs['goFaxPassword'][0]);
}
+
/* Get asterisk servers */
$ldap->cd ($this->current['BASE']);
$ldap->search ("(objectClass=goFonServer)");
- $this->data['SERVERS']['FON']= array();
+ $this->data['SERVERS']['FON']= array();
if ($ldap->count()){
while ($attrs= $ldap->fetch()){
- $this->data['SERVERS']['FON'][]= array(
- 'SERVER' => $attrs['cn'][0],
- 'LOGIN' => $attrs['goFonAdmin'][0],
- 'PASSWORD' => $attrs['goFonPassword'][0],
- 'DB' => "gophone",
- 'SIP_TABLE' => "sip_users",
- 'EXT_TABLE' => "extensions",
- 'VOICE_TABLE' => "voicemail_users",
- 'QUEUE_TABLE' => "queues",
- 'QUEUE_MEMBER_TABLE' => "queue_members");
+
+ /* Add 0 entry for development */
+ if(count($this->data['SERVERS']['FON']) == 0){
+ $this->data['SERVERS']['FON'][0]= array(
+ 'DN' => $attrs['dn'],
+ 'SERVER' => $attrs['cn'][0],
+ 'LOGIN' => $attrs['goFonAdmin'][0],
+ 'PASSWORD' => $attrs['goFonPassword'][0],
+ 'DB' => "gophone",
+ 'SIP_TABLE' => "sip_users",
+ 'EXT_TABLE' => "extensions",
+ 'VOICE_TABLE' => "voicemail_users",
+ 'QUEUE_TABLE' => "queues",
+ 'QUEUE_MEMBER_TABLE' => "queue_members");
+ }
+
+ /* Add entry with 'dn' as index */
+ $this->data['SERVERS']['FON'][$attrs['dn']]= array(
+ 'DN' => $attrs['dn'],
+ 'SERVER' => $attrs['cn'][0],
+ 'LOGIN' => $attrs['goFonAdmin'][0],
+ 'PASSWORD' => $attrs['goFonPassword'][0],
+ 'DB' => "gophone",
+ 'SIP_TABLE' => "sip_users",
+ 'EXT_TABLE' => "extensions",
+ 'VOICE_TABLE' => "voicemail_users",
+ 'QUEUE_TABLE' => "queues",
+ 'QUEUE_MEMBER_TABLE' => "queue_members");
}
}
- /* Get asterisk servers */
+
+ /* Get glpi server */
$ldap->cd ($this->current['BASE']);
$ldap->search ("(&(objectClass=goGlpiServer)(cn=*)(goGlpiAdmin=*)(goGlpiDatabase=*))",array("cn","goGlpiPassword","goGlpiAdmin","goGlpiDatabase"));
if ($ldap->count()){
diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc
index 30206d3004b93966186d7bb74b93aa60d746c3de..fe230fd98ffcf6aa6f052eaa66df93bef2b99cc0 100644 (file)
var $has_mailAccount= FALSE;
/* Attributes */
- var $telephoneNumber = "";
- var $goFonHardware = "";
- var $goFonFormat = "";
+ var $telephoneNumber = array();
+ var $goFonHardware = "automatic";
+ var $goFonFormat = "wav";
var $goFonPIN = "";
var $goFonVoicemailPIN = "";
var $goFonDeliveryMode = "";
var $generate_error = "";
var $a_old_telenums = array();
var $goFonPINVoice = "";
+ var $goFonHomeServer = "0"; // Contains the dn of the server that manage this account
+ var $init_HomeServer = "0"; // Contains the dn of the server that manage this account
+ var $goFonHomeServers = array(); // Contains all available server configurations
+
/* CLI vars */
var $cli_summary = "Manage users phone account";
var $CopyPasteVars = array("phoneNumbers","macroarray","macrostillavailable"/*"phoneNumbers" -Reset- */,
"hardware_list","used_hardware");
- var $attributes = array("goFonDeliveryMode", "goFonFormat","uid","cn",
- "goFonHardware","goFonPIN","goFonVoicemailPIN",
- "telephoneNumber", "goFonMacro","macro");
+ var $attributes = array("goFonDeliveryMode", "goFonFormat","uid","cn","goFonHomeServer",
+ "goFonHardware","goFonPIN","goFonVoicemailPIN","telephoneNumber", "goFonMacro","macro");
var $objectclasses= array("goFonAccount");
- var $uid ="";
+ var $uid;
function phoneAccount ($config, $dn= NULL, $parent= NULL)
{
plugin::plugin ($config, $dn, $parent);
- /* Set uid, it is used in handle_post_events */
- if(isset($this->attrs['uid'])){
- $this->uid = $this->attrs['uid'][0];
- }
-
- /* Set phone hardware */
- if (!isset($this->attrs['goFonHardware'])){
- $this->goFonHardware= "automatic";
- }
-
- /* Preset voice format */
- if (!isset($this->attrs['goFonFormat'])){
- $this->goFonFormat= "wav";
- }
-
/* Assemble phone numbers */
if (isset($this->attrs['telephoneNumber'])){
for ($i= 0; $i<$this->attrs['telephoneNumber']['count']; $i++){
}
}
+
+ /* Check server configurations
+ * Load all server configuration in $this->goFonHomeServers if available
+ * and first server as default if necessary.
+ * Check if connection is successfull for the selected server $this->goFonHomeServer
+ */
$a_SETUP= array();
if(array_key_exists('config',$_SESSION) &&
array_key_exists('SERVERS',$_SESSION['config']->data) &&
array_key_exists('FON',$_SESSION['config']->data['SERVERS']) &&
is_callable("mysql_connect")
) {
- $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'][0];
- $r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
- if(!$r_con){
- $this->generate_error = sprintf(_("The MySQL Server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
- $a_SETUP['SERVER'],$a_SETUP['LOGIN']);
- gosa_log(mysql_error());
- return false;
- }
- $db = @mysql_select_db($a_SETUP['DB'],$r_con);
- if(!$db){
- $this->generate_error = sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']);
- gosa_log(mysql_error());
- return false;
- }
-
- $first = false;
- foreach($this->phoneNumbers as $key => $val){
- if(!$first){
- $first = $key;
+
+ /* Set available server */
+ $this->goFonHomeServers = $_SESSION['config']->data['SERVERS']['FON'];
+
+ /* Servers defined? Watch here... */
+ if (count($this->goFonHomeServers)){
+
+ /* Set default server */
+ if(empty($this->goFonHomeServer) || $this->goFonHomeServer == "0"){
+ $this->goFonHomeServer= $this->goFonHomeServers[0]['DN'];
+ }
+
+ /* Remember inital home server, to be able to remove old entries */
+ $this->init_HomeServer = $this->goFonHomeServer;
+
+ /* Get config */
+ if(!isset($this->goFonHomeServers[$this->goFonHomeServer])){
+ print_red(sprintf(_("The specified goFonHomeServer '%s' is not available in GOsa server configuration. Saving this account will create a new entry on the server '%s'. Use cancel if you do not want to create a new entry ignoring old accounts."),$this->goFonHomeServer, $this->goFonHomeServers[0]['DN']));
+
+ $this->goFonHomeServer = $this->goFonHomeServers[0]['DN'];
+ $this->init_HomeServer = $this->goFonHomeServers[0]['DN'];
+ }
+ $cur_cfg = $this->goFonHomeServers[$this->goFonHomeServer];
+
+ $r_con = @mysql_pconnect($cur_cfg['SERVER'],$cur_cfg['LOGIN'],$cur_cfg['PASSWORD']);
+ if(!$r_con){
+ print_red( sprintf(_("The MySQL Server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
+ $cur_cfg['SERVER'],$cur_cfg['LOGIN']));
+ gosa_log(mysql_error());
+ }
+ $db = @mysql_select_db($cur_cfg['DB'],$r_con);
+ if(!$db){
+ print_red(sprintf(_("Can't select database %s on %s."),$cur_cfg['DB'],$cur_cfg['SERVER']));
+ gosa_log(mysql_error());
+ }
+
+ $first = false;
+ foreach($this->phoneNumbers as $key => $val){
+ if(!$first){
+ $first = $key;
+ }
}
}
}
- /* Load hardware list */
+ /* Get available phone hardware
+ * Search for all available phone hardware
+ */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
$ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
$description= "";
}
$this->hardware_list[$cn]= "$cn$description";
-
}
- /* Perform search, to get Macro Parameters,Name,Dn,Displayname etc*/
- $ldap->search("(objectClass=goFonMacro)", array("*"));
+
+ /* Get available Macros
+ * Search for all Marcos that are visible and create
+ * an array with name and parameters
+ */
+ $ldap->search("(&(objectClass=goFonMacro)(goFonMacroVisible=1))", array("*"));
/* Add none for no macro*/
$this->macros['none']=_("no macro");
$this->macro ="none";
-
/* Fetch all Macros*/
while ($attrs= $ldap->fetch()){
- /* Only visisble */
- if((isset($attrs['goFonMacroVisible'][0]))&&($attrs['goFonMacroVisible'][0] ==1)){
-
- /* unset Count, we don't need that here */
- unset($attrs['displayName']['count']);
+ /* unset Count, we don't need that here */
+ unset($attrs['displayName']['count']);
- /* fill Selectfield variable with Macros */
- if(isset($attrs['displayName'][0])){
- $this->macros[$attrs['dn']] = $attrs['displayName'][0]." (".$attrs['cn'][0].")";
- }else{
- $this->macros[$attrs['dn']] = _("undefined");
- }
+ /* Parse macro data, unset count for parameterarrays */
+ if (isset($attrs['goFonMacroParameter']['count'])){
+ unset($attrs['goFonMacroParameter']['count']);
+ }
- /* Parse macro data, unset count for parameterarrays */
- if (isset($attrs['goFonMacroParameter']['count'])){
- unset($attrs['goFonMacroParameter']['count']);
- }
+ /* fill Selectfield variable with Macros */
+ if(isset($attrs['displayName'][0])){
+ $this->macros[$attrs['dn']] = $attrs['displayName'][0]." (".$attrs['cn'][0].")";
+ }else{
+ $this->macros[$attrs['dn']] = _("undefined");
+ }
- /* Go through available parameters and parse all attributes, like parametername, type, default ...*/
- if((isset($attrs['goFonMacroParameter']))&&(is_array($attrs['goFonMacroParameter']))){
-
- foreach($attrs['goFonMacroParameter'] as $pkey=>$pval){
- /* Split Data in readable values, by delimiter ! */
- $data = split("!",$attrs['goFonMacroParameter'][$pkey]);
-
- /* Set all attrs */
- $id = $data[0];
- $this->macroarray[$attrs['dn']][$id]['var'] ="var".$id;
- $this->macroarray[$attrs['dn']][$id]['choosen']=$data[3];
- $this->macroarray[$attrs['dn']][$id]['id'] =$id;
- $this->macroarray[$attrs['dn']][$id]['name'] =$data[1];
- $this->macroarray[$attrs['dn']][$id]['type'] =$data[2];
- $this->macroarray[$attrs['dn']][$id]['default']=$data[3];
- if($data[2] == "bool"){
- $this->macroarray[$attrs['dn']][$id]['choosen']=$data[3];
- }
- }//foreach
- }//is_array
- }//visible = 1
+ /* Go through available parameters and parse all attributes, like parametername, type, default ...*/
+ if((isset($attrs['goFonMacroParameter']))&&(is_array($attrs['goFonMacroParameter']))){
+
+ foreach($attrs['goFonMacroParameter'] as $pkey=>$pval){
+ /* Split Data in readable values, by delimiter ! */
+ $data = split("!",$attrs['goFonMacroParameter'][$pkey]);
+
+ /* Set all attrs */
+ $id = $data[0];
+ $this->macroarray[$attrs['dn']][$id]['var'] ="var".$id;
+ $this->macroarray[$attrs['dn']][$id]['choosen']=$data[3];
+ $this->macroarray[$attrs['dn']][$id]['id'] =$id;
+ $this->macroarray[$attrs['dn']][$id]['name'] =$data[1];
+ $this->macroarray[$attrs['dn']][$id]['type'] =$data[2];
+ $this->macroarray[$attrs['dn']][$id]['default']=$data[3];
+ if($data[2] == "bool"){
+ $this->macroarray[$attrs['dn']][$id]['choosen']=$data[3];
+ }
+ }//foreach
+ }//is_array
}//while
- /* Go through already saved values, for a parameter */
- $tmp = split("!",$this->goFonMacro);
- /* it is possible that nothing has been saved yet */
+ /* Parse used Macro
+ * If we have a macro selected, parse it and set values
+ * in $this->macroarray[$this->macro].
+ */
+ $tmp = split("!",$this->goFonMacro);
if(is_array($tmp)){
/* First value is the macroname */
unset($tmp[0]);
/* Check if makro has been removed */
- if(!isset($this->macroarray[$this->macro])){
+ if(!isset($this->macros[$this->macro])){
$this->macrostillavailable = false;
}else{
$this->macrostillavailable = true;
}
- /* Eventually colorize phones */
+ /* Colorize phones
+ * Used phones will be colored in grey,
+ * so we must detect which phones are currently in use.
+ */
$ldap->cd($this->config->current['BASE']);
foreach ($this->hardware_list as $cn => $desc){
$ldap->search("(goFonHardware=$cn)", array('cn'));
* This means, the PIN in the DB is up to date
*/
// Connect to DB server
- if((is_callable("mysql_pconnect"))&&(isset($a_SETUP))&&(isset($a_SETUP['SERVER']))&&(isset($a_SETUP['LOGIN']))&&(isset($a_SETUP['PASSWORD']))){
- $r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
+ if((is_callable("mysql_pconnect"))&&(isset($cur_cfg))&&(isset($cur_cfg['SERVER']))&&(isset($cur_cfg['LOGIN']))&&(isset($cur_cfg['PASSWORD']))){
+ $r_con = @mysql_pconnect($cur_cfg['SERVER'],$cur_cfg['LOGIN'],$cur_cfg['PASSWORD']);
if($r_con){
- $r_db = @mysql_select_db($a_SETUP['DB'],$r_con);
- $vp = mysql_fetch_row(mysql_query("SELECT ".$a_SETUP['VOICE_TABLE'].".password FROM ".$a_SETUP['VOICE_TABLE'].", ".$a_SETUP['SIP_TABLE']." WHERE customer_id = sip_users.mailbox AND name='".$this->uid."'"));
+ $r_db = @mysql_select_db($cur_cfg['DB'],$r_con);
+ $vp = mysql_fetch_row(mysql_query("SELECT ".$cur_cfg['VOICE_TABLE'].".password FROM ".$cur_cfg['VOICE_TABLE'].", ".$cur_cfg['SIP_TABLE']." WHERE customer_id = sip_users.mailbox AND name='".$this->uid."'"));
if((isset($vp[0]))&&(!empty($vp[0]))){
$this->goFonPINVoice = $vp[0];
}
- // Generate MySQL Syntax
- function generate_mysql_entension_entries($save = false){
-
- if(!isset($_SESSION['config']->data['SERVERS']['FON'][0])){
- if($save)
- print_red(_("There is currently no asterisk server defined. Possibly you are missing a server that handles the asterisk management (goFonServer). Your settings can't be saved to asterisk database."));
+ /* This function generates the Database entries.
+ * The Parameter 'save' could be true or false.
+ * false - means only testing no database transactions.
+ * true - write database entries.
+ *
+ * 'sip_users','voice_mail' and 'extensions' table entries will be created.
+ *
+ * If the phone hardware is 'automatic' the table entries will only be removed
+ * and not added.
+ */
+ function generate_mysql_entension_entries($save = false)
+ {
+ /* Check if there is at least one server available
+ * If not, return and tell the user that saving failed
+ */
+ if(!count($this->goFonHomeServers)){
+ if($save){
+ print_red(_("There is currently no asterisk server defined. Possibly you are missing a server that handles the asterisk management (goFonServer). Your settings can't be saved to asterisk database."));
+ }
return(true);
}
+ /* Check if Mysql extension is available */
if(!is_callable("mysql_pconnect")){
if($save)
print_red(_("Can't save any changes to asterisk database, there is no mysql extension available."));
return(true);
}
-
+
+ /**********************
+ * Attribute Initialisation
+ **********************/
+
+ $old_connection = false;
+
// Get Configuration for Mysql database Server
- $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'][0]; // DB Configuration
$s_parameter = ""; // Contains paramter for selected Macro
$r_con = false; // DB connection
$r_db = false; // Selected DB
$i_is_accounted = false; // Ensure that extension entry, for name to number is only once in table
+ restore_error_handler();
- // Connect to DB server
- $r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
-
- // Check if we are connected correctly
- if(!$r_con){
- $this->generate_error = sprintf(_("The MySQL Server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
- $a_SETUP['SERVER'],$a_SETUP['LOGIN']);
- gosa_log(mysql_error());
- return false;
+ /* Prepare some basic attributes */
+ foreach($this->a_old_telenums as $tele){
+ $oldnums[]= preg_replace("/[^0-9]/","",$tele);
+ }
+ foreach($this->phoneNumbers as $tele){
+ $newnums[]= preg_replace("/[^0-9]/","",$tele);
}
- // Select database for Extensions
- $r_db = @mysql_select_db($a_SETUP['DB'],$r_con);
-
- // Test if we have the database selected correctly
- if(!$r_db){
- $this->generate_error = sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']);
- gosa_log(mysql_error());
- return false;
+ /* If deletion starts from userslist, cn uid are not set */
+ if((isset($this->parent->by_object['user']->uid))&&(!empty($this->parent->by_object['user']->uid))){
+ $this->uid = $this->parent->by_object['user']->uid;
+ }
+ if((isset($this->parent->by_object['user']->cn))&&(!empty($this->parent->by_object['user']->cn))){
+ $this->cn = $this->parent->by_object['user']->cn;
+ }
+ /* Create voicemail entry
+ */
+ if((!isset($this->cn))||(empty($this->cn))){
+ $CNname= $this->uid;
+ }else{
+ $CNname= $this->cn;
}
- // Get phonehardware to setup sip entry
+ if((isset($this->parent))&&(isset($this->parent->by_object['mailAccount']))&&($this->parent->by_object['mailAccount']->is_account==true)){
+ $s_mail = $this->parent->by_object['mailAccount']->mail;
+ }else{
+ $s_mail = "";
+ }
+ /* Get phonehardware to setup sip entry */
$ldap = $this->config->get_ldap_link();
$r_res = $ldap->search("(&(objectClass=goFonHardware)(cn=".$this->goFonHardware."))", array('*'));
$a_ldap_attrs = $ldap->fetch();
+ /* Check selected phone hardware, is a default IP set? */
+ if(((isset($a_ldap_attrs['goFonDefaultIP'][0]))&&($a_ldap_attrs['goFonDefaultIP'][0] != "dynamic"))){
+ $s_ip = $a_ldap_attrs['goFonDefaultIP'][0];
+ $s_host = $s_ip;
+ }else{
+ $s_ip = NULL;
+ $s_host = "dynamic";
+ }
+
+ // Attribute GoFonQualify set ?
+ if(isset($a_ldap_attrs['goFonQualify'])){
+ $s_qualify = $a_ldap_attrs['goFonQualify'][0];
+ }
+
+ // Attribute GoFonPIN set ?
+ if(isset($this->goFonPIN)){
+ $s_pin = $this->goFonPIN;
+ }
+
+ // Attribute GoFonType set ?
+ if(isset($a_ldap_attrs['goFonType'])){
+ $s_type = $a_ldap_attrs['goFonType'][0];
+ }
+
+ if(isset($a_ldap_attrs['goFonDmtfMode'][0])){
+ $sip_data_array['dtmfmode'] = $a_ldap_attrs['goFonDmtfMode'][0];
+ }else{
+ $sip_data_array['dtmfmode'] ="rfc2833";
+ }
+
+ /* Check if phone number is used */
if($this->is_number_used()){
$this->generate_error = $this->is_number_used();
return false;
}
- /* If Save == true, we should save something.
- * Generate SQL, for drop of old entries
- * Generate SQL, for insert new entries
- */
- if($save == true){
-
- foreach($this->a_old_telenums as $tele){
- $oldnums[]= preg_replace("/[^0-9]/","",$tele);
- }
- foreach($this->phoneNumbers as $tele){
- $newnums[]= preg_replace("/[^0-9]/","",$tele);
- }
- // Attribute GoFonDefaultIP set ?
- if(((isset($a_ldap_attrs['goFonDefaultIP'][0]))&&($a_ldap_attrs['goFonDefaultIP'][0] != "dynamic"))){
- $s_ip = $a_ldap_attrs['goFonDefaultIP'][0];
- $s_host = $s_ip;
- }else{
- $s_ip = NULL;
- $s_host = "dynamic";
- }
+ /**********************
+ * Check Server Connection Information
+ **********************/
+
+ /* Create Mysql handle for the current goFonHomeServer, if possible
+ * Get configuration to old asterisk home server
+ */
+ $a_New = $this->goFonHomeServers[$this->goFonHomeServer]; // DB Configuration
+ $new_connection = @mysql_pconnect($a_New['SERVER'],$a_New['LOGIN'],$a_New['PASSWORD']);
+ if(!$new_connection){
+ $this->generate_error = sprintf(
+ _("The MySQL Server '%s' isn't reachable as user '%s'. Abort saving entries to keep the database consistent, check GOsa log for mysql error."),
+ $a_New['SERVER'],$a_New['LOGIN']);
+ gosa_log(@mysql_error($new_connection));
+ return false;
+ }
+ $new_database = @mysql_select_db($a_New['DB'],$new_connection);
+ if(!$new_database){
+ $this->generate_error = sprintf(
+ _("Can't select database %s on %s. Abort saving entries to keep the database consistent, check GOsa log for mysql error."),
+ $a_New['DB'],$a_New['SERVER']);
+ gosa_log( @mysql_error($new_connection));
+ return false;
+ }
- // Attribute GoFonQualify set ?
- if(isset($a_ldap_attrs['goFonQualify'])){
- $s_qualify = $a_ldap_attrs['goFonQualify'][0];
+ /* If the home server has changed, we must remove entries from old
+ * server and add new entries in new server.
+ */
+ if($this->init_HomeServer != $this->goFonHomeServer){
+
+ /* Get configuration to old asterisk home server */
+ $a_Remove = $this->goFonHomeServers[$this->init_HomeServer]; // DB Configuration
+
+ /* Create connection to the database that contains the old entry.
+ */
+ $old_connection = @mysql_pconnect($a_Remove['SERVER'],$a_Remove['LOGIN'],$a_Remove['PASSWORD']);
+ if(!$old_connection){
+ $this->generate_error = sprintf(
+ _("The old MySQL home server '%s' isn't reachable as user '%s'. Abort saving entries to keep the database consistent, check GOsa log for mysql error."),
+ $a_Remove['SERVER'],$a_Remove['LOGIN']);
+ gosa_log(@mysql_error($old_connection));
+ return false;
}
-
- // Attribute GoFonPIN set ?
- if(isset($this->goFonPIN)){
- $s_pin = $this->goFonPIN;
+ $old_database = @mysql_select_db($a_Remove['DB'],$old_connection);
+ if(!$old_database){
+ $this->generate_error = sprintf(
+ _("Can't select database %s on %s. Abort saving entries to keep the database consistent, check GOsa log for mysql error."),
+ $a_Remove['DB'],$a_Remove['SERVER']);
+ gosa_log(@mysql_error($old_connection));
+ return false;
}
+ }
- // Attribute GoFonType set ?
- if(isset($a_ldap_attrs['goFonType'])){
- $s_type = $a_ldap_attrs['goFonType'][0];
- }
+ /* Save means that we must save changes, not only test */
+ if($save == true){
+
+ /**********************
+ * Remove entries from old home server
+ **********************/
+
+ /* Check if there is an old entry
+ * If there is en old entry, get callerid and remove voicemail and extensions too
+ */
+ if($old_connection){
+ $query = "SELECT id,name,callerid FROM ".$a_Remove['SIP_TABLE']." WHERE name='".$this->uid."';";
+ $rid = mysql_query($query,$old_connection);
+
+ /* Old entry found, remove it */
+ $query_a = array();
+ if(mysql_affected_rows($old_connection)){
+ $result = mysql_fetch_assoc($rid);
+ $query_a[]= "DELETE FROM ".$a_Remove['SIP_TABLE']." WHERE name='".$this->uid."';";
+ $query_a[]= "DELETE FROM ".$a_Remove['VOICE_TABLE']." WHERE customer_id='".$result['callerid']."';";
+ $query_a[]= "DELETE FROM ".$a_Remove['EXT_TABLE']." WHERE exten='".$this->uid."';";
+ foreach($oldnums as $s_telenums) {
+ $query_a[]= "DELETE FROM ".$a_Remove['EXT_TABLE']." WHERE exten='".$s_telenums."';";
+ }
- if(isset($a_ldap_attrs['goFonDmtfMode'][0])){
- $sip_data_array['dtmfmode'] = $a_ldap_attrs['goFonDmtfMode'][0];
- }else{
- $sip_data_array['dtmfmode'] ="rfc2833";
+ foreach($query_a as $qry){
+ if(!mysql_query($qry,$old_connection)){
+ echo $qry;
+ echo mysql_error($old_connection);
+ }
+ }
+ }
}
- // generate SIP entry
- $sip_data_array['id'] = "";
- $sip_data_array['name'] = $this->uid;
- $sip_data_array['accountcode'] = NULL;
- $sip_data_array['amaflags'] = NULL;
- $sip_data_array['callgroup'] = NULL;
- $sip_data_array['callerid'] = "";
- $sip_data_array['canreinvite'] = "no";
- $sip_data_array['context'] = "default";
- $sip_data_array['defaultip'] = NULL;
- $sip_data_array['fromuser'] = NULL;
- $sip_data_array['fromdomain'] = NULL;
- $sip_data_array['host'] = $s_host;
- $sip_data_array['insecure'] = NULL;
- $sip_data_array['language'] = NULL;
- $sip_data_array['mailbox'] = "asterisk";
- $sip_data_array['md5secret'] = NULL;
- $sip_data_array['nat'] = "no";
- $sip_data_array['permit'] = NULL;
- $sip_data_array['deny'] = NULL;
- $sip_data_array['mask'] = NULL;
- $sip_data_array['pickupgroup'] = NULL;
- $sip_data_array['port'] = NULL;
- $sip_data_array['qualify'] = $s_qualify;
- $sip_data_array['restrictcid'] = "n";
- $sip_data_array['rtptimeout'] = NULL;
- $sip_data_array['rtpholdtimeout']=NULL;
- $sip_data_array['secret'] = $this->goFonPIN;
- $sip_data_array['type'] = $s_type ;
- $sip_data_array['username'] = $this->uid;
- $sip_data_array['disallow'] = NULL;
- $sip_data_array['allow'] = NULL;
- $sip_data_array['musiconhold'] = NULL;
- $sip_data_array['regseconds'] = NULL;
- $sip_data_array['ipaddr'] = $s_ip;
- $sip_data_array['regexten'] = NULL;
- $sip_data_array['cancallforward']=NULL;
+ /**********************
+ * Update / Insert sip_users entry
+ **********************/
- // Get selected Macro Parameter and create parameter entry
- if(isset($this->macroarray[$this->macro])){
- foreach($this->macroarray[$this->macro] as $key => $val ){
- $s_parameter .= $val['choosen']."|";
+ /* Set the first given phone number as callerid */
+ reset($newnums);
+ $i_new_key = key($newnums);
+ $sip_data_array['callerid'] =$newnums[$i_new_key];
+ $sip_data_array['mailbox'] =$newnums[$i_new_key];
+
+ /* Check if there is already an entry in sip_users for this uid */
+ $SQL_query_array = array();
+ $rid = mysql_query("SELECT * FROM ".$a_New['SIP_TABLE']." WHERE name='".$this->uid."';\n",$new_connection);
+ if(mysql_affected_rows($new_connection)){
+
+ /**********************
+ * Update sip_users entry
+ **********************/
+ $result = mysql_fetch_assoc($rid);
+ $sip_data_array['host'] = $s_host;
+ $sip_data_array['qualify'] = $s_qualify;
+ $sip_data_array['secret'] = $this->goFonPIN;
+ $sip_data_array['type'] = $s_type ;
+ $sip_data_array['username'] = $this->uid;
+ $sip_data_array['ipaddr'] = $s_ip;
+
+ /* Remove not changed attributes, to avoid updating table with same values */
+ foreach($sip_data_array as $name => $value){
+ if($result[$name] == $value){
+ unset($sip_data_array[$name]);
+ }
}
- $s_parameter = preg_replace("/\|$/","",$s_parameter);
- }
+ /* Only update entry if there is something to uopdate */
+ if(count($sip_data_array)){
+ $query = "UPDATE ".$a_New['SIP_TABLE']." SET ";
+ foreach($sip_data_array as $key => $val){
+ $query.= "".$key."='".$val."',";
+ }
+ $query = preg_replace("/,$/","",$query);
+ $query.= " WHERE name='".$this->uid."';";
+ $SQL_query_array[] = $query;
+ }
+ } else {
+
+ /**********************
+ * Insert sip_users entry
+ **********************/
+ //generate SIP entry
+ $sip_data_array['id'] = "";
+ $sip_data_array['name'] = $this->uid;
+ $sip_data_array['accountcode'] = NULL;
+ $sip_data_array['amaflags'] = NULL;
+ $sip_data_array['callgroup'] = NULL;
+ $sip_data_array['canreinvite'] = "no";
+ $sip_data_array['context'] = "default";
+ $sip_data_array['defaultip'] = NULL;
+ $sip_data_array['fromuser'] = NULL;
+ $sip_data_array['fromdomain'] = NULL;
+ $sip_data_array['host'] = $s_host;
+ $sip_data_array['insecure'] = NULL;
+ $sip_data_array['language'] = NULL;
+ $sip_data_array['mailbox'] = $newnums[$i_new_key];
+ $sip_data_array['md5secret'] = NULL;
+ $sip_data_array['nat'] = "no";
+ $sip_data_array['permit'] = NULL;
+ $sip_data_array['deny'] = NULL;
+ $sip_data_array['mask'] = NULL;
+ $sip_data_array['pickupgroup'] = NULL;
+ $sip_data_array['port'] = NULL;
+ $sip_data_array['qualify'] = $s_qualify;
+ $sip_data_array['restrictcid'] = "n";
+ $sip_data_array['rtptimeout'] = NULL;
+ $sip_data_array['rtpholdtimeout']=NULL;
+ $sip_data_array['secret'] = $this->goFonPIN;
+ $sip_data_array['type'] = $s_type ;
+ $sip_data_array['username'] = $this->uid;
+ $sip_data_array['disallow'] = NULL;
+ $sip_data_array['allow'] = NULL;
+ $sip_data_array['musiconhold'] = NULL;
+ $sip_data_array['regseconds'] = NULL;
+ $sip_data_array['ipaddr'] = $s_ip;
+ $sip_data_array['regexten'] = NULL;
+ $sip_data_array['cancallforward']=NULL;
+
+ /* There is currently no entry for this user in the sip_users table.
+ * We should create one i
+ */
+ foreach($sip_data_array as $s_sip_key=>$s_sip_val){
+ if($s_sip_val == NULL) continue;
+ $s_sip_values.="'".$s_sip_val."',";
+ $s_sip_keys .="`".$s_sip_key."`,";
+ }
+ $s_sip_values = preg_replace("/,$/","",$s_sip_values);
+ $s_sip_keys = preg_replace("/,$/","",$s_sip_keys);
- if($this->is_number_used()){
- $this->generate_error = $this->is_number_used();
- return false;
+ /* Add sip entries to mysql queries */
+ $SQL_query_array[] ="INSERT INTO ".$a_New['SIP_TABLE']." (".$s_sip_keys.") VALUES (".$s_sip_values.");";
}
- // Create new SIP entry ...
- $sip_entry = $sip_data_array;
- reset($newnums);
- $i_new_key = key($newnums);
- $sip_entry['callerid'] =$newnums[$i_new_key];
- $sip_entry['mailbox'] =$newnums[$i_new_key];
- if((isset($this->parent))&&(isset($this->parent->by_object['mailAccount']))&&($this->parent->by_object['mailAccount']->is_account==true)){
- $s_mail = $this->parent->by_object['mailAccount']->mail;
- }else{
- $s_mail = "";
+ /**********************
+ * Update / Insert Voice mail entry
+ **********************/
+
+ $customer_id = $newnums[$i_new_key];
+
+ $voice_data_array = array(
+ "customer_id" => $customer_id,
+ "mailbox" => $customer_id,
+ "password" => $this->goFonVoicemailPIN,
+ "fullname" => $CNname,
+ "email" => $s_mail);
+
+ /* Set pager number if available */
+ if(isset($this->parent->by_object['user']->pager)){
+ $voice_data_array['pager'] = $this->parent->by_object['user']->pager;
}
- // $SQL contains all queries
- $SQL = array();
- $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->uid."';\n";
- $SQL[] = "DELETE FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';\n";
- $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$newnums[$i_new_key].";";
- // Delete old entries
- $b_first_deleted =false;
- if(isset($oldnums) && is_array($oldnums)){
- foreach($oldnums as $s_telenums){
- $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$s_telenums."';\n";
- if(!$b_first_deleted){
- $b_first_deleted=true;
- $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$s_telenums.";";
+ /* Check if there is already an entry in sip_users for this uid */
+ $rid = mysql_query("SELECT * FROM ".$a_New['VOICE_TABLE']." WHERE customer_id='".$customer_id."';\n",$new_connection);
+ if(mysql_affected_rows($new_connection)){
+
+ /**********************
+ * Update Voice mail entry
+ **********************/
+ $result = mysql_fetch_assoc($rid) ;
+
+ foreach($voice_data_array as $name => $value){
+ if($result[$name] == $value){
+ unset($voice_data_array[$name]);
}
}
- }
- if($this->goFonHardware=="automatic"){
- foreach($SQL as $query ){
- mysql_query($query) ;
- }
- return;
- }
- // Generate Strings with keys and values
- foreach($sip_entry as $s_sip_key=>$s_sip_val){
- if($s_sip_val == NULL) continue;
- $s_sip_values.="'".$s_sip_val."',";
- $s_sip_keys .="`".$s_sip_key."`,";
- }
- // Remove last ,
- $s_sip_values = preg_replace("/,$/","",$s_sip_values);
- $s_sip_keys = preg_replace("/,$/","",$s_sip_keys);
+ /* Only update entry if there is something to uopdate */
+ if(count($voice_data_array)){
+ $query = "UPDATE ".$a_New['VOICE_TABLE']." SET ";
+ foreach($voice_data_array as $key => $val){
+ $query.= "".$key."='".$val."',";
+ }
+ $query = preg_replace("/,$/","",$query);
+ $query.= " WHERE customer_id='".$customer_id."';";
+ $SQL_query_array[] = $query;
+ }
+ }else{
- // Append SIP Entry
- $SQL[] ="INSERT INTO ".$a_SETUP['SIP_TABLE']." (".$s_sip_keys.") VALUES (".$s_sip_values.");";
+ /**********************
+ * Insert Voice mail entry
+ **********************/
+ $voice_data_array['context'] = "default";
+
+ /* There is currently no voice mail entry for this user.
+ * We should create one
+ */
+ $s_voi_values = $s_voi_keys = "";
+ foreach($voice_data_array as $s_voi_key=>$s_voi_val){
+ if($s_voi_val == NULL) continue;
+ $s_voi_values.="'".$s_voi_val."',";
+ $s_voi_keys .="`".$s_voi_key."`,";
+ }
+ $s_voi_values = preg_replace("/,$/","",$s_voi_values);
+ $s_voi_keys = preg_replace("/,$/","",$s_voi_keys);
- /* If deletion starts from userslist, cn uid are not set */
- if((isset($this->parent->by_object['user']->uid))&&(!empty($this->parent->by_object['user']->uid))){
- $this->uid = $this->parent->by_object['user']->uid;
+ /* Add sip entries to mysql queries */
+ $SQL_query_array[] ="INSERT INTO ".$a_New['VOICE_TABLE']." (".$s_voi_keys.") VALUES (".$s_voi_values.");";
}
- if((isset($this->parent->by_object['user']->cn))&&(!empty($this->parent->by_object['user']->cn))){
- $this->cn = $this->parent->by_object['user']->cn;
+
+ /**********************
+ * Remove/Insert extension entries
+ **********************/
+
+ /* Remove old entries */
+ $query = array();
+ $query[]= "DELETE FROM ".$a_New['EXT_TABLE']." WHERE exten=\"".$this->uid."\";";
+ foreach($newnums as $s_telenums){
+ $query[]= "DELETE FROM ".$a_New['EXT_TABLE']." WHERE exten=\"".$s_telenums."\";";
}
-
- if((!isset($this->cn))||(empty($this->cn))){
- $CNname= $this->uid;
- }else{
- $CNname= $this->cn;
+ foreach($query as $qry){
+ if(!mysql_query($qry,$new_connection)){
+ echo mysql_error($new_connection);
+ }
}
-
- $SQL[]= "INSERT INTO ".$a_SETUP['VOICE_TABLE']." (`customer_id`,`context`,`mailbox`,`password`,`fullname`,`email`,`pager`)
- VALUES ('".$newnums[$i_new_key]."',
- 'default',
- '".$newnums[$i_new_key]."',
- '".$this->goFonVoicemailPIN."',
- '".$CNname."',
- '".$s_mail."',
- '');";
- $i_is_accounted=false;
-
- $i = 0;
- $is_inserted_once = false;
+ /**********************
+ * Insert extension entries
+ **********************/
+ // Get selected Macro Parameter and create parameter entry
+ if(isset($this->macroarray[$this->macro])){
+ foreach($this->macroarray[$this->macro] as $key => $val ){
+ $s_parameter .= $val['choosen']."|";
+ }
+ $s_parameter = preg_replace("/\|$/","",$s_parameter);
+ }
+
+ $i = 0;
+ $EXT = array();
+ $EXT[$i]['context'] = 'GOsa';
+ $EXT[$i]['exten'] = $this->uid;
+ $EXT[$i]['priority']= 1;
+ $EXT[$i]['app'] = "Goto";
+ $EXT[$i]['appdata'] = $newnums[$i_new_key]."|1";
+ $i ++;
+
// Entension entries Hint / Dial / Goto
foreach($newnums as $s_telenums){
- if(!$is_inserted_once){
- $is_inserted_once = true;
- $EXT[$i]['context'] = 'GOsa';
- $EXT[$i]['exten'] = $this->uid;
- $EXT[$i]['priority']= 1;
- $EXT[$i]['app'] = "Goto";
- $EXT[$i]['appdata'] = $s_telenums."|1";
- $i ++;
- }
/* Hint Entry */
$EXT[$i]['context'] = 'GOsa';
$EXT[$i]['exten'] = $s_telenums;
$EXT[$i]['app'] = $s_app;
$EXT[$i]['appdata'] = $s_par;
$i ++;
-
}
// Append all these Entries
foreach($EXT as $entr){
- $SQL_syn = "INSERT INTO ".$a_SETUP['EXT_TABLE']." (";
+ $SQL_syn = "INSERT INTO ".$a_New['EXT_TABLE']." (";
foreach($entr as $key2 => $val2){
$SQL_syn.= "`".$key2."`,";
}
}
$SQL_syn = preg_replace("/,$/","",$SQL_syn);
$SQL_syn .=");\n";
- $SQL[] =$SQL_syn;
+
+ $SQL_query_array[] =$SQL_syn;
$SQL_syn ="";
}
// Perform queries ...
- foreach($SQL as $query){
- if(!@mysql_query($query,$r_con)){
- print_red(_("Error while performing query:")." ".mysql_error());
- return false;
+ if($this->goFonHardware != "automatic"){
+ foreach($SQL_query_array as $query){
+ if(!@mysql_query($query,$new_connection)){
+ print_red(_("Error while performing query:")." ".mysql_error());
+ return false;
+ }
}
}
}
- @mysql_close($r_con);
+ @mysql_close($new_connection);
return true;
}
function execute()
{
- /* Call parent execute */
- plugin::execute();
+ /* Call parent execute */
+ plugin::execute();
$display = "";
/* Macroname saved, delete that index */
unset($tmp[0]);
- /* Check if makro has been removed */
+ /* Check if macro has been removed */
if(!isset($this->macroarray[$this->macro])){
$this->macrostillavailable = false;
}else{
/* Prepare templating */
$smarty= get_smarty();
- /* tell user that the pluging selected is no longer available*/
+ /* tell user that the selected plugin is no longer available */
if((!$this->macrostillavailable)&&($this->macro!="none")){
print_red(_("The macro you selected, is no longer available for you, please choose another one."));
}
$smarty->assign("macro", $this->macro);
/* check if there is a FON server created */
- if(!isset($_SESSION['config']->data['SERVERS']['FON'][0])){
+ if(!count($this->goFonHomeServer)){
print_red(_("There is currently no asterisk server defined. Possibly you are missing a server that handles the asterisk management (goFonServer). Your settings can't be saved to asterisk database."));
}
- /* Create parameter table, skip if no parameters given */
+ /* Create html parameter table for selected macro parameters
+ * skip if no parameters given
+ */
if(!isset($this->macroarray[$this->macro])){
$macrotab="";
}else{
foreach($this->phoneNumbers as $phonenum){
$tmp[] = $phonenum;
}
-
-
if($this->macro != $this->lastmacro){
/* Go through all params */
switch ($type){
case "combo":
- $str= "<select name='".$var."' ".$dis.">";
+ $str= "<select name='".$var."' ".$dis." >";
foreach(split(":",$default) as $choice){
if($choosen==$choice){
$str.= "\n<option value='".$choice."' selected>".$choice." </option>";
case "bool":
if(!$choosen){
- $str="\n<input type='checkbox' name='".$var."' value='1' ".$dis.">";
+ $str="\n<input type='checkbox' name='".$var."' value='1' ".$dis." >";
}else{
$str="\n<input type='checkbox' name='".$var."' value='1' checked ".$dis.">";
}
break;
case "string":
- $str="<input name='".$var."' value='".$choosen."' style='width:340px;' ".$dis.">";
+ $str="<input name='".$var."' value='".$choosen."' ".$dis." style='width:340px;'>";
$macrotab.= "<td>".base64_decode($name)."</td><td>$str";
break;
/* Give smarty the table */
$smarty->assign("macrotab",$macrotab);
+
/* Do we represent a valid account? */
if (!$this->is_account && $this->parent == NULL){
$display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\"> <b>".
}
$display= "";
-
- /* Show tab dialog headers */
+ /* Show tab dialog headers */
if ($this->parent != NULL){
if ($this->is_account){
$display= $this->show_disable_header(_("Remove phone account"),
}
}
+ /* Create home server array */
+ $tmp = array();
+ foreach($this->goFonHomeServers as $dn => $attrs){
+ if(!is_numeric($dn)){
+ $tmp[$dn] = $attrs['SERVER'];
+ }
+ }
+ $smarty->assign("goFonHomeServers",$tmp);
+
/* Fill arrays */
$smarty->assign ("goFonHardware", $this->goFonHardware);
if (!count($this->phoneNumbers)){
- $smarty->assign ("phoneNumbers", array(""));
+ $smarty->assign ("phoneNumbers", array());
} else {
$smarty->assign ("phoneNumbers", $this->phoneNumbers);
}
-
$dis = "";
if(!$this->acl_is_writeable("goFonHardware",$SkipWrite)){
$dis= " disabled ";
}
$hl= "<select size=\"1\" name=\"goFonHardware\" ".$dis." title=\"".
- _("Choose your private phone")."\">\n";
- foreach ($this->hardware_list as $cn => $description){
+ _("Choose your private phone")."\">\n";
+ foreach ($this->hardware_list as $cn => $description){
if ($cn == $this->goFonHardware){
$selected= "selected";
} else {
$selected= "";
}
-
if (isset($this->used_hardware[$cn])){
$color= "style=\"color:#A0A0A0\"";
} else {
function save_object()
- {
+ {
$SkipWrite = (!isset($this->parent) || !$this->parent) && !isset($_SESSION['edit']);
if (isset($_POST["phoneTab"])){
plugin::save_object();
+ /* Save checkbox */
+ $tmp = preg_replace("/[^a-z]/i","",$this->goFonDeliveryMode);
+ if($this->acl_is_writeable("goFonDeliveryMode",$SkipWrite)){
+ if(isset($_POST['fon_to_mail']) && !preg_match("/M/",$this->goFonDeliveryMode)){
+ $tmp .= "M";
+ }elseif(!isset($_POST['fon_to_mail']) && preg_match("/M/",$this->goFonDeliveryMode)){
+ $tmp = preg_replace ("/M/","",$tmp);
+ }
+ }
+ $this->goFonDeliveryMode= "[".$tmp."]";
+
+
/* Every macro in the select box are available */
if((isset($_POST['macro']))){
$this->macrostillavailable=true;
}
- /* Save checkbox */
- $tmp = preg_replace("/[^a-z]/i","",$this->goFonDeliveryMode);
- if($this->acl_is_writeable("goFonDeliveryMode",$SkipWrite)){
- if(isset($_POST['fon_to_mail']) && !preg_match("/M/",$this->goFonDeliveryMode)){
- $tmp .= "M";
- }elseif(!isset($_POST['fon_to_mail']) && preg_match("/M/",$this->goFonDeliveryMode)){
- $tmp = preg_replace ("/M/","",$tmp);
- }
- }
- $this->goFonDeliveryMode= "[".$tmp."]";
-
-
-
/* get all Postvars */
if(isset($this->macroarray[$this->macro])){
- if($this->acl_is_writeable("goFonMarco",$SkipWrite)){
+ if($this->acl_is_writeable("goFonMarco",$SkipWrite)){
foreach($this->macroarray[$this->macro] as $key => $paras){
if(isset($_POST[$paras['var']])){
$this->macroarray[$this->macro][$key]['choosen'] = $_POST[$paras['var']];
}
- /* Checkboxes are special, they are not Posted if they are not selected, so the won't be changed with the above code
+ /* Checkboxes are special, they are not Posted if they are not selected, so the won't be changed with the above code
We need this code below to read and save checkboxes correct
*/
/* Call common method to give check the hook */
$message= plugin::check();
+ if(!count($this->goFonHomeServers)){
+ $message[] = _("There must be at least one server with an asterisk database to create a phone account.");
+ }
+
+ if(empty($this->goFonHomeServer)){
+ $message[] = _("Please select a valid goFonHomeServer.");
+ }
+
if((strlen($this->goFonVoicemailPIN)==0)||(strlen($this->goFonVoicemailPIN)>4)){
$message[]=(_("Voicemail PIN must be between 1-4 characters."));
}else{
{
plugin::save();
+ /* Force saving macro again
+ * This ensures that
+ * - the macro is available on the destiantion server.
+ * - the macro saved is up to date on the destination server.
+ */
+ if(!empty($this->macro) && $this->macro != "none") {
+ $macro_tab = new macrotabs($this->config,$this->config->data['TABS']['MACROTABS'], $this->macro);
+ $macro_tab -> save();
+ }
+
/* Save arrays */
- $this->attrs['telephoneNumber']= array();
+ $tmp_numbers = array();
foreach ($this->phoneNumbers as $number){
- $this->attrs['telephoneNumber'][]= $number;
+ $tmp_numbers[] = $number;
}
/* Save settings, or remove goFonMacro attribute*/
$this->attrs['goFonForwarding']=array();
- $this->generate_mysql_entension_entries(true);
+ $str = $this->generate_mysql_entension_entries(true);
+ if(empty($str)){
+ print_red($str);
+ }
if($this->attrs['goFonMacro']==""){
$this->attrs['goFonMacro']=array();
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->dn);
$this->cleanup();
+
+ /* Force saving numbers, else it will be overwriten by user account. */
+ $this->attrs['telephoneNumber'] =$tmp_numbers;
$ldap->modify ($this->attrs);
show_ldap_error($ldap->get_error(), sprintf(_("Saving of user/phone account with dn '%s' failed."),$this->dn));
if ($this->initially_was_account == $this->is_account){
if ($this->is_modified){
- $this->handle_post_events("modify",array("uid"=> $this->uid));
+ $this->handle_post_events("modify",array("uid" => $this->uid));
}
} else {
$this->handle_post_events("add",array("uid" => $this->uid));
}
- function insert_after($entry, $nr, $list)
- {
- /* Is the entry free? No? Make it free... */
- if (isset($list[$nr])) {
- $dest= array();
- $newidx= 0;
-
- foreach ($list as $idx => $contents){
- $dest[$newidx++]= $contents;
- if ($idx == $nr){
- $dest[$newidx++]= $entry;
- }
- }
- } else {
- $dest= $list;
- $dest[$nr]= $entry;
- }
-
- return ($dest);
- }
-
-
function adapt_from_template($dn)
{
plugin::adapt_from_template($dn);
unset($this->$val);
}
}
- if(array_key_exists('config', $_SESSION) &&
- array_key_exists('SERVERS', $_SESSION['config']->data) &&
- array_key_exists('FON', $_SESSION['config']->data['SERVERS']) &&
- is_callable("mysql_pconnect")) {
- // Get Configuration for Mysql database Server
- $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'][0];
+ if(count($this->goFonHomeServers) && !empty($this->init_HomeServer) && is_callable("mysql_pconnect")){
+
+ // Get Configuration for initial Mysql database Server
+ $a_SETUP = $this->goFonHomeServers[$this->init_HomeServer];
$s_parameter ="";
// Connect to DB server
/* Optionally execute a command after we're done */
@mysql_close($r_con);
- $this->handle_post_events('remove',array("uid" => $this->uid));
+ $this->handle_post_events('remove',array("uid"=> $this->uid));
}
}
+ function allow_remove()
+ {
+ /* Check if previously selected server is still available */
+ if($this->initially_was_account && !isset($this->goFonHomeServers[$this->goFonHomeServer])){
+ return sprintf(_("The previously selected asterisk home server (%s) is no longer available. Remove aborted."),preg_replace("/,/",", ",$this->goFonHomeServer));
+ }
+ }
+
/* Return plugin informations for acl handling */
function plInfo()
{
"plPriority" => 7, // Position in tabs
"plSection" => "personal", // This belongs to personal
"plCategory" => array("gofonreport" => array("description" => _("GOfon reports"),
- "objectClass" => "")),
+ "objectClass" => "")),
"plOptions" => array(),
"goFonHardware" => _("Phone hardware"),
"goFonPIN" => _("Telephone pin"),
"goFonVoicemailPIN" => _("Voicemail pin"))
- ));
+ ));
}
}
index 33e494d8405d60964ccbc3b2572b33807c55c4ef..ae726bedb53b8fd0957e717c953c44d9dbe5e4cb 100644 (file)
<td>{t}Telephone{/t}</td>
<td>{$hardware_list}</td>
</tr>
+ <tr>
+ <td>{t}Home server{/t}{$must}
+ </td>
+ <td>
+{render acl=$goFonHomeServerACL}
+ <select name='goFonHomeServer' title='{t}Select the accounts home server{/t}'>
+ {html_options options=$goFonHomeServers selected=$goFonHomeServer}
+ </select>
+{/render}
+ </td>
+ </tr>
<tr>
<td>
<label for="goFonVoicemailPIN">{t}Voicemail PIN{/t}{$must}</label>