PHP Classes

File: htdocs/modules/profile/register.php

Recommend this page to a friend!
  Classes of Michael Beck   Xoops 2.5   htdocs/modules/profile/register.php   Download  
File: htdocs/modules/profile/register.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Xoops 2.5
Modular content management publication system
Author: By
Last change: non-canonical order

In docblock var tags, use "type variableName" more consistently
Date: 6 years ago
Size: 16,252 bytes
 

Contents

Class file image Download
<?php /** * Extended User Profile * * You may not change or alter any portion of this comment or credits * of supporting developers from this source code or any supporting source code * which is considered copyrighted (c) material of the original comment or credit authors. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * @copyright (c) 2000-2016 XOOPS Project (www.xoops.org) * @license GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html) * @package profile * @since 2.3.0 * @author Taiwen Jiang <[email protected]> * @author Jan Pedersen * @author trabis <[email protected]> */ include __DIR__ . '/header.php'; if ($GLOBALS['xoopsUser']) { header('location: userinfo.php?uid= ' . $GLOBALS['xoopsUser']->getVar('uid')); exit(); } if (!empty($_GET['op']) && in_array($_GET['op'], array('actv', 'activate'))) { header('location: ./activate.php' . (empty($_SERVER['QUERY_STRING']) ? '' : '?' . $_SERVER['QUERY_STRING'])); exit(); } xoops_load('XoopsUserUtility'); $myts = MyTextSanitizer::getInstance(); /* @var XoopsConfigHandler $config_handler */ $config_handler = xoops_getHandler('config'); $GLOBALS['xoopsConfigUser'] = $config_handler->getConfigsByCat(XOOPS_CONF_USER); if (empty($GLOBALS['xoopsConfigUser']['allow_register'])) { redirect_header('index.php', 6, _US_NOREGISTER); } // get the key we need to access our 'op' in $_POST // if this key is not set, empty $_POST since this is a new registration and // no legitimate data would be there. $opkey = 'profile_opname'; if (isset($_SESSION[$opkey])) { $current_opname = $_SESSION[$opkey]; unset($_SESSION[$opkey]); if (!isset($_POST[$current_opname])) { $_POST = array(); } } else { $_POST = array(); $current_opname = 'op'; // does not matter, it isn't there } $op = !isset($_POST[$current_opname]) ? 'register' : $_POST[$current_opname]; $current_step = isset($_POST['step']) ? (int)$_POST['step'] : 0; // The newly introduced variable $_SESSION['profile_post'] is contaminated by $_POST, thus we use an old vaiable to hold uid parameter $uid = !empty($_SESSION['profile_register_uid']) ? (int)$_SESSION['profile_register_uid'] : 0; // First step is already secured by with the captcha Token so lets check the others if ($current_step > 0 && !$GLOBALS['xoopsSecurity']->check()) { redirect_header('user.php', 5, _PROFILE_MA_EXPIRED); } $criteria = new CriteriaCompo(); $criteria->setSort('step_order'); $regstep_handler = xoops_getModuleHandler('regstep'); if (!$steps = $regstep_handler->getAll($criteria, null, false, false)) { redirect_header(XOOPS_URL . '/', 6, _PROFILE_MA_NOSTEPSAVAILABLE); } foreach (array_keys($steps) as $key) { $steps[$key]['step_no'] = $key + 1; } $GLOBALS['xoopsOption']['template_main'] = 'profile_register.tpl'; include $GLOBALS['xoops']->path('header.php'); $GLOBALS['xoopsTpl']->assign('steps', $steps); $GLOBALS['xoopsTpl']->assign('lang_register_steps', _PROFILE_MA_REGISTER_STEPS); $xoBreadcrumbs[] = array( 'link' => XOOPS_URL . '/modules/' . $GLOBALS['xoopsModule']->getVar('dirname', 'n') . '/register.php', 'title' => _PROFILE_MA_REGISTER); if (isset($steps[$current_step])) { $xoBreadcrumbs[] = array('title' => $steps[$current_step]['step_name']); } /* @var XoopsMemberHandler $member_handler */ $member_handler = xoops_getHandler('member'); $profile_handler = xoops_getModuleHandler('profile'); $fields = $profile_handler->loadFields(); $userfields = $profile_handler->getUserVars(); if ($uid == 0) { // No user yet? Create one and set default values. $newuser = $member_handler->createUser(); $profile = $profile_handler->create(); if (count($fields) > 0) { foreach (array_keys($fields) as $i) { $fieldname = $fields[$i]->getVar('field_name'); if (in_array($fieldname, $userfields)) { $default = $fields[$i]->getVar('field_default'); if ($default === '' || $default === null) { continue; } $newuser->setVar($fieldname, $default); } } } } else { // We already have a user? Just load it! Security is handled by token so there is no fake uid here. $newuser = $member_handler->getUser($uid); $profile = $profile_handler->get($uid); } // Lets merge current $_POST with $_SESSION['profile_post'] so we can have access to info submited in previous steps // Get all fields that we can expect from a $_POST inlcuding our private '_message_' $fieldnames = array(); foreach (array_keys($fields) as $i) { $fieldnames[] = $fields[$i]->getVar('field_name'); } $fieldnames = array_merge($fieldnames, $userfields); $fieldnames[] = '_message_'; // Get $_POST that matches above criteria, we do not need to store step, tokens, etc $postfields = array(); foreach ($fieldnames as $fieldname) { if (isset($_POST[$fieldname])) { $postfields[$fieldname] = $_POST[$fieldname]; } } if ($current_step == 0) { // Reset any previous session for first step $_SESSION['profile_post'] = array(); $_SESSION['profile_register_uid'] = null; } else { // Merge current $_POST with $_SESSION['profile_post'] $_SESSION['profile_post'] = array_merge($_SESSION['profile_post'], $postfields); $_POST = array_merge($_SESSION['profile_post'], $_POST); } // Set vars from $_POST/$_SESSION['profile_post'] foreach (array_keys($fields) as $field) { if (!isset($_POST[$field])) { continue; } $value = $fields[$field]->getValueForSave($_POST[$field]); if (in_array($field, $userfields)) { $newuser->setVar($field, $value); } else { $profile->setVar($field, $value); } } $stop = ''; //Client side validation if (isset($_POST['step']) && isset($_SESSION['profile_required'])) { foreach ($_SESSION['profile_required'] as $name => $title) { if (!isset($_POST[$name]) || empty($_POST[$name])) { $stop .= sprintf(_FORM_ENTER, $title) . '<br>'; } } } // Check user data at first step if ($current_step == 1) { $uname = isset($_POST['uname']) ? $myts->stripSlashesGPC(trim($_POST['uname'])) : ''; $email = isset($_POST['email']) ? $myts->stripSlashesGPC(trim($_POST['email'])) : ''; $url = isset($_POST['url']) ? $myts->stripSlashesGPC(trim($_POST['url'])) : ''; $pass = isset($_POST['pass']) ? $myts->stripSlashesGPC(trim($_POST['pass'])) : ''; $vpass = isset($_POST['vpass']) ? $myts->stripSlashesGPC(trim($_POST['vpass'])) : ''; $agree_disc = (isset($_POST['agree_disc']) && (int)$_POST['agree_disc']) ? 1 : 0; if ($GLOBALS['xoopsConfigUser']['reg_dispdsclmr'] != 0 && $GLOBALS['xoopsConfigUser']['reg_disclaimer'] !== '') { if (empty($agree_disc)) { $stop .= _US_UNEEDAGREE . '<br>'; } } $newuser->setVar('uname', $uname); $newuser->setVar('email', $email); $newuser->setVar('pass', $pass ? password_hash($pass, PASSWORD_DEFAULT) : ''); $stop .= XoopsUserUtility::validate($newuser, $pass, $vpass); xoops_load('XoopsCaptcha'); $xoopsCaptcha = XoopsCaptcha::getInstance(); if (!$xoopsCaptcha->verify()) { $stop .= $xoopsCaptcha->getMessage(); } } // If the last step required SAVE or if we're on the last step then we will insert/update user on database if ($current_step > 0 && empty($stop) && (!empty($steps[$current_step - 1]['step_save']) || !isset($steps[$current_step]))) { if ($GLOBALS['xoopsModuleConfig']['profileCaptchaAfterStep1'] == 1 && $current_step > 1) { xoops_load('XoopsCaptcha'); $xoopsCaptcha2 = XoopsCaptcha::getInstance(); if (!$xoopsCaptcha2->verify()) { $stop .= $xoopsCaptcha2->getMessage(); } } if (empty($stop)) { $isNew = $newuser->isNew(); //Did created an user already? If not then let us set some extra info if ($isNew) { $uname = isset($_POST['uname']) ? $myts->stripSlashesGPC(trim($_POST['uname'])) : ''; $email = isset($_POST['email']) ? $myts->stripSlashesGPC(trim($_POST['email'])) : ''; $url = isset($_POST['url']) ? $myts->stripSlashesGPC(trim($_POST['url'])) : ''; $pass = isset($_POST['pass']) ? $myts->stripSlashesGPC(trim($_POST['pass'])) : ''; $newuser->setVar('uname', $uname); $newuser->setVar('email', $email); $newuser->setVar('pass', $pass ? password_hash($pass, PASSWORD_DEFAULT) : ''); $actkey = substr(md5(uniqid(mt_rand(), 1)), 0, 8); $newuser->setVar('actkey', $actkey, true); $newuser->setVar('user_regdate', time(), true); $newuser->setVar('uorder', $GLOBALS['xoopsConfig']['com_order'], true); $newuser->setVar('umode', $GLOBALS['xoopsConfig']['com_mode'], true); $newuser->setVar('theme', $GLOBALS['xoopsConfig']['theme_set'], true); $newuser->setVar('user_avatar', 'avatars/blank.gif', true); if ($GLOBALS['xoopsConfigUser']['activation_type'] == 1) { $newuser->setVar('level', 1, true); } else { $newuser->setVar('level', 0, true); } } // Insert/update user and check if we have succeded if (!$member_handler->insertUser($newuser)) { $stop .= _US_REGISTERNG . '<br>'; $stop .= implode('<br>', $newuser->getErrors()); } else { // User inserted! Now insert custom profile fields $profile->setVar('profile_id', $newuser->getVar('uid')); $profile_handler->insert($profile); // We are good! If this is 'was' a new user then we handle notification if ($isNew) { if ($GLOBALS['xoopsConfigUser']['new_user_notify'] == 1 && !empty($GLOBALS['xoopsConfigUser']['new_user_notify_group'])) { $xoopsMailer =& xoops_getMailer(); $xoopsMailer->reset(); $xoopsMailer->useMail(); $xoopsMailer->setToGroups($member_handler->getGroup($GLOBALS['xoopsConfigUser']['new_user_notify_group'])); $xoopsMailer->setFromEmail($GLOBALS['xoopsConfig']['adminmail']); $xoopsMailer->setFromName($GLOBALS['xoopsConfig']['sitename']); $xoopsMailer->setSubject(sprintf(_US_NEWUSERREGAT, $GLOBALS['xoopsConfig']['sitename'])); $xoopsMailer->setBody(sprintf(_US_HASJUSTREG, $newuser->getVar('uname'))); $xoopsMailer->send(true); } $message = ''; if (!$member_handler->addUserToGroup(XOOPS_GROUP_USERS, $newuser->getVar('uid'))) { $message = _PROFILE_MA_REGISTER_NOTGROUP . '<br>'; } else { if ($GLOBALS['xoopsConfigUser']['activation_type'] == 1) { XoopsUserUtility::sendWelcome($newuser); } else { if ($GLOBALS['xoopsConfigUser']['activation_type'] == 0) { $xoopsMailer =& xoops_getMailer(); $xoopsMailer->reset(); $xoopsMailer->useMail(); $xoopsMailer->setTemplate('register.tpl'); $xoopsMailer->assign('SITENAME', $GLOBALS['xoopsConfig']['sitename']); $xoopsMailer->assign('ADMINMAIL', $GLOBALS['xoopsConfig']['adminmail']); $xoopsMailer->assign('SITEURL', XOOPS_URL . '/'); $xoopsMailer->assign('X_UPASS', $_POST['vpass']); $xoopsMailer->setToUsers($newuser); $xoopsMailer->setFromEmail($GLOBALS['xoopsConfig']['adminmail']); $xoopsMailer->setFromName($GLOBALS['xoopsConfig']['sitename']); $xoopsMailer->setSubject(sprintf(_US_USERKEYFOR, $newuser->getVar('uname'))); if (!$xoopsMailer->send(true)) { $_SESSION['profile_post']['_message_'] = 0; } else { $_SESSION['profile_post']['_message_'] = 1; } } else { if ($GLOBALS['xoopsConfigUser']['activation_type'] == 2) { $xoopsMailer =& xoops_getMailer(); $xoopsMailer->reset(); $xoopsMailer->useMail(); $xoopsMailer->setTemplate('adminactivate.tpl'); $xoopsMailer->assign('USERNAME', $newuser->getVar('uname')); $xoopsMailer->assign('USEREMAIL', $newuser->getVar('email')); $xoopsMailer->assign('USERACTLINK', XOOPS_URL . '/modules/' . $GLOBALS['xoopsModule']->getVar('dirname', 'n') . '/activate.php?id=' . $newuser->getVar('uid') . '&actkey=' . $newuser->getVar('actkey', 'n')); $xoopsMailer->assign('SITENAME', $GLOBALS['xoopsConfig']['sitename']); $xoopsMailer->assign('ADMINMAIL', $GLOBALS['xoopsConfig']['adminmail']); $xoopsMailer->assign('SITEURL', XOOPS_URL . '/'); $xoopsMailer->setToGroups($member_handler->getGroup($GLOBALS['xoopsConfigUser']['activation_group'])); $xoopsMailer->setFromEmail($GLOBALS['xoopsConfig']['adminmail']); $xoopsMailer->setFromName($GLOBALS['xoopsConfig']['sitename']); $xoopsMailer->setSubject(sprintf(_US_USERKEYFOR, $newuser->getVar('uname'))); if (!$xoopsMailer->send()) { $_SESSION['profile_post']['_message_'] = 2; } else { $_SESSION['profile_post']['_message_'] = 3; } } } } } if ($message) { $GLOBALS['xoopsTpl']->append('confirm', $message); } $_SESSION['profile_register_uid'] = $newuser->getVar('uid'); } } } } if (!empty($stop) || isset($steps[$current_step])) { include_once __DIR__ . '/include/forms.php'; $current_step = empty($stop) ? $current_step : $current_step - 1; $reg_form = profile_getRegisterForm($newuser, $profile, $steps[$current_step]); $reg_form->assign($GLOBALS['xoopsTpl']); $GLOBALS['xoopsTpl']->assign('current_step', $current_step); $GLOBALS['xoopsTpl']->assign('stop', $stop); } else { // No errors and no more steps, finish $GLOBALS['xoopsTpl']->assign('finish', _PROFILE_MA_REGISTER_FINISH); $GLOBALS['xoopsTpl']->assign('current_step', -1); if ($GLOBALS['xoopsConfigUser']['activation_type'] == 1 && !empty($_SESSION['profile_post']['pass'])) { $GLOBALS['xoopsTpl']->assign('finish_login', _PROFILE_MA_FINISH_LOGIN); $GLOBALS['xoopsTpl']->assign('finish_uname', $newuser->getVar('uname')); $GLOBALS['xoopsTpl']->assign('finish_pass', htmlspecialchars($_SESSION['profile_post']['pass'])); } if (isset($_SESSION['profile_post']['_message_'])) { //todo, if user is activated by admin, then we should inform it along with error messages. _US_YOURREGMAILNG is not enough $messages = array(_US_YOURREGMAILNG, _US_YOURREGISTERED, _US_YOURREGMAILNG, _US_YOURREGISTERED2); $GLOBALS['xoopsTpl']->assign('finish_message', $messages[$_SESSION['profile_post']['_message_']]); } $_SESSION['profile_post'] = null; } include __DIR__ . '/footer.php';