Code

Removed samba2 references
[gosa.git] / gosa-core / plugins / admin / users / class_userManagement.inc
index 945f60ebd1ef8bba055d45eac173d675bbf5cd11..f3bb656588e81fc3f83daa842aa21eab0336e824 100644 (file)
@@ -33,6 +33,7 @@ class userManagement extends plugin
   var $templates            = array();
   var $got_uid              = false;
   var $CopyPasteHandler     = NULL;
+  var $SnapshotHandler     = NULL;
   var $CPPasswordChange     = ""; // Contains the entry id which should get a new password
   var $DivListUsers;
 
@@ -43,6 +44,11 @@ class userManagement extends plugin
   var $acl_module = array("users");  
   var $dns    = array();
 
+  // Filter/headpage tests
+  var $filter= null;
+  var $headpage= null;
+
+
   function userManagement(&$config, $ui)
   {
     /* Save configuration for internal use */
@@ -53,6 +59,9 @@ class userManagement extends plugin
     if ($this->config->boolValueIsTrue("main", "copyPaste")){
       $this->CopyPasteHandler= new CopyPasteHandler($this->config);
     }
+    if($this->config->get_cfg_value("enableSnapshots") == "true"){
+      $this->SnapshotHandler= new SnapshotHandler($this->config);
+    }
 
     /* Creat dialog object */
     $this->DivListUsers = new divListUsers($this->config,$this);
@@ -187,7 +196,7 @@ class userManagement extends plugin
           $type = $events['BY_CLASS'][$event];
           $this->usertab = new $type['CLASS_NAME']($this->config);
           $this->usertab->add_users($uids);
-          $this->usertab->set_type(TRIGGERED_EVENT);
+          $this->usertab->set_type(SCHEDULED_EVENT);
         }
       }
     }
@@ -323,7 +332,7 @@ class userManagement extends plugin
       $this->sn= "";
       $this->givenName= "";
       $this->uid= "";
-      session::un_set('objectinfo');
+      set_object_info();
     }
 
 
@@ -372,7 +381,7 @@ class userManagement extends plugin
 
         /* User is allowed to change passwords, save 'dn' and 'acl' for next
            dialog. */
-        session::set('objectinfo',$this->dn);
+        set_object_info($this->dn);
         return ($smarty->fetch(get_template_path('password.tpl', TRUE)));
       } else {
         /* User is not allowed. Show message and cancel. */
@@ -395,8 +404,9 @@ class userManagement extends plugin
 
       /* Check locking, save current plugin in 'back_plugin', so
          the dialog knows where to return. */
+
       if (($user= get_lock($this->dn)) != ""){
-        return(gen_locked_message ($user, $this->dn));
+        return(gen_locked_message ($user, $this->dn,TRUE));
       }
 
       /* Lock the current entry, so everyone will get the
@@ -412,7 +422,7 @@ class userManagement extends plugin
 
       /* Set ACL and move DN to the headline */
       $this->usertab->set_acl_base($this->dn);
-      session::set('objectinfo',$this->dn);
+      set_object_info($this->dn);
     }
 
 
@@ -436,7 +446,7 @@ class userManagement extends plugin
       if($tmp->multiple_available()){
         $this->usertab = $tmp;
         $this->usertab->set_active_tab($s_tab);
-        session::set('objectinfo',$this->usertab->get_object_info());
+        set_object_info($this->usertab->get_object_info());
       }
     }
 
@@ -455,7 +465,7 @@ class userManagement extends plugin
       $this->sn= "";
       $this->givenName= "";
       $this->uid= "";
-      session::un_set('objectinfo');
+      set_object_info();
     }
 
 
@@ -648,20 +658,32 @@ class userManagement extends plugin
       /* Get entry check current status */
       $val = $this->list[$s_entry];
       if (!preg_match("/w/",$this->ui->get_permissions($val['dn'],"users/password"))){
-        msg_dialog::display(_("Password change"),
+        msg_dialog::display(_("Account locking"),
             _("You have no permission to change the lock status for this user!"),WARNING_DIALOG);
       }else{
         $pwd = $val['userPassword'][0];
         $method = passwordMethod::get_method($pwd,$val['dn']);
+        $success= false;
         if($method instanceOf passwordMethod){
           if($method->is_locked($this->config,$val['dn'])){
-            $method->unlock_account($this->config,$val['dn']);
+            $success= $method->unlock_account($this->config,$val['dn']);
           }else{
-            $method->lock_account($this->config,$val['dn']);
+            $success= $method->lock_account($this->config,$val['dn']);
+          }
+
+          /* Check for success */
+          if (!$success){
+            $hn= $method->get_hash_name();
+            if (is_array($hn)){
+              $hn= $hn[0];
+            }
+            msg_dialog::display(_("Account locking"),
+              sprintf(_("Password method '%s' does not support locking. Account has not been locked!"), $hn),WARNING_DIALOG);
           }
         }else{
           // Can't lock unknown methods.
         }
+
       }
     }
 
@@ -723,7 +745,7 @@ class userManagement extends plugin
 
           unset ($this->usertab);
           $this->usertab= NULL;
-          session::un_set('objectinfo');
+          set_object_info();
         }else{
         
           /* Reinitialize tab */
@@ -889,17 +911,15 @@ class userManagement extends plugin
     /* Finish template preamble */
     if (isset($_POST['template_continue']) && $_POST['template'] != 'none' && (isset($_POST['uid']))){
 
-      /* Might not be filled if IDGEN is unset */
-      $this->sn                 = $_POST['sn'];
-      $this->givenName          = $_POST['givenName'];
-
       /* Move user supplied data to sub plugins */
-      $this->uid                = $_POST['uid'];
-      $this->usertab->uid       = $this->uid;
-      $this->usertab->sn        = $this->sn;
-      $this->usertab->givenName = $this->givenName;
+      foreach(array("uid","sn","givenName") as $attr){
+        $this->$attr = $_POST[$attr];
+        $this->usertab->$attr       = $this->$attr;
+        $this->usertab->by_object['user']->$attr = $this->$attr;
+      }
+
       $template_dn              = $_POST['template'];
-      $this->usertab->adapt_from_template($template_dn);
+      $this->usertab->adapt_from_template($template_dn, array("uid","cn","givenName","sn"));
       $template_base            = preg_replace("/^[^,]+,".preg_quote(get_people_ou(), '/')."/", '', $template_dn);
       $this->usertab->by_object['user']->base= $template_base;
     }
@@ -931,15 +951,21 @@ class userManagement extends plugin
         }
 
         if(!is_object($dia) && $dia != TRUE){
-          $display.= "<p style=\"text-align:right\">\n";
-          $display.= "<input type=submit name=\"edit_finish\" style=\"width:80px\" value=\"".msgPool::okButton()."\">\n";
-          $display.= "&nbsp;\n";
-          if ($this->dn != "new"){
-            $display.= "<input type=submit name=\"edit_apply\" value=\"".msgPool::applyButton()."\">\n";
+          if(($this->usertab instanceOf tabs || $this->usertab instanceOf plugin) && $this->usertab->read_only == TRUE){
+            $display.= "<p style=\"text-align:right\">
+                          <input type=submit name=\"edit_cancel\" value=\"".msgPool::cancelButton()."\">
+                        </p>";
+          }else{
+            $display.= "<p style=\"text-align:right\">\n";
+            $display.= "<input type=submit name=\"edit_finish\" style=\"width:80px\" value=\"".msgPool::okButton()."\">\n";
             $display.= "&nbsp;\n";
+            if ($this->dn != "new"){
+              $display.= "<input type=submit name=\"edit_apply\" value=\"".msgPool::applyButton()."\">\n";
+              $display.= "&nbsp;\n";
+            }
+            $display.= "<input type=submit name=\"edit_cancel\" value=\"".msgPool::cancelButton()."\">\n";
+            $display.= "</p>";
           }
-          $display.= "<input type=submit name=\"edit_cancel\" value=\"".msgPool::cancelButton()."\">\n";
-          $display.= "</p>";
         }
       return ($display);
     }
@@ -951,7 +977,6 @@ class userManagement extends plugin
     }
   
     /* Return rendered main page */
-        /* Display dialog with system list */
     $this->DivListUsers->parent = $this;
     $this->DivListUsers->execute();
 
@@ -961,10 +986,130 @@ class userManagement extends plugin
     }
     $this->reload();
     $this->DivListUsers->setEntries($this->list);
+
+    # FILTER Test #################################################
+    ## Build filter
+    #if (!$this->filter) {
+    #  $this->filter = new filter(get_template_path("user-filter.xml", true));
+    #  $this->filter->setObjectStorage(get_people_ou());
+    #}
+    #$this->filter->update();
+    #session::set('autocomplete', $this->filter);
+    #if (!$this->filter->isValid()){
+    #  msg_dialog::display(_("Filter error"), _("The filter is uncomplete!"), ERROR_DIALOG);
+    #}
+
+    ## Build headpage
+    #if (!$this->headpage){
+    #  $this->headpage = new listing(get_template_path("user-list.xml", true));
+    #  $this->headpage->registerElementFilter("accountProperties", "userManagement::filterProperties");
+    #  $this->headpage->registerElementFilter("lockLabel", "userManagement::filterLockLabel");
+    #  $this->headpage->registerElementFilter("lockImage", "userManagement::filterLockImage");
+    #  $this->headpage->setFilter($this->filter);
+    #}
+
+    ## Needs to be called before update!
+    #$action= $this->headpage->getAction();
+    #if ($action['action'] != '') {
+    #  echo "List detected action:";
+    #  print_a($action);
+    #}
+
+    ## Refresh for filter
+    #$this->headpage->update();
+    #
+    #return($this->headpage->render());
+    ################################################### FILTER Test
+
     return($this->DivListUsers->Draw());
   }
 
 
+  static function filterLockImage($userPassword)
+  {
+    $image= "images/empty.png";
+
+    if(isset($userPassword[0]) && preg_match("/^\{[^\}]/",$userPassword[0])){
+      if(preg_match("/^[^\}]*+\}!/",$userPassword[0])){
+        $image= "images/lists/locked.png";
+      }else{
+        $image= "images/lists/unlocked.png";
+      }
+    }
+
+    return $image;
+  }
+
+
+  static function filterLockLabel($userPassword)
+  {
+    $label= "";
+
+    if(isset($userPassword[0]) && preg_match("/^\{[^\}]/",$userPassword[0])){
+      if(preg_match("/^[^\}]*+\}!/",$userPassword[0])){
+        $label= _("Unlock account");
+      }else{
+        $label= _("Lock account");
+      }
+    }
+
+    return $label;
+  }
+
+
+  static function filterProperties($dn, $row, $class)
+  {
+    $result= "";
+
+    $map= array( "gosaAccount" => array( "image" => "plugins/users/images/select_user.png",
+                                         "plugin" => "user",
+                                         "alt" => _("Generic"),
+                                         "title" => _("Edit generic properties")),
+                 "posixAccount" => array("image" => "images/penguin.png",
+                                         "plugin" => "posixAccount",
+                                         "alt" => _("POSIX"),
+                                         "title" => _("Edit POSIX properties")),
+                 "gosaMailAccount" => array("image" => "images/mailto.png",
+                                         "alt" => _("Mail"),
+                                         "plugin" => "mailAccount",
+                                         "title" => _("Edit mail properties")),
+                 "sambaSamAccount" => array("image" => "plugins/systems/images/select_winstation.png",
+                                         "plugin" => "sambaAccount",
+                                         "alt" => _("Samba"),
+                                         "title" => _("Edit samba properties")),
+                 "apple-user" => array("image" => "plugins/netatalk/images/select_netatalk.png",
+                                         "plugin" => "sambaAccount",
+                                         "alt" => _("Netatalk"),
+                                         "title" => _("Edit netatalk properties")),
+                 "gotoEnvironment" => array("image" => "plugins/users/images/small_environment.png",
+                                         "plugin" => "gotoEnvironment",
+                                         "alt" => _("Environment"),
+                                         "title" => _("Edit environment properties")),
+                 "goFaxAccount" => array("image" => "plugins/users/images/fax_small.png",
+                                         "plugin" => "goFaxAccount",
+                                         "alt" => _("FAX"),
+                                         "title" => _("Edit FAX properties")),
+                 "goFonAccount" => array("image" => "plugins/gofon/images/select_phone.png",
+                                         "plugin" => "goFonAccount",
+                                         "alt" => _("Phone"),
+                                         "title" => _("Edit phone properties")));
+
+    // Walk thru map
+    foreach ($map as $oc => $properties) {
+      if (in_array($oc, $class)) {
+        $result.="<input class='center' type='image' src='".$properties['image']."' ".
+                 "alt='".$properties['alt']."' title='".$properties['title'].
+                 "' name='listing_edit_".$properties['plugin']."_$row' style='padding:1px'>";
+      } else {
+        $result.="<img src='images/empty.png' alt=' ' class='center' style='padding:1px'>";
+      }
+    }
+
+    return $result;
+  }
+
+
+
   /* Return departments, that will be included within snapshot detection */
   function get_used_snapshot_bases()
   {
@@ -990,11 +1135,7 @@ class userManagement extends plugin
 
     /* Setup filter depending on selection */
     $filter="";
-    if ($this->config->get_cfg_value("sambaversion") == 3){
-      $samba= "sambaSamAccount";
-    } else {
-      $samba= "sambaAccount";
-    }
+    $samba= "sambaSamAccount";
 
     if ($ShowFunctionalUsers){
       $filter.= "(&(objectClass=gosaAccount)(!(|(objectClass=posixAccount)".
@@ -1080,8 +1221,7 @@ class userManagement extends plugin
     /* Remove user lock if a DN is marked as "currently edited" */
     if (isset($this->usertab->dn)){
       del_lock ($this->usertab->dn);
-    }
-    if(isset($this->dn) && !empty($this->dn) && $this->dn != "new"){
+    }elseif(isset($this->dn) && !empty($this->dn) && $this->dn != "new"){
       del_lock($this->dn);
     }
     if(isset($this->dns) && is_array($this->dns) && count($this->dns)){