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 */
$config = session::get('config');
if(isset($config->data['SERVERS']['FON'])){
$this->goFonHomeServers = $config->data['SERVERS']['FON'];
}
$a_SETUP= array();
if($this->is_account && isset($config->data['SERVERS']['FON']) &&
array_key_exists('FON',$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])){
msg_dialog::display(_("Obsolete entry"), sprintf(_("The current home server is not available anymore. It will be moved to '%s' if you save this entry!"), preg_replace("/,/",", ",$this->goFonHomeServers[0]['DN'])), ERROR_DIALOG);
$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){
new log("debug","gofonreport/".get_class($this),"",array(),@mysql_error());
}
$db = @mysql_select_db($cur_cfg['DB'],$r_con);
if(!$db){
new log("debug","gofonreport/".get_class($this),"",array(),@mysql_error());
}
$first = false;
foreach($this->phoneNumbers as $key => $val){
if(!$first){
$first = $key;
}
}
}
}
/* Get available phone hardware
* Search for all available phone hardware
*/
$tmp = get_sub_list("(objectClass=goFonHardware)","",array(get_ou("phoneou")),
$this->config->current['BASE'],array("cn","description"), GL_NO_ACL_CHECK);
foreach($tmp as $attrs){
$cn= $attrs['cn'][0];
$description= "";
if (isset($attrs['description'])){
$description= " - ".$attrs['description'][0];
}
$this->hardware_list[$cn]= "$cn$description";
}
$this->hardware_list["automatic"]= _("automatic");
ksort($this->hardware_list);
/* Collect all usd phones
goFonHardware set.
*/
$deps_a = array(
get_people_ou(),
get_ou("ogroupou"),
get_ou("serverou"),
get_ou("terminalou"),
get_ou("workstationou"),
get_ou("printerou"),
get_ou("componentou"),
get_ou("phoneou"));
$tmp = get_sub_list("(goFonHardware=*)","",$deps_a,$this->config->current['BASE'],
array('cn','dn','goFonHardware'),GL_NO_ACL_CHECK);
foreach($tmp as $attrs){
$cn = $attrs['goFonHardware'][0];
if(isset($this->hardware_list[$cn])){
$this->used_hardware[$cn]= $cn;
}
}
/* Get available Macros
* Search for all Marcos that are visible and create
* an array with name and parameters
*/
$tmp = get_sub_list("(&(objectClass=goFonMacro)(goFonMacroVisible=1))","",array(get_ou("macroou")),
$this->config->current['BASE'],array("displayName","goFonMacroParameter","dn"), GL_NONE);
/* Add none for no macro*/
$this->macros['none']=_("no macro");
$this->macro ="none";
/* Fetch all Macros*/
foreach($tmp as $attrs){
/* 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];
}
}
}
$this->a_old_telenums = $this->phoneNumbers;
/* 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);
$query_tmp = "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."'";
$vp = mysql_fetch_row(mysql_query($query_tmp));
@DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query_tmp, "Database query");
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){
msg_dialog::display(_("Configuration error"), msgPool::noserver(_("GOfon")), WARNING_DIALOG);
}
return(true);
}
/* Check if Mysql extension is available */
if(!is_callable("mysql_pconnect")){
if($save){
msg_dialog::display(_("Configuration error"), msgPool::missingext("php-mysql"), WARNING_DIALOG);
}
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 */
$oldnums = array();
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 = msgPool::dbconnect($a_New['SERVER'],@mysql_error($new_connection),
_("Abort saving entries to keep the database consistent."));
new log("debug","gofonreport/".get_class($this),"",array(),@mysql_error($new_connection));
return false;
}
$new_database = @mysql_select_db($a_New['DB'],$new_connection);
if(!$new_database){
$this->generate_error = msgPool::dbselect($a_New['DB'],@mysql_error($new_connection),
_("Abort saving entries to keep the database consistent."));
new log("debug","gofonreport/".get_class($this),"",array(),@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 = msgPool::dbconnect($a_Remove['SERVER'],@mysql_error($old_connection),
_("Abort saving entries to keep the database consistent."));
new log("debug","gofonreport/".get_class($this),"",array(),@mysql_error($old_connection));
return false;
}
$old_database = @mysql_select_db($a_Remove['DB'],$old_connection);
if(!$old_database){
$this->generate_error = msgPool::dbselect($a_Remove['DB'],@mysql_error($old_connection),
_("Abort saving entries to keep the database consistent."));
new log("debug","gofonreport/".get_class($this),"",array(),@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 an old entry, get callerid and remove voicemail and extensions
*/
if($old_connection){
$query = "SELECT id,name,callerid FROM ".$a_Remove['SIP_TABLE']." WHERE name='".$this->uid."';";
$rid = mysql_query($query,$old_connection);
@DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query, "Database query");
/* 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){
@DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$qry, "Database query");
if(!mysql_query($qry,$old_connection)){
trigger_error(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();
$query = "SELECT * FROM ".$a_New['SIP_TABLE']." WHERE name='".$this->uid."';\n";
$rid = mysql_query($query,$new_connection);
@DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query, "Database query");
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 */
$query_tmp = "SELECT * FROM ".$a_New['VOICE_TABLE']." WHERE customer_id='".$customer_id."';\n";
$rid = mysql_query($query_tmp,$new_connection);
@DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query_tmp, "Database query");
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($oldnums as $s_telenums){
$query[]= "DELETE FROM ".$a_New['EXT_TABLE']." WHERE exten=\"".$s_telenums."\";";
}
foreach($newnums as $s_telenums){
$query[]= "DELETE FROM ".$a_New['EXT_TABLE']." WHERE exten=\"".$s_telenums."\";";
}
foreach($query as $qry){
@DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$qry, "Database query");
if(!mysql_query($qry,$new_connection)){
trigger_error(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){
@DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query, "Database query");
if(!@mysql_query($query,$new_connection)){
$this->generate_error = msgPool::dbquery("GOfon",@mysql_error($old_connection));
return false;
}
}
}
}
@mysql_close($new_connection);
return true;
}
function execute()
{
/* Call parent execute */
plugin::execute();
/* Log view */
if($this->is_account && !$this->view_logged){
$this->view_logged = TRUE;
new log("view","users/".get_class($this),$this->dn);
}
$display = "";
$SkipWrite = (!isset($this->parent) || !$this->parent) && !session::is_set('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= " ".
msgPool::noValidExtension(_("Phone"))."";
$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;
}
/* Do we represent a valid account? */
if (!$this->is_account && $this->parent === NULL){
$display= "
".
msgPool::noValidExtension(_("Phone"))."";
$display.= back_to_main();
return($display);
}
$display= "";
/* Show tab dialog headers */
if (!$this->multiple_support_active && $this->parent !== NULL){
if ($this->is_account){
$display= $this->show_disable_header(_("Remove phone account"),
msgPool::featuresEnabled(_("Phone")));
} else {
if(empty($this->uid)){
$display= $this->show_enable_header(_("Create phone account"),
msgPool::featuresDisabled(_("Phone"),_("User uid")));
}else{
$display= $this->show_enable_header(_("Create phone account"),
msgPool::featuresDisabled(_("Phone")));
}
return ($display);
}
}
/* 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")){
msg_dialog::display(_("Error"), _("Selected macro is not available anymore!"), ERROR_DIALOG);
}
/* 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)){
msg_dialog::display(_("Configuration error"), msgPool::noserver(_("GOfon")), WARNING_DIALOG);
}
/* 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.= " |