Example #1
0
/**
 * 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;
 }
Example #3
0
 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;
 }
Example #5
0
 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
             }
         }
     }
 }