X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fgofon%2Fphoneaccount%2Fclass_phoneAccount.inc;h=0cf7ac03a6684df4a90025ec05e5a1f02382b3cc;hb=9ba37d0ddd9297f3eded1e12d899e939d9f15555;hp=dde34df58f5d077ba39a2da6e836dd36c39cfcec;hpb=c9f785e1901c7f4672e806d3eb2f1fe6d1ee0558;p=gosa.git
diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc
index dde34df58..0cf7ac03a 100644
--- a/plugins/gofon/phoneaccount/class_phoneAccount.inc
+++ b/plugins/gofon/phoneaccount/class_phoneAccount.inc
@@ -8,17 +8,19 @@ class phoneAccount extends plugin
var $has_mailAccount= FALSE;
/* Attributes */
- var $telephoneNumber = "";
+ var $telephoneNumber = array();
var $goFonHardware = "";
var $goFonFormat = "";
var $goFonPIN = "";
+ var $goFonVoicemailPIN = "";
var $goFonDeliveryMode = "";
var $phoneNumbers = array();
var $mail = "";
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;
@@ -32,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",
- "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'])){
@@ -65,35 +72,35 @@ class phoneAccount extends plugin
}
}
- $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= 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;
- }
+ 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;
+ $first = false;
+ foreach($this->phoneNumbers as $key => $val){
+ if(!$first){
+ $first = $key;
+ }
}
}
- $attrs = @mysql_fetch_row(@mysql_query("SELECT * FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$this->phoneNumbers[$first].";"));
- if($attrs){
- $this->goFonPINVoice = $attrs[4];
- }else{
- $this->goFonPINVoice = false;
- }
-
/* Load hardware list */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
@@ -134,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']))){
@@ -207,12 +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
@@ -223,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 ..)
@@ -240,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){
@@ -279,6 +328,15 @@ 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"))){
$s_ip = $a_ldap_attrs['goFonDefaultIP'][0];
@@ -316,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;
@@ -336,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;
@@ -362,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;
@@ -377,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){
@@ -392,19 +467,14 @@ 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;
}
- if(empty($this->goFonPINVoice)){
- $this->goFonPINVoice = $this->goFonPIN;
- }
+ if((isset($this->parent->by_object['user']->cn))&&(!empty($this->parent->by_object['user']->cn))){
+ $this->cn = $this->parent->by_object['user']->cn;
+ }
if((!isset($this->cn))||(empty($this->cn))){
$CNname= $this->uid;
@@ -412,25 +482,32 @@ class phoneAccount extends plugin
$CNname= $this->cn;
}
- $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->goFonPINVoice."','".$CNname."','".$s_mail."','');";
-
+ $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){
-
- /* Mapping : Name TO Number*/
- $EXT[$i]['context'] = 'GOsa';
- $EXT[$i]['exten'] = $this->uid;
- $EXT[$i]['priority']= 1;
- $EXT[$i]['app'] = "Goto";
- $EXT[$i]['appdata'] = $s_telenums."|1";
- $i ++;
+ 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;
@@ -438,12 +515,12 @@ class phoneAccount extends plugin
$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 ++;
+ //$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"){
@@ -453,12 +530,12 @@ 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";
}
$EXT[$i]['context'] = 'GOsa';
$EXT[$i]['exten'] = $s_telenums;
- $EXT[$i]['priority']= 2;
+ $EXT[$i]['priority']= 1;
$EXT[$i]['app'] = $s_app;
$EXT[$i]['appdata'] = $s_par;
$i ++;
@@ -484,18 +561,60 @@ class phoneAccount extends plugin
// 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);
+
+ /* 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= " ".
@@ -514,23 +633,23 @@ class phoneAccount extends plugin
$this->macro ="none";
}
- /* Set new Voicemail password */
- if(isset($_POST['goFonPINVoiceSet'])){
- $this->goFonPINVoice = $_POST['goFonPIN'];
- }
+ /* 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, 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="";
@@ -539,28 +658,32 @@ 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);
- $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;
}
}
@@ -580,7 +703,7 @@ class phoneAccount extends plugin
switch ($type){
case "combo":
- $str= "