예제 #1
0
파일: admin.php 프로젝트: Fabrik/website
 /**
  * Get the default user group
  *
  * @return  object
  */
 function getDefaultUsergroup()
 {
     $params = JFusionFactory::getParams($this->getJname());
     $usergroup_id = $params->get('usergroup');
     // We want to output the usergroup name
     $db = JFusionFactory::getDatabase($this->getJname());
     $query = 'SELECT title from xf_user_group WHERE user_group_id = ' . (int) $usergroup_id;
     $db->setQuery($query);
     return $db->loadResult();
 }
예제 #2
0
파일: user.php 프로젝트: Fabrik/website
 /**
  * Sync user session
  *
  * @param   bool  $keepalive  Keep session alive
  *
  * @return number
  */
 function syncSessions($keepalive = false)
 {
     $debug = defined('DEBUG_SYSTEM_PLUGIN') ? true : false;
     if ($debug) {
         JError::raiseNotice('500', 'XenForo syncSessions called');
     }
     $helper =& JFusionFactory::getHelper($this->getJname());
     $params =& JFusionFactory::getParams($this->getJname());
     $options = array();
     $options['action'] = 'core.login.site';
     $expiry = 60 * 60 * 24 * 365;
     $JUser =& JFactory::getUser();
     // Do we have a Joomla persistant session ?
     if (JPluginHelper::isEnabled('system', 'remember')) {
         jimport('joomla.utilities.utility');
         $hash = JApplicationHelper::getHash('JLOGIN_REMEMBER');
         $joomla_persistant_cookie = JRequest::getString($hash, '', 'cookie', JREQUEST_ALLOWRAW | JREQUEST_NOTRIM);
     } else {
         $joomla_persistant_cookie = '';
     }
     if (!$JUser->get('guest', true)) {
         // User logged into Joomla so check for active XenForo session
         if ($helper->persistantUser()) {
             // We have a persistant cookie for XenForo
             // Lets check that the user's match
             $xenforo_user = (object) $helper->xenUserFromSession();
             if (isset($xenforo_user->email) && isset($xenforo_user->username)) {
                 if ($xenforo_user->email == $JUser->email && $xenforo_user->username == $JUser->username) {
                     // Users match, so do nothing.  XenForo  auto login
                     // will sort out the sessions.
                 } else {
                     // TODO User mismatch, terminate both sessions
                     // for security reasons
                 }
             } else {
                 // Unknown XenForo user, do nothing
             }
         } else {
             // Do we have an active XenForo session ?
             if ($helper->sessionCookie()) {
                 // Is this a user session ?
                 $xenuser = $helper->xenUserFromSession();
                 if (empty($xenuser['user_id'])) {
                     // This is a Xenforo guest session
                     // Log user into XenForo
                     $userinfo = $helper->xenUserFromJUser($JUser);
                     if (isset($userinfo['username'])) {
                         $helper->createSession($userinfo['userid'], $expiry, $userinfo['remember_key']);
                     } else {
                         // No matching user, so do nothing
                     }
                 } else {
                     if (isset($xenuser->email) && isset($xenforo_user->username)) {
                         if ($xenuser->email == $JUser->email && $xenuser->username == $JUser->username) {
                             // Users match, so do nothing.
                             // We are already logged in
                         } else {
                             // TODO User mismatch, terminate both sessions
                             // for security reasons
                         }
                     } else {
                         // Unknown XenForo user, do nothing
                     }
                 }
             }
         }
     } else {
         // Not logged into Joomla
         if ($helper->persistantUser()) {
             // Login to Joomla persistant
             // First identify the xenforo user
             $xenuser = (object) $helper->xenUserFromSession();
             // Verify that this is a user session
             if (!empty($xenuser->email) && !empty($xenuser->username)) {
                 // We have a XenForo user session, try to find matching Joomla user
                 $JoomlaUser = JFusionFactory::getUser('joomla_int');
                 $userinfo = $JoomlaUser->getUser($xenuser);
                 if (!empty($userinfo)) {
                     // We have a valid Joomla user, so create user session.
                     global $JFusionActivePlugin;
                     $JFusionActivePlugin = $this->getJname();
                     $options['remember'] = true;
                     $status = $JoomlaUser->createSession($userinfo, $options);
                     if ($debug) {
                         JFusionFunction::raiseWarning('500', $status);
                     }
                     // No refresh needed
                     return 0;
                 } else {
                     // No Joomla user, so lets create one.
                     $status = array();
                     $userinfo = $this->getUser($xenuser);
                     JFusionJplugin::createUser($userinfo, $status, 'joomla_int');
                     // $jfusion = new JFusionJplugin();
                     // $result = $jfusion->createUser($userinfo, $status, 'joomla_int');
                     // Now we have a Joomla user, lets create the Joomla session
                     $JoomlaUser = JFusionFactory::getUser('joomla_int');
                     $userinfo = $JoomlaUser->getUser($xenuser);
                     if (!empty($userinfo)) {
                         header('Location: http://' . $_SERVER['HTTP_HOST']);
                         exit(0);
                         // We have a valid Joomla user, so create user session..
                         /*global $JFusionActivePlugin;
                         		 $JFusionActivePlugin = $this->getJname();
                         		$status = $JoomlaUser->createSession($userinfo, $options);
                         		if ($debug) {
                         		JFusionFunction::raiseWarning('500',$status);
                         		}*/
                     }
                     return 0;
                 }
             }
             // Just create the correct cookie and login
         } else {
             // Do we have an active XenForo session ?
             if ($helper->sessionCookie()) {
                 // Login to Joomla not persistant
                 $xenuser = (object) $helper->xenUserFromSession();
                 // Verify that this is a user session
                 if (!empty($xenuser->email) && !empty($xenuser->username)) {
                     // We have a XenForo user session, try to find matching Joomla user
                     $JoomlaUser = JFusionFactory::getUser('joomla_int');
                     $userinfo = $JoomlaUser->getUser($xenuser);
                     if (!empty($userinfo)) {
                         // We have a valid Joomla user, so create user session.
                         global $JFusionActivePlugin;
                         $JFusionActivePlugin = $this->getJname();
                         $status = $JoomlaUser->createSession($userinfo, $options);
                         if ($debug) {
                             JFusionFunction::raiseWarning('500', $status);
                         }
                         // No refresh needed
                         return 0;
                     } else {
                         // No Joomla user exists yet, so create one.
                         $status = array();
                         $userinfo = $this->getUser($xenuser);
                         JFusionJplugin::createUser($userinfo, $status, 'joomla_int');
                         // $jfusion = new JFusionJplugin();
                         // $result = $jfusion->createUser($userinfo, $status, 'joomla_int');
                         // Now we have a Joomla user, lets create the Joomla session
                         $JoomlaUser = JFusionFactory::getUser('joomla_int');
                         $userinfo = $JoomlaUser->getUser($xenuser);
                         if (!empty($userinfo)) {
                             header('Location: http://' . $_SERVER['HTTP_HOST']);
                             exit(0);
                             // We have a valid Joomla user, so create user session.
                             /*global $JFusionActivePlugin;
                             		 $JFusionActivePlugin = $this->getJname();
                             		$status = $JoomlaUser->createSession($userinfo, $options);
                             		if ($debug) {
                             		JFusionFunction::raiseWarning('500',$status);
                             		}*/
                         }
                         return 0;
                     }
                 }
             } else {
                 // Not logged into either app, do nothing
             }
         }
     }
     return 0;
 }
예제 #3
0
파일: helper.php 프로젝트: Fabrik/website
 /**
  * Creat XenForo User
  *
  * @param   object  $userinfo  User info
  *
  * @return void|string
  */
 public function createUser($userinfo)
 {
     $datestamp = time();
     $ip = ip2long($this->ipaddress);
     $params = JFusionFactory::getParams($this->getJname());
     // Update $userinfo with group premission info
     $this->mapUsergroup($params->get('usergroup'), $userinfo);
     /* Create basic user details */
     $user = new stdClass();
     $user->username = $this->filterUsername($userinfo->username);
     $user->email = $userinfo->email;
     $user->gender = '';
     $user->custom_title = '';
     // 1 is English, the default
     $user->language_id = 1;
     $user->style_id = 0;
     $user->timezone = 'Europe/London';
     $user->visible = 1;
     $user->user_group_id = $userinfo->user_group_id;
     $user->secondary_group_ids = '';
     // Research
     $user->display_style_group_id = $userinfo->display_style_group_id;
     // From xf_permission_combination, needs research
     $user->permission_combination_id = $userinfo->permission_combination_id;
     $user->message_count = 0;
     $user->conversations_unread = 0;
     $user->trophy_points = 0;
     $user->alerts_unread = 0;
     $user->avatar_date = 0;
     $user->avatar_width = 0;
     $user->avatar_height = 0;
     $user->gravatar = '';
     $user->user_state = 'valid';
     $user->is_moderator = 0;
     $user->is_admin = 0;
     $user->is_banned = intval($userinfo->block);
     $user->like_count = 0;
     // Insert user record
     if (!$this->db->insertObject('xf_user', $user, 'user_id')) {
         // Return the error
         $status['error'][] = JText::_('USER_CREATION_ERROR') . $this->db->stderr();
         return;
     } else {
         // Return the good news
         $status['debug'][] = JText::_('USER_CREATION');
         $userinfo->user_id = $user->user_id;
         // TODO $status['userinfo'] = $this->getUser($userinfo);
     }
     // Create authentication record
     if (!$this->db->insertObject('xf_user_authenticate', $this->createAuthObject($userinfo))) {
         // Return the error
         $status['error'][] = JText::_('USER_CREATION_ERROR') . $this->db->stderr();
         return;
     }
     // Insert primary user group
     $primaryGroup = new stdClass();
     $primaryGroup->user_id = $user->user_id;
     $primaryGroup->user_group_id = $userinfo->user_group_id;
     $primaryGroup->is_primary = 1;
     if (!$this->db->insertObject('xf_user_group_relation', $primaryGroup)) {
         // Return the error
         $status['error'][] = JText::_('USER_CREATION_ERROR') . $this->db->stderr();
         return;
     }
     // TODO insert additional user groups, if any
     $ipRecord = new stdClass();
     $ipRecord->user_id = $user->user_id;
     $ipRecord->content_type = 'user';
     $ipRecord->content_id = 1;
     $ipRecord->action = 'login';
     $ipRecord->ip = $ip;
     $ipRecord->log_date = $datestamp;
     if (!$this->db->insertObject('xf_ip', $ipRecord)) {
         // Return the error
         $status['error'][] = JText::_('USER_CREATION_ERROR') . $this->db->stderr();
         return;
     }
     // Get default user options
     $query = "SELECT option_value, default_value\n\t\t\t\tFROM xf_option\n\t\t\t\tWHERE option_id = 'registrationDefaults'";
     $this->db->setQuery($query);
     $userDefaultOption = $this->db->loadObject();
     $options = (object) unserialize(empty($userDefaultOption->option_value) ? $userDefaultOption->default_value : $userDefaultOption->option_value);
     $userOptions = new stdClass();
     $userOptions->user_id = $user->user_id;
     $userOptions->show_dob_year = $options->show_dob_year;
     $userOptions->show_dob_date = $options->show_dob_date;
     $userOptions->content_show_signature = $options->content_show_signature;
     $userOptions->receive_admin_email = $options->receive_admin_email;
     $userOptions->email_on_conversation = $options->email_on_conversation;
     $userOptions->default_watch_state = $options->default_watch_state;
     $userOptions->is_discouraged = 0;
     $userOptions->alert_optout = 0;
     $userOptions->enable_rte = 1;
     if (!$this->db->insertObject('xf_user_option', $userOptions)) {
         // Return the error
         $status['error'][] = JText::_('USER_CREATION_ERROR') . $this->db->stderr();
         return;
     }
     $privacyRecord = new stdClass();
     $privacyRecord->user_id = $user->user_id;
     $privacyRecord->allow_view_profile = 'everyone';
     $privacyRecord->allow_post_profile = 'everyone';
     $privacyRecord->allow_send_personal_conversation = 'everyone';
     $privacyRecord->allow_view_identities = 'everyone';
     $privacyRecord->allow_receive_news_feed = 'everyone';
     if (!$this->db->insertObject('xf_user_privacy', $privacyRecord)) {
         // Return the error
         $status['error'][] = JText::_('USER_CREATION_ERROR') . $this->db->stderr();
         return;
     }
     $this->createuserProfile($user, $status);
     $confirmation_key = $this->generateRandomString(16);
     $confirmRecord = new stdClass();
     $confirmRecord->user_id = $user->user_id;
     $confirmRecord->confirmation_type = 'email';
     $confirmRecord->confirmation_key = $this->generateRandomString(16);
     $confirmRecord->confirmation_date = $datestamp;
     if (!$this->db->insertObject('xf_user_confirmation', $confirmRecord)) {
         // Return the error
         $status['error'][] = JText::_('USER_CREATION_ERROR') . $this->db->stderr();
         return;
     }
     return $status;
 }