Code

Added snapshot to gofonmacros
[gosa.git] / plugins / gofon / phoneaccount / class_phoneAccount.inc
index ca9520191afd3d6bdd6f3f0509f2ad7bf6a0ea2e..b38336fe90e1a65f25d0ed81968c0a774355b28e 100644 (file)
@@ -34,7 +34,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","uid","cn","mail",
+  var $CopyPasteVars          = array("phoneNumbers");
+  var $attributes             = array("goFonDeliveryMode", "goFonFormat","uid","cn",
       "goFonHardware","goFonPIN","goFonVoicemailPIN","telephoneNumber", "goFonMacro","macro");
   var $objectclasses= array("goFonAccount");
 
@@ -70,7 +71,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){
@@ -215,13 +218,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);
@@ -232,8 +235,11 @@ class phoneAccount extends plugin
         }
       }
     }
-  $this->lastmacro=$this->macro;
-  @mysql_close($r_con) ;
+    $this->lastmacro=$this->macro;
+
+    if(is_callable("mysql_close")&&(isset($r_con))&&($r_con)){
+      @mysql_close($r_con) ;
+    }
   }
 
 
@@ -241,10 +247,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 
@@ -255,7 +268,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 ..)
 
@@ -272,7 +285,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
@@ -421,14 +434,15 @@ class phoneAccount extends plugin
       $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$newnums[$i_new_key].";"; 
       // Delete old entries
       $b_first_deleted  =false;
-      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(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) ;
@@ -556,6 +570,9 @@ class phoneAccount extends plugin
 
   function execute()
   {
+       /* Call parent execute */
+       plugin::execute();
+
     $display = "";
 
     if(empty($this->macro)&&(!empty($this->goFonMacro))){
@@ -626,7 +643,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 */
@@ -660,7 +677,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;
         }
       }
@@ -680,7 +699,7 @@ class phoneAccount extends plugin
         switch ($type){
 
           case "combo":
-            $str= "<select name='".$var."' ".chkacl($this->acl, "goFonMacro")."  ".chkacl($this->acl, "goFonMacro").">";
+            $str= "<select name='".$var."' ".chkacl($this->acl, "goFonMacro")." >";
           foreach(split(":",$default) as $choice){
             if($choosen==$choice){
               $str.= "\n<option value='".$choice."' selected>".$choice."&nbsp;</option>";
@@ -764,7 +783,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{
@@ -862,8 +881,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."));
@@ -873,12 +892,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."));
       }
     }
 
@@ -940,8 +958,10 @@ 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 */
 
@@ -994,17 +1014,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  ="";
@@ -1014,8 +1035,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;
       }
@@ -1025,7 +1046,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;
       }
@@ -1054,16 +1075,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']);
@@ -1083,6 +1105,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"));
@@ -1096,8 +1119,10 @@ 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);
@@ -1133,6 +1158,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: