Code

* Created "old" branch and moved stuff
[gosa.git] / branches / old / gosa-plugins / opengroupware / personal / connectivity / opengroupware / class_opengwAccount.inc
diff --git a/branches/old/gosa-plugins/opengroupware/personal/connectivity/opengroupware/class_opengwAccount.inc b/branches/old/gosa-plugins/opengroupware/personal/connectivity/opengroupware/class_opengwAccount.inc
new file mode 100644 (file)
index 0000000..c6b622b
--- /dev/null
@@ -0,0 +1,356 @@
+<?php
+
+class opengwAccount extends plugin
+{
+       /* Definitions */
+       var $plHeadline       = "Opengroupware account";
+       var $plDescription    = "This does something";
+
+       /* attribute list for save action */
+       var $attributes       = array();
+       var $objectclasses    = array();
+
+  var $SetPassword   = false;
+
+       /* Attribute mapping opengroupware->ldap  */
+       var $attrsToUse    = array( "salutation"  =>"vocation",
+                       "name"        =>"sn",
+                       "firstname"   =>"givenName",
+                       "login"       =>"uid",
+                       "degree"      =>"academicTitle",
+                       "birthday"    =>"dateOfBirth",
+                       "sex"         =>"gender",
+                       "street"      =>"street",
+                       "zip"         =>"postalCode",
+                       "value_string"=>"mail",
+                       "number"      =>"telephoneNumber"
+                       );
+
+       var $serverCon            =  false;
+       var $handle               = NULL;
+       var $is_account           = false;
+       var $initialy_was_account = false;
+  var $OGWPassword          = "";
+  var $ReadOnly = false;
+  var $view_logged = FALSE;  
+  var $uid = "";
+
+       function opengwAccount (&$config, $dn= NULL)
+       {
+               plugin::plugin ($config, $dn);
+
+    /* Setting uid to default */
+    if(isset($this->attrs['uid'][0])){
+      $this->uid = $this->attrs['uid'][0];
+    }
+
+               $this->info=array();
+
+               /* is no account and was no account */
+               $this->initialy_was_account = false;
+               $this->is_account           = false;
+
+               /* Get configurations */
+    if($this->config->search("opengwAccount", 'USERNAME',array('tabs'))){
+      $atr = array();
+      $atr['LOGIN']    =         $this->config->search("opengwAccount", 'USERNAME',array('tabs'));
+      $atr['PASSWORD']=        $this->config->search("opengwAccount", 'PASSWORD',array('tabs'));
+      $atr['SERVER']   =       $this->config->search("opengwAccount", 'DATAHOST',array('tabs'));
+      $atr['DB']               =         $this->config->search("opengwAccount", 'DATABASE',array('tabs'));
+      $this->serverCon = $atr;
+    }elseif(isset($this->config->data['SERVERS']['OPENGROUPWARE'])){
+      $this->serverCon  = $this->config->data['SERVERS']['OPENGROUPWARE'];
+    }else{
+      $this->serverCon = array();
+    }
+
+    /* check if datebase funktions are available, and if database configurations are available */ 
+               if(is_callable("pg_connect") && count($this->serverCon)){
+
+                       $this->handle     = new ogw($this->serverCon['LOGIN'],$this->serverCon['PASSWORD'],$this->serverCon['SERVER'],$this->serverCon['DB']);
+
+                       /* Check if current configuration allows database connection */
+                       if($this->handle->connected){
+
+                               /* Set login name, to check if this is_account */
+                               if(isset($this->attrs['uid'][0])){
+                                       $this->handle->info['login'] = $this->attrs['uid'][0];
+                               }else{
+                                       $this->handle->info['login'] = ""; 
+                               }
+
+                               /* If this is account get data from database first */
+                               if($this->handle->CheckExistence()){
+                                       $this->info = $this->handle->GetInfos($this->attrs['uid'][0]);
+
+                                       /* This is an account */
+                                       $this->initialy_was_account = true;
+                                       $this->is_account= true;
+                               }else{
+                                       /* this is no account */ 
+                                       $this->initialy_was_account = false;
+                                       $this->is_account= false;
+
+                                       /* Selectable in GOsa */
+                                       $this->info['template_user_id']   = 0;
+                                       $this->info['is_locked']          = 0;
+                                       $this->info['LocationTeamID']     = 0;
+                                       $this->info['TeamIDis']           = array();
+                               }
+
+                               /* Set settings from ldap */
+                               foreach($this->attrsToUse as $name=>$attr){
+                                       if(isset($this->attrs[$attr][0])){
+                                               $this->info[$name] = $this->attrs[$attr][0];
+                                       }else{
+                                               $this->info[$name] = false;
+                                       }
+                               } 
+
+                               /* Description is displayed as 'Nickname' */
+                               $this->info['description']          = $this->info['login'];
+
+                               if($this->info['sex'] == "F"){
+                                       $this->info['sex']                = "female";
+                               }else{
+                                       $this->info['sex']                = "male";
+                               }
+
+                       }
+
+                       /* Transmit data back to ogw handle */
+                       $this->handle->SetInfos($this->info);
+               }
+       }
+
+       function execute()
+       {
+    /* Log view */
+    if($this->is_account && !$this->view_logged){
+      $this->view_logged = TRUE;
+      new log("view","users/".get_class($this),$this->dn);
+    }
+
+               /* Show tab dialog headers */
+               $display= "";
+               $smarty= get_smarty();
+
+    $smarty->assign("serverCon",count($this->serverCon));
+    $smarty->assign("validTeams","");
+    $smarty->assign("is_account", " ");
+    $smarty->assign("OGWstate"," disabled ");
+    $smarty->assign("validLocationTeam",array("&nbsp;"));
+    $smarty->assign("validLocationTeams",array("&nbsp;"));
+    $smarty->assign("LocationTeam",0);
+    $smarty->assign("validTemplateUser",array("&nbsp;"));
+    $smarty->assign("validTemplateUsers",array("&nbsp;"));
+    $smarty->assign("TemplateUser",0);
+    $smarty->assign("is_lockedCHK", "  ");
+    $smarty->assign("is_locked", "  ");
+               /* set default values */
+    $tmp = $this->plInfo();
+    foreach($tmp['plProvidedAcls'] as $acl => $desc){
+      $smarty->assign($acl."ACL",$this->getacl($acl,$this->ReadOnly));
+    } 
+
+    if((!$this->ReadOnly)&&(($this->is_account && $this->acl_is_removeable()) || (!$this->is_account && $this->acl_is_createable()))) {
+      $smarty->assign('opengwAccountACL', "");
+    }else{
+      $smarty->assign('opengwAccountACL', " disabled ");
+    }
+
+    if(count($this->serverCon))
+
+               /* Check database extension */    
+               if(!is_callable("pg_connect") && count($this->serverCon)){
+      msg_dialog::display(_("Configuration error"), msgPool::missingext("postgresql"), ERROR_DIALOG);
+               }elseif(count($this->serverCon)){
+
+                       /* Check if config exists */
+                       if($this->config->search("opengwAccount", 'DATABASE',array('tabs')) == ""){
+        msg_dialog::display(_("Configuration error"), msgPool::noserver(_("Open Groupware database")), ERROR_DIALOG);
+                       }else{
+
+                               /* Create handle */
+                               $this->handle     = new ogw($this->serverCon['LOGIN'],$this->serverCon['PASSWORD'],$this->serverCon['SERVER'],$this->serverCon['DB']);
+
+                               /* Check if we are successfully connected to db */
+                               if(!$this->handle->connected){
+          msg_dialog::display(_("Configuration error"), msgPool::dbconnect(_("Open Groupware")), ERROR_DIALOG);
+                               }else{
+
+                                       /* Assign LocationTeams */
+                                       $tmp = array(""=>"none");
+                                       foreach($this->handle->validLocationTeam as $id){
+                                               $tmp[$id['company_id']] = $id['description']; 
+                                       }
+                                       $smarty->assign("validLocationTeam",$tmp);
+                                       $smarty->assign("validLocationTeams",array_flip($tmp));
+                                       $smarty->assign("LocationTeam",$this->info['LocationTeamID']);
+
+                                       /* Assign TemplateUsers*/
+                                       $tmp = array();
+                                       foreach($this->handle->validTemplateUser as $id){
+                                               $tmp[$id['company_id']] = $id['name']; 
+                                       }
+                                       $smarty->assign("validTemplateUser",$tmp);
+                                       $smarty->assign("validTemplateUsers",array_flip($tmp));
+                                       $smarty->assign("TemplateUser",$this->info['template_user_id']);
+
+                                       /* Create Team membership */ 
+                                       $str = "";
+                                       if($this->is_account){
+                                               $dis = "";
+                                       }else{
+                                               $dis = " disabled ";
+                                       }
+
+          if($this->acl_is_readable("Teams")){
+            foreach($this->handle->validTeams as $id){
+              if(in_array($id['company_id'],$this->info['TeamIDis'])){
+                $str .= "<input ".$dis." type='checkbox' value='".$id['company_id']."' 
+                  checked name='team_".base64_encode($id['description'])."'>".$id['description']."<br>";
+              }else{
+                $str .= "<input ".$dis." type='checkbox' value='".$id['company_id']."' 
+                  name='team_".base64_encode($id['description'])."'>".$id['description']."<br>";
+              }
+            }
+          }
+                                       $smarty->assign("validTeams",$str);
+
+                                       /* Assign ogw checkbox */
+                                       if($this->is_account){
+                                               $smarty->assign("OGWstate","");
+                                               $smarty->assign("is_account", " checked ");
+                                       }else{
+                                               $smarty->assign("is_account", " ");
+                                               $smarty->assign("OGWstate"," disabled ");
+                                       }
+
+                                       /* Assign lock status */
+                                       if($this->info['is_locked']){
+                                               $smarty->assign("is_lockedCHK", " checked ");
+                                       }else{
+                                               $smarty->assign("is_lockedCHK", "  ");
+                                       }
+                                       $smarty->assign("is_locked", $this->info['is_locked']);
+
+                               } 
+                       }
+    }
+               $display.= $smarty->fetch (get_template_path('opengw.tpl', TRUE, dirname(__FILE__)));
+               return ($display);
+       }
+
+       function remove_from_parent()
+       {
+               /* remove database entries */
+               if($this->initialy_was_account){
+                       $this->handle = new ogw($this->serverCon['LOGIN'],$this->serverCon['PASSWORD'],$this->serverCon['SERVER'],$this->serverCon['DB']);
+                       $this->handle->SetInfos($this->info);
+                       $this->handle->Perform("REMOVE");
+
+      new log("remove","users/".get_class($this),$this->dn);
+               }
+       }
+
+
+       /* Save data to object */
+       function save_object()
+       {
+               /* get post data */
+               if($this->is_account){
+
+      /* Get selected team chkboxes */
+      $this->info['TeamIDis'] = array();
+      if($this->acl_is_writeable("Teams")) {
+        foreach($_POST as $name => $value ){
+          if(preg_match("/team_/i",$name)){
+            if(!in_array($value,$this->info['TeamIDis'])){
+              $this->info['TeamIDis'][]=$value;
+            }
+          }
+        }
+      }
+
+
+                       /* Get location Team*/
+                       if(isset($_POST['LocationTeam']) && $this->acl_is_writeable("LocationTeam")){
+                               $this->info['LocationTeamID'] = $_POST['LocationTeam'];
+                       }
+
+                       /* Get template user */
+                       if(isset($_POST['TemplateUser']) && $this->acl_is_writeable("TemplateUser") ){
+                               $this->info['template_user_id'] = $_POST['TemplateUser'];
+                       }
+
+      /* get lock status */
+      if($this->acl_is_writeable("Locked")){
+        if(isset($_POST['is_locked'])){
+          $this->info['is_locked'] = $_POST['is_locked'];
+        }else{
+          $this->info['is_locked'] = 0;
+        }
+      }
+               }
+
+               /* change account status */
+               if(isset($_POST['is_account'])){
+      if($this->acl_is_createable()){
+        $this->is_account = $_POST['is_account'];
+      }
+    }else{
+      if($this->acl_is_removeable()){
+        $this->is_account = false;//$_POST['is_account'];
+      }
+               }
+       }
+
+
+       /* Save to LDAP */
+       function save()
+       {
+               /* Save data */ 
+               $this->handle = new ogw($this->serverCon['LOGIN'],$this->serverCon['PASSWORD'],$this->serverCon['SERVER'],$this->serverCon['DB']);
+               $this->handle->SetInfos($this->info);
+               $this->handle->checkInfos();
+               if($this->initialy_was_account){
+                       $this->handle->Perform("EDIT");
+      new log("modify","users/".get_class($this),$this->dn);
+               }else{
+                       $this->handle->Perform("ADD");
+      new log("create","users/".get_class($this),$this->dn);
+               }
+       }
+
+  
+  function PrepareForCopyPaste($src){
+    // Nothing to do, because this object can't be copied ... yet
+  }
+
+
+ /* Return plugin informations for acl handling 
+      #FIXME This is only an enable/disable checkbox for this account, there is possibly a better solution available later */  
+  static function plInfo()
+  {
+    return (array(
+          "plShortName"     => _("Opengroupware"),
+          "plDescription"   => _("Open groupware account settings")."&nbsp;:&nbsp;<u>"._("Connectivity addon")."</u>",
+          "plSelfModify"    => TRUE,
+          "plDepends"       => array("user"),
+          "plPriority"      => 26,                                 // Position in tabs
+          "plSection"     => array("personal" => _("My account")),
+          "plCategory"    => array("users"),
+          "plOptions"       => array(),
+
+          "plProvidedAcls"  => array(
+            "LocationTeam"  => _("Location team"),
+            "TemplateUser"  => _("Template user"),
+            "Locked"        => _("Locked"),
+            "Teams"         => _("Teams"))
+          ));
+  }
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>