$msg = new PCPIN_Message($session);
_pcpin_loadClass('pcpintpl');
$tpl = new PcpinTpl();
$tpl->setBasedir('./tpl');
$tpl->readTemplatesFromFile('./dummy.tpl');
if ($activation_code != '') {
    if (isset($activate_email)) {
        // New email address activation
        if ($user->_db_getList('email_new != ', 'email_new_activation_code = ' . md5($activation_code), 1)) {
            // Requested email address found and activation code is OK
            $user->_db_setObject($user->_db_list[0]);
            $user->email = $user->email_new;
            $user->email_new = '';
            $user->email_new_date = '';
            $user->email_new_activation_code = '';
            $user->_db_updateObj($user->id);
            $message = $l->g('new_email_activated');
            if ($session->_db_getList('_s_room_id', '_s_user_id = ' . $user->id, 1)) {
                // User is online
                $msg->addMessage(1010, 'n', 0, '', $session->_db_list[0]['_s_room_id'], 0, $user->id);
            }
        } else {
            // Invalid activation code
            $message = $l->g('invalid_activation_code');
        }
    } elseif (isset($activate_account)) {
        // New account activation
        if ($user->_db_getList('id,language_id', 'activated = n', 'activation_code = ' . md5($activation_code), 1)) {
            // Load language
            if ($l->id != $user->_db_list[0]['language_id']) {
                $old_language_id = $l->id;
 /**
  * Log the session out and deactivate it
  * @param   boolean   $skip_msg   If TRUE, then system messages 105 and 115 will be NOT inserted
  */
 function _s_logOut($skip_msg = false)
 {
     if ($this->_s_id != '') {
         if (!empty($this->_s_user_id)) {
             _pcpin_loadClass('message');
             $msg = new PCPIN_Message($this);
             if (!empty($this->_s_room_id)) {
                 // Session owner was in a room
                 _pcpin_loadClass('room');
                 $room = new PCPIN_Room($this);
                 $room->putUser($this->_s_user_id, 0, $skip_msg);
             }
             // Delete invitations
             _pcpin_loadClass('invitation');
             $invitation = new PCPIN_Invitation($this);
             $invitation->deleteUserInvitations($this->_s_user_id);
             // Delete temporary data
             _pcpin_loadClass('tmpdata');
             $tmpdata = new PCPIN_TmpData($this);
             $tmpdata->deleteUserRecords($this->_s_user_id);
             // Update session owner stats
             _pcpin_loadClass('user');
             $user = new PCPIN_User($this);
             if ($user->_db_loadObj($this->_s_user_id)) {
                 if ($user->is_guest == 'y') {
                     // User was a guest. Delete record.
                     $user->deleteUser($this->_s_user_id);
                 } else {
                     // Update registered user stats
                     $user->time_online = $user->calculateOnlineTime($user->id);
                     $user->last_message_id = $user->last_message_id < $this->_s_last_message_id ? $this->_s_last_message_id : $user->last_message_id;
                     $user->_db_updateObj($user->id);
                 }
             }
             if (true !== $skip_msg) {
                 $msg->addMessage(105, 'n', 0, '', 0, 0, $this->_s_user_id);
             }
         }
         // Delete session from database
         $this->_db_deleteRow($this->_s_id, '_s_id');
     }
 }
     $xmlwriter->setHeaderMessage($l->g('email_invalid'));
 } else {
     if (!$current_user->checkEmailUnique($profile_user_id, $email)) {
         // Email address already taken
         $xmlwriter->setHeaderStatus(1);
         $xmlwriter->setHeaderMessage($l->g('email_already_taken'));
     } else {
         // Email address is free
         if ($current_user->is_admin !== 'y' && !empty($session->_conf_all['activate_new_emails'])) {
             // Email address needs to be activated
             $activation_required = 1;
             $email_new_activation_code = PCPIN_Common::randomString(18, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');
             $profile_user->email_new = $email;
             $profile_user->email_new_date = date('Y-m-d H:i:s');
             $profile_user->email_new_activation_code = md5($email_new_activation_code);
             $profile_user->_db_updateObj($profile_user->id);
             $email_body = $l->g('email_email_address_activation');
             $email_body = str_replace('[HOURS]', $session->_conf_all['new_email_activation_timeout'], $email_body);
             $email_body = str_replace('[SENDER]', $session->_conf_all['chat_email_sender_name'], $email_body);
             $email_body = str_replace('[ACTIVATION_URL]', str_replace(' ', '%20', $session->_conf_all['base_url']) . '?activate_email&activation_code=' . urlencode($email_new_activation_code), $email_body);
             $email_body = str_replace('[CHAT_NAME]', $session->_conf_all['chat_name'], $email_body);
             PCPIN_Email::send('"' . $session->_conf_all['chat_email_sender_name'] . '"' . ' <' . $session->_conf_all['chat_email_sender_address'] . '>', $email, $l->g('email_address_activation'), null, null, $email_body);
             $xmlwriter->setHeaderStatus(0);
             $xmlwriter->setHeaderMessage(str_replace('[EMAIL]', $email, $l->g('email_address_activation_sent')));
         } else {
             // Save new email address
             $activation_required = 0;
             $profile_user->email = $email;
             $profile_user->email_new = '';
             $profile_user->email_new_date = '';
             $profile_user->email_new_activation_code = '';
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
if (empty($set_language_id) || !is_scalar($set_language_id)) {
    $set_language_id = $session->_s_language_id;
}
if (empty($profile_user_id) || $profile_user_id != $current_user->id && $current_user->is_admin !== 'y') {
    $profile_user_id = $current_user->id;
}
if ($profile_user_id != $current_user->id) {
    $profile_user = new PCPIN_User($session);
    $profile_user->_db_loadObj($profile_user_id);
} else {
    $profile_user =& $current_user;
}
if (is_object($session) && !empty($profile_user->id)) {
    $xmlwriter->setHeaderMessage('OK');
    $xmlwriter->setHeaderStatus(0);
    if (!empty($session->_conf_all['allow_language_selection'])) {
        _pcpin_loadClass('language');
        $profile_language = new PCPIN_Language($session);
        if ($set_language_id == $profile_language->checkLanguage($set_language_id)) {
            $profile_user->language_id = $set_language_id;
            $profile_user->_db_updateObj($profile_user->id, 'id');
            if ($profile_user_id == $session->_s_user_id) {
                $session->_s_updateSession($session->_s_id, true, true, $set_language_id);
            }
        }
    }
}