"Eins ist toll", "zwei" => "Zwei ist noch besser"); /* attribute list for save action */ var $CopyPasteVars = array("phoneNumbers","macroarray","macrostillavailable"/*"phoneNumbers" -Reset- */, "hardware_list","used_hardware"); var $attributes = array("goFonDeliveryMode", "goFonFormat","cn","goFonHomeServer", "goFonHardware","goFonPIN","goFonVoicemailPIN","telephoneNumber", "goFonMacro","macro"); var $objectclasses= array("goFonAccount"); var $uid; function phoneAccount ($config, $dn= NULL, $parent= NULL) { plugin::plugin ($config, $dn, $parent); /* Assemble phone numbers */ if (isset($this->attrs['telephoneNumber'])){ for ($i= 0; $i<$this->attrs['telephoneNumber']['count']; $i++){ $number= $this->attrs['telephoneNumber'][$i]; $this->phoneNumbers[$number]= $number; } } /* Set up has_mailAccount */ if (isset($this->attrs['objectClass'])){ if (in_array("gosaMailAccount", $this->attrs['objectClass'])){ $this->has_mailAccount= TRUE; } } /* Set uid */ 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; } /* 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 */ /* Set available server */ if(isset($_SESSION['config']->data['SERVERS']['FON'])){ $this->goFonHomeServers = $_SESSION['config']->data['SERVERS']['FON']; } $a_SETUP= array(); if($this->is_account && array_key_exists('config',$_SESSION) && array_key_exists('SERVERS',$_SESSION['config']->data) && array_key_exists('FON',$_SESSION['config']->data['SERVERS']) && is_callable("mysql_connect") ) { /* 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; } } } } /* 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')); while ($attrs= $ldap->fetch()){ $cn= $attrs['cn'][0]; if (isset($attrs['description'])){ $description= " - ".$attrs['description'][0]; } else { $description= ""; } $this->hardware_list[$cn]= "$cn$description"; } /* 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()){ /* unset Count, we don't need that here */ unset($attrs['displayName']['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 }//while /* 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 */ $this->macro = $tmp[0]; /* Macroname saved, delete that index */ unset($tmp[0]); /* Check if makro has been removed */ if(!isset($this->macros[$this->macro])){ $this->macrostillavailable = false; }else{ $this->macrostillavailable = true; } /* for each parametervalues ( parameterID#value like 25#twentyfive) */ foreach($tmp as $var){ /* Split this, so we have $varar[0] = parameterID $varar[1] = SelectedValue */ $varar = split("#",$var); /* Only insert if the parameter still exists */ if(isset($this->macroarray[$this->macro][$varar[0]])){ /* Assign value */ $this->macroarray[$this->macro][$varar[0]]['choosen']=$varar[1]; } } } /* 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')); if ($ldap->count() > 0){ $ldap->fetch(); if ($ldap->getDN() != $this->dn){ $this->used_hardware[$cn]= $ldap->getDN(); } } } $this->hardware_list["automatic"]= _("automatic"); ksort($this->hardware_list); $this->a_old_telenums = $this->phoneNumbers; if($this->is_account){ $this->is_modified = true; } /* Get voicemail PIN from MySQL DB * Because every user can change his PIN directly from the phone * without any update to the ldap * This means, the PIN in the DB is up to date */ // Connect to DB server 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($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]; } } } $this->lastmacro=$this->macro; if(is_callable("mysql_close")&&(isset($r_con))&&($r_con)){ @mysql_close($r_con) ; } } /* 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 $s_parameter = ""; // Contains paramter for selected Macro $r_con = false; // DB connection $r_db = false; // Selected DB $r_res = false; // Result resource $a_ldap_attrs = array(); // $s_ip = NULL; // Contains ip for Sip entry $s_host = NULL; // Contains host for Sip entry $s_qualify = "yes"; // Qualify entry $s_pin = NULL; // Entry for secret $s_type = NULL; // Entry for phone type (friend , peer ..) $sip_data_array = array(); // Contains complete sip entry, to generate SQL syntax $i_old_key = false; // Contains index for first old phonenumber, to delete old entries corectly $i_new_key = false; // Contains index for first new phonenumber, to generate new entries corectly $s_sip_values = ""; // Contains string with all values for given attributes in SQL syntax $s_sip_keys = ""; // Contains all needed attributes to generate sip entry in DB $s_sip_key = ""; // Key for SIP entry index $s_sip_val = ""; // Value for SIP entry index $b_first_deleted= false; // Only delete first entry, $s_telenums = ""; // for each value variable $i_is_accounted = false; // Ensure that extension entry, for name to number is only once in table restore_error_handler(); /* 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); } /* 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; } 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; } /********************** * 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; } /* 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; } $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; } } /* 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."';"; } foreach($query_a as $qry){ if(!mysql_query($qry,$old_connection)){ echo $qry; echo mysql_error($old_connection); } } } } /********************** * Update / Insert sip_users entry **********************/ /* 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]); } } /* 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); /* Add sip entries to mysql queries */ $SQL_query_array[] ="INSERT INTO ".$a_New['SIP_TABLE']." (".$s_sip_keys.") VALUES (".$s_sip_values.");"; } /********************** * 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; } /* 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]); } } /* 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{ /********************** * 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); /* Add sip entries to mysql queries */ $SQL_query_array[] ="INSERT INTO ".$a_New['VOICE_TABLE']." (".$s_voi_keys.") VALUES (".$s_voi_values.");"; } /********************** * 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."\";"; } foreach($query as $qry){ if(!mysql_query($qry,$new_connection)){ echo mysql_error($new_connection); } } /********************** * 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(); if(!is_numeric($this->uid)){ $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){ /* Hint Entry */ $EXT[$i]['context'] = 'GOsa'; $EXT[$i]['exten'] = $s_telenums; $EXT[$i]['priority']= "Hint"; $EXT[$i]['app'] = 'SIP/'.$this->uid; $i ++; /* SetCID */ //$EXT[$i]['context'] = 'GOsa'; //$EXT[$i]['exten'] = $s_telenums; //$EXT[$i]['priority']= 1; //$EXT[$i]['app'] = "SetCIDName"; //$EXT[$i]['appdata'] = $CNname; //$i ++; // If no macro is selected use Dial if($this->macro!="none"){ $macroname = preg_replace("/,.*$/","",$this->macro); $macroname = preg_replace("/^.*=/","",$macroname); $s_app = "Macro";$macroname; $s_par = $macroname."|".$s_parameter; }else{ $s_app = "Dial"; $s_par = 'SIP/'.$this->uid."|20|r"; } $EXT[$i]['context'] = 'GOsa'; $EXT[$i]['exten'] = $s_telenums; $EXT[$i]['priority']= 1; $EXT[$i]['app'] = $s_app; $EXT[$i]['appdata'] = $s_par; $i ++; } // Append all these Entries foreach($EXT as $entr){ $SQL_syn = "INSERT INTO ".$a_New['EXT_TABLE']." ("; foreach($entr as $key2 => $val2){ $SQL_syn.= "`".$key2."`,"; } $SQL_syn = preg_replace("/,$/","",$SQL_syn); $SQL_syn .= ") VALUES ("; foreach($entr as $key2 => $val2){ $SQL_syn .= "'".$val2."',"; } $SQL_syn = preg_replace("/,$/","",$SQL_syn); $SQL_syn .=");\n"; $SQL_query_array[] =$SQL_syn; $SQL_syn =""; } // Perform queries ... 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($new_connection); return true; } function execute() { /* Call parent execute */ plugin::execute(); $display = ""; $SkipWrite = (!isset($this->parent) || !$this->parent) && !isset($_SESSION['edit']); if(empty($this->macro)&&(!empty($this->goFonMacro))){ /* Go through already saved values, for a parameter */ $tmp = split("!",$this->goFonMacro); /* it is possible that nothing has been saved yet */ if(is_array($tmp)){ /* First value is the macroname */ $this->macro = $tmp[0]; /* Macroname saved, delete that index */ unset($tmp[0]); /* Check if macro has been removed */ if(!isset($this->macroarray[$this->macro])){ $this->macrostillavailable = false; }else{ $this->macrostillavailable = true; } /* for each parametervalues ( parameterID#value like 25#twentyfive) */ foreach($tmp as $var){ /* Split this, so we have $varar[0] = parameterID $varar[1] = SelectedValue */ $varar = split("#",$var); /* Only insert if the parameter still exists */ if(isset($this->macroarray[$this->macro][$varar[0]])){ /* Assign value */ $this->macroarray[$this->macro][$varar[0]]['choosen']=$varar[1]; } } } } /* Do we represent a valid account? */ if (!$this->is_account && $this->parent == NULL){ $display= " ". _("This account has no phone extensions.").""; $display.= back_to_main(); return ($display); } /* Do we need to flip is_account state? */ if (isset($_POST['modify_state'])){ $this->is_account= !$this->is_account; } /* Select no macro if, state is empty, this is the case, if the selected macro is no longer available */ if(empty($this->macro)){ $this->macro ="none"; } /* Prepare templating */ $smarty= get_smarty(); /* 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.")); } /* Assing macroselectbox values */ $smarty->assign("macros",$this->macros); $smarty->assign("macro", $this->macro); /* check if there is a FON server created */ 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 html parameter table for selected macro parameters * skip if no parameters given */ if(!isset($this->macroarray[$this->macro])){ $macrotab=""; }else{ $macrotab ="
".base64_decode($name)." | $str"; break; case "bool": if(!$choosen){ $str="\n"; }else{ $str="\n"; } $macrotab.= " | $str ".base64_decode($name).""; break; case "string": $str=""; $macrotab.= " | ".base64_decode($name)." | $str"; break; } $macrotab.= " |