Example #1
0
function show_manage($profile_id_)
{
    $profiledb = ProfileDB::getInstance();
    $profile = $profiledb->import($profile_id_);
    if (!is_object($profile)) {
        redirect('profiles.php');
    }
    $used_users = $profile->getUsers();
    page_header();
    echo '<div id="profiles_div">';
    echo '<h1>' . sprintf(_("Profile: %s"), $profile->id) . '</h1>';
    echo '<div>';
    echo '<h2>' . _('Server') . '</h2>';
    echo '<a href="servers.php?action=manage&fqdn=' . $profile->server . '"> ' . $profile->server . '</a>';
    echo '</div>';
    echo '<br />';
    echo '<div>';
    echo '<h2>' . _('Used by') . '</h2>';
    echo '<table border="0" cellspacing="1" cellpadding="3">';
    foreach ($used_users as $user) {
        echo '<tr>';
        echo '<td><a href="users.php?action=manage&amp;id=' . $user->getAttribute('login') . '">' . $user->getAttribute('displayname') . '</a></td>';
        echo '</tr>';
    }
    echo '</table>';
    echo '</div>';
    echo '</div>';
    page_footer();
}
Example #2
0
 public static function getInstance()
 {
     if (is_null(self::$instance)) {
         $prefs = Preferences::getInstance();
         if (!$prefs) {
             die_error('get Preferences failed', __FILE__, __LINE__);
         }
         $mods_enable = $prefs->get('general', 'module_enable');
         if (!in_array('ProfileDB', $mods_enable)) {
             die_error(_('ProfileDB module must be enabled'), __FILE__, __LINE__);
         }
         $mod_app_name = 'ProfileDB_' . $prefs->get('ProfileDB', 'enable');
         self::$instance = new $mod_app_name();
     }
     return self::$instance;
 }
Example #3
0
 public function delGroup($usergroup_)
 {
     $profiledb = ProfileDB::getInstance();
     return $profiledb->delUserOfProfile($user_, $this);
 }
Example #4
0
 public function get()
 {
     $used = 0;
     $total = 0;
     if (Preferences::moduleIsEnabled('ProfileDB')) {
         $profiledb = ProfileDB::getInstance();
         $total += $profiledb->count();
         $used += $profiledb->countOnServer($this->server->fqdn);
     }
     if (Preferences::moduleIsEnabled('SharedFolderDB')) {
         $sharedfolderdb = SharedFolderDB::getInstance();
         $total += $sharedfolderdb->count();
         $used += $sharedfolderdb->countOnServer($this->server->fqdn);
     }
     if ($total == 0) {
         return 0;
     } else {
         return 1.0 - (double) $used / (double) $total;
     }
 }
Example #5
0
 public function getProfiles()
 {
     if (Preferences::moduleIsEnabled('ProfileDB') == false) {
         return array();
     }
     $profiledb = ProfileDB::getInstance();
     return $profiledb->importFromUser($this->getAttribute('login'));
 }
Example #6
0
        redirect();
    } elseif ($_REQUEST['action'] == 'del' && isset($_REQUEST['sharedfolder_id']) && isset($_REQUEST['usergroup_id'])) {
        action_del_sharedfolder_acl($_REQUEST['sharedfolder_id'], $_REQUEST['usergroup_id']);
        redirect();
    }
}
if ($_REQUEST['name'] == 'Profile') {
    if (Preferences::moduleIsEnabled('ProfileDB') == false) {
        popup_error(_('Profile management is not enabled'));
        redirect();
    }
    if (!checkAuthorization('manageServers')) {
        redirect();
    }
    if ($_REQUEST['action'] == 'del') {
        $profiledb = ProfileDB::getInstance();
        foreach ($_REQUEST['ids'] as $id) {
            $network_folder = $profiledb->import($id);
            if (is_object($network_folder)) {
                if (!$network_folder->isUsed()) {
                    $buf = $profiledb->remove($network_folder->id);
                } else {
                    $buf = false;
                }
                if (!$buf) {
                    popup_error(sprintf(_("Unable to delete profile '%s'"), $network_folder->id));
                } else {
                    popup_info(sprintf(_("Profile '%s' successfully deleted"), $network_folder->id));
                }
            } else {
                popup_error(sprintf(_("Unable to load profile '%s'"), $id));
 public static function load_orphans()
 {
     Logger::debug('main', 'Starting Abstract_Network_Folder::load_orphans()');
     $sharedfolderdb = null;
     if (Preferences::moduleIsEnabled('SharedFolderDB')) {
         $sharedfolderdb = SharedFolderDB::getInstance();
     }
     $profiles = null;
     if (Preferences::moduleIsEnabled('ProfileDB')) {
         $profiledb = ProfileDB::getInstance();
     }
     $SQL = SQL::getInstance();
     if (is_null($sharedfolderdb) && is_null($profiledb)) {
         $SQL->DoQuery('SELECT * FROM #1;', self::$table);
     } else {
         if (is_null($sharedfolderdb)) {
             $SQL->DoQuery('SELECT * FROM #1 WHERE @2 NOT IN ( SELECT @2 FROM #3 );', self::$table, 'id', ProfileDB_internal::$table);
         } else {
             if (is_null($profiledb)) {
                 $SQL->DoQuery('SELECT * FROM #1 WHERE @2 NOT IN ( SELECT @2 FROM #3 );', self::$table, 'id', SharedFolderDB_internal::$table);
             } else {
                 $SQL->DoQuery('SELECT * FROM #1 WHERE @2 NOT IN ( SELECT @2 FROM #3 ) AND @2 NOT IN ( SELECT @2 FROM #4 )', self::$table, 'id', ProfileDB_internal::$table, SharedFolderDB_internal::$table);
             }
         }
     }
     $rows = $SQL->FetchAllResults();
     $network_folders = array();
     foreach ($rows as $row) {
         $Network_Folder = self::generateFromRow($row);
         if (!is_object($Network_Folder)) {
             continue;
         }
         $network_folders[] = $Network_Folder;
     }
     return $network_folders;
 }
Example #8
0
 public function updateNetworkFolders()
 {
     if (!is_array($this->roles) || !array_key_exists(Server::SERVER_ROLE_FS, $this->roles)) {
         Logger::critical('main', 'Server::updateNetworkFolders - Not an FS');
         return false;
     }
     if (!$this->isOnline()) {
         Logger::debug('main', 'Server::updateNetworkFolders server "' . $this->fqdn . ':' . $this->web_port . '" is not online');
         return false;
     }
     $forders_on_server = $this->getNetworkFoldersList();
     if (is_array($forders_on_server) === false) {
         Logger::error('main', 'Server::updateNetworkFolders getNetworkFoldersList failed for fqdn=' . $this->fqdn);
         return false;
     }
     $folders_on_sm1 = array();
     if (Preferences::moduleIsEnabled('ProfileDB')) {
         $profiledb = ProfileDB::getInstance();
         $folders_on_sm1 = $profiledb->importFromServer($this->fqdn);
     }
     $folders_on_sm2 = array();
     if (Preferences::moduleIsEnabled('SharedFolderDB')) {
         $sharedfolderdb = SharedFolderDB::getInstance();
         $folders_on_sm2 = $sharedfolderdb->importFromServer($this->fqdn);
     }
     $folders_on_sm = array();
     if (is_array($folders_on_sm1)) {
         $folders_on_sm = array_merge($folders_on_sm, $folders_on_sm1);
     }
     if (is_array($folders_on_sm2)) {
         $folders_on_sm = array_merge($folders_on_sm, $folders_on_sm2);
     }
     foreach ($forders_on_server as $folder_id) {
         if (Preferences::moduleIsEnabled('SharedFolderDB')) {
             $folder = $sharedfolderdb->import($folder_id);
             if ($folder) {
                 $db = $sharedfolderdb;
             }
         }
         if (Preferences::moduleIsEnabled('ProfileDB')) {
             if (!$folder) {
                 $folder = $profiledb->import($folder_id);
                 $db = $profiledb;
             }
         }
         if (is_object($folder) === false) {
             // networkfolder does not exist
             $folder = new NetworkFolder();
             $folder->id = $folder_id;
             $folder->name = $folder_id;
             $folder->server = $this->fqdn;
             $profiledb->remove($folder);
             $sharedfolderdb->remove($folder);
         }
     }
     return true;
 }
Example #9
0
 public function buildServersList($simulation_mode = false)
 {
     if (!$this->user) {
         Logger::error('main', 'SessionManagement::buildServersList - User is not authenticated, aborting');
         return false;
     }
     $serverRoles = $this->getServerRoles();
     $this->servers = array();
     $servers_count = 0;
     foreach ($serverRoles as $role) {
         if (!array_key_exists($role, $this->servers)) {
             $this->servers[$role] = array();
         }
         switch ($role) {
             case Server::SERVER_ROLE_APS:
                 $default_settings = $this->user->getSessionSettings('session_settings_defaults');
                 $bypass_servers_restrictions = $default_settings['bypass_servers_restrictions'] == 1;
                 $servers = $this->chooseApplicationServers($bypass_servers_restrictions);
                 if (!is_array($servers)) {
                     return false;
                 }
                 foreach ($servers as $server) {
                     $servers_count++;
                     $this->servers[Server::SERVER_ROLE_APS][$server->id] = array('status' => Session::SESSION_STATUS_CREATED);
                 }
                 break;
             case Server::SERVER_ROLE_FS:
                 if (get_class($this) != 'SessionManagement_internal') {
                     Logger::error('main', 'SessionManagement::buildServersList - Role "' . $role . '" is not compatible with the current integration mode (' . substr(get_class($this), strlen('SessionManagement_')) . '), aborting');
                     return false;
                 }
                 $prefs = Preferences::getInstance();
                 if (!$prefs) {
                     return false;
                 }
                 $mods_enable = $prefs->get('general', 'module_enable');
                 $default_settings = $this->user->getSessionSettings('session_settings_defaults');
                 $enable_profiles = $default_settings['enable_profiles'] == 1;
                 $auto_create_profile = $default_settings['auto_create_profile'] == 1 && in_array('ProfileDB', $mods_enable);
                 $start_without_profile = $default_settings['start_without_profile'] == 1;
                 $enable_sharedfolders = $default_settings['enable_sharedfolders'] == 1 && in_array('SharedFolderDB', $mods_enable);
                 $start_without_all_sharedfolders = $default_settings['start_without_all_sharedfolders'] == 1;
                 if ($enable_profiles) {
                     $fileservers = Abstract_Server::load_available_by_role(Server::SERVER_ROLE_FS);
                     if (count($fileservers) > 0) {
                         $profiles = $this->user->getProfiles();
                         if (!is_array($profiles)) {
                             Logger::error('main', 'SessionManagement::buildServersList - getProfiles() failed for User "' . $this->user->getAttribute('login') . '", aborting');
                             return false;
                         }
                         if (count($profiles) == 1) {
                             Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" already have a Profile, using it');
                             $profile = array_pop($profiles);
                             foreach ($fileservers as $fileserver) {
                                 if ($fileserver->id != $profile->server) {
                                     continue;
                                 }
                                 if (!array_key_exists($fileserver->id, $this->servers[Server::SERVER_ROLE_FS])) {
                                     $this->servers[Server::SERVER_ROLE_FS][$fileserver->id] = array();
                                 }
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->id][] = array('type' => 'profile', 'rid' => $this->find_uniq_rid('profile', true), 'dir' => $profile->id);
                                 break;
                             }
                         } else {
                             Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a Profile for now, checking for auto-creation');
                             if ($auto_create_profile) {
                                 Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" Profile will be auto-created and used');
                                 $profileDB = ProfileDB::getInstance();
                                 $fileserver = $profileDB->chooseFileServer();
                                 if (!is_object($fileserver)) {
                                     Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to get a valid FileServer)');
                                     return false;
                                 }
                                 if (!$simulation_mode) {
                                     $profile = new Profile(NULL, $fileserver->id, NetworkFolder::NF_STATUS_OK);
                                     if (!$profileDB->addToServer($profile, $fileserver)) {
                                         Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to add the Profile to the FileServer)');
                                         return false;
                                     }
                                     if (!$profile->addUser($this->user)) {
                                         Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to associate the User to the Profile)');
                                         return false;
                                     }
                                     if (!array_key_exists($fileserver->id, $this->servers[Server::SERVER_ROLE_FS])) {
                                         $this->servers[Server::SERVER_ROLE_FS][$fileserver->id] = array();
                                     }
                                     $this->servers[Server::SERVER_ROLE_FS][$fileserver->id][] = array('type' => 'profile', 'rid' => $this->find_uniq_rid('profile', true), 'dir' => $profile->id);
                                 }
                             } else {
                                 Logger::debug('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" disabled, checking for session without Profile');
                                 if (!$start_without_profile) {
                                     Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a valid Profile, aborting');
                                     return false;
                                 }
                                 Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without a valid Profile, proceeding');
                             }
                         }
                     } else {
                         Logger::debug('main', 'SessionManagement::buildServersList - No "' . $role . '" server found for User "' . $this->user->getAttribute('login') . '", checking for session without Profile');
                         if (!$start_without_profile) {
                             Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a valid Profile, aborting');
                             return false;
                         }
                         Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without a valid Profile, proceeding');
                     }
                 }
                 if ($enable_sharedfolders) {
                     $sharedfolders = $this->user->getSharedFolders();
                     if (!is_array($sharedfolders)) {
                         Logger::error('main', 'SessionManagement::buildServersList - getSharedFolders() failed for User "' . $this->user->getAttribute('login') . '", aborting');
                         return false;
                     }
                     if (count($sharedfolders) > 0) {
                         foreach ($sharedfolders as $sharedfolder_id => $info) {
                             $sharedfolder = $info['share'];
                             $fileserver = Abstract_Server::load($sharedfolder->server);
                             if (!$fileserver || !$fileserver->isOnline() || $fileserver->getAttribute('locked')) {
                                 Logger::warning('main', 'SessionManagement::buildServersList - Server "' . $sharedfolder->server . '" for SharedFolder "' . $sharedfolder->id . '" is not available');
                                 if (!$start_without_all_sharedfolders) {
                                     Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have all SharedFolders available, aborting');
                                     return false;
                                 } else {
                                     Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without all SharedFolders available, proceeding');
                                     continue;
                                 }
                             }
                             if (!array_key_exists($fileserver->id, $this->servers[Server::SERVER_ROLE_FS])) {
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->id] = array();
                             }
                             $this->servers[Server::SERVER_ROLE_FS][$fileserver->id][] = array('type' => 'sharedfolder', 'rid' => $this->find_uniq_rid('sharedfolder', true), 'dir' => $sharedfolder->id, 'name' => $sharedfolder->name, 'mode' => $info['mode']);
                         }
                     }
                 }
                 break;
             case Server::SERVER_ROLE_WEBAPPS:
                 $servers = $this->chooseWebAppServers();
                 if (!is_array($servers)) {
                     break;
                 }
                 Logger::debug('main', 'SessionManagement::buildServersList - found ' . count($servers) . ' webapp server(s)');
                 foreach ($servers as $server) {
                     $servers_count++;
                     $this->servers[Server::SERVER_ROLE_WEBAPPS][$server->id] = array('status' => Session::SESSION_STATUS_CREATED);
                 }
                 break;
         }
     }
     if ($servers_count < 1) {
         Logger::error('main', 'SessionManagement::buildServersList - no server found!');
         return false;
     }
     return true;
 }
Example #10
0
function checkup_liaison($type_, $element_, $group_)
{
    switch ($type_) {
        case 'ApplicationServer':
            $applicationDB = ApplicationDB::getInstance();
            $buf = $applicationDB->import($element_);
            if (!is_object($buf)) {
                return 'Application "' . $element_ . '" does not exist';
            }
            $buf = Abstract_Server::load($group_);
            if (!$buf) {
                return 'Server "' . $group_ . '" does not exist';
            }
            break;
        case 'AppsGroup':
            $applicationDB = ApplicationDB::getInstance();
            $buf = $applicationDB->import($element_);
            if (!is_object($buf)) {
                return 'Application "' . $element_ . '" does not exist';
            }
            $applicationsGroupDB = ApplicationsGroupDB::getInstance();
            $buf = $applicationsGroupDB->import($group_);
            if (!is_object($buf)) {
                return 'ApplicationsGroup "' . $group_ . '" does not exist';
            }
            break;
        case 'ApplicationMimeType':
            $applicationDB = ApplicationDB::getInstance();
            $buf = $applicationDB->import($element_);
            if (!is_object($buf)) {
                return 'Application "' . $element_ . '" does not exist';
            }
            break;
        case 'ServerSession':
            $buf = Abstract_Server::load($element_);
            if (!$buf) {
                return 'Server "' . $element_ . '" does not exist';
            }
            $buf = Abstract_Session::load($group_);
            if (!$buf) {
                return 'Session "' . $group_ . '" does not exist';
            }
            break;
        case 'UserGroupSharedFolder':
            $sharedfolderdb = SharedFolderDB::getInstance();
            $userGroupDB = UserGroupDB::getInstance();
            $buf = $userGroupDB->import($element_);
            if (!is_object($buf)) {
                return 'UserGroup "' . $element_ . '" does not exist';
            }
            $buf = $sharedfolderdb->import($group_);
            if (!$buf) {
                return 'SharedFolder "' . $group_ . '" does not exist';
            }
            break;
        case 'UserProfile':
            $profiledb = ProfileDB::getInstance();
            $userDB = UserDB::getInstance();
            $buf = $userDB->import($element_);
            if (!is_object($buf)) {
                return 'User "' . $element_ . '" does not exist';
            }
            $buf = $profiledb->import($group_);
            if (!$buf) {
                return 'Profile "' . $group_ . '" does not exist';
            }
            break;
        case 'UsersGroup':
            $userDB = UserDB::getInstance();
            $buf = $userDB->import($element_);
            if (!is_object($buf)) {
                return 'User "' . $element_ . '" does not exist';
            }
            $userGroupDB = UserGroupDB::getInstance();
            $buf = $userGroupDB->import($group_);
            if (!is_object($buf)) {
                return 'UserGroup "' . $group_ . '" does not exist';
            }
            break;
        case 'UsersGroupApplicationsGroup':
            $userGroupDB = UserGroupDB::getInstance();
            $buf = $userGroupDB->import($element_);
            if (!is_object($buf)) {
                return 'UserGroup "' . $element_ . '" does not exist';
            }
            $applicationsGroupDB = ApplicationsGroupDB::getInstance();
            $buf = $applicationsGroupDB->import($group_);
            if (!is_object($buf)) {
                return 'ApplicationsGroup "' . $group_ . '" does not exist';
            }
            break;
        case 'UsersGroupCached':
            $userDB = UserDB::getInstance();
            $buf = $userDB->import($element_);
            if (!is_object($buf)) {
                return 'User "' . $element_ . '" does not exist';
            }
            $userGroupDB = UserGroupDB::getInstance();
            $buf = $userGroupDB->import($group_);
            if (!is_object($buf)) {
                return 'UserGroup "' . $group_ . '" does not exist';
            }
            break;
    }
    return true;
}
Example #11
0
 public static function removeRole($fqdn_, $role_)
 {
     Logger::debug('main', "Starting Abstract_Server::removeRole for '{$fqdn_}' removing '{$role_}'");
     if (substr($fqdn_, -1) == '.') {
         $fqdn_ = substr($fqdn_, 0, strlen($fqdn_) - 1);
     }
     $a_server = Abstract_Server::load($fqdn_);
     if (is_object($a_server) == false) {
         Logger::error('main', "Starting Abstract_Server::removeRole error failed to load server '{$fqdn_}'");
         return false;
     }
     $roles = $a_server->getAttribute('roles');
     if (is_array($roles) == false) {
         return false;
     }
     if (in_array($role_, $roles) == false) {
         return false;
     }
     switch ($role_) {
         case Server::SERVER_ROLE_APS:
             $prefs = Preferences::getInstance();
             if (!$prefs) {
                 die_error('get Preferences failed', __FILE__, __LINE__);
             }
             $slave_server_settings = $prefs->get('general', 'slave_server_settings');
             $remove_orphan = (bool) $slave_server_settings['remove_orphan'];
             Abstract_Liaison::delete('ApplicationServer', NULL, $fqdn_);
             if ($remove_orphan) {
                 $apps = $a_server->getApplications();
                 $applicationDB = ApplicationDB::getInstance();
                 // remove the orphan applications
                 if (is_array($apps)) {
                     foreach ($apps as $an_application) {
                         if ($an_application->isOrphan()) {
                             Logger::debug('main', "Abstract_Server::delete {$an_application} is orphan");
                             $applicationDB->remove($an_application);
                         }
                     }
                 }
             }
             $tm = new Tasks_Manager();
             $tm->load_from_server($fqdn_);
             foreach ($tm->tasks as $a_task) {
                 $tm->remove($a_task->id);
             }
             break;
         case Server::SERVER_ROLE_FS:
             if (Preferences::moduleIsEnabled('ProfileDB')) {
                 $profiledb = ProfileDB::getInstance();
                 $folders = $profiledb->importFromServer($fqdn_);
                 foreach ($folders as $a_folder) {
                     $profiledb->remove($a_folder->id);
                 }
             }
             if (Preferences::moduleIsEnabled('SharedFolderDB')) {
                 $sharedfolderdb = SharedFolderDB::getInstance();
                 $folders = $sharedfolderdb->importFromServer($fqdn_);
                 foreach ($folders as $a_folder) {
                     $profiledb->remove($a_folder->id);
                 }
             }
             break;
             // 			case Server::SERVER_ROLE_GATEWAY:
             // 			break;
     }
     return true;
 }
Example #12
0
 public function buildServersList()
 {
     if (!$this->user) {
         Logger::error('main', 'SessionManagement::buildServersList - User is not authenticated, aborting');
         throw_response(AUTH_FAILED);
     }
     $serverRoles = $this->getServerRoles();
     $this->servers = array();
     foreach ($serverRoles as $role) {
         if (!array_key_exists($role, $this->servers)) {
             $this->servers[$role] = array();
         }
         switch ($role) {
             case Server::SERVER_ROLE_APS:
                 $applicationServerTypes = $this->getApplicationServerTypes();
                 $servers = array();
                 foreach ($applicationServerTypes as $type) {
                     $buf = $this->user->getAvailableServers($type);
                     if (is_null($buf) || !is_array($buf)) {
                         return false;
                     }
                     $servers = array_merge($servers, $buf);
                 }
                 $slave_server_settings = $this->prefs->get('general', 'slave_server_settings');
                 if (is_array($slave_server_settings) && array_key_exists('use_max_sessions_limit', $slave_server_settings) && $slave_server_settings['use_max_sessions_limit'] == 1) {
                     foreach ($servers as $k => $server) {
                         if (!isset($server->max_sessions) || $server->max_sessions == 0) {
                             continue;
                         }
                         $total = Abstract_Session::countByServer($server->fqdn);
                         if ($total >= $server->max_sessions) {
                             Logger::warning('main', 'SessionManagement::buildServersList - Server \'' . $server->fqdn . '\' has reached its "max sessions" limit, sessions cannot be launched on it anymore');
                             unset($servers[$k]);
                         }
                     }
                 }
                 if (count($servers) == 0) {
                     $event = new SessionStart(array('user' => $this->user));
                     $event->setAttribute('ok', false);
                     $event->setAttribute('error', _('No available server'));
                     $event->emit();
                     Logger::error('main', 'SessionManagement::buildServersList - No "' . $role . '" server found for User "' . $this->user->getAttribute('login') . '", aborting');
                     return false;
                 }
                 foreach ($servers as $server) {
                     $this->servers[Server::SERVER_ROLE_APS][$server->fqdn] = array('status' => Session::SESSION_STATUS_CREATED);
                 }
                 break;
             case Server::SERVER_ROLE_FS:
                 if (get_class($this) != 'SessionManagement_internal') {
                     Logger::error('main', 'SessionManagement::buildServersList - Role "' . $role . '" is not compatible with the current integration mode (' . substr(get_class($this), strlen('SessionManagement_')) . '), aborting');
                     return false;
                 }
                 $default_settings = $this->user->getSessionSettings('session_settings_defaults');
                 $enable_profiles = $default_settings['enable_profiles'] == 1 ? true : false;
                 $auto_create_profile = $default_settings['auto_create_profile'] == 1 ? true : false;
                 $start_without_profile = $default_settings['start_without_profile'] == 1 ? true : false;
                 $enable_sharedfolders = $default_settings['enable_sharedfolders'] == 1 ? true : false;
                 $start_without_all_sharedfolders = $default_settings['start_without_all_sharedfolders'] == 1 ? true : false;
                 if ($enable_profiles) {
                     $fileservers = Abstract_Server::load_available_by_role(Server::SERVER_ROLE_FS);
                     if (count($fileservers) > 0) {
                         $profiles = $this->user->getProfiles();
                         if (!is_array($profiles)) {
                             Logger::error('main', 'SessionManagement::buildServersList - getProfiles() failed for User "' . $this->user->getAttribute('login') . '", aborting');
                             return false;
                         }
                         if (count($profiles) == 1) {
                             Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" already have a Profile, using it');
                             $profile = array_pop($profiles);
                             foreach ($fileservers as $fileserver) {
                                 if ($fileserver->fqdn != $profile->server) {
                                     continue;
                                 }
                                 if (!array_key_exists($fileserver->fqdn, $this->servers[Server::SERVER_ROLE_FS])) {
                                     $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn] = array();
                                 }
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn][] = array('type' => 'profile', 'server' => $fileserver, 'dir' => $profile->id);
                                 break;
                             }
                         } else {
                             Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a Profile for now, checking for auto-creation');
                             if ($auto_create_profile) {
                                 Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" Profile will be auto-created and used');
                                 $profileDB = ProfileDB::getInstance();
                                 $fileserver = $profileDB->chooseFileServer();
                                 if (!is_object($fileserver)) {
                                     Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to get a valid FileServer)');
                                     return false;
                                 }
                                 $profile = new Profile();
                                 $profile->server = $fileserver->getAttribute('fqdn');
                                 if (!$profileDB->addToServer($profile, $fileserver)) {
                                     Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to add the Profile to the FileServer)');
                                     return false;
                                 }
                                 if (!$profile->addUser($this->user)) {
                                     Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to associate the User to the Profile)');
                                     return false;
                                 }
                                 if (!array_key_exists($fileserver->fqdn, $this->servers[Server::SERVER_ROLE_FS])) {
                                     $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn] = array();
                                 }
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn][] = array('type' => 'profile', 'server' => $fileserver, 'dir' => $profile->id);
                             } else {
                                 Logger::debug('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" disabled, checking for session without Profile');
                                 if (!$start_without_profile) {
                                     Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a valid Profile, aborting');
                                     return false;
                                 }
                                 Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without a valid Profile, proceeding');
                             }
                         }
                     } else {
                         Logger::debug('main', 'SessionManagement::buildServersList - No "' . $role . '" server found for User "' . $this->user->getAttribute('login') . '", checking for session without Profile');
                         if (!$start_without_profile) {
                             Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a valid Profile, aborting');
                             return false;
                         }
                         Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without a valid Profile, proceeding');
                     }
                 }
                 if ($enable_sharedfolders) {
                     $sharedfolders = $this->user->getSharedFolders();
                     if (!is_array($sharedfolders)) {
                         Logger::error('main', 'SessionManagement::buildServersList - getSharedFolders() failed for User "' . $this->user->getAttribute('login') . '", aborting');
                         return false;
                     }
                     if (count($sharedfolders) > 0) {
                         foreach ($sharedfolders as $sharedfolder) {
                             $fileserver = Abstract_Server::load($sharedfolder->server);
                             if (!$fileserver || !$fileserver->isOnline() || $fileserver->getAttribute('locked')) {
                                 Logger::warning('main', 'SessionManagement::buildServersList - Server "' . $sharedfolder->server . '" for SharedFolder "' . $sharedfolder->id . '" is not available');
                                 if (!$start_without_all_sharedfolders) {
                                     Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have all SharedFolders available, aborting');
                                     return false;
                                 } else {
                                     Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without all SharedFolders available, proceeding');
                                     continue;
                                 }
                             }
                             if (!array_key_exists($fileserver->fqdn, $this->servers[Server::SERVER_ROLE_FS])) {
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn] = array();
                             }
                             $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn][] = array('type' => 'sharedfolder', 'server' => $fileserver, 'dir' => $sharedfolder->id, 'name' => $sharedfolder->name);
                         }
                     }
                 }
                 break;
         }
     }
     return true;
 }
Example #13
0
function server_display_role_preparation_fs($server_)
{
    $ret = array();
    if (Preferences::moduleIsEnabled('ProfileDB') == false && Preferences::moduleIsEnabled('SharedFolderDB') == false) {
        return $ret;
    }
    $networkfolders = false;
    if (Preferences::moduleIsEnabled('SharedFolderDB')) {
        $sharedfolderdb = SharedFolderDB::getInstance();
        $networkfolders = $sharedfolderdb->importFromServer($server_->getAttribute('fqdn'));
    }
    $profiles = false;
    if (Preferences::moduleIsEnabled('ProfileDB')) {
        $profiledb = ProfileDB::getInstance();
        $profiles = $profiledb->importFromServer($server_->getAttribute('fqdn'));
    }
    $ret['NetworkFolders'] = array();
    $ret['profiles'] = array();
    $ret['sharedfolders'] = array();
    $ret['used by profiles'] = array();
    $ret['used by sharedfolders'] = array();
    if (is_array($networkfolders)) {
        foreach ($networkfolders as $a_networkfolder) {
            $ret['sharedfolders'][$a_networkfolder->id] = $a_networkfolder;
            if (isset($ret['used by sharedfolders'][$a_networkfolder->id]) === false) {
                $ret['used by sharedfolders'][$a_networkfolder->id] = array();
            }
            $groups = $a_networkfolder->getUserGroups();
            if (is_array($groups) && count($groups) > 0) {
                foreach ($groups as $a_group) {
                    $buf = array();
                    $buf['id'] = $a_group->getUniqueID();
                    $buf['name'] = $a_group->name;
                    $ret['used by sharedfolders'][$a_networkfolder->id][] = $buf;
                }
            }
        }
    }
    if (is_array($profiles)) {
        foreach ($profiles as $a_networkfolder) {
            $ret['profiles'][$a_networkfolder->id] = $a_networkfolder;
            if (isset($ret['used by profiles'][$a_networkfolder->id]) === false) {
                $ret['used by profiles'][$a_networkfolder->id] = array();
            }
            $users = $a_networkfolder->getUsers();
            if (is_array($users) && count($users) > 0) {
                foreach ($users as $a_user) {
                    $buf = array();
                    $buf['id'] = $a_user->getAttribute('login');
                    $buf['name'] = $a_user->getAttribute('displayname');
                    $ret['used by profiles'][$a_networkfolder->id][] = $buf;
                }
            }
        }
    }
    return $ret;
}
Example #14
0
 function list_comments()
 {
     global $display;
     require_once 'modules/Profile/db.php';
     $user_id = EClassApi::getParam('user_id');
     $user = DB::fetch('SELECT id, user_name FROM account WHERE id="' . $user_id . '"');
     $is_admin = false;
     if (User::is_admin()) {
         $is_admin = true;
     }
     $display->add('is_admin', $is_admin);
     $limit = '';
     $divID = 'comment_list';
     $cmd = 'comment_list_pagging';
     $item_per_page = 10;
     if (Url::get('cmd') == $cmd) {
         $display->add('load_ajax_page', true);
     } else {
         $display->add('load_ajax_page', false);
     }
     $url_path = WEB_DIR . "ajax.php?act=user&code=comments&user_id=" . $user['id'];
     $count = ProfileDB::get_total_comment($user['id']);
     require_once ROOT_PATH . 'core/ECPagging.php';
     $paging = ECPagging::AjaxPaging($limit, $count['acount'], $item_per_page, 5, 'comment_page_no', '', false, false, $url_path, $divID);
     $comments = ProfileDB::get_comments($user['id'], $item_per_page, $limit);
     $display->add('user_id', $user['id']);
     $display->add('is_login', (int) User::is_login());
     if (User::is_login()) {
         $display->add('cur_id', (int) User::$current->data['id']);
         $display->add('cur_user_name', User::$current->data['user_name']);
         if (User::$current->data['avatar_url'] == '') {
             $cur_avatar_url = 'style/images/50x50.gif';
         } else {
             $cur_avatar_url = EClassApi::getImageThumb(User::$current->data['avatar_url'], 50, 50, 0, User::$current->data['img_server']);
         }
         $display->add('cur_avatar', $cur_avatar_url);
     } else {
         $display->add('cur_id', '0');
         $display->add('cur_user_name', '');
         $display->add('cur_avatar', 'style/images/50x50.gif');
         $cur_avatar_url = "";
     }
     $display->add('comments', $comments);
     $display->add('paging', $paging);
     $display->add('user_name', User::$current->data['user_name']);
     $display->output('comment', false, 'Profile');
     System::halt();
 }