private function hooks_system_integration_changes($prefs_, $diff_) { $userdb_changed_enable = array_key_exists('UserDB.enable', $diff_); $usersgroupdb_changed_enable = array_key_exists('UserGroupDB.enable', $diff_); $has_changed_u = self::check_pref_change($diff_, 'UserDB.' . $prefs_->get('UserDB', 'enable')); $has_changed_ug = self::check_pref_change($diff_, 'UserGroupDB.' . $prefs_->get('UserGroupDB', 'enable')); $userDB = UserDB::getInstance(); $userGroupDB = UserGroupDB::getInstance(); // Clean orphan user settings if ($userdb_changed_enable) { Abstract_User_Preferences::delete_all(); } else { if ($has_changed_u) { $users = Abstract_User_Preferences::get_users(); $users_to_remove = array(); foreach ($users as $login) { $user = $userDB->import($login); if ($user) { continue; } array_push($users_to_remove, $login); } if (count($users_to_remove) > 0) { Abstract_User_Preferences::deleteByUserLogins($users_to_remove); } } } // Clean orphan users group settings if ($usersgroupdb_changed_enable) { Abstract_UserGroup_Preferences::delete_all(); } else { if ($has_changed_ug) { $groups = Abstract_UserGroup_Preferences::get_usersgroups(); $groups_to_remove = array(); foreach ($groups as $group_id) { $group = $userGroupDB->import($group_id); if ($group) { continue; } array_push($groups_to_remove, $group); } if (count($groups_to_remove) > 0) { Abstract_UserGroup_Preferences::deleteByUserGroupIds($groups_to_remove); } } } // Users groups rules if ($usersgroupdb_changed_enable) { Abstract_UserGroup_Rule::delete_all(); } else { if ($has_changed_ug) { $groups = Abstract_UserGroup_Rule::get_usersgroups(); $groups_to_remove = array(); foreach ($groups as $group_id) { $group = $userGroupDB->import($group_id); if ($group) { continue; } array_push($groups_to_remove, $group); } if (count($groups_to_remove) > 0) { Abstract_UserGroup_Rule::deleteByUserGroupIds($groups_to_remove); } } } // Unset default usersgroup if ($usersgroupdb_changed_enable) { $prefs_->set('general', 'user_default_group', NULL); $prefs_->backup(); } else { if ($has_changed_ug) { $v = $prefs_->get('general', 'user_default_group'); if (!is_null($v)) { $group = $userGroupDB->import($v); if (!$group) { $prefs_->set('general', 'user_default_group', NULL); $prefs_->backup(); } } } } // Clean users - usersgroup liaisons if ($userdb_changed_enable) { // Remove Users from user groups $ret = Abstract_Liaison::delete('UsersGroup', NULL, NULL); if (!$ret) { Logger::error('api', 'Unable to remove Users from UserGroups'); } } else { if ($userGroupDB->isWriteable() && ($has_changed_u && $has_changed_ug)) { $liaisons = Abstract_Liaison::load('UsersGroup', NULL, NULL); foreach ($liaisons as $liaison) { $must_remove_liaisons = false; $user = $userDB->import($liaison->element); if (!$user) { $must_remove_liaisons = true; } if (!$must_remove_liaisons) { $group = $userGroupDB->import($liaison->group); if (!$group) { $must_remove_liaisons = true; } } if (!$must_remove_liaisons) { continue; } // Delete this liaison $liaisons = Abstract_Liaison::load('UsersGroup', $liaison->element, $liaison->group); } } } // Clean users - profile liaisons if ($userdb_changed_enable) { $ret = Abstract_Liaison::delete('UserProfile', NULL, NULL); if (!$ret) { Logger::error('api', 'Unable to remove Users - Profiles matches'); } } else { if ($has_changed_u) { $liaisons = Abstract_Liaison::load('UserProfile', NULL, NULL); foreach ($liaisons as $liaison) { // check if profile must become orphan $user = $userDB->import($liaison->element); if ($user) { continue; } // Delete this liaison $liaisons = Abstract_Liaison::load('UserProfile', $liaison->element, $liaison->group); } } } // Clean publication liaisons if ($usersgroupdb_changed_enable) { // Remove Publications $ret = Abstract_Liaison::delete('UsersGroupApplicationsGroup', NULL, NULL); if (!$ret) { Logger::error('api', 'Unable to remove Publications'); } } else { if ($has_changed_ug) { $liaisons = Abstract_Liaison::load('UsersGroupApplicationsGroup', NULL, NULL); foreach ($liaisons as $liaison) { $group = $userGroupDB->import($liaison->element); if ($group) { continue; } // Delete this liaison $liaisons = Abstract_Liaison::load('UsersGroupApplicationsGroup', $liaison->element, $liaison->group); } } } if (in_array('SharedFolderDB', $prefs_->get('general', 'enable'))) { $sharedfolderdb = SharedFolderDB::getInstance(); // Clean usersgroup - profile liaisons if ($usersgroupdb_changed_enable) { $sharedfolderdb->clear_publications(); } else { if ($has_changed_ug) { // TODO:check in each publication if users group still exists. If not: delete the publication } } } }