function display($tpl = null) { $user = User::getRoot(); // If this is an auth_link account update, carry on, otherwise raise an error if (!is_object($user) || !array_key_exists('auth_link_id', $user) || !is_numeric($user->get('username')) || !$user->get('username') < 0) { App::abort('405', 'Method not allowed'); return; } // Get and add the js and extra css to the page \Hubzero\Document\Assets::addComponentStylesheet('com_users', 'link.css'); \Hubzero\Document\Assets::addComponentStylesheet('com_users', 'providers.css'); \Hubzero\Document\Assets::addComponentScript('com_users', 'link'); // Import a few things jimport('joomla.user.helper'); // Look up a few things $hzal = \Hubzero\Auth\Link::find_by_id($user->get("auth_link_id")); $hzad = \Hubzero\Auth\Domain::find_by_id($hzal->auth_domain_id); $plugins = Plugin::byType('authentication'); // Get the display name for the current plugin being used Plugin::import('authentication', $hzad->authenticator); $plugin = Plugin::byType('authentication', $hzad->authenticator); $pparams = new \Hubzero\Config\Registry($plugin->params); $refl = new ReflectionClass("plgAuthentication{$plugin->name}"); $display_name = $pparams->get('display_name', $refl->hasMethod('onGetLinkDescription') ? $refl->getMethod('onGetLinkDescription')->invoke(NULL) : ucfirst($plugin->name)); // Look for conflicts - first check in the hub accounts $profile_conflicts = \Hubzero\User\Profile\Helper::find_by_email($hzal->email); // Now check the auth_link table $link_conflicts = \Hubzero\Auth\Link::find_by_email($hzal->email, array($hzad->id)); $conflict = array(); if ($profile_conflicts) { foreach ($profile_conflicts as $p) { $user_id = JUserHelper::getUserId($p); $juser = User::getInstance($user_id); $auth_link = \Hubzero\Auth\Link::find_by_user_id($juser->id); $dname = is_object($auth_link) && $auth_link->auth_domain_name ? $auth_link->auth_domain_name : 'hubzero'; $conflict[] = array("auth_domain_name" => $dname, "name" => $juser->name, "email" => $juser->email); } } if ($link_conflicts) { foreach ($link_conflicts as $l) { $juser = User::getInstance($l['user_id']); $conflict[] = array("auth_domain_name" => $l['auth_domain_name'], "name" => $juser->name, "email" => $l['email']); } } // Make sure we don't somehow have any duplicate conflicts $conflict = array_map("unserialize", array_unique(array_map("serialize", $conflict))); // @TODO: Could also check for high probability of name matches??? // Get the site name $sitename = Config::get('sitename'); // Assign variables to the view $this->assign('hzal', $hzal); $this->assign('hzad', $hzad); $this->assign('plugins', $plugins); $this->assign('display_name', $display_name); $this->assign('conflict', $conflict); $this->assign('sitename', $sitename); $this->assignref('juser', $user); parent::display($tpl); }
</div> </a> <?php } } ?> </div> </fieldset> <div class="clear"></div> <?php } } ?> <?php $emailusers = \Hubzero\User\Profile\Helper::find_by_email($this->registration['email']); if (($this->task == 'create' || $this->task == 'proxycreate') && $emailusers) { ?> <div class="error"> <p>The email address "<?php echo $this->escape($this->registration['email']); ?> " is already registered. If you have lost or forgotten this <?php echo $this->sitename; ?> login information, we can help you recover it:</p> <p class="submit"><a href="<?php echo Route::url('index.php?option=com_users&view=remind'); ?> " class="btn btn-danger">Email Existing Account Information</a> <p>If you are aware you already have another account registered to this email address, and are requesting another account because you need more resources, <?php
/** * Save an entry * * @param boolean $redirect Redirect after save? * @return void */ public function saveTask($redirect = true) { // [SECURITY] Check for request forgeries Request::checkToken(); // Incoming $fields = Request::getVar('fields', array(), 'post', 'none', 2); $team = Request::getVar('team', '', 'post', 2, 'none'); // Bind the incoming data to our mdoel $row = new Models\Api\Application($fields); // Validate and save the data if (!$row->store(true)) { $this->setError($row->getError()); $this->editTask($row); return; } // parse incoming team $team = array_map('trim', explode(',', $team)); // clean up team foreach ($team as $k => $t) { // handle usernames & emails if (!is_numeric($t)) { // handle emails if (strpos($t, '@')) { // load profile by email $profile = \Hubzero\User\Profile\Helper::find_by_email($t); } else { // load profile by username $profile = \Hubzero\User\Profile::getInstance($t); } // swap usernames for uidnumbers if ($profile) { $team[$k] = $profile->get('uidNumber'); } else { unset($team[$k]); } } } // add creator if new // will only ever get added once $team[] = User::get('id'); // get current team $currentTeam = $row->team()->lists('uidNumber'); // remove members not included now foreach (array_diff($currentTeam, $team) as $uidNumber) { $member = $row->team($uidNumber); $member->delete(); } // add each non-team member to team foreach (array_diff($team, $currentTeam) as $uidNumber) { if ($uidNumber < 1) { continue; } // new team member object $teamMember = new Models\Api\Application\Team\Member(array('uidNumber' => $uidNumber, 'application_id' => $row->get('id'))); $teamMember->store(); } // Are we redirecting? // This will happen if a user clicks the "save & close" button. if ($redirect) { // Set the redirect App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller, false), Lang::txt('COM_DEVELOPER_APPLICATION_SAVED')); return; } // Display the edit form. This will happen if the user clicked // the "save" or "apply" button. $this->editTask($row); }
/** * Passport badges. Placeholder for now. * * @apiMethod POST * @apiUri /courses/passport/badge * @apiParameter { * "name": "action", * "description": "Badge action", * "type": "string", * "required": true, * "default": null * } * @apiParameter { * "name": "badge_id", * "description": "Passport badge ID", * "type": "integer", * "required": true, * "default": null * } * @apiParameter { * "name": "user_email", * "description": "Email address to which the badge was asserted", * "type": "string", * "required": true, * "default": null * } * @return void */ public function badgeTask() { // Require authentication and authorization $this->authorizeOrFail(); $action = Request::getVar('action', ''); $badge_id = Request::getVar('badge_id', ''); $user_email = Request::getVar('user_email', ''); if (empty($action)) { App::abort(400, 'Please provide action'); } if ($action != 'accept' && $action != 'deny') { App::abort(400, 'Bad action. Must be either accept or deny'); } if (empty($badge_id)) { App::abort(400, 'Please provide badge ID'); } if (empty($user_email)) { App::abort(400, 'Please provide user email'); } // Find user by email $user_email = \Hubzero\User\Profile\Helper::find_by_email($user_email); if (empty($user_email[0])) { App::abort(404, 'User was not found'); } $user = \Hubzero\User\Profile::getInstance($user_email[0]); if ($user === false) { App::abort(404, 'User was not found'); } $user_id = $user->get('uidNumber'); // Get section from provider badge id $section_badge = \Components\Courses\Models\Section\Badge::loadByProviderBadgeId($badge_id); // Check if there is a match if (!($section_id = $section_badge->get('section_id'))) { App::abort(400, 'No matching badge found'); } // Get member id via user id and section id $member = \Components\Courses\Models\Member::getInstance($user_id, 0, 0, $section_id); // Check if there is a match if (!$member->get('id')) { App::abort(400, 'Matching course member not found'); } // Now actually load the badge $member_badge = \Components\Courses\Models\MemberBadge::loadByMemberId($member->get('id')); // Check if there is a match if (!$member_badge->get('id')) { App::abort(400, 'This member does not have a matching badge entry'); } $now = Date::toSql(); $member_badge->set('action', $action); $member_badge->set('action_on', $now); $member_badge->store(); // Return message $this->send('Passport data saved.'); }
/** * Save developer application details * * @return void */ public function saveTask() { // CSRF check Request::checkToken(); // get request vars $data = Request::getVar('application', array(), 'post', 2, 'none'); $team = Request::getVar('team', array(), 'post', 2, 'none'); // bind data to model $model = new Models\Api\Application($data); // must be logged in if (User::isGuest()) { $return = Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&task=edit&id=' . $data['id'], false, true); App::redirect(Route::url('index.php?option=com_users&view=login&return=' . base64_encode($return))); return; } // is the app available if ($model->isDeleted()) { App::redirect(Route::url('index.php?option=com_developer&controller=applications'), Lang::txt('COM_DEVELOPER_API_APPLICATION_DOES_NOT_EXIST'), 'warning'); return; } // make sure its ours if (!$this->config->get('access-edit-application', 0) && (!$this->config->get('access-create-application', 0) && $data['id'] > 0)) { App::redirect(Route::url('index.php?option=com_developer&controller=applications'), Lang::txt('COM_DEVELOPER_API_APPLICATION_NOT_AUTHORIZED'), 'warning'); return; } // attempt to save model if (!$model->store(true)) { $this->setError($model->getError()); $this->editTask($model); return; } // parse incoming team $team = array_map('trim', explode(',', $team)); // clean up team foreach ($team as $k => $t) { // handle usernames & emails if (!is_numeric($t)) { // handle emails if (strpos($t, '@')) { // load profile by email $profile = \Hubzero\User\Profile\Helper::find_by_email($t); } else { // load profile by username $profile = \Hubzero\User\Profile::getInstance($t); } // swap usernames for uidnumbers if ($profile) { $team[$k] = $profile->get('uidNumber'); } else { unset($team[$k]); } } } // add creator if new // will only ever get added once $team[] = User::get('id'); // get current team $currentTeam = $model->team()->lists('uidNumber'); // add each non-team member to team foreach (array_diff($team, $currentTeam) as $uidNumber) { if ($uidNumber < 1) { continue; } // new team member object $teamMember = new Models\Api\Application\Team\Member(array('uidNumber' => $uidNumber, 'application_id' => $model->get('id'))); $teamMember->store(); } // Redirect back to the main listing with a success message App::redirect(Route::url($model->link()), Lang::txt('COM_DEVELOPER_API_APPLICATION_SAVED'), 'passed'); }