X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fgofon%2Fphoneaccount%2Fclass_phoneAccount.inc;h=0cf7ac03a6684df4a90025ec05e5a1f02382b3cc;hb=9ba37d0ddd9297f3eded1e12d899e939d9f15555;hp=c55d63bd025300ffffc69f1ac59f8a3ce105fe20;hpb=92e404034ce30126d7e08bc781a1db6f37c00e0e;p=gosa.git diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc index c55d63bd0..0cf7ac03a 100644 --- a/plugins/gofon/phoneaccount/class_phoneAccount.inc +++ b/plugins/gofon/phoneaccount/class_phoneAccount.inc @@ -8,26 +8,25 @@ class phoneAccount extends plugin var $has_mailAccount= FALSE; /* Attributes */ - var $telephoneNumber = ""; + var $telephoneNumber = array(); var $goFonHardware = ""; - var $goFonForwarding = ""; var $goFonFormat = ""; var $goFonPIN = ""; + var $goFonVoicemailPIN = ""; var $goFonDeliveryMode = ""; var $phoneNumbers = array(); - var $forwarders = array(); var $mail = ""; var $hardware_list = array(); var $used_hardware = array(); var $goFonMacro = ""; - var $macro = 0; // Selected Macor + var $macro = 0; // Selected Macroi + var $lastmacro = ""; var $macros = array(); // List of macros for smarty select box var $macroarray = array(); // All needed macro informations var $macrostillavailable = false; var $generate_error = ""; - var $a_old_telenums = array(); - var $uid; - var $cn; + var $a_old_telenums = array(); + var $goFonPINVoice = ""; /* CLI vars */ var $cli_summary = "Manage users phone account"; @@ -35,13 +34,18 @@ class phoneAccount extends plugin var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); /* attribute list for save action */ - var $attributes = array("goFonDeliveryMode", "goFonForwarding", "goFonFormat", - "goFonHardware", "goFonPIN", "telephoneNumber", "goFonMacro","macro"); + 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 $objectclasses= array("goFonAccount"); - function phoneAccount ($config, $dn= NULL) + var $uid; + + function phoneAccount ($config, $dn= NULL, $parent= NULL) { - plugin::plugin ($config, $dn); + plugin::plugin ($config, $dn, $parent); /* Set phone hardware */ if (!isset($this->attrs['goFonHardware'])){ @@ -60,15 +64,6 @@ class phoneAccount extends plugin $this->phoneNumbers[$number]= $number; } } - /* Assemble forwarders */ - if (isset($this->attrs['goFonForwarding'])){ - for ($i= 0; $i<$this->attrs['goFonForwarding']['count']; $i++){ - list($num, $v1, $v2) =split(';', $this->attrs['goFonForwarding'][$i]); - $this->forwarders[$num]= "$v1;$v2"; - } - } else { - $this->forwarders= array(""); - } /* Set up has_mailAccount */ if (isset($this->attrs['objectClass'])){ @@ -77,6 +72,34 @@ class phoneAccount extends plugin } } + $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']; + $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; + } + } + } /* Load hardware list */ $ldap= $this->config->get_ldap_link(); @@ -93,10 +116,6 @@ class phoneAccount extends plugin } - /* Prepare templating */ - $smarty= get_smarty(); - - /* Perform search, to get Macro Parameters,Name,Dn,Displayname etc*/ $ldap->search("(objectClass=goFonMacro)", array("*")); @@ -122,7 +141,9 @@ class phoneAccount extends plugin } /* Parse macro data, unset count for parameterarrays */ - unset($attrs['goFonMacroParameter']['count']); + if (isset($attrs['goFonMacroParameter']['count'])){ + unset($attrs['goFonMacroParameter']['count']); + } /* Go through available parameters and parse all attributes, like parametername, type, default ...*/ if((isset($attrs['goFonMacroParameter']))&&(is_array($attrs['goFonMacroParameter']))){ @@ -195,14 +216,52 @@ class phoneAccount extends plugin $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($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($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."'")); + + 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) ; + } + } + // Generate MySQL Syntax function generate_mysql_entension_entries($save = false){ + if(!isset($_SESSION['config']->data['SERVERS']['FON'])){ + 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); + } + + 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); + } + // Get Configuration for Mysql database Server $a_SETUP = $_SESSION['config']->data['SERVERS']['FON']; // DB Configuration $s_parameter = ""; // Contains paramter for selected Macro @@ -213,7 +272,7 @@ class phoneAccount extends plugin $s_ip = NULL; // Contains ip for Sip entry $s_host = NULL; // Contains host for Sip entry - $s_qualify = NULL; // Qualify entry + $s_qualify = "yes"; // Qualify entry $s_pin = NULL; // Entry for secret $s_type = NULL; // Entry for phone type (friend , peer ..) @@ -230,11 +289,11 @@ class phoneAccount extends plugin $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 + $i_is_accounted = false; // Ensure that extension entry, for name to number is only once in table // Connect to DB server - $r_con = @mysql_connect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']); + $r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']); // Check if we are connected correctly if(!$r_con){ @@ -264,13 +323,20 @@ class phoneAccount extends plugin return false; } - - /* If Save == true, we should save something. * Generate SQL, for drop of old entries - * Generate SQL, for insert of new 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]; @@ -308,7 +374,7 @@ class phoneAccount extends plugin $sip_data_array['amaflags'] = NULL; $sip_data_array['callgroup'] = NULL; $sip_data_array['callerid'] = ""; - $sip_data_array['canreinvite'] = "yes"; + $sip_data_array['canreinvite'] = "no"; $sip_data_array['context'] = "default"; $sip_data_array['defaultip'] = NULL; $sip_data_array['fromuser'] = NULL; @@ -328,7 +394,7 @@ class phoneAccount extends plugin $sip_data_array['restrictcid'] = "n"; $sip_data_array['rtptimeout'] = NULL; $sip_data_array['rtpholdtimeout']=NULL; - $sip_data_array['secret'] = $s_pin; + $sip_data_array['secret'] = $this->goFonPIN; $sip_data_array['type'] = $s_type ; $sip_data_array['username'] = $this->uid; $sip_data_array['disallow'] = NULL; @@ -354,12 +420,12 @@ class phoneAccount extends plugin // Create new SIP entry ... $sip_entry = $sip_data_array; - reset($this->phoneNumbers); - $i_new_key = key($this->phoneNumbers); - $sip_entry['callerid'] =$this->phoneNumbers[$i_new_key]; - $sip_entry['mailbox'] =$this->phoneNumbers[$i_new_key]; + 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->by_object['mailAccount']->mail)){ + 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 = ""; @@ -369,7 +435,24 @@ class phoneAccount extends plugin $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=".$this->phoneNumbers[$i_new_key].";"; + $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.";"; + } + } + } + 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){ @@ -384,37 +467,60 @@ class phoneAccount extends plugin // Append SIP Entry $SQL[] ="INSERT INTO ".$a_SETUP['SIP_TABLE']." (".$s_sip_keys.") VALUES (".$s_sip_values.");"; - // Delete old entries - $b_first_deleted =false; - foreach($this->a_old_telenums 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.";"; - } + /* 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; } - $SQL[]= "INSERT INTO ".$a_SETUP['VOICE_TABLE']." - (`customer_id`,`context`,`mailbox`,`password`,`fullname`,`email`,`pager`) - VALUES - ('".$this->phoneNumbers[$i_new_key]."','default','".$this->phoneNumbers[$i_new_key]."','".$this->goFonPIN."','".$this->sn."','".$s_mail."','');"; + if((isset($this->parent->by_object['user']->cn))&&(!empty($this->parent->by_object['user']->cn))){ + $this->cn = $this->parent->by_object['user']->cn; + } - $i_is_accounted=false; + if((!isset($this->cn))||(empty($this->cn))){ + $CNname= $this->uid; + }else{ + $CNname= $this->cn; + } + $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; + // Entension entries Hint / Dial / Goto - foreach($this->phoneNumbers as $s_telenums){ - // Entry to call by name - $s_entry_name['context'] = 'GOsa'; - $s_entry_name['exten'] = $this->uid; - $s_entry_name['priority'] = 1; - $s_entry_name['app'] = 'Goto'; - $s_entry_name['appdata'] = $s_telenums."|1"; - - // hint - $s_entry_hint['context'] = 'GOsa'; - $s_entry_hint['exten'] = $s_telenums; - $s_entry_hint['priority'] = 'hint'; - $s_entry_hint['app'] = 'SIP/'.$this->uid; + 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]['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"){ @@ -424,78 +530,98 @@ class phoneAccount extends plugin $s_par = $macroname."|".$s_parameter; }else{ $s_app = "Dial"; - $s_par = 'SIP/'.$this->uid; + $s_par = 'SIP/'.$this->uid."|20|r"; } - // Entry to call by number - $s_entry_phone['context'] = 'GOsa'; - $s_entry_phone['exten'] = $s_telenums; - $s_entry_phone['priority'] = 1; - $s_entry_phone['app'] = $s_app; - $s_entry_phone['appdata'] = $s_par; - - // append name entry only once - if(!$i_is_accounted){ - $i_is_accounted = true; - $entries[]=array("hint"=>$s_entry_hint,"phone"=>$s_entry_phone,"name"=>$s_entry_name); - }else{ - $entries[]=array("hint"=>$s_entry_hint,"phone"=>$s_entry_phone); - } + $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($entries as $num => $val){ - foreach($val as $entr){ - $SQL_syn = "INSERT INTO ".$a_SETUP['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[] =$SQL_syn; - $SQL_syn =""; + foreach($EXT as $entr){ + $SQL_syn = "INSERT INTO ".$a_SETUP['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[] =$SQL_syn; + $SQL_syn =""; } // Perform queries ... foreach($SQL as $query){ - if(!mysql_query($query,$r_con)){ - print_red(_("Error while performing query ".mysql_error())); + if(!@mysql_query($query,$r_con)){ + print_red(_("Error while performing query:")." ".mysql_error()); return false; } } } + @mysql_close($r_con); return true; } + function execute() + { + /* Call parent execute */ + plugin::execute(); + $display = ""; + 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 makro 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); - - - function execute() - { - /* force postmodify event, to restart phones */ - - $this->parent->by_object['user']->is_modified=TRUE; - $this->is_modified=TRUE; - - $this->uid = $this->parent->by_object['user']->uid; - $this->cn = $this->parent->by_object['user']->cn; - + /* 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'])){ @@ -507,48 +633,57 @@ class phoneAccount extends plugin $this->macro ="none"; } + /* Prepare templating */ + $smarty= get_smarty(); + /* tell user that the pluging selected is no longer available*/ if((!$this->macrostillavailable)&&($this->macro!="none")){ - print_red(_("The macro you selected in the past, is no longer available for you, please choose another one.")); + print_red(_("The macro you selected, is no longer available for you, please choose another one.")); } - /* Prepare templating */ - $smarty= get_smarty(); - /* Assing macroselectbox values */ $smarty->assign("macros",$this->macros); $smarty->assign("macro", $this->macro); + /* check if there is a FON server created */ + if(!isset($_SESSION['config']->data['SERVERS']['FON'])){ + 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 */ if(!isset($this->macroarray[$this->macro])){ $macrotab=""; }else{ - $macrotab =""; + $macrotab ="
"; /* for every single parameter-> display textfile,combo, or true false switch*/ + foreach($this->phoneNumbers as $phonenum){ + $tmp[] = $phonenum; + } - /* Automatic fill out */ - if(isset($_POST['fillout'])){ - - foreach($this->phoneNumbers as $phonenum){ - $tmp[] = $phonenum; - } - + + + if($this->macro != $this->lastmacro){ /* Go through all params */ foreach($this->macroarray[$this->macro] as $key => $paras){ $string = $paras['default']; $string=preg_replace("/%uid/i",$this->uid,$string); - $string=preg_replace("/%cn/i",$this->cn,$string); + + if(isset($this->cn)){ + $string=preg_replace("/%cn/i",$this->cn,$string); + } for($i = 0 ; $i < 10; $i++){ if(isset($tmp[$i])){ $string = preg_replace("/%telephoneNumber_".($i+1)."/i",$tmp[$i],$string); } } - + if(isset($tmp[0])){ + $string = preg_replace("/%telephoneNumber/i",$tmp[0],$string); + } $this->macroarray[$this->macro][$key]['choosen']=$string; } } @@ -568,7 +703,7 @@ class phoneAccount extends plugin switch ($type){ case "combo": - $str= "acl, "goFonMacro")." >"; foreach(split(":",$default) as $choice){ if($choosen==$choice){ $str.= "\n"; @@ -577,7 +712,7 @@ class phoneAccount extends plugin } } $str.=""; - $macrotab.= ""; - } - $smarty->assign("forwarder_list", $forwarder_list); - /* Show main page */ + $this->lastmacro = $this->macro; $display.= $smarty->fetch(get_template_path('generic.tpl', TRUE, dirname(__FILE__))); return($display); } @@ -739,17 +845,6 @@ class phoneAccount extends plugin $this->goFonDeliveryMode= $tmp; } - /* Save forwarding numbers and timeouts */ - if (chkacl ($this->acl, "goFonForwarder") == ""){ - foreach ($this->forwarders as $nr => $fw){ - $tmp= $_POST["fwn$nr"].";".$_POST["fwt$nr"]; - if ($this->forwarders[$nr] != $tmp){ - $this->is_modified= TRUE; - } - $this->forwarders[$nr]= $tmp; - } - } - /* Every macro in the select box are available */ if((isset($_POST['macro']))){ $this->macrostillavailable=true; @@ -767,25 +862,7 @@ class phoneAccount extends plugin if(isset($this->macroarray[$this->macro])){ foreach($this->macroarray[$this->macro] as $key => $paras){ if(isset($_POST[$paras['var']])){ - // $par = $this->macroarray[$this->macro][$key]; - // $string = ""; - // if(preg_match("/.*%telephoneNumber_.*/",$par['default'])){ - // $string = $par['default']; - // foreach($nummsinorder as $nummsinorderkey=> $nummsinorderval){ - // $string = (str_replace("%telephoneNumber_".($nummsinorderkey+1),$nummsinorderval,$string)); - // } - // } - - // if(preg_match("/.*%uid.*/",$par['default'])){ - // if(empty($string)) $string = $par['default']; - // $string = str_replace("%uid",$this->uid,$string); - // } - - // if(!empty($string)){ - // $this->macroarray[$this->macro][$key]['choosen'] = $string; - // }else{ $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 @@ -808,8 +885,24 @@ class phoneAccount extends plugin function check() { - /* Reset message array */ - $message= array(); + /* Call common method to give check the hook */ + $message= plugin::check(); + + if((strlen($this->goFonVoicemailPIN)==0)||(strlen($this->goFonVoicemailPIN)>4)){ + $message[]=(_("Voicemail PIN must be between 1-4 characters.")); + }else{ + if(preg_match("/[^0-9]/",$this->goFonVoicemailPIN)){ + $message[]=(_("The specified Voicemail PIN contains invalid characters, only numeric values are allowed here.")); + } + } + + if((strlen($this->goFonPIN)<=0)){ + $message[]=(_("Phone PIN must be at least one character long.")); + }else{ + if(preg_match("/[^0-9a-z]/i",$this->goFonPIN)){ + $message[]=(_("The specified phone PIN contains invalid characters, only aphanumeric values are allowed here.")); + } + } if(!$this->generate_mysql_entension_entries()){ $message[] = $this->generate_error; @@ -820,34 +913,6 @@ class phoneAccount extends plugin $message[]= sprintf(_("You need to specify at least one phone number!")); } - if(($this->goFonPIN)==""){ - $message[]= sprintf(_("You need to specify a Phone PIN.")); - }else{ - if(strcmp ((int)($this->goFonPIN),($this->goFonPIN))){ - $message[] = sprintf(_("The given PIN is not valid, only numbers are allowed for this type.")); - }elseif(strlen($this->goFonPIN) < 4){ - $message[] = sprintf(_("The given PIN is too short")); - } - - } - /* Check timestamps and phonenumbers */ - foreach ($this->forwarders as $fw){ - - /* Skip empty values */ - if ($fw == ";"){ - continue; - } - - /* Check */ - list($number, $timeout)= split(";", $fw); - if (!is_phone_nr($number)){ - $message[]= sprintf(_("The number '%s' is no valid phone number!"), $number); - } - if (!is_id($timeout)){ - $message[]= sprintf(_("The timeout '%s' contains invalid characters!"), $timeout); - } - } - /* check for ! in any parameter setting*/ if(isset($this->macroarray[$this->macro])){ foreach($this->macroarray[$this->macro] as $val){ @@ -870,10 +935,6 @@ class phoneAccount extends plugin foreach ($this->phoneNumbers as $number){ $this->attrs['telephoneNumber'][]= $number; } - $this->attrs['goFonForwarding']= array(); - foreach ($this->forwarders as $index => $number){ - $this->attrs['goFonForwarding'][]= "$index;$number"; - } /* Save settings, or remove goFonMacro attribute*/ if($this->macro!="none"){ @@ -888,25 +949,32 @@ class phoneAccount extends plugin } unset($this->attrs['macro']) ; + $this->attrs['goFonForwarding']=array(); + $this->generate_mysql_entension_entries(true); if($this->attrs['goFonMacro']==""){ $this->attrs['goFonMacro']=array(); } + + unset($this->attrs['cn']); + /* Write back to ldap */ $ldap= $this->config->get_ldap_link(); $ldap->cd($this->dn); - $ldap->modify($this->attrs); - show_ldap_error($ldap->get_error()); + $this->cleanup(); + $ldap->modify ($this->attrs); + + show_ldap_error($ldap->get_error(), _("Saving phone account failed")); /* Optionally execute a command after we're done */ if ($this->initially_was_account == $this->is_account){ if ($this->is_modified){ - $this->handle_post_events("modify"); + $this->handle_post_events("modify",array("uid" => $this->uid)); } } else { - $this->handle_post_events("add"); + $this->handle_post_events("add",array("uid" => $this->uid)); } } @@ -945,75 +1013,83 @@ class phoneAccount extends plugin $this->phoneNumbers[$number]= $number; } } - - /* Assemble forwarders */ - if (isset($this->attrs['goFonForwarding'])){ - for ($i= 0; $i<$this->attrs['goFonForwarding']['count']; $i++){ - list($num, $v1, $v2) =split(';', $this->attrs['goFonForwarding'][$i]); - $this->forwarders[$num]= "$v1;$v2"; - } - } else { - $this->forwarders= array(""); - } } function remove_from_parent() { - // Get Configuration for Mysql database Server - $a_SETUP = $_SESSION['config']->data['SERVERS']['FON']; - $s_parameter =""; + if(!$this->initially_was_account) return; - // Connect to DB server - $r_con = @mysql_connect($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; + foreach($this->attributes as $key=>$val){ + if(in_array($val,array("uid","cn"))){ + unset($this->attributes[$key]); + 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']; + $s_parameter =""; + + // 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){ + print_red(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; + } - // Select database for Extensions - $db = @mysql_select_db($a_SETUP['DB'],$r_con); + // Select database for Extensions + $db = @mysql_select_db($a_SETUP['DB'],$r_con); - // Test if we have the database selected correctly - 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; - } + // Test if we have the database selected correctly + if(!$db){ + print_red(sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER'])); + gosa_log(@mysql_error()); + return false; + } - $SQL=""; + $SQL=""; - /* If deletion starts from userslist, cn uid are not set */ - $this->uid = $this->parent->by_object['user']->uid; - $this->cn = $this->parent->by_object['user']->cn; + /* 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; + } - $first_num = false; - // Delete old entries - foreach($this->a_old_telenums as $s_telenums){ - if(!$first_num){ - $first_num = $s_telenums; + if((isset($this->parent->by_object['user']->cn))&&(!empty($this->parent->by_object['user']->cn))){ + $this->cn = $this->parent->by_object['user']->cn; } - $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$s_telenums."';\n"; - } - $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id='".$first_num."';"; - $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->uid."';\n"; - $SQL[] = "DELETE FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';\n"; + $first_num = false; + // Delete old entries + foreach($this->a_old_telenums as $s_telenums){ + if(!$first_num){ + $first_num = $s_telenums; + } + $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$s_telenums."';\n"; + } + $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id='".$first_num."';"; + $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->uid."';\n"; + $SQL[] = "DELETE FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';\n"; - foreach($SQL as $query){ - if(!mysql_query($query,$r_con)){ - print_red(_("Stop".mysql_error())); - return false; + foreach($SQL as $query){ + if(!@mysql_query($query,$r_con)){ + print_red(_("Stop".mysql_error())); + return false; + } } + }else{ + print_red(_("Can't remove phone account, the mysql extension is not present in php configuration.")); + return false; } - - /* unset macro attr, it will cause an error */ $tmp = array_flip($this->attributes); unset($tmp['macro']); @@ -1028,11 +1104,12 @@ class phoneAccount extends plugin /* Just keep one phone number */ if (count($this->telephoneNumber) && $this->telephoneNumber != ""){ - $this->attrs['telephoneNumber']= $this->telephoneNumber[0]; + $this->attrs['telephoneNumber']= $this->telephoneNumber; } else { $this->attrs['telephoneNumber']= array(); } + $ldap= $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); $ldap->search("(objectClass=goFonQueue)", array("member")); @@ -1046,11 +1123,14 @@ class phoneAccount extends plugin } } $ldap->cd($this->dn); - $ldap->modify($this->attrs); - show_ldap_error($ldap->get_error()); + $this->cleanup(); + $ldap->modify ($this->attrs); + + show_ldap_error($ldap->get_error(), _("Removing phone account failed")); /* Optionally execute a command after we're done */ - $this->handle_post_events('remove'); + @mysql_close($r_con); + $this->handle_post_events('remove',array("uid"=> $this->uid)); } @@ -1060,7 +1140,7 @@ class phoneAccount extends plugin { $ldap= $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); - $ldap->search("(|(objectClass=goFonAccount)(objectClass=goFonQueue))", array("telephoneNumber","cn","uid")); + $ldap->search("(|(objectClass=goFonAccount)(objectClass=goFonQueue)(objectClass=goFonConference))", array("telephoneNumber","cn","uid")); while($attrs = $ldap->fetch()) { unset($attrs['telephoneNumber']['count']); foreach($attrs['telephoneNumber'] as $tele){ @@ -1084,6 +1164,39 @@ class phoneAccount extends plugin } + /* Create phoneAccount part of copy & paste dialog */ + function getCopyDialog() + { + if(!$this->is_account) return(""); + $smarty = get_smarty(); + if (!count($this->phoneNumbers)){ + $smarty->assign ("phoneNumbers", array("")); + } else { + $smarty->assign ("phoneNumbers", $this->phoneNumbers); + } + + $smarty->assign("goFonVoicemailPIN",$this->goFonVoicemailPIN); + $smarty->assign("goFonPIN",$this->goFonPIN); + + $display= $smarty->fetch(get_template_path('paste_generic.tpl', TRUE, dirname(__FILE__))); + $ret =array(); + $ret['string'] = $display; + $ret['status'] = ""; + return($ret); + } + + /* Save posts from copy & paste dialog dialog */ + function saveCopyDialog() + { + if(!$this->is_account) return; + $this->execute(); + if(isset($_POST['goFonVoicemailPIN'])) { + $this->goFonVoicemailPIN = $_POST['goFonVoicemailPIN']; + } + if(isset($_POST['goFonPIN'])){ + $this->goFonPIN = $_POST['goFonPIN']; + } + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
$name$str"; + $macrotab.= "".base64_decode($name)."$str"; break; case "bool": @@ -586,12 +721,12 @@ class phoneAccount extends plugin }else{ $str="\nacl, "goFonMacro").">"; } - $macrotab.= "$str $name"; + $macrotab.= "$str ".base64_decode($name).""; break; case "string": $str="acl, "goFonMacro")." style='width:340px;'>"; - $macrotab.= "$name$str"; + $macrotab.= "".base64_decode($name)."$str"; break; } @@ -650,28 +785,20 @@ class phoneAccount extends plugin } } - /* Check for forwarding action */ - foreach ($this->forwarders as $nr => $fw){ - - /* Buttons pressed? */ - if (isset($_POST["add_fw$nr"])){ - $this->forwarders= $this->insert_after("", $nr, $this->forwarders); - } - if (isset($_POST["remove_fw$nr"])){ - unset($this->forwarders[$nr]); - } - } - /* Transfer ACL's */ foreach($this->attributes as $val){ - $smarty->assign($val."ACL", chkacl($this->acl, "$val")); - $smarty->assign($val,$this->$val); + $smarty->assign($val."ACL", chkacl($this->acl,$val)); + if(isset($this->$val)){ + $smarty->assign($val,$this->$val); + }else{ + $smarty->assign($val,""); + } } /* 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); } @@ -693,29 +820,8 @@ class phoneAccount extends plugin $hl.= "\n"; $smarty->assign ("hardware_list", $hl); - /* Generate forwarder view */ - $forwarder_list=""; - $acl= chkacl($this->acl, "goFonForwaring"); - foreach ($this->forwarders as $nr => $fw){ - if ($fw == ""){ - $number= ""; $timeout= ""; - } else { - list($number, $timeout)= split(";", $fw); - } - $forwarder_list.= "
"; - $forwarder_list.= ""; - $forwarder_list.= ""; - $forwarder_list.= ""; - $forwarder_list.= ""; - $forwarder_list.= ""; - if (count($this->forwarders) > 1){ - $forwarder_list.= ""; - } - $forwarder_list.= "