Пример #1
0
 public function _getAddEditResponse(array $item)
 {
     $item = array_merge($item, $this->_getDatePartsFromTimestamp('start', $item['listing_start'], $item['listing_timezone']), $this->_getDatePartsFromTimestamp('end', $item['listing_end'], $item['listing_timezone']));
     $hours = [0 => 12];
     for ($i = 1; $i < 12; $i++) {
         $hours[] = $i;
     }
     $mins = [];
     for ($i = 0; $i < 61; $i = $i + 15) {
         if ($i < 10) {
             $mins[] = '0' . $i;
         } else {
             $mins[] = $i;
         }
     }
     $viewParams = array('hours' => $hours, 'mins' => $mins, 'cat' => $this->_type['type_cat_id'] ? $this->_getCatsModel()->getById($this->_type['type_cat_id']) : [], 'subcat' => $this->_type['type_subcat_id'] ? $this->_getCatsModel()->getById($this->_type['type_subcat_id']) : [], 'catItems' => $this->_type['type_subcat_id'] ? $this->_getCatItemsModel()->getByCatId($this->_type['type_cat_id']) : [], 'subcatItems' => $this->_type['type_subcat_id'] ? $this->_getCatItemsModel()->getByCatId($this->_type['type_subcat_id']) : [], 'type' => $this->_type, 'input' => $item, 'timeZones' => XenForo_Helper_TimeZone::getTimeZones());
     return $this->responseView('GeekListings_ViewPublic_ListEdit', 'GeekListing_edit', $viewParams);
 }
Пример #2
0
 public function actionCreate()
 {
     if (!$this->perms['post']) {
         return $this->responseNoPermission();
     }
     $input['location'] = str_replace('{location}', '', XenForo_Application::get('options')->EWRatendo_geoLocationUrl);
     if ($this->_request->isPost()) {
         $input = $this->_input->filter(array('event_title' => XenForo_Input::STRING, 'event_venue' => XenForo_Input::STRING, 'event_address' => XenForo_Input::STRING, 'event_citystate' => XenForo_Input::STRING, 'event_zipcode' => XenForo_Input::STRING, 'event_date' => XenForo_Input::STRING, 'event_time' => XenForo_Input::UINT, 'event_mins' => XenForo_Input::UINT, 'event_ampm' => XenForo_Input::STRING, 'event_length' => XenForo_Input::UINT, 'event_timezone' => XenForo_Input::STRING, 'event_rsvp' => XenForo_Input::UINT, 'event_recur' => XenForo_Input::UINT, 'event_recur_count' => XenForo_Input::UINT, 'event_recur_units' => XenForo_Input::STRING, 'event_expire' => XenForo_Input::UINT, 'event_recur_expire' => XenForo_Input::STRING, 'event_node' => XenForo_Input::UINT, 'create_thread' => XenForo_Input::UINT, 'submit' => XenForo_Input::STRING));
         if ($input['event_description'] = $this->getHelper('Editor')->getMessageText('event_description', $this->_input)) {
             $input['bypass'] = $this->perms['bypass'];
             $event = $this->getModelFromCache('EWRatendo_Model_Events')->updateEvent($input);
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('events', $event));
         } else {
             throw new XenForo_Exception(new XenForo_Phrase('please_enter_valid_message'), true);
         }
         $input = $this->getModelFromCache('EWRatendo_Model_Events')->formatMaps($input);
     } else {
         $visitor = XenForo_Visitor::getInstance();
         $datetime = new DateTime(date('r', XenForo_Application::$time + 3600));
         $datetime->setTimezone(new DateTimeZone($visitor['timezone']));
         $input['event_date'] = $datetime->format('Y-m-d');
         $input['event_time'] = XenForo_Application::get('options')->EWRatendo_24hour ? $datetime->format('H') : $datetime->format('h');
         $input['event_ampm'] = $datetime->format('A');
         $expire = new DateTime(date('r', XenForo_Application::$time + 31536000));
         $expire->setTimezone(new DateTimeZone($visitor['timezone']));
         $input['event_recur_units'] = 'weeks';
         $input['event_recur_expire'] = $expire->format('Y-m-d');
         $input['event_expire'] = 1;
     }
     $forums = array();
     $selected = !empty($this->slugs[1]) ? $this->slugs[1] : false;
     $selected = isset($input['create_thread']) && empty($input['create_thread']) ? false : $selected;
     $input['event_rsvp'] = isset($input['event_rsvp']) && empty($input['event_rsvp']) ? false : true;
     foreach (XenForo_Application::get('options')->EWRatendo_eventforums as $forum) {
         $forum = $this->getModelFromCache('XenForo_Model_Forum')->getForumById($forum);
         if ($forum && $this->getModelFromCache('XenForo_Model_Forum')->canPostThreadInForum($forum)) {
             $forums[] = $forum;
         }
     }
     $viewParams = array('forums' => $forums, 'selected' => $selected, 'input' => $input, 'timeZones' => XenForo_Helper_TimeZone::getTimeZones());
     return $this->responseView('EWRatendo_ViewPublic_EventsCreate', 'EWRatendo_EventsCreate', $viewParams);
 }
Пример #3
0
 public function actionEdit()
 {
     $eventID = $this->_input->filterSingle('event_id', XenForo_Input::UINT);
     if (!($event = $this->getModelFromCache('EWRatendo_Model_Events')->getEventById($eventID))) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL_PERMANENT, XenForo_Link::buildPublicLink('events'));
     }
     if (!$this->perms['mod'] && $event['user_id'] != XenForo_Visitor::getUserId()) {
         return $this->responseNoPermission();
     }
     if ($this->_request->isPost()) {
         $input = $this->_input->filter(array('prefix_id' => XenForo_Input::UINT, 'event_title' => XenForo_Input::STRING, 'event_venue' => XenForo_Input::STRING, 'event_address' => XenForo_Input::STRING, 'event_citystate' => XenForo_Input::STRING, 'event_zipcode' => XenForo_Input::STRING, 'event_date' => XenForo_Input::STRING, 'event_time' => XenForo_Input::UINT, 'event_mins' => XenForo_Input::UINT, 'event_ampm' => XenForo_Input::STRING, 'event_length' => XenForo_Input::UINT, 'event_timezone' => XenForo_Input::STRING, 'event_rsvp' => XenForo_Input::UINT, 'event_recur' => XenForo_Input::UINT, 'event_recur_count' => XenForo_Input::UINT, 'event_recur_units' => XenForo_Input::STRING, 'event_expire' => XenForo_Input::UINT, 'event_recur_expire' => XenForo_Input::STRING, 'submit' => XenForo_Input::STRING));
         $input['event_id'] = $event['event_id'];
         $input['event_description'] = $this->getHelper('Editor')->getMessageText('event_description', $this->_input);
         $input['bypass'] = $this->perms['bypass'];
         $event = $this->getModelFromCache('EWRatendo_Model_Events')->updateEvent($input);
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('events', $event));
     }
     if ($event['event_recur_count'] && $event['event_recur_units'] != 'none') {
         $event['recur_check'] = true;
         if ($event['event_recur_expire']) {
             $expire = new DateTime(date('r', $event['event_recur_expire']));
             $expire->setTimezone(new DateTimeZone($event['event_timezone']));
             $event['event_expire'] = $expire->format('Y-m-d');
         }
     } else {
         $event['event_recur_count'] = '1';
         $event['event_recur_units'] = 'weeks';
     }
     if (!empty($event['thread_id'])) {
         $ftpHelper = $this->getHelper('ForumThreadPost');
         list($thread, $forum) = $ftpHelper->assertThreadValidAndViewable($event['thread_id']);
         $prefixes = $this->getModelFromCache('XenForo_Model_ThreadPrefix')->getUsablePrefixesInForums($forum['node_id']);
     }
     $viewParams = array('event' => $event, 'thread' => !empty($thread) ? $thread : array(), 'prefixes' => !empty($prefixes) ? $prefixes : array(), 'timeZones' => XenForo_Helper_TimeZone::getTimeZones());
     return $this->responseView('EWRatendo_ViewPublic_EventsEdit', 'EWRatendo_EventsEdit', $viewParams);
 }
Пример #4
0
 protected function _getExternalRegisterFormResponse($viewName, $templateName, array $extraParams = array())
 {
     $options = XenForo_Application::getOptions();
     $viewParams = $extraParams + array('customFields' => $this->_getFieldModel()->prepareUserFields($this->_getFieldModel()->getUserFields(array('registration' => true)), true), 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'tosUrl' => XenForo_Dependencies_Public::getTosUrl(), 'dobRequired' => $options->get('registrationSetup', 'requireDob'));
     return $this->responseView($viewName, $templateName, $viewParams, $this->_getRegistrationContainerParams());
 }
Пример #5
0
 protected function _prepareTimeZone($value)
 {
     $tzs = XenForo_Helper_TimeZone::getTimeZones();
     return isset($tzs[$value]) ? $tzs[$value] : $value;
 }
Пример #6
0
 /**
  * Renders the guest time zone option.
  *
  * @param XenForo_View $view View object
  * @param string $fieldPrefix Prefix for the HTML form field name
  * @param array $preparedOption Prepared option info
  * @param boolean $canEdit True if an "edit" link should appear
  *
  * @return XenForo_Template_Abstract Template object
  */
 public static function renderOption(XenForo_View $view, $fieldPrefix, array $preparedOption, $canEdit)
 {
     $preparedOption['formatParams'] = XenForo_Helper_TimeZone::getTimeZones();
     return XenForo_ViewAdmin_Helper_Option::renderOptionTemplateInternal('option_list_option_select', $view, $fieldPrefix, $preparedOption, $canEdit);
 }
Пример #7
0
 /**
  * Gets the data that is needed to display a list of criteria options for user selection.
  *
  * Tied with the helper_criteria_user admin template, via $userCriteriaData.
  *
  * @return array
  */
 public static function getDataForUserCriteriaSelection()
 {
     $hours = array();
     for ($i = 0; $i < 24; $i++) {
         $hh = str_pad($i, 2, '0', STR_PAD_LEFT);
         $hours[$hh] = $hh;
     }
     $minutes = array();
     for ($i = 0; $i < 60; $i += 5) {
         $mm = str_pad($i, 2, '0', STR_PAD_LEFT);
         $minutes[$mm] = $mm;
     }
     return array('userGroups' => XenForo_Model::create('XenForo_Model_UserGroup')->getAllUserGroups(), 'styles' => XenForo_Model::create('XenForo_Model_Style')->getAllStylesAsFlattenedTree(), 'languages' => XenForo_Model::create('XenForo_Model_Language')->getAllLanguagesAsFlattenedTree(), 'timezones' => XenForo_Helper_TimeZone::getTimeZones(), 'hours' => $hours, 'minutes' => $minutes, 'userFieldGroups' => self::getUserFields());
 }
Пример #8
0
 /**
  * Main user options editing control panel
  *
  * @return XenForo_ControllerResponse_View
  */
 public function actionPreferences()
 {
     $styles = $this->getModelFromCache('XenForo_Model_Style')->getAllStylesAsFlattenedTree();
     $languages = $this->getModelFromCache('XenForo_Model_Language')->getAllLanguages();
     $options = XenForo_Application::get('options');
     $defaultStyle = isset($styles[$options->defaultStyleId]) ? $styles[$options->defaultStyleId] : array();
     if (count($styles) <= 1) {
         $canChangeStyle = false;
     } else {
         if (XenForo_Visitor::getInstance()->is_admin) {
             $canChangeStyle = count($styles) > 1;
         } else {
             $changable = 0;
             $canChangeStyle = false;
             foreach ($styles as $style) {
                 if ($style['user_selectable']) {
                     $changable++;
                     if ($changable > 1) {
                         $canChangeStyle = true;
                         break;
                     }
                 }
             }
         }
     }
     $viewParams = array('styles' => $styles, 'defaultStyle' => $defaultStyle, 'canChangeStyle' => $canChangeStyle, 'languages' => $languages, 'canChangeLanguage' => count($languages) > 1, 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'customFields' => $this->_getFieldModel()->prepareUserFields($this->_getFieldModel()->getUserFields(array('display_group' => 'preferences'), array('valueUserId' => XenForo_Visitor::getUserId())), true), 'showNoticeReset' => (bool) XenForo_Application::getSession()->get('dismissedNotices'));
     return $this->_getWrapper('account', 'preferences', $this->responseView('XenForo_ViewPublic_Account_Preferences', 'account_preferences', $viewParams));
 }
Пример #9
0
 protected function _getUserAddEditResponse(array $user)
 {
     $userModel = $this->_getUserModel();
     if ($user['user_id']) {
         $user['is_super_admin'] = $this->_getUserModel()->isUserSuperAdmin($user);
     } else {
         $user['is_super_admin'] = false;
     }
     $fieldModel = $this->_getFieldModel();
     $customFields = $fieldModel->prepareUserFields($fieldModel->getUserFields(array(), array('valueUserId' => $user['user_id'])), true);
     $viewParams = array('user' => $user, 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'userGroups' => $this->_getUserGroupModel()->getAllUserGroupTitles(), 'customFieldsGrouped' => $fieldModel->groupUserFields($customFields), 'styles' => $this->getModelFromCache('XenForo_Model_Style')->getStylesForOptionsTag($user['style_id']), 'languages' => $this->getModelFromCache('XenForo_Model_Language')->getLanguagesForOptionsTag($user['language_id']), 'lastHash' => $this->getLastHash($user['user_id']));
     return $this->responseView('XenForo_ViewAdmin_User_Edit', 'user_edit', $viewParams);
 }
Пример #10
0
 /**
  * Displays a form to join using Facebook or logs in an existing account.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionFacebook()
 {
     $assocUserId = $this->_input->filterSingle('assoc', XenForo_Input::UINT);
     $redirect = $this->_input->filterSingle('redirect', XenForo_Input::STRING);
     $options = XenForo_Application::get('options');
     $fbRedirectUri = XenForo_Link::buildPublicLink('canonical:register/facebook', false, array('assoc' => $assocUserId ? $assocUserId : false));
     if ($this->_input->filterSingle('reg', XenForo_Input::UINT)) {
         $redirect = XenForo_Link::convertUriToAbsoluteUri($this->getDynamicRedirect());
         $baseDomain = preg_replace('#^([a-z]+://[^/]+).*$#i', '$1', $options->boardUrl);
         if (strpos($redirect, $baseDomain) !== 0) {
             $redirect = XenForo_Link::buildPublicLink('canonical:index');
         }
         XenForo_Application::get('session')->set('fbRedirect', $redirect);
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL, XenForo_Helper_Facebook::getFacebookRequestUrl($fbRedirectUri));
     }
     $fbToken = $this->_input->filterSingle('t', XenForo_Input::STRING);
     if (!$fbToken) {
         $error = $this->_input->filterSingle('error', XenForo_Input::STRING);
         if ($error == 'access_denied') {
             return $this->responseError(new XenForo_Phrase('access_to_facebook_account_denied'));
         }
         $code = $this->_input->filterSingle('code', XenForo_Input::STRING);
         if (!$code) {
             return $this->responseError(new XenForo_Phrase('error_occurred_while_connecting_with_facebook'));
         }
         $token = XenForo_Helper_Facebook::getAccessTokenFromCode($code, $fbRedirectUri);
         $fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($token, 'access_token');
         if ($fbError) {
             XenForo_Error::logException(new XenForo_Exception(strval($fbError)));
             return $this->responseError(new XenForo_Phrase('error_occurred_while_connecting_with_facebook'));
         }
         $fbToken = $token['access_token'];
     }
     $fbUser = XenForo_Helper_Facebook::getUserInfo($fbToken);
     $fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($fbUser, 'id');
     if ($fbError) {
         XenForo_Error::logException(new XenForo_Exception(strval($fbError)));
         return $this->responseError(new XenForo_Phrase('error_occurred_while_connecting_with_facebook'));
     }
     $userModel = $this->_getUserModel();
     $userExternalModel = $this->_getUserExternalModel();
     $fbAssoc = $userExternalModel->getExternalAuthAssociation('facebook', $fbUser['id']);
     if ($fbAssoc && $userModel->getUserById($fbAssoc['user_id'])) {
         XenForo_Helper_Facebook::setUidCookie($fbUser['id']);
         XenForo_Application::get('session')->changeUserId($fbAssoc['user_id']);
         XenForo_Visitor::setup($fbAssoc['user_id']);
         $redirect = XenForo_Application::get('session')->get('fbRedirect');
         XenForo_Application::get('session')->remove('fbRedirect');
         if (!$redirect) {
             $redirect = $this->getDynamicRedirect(false, false);
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
     }
     XenForo_Helper_Facebook::setUidCookie(0);
     parent::_assertBoardActive('facebook');
     $existingUser = false;
     $emailMatch = false;
     if (XenForo_Visitor::getUserId()) {
         $existingUser = XenForo_Visitor::getInstance();
     } else {
         if ($assocUserId) {
             $existingUser = $userModel->getUserById($assocUserId);
         }
     }
     if (!$existingUser) {
         $existingUser = $userModel->getUserByEmail($fbUser['email']);
         $emailMatch = true;
     }
     if ($existingUser) {
         // must associate: matching user
         return $this->responseView('XenForo_ViewPublic_Register_Facebook', 'register_facebook', array('associateOnly' => true, 'fbToken' => $fbToken, 'fbUser' => $fbUser, 'existingUser' => $existingUser, 'emailMatch' => $emailMatch, 'redirect' => $redirect));
     }
     if (!XenForo_Application::get('options')->get('registrationSetup', 'enabled')) {
         $this->_assertRegistrationActive();
     }
     if (!empty($fbUser['birthday'])) {
         $birthdayParts = explode('/', $fbUser['birthday']);
         if (count($birthdayParts) == 3) {
             list($month, $day, $year) = $birthdayParts;
             $userAge = $this->_getUserProfileModel()->calculateAge($year, $month, $day);
             if ($userAge < intval($options->get('registrationSetup', 'minimumAge'))) {
                 // TODO: set a cookie to prevent re-registration attempts
                 return $this->responseError(new XenForo_Phrase('sorry_you_too_young_to_create_an_account'));
             }
         }
     }
     // give a unique username suggestion
     $i = 2;
     $origName = $fbUser['name'];
     while ($userModel->getUserByName($fbUser['name'])) {
         $fbUser['name'] = $origName . ' ' . $i++;
     }
     return $this->responseView('XenForo_ViewPublic_Register_Facebook', 'register_facebook', array('fbToken' => $fbToken, 'fbUser' => $fbUser, 'redirect' => $redirect, 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'tosUrl' => XenForo_Dependencies_Public::getTosUrl()), $this->_getRegistrationContainerParams());
 }
Пример #11
0
 public function actionExternal()
 {
     $providerCode = $this->_input->filterSingle('provider', XenForo_Input::STRING);
     $assocUserId = $this->_input->filterSingle('assoc', XenForo_Input::UINT);
     $externalCode = $this->_input->filterSingle('code', XenForo_Input::STRING);
     $redirect = $this->_bdApiConsumer_getRedirect();
     $state = $this->_input->filterSingle('state', XenForo_Input::STRING);
     if (!empty($state)) {
         // looks like bdApiConsumer_Option::CONFIG_TRACK_AUTHORIZE_URL_STATE has been enabled
         // attempt to unpack the state data now
         $stateData = @base64_decode($state);
         if ($stateData !== false) {
             $stateData = @json_decode($stateData, true, 2);
             if ($stateData !== null) {
                 if (isset($stateData['time'])) {
                     $stateData['timeElapsed'] = XenForo_Application::$time - $stateData['time'];
                 }
                 // make it available in server error log (if an error occurs)
                 $_POST['.state'] = $stateData;
             }
         }
     }
     $provider = bdApiConsumer_Option::getProviderByCode($providerCode);
     if (empty($provider)) {
         if (!empty($externalCode)) {
             // make this available in server error log
             $_POST['.dynamicRedirect'] = $this->getDynamicRedirect();
             // this is one serious error
             throw new XenForo_Exception('Provider could not be determined');
         } else {
             return $this->responseNoPermission();
         }
     }
     $externalRedirectUri = XenForo_Link::buildPublicLink('canonical:register/external', false, array('provider' => $providerCode, 'assoc' => $assocUserId ? $assocUserId : false));
     if ($this->_input->filterSingle('reg', XenForo_Input::UINT)) {
         XenForo_Application::get('session')->set(self::SESSION_KEY_REDIRECT, $redirect);
         $social = $this->_input->filterSingle('social', XenForo_Input::STRING);
         $requestUrl = bdApiConsumer_Helper_Api::getRequestUrl($provider, $externalRedirectUri, array('social' => $social));
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL, $requestUrl);
     }
     $externalToken = null;
     if (empty($externalToken)) {
         $_token = $this->_input->filterSingle('_token', XenForo_Input::STRING);
         if (!empty($_token)) {
             $_token = @base64_decode($_token);
             if (!empty($_token)) {
                 $_token = @json_decode($_token, true);
                 if (!empty($_token)) {
                     $externalToken = $_token;
                 }
             }
         }
     }
     if (empty($externalToken)) {
         // there should be `code` at this point...
         if (empty($externalCode)) {
             return $this->responseError(new XenForo_Phrase('bdapi_consumer_error_occurred_while_connecting_with_x', array('provider' => $provider['name'])));
         }
         $externalToken = bdApiConsumer_Helper_Api::getAccessTokenFromCode($provider, $externalCode, $externalRedirectUri);
         if (!empty($externalToken)) {
             $selfRedirect = $this->_request->getRequestUri();
             $selfRedirect = preg_replace('#(\\?|&)code=.+(&|$)#', '$1', $selfRedirect);
             $selfRedirect = preg_replace('#(\\?|&)state=.+(&|$)#', '$1', $selfRedirect);
             // filter $externalToken keys to make it more lightweight
             foreach (array_keys($externalToken) as $_key) {
                 if ($_key === 'debug' || substr($_key, 0, 1) === '_') {
                     unset($externalToken[$_key]);
                 }
             }
             $selfRedirect .= sprintf('%1$s_token=%2$s', strpos($selfRedirect, '?') === false ? '?' : '&', rawurlencode(base64_encode(json_encode($externalToken))));
             // do a self redirect immediately so user won't refresh the page
             // TODO: improve this
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $selfRedirect);
         }
     }
     if (empty($externalToken)) {
         if (!XenForo_Visitor::getUserId()) {
             // report error only if user hasn't been logged in
             return $this->responseError(new XenForo_Phrase('bdapi_consumer_error_occurred_while_connecting_with_x', array('provider' => $provider['name'])));
         } else {
             // or try to be friendly and just redirect user back to where s/he was
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
         }
     }
     $externalVisitor = bdApiConsumer_Helper_Api::getVisitor($provider, $externalToken['access_token']);
     if (empty($externalVisitor)) {
         return $this->responseError(new XenForo_Phrase('bdapi_consumer_error_occurred_while_connecting_with_x', array('provider' => $provider['name'])));
     }
     if (empty($externalVisitor['user_email'])) {
         return $this->responseError(new XenForo_Phrase('bdapi_consumer_x_returned_unknown_error', array('provider' => $provider['name'])));
     }
     if (isset($externalVisitor['user_is_valid']) && isset($externalVisitor['user_is_verified'])) {
         if (empty($externalVisitor['user_is_valid']) || empty($externalVisitor['user_is_verified'])) {
             return $this->responseError(new XenForo_Phrase('bdapi_consumer_x_account_not_good_standing', array('provider' => $provider['name'])));
         }
     }
     $userModel = $this->_getUserModel();
     /** @var bdApiConsumer_XenForo_Model_UserExternal $userExternalModel */
     $userExternalModel = $this->_getUserExternalModel();
     $existingAssoc = $userExternalModel->getExternalAuthAssociation($userExternalModel->bdApiConsumer_getProviderCode($provider), $externalVisitor['user_id']);
     $autoRegistered = false;
     if (empty($existingAssoc)) {
         $existingAssoc = $this->_bdApiConsumer_autoRegister($provider, $externalToken, $externalVisitor);
         if (!empty($existingAssoc)) {
             $autoRegistered = true;
         }
     }
     if ($existingAssoc && $userModel->getUserById($existingAssoc['user_id'])) {
         XenForo_Application::get('session')->changeUserId($existingAssoc['user_id']);
         XenForo_Visitor::setup($existingAssoc['user_id']);
         if (!$autoRegistered) {
             $userExternalModel->bdApiConsumer_updateExternalAuthAssociation($provider, $externalVisitor['user_id'], $existingAssoc['user_id'], array_merge($externalVisitor, array('token' => $externalToken)));
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
     }
     $existingUser = false;
     $emailMatch = false;
     if (XenForo_Visitor::getUserId()) {
         $existingUser = XenForo_Visitor::getInstance();
     } elseif ($assocUserId) {
         $existingUser = $userModel->getUserById($assocUserId);
     }
     if (!$existingUser) {
         $existingUser = $userModel->getUserByEmail($externalVisitor['user_email']);
         $emailMatch = true;
     }
     if ($existingUser) {
         // must associate: matching user
         return $this->responseView('bdApiConsumer_ViewPublic_Register_External', 'bdapi_consumer_register', array('associateOnly' => true, 'provider' => $provider, 'externalToken' => $externalToken, 'externalVisitor' => $externalVisitor, 'existingUser' => $existingUser, 'emailMatch' => $emailMatch, 'redirect' => $redirect));
     }
     if (bdApiConsumer_Option::get('bypassRegistrationActive')) {
         // do not check for registration active option
     } else {
         $this->_assertRegistrationActive();
     }
     $externalVisitor['username'] = bdApiConsumer_Helper_AutoRegister::suggestUserName($externalVisitor['username'], $userModel);
     return $this->responseView('bdApiConsumer_ViewPublic_Register_External', 'bdapi_consumer_register', array('provider' => $provider, 'externalToken' => $externalToken, 'externalVisitor' => $externalVisitor, 'redirect' => $redirect, 'customFields' => $this->_getFieldModel()->prepareUserFields($this->_getFieldModel()->getUserFields(array('registration' => true)), true), 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'tosUrl' => XenForo_Dependencies_Public::getTosUrl()), $this->_getRegistrationContainerParams());
 }
Пример #12
0
 protected function _getUserAddEditResponse(array $user)
 {
     $userModel = $this->_getUserModel();
     if ($user['user_id']) {
         $user['is_super_admin'] = $this->getModelFromCache('XenForo_Model_Admin')->isSuperAdmin($user['user_id']);
         $identities = $userModel->getIdentities($user['user_id']);
     } else {
         $user['is_supder_admin'] = false;
         $identities = array();
     }
     $viewParams = array('user' => $user, 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'userGroups' => $this->_getUserGroupModel()->getAllUserGroupTitles(), 'idServices' => $userModel->getIdentityServicesEditingData($identities), 'styles' => $this->getModelFromCache('XenForo_Model_Style')->getStylesForOptionsTag($user['style_id']), 'languages' => $this->getModelFromCache('XenForo_Model_Language')->getLanguagesForOptionsTag($user['language_id']), 'lastHash' => $this->getLastHash($user['user_id']));
     return $this->responseView('XenForo_ViewAdmin_User_Edit', 'user_edit', $viewParams);
 }
 public function actionSteam()
 {
     $assocUserId = $this->_input->filterSingle('assoc', XenForo_Input::UINT);
     $redirect = $this->_input->filterSingle('redirect', XenForo_Input::STRING);
     $session = XenForo_Application::get('session');
     if ($this->_input->filterSingle('reg', XenForo_Input::UINT)) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $this->_genUrl());
     }
     // Validate Response
     $id = $this->_validate();
     if (empty($id)) {
         return $this->responseError('Error during authentication.  Please try again.');
     }
     $session->set('steam_id', $id);
     $userModel = $this->_getUserModel();
     $userExternalModel = $this->_getUserExternalModel();
     $stAssoc = $userExternalModel->getExternalAuthAssociation('steam', $id);
     if ($stAssoc && $userModel->getUserById($stAssoc['user_id'])) {
         XenForo_Application::get('session')->changeUserId($stAssoc['user_id']);
         XenForo_Visitor::setup($stAssoc['user_id']);
         /* Cookies */
         $userModel->setUserRememberCookie($stAssoc['user_id']);
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $this->getDynamicRedirect(false, false));
     }
     $existingUser = false;
     if (XenForo_Visitor::getUserId()) {
         $existingUser = XenForo_Visitor::getInstance();
     } else {
         if ($assocUserId) {
             $existingUser = $userModel->getUserById($assocUserId);
         }
     }
     if ($existingUser) {
         // must associate: matching user
         return $this->responseView('XenForo_ViewPublic_Register_Steam', 'register_steam', array('associateOnly' => true, 'existingUser' => $existingUser, 'redirect' => $redirect));
     }
     if (!XenForo_Application::get('options')->get('registrationSetup', 'enabled')) {
         $this->_assertRegistrationActive();
     }
     $username = '';
     $sHelper = new Steam_Helper_Steam();
     $steamProfileAPI = $sHelper->getSteamProfileAPI($id);
     $json_object = $sHelper->getJsonData($steamProfileAPI);
     $json_decoded = json_decode($json_object);
     if (empty($json_decoded)) {
         return $this->responseError('Problem communicating with Steam Community. Please try your registration again.');
     }
     if (!empty($json_decoded)) {
         $username = $json_decoded->response->players[0]->personaname;
         if (!isset($json_decoded->response->players[0]->loccountrycode)) {
             $location = 'Parts Unknown';
         }
         if (isset($json_decoded->response->players[0]->loccountrycode)) {
             $location = $json_decoded->response->players[0]->loccountrycode;
             switch ($location) {
                 case "AF":
                     $location = "Afghanistan";
                     break;
                 case "AL":
                     $location = "Albania";
                     break;
                 case "DZ":
                     $location = "Algeria";
                     break;
                 case "AD":
                     $location = "Andorra";
                     break;
                 case "AO":
                     $location = "Angola";
                     break;
                 case "AG":
                     $location = "Antigua and Barbuda";
                     break;
                 case "AR":
                     $location = "Argentina";
                     break;
                 case "AM":
                     $location = "Armenia";
                     break;
                 case "AU":
                     $location = "Australia";
                     break;
                 case "AT":
                     $location = "Austria";
                     break;
                 case "AZ":
                     $location = "Azerbaijan";
                     break;
                 case "BS":
                     $location = "The Bahamas";
                     break;
                 case "BH":
                     $location = "Bahrain";
                     break;
                 case "BD":
                     $location = "Bangladesh";
                     break;
                 case "BB":
                     $location = "Barbados";
                     break;
                 case "BY":
                     $location = "Belarus";
                     break;
                 case "BE":
                     $location = "Belgium";
                     break;
                 case "BZ":
                     $location = "Belize";
                     break;
                 case "BJ":
                     $location = "Benin";
                     break;
                 case "BT":
                     $location = "Bhutan";
                     break;
                 case "BO":
                     $location = "Bolivia";
                     break;
                 case "BA":
                     $location = "Bosnia and Herzegovina";
                     break;
                 case "BW":
                     $location = "Botswana";
                     break;
                 case "BR":
                     $location = "Brazil";
                     break;
                 case "BN":
                     $location = "Brunei";
                     break;
                 case "BG":
                     $location = "Bulgaria";
                     break;
                 case "BF":
                     $location = "Burkina Faso";
                     break;
                 case "BI":
                     $location = "Burundi";
                     break;
                 case "KH":
                     $location = "Cambodia";
                     break;
                 case "CM":
                     $location = "Cameroon";
                     break;
                 case "CA":
                     $location = "Canada";
                     break;
                 case "CV":
                     $location = "Cape Verde";
                     break;
                 case "CF":
                     $location = "Central African Republic";
                     break;
                 case "TD":
                     $location = "Chad";
                     break;
                 case "CL":
                     $location = "Chile";
                     break;
                 case "CN":
                     $location = "China";
                     break;
                 case "CO":
                     $location = "Colombia";
                     break;
                 case "KM":
                     $location = "Comoros";
                     break;
                 case "CG":
                     $location = "Congo, Republic of the";
                     break;
                 case "CD":
                     $location = "Congo, Democratic Republic of the";
                     break;
                 case "CR":
                     $location = "Costa Rica";
                     break;
                 case "CI":
                     $location = "Cote d'Ivoire";
                     break;
                 case "HR":
                     $location = "Croatia";
                     break;
                 case "CU":
                     $location = "Cuba";
                     break;
                 case "CY":
                     $location = "Cyprus";
                     break;
                 case "CZ":
                     $location = "Czech Republic";
                     break;
                 case "DK":
                     $location = "Denmark";
                     break;
                 case "DJ":
                     $location = "Djibouti";
                     break;
                 case "DM":
                     $location = "Dominica";
                     break;
                 case "DO":
                     $location = "Dominican Republic";
                     break;
                 case "TL":
                     $location = "Timor-Leste";
                     break;
                 case "EC":
                     $location = "Ecuador";
                     break;
                 case "EG":
                     $location = "Egypt";
                     break;
                 case "SV":
                     $location = "El Salvador";
                     break;
                 case "GQ":
                     $location = "Equatorial Guinea";
                     break;
                 case "ER":
                     $location = "Eritrea";
                     break;
                 case "EE":
                     $location = "Estonia";
                     break;
                 case "ET":
                     $location = "Ethiopia";
                     break;
                 case "FJ":
                     $location = "Fiji";
                     break;
                 case "FI":
                     $location = "Finland";
                     break;
                 case "FR":
                     $location = "France";
                     break;
                 case "GA":
                     $location = "Gabon";
                     break;
                 case "GM":
                     $location = "Gambia";
                     break;
                 case "GE":
                     $location = "Georgia";
                     break;
                 case "DE":
                     $location = "Germany";
                     break;
                 case "GH":
                     $location = "Ghana";
                     break;
                 case "GR":
                     $location = "Greece";
                     break;
                 case "GD":
                     $location = "Grenada";
                     break;
                 case "GT":
                     $location = "Guatemala";
                     break;
                 case "GN":
                     $location = "Guinea";
                     break;
                 case "GW":
                     $location = "Guinea-Bissau";
                     break;
                 case "GY":
                     $location = "Guyana";
                     break;
                 case "HT":
                     $location = "Haiti";
                     break;
                 case "HN":
                     $location = "Honduras";
                     break;
                 case "HU":
                     $location = "Hungary";
                     break;
                 case "IS":
                     $location = "Iceland";
                     break;
                 case "IN":
                     $location = "India";
                     break;
                 case "ID":
                     $location = "Indonesia";
                     break;
                 case "IR":
                     $location = "Iran";
                     break;
                 case "IQ":
                     $location = "Iraq";
                     break;
                 case "IE":
                     $location = "Ireland";
                     break;
                 case "IL":
                     $location = "Israel";
                     break;
                 case "IT":
                     $location = "Italy";
                     break;
                 case "JM":
                     $location = "Jamaica";
                     break;
                 case "JP":
                     $location = "Japan";
                     break;
                 case "JO":
                     $location = "Jordan";
                     break;
                 case "KZ":
                     $location = "Kazakhstan";
                     break;
                 case "KE":
                     $location = "Kenya";
                     break;
                 case "KI":
                     $location = "Kiribati";
                     break;
                 case "KP":
                     $location = "Korea, North";
                     break;
                 case "KR":
                     $location = "Korea, South";
                     break;
                 case "ZZ":
                     $location = "Kosovo";
                     break;
                 case "KW":
                     $location = "Kuwait";
                     break;
                 case "KG":
                     $location = "Kyrgyzstan";
                     break;
                 case "LA":
                     $location = "Laos";
                     break;
                 case "LV":
                     $location = "Latvia";
                     break;
                 case "LB":
                     $location = "Lebanon";
                     break;
                 case "LS":
                     $location = "Lesotho";
                     break;
                 case "LR":
                     $location = "Liberia";
                     break;
                 case "LY":
                     $location = "Libya";
                     break;
                 case "LI":
                     $location = "Liechtenstein";
                     break;
                 case "LT":
                     $location = "Lithuania";
                     break;
                 case "LU":
                     $location = "Luxembourg";
                     break;
                 case "MK":
                     $location = "Macedonia";
                     break;
                 case "MG":
                     $location = "Madagascar";
                     break;
                 case "MW":
                     $location = "Malawi";
                     break;
                 case "MY":
                     $location = "Malaysia";
                     break;
                 case "MV":
                     $location = "Maldives";
                     break;
                 case "ML":
                     $location = "Mali";
                     break;
                 case "MT":
                     $location = "Malta";
                     break;
                 case "MH":
                     $location = "Marshall Islands";
                     break;
                 case "MR":
                     $location = "Mauritania";
                     break;
                 case "MU":
                     $location = "Mauritius";
                     break;
                 case "MX":
                     $location = "Mexico";
                     break;
                 case "FM":
                     $location = "Micronesia, Federated States of";
                     break;
                 case "MD":
                     $location = "Moldova";
                     break;
                 case "MC":
                     $location = "Monaco";
                     break;
                 case "MN":
                     $location = "Mongolia";
                     break;
                 case "ME":
                     $location = "Montenegro";
                     break;
                 case "MA":
                     $location = "Morocco";
                     break;
                 case "MZ":
                     $location = "Mozambique";
                     break;
                 case "MM":
                     $location = "Myanmar (Burma)";
                     break;
                 case "NA":
                     $location = "Namibia";
                     break;
                 case "NR":
                     $location = "Nauru";
                     break;
                 case "NP":
                     $location = "Nepal";
                     break;
                 case "NL":
                     $location = "Netherlands";
                     break;
                 case "NZ":
                     $location = "New Zealand";
                     break;
                 case "NI":
                     $location = "Nicaragua";
                     break;
                 case "NE":
                     $location = "Niger";
                     break;
                 case "NG":
                     $location = "Nigeria";
                     break;
                 case "NO":
                     $location = "Norway";
                     break;
                 case "OM":
                     $location = "Oman";
                     break;
                 case "PK":
                     $location = "Pakistan";
                     break;
                 case "PW":
                     $location = "Palau";
                     break;
                 case "PA":
                     $location = "Panama";
                     break;
                 case "PG":
                     $location = "Papua New Guinea";
                     break;
                 case "PY":
                     $location = "Paraguay";
                     break;
                 case "PE":
                     $location = "Peru";
                     break;
                 case "PH":
                     $location = "Philippines";
                     break;
                 case "PL":
                     $location = "Poland";
                     break;
                 case "PT":
                     $location = "Portugal";
                     break;
                 case "QA":
                     $location = "Qatar";
                     break;
                 case "RO":
                     $location = "Romania";
                     break;
                 case "RU":
                     $location = "Russia";
                     break;
                 case "RW":
                     $location = "Rwanda";
                     break;
                 case "KN":
                     $location = "Saint Kitts and Nevis";
                     break;
                 case "LC":
                     $location = "Saint Lucia";
                     break;
                 case "VC":
                     $location = "Saint Vincent and the Grenadines";
                     break;
                 case "WS":
                     $location = "Samoa";
                     break;
                 case "SM":
                     $location = "San Marino";
                     break;
                 case "ST":
                     $location = "Sao Tome and Principe";
                     break;
                 case "SA":
                     $location = "Saudi Arabia";
                     break;
                 case "SN":
                     $location = "Senegal";
                     break;
                 case "RS":
                     $location = "Serbia";
                     break;
                 case "SC":
                     $location = "Seychelles";
                     break;
                 case "SL":
                     $location = "Sierra Leone";
                     break;
                 case "SG":
                     $location = "Singapore";
                     break;
                 case "SK":
                     $location = "Slovakia";
                     break;
                 case "SI":
                     $location = "Slovenia";
                     break;
                 case "SB":
                     $location = "Solomon Islands";
                     break;
                 case "SO":
                     $location = "Somalia";
                     break;
                 case "ZA":
                     $location = "South Africa";
                     break;
                 case "SS":
                     $location = "South Sudan";
                     break;
                 case "ES":
                     $location = "Spain";
                     break;
                 case "LK":
                     $location = "Sri Lanka";
                     break;
                 case "SD":
                     $location = "Sudan";
                     break;
                 case "SR":
                     $location = "Suriname";
                     break;
                 case "SZ":
                     $location = "Swaziland";
                     break;
                 case "SE":
                     $location = "Sweden";
                     break;
                 case "CH":
                     $location = "Switzerland";
                     break;
                 case "SY":
                     $location = "Syria";
                     break;
                 case "TW":
                     $location = "Taiwan";
                     break;
                 case "TJ":
                     $location = "Tajikistan";
                     break;
                 case "TZ":
                     $location = "Tanzania";
                     break;
                 case "TH":
                     $location = "Thailand";
                     break;
                 case "TG":
                     $location = "Togo";
                     break;
                 case "TO":
                     $location = "Tonga";
                     break;
                 case "TT":
                     $location = "Trinidad and Tobago";
                     break;
                 case "TN":
                     $location = "Tunisia";
                     break;
                 case "TR":
                     $location = "Turkey";
                     break;
                 case "TM":
                     $location = "Turkmenistan";
                     break;
                 case "TV":
                     $location = "Tuvalu";
                     break;
                 case "UG":
                     $location = "Uganda";
                     break;
                 case "UA":
                     $location = "Ukraine";
                     break;
                 case "AE":
                     $location = "United Arab Emirates";
                     break;
                 case "GB":
                     $location = "United Kingdom";
                     break;
                 case "US":
                     $location = "United States of America";
                     break;
                 case "UY":
                     $location = "Uruguay";
                     break;
                 case "UZ":
                     $location = "Uzbekistan";
                     break;
                 case "VU":
                     $location = "Vanuatu";
                     break;
                 case "VA":
                     $location = "Vatican City (Holy See)";
                     break;
                 case "VE":
                     $location = "Venezuela";
                     break;
                 case "VN":
                     $location = "Vietnam";
                     break;
                 case "YE":
                     $location = "Yemen";
                     break;
                 case "ZM":
                     $location = "Zambia";
                     break;
                 case "ZW":
                     $location = "Zimbabwe";
                     break;
                 default:
                     $location = 'Parts Unknown';
             }
             if (isset($json_decoded->response->players[0]->locstatecode) && strcmp($location, 'United States of America') == 0) {
                 $userstate = $json_decoded->response->players[0]->locstatecode;
                 switch ($userstate) {
                     case "AL":
                         $location = "Alabama, " . $location;
                         break;
                     case "AK":
                         $location = "Alaska, " . $location;
                         break;
                     case "AZ":
                         $location = "Arizona, " . $location;
                         break;
                     case "AR":
                         $location = "Arkansas, " . $location;
                         break;
                     case "CA":
                         $location = "California, " . $location;
                         break;
                     case "CO":
                         $location = "Colorado, " . $location;
                         break;
                     case "CT":
                         $location = "Connecticut, " . $location;
                         break;
                     case "DE":
                         $location = "Delaware, " . $location;
                         break;
                     case "FL":
                         $location = "Florida, " . $location;
                         break;
                     case "GA":
                         $location = "Georgia, " . $location;
                         break;
                     case "HI":
                         $location = "Hawaii, " . $location;
                         break;
                     case "ID":
                         $location = "Idaho, " . $location;
                         break;
                     case "IL":
                         $location = "Illinois, " . $location;
                         break;
                     case "IN":
                         $location = "Indiana, " . $location;
                         break;
                     case "IA":
                         $location = "Iowa, " . $location;
                         break;
                     case "KS":
                         $location = "Kansas, " . $location;
                         break;
                     case "KY":
                         $location = "Kentucky, " . $location;
                         break;
                     case "LA":
                         $location = "Louisiana, " . $location;
                         break;
                     case "ME":
                         $location = "Maine, " . $location;
                         break;
                     case "MD":
                         $location = "Maryland, " . $location;
                         break;
                     case "MA":
                         $location = "Massachusetts, " . $location;
                         break;
                     case "MI":
                         $location = "Michigan, " . $location;
                         break;
                     case "MN":
                         $location = "Minnesota, " . $location;
                         break;
                     case "MS":
                         $location = "Mississippi, " . $location;
                         break;
                     case "MO":
                         $location = "Missouri, " . $location;
                         break;
                     case "MT":
                         $location = "Montana, " . $location;
                         break;
                     case "NE":
                         $location = "Nebraska, " . $location;
                         break;
                     case "NV":
                         $location = "Nevada, " . $location;
                         break;
                     case "NH":
                         $location = "New Hampshire, " . $location;
                         break;
                     case "NJ":
                         $location = "New Jersey, " . $location;
                         break;
                     case "NM":
                         $location = "New Mexico, " . $location;
                         break;
                     case "NY":
                         $location = "New York, " . $location;
                         break;
                     case "NC":
                         $location = "North Carolina, " . $location;
                         break;
                     case "ND":
                         $location = "North Dakota, " . $location;
                         break;
                     case "OH":
                         $location = "Ohio, " . $location;
                         break;
                     case "OK":
                         $location = "Oklahoma, " . $location;
                         break;
                     case "OR":
                         $location = "Oregon, " . $location;
                         break;
                     case "PA":
                         $location = "Pennsylvania, " . $location;
                         break;
                     case "RI":
                         $location = "Rhode Island, " . $location;
                         break;
                     case "SC":
                         $location = "South Carolina, " . $location;
                         break;
                     case "SD":
                         $location = "South Dakota, " . $location;
                         break;
                     case "TN":
                         $location = "Tennessee, " . $location;
                         break;
                     case "TX":
                         $location = "Texas, " . $location;
                         break;
                     case "UT":
                         $location = "Utah, " . $location;
                         break;
                     case "VT":
                         $location = "Vermont, " . $location;
                         break;
                     case "VA":
                         $location = "Virginia, " . $location;
                         break;
                     case "WA":
                         $location = "Washington, " . $location;
                         break;
                     case "WV":
                         $location = "West Virginia, " . $location;
                         break;
                     case "WI":
                         $location = "Wisconsin, " . $location;
                         break;
                     case "WY":
                         $location = "Wyoming, " . $location;
                         break;
                 }
             }
         }
     }
     $i = 2;
     $origName = $username;
     while ($username != "" && $userModel->getUserByName($username)) {
         $username = "******";
         $i++;
     }
     return $this->responseView('XenForo_ViewPublic_Register_Steam', 'register_steam', array('username' => $username, 'redirect' => $redirect, 'customFields' => $this->_getFieldModel()->prepareUserFields($this->_getFieldModel()->getUserFields(array('registration' => true)), true), 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'tosUrl' => XenForo_Dependencies_Public::getTosUrl(), 'location' => $location), $this->_getRegistrationContainerParams());
 }
Пример #14
0
 /**
  * Main user options editing control panel
  *
  * @return XenForo_ControllerResponse_View
  */
 public function actionPreferences()
 {
     $styles = $this->getModelFromCache('XenForo_Model_Style')->getAllStylesAsFlattenedTree();
     $languages = $this->getModelFromCache('XenForo_Model_Language')->getAllLanguages();
     $options = XenForo_Application::get('options');
     $defaultStyle = isset($styles[$options->defaultStyleId]) ? $styles[$options->defaultStyleId] : array();
     $viewParams = array('styles' => $styles, 'languages' => $languages, 'defaultStyle' => $defaultStyle, 'timeZones' => XenForo_Helper_TimeZone::getTimeZones());
     return $this->_getWrapper('account', 'preferences', $this->responseView('XenForo_ViewPublic_Account_Preferences', 'account_preferences', $viewParams));
 }
Пример #15
0
 public function actionExternal()
 {
     $providerCode = $this->_input->filterSingle('provider', XenForo_Input::STRING);
     $assocUserId = $this->_input->filterSingle('assoc', XenForo_Input::UINT);
     $redirect = $this->_input->filterSingle('redirect', XenForo_Input::STRING);
     $provider = bdApiConsumer_Option::getProviderByCode($providerCode);
     if (empty($provider)) {
         // this is one serious error
         throw new XenForo_Exception('Provider could not be determined');
     }
     $externalRedirectUri = XenForo_Link::buildPublicLink('canonical:register/external', false, array('provider' => $providerCode, 'assoc' => $assocUserId ? $assocUserId : false));
     if ($this->_input->filterSingle('reg', XenForo_Input::UINT)) {
         $redirect = XenForo_Link::convertUriToAbsoluteUri($this->getDynamicRedirect());
         XenForo_Application::get('session')->set(self::SESSION_KEY_REDIRECT, $redirect);
         $social = $this->_input->filterSingle('social', XenForo_Input::STRING);
         $requestUrl = bdApiConsumer_Helper_Api::getRequestUrl($provider, $externalRedirectUri, array('social' => $social));
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL, $requestUrl);
     }
     // try to use the non-standard query parameter `t` first,
     // continue exchange code for access token later if that fails
     $externalCode = $this->_input->filterSingle('code', XenForo_Input::STRING);
     if (empty($externalCode)) {
         return $this->responseError(new XenForo_Phrase('bdapi_consumer_error_occurred_while_connecting_with_x', array('provider' => $provider['name'])));
     }
     $externalToken = bdApiConsumer_Helper_Api::getAccessTokenFromCode($provider, $externalCode, $externalRedirectUri);
     if (empty($externalToken)) {
         return $this->responseError(new XenForo_Phrase('bdapi_consumer_error_occurred_while_connecting_with_x', array('provider' => $provider['name'])));
     }
     $externalVisitor = bdApiConsumer_Helper_Api::getVisitor($provider, $externalToken['access_token']);
     if (empty($externalVisitor)) {
         return $this->responseError(new XenForo_Phrase('bdapi_consumer_error_occurred_while_connecting_with_x', array('provider' => $provider['name'])));
     }
     if (empty($externalVisitor['user_email'])) {
         return $this->responseError(new XenForo_Phrase('bdapi_consumer_x_returned_unknown_error', array('provider' => $provider['name'])));
     }
     if (isset($externalVisitor['user_is_valid']) and isset($externalVisitor['user_is_verified'])) {
         if (empty($externalVisitor['user_is_valid']) or empty($externalVisitor['user_is_verified'])) {
             return $this->responseError(new XenForo_Phrase('bdapi_consumer_x_account_not_good_standing', array('provider' => $provider['name'])));
         }
     }
     $userModel = $this->_getUserModel();
     $userExternalModel = $this->_getUserExternalModel();
     $existingAssoc = $userExternalModel->getExternalAuthAssociation($userExternalModel->bdApiConsumer_getProviderCode($provider), $externalVisitor['user_id']);
     $autoRegistered = false;
     if (empty($existingAssoc)) {
         $existingAssoc = $this->_bdApiConsumer_autoRegister($provider, $externalToken, $externalVisitor);
         if (!empty($existingAssoc)) {
             $autoRegistered = true;
         }
     }
     if ($existingAssoc && $userModel->getUserById($existingAssoc['user_id'])) {
         $redirect = XenForo_Application::get('session')->get(self::SESSION_KEY_REDIRECT);
         XenForo_Application::get('session')->changeUserId($existingAssoc['user_id']);
         XenForo_Visitor::setup($existingAssoc['user_id']);
         XenForo_Application::get('session')->remove(self::SESSION_KEY_REDIRECT);
         if (empty($redirect)) {
             $redirect = $this->getDynamicRedirect(false, false);
         }
         if (!$autoRegistered) {
             $userExternalModel->bdApiConsumer_updateExternalAuthAssociation($provider, $externalVisitor['user_id'], $existingAssoc['user_id'], $externalVisitor + array('token' => $externalToken));
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
     }
     $existingUser = false;
     $emailMatch = false;
     if (XenForo_Visitor::getUserId()) {
         $existingUser = XenForo_Visitor::getInstance();
     } elseif ($assocUserId) {
         $existingUser = $userModel->getUserById($assocUserId);
     }
     if (!$existingUser) {
         $existingUser = $userModel->getUserByEmail($externalVisitor['user_email']);
         $emailMatch = true;
     }
     if ($existingUser) {
         // must associate: matching user
         return $this->responseView('bdApiConsumer_ViewPublic_Register_External', 'bdapi_consumer_register', array('associateOnly' => true, 'provider' => $provider, 'externalToken' => $externalToken, 'externalVisitor' => $externalVisitor, 'existingUser' => $existingUser, 'emailMatch' => $emailMatch, 'redirect' => $redirect));
     }
     if (bdApiConsumer_Option::get('bypassRegistrationActive')) {
         // do not check for registration active option
     } else {
         $this->_assertRegistrationActive();
     }
     $externalVisitor['username'] = bdApiConsumer_Helper_AutoRegister::suggestUserName($externalVisitor['username'], $userModel);
     return $this->responseView('bdApiConsumer_ViewPublic_Register_External', 'bdapi_consumer_register', array('provider' => $provider, 'externalToken' => $externalToken, 'externalVisitor' => $externalVisitor, 'redirect' => $redirect, 'customFields' => $this->_getFieldModel()->prepareUserFields($this->_getFieldModel()->getUserFields(array('registration' => true)), true), 'timeZones' => XenForo_Helper_TimeZone::getTimeZones(), 'tosUrl' => XenForo_Dependencies_Public::getTosUrl()), $this->_getRegistrationContainerParams());
 }
Пример #16
0
 protected function _getDateCriteria()
 {
     $hours = array();
     for ($i = 0; $i < 24; $i++) {
         $hh = str_pad($i, 2, '0', STR_PAD_LEFT);
         $hours[$hh] = $hh;
     }
     $minutes = array();
     for ($i = 0; $i < 60; $i += 5) {
         $mm = str_pad($i, 2, '0', STR_PAD_LEFT);
         $minutes[$mm] = $mm;
     }
     return array('timezones' => XenForo_Helper_TimeZone::getTimeZones(), 'hours' => $hours, 'minutes' => $minutes);
 }