Code

Modified Translation Strings.
[gosa.git] / plugins / gofon / phoneaccount / class_phoneAccount.inc
index 5ab022af63a3c54d0973ac5fffb8dd0bf8407445..819b5b2da46c90e7cf98e978c41d8d63e0d55bd8 100644 (file)
@@ -12,20 +12,20 @@ class phoneAccount extends plugin
   var $goFonHardware          = "";
   var $goFonFormat            = "";
   var $goFonPIN               = "";
+  var $goFonVoicePIN          = "";
   var $goFonDeliveryMode      = "";
   var $phoneNumbers           = array();
   var $mail                   = "";
   var $hardware_list          = array();
   var $used_hardware          = array();
   var $goFonMacro             = "";
-  var $macro                  = 0;              // Selected Macor
+  var $macro                  = 0;              // Selected Macro
   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";
@@ -33,8 +33,8 @@ 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",
-      "goFonHardware", "goFonPIN", "telephoneNumber", "goFonMacro","macro");
+  var $attributes             = array("goFonDeliveryMode", "goFonFormat","uid","cn","mail",
+      "goFonHardware","goFonPIN", "telephoneNumber", "goFonMacro","macro");
   var $objectclasses= array("goFonAccount");
 
   function phoneAccount ($config, $dn= NULL)
@@ -66,6 +66,34 @@ 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['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;
+      }
+    }
+
+    $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();
@@ -82,10 +110,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("*"));
 
@@ -184,9 +208,32 @@ 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;
+    }
+
+    /* Set PINs to false, 
+     *  to avoid setting them before we explicitly 
+     *  pressed set voicemail PIN or Phone PIN  
+     */
 
+    if(count(split("\|",$this->goFonPIN))==2){
+      $tmp = split("\|",$this->goFonPIN);
+      $this->goFonPIN       = $tmp[0]; 
+      $this->goFonVoicePIN  = $tmp[1]; 
+    }else{
+      $this->goFonVoicePIN  = $this->goFonPIN;
+    }
+    // Unset goFonPIN, to avoid save_object for this attribute 
+    foreach($this->attributes as $key=>$val){
+      if($val == "goFonPIN"){
+        unset($this->attributes[$key]);
+      }    
+    }
+
+  }
 
 
   // Generate MySQL Syntax
@@ -253,13 +300,38 @@ class phoneAccount extends plugin
       return false;
     }
 
-
-
+    $existence = @mysql_fetch_row(@mysql_query(  "SELECT * FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';"));
+    
+    if(!$existence&&((empty($this->goFonPIN))||(empty($this->goFonVoicePIN)))){
+      $this->generate_error = _("You are currently creating a new phone account, please specify a value for phone PIN and voice PIN.");  
+      return(false);
+    }
+  
+    if((empty($this->goFonPIN))&&(empty($existence[27]))){
+      $this->generate_error = _("The PIN attribute is missing in database entry. Please assign a valid phone PIN.");  
+      return(false);
+    }
+  
+    if(isset($existence[15])){
+      $voice = @mysql_fetch_row(@mysql_query("SELECT password FROM ".$a_SETUP['VOICE_TABLE']." where customer_id='".$existence[15]."'"));
+      if((empty($this->goFonVoicePIN))&&(empty($voice[0]))){
+        $this->generate_error = _("The voice PIN attribute is missing in database entry. Please assign a valid voice PIN.");
+        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){
+
+      /* Get old voice passwword if no new isset */
+      if($this->goFonPIN==false){
+        $pin = @mysql_fetch_row(@mysql_query("SELECT secret FROM ".$a_SETUP['SIP_TABLE']." where name='".$this->uid."'"));
+        $this->goFonPIN = $pin[0];
+      }
+
       // Attribute GoFonDefaultIP set ?
       if(((isset($a_ldap_attrs['goFonDefaultIP'][0]))&&($a_ldap_attrs['goFonDefaultIP'][0] != "dynamic"))){
         $s_ip       = $a_ldap_attrs['goFonDefaultIP'][0];
@@ -297,7 +369,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;
@@ -348,12 +420,25 @@ class phoneAccount extends plugin
       $sip_entry['callerid']  =$this->phoneNumbers[$i_new_key];
       $sip_entry['mailbox']   =$this->phoneNumbers[$i_new_key];
 
-      if((isset($this->parent->by_object['mailAccount']->mail))&&($this->parent->by_object['mailAccount']->is_account==true)){
+      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 old voice passwword if no new isset */
+      if($this->goFonVoicePIN==false){
+        $voice = @mysql_fetch_row(@mysql_query("SELECT password FROM ".$a_SETUP['VOICE_TABLE']." where customer_id=".$this->phoneNumbers[$i_new_key].""));
+        $this->goFonVoicePIN = $voice[0];
+      }
+      
+      /* Get old voice passwword if no new isset */
+      if($this->goFonPIN==false){
+        $pin = @mysql_fetch_row(@mysql_query("SELECT secret FROM ".$a_SETUP['SIP_TABLE']." where name='".$this->uid."'"));
+        $this->goFonPIN = $pin[0];
+      }
+    
       // $SQL contains all queries
       $SQL   = array();
       $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->uid."';\n";
@@ -383,27 +468,60 @@ 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]."','default','".$this->phoneNumbers[$i_new_key]."','".$this->goFonPIN."','".$this->sn."','".$s_mail."','');";
+      if(empty($this->goFonPINVoice)){
+        $this->goFonPINVoice = $this->goFonPIN;
+      } 
 
-      $i_is_accounted=false;
+      /* 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;
+      }
+
+      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   ('".$this->phoneNumbers[$i_new_key]."',
+                    'default',
+                    '".$this->phoneNumbers[$i_new_key]."',
+                    '".$this->goFonVoicePIN."',
+                    '".$CNname."',
+                    '".$s_mail."',
+                    '');";
+      $i_is_accounted=false;
+    
+      $i = 0; 
+  
       // 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;
+
+        /* 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 ++;  
+        /* 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"){ 
@@ -416,44 +534,35 @@ class phoneAccount extends plugin
           $s_par = 'SIP/'.$this->uid;
         }
 
-        // 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']= 2;
+        $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)){
+        if(!@mysql_query($query,$r_con)){
           print_red(_("Error while performing query ".mysql_error()));
           return false;
         }
@@ -463,28 +572,15 @@ class phoneAccount extends plugin
   }
 
 
-
-
-
-
-
-
-
-
-
-
-
-
   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;
-
+    /* Do we represent a valid account? */
+    if (!$this->is_account && $this->parent == NULL){
+      $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
+        _("This account has no phone extensions.")."</b>";
+      $display.= back_to_main();
+      return ($display);
+    }
 
     /* Do we need to flip is_account state? */
     if (isset($_POST['modify_state'])){
@@ -496,9 +592,33 @@ class phoneAccount extends plugin
       $this->macro ="none";
     }
 
+    if(isset($_POST['goFonVoicePINSet'])){
+      if((strlen($_POST['goFonVoicePIN'])==0)||(strlen($_POST['goFonVoicePIN'])>4)){
+        print_red(_("Voicemail PIN must be between 1-4 characters."));
+      }else{
+        if(preg_match("/[^0-9]/",$_POST['goFonVoicePIN'])){
+          print_red(_("The specified Voicemail PIN contains invalid characters, only numeric values are allowed here."));
+        }else{
+          $this->goFonVoicePIN=$_POST['goFonVoicePIN'];
+        }
+      }
+    }
+
+    if(isset($_POST['goFonPINSet'])){
+      if((strlen($_POST['goFonPIN'])!=4)){
+        print_red(_("Phone PIN must be 4 characters long."));
+      }else{
+        if(preg_match("/[^0-9]/",$_POST['goFonVoicePIN'])){
+          print_red(_("The specified phone PIN contains invalid characters, only numeric values are allowed here."));
+        }else{
+          $this->goFonPIN=$_POST['goFonPIN'];
+        }
+      }
+    }
+
     /* 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 */
@@ -530,7 +650,10 @@ class phoneAccount extends plugin
           $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])){
@@ -642,7 +765,11 @@ class phoneAccount extends plugin
     /* Transfer ACL's */
     foreach($this->attributes as $val){
       $smarty->assign($val."ACL", chkacl($this->acl, "$val"));
-      $smarty->assign($val,$this->$val);
+      if(isset($this->$val)){
+        $smarty->assign($val,$this->$val);
+      }else{
+        $smarty->assign($val,"");
+      }
     }
 
     /* Fill arrays */
@@ -671,6 +798,13 @@ class phoneAccount extends plugin
     $smarty->assign ("hardware_list", $hl);
 
     /* Show main page */
+
+    foreach(array("goFonVoicePIN","goFonPIN") as $attrs ){
+      $smarty->assign($attrs,$this->$attrs);
+      $smarty->assign($attrs."ACL",chkacl($this->acl,$attrs));
+    }
+
+
     $display.= $smarty->fetch(get_template_path('generic.tpl', TRUE, dirname(__FILE__)));
     return($display);
   }
@@ -711,25 +845,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 
@@ -764,17 +880,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 for ! in any parameter setting*/
     if(isset($this->macroarray[$this->macro])){
       foreach($this->macroarray[$this->macro] as $val){
@@ -811,11 +916,19 @@ 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();
     }
+
+    /* Cahnged behavior for goFonPIN */
+    $this->attrs['goFonPIN'] = $this->goFonPIN."|".$this->goFonVoicePIN;
+  
+    unset($this->attrs['cn']);
+
     /* Write back to ldap */
     $ldap= $this->config->get_ldap_link();
     $ldap->cd($this->dn);
@@ -873,18 +986,28 @@ class phoneAccount extends plugin
 
   function remove_from_parent()
   {
+  
+    foreach($this->attributes as $key=>$val){
+      if(in_array($val,array("uid","cn","mail"))){
+        unset($this->attributes[$key]);
+        unset($this->$val);
+      }
+    }
+
+    $this->attributes[]="goFonPIN";
+
     // Get Configuration for Mysql database Server
     $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'];
     $s_parameter  ="";
 
     // 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){
       $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());
+      gosa_log(@mysql_error());
       return false;
     }
 
@@ -894,15 +1017,20 @@ 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']);
-      gosa_log(mysql_error());
+      gosa_log(@mysql_error());
       return false;
     }
 
     $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((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;
+    }
 
     $first_num = false;
     // Delete old entries
@@ -919,7 +1047,7 @@ class phoneAccount extends plugin
 
 
     foreach($SQL as $query){
-      if(!mysql_query($query,$r_con)){
+      if(!@mysql_query($query,$r_con)){
         print_red(_("Stop".mysql_error()));
         return false;
       }
@@ -995,8 +1123,6 @@ class phoneAccount extends plugin
       }
     }
   }
-
-
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: