Что нового

Скрипт получения текущей версии AutoIt

XpycT

Скриптер
Сообщения
380
Репутация
133
Можно еще сделать так.

Как предлагал Garrett сделать таблицу в MySQL. В таблице хранить user_id и version. Когда пользователь заходит на форум, срабатывает скрипт который проверяет авторизован пользователь или нет, после того как прошла проверка получаем значения поля version для user_id. Сраниваем версии. Если версия AutoIt из файла update.dat больше чем версия version, тогда сравниваем Beta версию, если Beta больше показываем сообщение что доступна новая Beta версия и записываем ее в базу. Если же Beta версия мень показываем сообщение что доступна новая версия и записываем ее в базу.

Вот скрипт
Код:
function autoit_new_version_alert($nva_userid)
{
	require(dirname(dirname(__FILE__)) . '/Settings.php');

	$curl_options = array(
    CURLOPT_URL=>"http://www.autoitscript.com/autoit3/files/beta/update.dat",
    CURLOPT_HEADER=>true,
    CURLOPT_RETURNTRANSFER=>true,
    CURLOPT_USERAGENT=>"AutoIt" // Маскируемся под AutoIt
	);

	$curl_handle = curl_init();
	curl_setopt_array($curl_handle, $curl_options);

	$server_output = curl_exec($curl_handle);
	curl_close($curl_handle);

	preg_match('/\[AutoIt\]\r\nversion=(?P<version>[\d\.]+)\r\n.*\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $final);
	preg_match('/\[AutoItBeta\]\r\nversion=(?P<version>[\d\.]+)\r\n.*\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $beta);

	$nva_db = array("db_server" => $db_server, "db_name" => $db_name, "db_user" => $db_user, "db_passwd" => $db_passwd);

	$nva_dbconn = mysql_connect($nva_db['db_server'], $nva_db['db_user'], $nva_db['db_passwd']); //Подключаемся к базе данных
	if (!$nva_dbconn) {die('Could not connect: ' . mysql_error()); } //Проверяем подлючение
//	echo "Connected successfully | " . $nva_dbconn . "

";

	$nva_dbselect = mysql_select_db($nva_db['db_name'], $nva_dbconn);
	if (!$nva_dbselect) {die('Could not select database: ' . mysql_error()); } //Проверяем выбор базы данных
//	echo "Database seletced | " . $nva_dbselect . "

";

	$getver_query = "SELECT version FROM version_notice WHERE user_id = " . $nva_userid;
	$notice = mysql_fetch_assoc(mysql_query($getver_query, $nva_dbconn));

	if ($final['version'] > $notice['version']) {
		if ($beta['version'] > $notice['version']) {
			echo "<script>alert('Доступна новая " .$beta['version'] . " Beta версия AutoIt.')</script>";
			$updver_query = "UPDATE version_notice SET version = '" . $beta['version'] ."' WHERE user_id = " . $nva_userid;
		} else {
			echo "<script>alert('Доступна новая " .$final['version'] . " версия AutoIt.')</script>";
			$updver_query = "UPDATE version_notice SET version = '" . $final['version'] ."' WHERE user_id = " . $nva_userid;
		}
		mysql_query($updver_query, $nva_dbconn);
	}
	mysql_close($nva_dbconn);
}

Сделал в качестве функции, ее надо поместить в конец файла index.template.php который лежит папке [Путь_до_папки_с_форумом]\Themes\[название темы оформления]\

После
Код:
function template_body_above()
{
	global $context, $settings, $options, $scripturl, $txt, $modSettings;

Добавить вот эту строчку
Код:
	if ($context['user']['is_logged']) { autoit_new_version_alert($context['user']['id']); }

Котороя и будет запускать фунцию оповещения.

Таблица в базе данных должна называться version_notice и содержать 2 поля user_id и version.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT [?]
Таблица в базе данных должна называться version_notice и содержать 2 поля user_id и version
Т.е мне нужно создать таблицу в базе данных?
Знать бы как до неё добраться...
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR
Щас я скрипт напишу для создания таблицы и ее заполнения.


Добавлено:
Сообщение автоматически объединено:

Вот скрипт который создать таблицу и заполнит user_id

Код:
<?
	require(dirname(dirname(__FILE__)) . '/Settings.php');

$nva_db = array("db_server" => $db_server, "db_name" => $db_name, "db_user" => $db_user, "db_passwd" => $db_passwd, "db_prefix" => $db_prefix, "db_table" => "");
$nva_db['db_table'] = $nva_db['db_prefix'] . "version_notice";

$nva_dbconn = mysql_connect($nva_db['db_server'], $nva_db['db_user'], $nva_db['db_passwd']); //Подключаемся к базе данных
if (!$nva_dbconn) {die('Could not connect: ' . mysql_error()); } //Проверяем подлючение
echo "Connected successfully | " . $nva_dbconn . "

";

$nva_dbselect = mysql_select_db($nva_db['db_name'], $nva_dbconn);
if (!$nva_dbselect) {die('Could not select database: ' . mysql_error()); } //Проверяем выбор базы данных
echo "Database seletced | " . $nva_dbselect . "

";

$nva_tblcheck = mysql_num_rows(mysql_query("SHOW TABLES LIKE '" . $nva_db['db_table'] . "'", $nva_dbconn));
if (!$nva_tblcheck) {
	$nva_createtbl_query = "CREATE TABLE " . $nva_db['db_table'] . " (user_id INT NOT NULL, version VARCHAR( 11 ) NOT NULL, PRIMARY KEY(user_id)) ENGINE = MYISAM";
	mysql_query($nva_createtbl_query, $nva_dbconn);

	$nva_get_userid_query = mysql_query("SELECT `id_member` FROM `smf_members`", $nva_dbconn);
//	print('<pre>'); print_r($nva_get_userid_query); print('</pre>');

	$nva_userid_row = mysql_fetch_row($nva_get_userid_query);
	foreach($nva_userid_row as $nva_userid) {mysql_query("INSERT INTO " . $nva_db['db_table'] . " (user_id) VALUES (" . $nva_userid . ")", $nva_dbconn);}
}
mysql_close($nva_dbconn);

?>

Есть одно но! После того как установиться скрипт оповещения пользоветель получить сообщение что доступна версия 3,3,6,1.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR сказал(а):
XpycT [?]
Есть доступ к phpMyAdmin?
Возможно, а есть адрес к нему, или это через ftp?

phpMyAdmin он устанавливается хостпровайдером. Нужно посмотреть в перечне услуг вашего хостпровайдера.
Однако если phpMyAdmin не установлен, его можно самому установить.
phpMyAdmin eng
phpMyAdmin rus
Помимо этого есть ещё менеджеры по управлению MySQL например MySQLFront и т.д.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT [?]
Вот скрипт который создать таблицу и заполнит user_id
Как его выполнить на сервере? :whistle:

Кстати, получил доступ на phpMyAdmin...


Добавлено:
Сообщение автоматически объединено:

Добавил таблицы и скрипт, но он выдаёт вот что:

Access denied for user 'sycraft'@'localhost' (using password: NO)
что я не так делаю? :-\


Добавлено:
Сообщение автоматически объединено:

По идее не нужно открывать базу данных, я подсмотрел как это делается в других модах:

PHP:
$getver_query = "SELECT version FROM ".$db_prefix."version_notice WHERE user_id = " . $nva_userid;
$getver_query = mysql_query($getver_query) or die(mysql_error());
$notice = mysql_fetch_assoc($getver_query);

имя таблицы это smf_version_notice, запрос вроде обрабатывается правильно, но вот запись не происходит:

PHP:
$updver_query = "UPDATE ".$db_prefix."version_notice SET version = '" . $final['version'] ."' WHERE user_id = " . $nva_userid;
mysql_query($updver_query);

:scratch:
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
По идее не нужно открывать базу данных
Проверил на локально установленной версии движка форума. Работает и без открытия

Изменил немного скрипт.
Теперь при первом входе в базу записывается Бета версия. При следующем заходит выпадает сообщение что доступна версия 3.3.6.1. При следующем заходе сообщенные не выпадает (ведь 3.3.6.1 крайняя версия)
PHP:
function autoit_new_version_alert($nva_userid)
{
	require(dirname(dirname(__FILE__)) . '/Settings.php');

	$curl_options = array(
    CURLOPT_URL=>"http://www.autoitscript.com/autoit3/files/beta/update.dat",
    CURLOPT_HEADER=>true,
    CURLOPT_RETURNTRANSFER=>true,
    CURLOPT_USERAGENT=>"AutoIt" // Маскируемся под AutoIt
	);

	$curl_handle = curl_init();
	curl_setopt_array($curl_handle, $curl_options);

	$server_output = curl_exec($curl_handle);
	curl_close($curl_handle);

	preg_match('/\[AutoIt\]\r\nversion=(?P<version>[\d\.]+)\r\n.*\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $final);
	preg_match('/\[AutoItBeta\]\r\nversion=(?P<version>[\d\.]+)\r\n.*\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $beta);

	$nva_db_table = $db_prefix . "version_notice";

	$getver_query = "SELECT version FROM `" . $nva_db_table . "` WHERE user_id = " . $nva_userid;
	$notice = mysql_fetch_assoc(mysql_query($getver_query));

	if ($final['version'] > $notice['version']) {
		if ($beta['version'] > $notice['version']) {
			if ($notice['version']) {echo "<script>alert('Доступна новая " .$beta['version'] . " Beta версия AutoIt.')</script>";}
			$updver_query = "UPDATE `" . $nva_db_table . "` SET version = '" . $beta['version'] ."' WHERE user_id = " . $nva_userid;
		} else {
			if ($notice['version']) {echo "<script>alert('Доступна новая " .$final['version'] . " версия AutoIt.')</script>";}
			$updver_query = "UPDATE `" . $nva_db_table . "` SET version = '" . $final['version'] ."' WHERE user_id = " . $nva_userid;
		}
		mysql_query($updver_query);
	}
}
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
Может быть как то через куки всё таки?
Мне никогда не доводилось работать с куки

Странно что не записывает. А ошибки какие нибудь высвечиваются??

Проверь значение поля version в таблице smf_version_notice через phpMyAdmin.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481

Otherworld

Новичок
Сообщения
19
Репутация
0
Вроде получилось. Я щелкнул на ссылку Файлы, и мне вылез тот алярм об обновлении. Так что все ок! :ok:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Otherworld [?]
Я щелкнул на ссылку Файлы, и мне вылез тот алярм об обновлении
:laugh: Я как чувствовал что объявится кто с таким заявлением. На самом деле это я тестировал скрипт, если я включю его обработку то сообщение о новой версии будет вылезать на любой странице.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR сказал(а):
Всё ровно не записывает в базу
Ребят, похоже, нужно смотреть на соответствие локали в MySQL! Нужно записывать информацию, в utf-8! Поля в таблице и сама таблица, должны быть сопоставлены utf-8, при их создании. Информация для записи тоже должна записываться в utf-8. Такой эффект бывает именно по этой причине.
Кстати, кодировка (судя по скриншоту) стоит латынь.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR сказал(а):
Garrett [?]
Нужно записывать информацию, в utf-8
Как? в базе выставил utf-8_unicode, а как записывать в скрипте?
Посмотрите исходный код форума.
Код:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Все файлы форума уже в utf-8.
*.php файлы тоже должны писаться и сохранятся в utf-8.

Также есть функции
Код:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
попробуйте прописать их (в скрипте), после коннекта с базой, но перед началом обращения к базе.
Если не будет должного результата, попробуйте поменять кодировку на 'cp1251'.

P.S. Прошу прощения, я немного ошибся, таблицы могут быть и в латыни, главное сопоставление самой базы (это на главной стр. phpMyAdmin) должно быть utf8_unicode_ci
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
*.php файлы тоже должны писаться и сохранятся в utf-8.
index.template.php (там где вызывается скрипт) в utf-8.

попробуйте прописать их (в скрипте), после коннекта с базой, но перед началом обращения к базе.
А нету коннекта с базой, там прямой доступ.

таблицы могут быть и в латыни, главное сопоставление самой базы
Всей базы, или только таблицы (smf_version_notice)?
 

XpycT

Скриптер
Сообщения
380
Репутация
133
У меня при нажитии на ссылку Файлы никакого сообщения не выпало.

Garrett [?]
Информация для записи тоже должна записываться в utf-8
Причем тут utf-8?

В базу заносятся только цифры, поэтому не важно в какой кодировке их заносить.

CreatoR [?]
Я не нашёл как там провеить, хотя вроде всё пусто

Из скриншота видно что таблица пустая. Вот поэтому ничего не записываться в таблицу. Запрос на обновления поля version не может найти в таблице значение соответствующие user_id.

smf_version_notice.jpg
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT [?]
Из скриншота видно что таблица пустая
Ок, можно тогда попросить пошаговую инструкцию создания таблицы и её заполнения в phpMyAdmin?
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
Ок, можно тогда попросить пошаговую инструкцию создания таблицы и её заполнения в phpMyAdmin?
Через phpMyAdmin заполнить таблицу не получиться.

1. Создать файл create_version_notice_table.php.
2. Записать в фаил следующий скрипт.
PHP:
<?
require(dirname(__FILE__) . '/Settings.php');

$nva_db = array("db_server" => $db_server, "db_name" => $db_name, "db_user" => $db_user, "db_passwd" => $db_passwd, "db_prefix" => $db_prefix, "db_table" => "");
$nva_db['db_table'] = $nva_db['db_prefix'] . "version_notice";

$nva_dbconn = mysql_connect($nva_db['db_server'], $nva_db['db_user'], $nva_db['db_passwd']); //Подключаемся к базе данных
if (!$nva_dbconn) {die('Could not connect: ' . mysql_error()); } //Проверяем подлючение
echo "Connected successfully | " . $nva_dbconn . "

";

$nva_dbselect = mysql_select_db($nva_db['db_name'], $nva_dbconn);
if (!$nva_dbselect) {die('Could not select database: ' . mysql_error()); } //Проверяем выбор базы данных
echo "Database seleted | " . $nva_dbselect . "

";

$nva_tblcheck = mysql_num_rows(mysql_query("SHOW TABLES LIKE '" . $nva_db['db_table'] . "'", $nva_dbconn));
if (!$nva_tblcheck) {
		$nva_createtbl_query = "CREATE TABLE " . $nva_db['db_table'] . " (user_id INT NOT NULL, version VARCHAR( 11 ) NOT NULL, PRIMARY KEY(user_id)) ENGINE = MYISAM";
		mysql_query($nva_createtbl_query, $nva_dbconn);
}

$nva_get_userid_query = mysql_query("SELECT `id_member` FROM `smf_members`", $nva_dbconn);
print('<pre>'); print_r($nva_get_userid_query); print('</pre>');

$nva_userid_row = mysql_fetch_row($nva_get_userid_query);
foreach($nva_userid_row as $nva_userid) {mysql_query("INSERT INTO " . $nva_db['db_table'] . " (user_id) VALUES (" . $nva_userid . ")", $nva_dbconn);}

mysql_close($nva_dbconn);
?>

3. Через FTP загрузить фаил на хостинг. Фаил должен находить в одной папке с файлом Settings.php
4. В адрессной строке броузера перейти по адресу http://autoit-script.ru/create_version_notice_table.php
5. Удалить фаил create_version_notice_table.php.

После выполнения скрипт должно отобразиться примерно такое
Код:
Connected successfully | Resource id #3

Database seleted | 1

Resource id #5
 
Верх