X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fpersonal%2Fconnectivity%2Fclass_oxchangeAccount.inc;h=317506027c0dbb300b15c25635ebd5ba33e665e0;hb=7f95b9f462d676343a2c73bdf5b4bf27b7799ba5;hp=e818a96066fc9841a394ada202002c00233fae77;hpb=e299f0ca47a924516f2afbe4e922f2418b75315c;p=gosa.git diff --git a/plugins/personal/connectivity/class_oxchangeAccount.inc b/plugins/personal/connectivity/class_oxchangeAccount.inc index e818a9606..317506027 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') - { - $this->oxconf=$this->config->data['TABS']['CONNECTIVITY'][$i]; - break; - } - } + plugin::plugin ($config, $dn); + for ($i=0;$iconfig->data['TABS']['CONNECTIVITY']);$i++){ + 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() { - - /* Show tab dialog headers */ - $display= ""; - - /* Show main page */ - $smarty= get_smarty(); - - if (function_exists("pg_connect")){ - $smarty->assign("pg", true); - }else{ - $smarty->assign("pg", false); - } - - /* Load attributes */ - foreach($this->attributes as $val){ - $smarty->assign("$val", $this->$val); - $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + /* Call parent execute */ + //plugin::execute(); + + + /* 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); + } } - if ($this->is_account){ - $smarty->assign("oxchangeState", "checked"); - } else { - $smarty->assign("fstate", "disabled"); - } - -// if ($this->is_account){ - $smarty->assign("timezones", $this->timezones); -// } else { -// $smarty->assign("timezones", array("GMT")); -// } - - - if ($this->parent != NULL){ - $smarty->assign("tabbed", 1); - } - - $display.= $smarty->fetch (get_template_path('oxchange.tpl', TRUE, dirname(__FILE__))); - return ($display); + } + } + + /* Show main page */ + $smarty= get_smarty(); + + if (function_exists("pg_connect")){ + $smarty->assign("pg", true); + }else{ + $smarty->assign("pg", false); + } + + /* Load attributes */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + } + $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); + + + if ($this->parent != NULL){ + $smarty->assign("tabbed", 1); + } + + $display.= $smarty->fetch (get_template_path('oxchange.tpl', TRUE, dirname(__FILE__))); + return ($display); } function remove_from_parent() { - $sqldeluser=array( - "delete from prg_notes where (user_right like '".$this->attrs['uid'][0]."') and (group_right like 's')", - "delete from prg_documents_read where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_documents_mod where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_docufolders_read where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_docufolders_mod where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_date_rights where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_date_notification where (member_uid like '".$this->attrs['uid'][0]."')", - "delete from prg_dates_members where (member_uid like '".$this->attrs['uid'][0]."')", - "delete from prg_knowledge_read where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_knowledge_mod where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_knowledge_folder_read where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_knowledge_folder_mod where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_pin_board_read where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_pin_board_mod where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_bookmarks_read where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_bookmarks_mod where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_bookmarks_folder_read where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_bookmarks_folder_mod where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_tasks_rights where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_tasks_notification where (member_uid like '".$this->attrs['uid'][0]."')", - "delete from prg_tasks_members where (member_uid like '".$this->attrs['uid'][0]."')", - "delete from prg_projects_rights where (user_right like '".$this->attrs['uid'][0]."')", - "delete from prg_projects_notification where (member_uid like '".$this->attrs['uid'][0]."')", - "delete from prg_projects_members where (member_uid like '".$this->attrs['uid'][0]."')", - "delete from oxfolder_permissions where (entity like '".$this->attrs['uid'][0]."') AND ((role = 256) OR (role = 1024))", - "delete from oxfolder_standardfolders where owner like '".$this->attrs['uid'][0]."'", - "delete from prg_forum_read where user_right = '".$this->attrs['uid'][0]."'", - "delete from prg_forum_mod where user_right = '".$this->attrs['uid'][0]."'", - "delete from prg_forum_abo where user_right = '".$this->attrs['uid'][0]."'", - "delete from prg_forum_seen where username = '".$this->attrs['uid'][0]."'", - "delete from sys_holiday where (userid like '".$this->attrs['uid'][0]."')", - "delete from usr_holiday where (userid like '".$this->attrs['uid'][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){ - print_red(_("Couldn't Connect To Postgresql Database")); - return; - } - }else{ - print_red(_("Needed Parameters to openexchange connectivity plugin failed!")); - return; - } - }else{ - print_red(_("PHP4 module for Postgresql Database Failed!")); - return; - } - - plugin::remove_from_parent(); - $ldap= $this->config->get_ldap_link(); - - $ldap->cd($this->dn); - @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, - $this->attributes, "Save"); - $ldap->modify($this->attrs); - show_ldap_error($ldap->get_error()); - - /* Optionally execute a command after we're done */ - $this->postremove(); - - /* Finally remove data from postgresql server */ - foreach ($sqldeluser as $sqls){ - pg_exec($pgcon,$sqls); - } - pg_close(); + $sqldeluser=array( + "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 (! $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(_("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()); + } + + $ldap->cd($this->dn); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $this->cleanup(); +$ldap->modify ($this->attrs); + + show_ldap_error($ldap->get_error()); + /* Optionally execute a command after we're done */ + $this->postremove(); + + /* Finally remove data from postgresql server */ + foreach ($sqldeluser as $sqls){ + pg_exec($pgcon,$sqls); + } + pg_close(); } /* Save data to object */ function save_object() { - /* Do we need to flip is_account state? */ - if (isset($_POST['connectivityTab'])){ - if (isset($_POST['oxchange'])){ - if (!$this->is_account && $_POST['oxchange'] == "B"){ - $this->is_account= TRUE; - } - } else { - $this->is_account= FALSE; - } + /* Do we need to flip is_account state? */ + if (isset($_POST['connectivityTab'])){ + if (isset($_POST['oxchange'])){ + if (!$this->is_account && $_POST['oxchange'] == "B"){ + $this->is_account= TRUE; } + } else { + $this->is_account= FALSE; + } + } - plugin::save_object(); - if (isset($_POST["oxchangeStatus"])){ - $this->oxchangeStatus = "disabled"; - } else { - $this->oxchangeStatus = "enabled"; - } + plugin::save_object(); + if (isset($_POST["oxchangeStatus"])){ + $this->oxchangeStatus = "disabled"; + } else { + $this->oxchangeStatus = "enabled"; + } } @@ -718,67 +760,95 @@ 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")); - return; - } - }else{ - print_red(_("Needed Parameters to openexchange connectivity plugin failed!")); - return; - } - }else{ - print_red(_("PHP4 module for Postgresql Database Failed!")); - return; - } - - $uid=$this->attrs['uid'][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()); - - /* 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); + $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 ($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(_("PHP4 module for postgresql database is missing!")); + return; + } + } + + plugin::save(); + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $this->cleanup(); +$ldap->modify ($this->attrs); + + show_ldap_error($ldap->get_error()); + + /* 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()); + /* 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); + } } }