<?php
/**
 * All functions for Password Expiry & Reset Password generator are going through here.
 * Form and process for resetting password and sending to user
 * 
 * @copyright	http://www.impresscms.org/ The TacmicCMS Project
 * @license		http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU General Public License (GPL)
 * @package		Member
 * @subpackage	Users
 * @since		ImpressCMS 1.1
 * @author		Vaughan Montgomery <vaughan@impresscms.org>
 * @author		The TacmicCMS Project
 * @version		SVN: $Id: resetpass.php 11946 2012-08-23 12:45:17Z m0nty $
 */

$xoopsOption['pagetype'] = 'user';
include 'mainfile.php';

/* the following are passed through $_POST/$_GET
 *	'c_password' => 'str',
 *	'password' => 'str',
 *	'password2' => 'str',
 */
$filter_get = array(
	'email' => array('email', 'options' => array(0, 1)),
);
$filter_post = array(
	'email' => array('email', 'options' => array(0, 1)),
);
if (!empty($_GET)) {
	// in places where strict mode is not used for checkVarArray, make sure filter_ vars are not overwritten
	if (isset($_GET['filter_post'])) unset ($_GET['filter_post']);
    $clean_GET = icms_core_DataFilter::checkVarArray($_GET, $filter_get, FALSE);
    extract($clean_GET);
}
if (!empty($_POST)) {
    $clean_POST = icms_core_DataFilter::checkVarArray($_POST, $filter_post, FALSE);
    extract($clean_POST);
}

global $icmsConfigUser;
if ($password == '' || $password2 == '') {
	redirect_header('user.php?op=resetpass', 3, sprintf(_US_SORRYMUSTENTERPASS, icms::$user->getVar('uname')), FALSE);
}
if ((isset($password)) && ($password !== $password2)) {
	redirect_header('user.php?op=resetpass', 3, sprintf(_US_PASSNOTSAME, ''), FALSE);
} elseif (($password !== '') && (strlen($password) < $icmsConfigUser['minpass'])) {
	redirect_header('user.php?op=resetpass', 2, sprintf(_US_PWDTOOSHORT, $icmsConfigUser['minpass']), FALSE);
}

if (!icms::$user) {
	redirect_header('user.php', 2, sprintf(_US_SORRYNOTFOUND, 3, ''), FALSE);
} else {
	$icmspass = new icms_core_Password();

	if (!$icmspass->verifyPass($c_password, icms::$user->getVar('login_name'))) {
		redirect_header('user.php?op=resetpass', 2, _US_SORRYINCORRECTPASS);
	}

	$pass = $icmspass->encryptPass($password);
	$xoopsMailer = new icms_messaging_Handler();
	$xoopsMailer->useMail();
	$xoopsMailer->setTemplate('resetpass2.tpl');
	$xoopsMailer->assign('SITENAME', $icmsConfig['sitename']);
	$xoopsMailer->assign('ADMINMAIL', $icmsConfig['adminmail']);
	$xoopsMailer->assign('SITEURL', ICMS_URL.'/');
	$xoopsMailer->assign('IP', $_SERVER['REMOTE_ADDR']);
	$xoopsMailer->setToUsers(icms::$user->getVar('uid'));
	$xoopsMailer->setFromEmail($icmsConfig['adminmail']);
	$xoopsMailer->setFromName($icmsConfig['sitename']);
	$xoopsMailer->setSubject(sprintf(_US_PWDRESET, ICMS_URL));
	if (!$xoopsMailer->send()) {
		echo $xoopsMailer->getErrors();
	}

	$sql = sprintf("UPDATE %s SET pass = '%s', pass_expired = '%u' WHERE uid = '%u'",
					icms::$xoopsDB->prefix('users'),
					$pass,
					0,
					(int) icms::$user->getVar('uid')
	);
	if (!icms::$xoopsDB->query($sql)) {
		include 'header.php';
		echo _US_RESETPWDNG;
		include 'footer.php';
		exit();
	}
	unset($pass);
	redirect_header('user.php', 3, sprintf(_US_PWDRESET, icms::$user->getVar('uname')), FALSE);
}
