Code

Fixed generic/connectivity kolabAccount
[gosa.git] / plugins / personal / connectivity / class_oxchangeAccount.inc
index 1fddc4935acb993eaf51c7c4f1988d5cd9bbfbb8..36db420f9e3004dedc631ea62fb78fed4638b019 100644 (file)
@@ -597,10 +597,31 @@ class oxchangeAccount extends plugin
 
   function execute()
   {
+       /* Call parent execute */
+       //plugin::execute();
 
-    /* Show tab dialog headers */
-    $display= "";
 
+       $display="";
+    /* Show tab dialog headers  * /
+    $display="";
+    if ($this->parent != NULL){
+      if ($this->is_account){
+       $display="";
+      } else {
+        $obj= $this->parent->by_object['posixAccount'];
+       $obj2= $this->parent->by_object['mailAccount'];
+        if (! $obj->is_account){
+          $display= "<BR><BR><CENTER>".sprintf(_("This account has %s features disabled. Posix features are needed for openXchange accounts, enable them first."), "<b>"._("OpenXchange")."</b>")."</CENTER><BR><BR>";
+
+        } else {
+         if (! $obj2->is_account){
+           $display= "<BR><BR><CENTER>".sprintf(_("This account has %s features disabled. Mail features are needed for openXchange accounts, enable them first."), "<b>"._("OpenXchange")."</b>")."</CENTER><BR><BR>";
+            return ($display);
+         }
+        }
+      }
+    }
+*/
     /* Show main page */
     $smarty= get_smarty();
 
@@ -618,8 +639,10 @@ class oxchangeAccount extends plugin
     $smarty->assign("oxchangeAccountACL", chkacl($this->acl, "oxchangeAccount"));
     if ($this->is_account){
       $smarty->assign("oxchangeState", "checked");
+      $smarty->assign("oxState", "");
     } else {
       $smarty->assign("oxchangeState", "");
+      $smarty->assign("oxState", "disabled");
     }
 
     $smarty->assign("timezones", $this->timezones);
@@ -627,7 +650,23 @@ class oxchangeAccount extends plugin
 
     if ($this->parent != NULL){
       $smarty->assign("tabbed", 1);
-    }
+    }else{
+      $smarty->assign("tabbed", 0);
+       }
+
+       /* Trying to open a Postgresql Database Server */
+       if (function_exists("pg_connect")){
+               if(isset($this->oxconf["PGUSER"]) and isset($this->oxconf["PGHOST"]) and isset($this->oxconf["PGDBNAME"]) and isset($this->oxconf["PGPASSWD"])){
+                       $pgcon =  @pg_connect("host=".$this->oxconf["PGHOST"]." user=".$this->oxconf["PGUSER"]." password=".$this->oxconf["PGPASSWD"]." dbname=".$this->oxconf["PGDBNAME"]);
+                       if (! $pgcon){
+                               $smarty->assign("pg", false);
+                       }
+               }else{
+                       $smarty->assign("pg", false);
+               }
+       }else{
+               $smarty->assign("pg", false);
+       }
 
     $display.= $smarty->fetch (get_template_path('oxchange.tpl', TRUE, dirname(__FILE__)));
     return ($display);
@@ -671,29 +710,38 @@ class oxchangeAccount extends plugin
 
     /* Trying to open a Postgresql Database Server */
     if (function_exists("pg_connect")){
-      if(isset($this->oxconf["PGUSER"]) and isset($this->oxconf["PGHOST"]) and isset($this->oxconf["PGDBNAME"]) and isset($this->oxconf["PGPASSWD"])){
-        $pgcon = pg_connect("host=".$this->oxconf["PGHOST"]." user=".$this->oxconf["PGUSER"]." password=".$this->oxconf["PGPASSWD"]." dbname=".$this->oxconf["PGDBNAME"]);
+      if(isset($this->oxconf["PGUSER"]) and 
+                isset($this->oxconf["PGHOST"]) and 
+            isset($this->oxconf["PGDBNAME"]) and 
+         isset($this->oxconf["PGPASSWD"])){
+        $pgcon = @pg_connect("host=".$this->oxconf["PGHOST"]." user=".$this->oxconf["PGUSER"]." password=".$this->oxconf["PGPASSWD"]." dbname=".$this->oxconf["PGDBNAME"]);
         if (! $pgcon){
-          print_red(_("Couldn't Connect To Postgresql Database"));
+          print_red(_("Couldn't connect to postgresql database!"));
           return;
         }
       }else{
-        print_red(_("Needed Parameters to openexchange connectivity plugin failed!"));
+        print_red(_("Needed parameters for openexchange connectivity plugin are missing!"));
         return;
       }
     }else{
-      print_red(_("PHP4 module for Postgresql Database Failed!"));
+      print_red(_("PHP4 module for postgresql database is missing!"));
       return;
     }
 
     plugin::remove_from_parent();
     $ldap= $this->config->get_ldap_link();
 
+    if($ldap->dn_exists("ou=addr,".$this->dn)){
+       $ldap->rmdir_recursive("ou=addr,".$this->dn);
+                       show_ldap_error($ldap->get_error(), sprintf(_("Removing of user/oxchange addressbook account with dn '%s' failed."),$this->dn));
+    }
+
     $ldap->cd($this->dn);
     @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,
         $this->attributes, "Save");
-    $ldap->modify($this->attrs);
-    show_ldap_error($ldap->get_error());
+    $this->cleanup();
+    $ldap->modify ($this->attrs); 
+               show_ldap_error($ldap->get_error(), sprintf(_("Removing of user/oxchange addressbook account with dn '%s' failed."),$this->dn));
 
     /* Optionally execute a command after we're done */
     $this->postremove();
@@ -733,45 +781,67 @@ class oxchangeAccount extends plugin
   {
 
     $needupdate=TRUE;
+    $istemplate=FALSE;
+
+
+/*      print "<pre>".print_r($this->attrs, true)."</pre>";*/
+
 
     /*First at all, we must check if this is new or is updated */
-    foreach ($this->attrs['objectClass'] as $object){
-      if($object=="OXUserObject") $needupdate=FALSE;
+    /*Also check is we have a template, if is a template, is a new user */
+    if (isset($this->attrs['objectClass'])){
+      foreach ($this->attrs['objectClass'] as $object){
+        if($object=="OXUserObject") $needupdate=FALSE;
+       if($object=="gosaUserTemplate") $istemplate=TRUE;
+      }
     }
 
+    $uidarray=array();
+    preg_match("/^(\w+(?=\=))=((\w|\s|\.)+(?=\,)),.*/",$this->dn,$uidarray);
+    $uid=$uidarray[2];
+    if (trim($uid) == "") {
+      print_red(_("The Open-Xchange accountname is empty and thus invalid! Check to make sure that ".
+                  "you are not using any strange characters in the loginname."));
+      return;
+    }
+       
+    if ($istemplate) $needupdate=TRUE;
+
     if($needupdate){
       /* Trying to open a Postgresql Database Server */
       if (function_exists("pg_connect")){
         if(isset($this->oxconf["PGUSER"]) and isset($this->oxconf["PGHOST"]) and isset($this->oxconf["PGDBNAME"]) and isset($this->oxconf["PGPASSWD"])){
-          $pgcon = pg_connect("host=".$this->oxconf["PGHOST"]." user=".$this->oxconf["PGUSER"]." password=".$this->oxconf["PGPASSWD"]." dbname=".$this->oxconf["PGDBNAME"]);
+          $pgcon =  @pg_connect("host=".$this->oxconf["PGHOST"]." user=".$this->oxconf["PGUSER"]." password=".$this->oxconf["PGPASSWD"]." dbname=".$this->oxconf["PGDBNAME"]);
           if (! $pgcon){
-            print_red(_("Couldn't Connect To Postgresql Database"));
+            print_red(_("Couldn't connect to postgresql database!"));
             return;
           }
         }else{
-          print_red(_("Needed Parameters to openexchange connectivity plugin failed!"));
+          print_red(_("Needed parameters for openexchange connectivity plugin are missing!"));
           return;
         }
       }else{
-        print_red(_("PHP4 module for Postgresql Database Failed!"));
+        print_red(_("PHP4 module for postgresql database is missing!"));
         return;
       }
     }
 
-    $uid=$this->attrs[$this->dnmode][0];
-
     plugin::save();
 
     /* 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(), sprintf(_("Saving of user/oxchange account with dn '%s' failed."),$this->dn));
 
     /* Optionally execute a command after we're done */
     $this->postcreate();
 
     if($needupdate){
+      $ldap->create_missing_trees("ou=addr,".$this->dn);
+                       show_ldap_error($ldap->get_error(), sprintf(_("Creating of user/oxchange account with dn '%s' failed."),$this->dn));
       /* Finally save data to postgresql server */
       pg_set_client_encoding ("UNICODE");
       $nv = "SELECT nextval ('serial_id')";