Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 Re: Тестирование версий » NGCMS версии 0.9.3 + SVN -> 0.9.4 » 2013-07-10 00:45:12

Пропала у меня форма ввода, из дополнительного осталось только "Установить другое время?". Плагин tags включён, а теги теперь вводить некуда.:(

#2 Re: Тестирование версий » NGCMS версии 0.9.3 + SVN -> 0.9.4 » 2013-07-08 12:22:12

Всегда прописывал теги для перелинковки посредством плагина similar (при публикации: "Дополнительно" - Список тегов: указывается через запятую), после обновления до последних ночных куда прописывать теперь?

#3 Re: Страницы плагинов » [ГОТОВЫЙ ПЛАГИН] Akismet Antispam » 2012-09-21 07:40:36

Плагин очень нужный, но... Отработал несколько дней и появилось это: "Плагин antispam запретил добавление комментария по причине: Akismet key is invalid! " По новой заказывал API-ключ на старые данные, пришел тот же. Устанавливал ключ с плагином на несколько сайтов, может причина в этом. Что делать?

#4 Re: "У меня не работает..." » Плагин social, ссылка на Твиттер » 2012-09-17 12:22:52

http://twitter.com/share?text=%title%+/+%content%&url=%link%

"|" нужно заменить на слэш "/"

Так работает, может кому пригодится.

#5 "У меня не работает..." » Плагин social, ссылка на Твиттер » 2012-09-17 07:41:33

Burelom
Ответов: 1

Ребята, не работает ссылка на Твиттер в плагине social. Вид ссылки: http://twitter.com/share?text=%title%+|+%content%&url=%link% Раньше работала, как правильно сейчас прописать?

#7 Re: "А как сделать..." » Отредактировать тэг [hide][/hide] » 2012-04-03 01:35:25

Ребята, помогите кто-нибудь.

Как сделать, чтобы тег [hide][/hide] на автомате вставлялся на все загруженные файлы.
Здесь видимо:

    function userblocks($content){
        global $config, $lang, $userROW;
        if (!$config['blocks_for_reg']) return $content;
        return preg_replace("#\[hide\]\s*(.*?)\s*\[/hide\]#is", is_array($userROW)?"$1":str_replace("{text}", $lang['not_logged'], $lang['not_logged_html']), $content);
    }

#8 Re: Страницы плагинов » SMF :: Последние сообщения с форума SMF » 2012-01-27 22:03:58

ROZARD, жаль. Хороший плагин, все работает, кроме этой функции (версия 0.9.3 - Fix01)

#9 Re: Страницы плагинов » SMF :: Последние сообщения с форума SMF » 2012-01-27 20:49:02

Не работает переключение "Морда" - "Везде", нужно только на морде, показывает везде.

#10 Re: Релизы версий » Версия 0.9.3 Release » 2012-01-24 23:39:51

Ребята, а как с безопасностью в версии 0.9.2? Вот, 0.9.3 - Fix01 обновил, но несколько сайтов работают на 9.2. Код местами изменен, боюсь больших проблем при обновлении, да и не помню уже всех изменений. Пользователям на тех сайтах разрешено только комментирование и регистрация.

#11 Re: "У меня не работает..." » В админке пропал раздел "Редактировать" » 2012-01-24 22:03:51

Проблему решил перезалив папку engine с релиза 0.9.3 - Fix01, заменил все файлы, кроме измененных (прикручена капча и тина), все заработало. Видимо что-то начудил при работе с SVN.

#12 Re: "У меня не работает..." » В админке пропал раздел "Редактировать" » 2012-01-24 21:00:02

Виталий, я несколько раз проверил. Заменяю news.php на старый - работает, новый - не работает. Скачал даже по новой, мало ли что. Прикручен редактор Тина, может в этом дело. Я не программист, опасно оставлять старую версию файла?

#13 Re: "У меня не работает..." » В админке пропал раздел "Редактировать" » 2012-01-24 18:31:23

Ладно, поставлю вопрос иначе:

Что именно было изменено в файле news.php, самое главное, насколько эти изменения важны в плане безопасности? Редактировать новости нужно, но и дырявым движок оставлять тоже не вариант. При замене news.php из патча на старый все работает.

#14 "У меня не работает..." » В админке пропал раздел "Редактировать" » 2012-01-24 10:43:51

Burelom
Ответов: 10

Версия SVN880, после заливки файлов Fix01, пропал раздел админки "Редактировать". Ссылка такого вида /engine/admin.php?mod=news, редактирование не открывается, просто пусто. До обновления все работало отлично.

#15 Re: "У меня не работает..." » Проблема с css » 2011-12-28 19:20:36

Благодарю, кто откликнулся. Дело было в файле .htaccess шаблона, сразу просто не сообразил на него взглянуть.

#16 Re: "У меня не работает..." » Проблема с css » 2011-12-28 17:48:28

Не в картинках дело, css просто не подключается. Ведь все верно прописано, при переносе обратно в папку работает. Забил бы на это, но интересно просто, в чем загвозка может быть.

#17 "У меня не работает..." » Проблема с css » 2011-12-28 17:18:16

Burelom
Ответов: 5

Пару часов ломаю голову, не могу понять в чем дело.
    Вынес таблицу стилей из каталога в корень шаблона.

    Пути:

    Был .../templates/foto/style/styles.css, подключение <link href="{tpl_url}/style/styles.css" rel="stylesheet" type="text/css" media="screen" /> - все работает

    Сейчас /templates/foto/styles.css, подключение <link href="{tpl_url}/styles.css" rel="stylesheet" type="text/css" media="screen" /> -нихрена не работает

    Ребята, подскажите в чем может быть дело?

#18 "А как сделать..." » Приложенные файлы » 2011-12-13 20:23:19

Burelom
Ответов: 2

Появилась необходимость на один из сайтов добавить несколько сотен инструкций. Для этого решил использовать функцию "Приложенные файла" и загружать мануалы на сервер в rar архивах. К одной статье будет прикрепляться 50-60 файлов для скачивания. Ссылки на скачивания будут заключены в теги [hide][/hide], что в какой-то мере  должно избавить от беспорядочного скачивания файлов. Беспокоит нагрузка на сервер, с этим и сейчас напряг, не вызовет ли подобная схема значительное увеличение нагрузки, насколько значительным это увеличение может быть.

#19 Re: Запросы плагинов » Интеграция с PunBB 1.3 » 2011-11-21 23:04:47

Отлично, сразу всё заработало!

ROZARD, при включении плагина пропадает твой хак против спама, при выключении появляется снова. Можно их подружить как-нибудь?

#20 Re: Запросы плагинов » Интеграция с PunBB 1.3 » 2011-11-21 21:52:44

Ага, плагин у меня не тот был, видимо в этом дело. Подскажите кто-нибудь, как лучше базу форума ставить. Всё в общую под префиксом или внешней, насколько понимаю форум работает под utf-8, не будет багов с NG, если одной поставить?

#21 Re: Страницы плагинов » auth_fluxbb :: Интеграция с форумом FluxBB 1.4 » 2011-11-21 11:02:50

Пробовал с auth_punbb под PunBB 1.4 (0.9.3) ошибка: http://ngcms.ru/forum/viewtopic.php?pid=25254#p25254, поставил fluxbb-1.4.7 (сборка от Visman) с плагином auth_fluxbb из первого поста. Всё работает на отлично, но... не пускает на сайт под логином админа, на форуме всё норм. При регистрации новых пользователей всё путём, как и описано - двухсторонняя интеграция. Может кто подскажет в чём может быть дело, как-то не удобно постоянно лезть в конфиг, чтоб зайти на свой сайт))

#22 Re: Запросы плагинов » Интеграция с PunBB 1.3 » 2011-11-21 07:50:48

lmao пишет:

Оох, классно, приятно удивлен.. Надо было новую версию NG CMS прикрутить к PunBB 1.4 (плагин в теме для 1.3), был уверен, что не заработает, но решил таки попробывать, и не зря - с новыми версиями все работает! smile

Счастливчик) У меня при включении в настройках авторизации phpbb выскакивает /home/virtwww/w_***ru_8b63f0c2/http/engine/plugins/auth_phpbb/auth_phpbb.php on line 54, на сайт зашёл только после смены настроек конфига.

#23 Re: Запросы на платную разработку плагинов » Прикрутите капчу, кто в теме. 300 р. » 2011-11-21 00:48:33

Отбой) Дело было не в бобине)) У хостера неполадки с почтовым сервером, вопрос решили, письма стали доходить. Отрубили сервер после установки хака, зараза) столько времени потерял и вам голову заморочил, пойду убьюсь о стену и хостера за одно))) Спасибо!

#24 Re: Запросы на платную разработку плагинов » Прикрутите капчу, кто в теме. 300 р. » 2011-11-21 00:41:47

Как нет?

array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' =>  '','type' => 'checkbox'));

и

if(isset($values['who_bot']) && !empty($values['who_bot']))
        {
            // Дополнительная защита от ботов
             $msg = 'Ботам регистрация запрещена';
             return 0;
        }

Всё на местах, этот вариант сейчас на сайте (родная почта прописана вместо звёздочек)

#25 Re: Запросы на платную разработку плагинов » Прикрутите капчу, кто в теме. 300 р. » 2011-11-21 00:08:04

ROZARD, прикреплённый auth_basic.php (личка) хорошо работает без хака, с хаком пепец. Плагин взял со старого сайта (0.9.2), изменения в нём сделаны по советам из соседней ветки. Поэтому и подумал, что в 0.9.3 что-то поменяли. Понимаю, что у других работает, не все же сидят на 1 gb.

<?php

// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');


//
// Прописываем свой модуль
//
global $AUTH_METHOD;
global $AUTH_CAPABILITIES;
global $config;

class auth_basic {

	// Осуществить вход
	// $username	= логин
	// $password	= пароль
	// $auto_scan	= если 1, то функция сама должна найти нужные параметры среди POST'ов
	function login($auto_scan = 1, $username = '', $password = '') {
		global $mysql;

	        if ($auto_scan) {
			$username = $_REQUEST['username'];
			$password = $_REQUEST['password'];
		}
		$password = EncodePassword($password);

		$sql = "select * from ".uprefix."_users where name = ".db_squote($username)." and pass=".db_squote($password);
		$row = $mysql->record($sql);

		// Проверяем нужна ли активация
		if ($row['activation']) {
			return 'ERR:NEED.ACTIVATE';
		}

		if ($row) { return $row; }
		return '';
	}

	//
	// Сохранить в БД информацию о том, что пользователь авторизовался
	// $dbrow	= строка из нашей таблицы пользователей
	function save_auth($dbrow) {
		global $config, $mysql, $ip;

        // создаём random cookie
        $auth_cookie = md5((isset($config['crypto_salt'])?$config['crypto_salt']:'').uniqid(rand(),1));

		$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip).", authcookie = ".db_squote($auth_cookie)." where id=".db_squote($dbrow['id']);
		$mysql->query($query);

		// Вставить юзеру куку
		@setcookie('zz_auth', $auth_cookie, ($config['remember']?(time() + 3600 * 24 * 365):0), '/');

		return 1;
	}

	//
	// Проверить авторизацию пользователя
	function check_auth() {
	 	global $config, $mysql, $ip;

	 	$auth_cookie = isset($_COOKIE['zz_auth'])?$_COOKIE['zz_auth']:'';
	 	if (!$auth_cookie) { return ''; }

	 	$query = "select * from ".uprefix."_users where authcookie = ".db_squote($auth_cookie)." limit 1";
	 	$row = $mysql->record($query);

		// Check for "IPLOCK" protection
		if (pluginGetVariable('auth_basic', 'iplock') && ($ip != $row['ip'])) {
			return '';
		}

		// Auth done
	 	if ($row['name']) {
			// Check if we need to update last visit field
	 		if ((pluginGetVariable('auth_basic', 'lastupdate') > 0) && ((time() - $row['last']) > pluginGetVariable('auth_basic', 'lastupdate'))) {
	 			$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip)." where id=".db_squote($row['id']);
	 			$mysql->query($query);
	 		}

	 		return $row;
	 	}
	 	return '';
	}

	//
	// Отменить авторизацию
	function drop_auth() {
	 	global $config, $mysql, $userROW;

	 	$auth_cookie = $_COOKIE['zz_auth'];
	 	if (!$auth_cookie) { return; }

		$mysql->query("update ".uprefix."_users set authcookie = '' where id=".db_squote($userROW['id']));
		@setcookie('zz_auth', '', time() - 3600 * 24 * 365, '/');
	 	return;
	}

	//
	// Вернуть массив параметров, необходимых при регистрации
	function get_reg_params() {
		global $config, $lang;
		$params = array();
		LoadPluginLang('auth_basic', 'auth','','auth');
		array_push($params, array('name' => 'login', title => $lang['auth_login'], 'descr' => $lang['auth_login_descr'],'type' => 'input'));
		if ($config['register_type'] >= 3) {
                	array_push($params, array('name' => 'password', title => $lang['auth_pass'], 'descr' => $lang['auth_pass_descr'], 'type' => 'password'));
			array_push($params, array('name' => 'password2', title => $lang['auth_pass2'], 'descr' => $lang['auth_pass2_descr'],'type' => 'password'));
		}
		array_push($params, array('name' => 'email', title => $lang['auth_email'], 'descr' => $lang['auth_email_descr'],'type' => 'input'));
		array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' =>  '','type' => 'checkbox'));
		return $params;
	}

	//
	// Провести регистрацию
	// params = параметры полученные из get_reg_params()
	// values = значения для вышеуказанных параметрах
	// msg	= сообщение об ошибке
	// Возвращаемые значения:
	// 0 - ошибка
	// 1 - всё ok
	function register(&$params, $values, &$msg) {
	 	global $config, $mysql, $lang, $tpl;

		LoadPluginLang('auth_basic', 'auth','','auth');

	 	$error = 0;
	 	$values['login'] = trim($values['login']);

	 	// Preprocess login
	 	if (strlen($values['login'])<3) {
	 		// Слишком короткий логин
	 		$msg = $lang['auth_login_short'];
	 		return 0;
	 	}
		
		if(isset($values['who_bot']) && !empty($values['who_bot']))
        {
            // Дополнительная защита от ботов
             $msg = 'Ботам регистрация запрещена';
             return 0;
        }

		// Проверяем логин на запрещенные символы
		$csError = false;
		switch (pluginGetVariable('auth_basic', 'regcharset')) {
			case 0:
				if (!preg_match('#^[A-Za-z0-9\.\_\-]+$#s', $values['login'])) {
					$csError = true;
				}
				break;
			case 1:
				if (!preg_match('#^[А-Яа-яёЁ0-9\.\_\-]+$#s', $values['login'])) {
					$csError = true;
				}
				break;
			case 2:
				if (!preg_match('#^[А-Яа-яёЁA-Za-z0-9\.\_\-]+$#s', $values['login'])) {
					print "CASE2-err [".$values['login']."]";
					$csError = true;
				}
				break;
			case 3:
				if (!preg_match('#^[\x21-\x7e\xc0-\xffёЁ]+$#s', $values['login'])) {
					$csError = true;
				}
				break;
			case 4:
				break;

		}


	 	if (preg_match('/[&<>\\"'."'".']/', $values['login']) || $csError) {
	 		// Запрещенные HTML символы
	 		$msg = $lang['auth_login_html'];
	 		return 0;
	 	}


	 	if ($config['register_type'] >= 3) {
	 		if (strlen($values['password']) < 3) {
		 		// Слишком короткий пароль
		 		$msg = $lang['auth_pass_short'];
		 		return 0;

		 	} else if ($values['password'] != $values['password2']) {
		 		// Несовпадение паролей
		 		$msg = $lang['auth_pass_diff'];
		 		return 0;
		 	}
		}

		if ((strlen($values['email']) > 70) || (!preg_match("/^[\.A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $values['email']))) {
			// Неверный email
			$msg = $lang['auth_email_wrong'];
			return 0;

		}

		$row = $mysql->record("select * from ".uprefix."_users where lower(name)=".db_squote(strtolower($values['login']))." or mail=".db_squote($values['email']));
		if (is_array($row)) {
			// Дублирование логина/email'а
			if (strtolower($row['mail']) == strtolower($values['email'])) {
				// email dup
				$msg = $lang['auth_email_dup'];
				return 0;
			}
			// Если не мыло, то логин
			$msg = $lang['auth_login_dup'];
			return 0;
		}

		// Всё в порядке, регим
		$add_time = time() + ($config['date_adjust'] * 60);

		// Статус пользователя по умолчанию
		$regstatus = intval(pluginGetVariable('auth_basic','regstatus'));
		if (($regstatus < 1)||($regstatus > 4))
			$regstatus = 4;

		// Определяем действия в зависимости от типа регистрации
		switch ($config['register_type']) {

			// 0 - Мгновенная [автогенерация пароля, без email нотификации]
			case 0:
				$newpassword = MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}'), array($values['login'], $newpassword), $lang['auth_reg.success0'])
				));
				break;

			// 1 - Простая [автогенерация пароля, с email нотификацией]
			case 1:
				$newpassword = MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $newpassword);
				$tvars['regx'] = array(
					'#\[activation\].+?\[\/activation]#is' => '',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
					$values['email'],
					$lang['letter_title'],
					$msg,
					'html',
					'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success1'])
			));
				break;

			// 2 - С подтверждением [автогенерация пароля, пароль отправляется на email адрес и не показывается в админке]
			case 2:
				$newpassword	=	MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
				$userid			=	$mysql->record('select LAST_INSERT_ID() as id');
				$link			=	generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);

				$actlink		=	'<a href="'.$link.'">'.$link.'</a>';

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $newpassword);
				$tvars['regx'] = array(
					'#\[activation\].+?\[\/activation]#is' => '',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
					$values['email'],
					$lang['letter_title'],
					$msg,
					'html',
					'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success2'])
			));
				break;

			// 3 - Ручная с нотификацией [ручная генерация пароля, email нотификация]
			case 3:
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $values['password']);
				$tvars['regx'] = array(
					'#\[activation\].+?\[\/activation]#is' => '',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
						$values['email'],
						$lang['letter_title'],
						$msg,
						'html',
						'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success3'])
				));

				break;

			// 4 - Ручная с подтверждением [ручная генерация пароля, подтверждение email адреса]
			case 4:
				$actcode		=	MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last, activation) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '', ".db_squote($actcode).")");
				$userid			=	$mysql->record('select LAST_INSERT_ID() as id');
				$link			=	generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);

				$actlink		=	'<a href="'.$link.'">'.$link.'</a>';

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $values['password'],
										'activate_url' => $actlink);

				$tvars['regx'] = array(
					'#\[activation\](.+?)\[\/activation]#is' => '$1',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
					$values['email'],
					$lang['letter_title'],
					$msg,
					'html',
					'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success4'])
				));
			//print "<pre>".var_export($lang, true)."</pre>";
		}

		return 1;

	}

	//
	// Вернуть массив параметров, необходимых для восстановления пароля
	function get_restorepw_params() {
		global $config, $lang;
		$params = array();

		LoadPluginLang('auth_basic', 'auth','','auth');
		$mode = pluginGetVariable('auth_basic','restorepw');
		if (!$mode) {
			return false;
			//array_push($params, array('text' => $lang['auth_norestore']));
			//return $params;
	        }

		array_push($params, array('text' => $lang['auth_restore_'.$mode]));
	        if ($mode != 'email') {
			array_push($params, array('name' => 'login', title => $lang['auth_login'],'type' => 'input'));
		}
		if ($mode != 'login') {
			array_push($params, array('name' => 'email', title => $lang['auth_email'],'type' => 'input'));
		}
		return $params;
	}

	//
	// Восстановить пароль
	function restorepw(&$params, $values, &$msg) {
	 	global $config, $mysql, $lang, $tpl;

	 	$error = 0;
	 	$values['login'] = trim($values['login']);
	 	$values['email'] = trim($values['email']);

		LoadPluginLang('auth_basic', 'auth','','auth');
		$mode = pluginGetVariable('auth_basic','restorepw');

	 	if (!$mode) {
	 		$msg = $lang['auth_norestore'];
	 		return 0;
	 	}

	 	$px = array();

		if ($mode != 'email') {
			if (!$values['login']) {
	 			$msg = $lang['auth_login_require'];
	 			return 0;
	 		}
	 		array_push($px, "name = ".db_squote($values['login']));
	 	}

	 	if ($mode != 'login') {
	 		if (!$values['email']) {
				$msg = $lang['auth_email_require'];
				return 0;
			}
	 		array_push($px, "mail = ".db_squote($values['email']));
		}

		$query = "select * from ".uprefix."_users where ".implode(' and ',$px);
		$row = $mysql->record($query);
		if (is_array($row)) {
		 	// Нашли юзера
			$newpassword = MakeRandomPassword();
			$mysql->query("UPDATE ".uprefix."_users SET newpw=".db_squote(EncodePassword($newpassword))." WHERE id=".$row['id']);

			$tvars['vars'] = array( 'login' => $row['name'],
						'home' => home,
						'newpw' => $newpassword);
			$tvars['vars']['pwurl'] = generatePluginLink('core', 'lostpassword', array('userid' => $row['id'], 'code' => EncodePassword($newpassword)), array(), false, true);

			$tpl -> template('restorepw', GetPluginLangDir('auth_basic'));
			$tpl -> vars('restorepw', $tvars);

			sendEmailMessage($row['mail'],$lang['auth_mail_subj'],$tpl->show('restorepw'), false, '***@***');
			msg(array("text" => $lang['msgo_sent']));

			return 1;

		} else {
			$msg = $lang['auth_nouser'];
			return 0;
		}
        }

	//
  // Подтверждение восстановления пароля
  //
  function confirm_restorepw(&$msg, $reqid = NULL, $reqsecret = NULL) {
		global $config, $mysql, $lang, $tpl;

		LoadPluginLang('auth_basic', 'auth','','auth');

	 	$row = $mysql->record("select * from ".uprefix."_users where id = ".db_squote($reqid));
	 	if (is_array($row)) {
	 		if ($reqsecret == $row['newpw']) {
	 			// OK !!!
	 			$msg = $lang['auth_newpw_ok'];
	 			$mysql->query('update '.uprefix.'_users set pass=newpw where id = '.db_squote($reqid));
	 			return 1;
	 		}
	 	}
		$msg = $lang['auth_newpw_fail'];
		return 0;
	}
}

$AUTH_METHOD['basic']	= new auth_basic;
$AUTH_CAPABILITIES['basic'] = array('login' => '1', 'db' => '1');

if (pluginGetVariable('auth_basic','en_dbprefix')) {
	$config['uprefix'] = pluginGetVariable('auth_basic','dbprefix');
}

Подвал раздела

Работает на FluxBB