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);
     }
 }
Example #2
0
 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;
     }
 }