function __construct() { /* Prevent guests if the admin hasn't enabled public profiles. */ if (!parent::getOption('profile-public-enable')) { protect('*'); } /* If the admin requires users to update their password. */ if (!empty($_SESSION['jigowatt']['forcePwUpdate'])) { $msg = "<div class='alert alert-warning'>" . _('<strong>Alert</strong>: The administrator has requested all users to update their passwords.') . "</div>"; } // Save the username $this->username = !empty($_SESSION['jigowatt']['username']) ? $_SESSION['jigowatt']['username'] : _('Guest'); $this->use_emails = parent::getOption('email-as-username-enable'); $this->username_type = $this->use_emails ? 'email' : 'username'; /* Check if the user is a guest to this profile. */ $this->determineGuest(); // Upload avatar if (!empty($_FILES['uploadAvatar'])) { $k = getimagesize($_FILES['uploadAvatar']['tmp_name']); if (empty($k)) { $this->error = sprintf('<div class="alert alert-warning">%s</div>', _('Sorry, that file is not accepted.')); } else { $uploaddir = dirname(dirname(__FILE__)) . '/assets/uploads/avatar/'; $uploadfile = $uploaddir . md5($_SESSION['jigowatt']['user_id'] . $_SESSION['jigowatt']['email']) . '.' . pathinfo($_FILES['uploadAvatar']['name'], PATHINFO_EXTENSION); if (move_uploaded_file($_FILES['uploadAvatar']['tmp_name'], $uploadfile)) { $this->error = sprintf('<div class="alert alert-success">%s</div>', _('Avatar change success!')); $_SESSION['jigowatt']['gravatar'] = parent::get_gravatar($_SESSION['jigowatt']['email'], true, 26); } else { $this->error = sprintf('<div class="alert alert-warning">%s</div>', _('Sorry, that file is not accepted.')); } } } if (!$this->guest && !empty($_POST)) { $this->retrieveFields(); foreach ($_POST as $field => $value) { $this->settings[$field] = parent::secure($value); } // Validate fields $this->validate(); // Process form if (empty($this->error)) { $this->process(); } } $this->retrieveFields(); if (!$this->guest && isset($_GET['key']) && strlen($_GET['key']) == 32) { $this->key = parent::secure($_GET['key']); $this->updateEmailorPw(); $this->retrieveFields(); } if (!empty($this->error) || !empty($msg)) { parent::displayMessage(!empty($this->error) ? $this->error : (!empty($msg) ? $msg : ''), false); } }
private function register() { if (empty($this->error)) { /* See if the admin requires new users to activate */ $requireActivate = parent::getOption('user-activation-enable'); /* Log user in when they register */ $_SESSION['jigowatt']['username'] = $this->settings[$this->username_type]; /* Apply default user_level */ $_SESSION['jigowatt']['user_level'] = unserialize(parent::getOption('default-level')); if ($requireActivate) { $_SESSION['jigowatt']['activate'] = 1; } $_SESSION['jigowatt']['gravatar'] = parent::get_gravatar($this->settings['email'], true, 26); /* Create their account */ $sql = "INSERT INTO accounts (user_level, name, email, username, password)\n\t\t\t\t\t\tVALUES (:user_level, :name, :email, :{$this->username_type}, :password);"; $params = array(':user_level' => parent::getOption('default-level'), ':name' => $this->settings['name'], ':email' => $this->settings['email'], ':username' => $this->settings['username'], ':password' => parent::hashPassword($this->settings['password'])); if ($this->use_emails) { unset($params[':username']); } parent::query($sql, $params); $user_id = parent::$dbh->lastInsertId(); $_SESSION['jigowatt']['user_id'] = $user_id; /* Social integration. */ if (!empty($_SESSION['jigowatt']['facebookMisc'])) { $link = 'facebook'; $id = $_SESSION['jigowatt']['facebookMisc']['id']; } if (!empty($_SESSION['jigowatt']['openIDMisc'])) { $link = $_SESSION['jigowatt']['openIDMisc']['type']; $id = $_SESSION['jigowatt']['openIDMisc'][$link]; } if (!empty($_SESSION['jigowatt']['twitterMisc'])) { $link = 'twitter'; $id = $_SESSION['jigowatt']['twitterMisc']['id']; } if (!empty($link)) { $params = array(':user_id' => $user_id, ':id' => $id); parent::query("INSERT INTO `login_integration` (`user_id`, `{$link}`) VALUES (:user_id, :id);", $params); } // Update profile fields foreach ($this->settings as $field => $value) { if (strstr($field, 'p-')) { $field = str_replace('p-', '', $field); parent::updateOption($field, $value, true, $user_id); } } /* Create the activation key */ if ($requireActivate) { $key = md5(uniqid(mt_rand(), true)); $sql = sprintf("INSERT INTO `login_confirm` (`username`, `key`, `email`, `type`)\n\t\t\t\t\t\t\t\tVALUES ('%s', '%s', '%s', '%s');", $this->settings[$this->username_type], $key, $this->settings['email'], 'new_user'); parent::query($sql); } $disable_welcome_email = parent::getOption('email-welcome-disable'); if (!$disable_welcome_email) { /* Send welcome email to new user. */ $msg = parent::getOption('email-welcome-msg'); $subj = parent::getOption('email-welcome-subj'); $shortcodes = array('site_address' => SITE_PATH, 'full_name' => $this->settings['name'], 'username' => $this->settings[$this->username_type], 'email' => $this->settings['email'], 'activate' => $requireActivate ? SITE_PATH . "activate.php?key={$key}" : ''); if (!parent::sendEmail($this->settings['email'], $subj, $msg, $shortcodes)) { $this->error = _('ERROR. Mail not sent'); } } /* Admin notification of new user. */ $notifyNewUsers = parent::getOption('notify-new-user-enable'); if (!empty($notifyNewUsers)) { $msg = parent::getOption('email-new-user-msg'); $subj = parent::getOption('email-new-user-subj'); unset($shortcodes['activate']); $userGroup = parent::getOption('notify-new-users'); if (!empty($userGroup)) { $userGroup = unserialize($userGroup); /* Variable to store all the email addresses of each chosen group. */ $emails = array(); foreach ($userGroup as $level_id) { /* Grab all users within the user group. */ $params = array(':level_id' => '%:"' . $level_id . '";%'); $sql = "SELECT * FROM `accounts` WHERE `user_level` LIKE :level_id"; $stmt = parent::query($sql, $params); /* Send email to each user in group. */ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $emails[] = $row['email']; } } /* Remove duplicates for users with multiple user groups. */ $emails = array_unique($emails); if (!parent::sendEmail($emails, $subj, $msg, $shortcodes, true)) { $this->error = _('ERROR. Mail not sent'); } } } unset($_SESSION['jigowatt']['referer'], $_SESSION['jigowatt']['token'], $_SESSION['jigowatt']['facebookMisc'], $_SESSION['jigowatt']['twitterMisc'], $_SESSION['jigowatt']['openIDMisc']); /* After registering, redirect to the page the admin has set in Settings > General > Redirect Options. */ header('Location: ' . parent::getOption('new-user-redirect')); exit; } }