X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fgofon%2Fphoneaccount%2Fclass_phoneAccount.inc;h=0cf7ac03a6684df4a90025ec05e5a1f02382b3cc;hb=9ba37d0ddd9297f3eded1e12d899e939d9f15555;hp=db58e20bcf781c744a770222ebd82714c645cdb2;hpb=b67538650592c986d05605efb630b21e40e4fbaf;p=gosa.git diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc index db58e20bc..0cf7ac03a 100644 --- a/plugins/gofon/phoneaccount/class_phoneAccount.inc +++ b/plugins/gofon/phoneaccount/class_phoneAccount.inc @@ -8,7 +8,7 @@ class phoneAccount extends plugin var $has_mailAccount= FALSE; /* Attributes */ - var $telephoneNumber = ""; + var $telephoneNumber = array(); var $goFonHardware = ""; var $goFonFormat = ""; var $goFonPIN = ""; @@ -19,7 +19,8 @@ class phoneAccount extends plugin var $hardware_list = array(); var $used_hardware = array(); var $goFonMacro = ""; - var $macro = 0; // Selected Macro + 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; @@ -33,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", "goFonFormat","uid","cn","mail", + 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'])){ @@ -69,7 +75,9 @@ 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'])) { + 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){ @@ -133,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']))){ @@ -212,13 +222,13 @@ class phoneAccount extends plugin } - /* 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 - */ + /* 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((isset($a_SETUP))&&(isset($a_SETUP['SERVER']))&&(isset($a_SETUP['LOGIN']))&&(isset($a_SETUP['PASSWORD']))){ + 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); @@ -229,7 +239,11 @@ class phoneAccount extends plugin } } } - @mysql_close($r_con) ; + $this->lastmacro=$this->macro; + + if(is_callable("mysql_close")&&(isset($r_con))&&($r_con)){ + @mysql_close($r_con) ; + } } @@ -237,10 +251,17 @@ class phoneAccount extends plugin function generate_mysql_entension_entries($save = false){ 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).\nYour Settings can't be saved to asterisk Database.")); + 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 @@ -251,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 ..) @@ -268,7 +289,7 @@ 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 @@ -307,6 +328,14 @@ class phoneAccount extends plugin * 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"))){ @@ -391,10 +420,10 @@ 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))&&(isset($this->parent->by_object['mailAccount']))&&($this->parent->by_object['mailAccount']->is_account==true)){ $s_mail = $this->parent->by_object['mailAccount']->mail; @@ -402,23 +431,22 @@ class phoneAccount extends plugin $s_mail = ""; } - // $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=".$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; - 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(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) ; @@ -455,9 +483,9 @@ class phoneAccount extends plugin } $SQL[]= "INSERT INTO ".$a_SETUP['VOICE_TABLE']." (`customer_id`,`context`,`mailbox`,`password`,`fullname`,`email`,`pager`) - VALUES ('".$this->phoneNumbers[$i_new_key]."', + VALUES ('".$newnums[$i_new_key]."', 'default', - '".$this->phoneNumbers[$i_new_key]."', + '".$newnums[$i_new_key]."', '".$this->goFonVoicemailPIN."', '".$CNname."', '".$s_mail."', @@ -469,7 +497,7 @@ class phoneAccount extends plugin $is_inserted_once = false; // Entension entries Hint / Dial / Goto - foreach($this->phoneNumbers as $s_telenums){ + foreach($newnums as $s_telenums){ if(!$is_inserted_once){ $is_inserted_once = true; @@ -534,7 +562,7 @@ class phoneAccount extends plugin // Perform queries ... foreach($SQL as $query){ if(!@mysql_query($query,$r_con)){ - print_red(_("Error while performing query ".mysql_error())); + print_red(_("Error while performing query:")." ".mysql_error()); return false; } } @@ -546,6 +574,9 @@ class phoneAccount extends plugin function execute() { + /* Call parent execute */ + plugin::execute(); + $display = ""; if(empty($this->macro)&&(!empty($this->goFonMacro))){ @@ -616,7 +647,7 @@ class phoneAccount extends plugin /* 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).\nYour Settings can't be saved to asterisk Database.")); + 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 */ @@ -627,21 +658,20 @@ class phoneAccount extends plugin $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); - + if(isset($this->cn)){ $string=preg_replace("/%cn/i",$this->cn,$string); } @@ -651,7 +681,9 @@ class phoneAccount extends plugin $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; } } @@ -671,7 +703,7 @@ class phoneAccount extends plugin switch ($type){ case "combo": - $str= "acl, "goFonMacro")." >"; foreach(split(":",$default) as $choice){ if($choosen==$choice){ $str.= "\n"; @@ -755,7 +787,7 @@ class phoneAccount extends plugin /* Transfer ACL's */ foreach($this->attributes as $val){ - $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + $smarty->assign($val."ACL", chkacl($this->acl,$val)); if(isset($this->$val)){ $smarty->assign($val,$this->$val); }else{ @@ -766,7 +798,7 @@ class phoneAccount extends plugin /* 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); } @@ -789,7 +821,7 @@ class phoneAccount extends plugin $smarty->assign ("hardware_list", $hl); /* Show main page */ - + $this->lastmacro = $this->macro; $display.= $smarty->fetch(get_template_path('generic.tpl', TRUE, dirname(__FILE__))); return($display); } @@ -853,8 +885,8 @@ 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.")); @@ -864,12 +896,11 @@ class phoneAccount extends plugin } } - - if((strlen($this->goFonPIN)!=4)){ - $message[]=(_("Phone PIN must be 4 characters long.")); + if((strlen($this->goFonPIN)<=0)){ + $message[]=(_("Phone PIN must be at least one character long.")); }else{ - if(preg_match("/[^0-9]/",$this->goFonPIN)){ - $message[]=(_("The specified phone PIN contains invalid characters, only numeric values are allowed here.")); + if(preg_match("/[^0-9a-z]/i",$this->goFonPIN)){ + $message[]=(_("The specified phone PIN contains invalid characters, only aphanumeric values are allowed here.")); } } @@ -931,17 +962,19 @@ class phoneAccount extends plugin /* 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)); } } @@ -985,17 +1018,18 @@ class phoneAccount extends plugin function remove_from_parent() { - + if(!$this->initially_was_account) return; + foreach($this->attributes as $key=>$val){ - if(in_array($val,array("uid","cn","mail"))){ + 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'])) { + 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 =""; @@ -1005,8 +1039,8 @@ class phoneAccount extends plugin // 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']); + 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; } @@ -1016,7 +1050,7 @@ class phoneAccount extends plugin // 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']); + print_red(sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER'])); gosa_log(@mysql_error()); return false; } @@ -1045,16 +1079,17 @@ class phoneAccount extends plugin $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; } } + }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']); @@ -1074,6 +1109,7 @@ class phoneAccount extends plugin $this->attrs['telephoneNumber']= array(); } + $ldap= $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); $ldap->search("(objectClass=goFonQueue)", array("member")); @@ -1087,12 +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 */ @mysql_close($r_con); - $this->handle_post_events('remove'); + $this->handle_post_events('remove',array("uid"=> $this->uid)); } @@ -1124,6 +1162,41 @@ 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: