public function getNbUsedSessions() { $buf = Abstract_Session::countByServer($this->fqdn); return $buf; }
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; }
public function getAvailableApplicationServers() { $servers = Abstract_Server::load_available_by_role(Server::SERVER_ROLE_APS); $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->id); 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]); } } } return $servers; }
function server_display_role_aps($server, $var) { $can_do_action = $var['can_do_action']; $can_use_apt = $var['can_use_apt']; $server_online = $var['server_online']; $applications = $var['applications']; $applications_available = $var['applications_available']; $applications_all = $var['applications_all']; $servers_all = $var['servers_all']; $servers_replication = $var['servers_replication']; $has_sessions = $var['has_sessions']; $sessions = $var['sessions']; $total = $var['total_sessions']; if (array_key_exists('pagechanger', $var)) { $pagechanger = $var['pagechanger']; } $tasks = array(); $apps_in_remove = array(); $apps_in_install = array(); if ($server_online) { $tasks = $var['tasks']; $apps_in_install = $var['apps_in_install']; $apps_in_remove = $var['apps_in_remove']; } // if ($server->type == 'windows' && isset($server->windows_domain) && ! is_null($server->windows_domain)) { // echo '<tr><td>'; // echo _('Inside Active Directory domain').': '; // echo '</td><td>'; // echo $server->windows_domain; // echo '</td></tr>'; // } echo '<table>'; echo '<tr><td>'; echo _('Number of available sessions on this server') . ': '; echo '</td><td>'; if ($can_do_action) { echo '<form action="actions.php" method="post">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '" />'; echo '<input type="hidden" name="action" value="available_sessions" />'; echo '<input type="button" value="-" onclick="field_increase(\'number\', -1);" /> '; } echo '<input type="text" id="number" name="max_sessions" value="' . $server->getNbMaxSessions() . '" size="3" onchange="field_check_integer(this);" />'; if ($var['can_do_action']) { echo ' <input type="button" value="+" onclick="field_increase(\'number\', 1);" />'; echo ' <input type="button" value="' . _('default') . '" onclick="$(\'number\').value=\'' . $server->getDefaultMaxSessions() . '\';" />'; echo ' <input type="submit" value="' . _('change') . '" />'; echo '</form>'; } echo '</td></tr>'; echo '</table>'; if ($server_online && $can_do_action && $can_use_apt) { echo '<div class="section">'; echo '<h2>' . _('Install an application') . '</h2>'; echo '<form action="actions.php" method="post">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="action" value="install_line">'; echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '">'; echo '<input type="text" name="line"> '; echo '<input type="submit" value="' . _('Install from a package name') . '">'; echo '</form>'; echo '<br />'; echo '<div id="installableApplicationsList">'; echo '<a href="javascript:;" onclick="toggleInstallableApplicationsList(\'' . $server->fqdn . '\'); return false;"><div style="width: 16px; height: 16px; float: left;" id="installableApplicationsList_ajax"></div></a><div style="float: left;"><a href="javascript:;" onclick="toggleInstallableApplicationsList(\'' . $server->fqdn . '\'); return false;"> ' . _('more options') . '</a></div>'; echo '<div style="clear: both;"></div>'; echo '<div id="installableApplicationsList_content" style="display: none;"><script type="text/javascript">Event.observe(window, \'load\', function() { offContent(\'installableApplicationsList\'); });</script></div>'; echo '</div>'; echo '<div id="installableApplicationsListDefault" style="display: none; visibility: hidden;">'; echo '<form action="actions.php" method="post">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="action" value="install_line">'; echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '">'; echo '<table>'; echo '<tr>'; echo '<td>' . _('Category') . '</td>'; echo '<td><div id="installable_applications_category"></div></td>'; echo '<td></td>'; echo '</tr>'; echo '<tr>'; echo '<td>' . _('Application') . '</td>'; echo '<td><div id="installable_applications_application"></div></td> '; echo '<td><input type="submit" value="' . _('Install') . '" /></td>'; echo '<td></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; echo '</div>'; echo '</div>'; echo '<div class="section">'; echo '<h2>' . _('Upgrade') . '</h2>'; echo '<form action="actions.php" method="post">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="action" value="upgrade">'; echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '">'; echo '<input type="submit" value="' . _('Upgrade the internal system and applications') . '">'; echo '</form>'; echo '</div>'; } // Application part if (count($applications_all) > 0) { $count = 0; echo '<div class="section">'; echo '<h2>' . _('Applications available on this server') . '</h2>'; echo '<table border="0" cellspacing="1" cellpadding="3">'; if (count($applications) > 0) { foreach ($applications as $app) { $content = 'content' . ($count++ % 2 == 0 ? 1 : 2); $remove_in_progress = in_array($app, $apps_in_remove); echo '<tr class="' . $content . '">'; echo '<td>'; echo '<img src="media/image/cache.php?id=' . $app->getAttribute('id') . '" alt="" title="" /> '; echo '<a href="applications.php?action=manage&id=' . $app->getAttribute('id') . '">'; echo $app->getAttribute('name') . '</a>'; echo '</td>'; if ($server_online && $can_do_action && $can_use_apt) { echo '<td>'; if ($remove_in_progress) { echo 'remove in progress'; } else { echo '<form action="actions.php" method="post" onsubmit="return confirm(\'' . _('Are you sure you want to remove this application from this server?') . '\');">'; echo '<input type="hidden" name="action" value="del" />'; echo '<input type="hidden" name="name" value="Application_Server" />'; echo '<input type="hidden" name="server" value="' . $server->fqdn . '" />'; echo '<input type="hidden" name="application" value="' . $app->getAttribute('id') . '" />'; echo '<input type="submit" value="' . _('Remove from this server') . '" />'; echo '</form>'; } } echo '</td>'; echo '</tr>'; } } foreach ($apps_in_install as $app) { $content = 'content' . ($count++ % 2 == 0 ? 1 : 2); echo '<tr class="' . $content . '">'; echo '<td>'; echo '<a href="applications.php?action=manage&id=' . $app->getAttribute('id') . '">'; echo $app->getAttribute('name') . '</a>'; echo '</td>'; echo '<td>' . _('install in progress') . '</td>'; echo '</tr>'; } if (count($applications_available) > 0 && $can_do_action && $can_use_apt) { $content = 'content' . ($count++ % 2 == 0 ? 1 : 2); echo '<tr class="' . $content . '"><form action="actions.php" method="post">'; echo '<input type="hidden" name="action" value="add" />'; echo '<input type="hidden" name="name" value="Application_Server" />'; echo '<input type="hidden" name="server" value="' . $server->fqdn . '" />'; echo '<td>'; echo '<select name="application">'; foreach ($applications_available as $app) { echo '<option value="' . $app->getAttribute('id') . '">' . $app->getAttribute('name') . '</option>'; } echo '</select>'; echo '</td>'; echo '<td><input type="submit" value="' . _('Install on this server') . '" /></td>'; echo '</form></tr>'; } echo '</table>'; echo "</div>\n"; } // Server Replication part if (count($servers_replication) > 0 && $can_use_apt && $can_do_action) { echo '<div class="section">'; // div replication echo '<h2>' . _('Replication') . '</h2>'; echo '<form action="actions.php" method="post">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="action" value="replication" />'; echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '" />'; echo '<table border="0" cellspacing="1" cellpadding="3">'; foreach ($servers_replication as $server_) { echo '<tr>'; echo '<td><input class="input_checkbox" type="checkbox" name="servers[]" value="' . $server_->fqdn . '" /></td>'; echo '<td><a href="servers.php?action=manage&fqdn=' . $server_->fqdn . '">' . $server_->fqdn . '</a></td></tr>'; } echo '<tr><td></td><td><input type="submit" value="' . _('Replicate on those servers') . '" /></td></tr>'; echo '</table>'; echo '</form>'; echo "</div>"; // div replication } // Tasks part if (count($tasks) > 0) { echo '<div class="section">'; // div tasks echo '<h2>' . _('Active tasks on this server') . '</h2>'; echo '<table border="0" cellspacing="1" cellpadding="3">'; echo '<tr class="title">'; echo '<th>' . _('ID') . '</th>'; echo '<th>' . _('Type') . '</th>'; echo '<th>' . _('Status') . '</th>'; echo '<th>' . _('Details') . '</th>'; echo '</tr>'; $count = 0; foreach ($tasks as $task) { $content = 'content' . ($count++ % 2 == 0 ? 1 : 2); if ($task->failed()) { $status = '<span class="msg_error">' . _('Error') . '</span>'; } else { $status = '<span class="msg_ok">' . $task->status . '</span>'; } echo '<tr class="' . $content . '">'; echo '<td><a href="tasks.php?action=manage&id=' . $task->id . '">' . $task->id . '</a></td>'; echo '<td>' . get_class($task) . '</td>'; echo '<td>' . $status . '</td>'; echo '<td>' . $task->getRequest() . '</td>'; echo '</tr>'; } echo '</table>'; echo "</div>"; // div tasks } // Sessions part if ($has_sessions) { echo '<div>'; // div 1 has_sessions $total = Abstract_Session::countByServer($server->fqdn); echo '<h2>' . sprintf(_('Active sessions (total: %s)'), $total) . '</h2>'; echo '<div>'; if (isset($pagechanger)) { echo $pagechanger; } echo '<table border="0" cellspacing="1" cellpadding="3">'; foreach ($sessions as $session) { echo '<form action="sessions.php"><tr>'; echo '<td>'; $buf = $session->getAttribute('start_time'); if (!$buf) { echo _('Not started yet'); } else { echo @date('d/m/Y H:i:s', $session->getAttribute('start_time')); } echo '</td>'; echo '<td><a href="users.php?action=manage&id=' . $session->getAttribute('user_login') . '">' . $session->getAttribute('user_displayname') . '</td>'; echo '<td>'; echo '<input type="hidden" name="info" value="' . $session->id . '" />'; echo '</td><td><input type="submit" value="' . _('Information about this session') . '" /></td>'; echo '</td>'; echo '</tr></form>'; } echo '</table>'; if (isset($pagechanger)) { echo $pagechanger; } echo '</div>'; echo '</div>'; } }