X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fpersonal%2Fconnectivity%2Fclass_oxchangeAccount.inc;h=36db420f9e3004dedc631ea62fb78fed4638b019;hb=26dbc488fc745965586ec6ce8854c29fa69a38d3;hp=63f963d8d3f19d12ed9cf5e3fbed1cf21191f15a;hpb=9f241a5397ab445b8c0c875a7f1ec2092e5ae2c6;p=gosa.git diff --git a/plugins/personal/connectivity/class_oxchangeAccount.inc b/plugins/personal/connectivity/class_oxchangeAccount.inc index 63f963d8d..36db420f9 100644 --- a/plugins/personal/connectivity/class_oxchangeAccount.inc +++ b/plugins/personal/connectivity/class_oxchangeAccount.inc @@ -1,4 +1,23 @@ config->data['TABS']['CONNECTIVITY']);$i++){ - if($this->config->data['TABS']['CONNECTIVITY'][$i]['CLASS']=='oxchangeAccount') - { + if($this->config->data['TABS']['CONNECTIVITY'][$i]['CLASS']=='oxchangeAccount') { $this->oxconf=$this->config->data['TABS']['CONNECTIVITY'][$i]; break; } } + + $this->dnmode= $this->config->current['DNMODE']; } 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= "

".sprintf(_("This account has %s features disabled. Posix features are needed for openXchange accounts, enable them first."), ""._("OpenXchange")."")."


"; + + } else { + if (! $obj2->is_account){ + $display= "

".sprintf(_("This account has %s features disabled. Mail features are needed for openXchange accounts, enable them first."), ""._("OpenXchange")."")."


"; + return ($display); + } + } + } + } +*/ /* Show main page */ $smarty= get_smarty(); @@ -600,21 +639,34 @@ 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("fstate", "disabled"); + $smarty->assign("oxState", "disabled"); } - // if ($this->is_account){ $smarty->assign("timezones", $this->timezones); - // } else { - // $smarty->assign("timezones", array("GMT")); - // } 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); @@ -623,64 +675,73 @@ class oxchangeAccount extends plugin function remove_from_parent() { $sqldeluser=array( - "delete from prg_notes where (user_right like '".$this->attrs['cn'][0]."') and (group_right like 's')", - "delete from prg_documents_read where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_documents_mod where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_docufolders_read where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_docufolders_mod where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_date_rights where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_date_notification where (member_uid like '".$this->attrs['cn'][0]."')", - "delete from prg_dates_members where (member_uid like '".$this->attrs['cn'][0]."')", - "delete from prg_knowledge_read where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_knowledge_mod where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_knowledge_folder_read where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_knowledge_folder_mod where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_pin_board_read where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_pin_board_mod where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_bookmarks_read where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_bookmarks_mod where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_bookmarks_folder_read where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_bookmarks_folder_mod where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_tasks_rights where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_tasks_notification where (member_uid like '".$this->attrs['cn'][0]."')", - "delete from prg_tasks_members where (member_uid like '".$this->attrs['cn'][0]."')", - "delete from prg_projects_rights where (user_right like '".$this->attrs['cn'][0]."')", - "delete from prg_projects_notification where (member_uid like '".$this->attrs['cn'][0]."')", - "delete from prg_projects_members where (member_uid like '".$this->attrs['cn'][0]."')", - "delete from oxfolder_permissions where (entity like '".$this->attrs['cn'][0]."') AND ((role = 256) OR (role = 1024))", - "delete from oxfolder_standardfolders where owner like '".$this->attrs['cn'][0]."'", - "delete from prg_forum_read where user_right = '".$this->attrs['cn'][0]."'", - "delete from prg_forum_mod where user_right = '".$this->attrs['cn'][0]."'", - "delete from prg_forum_abo where user_right = '".$this->attrs['cn'][0]."'", - "delete from prg_forum_seen where username = '".$this->attrs['cn'][0]."'", - "delete from sys_holiday where (userid like '".$this->attrs['cn'][0]."')", - "delete from usr_holiday where (userid like '".$this->attrs['cn'][0]."')"); + "delete from prg_notes where (user_right like '".$this->attrs[$this->dnmode][0]."') and (group_right like 's')", + "delete from prg_documents_read where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_documents_mod where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_docufolders_read where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_docufolders_mod where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_date_rights where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_date_notification where (member_uid like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_dates_members where (member_uid like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_knowledge_read where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_knowledge_mod where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_knowledge_folder_read where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_knowledge_folder_mod where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_pin_board_read where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_pin_board_mod where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_bookmarks_read where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_bookmarks_mod where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_bookmarks_folder_read where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_bookmarks_folder_mod where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_tasks_rights where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_tasks_notification where (member_uid like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_tasks_members where (member_uid like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_projects_rights where (user_right like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_projects_notification where (member_uid like '".$this->attrs[$this->dnmode][0]."')", + "delete from prg_projects_members where (member_uid like '".$this->attrs[$this->dnmode][0]."')", + "delete from oxfolder_permissions where (entity like '".$this->attrs[$this->dnmode][0]."') AND ((role = 256) OR (role = 1024))", + "delete from oxfolder_standardfolders where owner like '".$this->attrs[$this->dnmode][0]."'", + "delete from prg_forum_read where user_right = '".$this->attrs[$this->dnmode][0]."'", + "delete from prg_forum_mod where user_right = '".$this->attrs[$this->dnmode][0]."'", + "delete from prg_forum_abo where user_right = '".$this->attrs[$this->dnmode][0]."'", + "delete from prg_forum_seen where username = '".$this->attrs[$this->dnmode][0]."'", + "delete from sys_holiday where (userid like '".$this->attrs[$this->dnmode][0]."')", + "delete from usr_holiday where (userid like '".$this->attrs[$this->dnmode][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(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(); @@ -719,69 +780,101 @@ class oxchangeAccount extends plugin function save() { - /* 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){ - print_red(_("Couldn't Connect To Postgresql Database")); + $needupdate=TRUE; + $istemplate=FALSE; + + +/* print "
".print_r($this->attrs, true)."
";*/ + + + /*First at all, we must check if this is new or is updated */ + /*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"]); + if (! $pgcon){ + print_red(_("Couldn't connect to postgresql database!")); + return; + } + }else{ + print_red(_("Needed parameters for openexchange connectivity plugin are missing!")); return; } }else{ - print_red(_("Needed Parameters to openexchange connectivity plugin failed!")); + print_red(_("PHP4 module for postgresql database is missing!")); return; } - }else{ - print_red(_("PHP4 module for Postgresql Database Failed!")); - return; } - $uid=$this->attrs['cn'][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(); - /* Finally save data to postgresql server */ - pg_set_client_encoding ("UNICODE"); - $nv = "SELECT nextval ('serial_id')"; - $ot = "insert into oxfolder_tree (fuid, parent, fname, module, type, owner, creator, creating_date, created_from, changing_date, changed_from) VALUES (%d, 1, '%s', '%s', 'private', '%s', '%s', 'now', 'System', 'now', 'System')"; - $op = "INSERT INTO oxfolder_permissions (puid, pid, role, entity, sealed, fp, orp, owp, odp) VALUES (%d, %d, 32768, '%s', 0, 128, 128, 128, 128)"; - $os = "insert into oxfolder_standardfolders (owner,module_calendar,module_contact,module_task) VALUES ('%s',%d,%d,%d)"; - $ugr= "INSERT INTO usr_general_rights SELECT creating_date, created_from, changing_date, changed_from,text('%s'), addr_u, addr_r, addr_d, cont_u, cont_r, cont_d, data_u, data_r, data_d, serie_u, serie_r, serie_d, task_u, task_r, task_d, refer, proj_u, proj_r, proj_d, dfolder_u, dfolder_r, dfolder_d, doc_u, doc_r, doc_d, knowl_u, knowl_r, knowl_d, bfolder_u, bfolder_r, bfolder_d, bookm_u, bookm_r, bookm_d, pin_u, pin_r, pin_d, forum_n, fentrie_n, setup, pin_public, internal, int_groups, kfolder_u, kfolder_r, kfolder_d, webmail FROM sys_gen_rights_template WHERE login LIKE 'default_template'"; - - $res=pg_exec($pgcon,$nv); $calendarid=pg_fetch_row($res); pg_freeresult($res); - $q=sprintf($ot,$calendarid[0],'My Appointments','calendar',$uid,$uid); - pg_exec($pgcon,$q); - $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); - $q=sprintf($op,$nid[0],$calendarid[0],$uid); - pg_exec($pgcon,$q); - $res=pg_exec($pgcon,$nv); $contactsid=pg_fetch_row($res); pg_freeresult($res); - $q=sprintf($ot,$contactsid[0],'My Contacts','contact',$uid,$uid); - pg_exec($pgcon,$q); - $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); - $q=sprintf($op,$nid[0],$contactsid[0],$uid); - pg_exec($pgcon,$q); - $res=pg_exec($pgcon,$nv); $tasksid=pg_fetch_row($res); pg_freeresult($res); - $q=sprintf($ot,$tasksid[0],'My Tasks','task',$uid,$uid); - pg_exec($pgcon,$q); - $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); - $q=sprintf($op,$nid[0],$tasksid[0],$uid); - pg_exec($pgcon,$q); - $q=sprintf($os,$uid,$calendarid[0],$contactsid[0],$tasksid[0]); - pg_exec($pgcon,$q); - $q=sprintf($ugr,$uid); - pg_exec($pgcon,$q); - pg_close($pgcon); + 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')"; + $ot = "insert into oxfolder_tree (fuid, parent, fname, module, type, owner, creator, creating_date, created_from, changing_date, changed_from) VALUES (%d, 1, '%s', '%s', 'private', '%s', '%s', 'now', 'System', 'now', 'System')"; + $op = "INSERT INTO oxfolder_permissions (puid, pid, role, entity, sealed, fp, orp, owp, odp) VALUES (%d, %d, 32768, '%s', 0, 128, 128, 128, 128)"; + $os = "insert into oxfolder_standardfolders (owner,module_calendar,module_contact,module_task) VALUES ('%s',%d,%d,%d)"; + $ugr= "INSERT INTO usr_general_rights SELECT creating_date, created_from, changing_date, changed_from,text('%s'), addr_u, addr_r, addr_d, cont_u, cont_r, cont_d, data_u, data_r, data_d, serie_u, serie_r, serie_d, task_u, task_r, task_d, refer, proj_u, proj_r, proj_d, dfolder_u, dfolder_r, dfolder_d, doc_u, doc_r, doc_d, knowl_u, knowl_r, knowl_d, bfolder_u, bfolder_r, bfolder_d, bookm_u, bookm_r, bookm_d, pin_u, pin_r, pin_d, forum_n, fentrie_n, setup, pin_public, internal, int_groups, kfolder_u, kfolder_r, kfolder_d, webmail FROM sys_gen_rights_template WHERE login LIKE 'default_template'"; + + $res=pg_exec($pgcon,$nv); $calendarid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($ot,$calendarid[0],'My Appointments','calendar',$uid,$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($op,$nid[0],$calendarid[0],$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $contactsid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($ot,$contactsid[0],'My Contacts','contact',$uid,$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($op,$nid[0],$contactsid[0],$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $tasksid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($ot,$tasksid[0],'My Tasks','task',$uid,$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($op,$nid[0],$tasksid[0],$uid); + pg_exec($pgcon,$q); + $q=sprintf($os,$uid,$calendarid[0],$contactsid[0],$tasksid[0]); + pg_exec($pgcon,$q); + $q=sprintf($ugr,$uid); + pg_exec($pgcon,$q); + pg_close($pgcon); + } } } -// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>