Ejemplo n.º 1
0
 /**
  * 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);
 }
Ejemplo n.º 2
0
 /**
  * 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();
             }
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * 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();
 }
Ejemplo n.º 4
0
     }
     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) {
Ejemplo n.º 5
0
 /**
  * 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));
     }
 }