Что нового

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

Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT [?]
Мне сказало что Доступна версия 3,3,6,3
Это я потом поигрался ещё немного, не верилось что оно реально работает :laugh:
Хотя я мог конечно вот так проверять:
PHP:
   if ($context['user']['is_admin'])
			echo "<script>alert('Final: " . $final['version'] . ", Beta: " . $beta['version'] . ", Notice: " . $notice['version'] . ", UserID: " . $nva_userid . "')</script>";
Кстати почему то если добавить переводы строк (\n) вместо запятых, то alert не появляется.

Теперь всё в порядке, все значения на месте, всё как и ожидается.

Теперь если не сложно, можешь пожалуйста в отдельном сообщении раписать полный список действии добавления этой фичи, чтобы если форум упадёт когда нибудь, мы сможем эту функцию восстановить.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
Теперь если не сложно, можешь пожалуйста в отдельном сообщении раписать полный список действии добавления это
Да могу.

Я подготовлю полный список действий с нормальными скриптами.

Надо еще внести в скрипт оповещения условие на добавление нового пользователя, так как пользователи зарегистрировавшиеся после всех этих "танцев с бубнами" не будут получать сообщения о новой версии.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Или вообще можно сделать пакет модификации, типа AutoItVersionNotify_Mod.zip, туда ещё добавить изменеие для показа новой версии в новостях форума.


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

XpycT [?]
Надо еще внести в скрипт оповещения условие на добавление нового пользователя, так как пользователи зарегистрировавшиеся после всех этих "танцев с бубнами" не будут получать сообщения о новой версии.
Обязательно, иначе нет смысла всех этих “танцев” :smile:
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
Кстати почему то если добавить переводы строк (\n) вместо запятых, то alert не появляется.
Я тоже пытался сделать алерт много строчным и получилось. Только вот надо найти этот скрипт. Надо дома поискать.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT [?]
надо найти этот скрипт
Оказывается это из за одинарных кавычек, вот так работает:

PHP:
echo '<script>alert("Final: ' . $final['version'] . '\nBeta: ' . $beta['version'] . '\n Notice: ' . $notice['version'] . '\nUserID: ' . $nva_userid . '")</script>';
я вспонмил про эту особенность в php, нужно использовать двойные кавычки для строки отображаемой в echo, а вот для чистого js как раз наоборот, нужны одинарные для корректного перевода строки.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR
Ты вносил какие нибудь изменения в функцию autoit_new_version_alert которая находиться в файле index.templae.php?
 
Автор
CreatoR

CreatoR

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

PHP:
function autoit_new_version_alert($nva_userid)
{
		global $context;
		
    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\nindex=(?P<download_page>.*)\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $final);
		preg_match('/\[AutoItBeta\]\r\nversion=(?P<version>[\d\.]+)\r\nindex=(?P<download_page>.*)\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 ($context['user']['is_admin'])
		//	echo '<script>alert("Final: ' . $final['version'] . '\nBeta: ' . $beta['version'] . '\nNotice: ' . $notice['version'] . '\nUserID: ' . $nva_userid . '")</script>';
    
    if ($final['version'] > $notice['version']) {
        if ($beta['version'] > $notice['version']) {
            if ($notice['version'])
							echo "<script>if(confirm('Доступна новая версия AutoIt *Beta* (" . $beta['version'] . "), перейти на страницу закачки?')) window.open('" . $beta['download_page'] . "');</script>";
						
            mysql_query("UPDATE `" . $nva_db_table . "` SET version = '" . $beta['version'] . "' WHERE user_id = " . $nva_userid);
        } else {
            if ($notice['version'])
							echo "<script>if(confirm('Доступна новая версия AutoIt (" . $final['version'] . "), перейти на страницу закачки?')) window.open('" . $final['download_page'] . "');</script>";
						
            mysql_query("UPDATE `" . $nva_db_table . "` SET version = '" . $final['version'] . "' WHERE user_id = " . $nva_userid);
        }
    }
}
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT
Есть новости со списком действии и с обновление скрипта?

Я как бы и сам мог бы написать, но уже запутался что конкретно нам нужно, какие скрипты нужно запускать, а какие нет.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR
Сорри за задержку с инструкцией. Просто на работе запар.

На выходных обязательно напишу и постараюсь в воскресенье выложить.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Инструкция по установке:
(Написание инструкции не мой конек, так что прошу сильно не пинать :whistle:smile:

1. Создать файл notice_version_install.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']);
print('<pre>');
if (!$nva_dbconn) {
	die('Could not connect | ' . mysql_error()); //Проверяем подлючение к базе данных
} else {
	print_r("Connected successfully | " . $nva_dbconn);
}
print('<pre>');

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

$nva_check_table = mysql_fetch_row(mysql_query("SHOW TABLES LIKE '" . $nva_db['db_table'] . "'", $nva_dbconn));
print('<pre>');
if (!$nva_check_table) {
	$nva_create_table = mysql_query("CREATE TABLE `" . $nva_db['db_table'] . "` (user_id INT NOT NULL, version VARCHAR(15) NULL, PRIMARY KEY(user_id)) ENGINE = MYISAM", $nva_dbconn);
	print_r('Creating Table "' . $nva_db['db_table'] . '" | ' . $nva_create_table);
} else {
	print_r("Table Exist | " . $nva_check_table[0]);
}
print('<pre>');

$nva_check_table = mysql_fetch_row(mysql_query("SHOW TABLES LIKE '" . $nva_db['db_table'] . "'", $nva_dbconn));
print('<pre>');
if (!$nva_check_table) {
	$nva_create_table = mysql_query("CREATE TABLE `" . $nva_db['db_table'] . "` (user_id INT NOT NULL, version VARCHAR(15) NULL, PRIMARY KEY(user_id)) ENGINE = MYISAM", $nva_dbconn);
	print_r('Creating Table "' . $nva_db['db_table'] . '" | ' . $nva_create_table);
} else {
	print_r("Table Exist | " . $nva_check_table[0]);
}
print('<pre>');

mysql_close($nva_dbconn);
?>

3. Через FTP загрузить файл на хостинг. Фаил должен находить в одной папке с файлом Settings.php
4. В адресной строке броузера перейти по адресу http://autoit-script.ru/notice_version_install.php
5. Результат работы скрипта должен быть похож вот на это
Код:
Connected successfully | Resource id #3
Database seleted | 1
Creating Table "smf_version_notice" | 1
Table Exist | smf_version_notice

5. Удалить фаил notice_version_install.php.

6. На хостинге найти файл index.template.php, он расположен в папке themes/название_темы_оформления/
7. Записать в файл следующее:
7.1. После строк
PHP:
function template_body_above()
{
	global $context, $settings, $options, $scripturl, $txt, $modSettings;

Записать
PHP:
if ($context['user']['is_logged']) { autoit_new_version_alert($context['user']['id'], $context['user']['is_admin']); }

7.2. В самый конец файла записать
PHP:
function autoit_new_version_alert($nva_userid, $nva_is_admin)
{
	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\nindex=(?P<download_page>.*)\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $final);
	preg_match('/\[AutoItBeta\]\r\nversion=(?P<version>[\d\.]+)\r\nindex=(?P<download_page>.*)\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $beta);

	$nva_db_table = $db_prefix . "version_notice";

	$nva_check_user = mysql_fetch_row(mysql_query("SELECT user_id FROM `" . $nva_db_table . "` WHERE user_id = " . $nva_userid));
	if (!$nva_check_user) { mysql_query("INSERT INTO `" . $nva_db_table . "` (`user_id`) VALUES ('" . $nva_userid . "')");}

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

//	if ($nva_is_admin) {
//		echo '<script>alert("user_id : ' . $nva_userid . ' | admin : ' . $nva_is_admin . '\n\nFinal: ' . $final['version'] . '\nBeta: ' . $beta['version'] . '\nNotice: ' . $notice['version'] . '")</script>';
//		return '';
//	}

	if ($final['version'] > $beta['version']) {
		if ($final['version'] > $notice['version']) {
			echo '<script>if(confirm("Доступна новая версия AutoIt (' . $final['version'] . ').\n\nПерейти на страницу закачки?")) window.open("' . $final['download_page'] . '");</script>';
			mysql_query("UPDATE `" . $nva_db_table . "` SET version = '" . $final['version'] . "' WHERE user_id = " . $nva_userid);
		}
	} else {
		if ($beta['version'] > $notice['version']) {
			echo '<script>if(confirm("Доступна новая версия AutoIt *Beta* (' . $beta['version'] . ').\n\nПерейти на страницу закачки?")) window.open("' . $beta['download_page'] . '");</script>';
			mysql_query("UPDATE `" . $nva_db_table . "` SET version = '" . $beta['version'] . "' WHERE user_id = " . $nva_userid);
		}
	}
}

8. Обновить страницу форума. Должно показать сообщение о доступности версии 3.3.6.1 (Текущая Final версия на момент написания.)

P.S.
а Jon ругаться не будет на слишком частое обращение к файлу update.dat.
Потому как обращение происходить при каждом обновлении страницы форума.
 
Автор
CreatoR

CreatoR

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

А в скрипте уже предусмотрно добавление новых пользователей?
И мне нужно сейчас всё это заного применить?

[?]
Jon ругаться не будет на слишком частое обращение к файлу update.dat
Ну, он как бы должен был взять это в счёт когда публично объявил об этом файле :smile:

Да и запрос думаю не слишком серъёзный чтобы нагружать сервер.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR [?]
Да и запрос думаю не слишком серъёзный чтобы нагружать сервер.
Абсолютно верно! Тем более если файл сначала просто проверять на время последней модификации, плюс можно ещё и время запроса выставить, допустим, три раза в сутки.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
если файл сначала просто проверять на время последней модификации, плюс можно ещё и время запроса выставить, допустим, три раза в сутки
Было бы неплохо...
 

XpycT

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

CreatoR [?]
И мне нужно сейчас всё это заного применить?
В принципе нет. Но если есть желание в качестве практики то можно.

Garrett [?]
файл сначала просто проверять на время последней модификации
Тогда надо будет хранить еще и время модификации файла, чтобы было с чем сравнить, и кол-во запросов может вырости, так как с начало надо будет проверить было ли изменение в файле, если да то получить содержимое.

Garrett [?]
плюс можно ещё и время запроса выставить, допустим, три раза в сутки
Тогда получиться так:
1. Зайдет CreatoR на форум, скрипт проверит обновление.
2. Зайдет Garrett на форум, скрипт проверит обновление.
3. Зайдет XpycT на форум, скрипт проверит обновление.
4. Зайдет кто либо другой, скрипт уже не будет проверять обновление, так как 3 запроса уже было выполнено.

А если для каждого пользователя делать проверку обновления 3 раза в сутки то:

Зайдет XpycT на форум, скрипт проверит обновление. Обновит 2 раза страницу и все 3 раза скрипт отработал.

Можно с качестве статистики приделать счетчик и посмотреть кол-во запрос к файлу в день.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
XpycT
Время модификации файла приходит в ответ на запрос :
Код:
$url = 'http://www.autoitscript.com/autoit3/files/beta/update.dat';
get_headers($url['Last-Modified'], 1); // последняя модификация файла
его не нужно хранить, оно неизменно до следующий модификации.

Под выставлением времени запроса, я имел в виду функцию, которая выполняет запрос в определённые интервалы времени, и при этом не важно кто и когда зашел на форум (ака cron). Ну, к примеру, 00:00, 06:00, 12:00, 18:00
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Garrett [?]
Время модификации файла приходит в ответ на запрос
Согласен

его не нужно хранить
А как вы проверите изменился файл или нет. С каким временем вы будете сравнивать?

Тут тоже согласен. Так было бы легче. Но насколько мне известно (могу ошибаться) хостинг не предоставляет такого сервиса как cron.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
XpycT [?]
Цитата
его не нужно хранить
А как вы проверите изменился файл или нет. С каким временем вы будете сравнивать?
С текущей датой!
Предвижу вопрос! А как быть, если модификация произошла, к примеру, в 23:59, а функция выслала запрос в 00:20. Думаю, здесь можно будет задать условие, при котором за интервал проверки времени модификации брать два дня (48 часов).

Цитата
Тут тоже согласен. Так было бы легче. Но насколько мне известно (могу ошибаться) хостинг не предоставляет такого сервиса как cron.
Вполне возможно. Это нужно узнать у CreatoR:smile:
P.S. Похоже, форум висит на выделенном сервере, так что хозяин там может поставить все, что душе угодно (могу и ошибаться)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ребята, в любом случае нужно делать запрос (как для проверки новой версии, так и для проверки необходимости проверки на новую версию :wacko: ). Поэтому нет смысла городить огород в этом направлении, разве что если сделать как предложил Garrett - проверять по таймеру (и не 3 раза в сутки, а один раз, этого будет вполне достаточно).

Garrett [?]
Вполне возможно. Это нужно узнать у CreatoR
Как будто CreatoR в этом что то понимает, так, по наслышке :laugh:
А если серъёзно, то мне кажется это всё было бы проще организовать вообще по другому - вместо того чтобы вызывать скрипт при каждом обращении к форуму пользователем, повесить задание в планировщик (на форуме есть такая опция, и кстати некоторые пакеты модификации успешно автоматизируют эту опцию в своих целях), и тогда не нужен даже таймер, мы просто укажем условия выполнения задания. Единственное что нужно уточнить, так это возможно ли запускать php-скрипт через это задание...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR [?]
А если серъёзно, то мне кажется это всё было бы проще организовать вообще по другому - вместо того чтобы вызывать скрипт при каждом обращении к форуму пользователем, повесить задание в планировщик (на форуме есть такая опция, и кстати некоторые пакеты модификации успешно автоматизируют эту опцию в своих целях)
Ну, тогда это меняет дело! Конечно, лучше воспользоваться планировщиком.

Единственное что нужно уточнить, так это возможно ли запускать php-скрипт через это задание...
Ну, если такая возможность поддерживается форумом, то почему бы и нет.
 
Верх