/** * Check username on: * * - Length (2-64 chars) * - Contents (alphabetic chars and digits only) * - Unique * @param string $username * @param int $user_id to check whether the username is unique * @return boolean * @throws \InvalidArgumentException */ public function username($username, $user_id = 0) { if (strlen($username) > 64 || strlen($username) < 2) { throw new \InvalidArgumentException('user_name_bad_length'); } if (!preg_match('/^[a-zA-Z\\d_]{2,64}$/i', $username)) { throw new \InvalidArgumentException('user_name_invalid'); } $user_exists = $this->user->getUserByUsername($username); if (!empty($user_exists) && ($user_id == 0 || $user_id != $user_exists->user_id)) { throw new \InvalidArgumentException('user_name_exists'); } return true; }
/** * Go :-) */ public function run() { // check if we need to restrict the servers to a certain user $sql_join = ''; if ($this->user != null && $this->user->getUserLevel() > PSM_USER_ADMIN) { // restrict by user_id $sql_join = "JOIN `" . PSM_DB_PREFIX . "users_servers` AS `us` ON (\n\t\t\t\t\t\t`us`.`user_id`={$this->user->getUserId()}\n\t\t\t\t\t\tAND `us`.`server_id`=`s`.`server_id`\n\t\t\t\t\t\t)"; } $sql = "SELECT `s`.`server_id`,`s`.`ip`,`s`.`port`,`s`.`label`,`s`.`type`,`s`.`pattern`,`s`.`status`,`s`.`active`,`s`.`email`,`s`.`sms`,`s`.`pushover`\n\t\t\t\tFROM `" . PSM_DB_PREFIX . "servers` AS `s`\n\t\t\t\t{$sql_join}\n\t\t\t\tWHERE `active`='yes' "; $servers = $this->db->query($sql); $updater = new Updater\StatusUpdater($this->db); $notifier = new Updater\StatusNotifier($this->db); foreach ($servers as $server) { $status_old = $server['status'] == 'on' ? true : false; $status_new = $updater->update($server['server_id']); // notify the nerds if applicable $notifier->notify($server['server_id'], $status_old, $status_new); } // clean-up time!! archive all records $archive = new ArchiveManager($this->db); $archive->archive(); $archive->cleanup(); }
/** * Create HTML code for the menu * @return string */ protected function createHTMLMenu() { $ulvl = $this->user ? $this->user->getUserLevel() : PSM_USER_ANONYMOUS; $tpl_data = array('label_help' => psm_get_lang('menu', 'help'), 'label_profile' => psm_get_lang('users', 'profile'), 'label_logout' => psm_get_lang('login', 'logout'), 'url_profile' => psm_build_url(array('mod' => 'user_profile')), 'url_logout' => psm_build_url(array('logout' => 1))); switch ($ulvl) { case PSM_USER_ADMIN: $items = array('server_status', 'server', 'server_log', 'user', 'config', 'server_update'); break; case PSM_USER_USER: $items = array('server_status', 'server', 'server_log', 'server_update'); break; default: $items = array(); break; } $tpl_data['menu'] = array(); foreach ($items as $key) { $tpl_data['menu'][] = array('active' => $key == psm_GET('mod') ? 'active' : '', 'url' => psm_build_url(array('mod' => $key)), 'label' => psm_get_lang('menu', $key)); } if ($ulvl != PSM_USER_ANONYMOUS) { $user = $this->user->getUser(); $tpl_data['label_usermenu'] = str_replace('%user_name%', $user->name, psm_get_lang('login', 'welcome_usermenu')); } return $this->twig->render('main/menu.tpl.html', $tpl_data); }