/** * Copyright (C) 2008-2013 Ulteo SAS * http://www.ulteo.com * Author Julien LANGLOIS <*****@*****.**> 2008-2013 * Author Laurent CLOUET <*****@*****.**> 2008-2011 * Author Jeremy DESVAGES <*****@*****.**> 2008-2011 * Author Vincent ROULLIER <*****@*****.**> 2013 * Author David LECHEVALIER <*****@*****.**> 2012 * Author David PHAM-VAN <*****@*****.**> 2013 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; version 2 * of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ function init_db($prefs_) { // prefs must be valid Logger::debug('main', 'init_db'); $modules_enable = $prefs_->get('general', 'module_enable'); foreach ($modules_enable as $module_name) { if (!is_null($prefs_->get($module_name, 'enable'))) { $enable = $prefs_->get($module_name, 'enable'); if (is_string($enable)) { $mod_name = $module_name . '_' . $enable; $ret_eval = call_user_func(array($mod_name, 'init'), $prefs_); if ($ret_eval !== true) { Logger::error('main', 'init_db init module \'' . $mod_name . '\' failed'); return false; } } elseif (is_array($enable)) { foreach ($enable as $sub_module) { $mod_name = $module_name . '_' . $sub_module; $ret_eval = call_user_func(array($mod_name, 'init'), $prefs_); if ($ret_eval !== true) { Logger::error('main', 'init_db init module \'' . $mod_name . '\' failed'); return false; } } } } } Logger::debug('main', 'init_db modules inited'); // Init of Abstract Abstract_Server::init($prefs_); Abstract_ServersGroup::init($prefs_); Abstract_Session::init($prefs_); Abstract_Token::init($prefs_); Abstract_News::init($prefs_); Abstract_Script::init($prefs_); Abstract_Liaison::init($prefs_); if (class_exists("PremiumManager")) { PremiumManager::initdb($prefs_); } Abstract_Task::init($prefs_); Abstract_ReportServer::init($prefs_); Abstract_ReportSession::init($prefs_); Abstract_User_Preferences::init($prefs_); Abstract_UserGroup_Preferences::init($prefs_); Abstract_UserGroup_Rule::init($prefs_); Abstract_VDI::init($prefs_); Abstract_Network_Folder::init($prefs_); Abstract_AdminAction::init($prefs_); return true; }
public static function save($usergroup_rule_) { Logger::debug('main', 'Starting Abstract_UserGroup_Rule::save for (attribute: \'' . $usergroup_rule_->attribute . '\', type: \'' . $usergroup_rule_->type . '\', value: \'' . $usergroup_rule_->value . '\', usergroup_id: \'' . $usergroup_rule_->usergroup_id . '\')'); $SQL = SQL::getInstance(); $rule_id = Abstract_UserGroup_Rule::exists($usergroup_rule_->attribute, $usergroup_rule_->type, $usergroup_rule_->value, $usergroup_rule_->usergroup_id); if (!$rule_id) { $buf = Abstract_UserGroup_Rule::create($usergroup_rule_); if ($buf === false) { Logger::error('main', 'Abstract_UserGroup_Rule::save failed to create rule'); return false; } $usergroup_rule_->id = $buf; } else { Logger::debug('main', 'Abstract_UserGroup_Rule::save rule(' . $usergroup_rule_->attribute . ',' . $usergroup_rule_->type . ',' . $usergroup_rule_->value . ',' . $usergroup_rule_->usergroup_id . ') already exists'); $usergroup_rule_->id = $rule_id; return true; } if (is_null($usergroup_rule_->id)) { Logger::error('main', 'Abstract_UserGroup_Rule::save rule\'s id is null'); return false; } $SQL->DoQuery('UPDATE #1 SET @2=%3,@4=%5,@6=%7,@8=%9 WHERE @10 = %11 LIMIT 1', self::table, 'attribute', $usergroup_rule_->attribute, 'type', $usergroup_rule_->type, 'value', $usergroup_rule_->value, 'usergroup_id', $usergroup_rule_->usergroup_id, 'id', $usergroup_rule_->id); return true; }
public function update($usergroup_) { Logger::debug('main', 'UserGroupDBDynamic::internal::update'); $old_usergroup = $this->import($usergroup_->id); $old_rules = $old_usergroup->rules; $sql2 = SQL::getInstance(); $res = $sql2->DoQuery('UPDATE #1 SET @2 = %3 , @4 = %5 , @6 = %7 , @10 = %11 WHERE @8 = %9', self::table, 'published', $usergroup_->published, 'name', $usergroup_->name, 'description', $usergroup_->description, 'id', $usergroup_->id, 'validation_type', $usergroup_->validation_type); if ($res === false) { Logger::error('main', 'UserGroupDBDynamic::internal::update failed to update the group from DB'); return false; } foreach ($old_rules as $a_rule) { Abstract_UserGroup_Rule::delete($a_rule->id); } $new_rules = $usergroup_->rules; foreach ($new_rules as $a_rule) { $a_rule->usergroup_id = $usergroup_->getUniqueID(); Abstract_UserGroup_Rule::save($a_rule); } return true; }
public static function getByUserGroupId($usergroup_id_) { $usergroup_rules = Abstract_UserGroup_Rule::loadByUserGroupId($usergroup_id_); return $usergroup_rules; }
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 } } } }