/** * Add a host entry for a member * * @return void */ public function addTask() { // Check for request forgeries Request::checkToken(); // Incoming member ID $id = Request::getInt('id', 0); if (!$id) { $this->setError(Lang::txt('MEMBERS_NO_ID')); $this->displayTask(); return; } // Load the profile $profile = new \Hubzero\User\Profile(); $profile->load($id); // Incoming host $host = Request::getVar('host', ''); if (!$host) { $this->setError(Lang::txt('MEMBERS_NO_HOST')); $this->displayTask($id); return; } $hosts = $profile->get('host'); $hosts[] = $host; // Update the hosts list $profile->set('host', $hosts); if (!$profile->update()) { $this->setError($profile->getError()); } // Push through to the hosts view $this->displayTask($profile); }
/** * Method is called after user data is stored in the database * * @param array $user holds the new user data * @param boolean $isnew true if a new user is stored * @param boolean $success true if user was succesfully stored in the database * @param string $msg message * @return void */ public function onAfterStoreUser($user, $isnew, $succes, $msg) { $xprofile = \Hubzero\User\Profile::getInstance($user['id']); if (!is_object($xprofile)) { $params = Component::params('com_members'); $hubHomeDir = rtrim($params->get('homedir'), '/'); if (empty($hubHomeDir)) { // try to deduce a viable home directory based on sitename or live_site $sitename = strtolower(Config::get('sitename')); $sitename = preg_replace('/^http[s]{0,1}:\\/\\//', '', $sitename, 1); $sitename = trim($sitename, '/ '); $sitename_e = explode('.', $sitename, 2); if (isset($sitename_e[1])) { $sitename = $sitename_e[0]; } if (!preg_match("/^[a-zA-Z]+[\\-_0-9a-zA-Z\\.]+\$/i", $sitename)) { $sitename = ''; } if (empty($sitename)) { $sitename = strtolower(Request::base()); $sitename = preg_replace('/^http[s]{0,1}:\\/\\//', '', $sitename, 1); $sitename = trim($sitename, '/ '); $sitename_e = explode('.', $sitename, 2); if (isset($sitename_e[1])) { $sitename = $sitename_e[0]; } if (!preg_match("/^[a-zA-Z]+[\\-_0-9a-zA-Z\\.]+\$/i", $sitename)) { $sitename = ''; } } $hubHomeDir = DS . 'home'; if (!empty($sitename)) { $hubHomeDir .= DS . $sitename; } if (!empty($hubHomeDir)) { $db = App::get('db'); $component = new JTableExtension($this->database); $component->load($component->find(array('element' => 'com_members', 'type' => 'component'))); $params = new \Hubzero\Config\Registry($component->params); $params->set('homedir', $hubHomeDir); $component->params = $params->toString(); $component->store(); } } $xprofile = new \Hubzero\User\Profile(); $xprofile->set('gidNumber', $params->get('gidNumber', '100')); $xprofile->set('gid', $params->get('gid', 'users')); $xprofile->set('uidNumber', $user['id']); $xprofile->set('homeDirectory', $hubHomeDir . DS . $user['username']); $xprofile->set('loginShell', '/bin/bash'); $xprofile->set('ftpShell', '/usr/lib/sftp-server'); $xprofile->set('name', $user['name']); $xprofile->set('email', $user['email']); $xprofile->set('emailConfirmed', '3'); $xprofile->set('username', $user['username']); $xprofile->set('regIP', $_SERVER['REMOTE_ADDR']); $xprofile->set('emailConfirmed', -rand(1, pow(2, 31) - 1)); $xprofile->set('public', $params->get('privacy', 0)); if (isset($_SERVER['REMOTE_HOST'])) { $xprofile->set('regHost', $_SERVER['REMOTE_HOST']); } $xprofile->set('registerDate', Date::toSql()); $result = $xprofile->create(); if (!$result) { return new Exception('Unable to create \\Hubzero\\User\\Profile record', 500); } } else { $update = false; $params = Component::params('com_members'); if ($xprofile->get('username') != $user['username']) { $xprofile->set('username', $user['username']); $update = true; } if ($xprofile->get('name') != $user['name']) { $xprofile->set('name', $user['name']); $update = true; } if ($xprofile->get('email') != $user['email']) { $xprofile->set('email', $user['email']); $xprofile->set('emailConfirmed', 0); $update = true; } if ($xprofile->get('emailConfirmed') == '') { $xprofile->set('emailConfirmed', '3'); $update = true; } if ($xprofile->get('gid') == '') { $xprofile->set('gid', $params->get('gid', 'users')); $update = true; } if ($xprofile->get('gidNumber') == '') { $xprofile->set('gidNumber', $params->get('gidNumber', '100')); $update = true; } if ($xprofile->get('loginShell') == '') { $xprofile->set('loginShell', '/bin/bash'); $update = true; } if ($xprofile->get('ftpShell') == '') { $xprofile->set('ftpShell', '/usr/lib/sftp-server'); // This isn't right, but we're using an empty shell as an indicator that we should also update default privacy $xprofile->set('public', $params->get('privacy', 0)); $update = true; } if ($update) { $xprofile->update(); } } // Check if quota exists for the user $params = Component::params('com_members'); if ($params->get('manage_quotas', false)) { require_once PATH_CORE . DS . 'components' . DS . 'com_members' . DS . 'tables' . DS . 'users_quotas.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_members' . DS . 'tables' . DS . 'quotas_classes.php'; $quota = new \Components\Members\Tables\UsersQuotas($this->database); $quota->load(array('user_id' => $user['id'])); if (!$quota->id) { $class = new \Components\Members\Tables\QuotasClasses($this->database); $class->load(array('alias' => 'default')); if ($class->id) { $quota->set('user_id', $user['id']); $quota->set('class_id', $class->id); $quota->set('soft_blocks', $class->soft_blocks); $quota->set('hard_blocks', $class->hard_blocks); $quota->set('soft_files', $class->soft_files); $quota->set('hard_files', $class->hard_files); $quota->store(); } } } }
/** * Conform user's registration code * * @return void */ public function confirmTask() { // Incoming $code = Request::getVar('confirm', false); if (!$code) { $code = Request::getVar('code', false); } // Check if the user is logged in if (User::isGuest()) { $return = base64_encode(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&task=' . $this->_task . '&confirm=' . $code, false, true)); App::redirect(Route::url('index.php?option=com_users&view=login&return=' . $return, false), Lang::txt('Please login in so we can confirm your account.'), 'warning'); return; } // Set the pathway $this->_buildPathway(); // Set the page title $this->_buildTitle(); $xprofile = \Hubzero\User\Profile::getInstance(User::get('id')); $email_confirmed = $xprofile->get('emailConfirmed'); if ($email_confirmed == 1 || $email_confirmed == 3) { // The current user is confirmed - check to see if the incoming code is valid at all if (\Components\Members\Helpers\Utility::isActiveCode($code)) { $this->setError('login mismatch'); // Build logout/login/confirm redirect flow $login_return = base64_encode(Route::url('index.php?option=' . $this->option . '&controller=' . $this->_controller . '&task=' . $this->_task . '&confirm=' . $code)); $logout_return = base64_encode(Route::url('index.php?option=com_users&view=login&return=' . $login_return)); $redirect = Route::url('index.php?option=com_users&view=logout&return=' . $logout_return); } } elseif ($email_confirmed < 0 && $email_confirmed == -$code) { //var to hold return path $return = ''; // get return path $cReturn = $this->config->get('ConfirmationReturn'); if ($cReturn) { $return = $cReturn; } //load user profile $profile = new \Hubzero\User\Profile(); $profile->load($xprofile->get('username')); //check to see if we have a return param $pReturn = base64_decode(urldecode($profile->getParam('return'))); if ($pReturn) { $return = $pReturn; $profile->setParam('return', ''); } // make as confirmed $profile->set('emailConfirmed', 1); // set public setting $profile->set('public', $this->config->get('privacy', '0')); // upload profile if (!$profile->update()) { $this->setError(Lang::txt('COM_MEMBERS_REGISTER_ERROR_CONFIRMING')); } // if the user just changed their email & confirmed // reset 'userchangedemail' key if (Session::get('userchangedemail', 0) == 1) { Session::set('userchangedemail', 0); } // Redirect if (empty($return)) { $r = $this->config->get('ConfirmationReturn'); $return = $r ? $r : Route::url('index.php?option=com_members&task=myaccount'); // consume cookie (yum) if available to return to whatever action prompted registration if (isset($_COOKIE['return'])) { $return = $_COOKIE['return']; setcookie('return', '', time() - 3600); } } App::redirect($return, '', 'message', true); } else { $this->setError(Lang::txt('COM_MEMBERS_REGISTER_ERROR_INVALID_CONFIRMATION')); } // Instantiate a new view $this->view->title = Lang::txt('COM_MEMBERS_REGISTER_CONFIRM'); $this->view->login = $xprofile->get('username'); $this->view->email = $xprofile->get('email'); $this->view->code = $code; $this->view->redirect = isset($return) ? $return : ''; $this->view->sitename = Config::get('sitename'); if ($this->getError()) { $this->view->setError($this->getError()); } $this->view->display(); }
} if (count($bits) >= 1) { $row->middleName = implode(' ', $bits); } } $name = $row->surname ? stripslashes($row->surname) : ''; if ($row->givenName) { $name .= $row->surname ? ', ' : ''; $name .= stripslashes($row->givenName); $name .= $row->middleName ? ' ' . stripslashes($row->middleName) : ''; } if (!trim($name)) { $name = Lang::txt('COM_MEMBERS_UNKNOWN') . ' (' . $row->username . ')'; } $profile = new \Hubzero\User\Profile(); $profile->set('uidNumber', $row->uidNumber); $profile->set('email', $row->email); $profile->set('picture', $row->picture); $p = \Hubzero\User\Profile\Helper::getMemberPhoto($profile); // User messaging $messageuser = false; if ($messaging && $row->uidNumber > 0 && $row->uidNumber != User::get('id')) { switch ($this->config->get('user_messaging')) { case 1: // Get the groups of the profile $pgroups = \Hubzero\User\Helper::getGroups($row->uidNumber, 'all'); // Get the groups the user has access to $profilesgroups = array(); if (!empty($pgroups)) { foreach ($pgroups as $group) { if ($group->regconfirmed) {
/** * Method is called after user data is stored in the database * * @param array $user holds the new user data * @param boolean $isnew true if a new user is stored * @param boolean $success true if user was succesfully stored in the database * @param string $msg message * @return void */ public function onAfterStoreUser($user, $isnew, $success, $msg) { $xprofile = \Hubzero\User\Profile::getInstance($user['id']); if (!is_object($xprofile)) { $params = Component::params('com_members'); $hubHomeDir = rtrim($params->get('homedir'), '/'); if (empty($hubHomeDir)) { // try to deduce a viable home directory based on sitename or live_site $sitename = strtolower(Config::get('sitename')); $sitename = preg_replace('/^http[s]{0,1}:\\/\\//', '', $sitename, 1); $sitename = trim($sitename, '/ '); $sitename_e = explode('.', $sitename, 2); if (isset($sitename_e[1])) { $sitename = $sitename_e[0]; } if (!preg_match("/^[a-zA-Z]+[\\-_0-9a-zA-Z\\.]+\$/i", $sitename)) { $sitename = ''; } if (empty($sitename)) { $sitename = strtolower(Request::base()); $sitename = preg_replace('/^http[s]{0,1}:\\/\\//', '', $sitename, 1); $sitename = trim($sitename, '/ '); $sitename_e = explode('.', $sitename, 2); if (isset($sitename_e[1])) { $sitename = $sitename_e[0]; } if (!preg_match("/^[a-zA-Z]+[\\-_0-9a-zA-Z\\.]+\$/i", $sitename)) { $sitename = ''; } } $hubHomeDir = DS . 'home'; if (!empty($sitename)) { $hubHomeDir .= DS . $sitename; } if (!empty($hubHomeDir)) { $db = App::get('db'); $component = new JTableExtension($this->database); $component->load($component->find(array('element' => 'com_members', 'type' => 'component'))); $params = new \Hubzero\Config\Registry($component->params); $params->set('homedir', $hubHomeDir); $component->params = $params->toString(); $component->store(); } } $xprofile = new \Hubzero\User\Profile(); $xprofile->set('gidNumber', $params->get('gidNumber', '100')); $xprofile->set('gid', $params->get('gid', 'users')); $xprofile->set('uidNumber', $user['id']); $xprofile->set('homeDirectory', isset($user['homeDirectory']) ? $user['homeDirectory'] : $hubHomeDir . DS . $user['username']); $xprofile->set('loginShell', isset($user['loginShell']) ? $user['loginShell'] : '/bin/bash'); $xprofile->set('ftpShell', isset($user['ftpShell']) ? $user['ftpShell'] : '/usr/lib/sftp-server'); $xprofile->set('name', $user['name']); $xprofile->set('email', $user['email']); $xprofile->set('username', $user['username']); $xprofile->set('regIP', $_SERVER['REMOTE_ADDR']); //$xprofile->set('emailConfirmed', '3'); $xprofile->set('emailConfirmed', isset($user['activation']) ? $user['activation'] : -rand(1, pow(2, 31) - 1)); $xprofile->set('public', $params->get('privacy', 0)); if (isset($_SERVER['REMOTE_HOST'])) { $xprofile->set('regHost', $_SERVER['REMOTE_HOST']); } $xprofile->set('registerDate', Date::toSql()); $result = $xprofile->create(); if (!$result) { return new Exception('Unable to create \\Hubzero\\User\\Profile record', 500); } } else { $update = false; $params = Component::params('com_members'); if ($xprofile->get('username') != $user['username']) { $xprofile->set('username', $user['username']); $update = true; } if ($xprofile->get('name') != $user['name']) { $xprofile->set('name', $user['name']); $update = true; } // Fix missing surname/given name as well if ($xprofile->get('name') && (!$xprofile->get('surname') || !$xprofile->get('givenName'))) { $firstname = $xprofile->get('givenName'); $middlename = $xprofile->get('middleName'); $lastname = $xprofile->get('surname'); $words = array_map('trim', explode(' ', $xprofile->get('name'))); $count = count($words); if ($count == 1) { $firstname = $words[0]; } else { if ($count == 2) { $firstname = $words[0]; $lastname = $words[1]; } else { if ($count == 3) { $firstname = $words[0]; $middlename = $words[1]; $lastname = $words[2]; } else { $firstname = $words[0]; $lastname = $words[$count - 1]; $middlename = $words[1]; for ($i = 2; $i < $count - 1; $i++) { $middlename .= ' ' . $words[$i]; } } } } $firstname = trim($firstname); if ($firstname) { $xprofile->set('givenName', $firstname); } $middlename = trim($middlename); if ($middlename) { $xprofile->set('middleName', $middlename); } $lastname = trim($lastname); if ($lastname) { $xprofile->set('surname', $lastname); } $update = true; } if ($xprofile->get('email') != $user['email']) { $xprofile->set('email', $user['email']); $xprofile->set('emailConfirmed', 0); $update = true; } if ($xprofile->get('emailConfirmed') == '') { $xprofile->set('emailConfirmed', '3'); $update = true; } if ($xprofile->get('gid') == '') { $xprofile->set('gid', $params->get('gid', 'users')); $update = true; } if ($xprofile->get('gidNumber') == '') { $xprofile->set('gidNumber', $params->get('gidNumber', '100')); $update = true; } if ($xprofile->get('loginShell') == '') { $xprofile->set('loginShell', '/bin/bash'); $update = true; } if ($xprofile->get('ftpShell') == '') { $xprofile->set('ftpShell', '/usr/lib/sftp-server'); // This isn't right, but we're using an empty shell as an indicator that we should also update default privacy $xprofile->set('public', $params->get('privacy', 0)); $update = true; } if ($update) { $xprofile->update(); } } // Check if quota exists for the user $params = Component::params('com_members'); if ($params->get('manage_quotas', false)) { require_once PATH_CORE . DS . 'components' . DS . 'com_members' . DS . 'models' . DS . 'quota.php'; $quota = Components\Members\Models\Quota::all()->whereEquals('user_id', $user['id'])->row(); if (!$quota->get('id')) { $class = Components\Members\Models\Quota\Category::defaultEntry(); if ($class->get('id')) { $quota->set('user_id', $user['id']); $quota->set('class_id', $class->get('id')); $quota->set('soft_blocks', $class->get('soft_blocks')); $quota->set('hard_blocks', $class->get('hard_blocks')); $quota->set('soft_files', $class->get('soft_files')); $quota->set('hard_files', $class->get('hard_files')); $quota->save(); } } } if ($success) { Event::trigger('members.onMemberAfterSave', array($user, $isnew, $success, $msg)); } }