config->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()
{
/* Call parent execute */
//plugin::execute();
print_red(_("New ACLs are not implemeneted yet."));
$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();
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);
}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);
}
function remove_from_parent()
{
$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(), 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");
$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();
/* 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;
}
}
plugin::save_object();
if (isset($_POST["oxchangeStatus"])){
$this->oxchangeStatus = "disabled";
} else {
$this->oxchangeStatus = "enabled";
}
}
/* Save to LDAP */
function save()
{
$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(_("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(), 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')";
$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);
}
}
/* Return plugin informations for acl handling
#FIXME ACL attributes aren't translated yet. */
function plInfo()
{
return (array(
"plShortName" => _("Open xchange"),
"plDescription" => _("Open xchange account settings"),
"plSelfModify" => TRUE,
"plDepends" => array("connectivity"),
"plPriority" => 4, // Position in tabs
"plSection" => "personal", // This belongs to personal
"plCategory" => array("gosaAccount"),
"plOptions" => array(),
"plProvidedAcls" => array(
"OXAppointmentDays" => "!!! FIXME "._("OXAppointmentDays"),
"OXTaskDays" => _("OXTaskDays"),
"mailEnabled" => _("mailEnabled"),
"OXTimeZone" => _("OXTimeZone"))
));
}
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>