Code

Added branches container for old stuff
[gosa.git] / gosa-plugins / gofon / gofon / phoneaccount / class_phoneAccount.inc
index 831f5bd5efe47d1cb41af17f3cfca6cadcab8b2c..cdde338d23707dc1633d2ef41693645db15bd4ef 100644 (file)
@@ -3,9 +3,9 @@
 class phoneAccount extends plugin
 {
   /* Definitions */
-  var $plHeadline= "Phone";
+  var $plHeadline   = "Phone";
   var $plDescription= "This does something";
-  var $has_mailAccount= FALSE;
+  var $plIcon       = "plugins/gofon/images/phoneAccount.png";
 
   /* Attributes */
   var $telephoneNumber        = array();
@@ -38,14 +38,18 @@ class phoneAccount extends plugin
   var $CopyPasteVars          = array("phoneNumbers","macroarray","macrostillavailable"/*"phoneNumbers" -Reset- */,
                                       "hardware_list","used_hardware");
 
-  var $attributes             = array("goFonDeliveryMode", "goFonFormat","cn","goFonHomeServer","goFonContext","goFonVoiceMailContext",
+  var $attributes             = array("goFonDeliveryMode", "goFonFormat","goFonHomeServer",
       "goFonHardware","goFonPIN","goFonVoicemailPIN","telephoneNumber", "goFonMacro","macro");
   var $objectclasses= array("goFonAccount");
 
   var $uid;
+  var $cn;
 
   var $view_logged = FALSE;
   var $multiple_support = TRUE;
+  var $mailAddress      = "";
+  var $has_mailAccount  = FALSE;
+  var $pager      = "";
 
   function phoneAccount (&$config, $dn= NULL, $parent= NULL)
   {
@@ -59,22 +63,40 @@ class phoneAccount extends plugin
       }
     }
 
-    /* Set up has_mailAccount */
-    if (isset($this->attrs['objectClass'])){
-      if (in_array("gosaMailAccount", $this->attrs['objectClass'])){
-        $this->has_mailAccount= TRUE;
-      }
+    /* Set parent object to tab object */
+    if(is_object($parent)){
+      $this->parent = $parent->parent;
     }
 
-    /* Set parent object to tab object */
-    $this->parent = $parent->parent;
+    /* Get current uid and cn 
+     */
+    if(isset($this->attrs['uid'][0])){
+      $this->uid = $this->attrs['uid'][0];
+    }
+    if(isset($this->attrs['cn'][0])){
+      $this->cn = $this->attrs['cn'][0];
+    }
+    if(isset($this->attrs['mail'][0])){
+      $this->mailAddress = $this->attrs['mail'][0];
+    }
+    if(isset($this->attrs['pager'][0])){
+      $this->pager = $this->attrs['pager'][0];
+    }
 
-    /* Set uid */
-    if((isset($this->parent->by_object['user']->uid))&&(!empty($this->parent->by_object['user']->uid))){
-      $this->uid = $this->parent->by_object['user']->uid;
+    /* If there is a parent object present, use references 
+     */
+    if(isset($this->parent->by_object['user']->uid)){
+      $this->uid = &$this->parent->by_object['user']->uid;
+    }
+    if(isset($this->parent->by_object['user']->cn)){
+      $this->cn   =&$this->parent->by_object['user']->cn;
+    }
+    if(isset($this->parent->by_object['user']->pager)){
+      $this->pager   =&$this->parent->by_object['user']->pager;
     }
-    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->parent->by_object['mailAccount']->mail)){
+      $this->mailAddress      = &$this->parent->by_object['mailAccount']->mail;
+      $this->has_mailAccount  = &$this->parent->by_object['mailAccount']->is_account;
     }
 
     /* Check server configurations 
@@ -138,7 +160,7 @@ class phoneAccount extends plugin
      * Search for all available phone hardware  
      */
     $tmp = get_sub_list("(objectClass=goFonHardware)","phone",array(get_ou("phoneou")),
-                  $this->config->current['BASE'],array("cn","description"), GL_NO_ACL_CHECK);
+                  $this->config->current['BASE'],array("cn","description"), GL_SUBSEARCH);
     foreach($tmp as $attrs){
       $cn= $attrs['cn'][0];
       $description= "";
@@ -165,7 +187,7 @@ class phoneAccount extends plugin
         get_ou("phoneou"));
 
     $tmp = get_sub_list("(goFonHardware=*)","phone",$deps_a,$this->config->current['BASE'],
-        array('cn','dn','goFonHardware'),GL_NO_ACL_CHECK);
+        array('cn','dn','goFonHardware'),GL_SUBSEARCH);
     foreach($tmp as $attrs){
       $cn = $attrs['goFonHardware'][0];
       if(isset($this->hardware_list[$cn])){
@@ -175,11 +197,11 @@ class phoneAccount extends plugin
 
 
     /* Get available Macros  
-     * Search for all Marcos that are visible and create 
+     * Search for all Macros that are visible and create 
      *  an array with name and parameters 
      */
     $tmp = get_sub_list("(&(objectClass=goFonMacro)(goFonMacroVisible=1))","gofonmacro",array(get_ou("macroou")),
-                  $this->config->current['BASE'],array("displayName","goFonMacroParameter","dn","cn"), GL_NONE);
+                  $this->config->current['BASE'],array("displayName","goFonMacroParameter","dn","cn"), GL_NO_ACL_CHECK | GL_SUBSEARCH );
     
 
     /* Add none for no macro*/
@@ -189,6 +211,16 @@ class phoneAccount extends plugin
     /* Fetch all Macros*/
     foreach($tmp as $attrs){
 
+      $ui = get_userinfo(); 
+      $acl = $ui->get_permissions($attrs['dn'],"gofonmacro/macro","");
+
+      /* Skip all macros we are not able to read 
+          execpt, the currently selected macro.
+       */
+      if(!preg_match("/r/",$acl) && !preg_match("/^".normalizePreg($attrs['dn'])."/",$this->goFonMacro)){
+        continue;
+      }
+
       /* unset Count, we don't need that here */
       unset($attrs['displayName']['count']);
 
@@ -375,8 +407,6 @@ class phoneAccount extends plugin
 
     $i_is_accounted = false;  // Ensure that extension entry, for name to number is only once in table
 
-    restore_error_handler();
-
     /* Prepare some basic attributes */
     $oldnums = array();
     foreach($this->a_old_telenums as $tele){
@@ -386,13 +416,9 @@ class phoneAccount extends plugin
       $newnums[]= preg_replace("/[^0-9]/","",$tele);
     }
 
-    /* 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(empty($this->uid)) trigger_error("Uid is empty.");
+
+
     /* Create voicemail entry 
      */
     if((!isset($this->cn))||(empty($this->cn))){
@@ -401,11 +427,11 @@ class phoneAccount extends plugin
       $CNname= $this->cn;
     }
 
-    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 = "";
+    $s_mail = "";
+    if($this->has_mailAccount){
+      $s_mail = $this->mailAddress;;
     }
+
     /* Get phonehardware to setup sip entry  */
     $ldap         = $this->config->get_ldap_link();
     $r_res        = $ldap->search("(&(objectClass=goFonHardware)(cn=".$this->goFonHardware."))", array('*'));
@@ -642,6 +668,17 @@ class phoneAccount extends plugin
 
       $customer_id = $newnums[$i_new_key];
 
+      $query  = "SELECT id,name,callerid FROM ".$a_New['SIP_TABLE']." WHERE name='".$this->uid."';";
+
+      $rid    = mysql_query($query,$new_connection);
+      @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query, "Database query");
+      $result = mysql_fetch_assoc($rid);
+  
+      $old_customer_id = ""; 
+      if($result){
+        $old_customer_id = $result['callerid'];
+      }
+
       $voice_data_array = array(
           "customer_id" => $customer_id,
           "mailbox"     => $customer_id,
@@ -650,13 +687,12 @@ class phoneAccount extends plugin
           "context"     => $this->voice_context,
           "email"       => $s_mail);
 
-      /* Set pager number if available */
-      if(isset($this->parent->by_object['user']->pager)){
-        $voice_data_array['pager']   = $this->parent->by_object['user']->pager;
-      }
+      $voice_data_array['pager']   = $this->pager;
 
       /* Check if there is already an entry in sip_users for this uid */
-      $query_tmp = "SELECT * FROM ".$a_New['VOICE_TABLE']." WHERE customer_id='".$customer_id."';\n";
+      $query_tmp = "SELECT * FROM ".$a_New['VOICE_TABLE']." WHERE customer_id='".$old_customer_id."';\n";
+
+
       $rid = mysql_query($query_tmp,$new_connection);
       @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query_tmp, "Database query");
       if(mysql_affected_rows($new_connection)){
@@ -664,6 +700,7 @@ class phoneAccount extends plugin
         /********************** 
          * Update Voice mail entry  
          **********************/
+
         $result = mysql_fetch_assoc($rid)  ;
 
         foreach($voice_data_array as $name => $value){
@@ -672,14 +709,14 @@ class phoneAccount extends plugin
           }
         }
 
-        /* Only update entry if there is something to uopdate */
+        /* Only update entry if there is something to update */
         if(count($voice_data_array)){
           $query = "UPDATE ".$a_New['VOICE_TABLE']." SET ";
           foreach($voice_data_array as $key => $val){
             $query.= "".$key."='".$val."',"; 
           } 
           $query = preg_replace("/,$/","",$query);
-          $query.= " WHERE customer_id='".$customer_id."';";
+          $query.= " WHERE customer_id='".$old_customer_id."';";
           $SQL_query_array[] = $query;
         }
       }else{
@@ -833,6 +870,7 @@ class phoneAccount extends plugin
 
     $display = "";
     $SkipWrite = (!isset($this->parent) || !$this->parent) && !session::is_set('edit');
+
     if(empty($this->macro)&&(!empty($this->goFonMacro))){
 
       /* Go through already saved values, for a parameter */
@@ -1053,7 +1091,7 @@ class phoneAccount extends plugin
     /* Assign acls */
     $tmp = $this->plInfo();
     foreach($tmp['plProvidedAcls'] as $name => $translation){
-      $smarty->assign($name."ACL",$this->getacl($name));
+      $smarty->assign($name."ACL",$this->getacl($name,$SkipWrite));
     }
 
     /* Transfer ACL's */
@@ -1114,6 +1152,14 @@ class phoneAccount extends plugin
       }
     }
 
+    foreach(array("goFonVoiceMailContext","goFonContext") as $attr){
+      if(in_array($attr,$this->multi_boxes)){
+        $smarty->assign("use_".$attr,TRUE);
+      }else{
+        $smarty->assign("use_".$attr,FALSE);
+      }
+    }
+
     /* Show main page */
     $this->lastmacro = $this->macro;
     $smarty->assign("multiple_support",$this->multiple_support_active);
@@ -1143,6 +1189,7 @@ class phoneAccount extends plugin
 
       /* Every macro in the select box are available */
       if((isset($_POST['macro']))){
+        $this->macro = $_POST['macro'];
         $this->macrostillavailable=true;
       }
 
@@ -1178,9 +1225,11 @@ class phoneAccount extends plugin
       /* get all Postvars */
       if(isset($this->macroarray[$this->macro])){
 
-        if($this->acl_is_writeable("goFonMarco",$SkipWrite)){
+
+        if($this->acl_is_writeable("goFonMacro",$SkipWrite)){
           foreach($this->macroarray[$this->macro] as $key => $paras){
 
+            $old_macro_settings = $this->macroarray[$this->macro][$key]; 
             $backup = $this->macroarray[$this->macro][$key];
 
             if(isset($_POST[$paras['var']])){
@@ -1200,9 +1249,13 @@ class phoneAccount extends plugin
                 }
               }
             }
+            if(array_differs($old_macro_settings,$this->macroarray[$this->macro][$key])){
+              $this->is_modified = TRUE;
+            }
           }
+
           if(count(array_diff($this->macroarray[$this->macro][$key],$backup))){
-            $this->modified = TRUE;
+            $this->is_modified = TRUE;
           }
         }
       }
@@ -1357,12 +1410,6 @@ class phoneAccount extends plugin
   {
     if(!$this->initially_was_account) return;
 
-    foreach($this->attributes as $key=>$val){
-      if(in_array($val,array("uid","cn"))){
-        unset($this->attributes[$key]);
-        unset($this->$val);
-      }
-    }
     if(count($this->goFonHomeServers) && !empty($this->init_HomeServer) && is_callable("mysql_pconnect")){
 
       // Get Configuration for initial Mysql database Server
@@ -1391,14 +1438,6 @@ class phoneAccount extends plugin
 
       $SQL="";
 
-      /* 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;
-      }
 
       $first_num = false;
       // Delete old entries
@@ -1409,7 +1448,17 @@ class phoneAccount extends plugin
         $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$s_telenums."';\n";
       }
 
-      $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id='".$first_num."';";
+
+      $query  = "SELECT id,name,callerid FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';";
+      $rid    = mysql_query($query,$r_con);
+      @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query, "Database query");
+      $result = mysql_fetch_assoc($rid);
+      $callerid = $first_num;
+      if($result){
+        $callerid = $result['callerid'];
+      }
+
+      $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id='".$callerid."';";
       $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->uid."';\n";
       $SQL[] = "DELETE FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';\n";
 
@@ -1489,8 +1538,6 @@ class phoneAccount extends plugin
     }
 
     foreach($this->phoneNumbers as $num){
-      if(!isset($this->cn)) $this->cn = "";
-
       if((isset($numbers[$num]))&&(($numbers[$num]['uid'][0]!=$this->uid))){
         if(isset($numbers[$num]['uid'][0])){
           return sprintf(_("The specified telephonenumber '%s' is already assigned to '%s'."),$num,$numbers[$num]['uid'][0]);
@@ -1562,9 +1609,9 @@ class phoneAccount extends plugin
 
           "plProvidedAcls"  => array(
             "telephoneNumber"     => _("Telephone number"),
-            "goFonHomeServer"     => _("Home server"),
             "goFonMacro"          => _("Macro settings"),
             "goFonHardware"       => _("Phone hardware"),
+            "goFonHomeServer"     => _("Home server"),
             "goFonContext"          => _("Phone context"),
             "goFonVoiceMailContext" => _("Voice mail context"),
             "goFonPIN"            => _("Telephone pin"),
@@ -1617,6 +1664,7 @@ class phoneAccount extends plugin
       }
 
       if(isset($_POST['macro']) && $_POST['macro'] != $this->macro){
+        $this->macro = $_POST['macro'];
         $this->is_modified =true;
       }
 
@@ -1638,7 +1686,7 @@ class phoneAccount extends plugin
           }
         }
         if(count(array_diff($this->macroarray[$this->macro][$key],$backup))){
-          $this->modified = TRUE;
+          $this->is_modified = TRUE;
         }
       }
     }