From 732864838cd49c40854e1f1bdd637631f75cccc0 Mon Sep 17 00:00:00 2001 From: "glix08@gmail.com" Date: Mon, 10 Feb 2014 20:34:47 +0000 Subject: [PATCH] r583 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Новая система загрузки и хранения аватар, полная переделка старой системы. В ходе переделки удалена галерея аватар, но взамен повышена производительность и потенциальные функциональные возможности новой. Для обновления на данную ревизию необходимо запустить конвертер базы и имеющихся аватарок из корня трекера: upgrade/r583-convert_avatars.php, после обновления файл удалить. Внимательно читайте сообщение перед началом конвертации базы. Для конвертации базы - форум требуется ПРЕДВАРИТЕЛЬНО обновить, после чего запускать конвертер. Обратите внимание что в обновлении также была переделана функция get_avatar и потребуется адаптация модов, ее использующих. При возникновении вопросов - пишите на форум. Перенос настроек аватарок в config.php; отображение модераторов форумов на главной по-умолчанию отключено; удаление активации учетной записи пользователя администратором - теперь активация автоматическая и сразу или после подтверждения по электронной почте; удаление крон-задачи обслуживания аватарок (теперь оно не требуется); отказ от использования буквы Ё - теперь везде Е; исправления ошибок в админке форумов, внешние визуальные изменения, оптимизация синхронизаций; удаление аватара пользователя админом из его профиля на аяксе; переименование функции синхронизации всех форумов на sync_all_forums; фикс ошибки сортировки в даунлоад-листе; перенос настройки обязательной активации по email в config.php; оптимизация приоритета запуска крон-задач; фикс крон-задачи чистки кеша; новые функции для новой системы аватар (в будущем - аттачей); оптимизация функций синхронизации форумов, постов и прочего; минимальная длина пароля - 4 символа; отказ от поддержки ie6 в шаблоне; мелочи. git-svn-id: https://torrentpier2.googlecode.com/svn/trunk@583 a8ac35ab-4ca4-ca47-4c2d-a49a94f06293 --- ReadMe.txt | 3 +- install/sql/mysql.sql | 25 +- upgrade/r583-convert_avatars.php | 93 ++++++ upload/admin/admin_board.php | 25 -- upload/admin/admin_forums.php | 130 ++++---- upload/ajax.php | 6 + upload/ajax/avatar.php | 33 ++ upload/ajax/group_membership.php | 2 +- upload/ajax/manage_admin.php | 2 +- upload/attach_mod/displaying_torrent.php | 22 +- upload/config.php | 46 ++- upload/images/avatars/{ => gallery}/bot.gif | Bin upload/includes/cron/cron_run.php | 11 +- upload/includes/cron/jobs/avatars_cleanup.php | 117 ------- upload/includes/cron/jobs/bb_maintenance.php | 2 +- upload/includes/cron/jobs/cache_gc.php | 2 +- upload/includes/functions.php | 81 +++-- upload/includes/functions_admin.php | 247 +++++---------- upload/includes/functions_upload.php | 166 ++++++++++ upload/includes/init_bb.php | 6 - upload/includes/page_header.php | 153 ++++----- upload/includes/ucp/usercp_activate.php | 39 +-- upload/includes/ucp/usercp_avatar.php | 182 ----------- upload/includes/ucp/usercp_register.php | 280 +++-------------- upload/includes/ucp/usercp_viewprofile.php | 8 +- upload/index.php | 6 +- .../lang_english/email/admin_activate.tpl | 10 - .../email/admin_welcome_activated.tpl | 8 - .../email/admin_welcome_inactive.tpl | 19 -- upload/language/lang_english/lang_main.php | 23 +- .../lang_russian/email/admin_activate.tpl | 10 - .../email/admin_welcome_activated.tpl | 8 - .../email/admin_welcome_inactive.tpl | 19 -- .../lang_russian/email/privmsg_notify.tpl | 2 +- .../lang_russian/email/topic_notify.tpl | 2 +- .../lang_russian/email/user_activate.tpl | 4 +- .../email/user_activate_passwd.tpl | 2 +- .../lang_russian/email/user_welcome.tpl | 4 +- .../email/user_welcome_inactive.tpl | 6 +- upload/language/lang_russian/lang_main.php | 297 +++++++++--------- upload/misc/html/copyright_holders.html | 2 +- upload/misc/js/main.js | 12 - upload/poll.php | 10 +- upload/posting.php | 2 +- upload/privmsg.php | 3 +- upload/search.php | 1 - upload/templates/admin/admin_board.tpl | 45 --- upload/templates/admin/admin_forums.tpl | 128 ++++---- upload/templates/default/donate.tpl | 2 +- upload/templates/default/page_header.tpl | 182 +++++------ upload/templates/default/posting_tpl.tpl | 6 +- upload/templates/default/search_results.tpl | 2 +- .../default/usercp_avatar_gallery.tpl | 35 --- upload/templates/default/usercp_register.tpl | 50 +-- .../templates/default/usercp_viewprofile.tpl | 23 +- upload/templates/default/viewtopic.tpl | 2 +- upload/templates/default/viewtopic_poll.tpl | 2 +- .../templates/default/viewtopic_torrent.tpl | 16 +- upload/templates/topic_tpl_rules_video.html | 8 +- upload/viewtopic.php | 6 +- 60 files changed, 1074 insertions(+), 1564 deletions(-) create mode 100644 upgrade/r583-convert_avatars.php create mode 100644 upload/ajax/avatar.php rename upload/images/avatars/{ => gallery}/bot.gif (100%) delete mode 100644 upload/includes/cron/jobs/avatars_cleanup.php create mode 100644 upload/includes/functions_upload.php delete mode 100644 upload/includes/ucp/usercp_avatar.php delete mode 100644 upload/language/lang_english/email/admin_activate.tpl delete mode 100644 upload/language/lang_english/email/admin_welcome_activated.tpl delete mode 100644 upload/language/lang_english/email/admin_welcome_inactive.tpl delete mode 100644 upload/language/lang_russian/email/admin_activate.tpl delete mode 100644 upload/language/lang_russian/email/admin_welcome_activated.tpl delete mode 100644 upload/language/lang_russian/email/admin_welcome_inactive.tpl delete mode 100644 upload/templates/default/usercp_avatar_gallery.tpl diff --git a/ReadMe.txt b/ReadMe.txt index 4021015ac..17f4a57ec 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -3,7 +3,7 @@ ******************** Распаковываем на сервер содержимое папки upload. -Заходим в phpmyadmin, открываем или создаём новую базу, потом импортируем дамп (install/sql/mysql.sql) +Заходим в phpmyadmin, открываем или создаем новую базу, потом импортируем дамп (install/sql/mysql.sql) Правим файл конфигурации config.php (изменяем данные входа в БД, остальное по усмотрению) * Файлы favicon.ico (меняем на свою иконку, если есть), robots.txt(допуск или запрет ботам поисковиков к серверу, блокирует не все, меняем адреса в строках Host: и Sitemap: на свои адреса) @@ -28,7 +28,6 @@ - files/thumbs - images - images/avatars -- images/avatars/gallery - images/captcha - images/logo - images/ranks diff --git a/install/sql/mysql.sql b/install/sql/mysql.sql index e39e80f37..021f9da01 100644 --- a/install/sql/mysql.sql +++ b/install/sql/mysql.sql @@ -507,17 +507,10 @@ CREATE TABLE IF NOT EXISTS `bb_config` ( -- INSERT INTO `bb_config` VALUES ('allow_autologin', '1'); -INSERT INTO `bb_config` VALUES ('allow_avatar_local', '1'); -INSERT INTO `bb_config` VALUES ('allow_avatar_upload', '1'); INSERT INTO `bb_config` VALUES ('allow_bbcode', '1'); INSERT INTO `bb_config` VALUES ('allow_namechange', '0'); INSERT INTO `bb_config` VALUES ('allow_sig', '1'); INSERT INTO `bb_config` VALUES ('allow_smilies', '1'); -INSERT INTO `bb_config` VALUES ('avatar_filesize', '100000'); -INSERT INTO `bb_config` VALUES ('avatar_gallery_path', 'images/avatars/gallery'); -INSERT INTO `bb_config` VALUES ('avatar_max_height', '100'); -INSERT INTO `bb_config` VALUES ('avatar_max_width', '100'); -INSERT INTO `bb_config` VALUES ('avatar_path', 'images/avatars'); INSERT INTO `bb_config` VALUES ('board_disable', '0'); INSERT INTO `bb_config` VALUES ('board_startdate', ''); INSERT INTO `bb_config` VALUES ('board_timezone', '0'); @@ -566,7 +559,6 @@ INSERT INTO `bb_config` VALUES ('posts_per_page', '15'); INSERT INTO `bb_config` VALUES ('prune_enable', '1'); INSERT INTO `bb_config` VALUES ('record_online_date', '1211477508'); INSERT INTO `bb_config` VALUES ('record_online_users', '2'); -INSERT INTO `bb_config` VALUES ('require_activation', '0'); INSERT INTO `bb_config` VALUES ('seed_bonus_enabled', '1'); INSERT INTO `bb_config` VALUES ('seed_bonus_release', ''); INSERT INTO `bb_config` VALUES ('seed_bonus_points', ''); @@ -588,7 +580,6 @@ INSERT INTO `bb_config` VALUES ('cron_enabled', '1'); INSERT INTO `bb_config` VALUES ('cron_check_interval', '300'); INSERT INTO `bb_config` VALUES ('reports_enabled', '1'); INSERT INTO `bb_config` VALUES ('magnet_links_enabled', '1'); -INSERT INTO `bb_config` VALUES ('no_avatar', 'images/avatars/gallery/noavatar.png'); INSERT INTO `bb_config` VALUES ('gender', '1'); INSERT INTO `bb_config` VALUES ('callseed', '0'); INSERT INTO `bb_config` VALUES ('tor_stats', '1'); @@ -601,7 +592,7 @@ INSERT INTO `bb_config` VALUES ('max_net_title', '50'); INSERT INTO `bb_config` VALUES ('network_news_count', '5'); INSERT INTO `bb_config` VALUES ('network_news_forum_id', '2'); INSERT INTO `bb_config` VALUES ('whois_info', 'http://ip-whois.net/ip_geo.php?ip='); -INSERT INTO `bb_config` VALUES ('show_mod_index', '1'); +INSERT INTO `bb_config` VALUES ('show_mod_index', '0'); INSERT INTO `bb_config` VALUES ('premod', '0'); INSERT INTO `bb_config` VALUES ('new_tpls', '1'); INSERT INTO `bb_config` VALUES ('tor_comment', '1'); @@ -640,7 +631,7 @@ CREATE TABLE IF NOT EXISTS `bb_cron` ( INSERT INTO `bb_cron` VALUES (1, 0, 'Site backup', 'site_backup.php', 'daily', '1', '05:00:00', 10, '', '', NULL, 1, '', 0, 1, 0); INSERT INTO `bb_cron` VALUES (2, 0, 'DB backup', 'db_backup.php', 'daily', '1', '05:00:00', 20, '', '', NULL, 1, '', 0, 1, 0); -INSERT INTO `bb_cron` VALUES (3, 1, 'Avatars cleanup', 'avatars_cleanup.php', 'weekly', '1', '05:00:00', 30, '', '', NULL, 1, '', 0, 1, 0); +INSERT INTO `bb_cron` VALUES (3, 1, 'Attach maintenance', 'attach_maintenance.php', 'daily', NULL, '05:00:00', 40, '', '', NULL, 1, '', 0, 1, 0); INSERT INTO `bb_cron` VALUES (4, 1, 'Board maintenance', 'bb_maintenance.php', 'daily', NULL, '05:00:00', 40, '', '', NULL, 1, '', 0, 1, 0); INSERT INTO `bb_cron` VALUES (5, 1, 'Prune forums', 'prune_forums.php', 'daily', NULL, '05:00:00', 50, '', '', NULL, 1, '', 0, 1, 0); INSERT INTO `bb_cron` VALUES (6, 1, 'Prune topic moved stubs', 'prune_topic_moved.php', 'daily', NULL, '05:00:00', 60, '', '', NULL, 1, '', 0, 1, 0); @@ -659,7 +650,6 @@ INSERT INTO `bb_cron` VALUES (18, 1, 'Seeder last seen', 'tr_update_seeder_last_ INSERT INTO `bb_cron` VALUES (19, 1, 'Captcha', 'captcha_gen_gc.php', 'daily', NULL, '05:00:00', 120, '', '', NULL, 0, '', 0, 0, 0); INSERT INTO `bb_cron` VALUES (20, 1, 'Tracker dl-complete count', 'tr_complete_count.php', 'interval', NULL, NULL, 255, '', '', '06:00:00', 0, '', 0, 0, 0); INSERT INTO `bb_cron` VALUES (21, 1, 'Cache garbage collector', 'cache_gc.php', 'interval', NULL, NULL, 255, '', '', '00:05:00', 0, '', 0, 0, 0); -INSERT INTO `bb_cron` VALUES (22, 1, 'Attach maintenance', 'attach_maintenance.php', 'daily', NULL, '05:00:00', 40, '', '', NULL, 1, '', 0, 1, 0); -- -------------------------------------------------------- @@ -950,7 +940,7 @@ CREATE TABLE IF NOT EXISTS `bb_posts_text` ( -- Дамп данных таблицы `bb_posts_text` -- -INSERT INTO `bb_posts_text` VALUES (1, '[list]\n[*]Переделан поиск по топикам с выбором типа [none, mysql, sphinx] (только в tracker.php)\n[*]Удалены bbcode_uid и переход на class.bbcode\n[*]Изменён метод и способ кеширования (memcache, sqlite, db_sqlite, redis, eaccelerator, apc, xcache, filecache)\n[*]Изменён способ подключения к БД и отказ от глобальной переменной $db\n[*]Улучшенный дебагер\n[*]Полностью переписан и упрощен файл регистрации\n[*]Переписана капча (в том числе при быстром ответе у гостя)\n[*]Удаление файлов torrent.php и torstatus.php и перенос их функций в ajax\n[*]Ajax цитирование, изменение, редактирование, удаление сообщений\n[/list]'); +INSERT INTO `bb_posts_text` VALUES (1, '[list]\n[*]Переделан поиск по топикам с выбором типа [none, mysql, sphinx] (только в tracker.php)\n[*]Удалены bbcode_uid и переход на class.bbcode\n[*]Изменен метод и способ кеширования (memcache, sqlite, db_sqlite, redis, eaccelerator, apc, xcache, filecache)\n[*]Изменен способ подключения к БД и отказ от глобальной переменной $db\n[*]Улучшенный дебагер\n[*]Полностью переписан и упрощен файл регистрации\n[*]Переписана капча (в том числе при быстром ответе у гостя)\n[*]Удаление файлов torrent.php и torstatus.php и перенос их функций в ajax\n[*]Ajax цитирование, изменение, редактирование, удаление сообщений\n[/list]'); -- -------------------------------------------------------- @@ -1383,8 +1373,7 @@ CREATE TABLE IF NOT EXISTS `bb_users` ( `user_last_privmsg` int(11) NOT NULL DEFAULT '0', `user_opt` int(11) NOT NULL DEFAULT '0', `user_rank` int(11) NOT NULL DEFAULT '0', - `user_avatar` varchar(100) NOT NULL DEFAULT '', - `user_avatar_type` tinyint(4) NOT NULL DEFAULT '0', + `avatar_ext_id` tinyint(4) NOT NULL, `user_gender` tinyint(1) NOT NULL DEFAULT '0', `user_birthday` date NOT NULL DEFAULT '0000-00-00', `user_next_birthday_greeting` int(11) NOT NULL DEFAULT '0', @@ -1412,9 +1401,9 @@ CREATE TABLE IF NOT EXISTS `bb_users` ( -- Дамп данных таблицы `bb_users` -- -INSERT INTO `bb_users` VALUES (-1, 0, 'Guest', 'd41d8cd98f00b204e9800998ecf8427e', 0, 0, '0', 0, '0', 0, 0, 0.00, '', 0, 0, 0, 0, 0, '', 0, 0, 0, 0, '', '', '', '', '', '', '', '', '', '', '', 0, 0, 'default'); -INSERT INTO `bb_users` VALUES (2, 1, 'admin', 'c3284d0f94606de1fd2af172aba15bf3', 0, 0, '0', 0, '0', 1, 1, 4.00, '', 0, 0, 0, 304, 1, '', 1, 0, 0, 0, 'admin@admin.com', '', '', '', '', '', '', '', '', '', '', 0, 0, 'default'); -INSERT INTO `bb_users` VALUES (-746, 0, 'bot', 'd41d8cd98f00b204e9800998ecf8427e', 0, 0, '0', 0, '0', 0, 0, 0.00, '', 0, 0, 0, 144, 0, 'bot.gif', 1, 0, 0, 0, 'bot@bot.bot', '', '', '', '', '', '', '', '', '', '', 0, 0, 'default'); +INSERT INTO `bb_users` VALUES (-1, 0, 'Guest', 'd41d8cd98f00b204e9800998ecf8427e', 0, 0, '0', 0, '0', 0, 0, 0.00, '', 0, 0, 0, 0, 0, '', 0, 0, 0, '', '', '', '', '', '', '', '', '', '', '', 0, 0, 'default'); +INSERT INTO `bb_users` VALUES (2, 1, 'admin', 'c3284d0f94606de1fd2af172aba15bf3', 0, 0, '0', 0, '0', 1, 1, 4.00, '', 0, 0, 0, 304, 1, '', 0, 0, 0, 'admin@admin.com', '', '', '', '', '', '', '', '', '', '', 0, 0, 'default'); +INSERT INTO `bb_users` VALUES (-746, 0, 'bot', 'd41d8cd98f00b204e9800998ecf8427e', 0, 0, '0', 0, '0', 0, 0, 0.00, '', 0, 0, 0, 144, 0, '', 0, 0, 0, 'bot@bot.bot', '', '', '', '', '', '', '', '', '', '', 0, 0, 'default'); -- -------------------------------------------------------- diff --git a/upgrade/r583-convert_avatars.php b/upgrade/r583-convert_avatars.php new file mode 100644 index 000000000..4afd8c727 --- /dev/null +++ b/upgrade/r583-convert_avatars.php @@ -0,0 +1,93 @@ +session_start(); + +set_die_append_msg(); +if (!IS_SUPER_ADMIN) bb_die($lang['ONLY_FOR_SUPER_ADMIN']); + +$confirm = request_var('confirm', ''); + +if ($confirm) +{ + DB()->query("ALTER TABLE ". BB_USERS ." ADD `avatar_ext_id` TINYINT( 4 ) NOT NULL AFTER `user_rank`"); + + $rows_per_cycle = 10000; + + $row = DB()->fetch_row("SELECT MAX(user_id) AS end_id FROM ". BB_USERS); + $end_id = (int) $row['end_id']; + $start = $avatars_ok = $avatars_err = 0; + + echo "
\n";
+
+	while (true)
+	{
+		set_time_limit(600);
+		echo "$start [ $avatars_ok / $avatars_err ]\n";
+		$end = $start + $rows_per_cycle - 1;
+		$sql = "
+			SELECT user_id, avatar_ext_id, user_avatar
+			FROM ". BB_USERS ."
+			WHERE user_avatar != ''
+				AND avatar_ext_id = 0
+				AND user_id BETWEEN $start AND $end
+			ORDER BY NULL
+		";
+
+		foreach (DB()->fetch_rowset($sql) as $row)
+		{
+			$FILE = array(
+				'name'     => '',
+				'type'     => '',
+				'size'     => 0,
+				'tmp_name' => BB_ROOT . $bb_cfg['avatar_path'] .'/'. basename($row['user_avatar']),
+				'error'    => 0,
+			);
+			$upload = new upload_common();
+
+			if ($upload->init($bb_cfg['avatars'], $FILE, false) AND $upload->store('avatar', $row))
+			{
+				DB()->query("UPDATE ". BB_USERS ." SET avatar_ext_id = {$upload->file_ext_id} WHERE user_id = {$row['user_id']} LIMIT 1");
+				$avatars_ok++;
+			}
+			else
+			{
+				echo "{$row['user_id']}: ", join("\n{$row['user_id']}: ", $upload->errors), "\n";
+				$avatars_err++;
+			}
+		}
+
+		if ($end > $end_id)
+		{
+			break;
+		}
+		$start += $rows_per_cycle;
+		sleep(1);
+	}
+
+	echo "---------- База данных успешно обновлена. Аватары указанных выше пользователей перенесены не были. ----------\n";
+
+	DB()->query("ALTER TABLE ". BB_USERS ." DROP `user_avatar`");
+	DB()->query("ALTER TABLE ". BB_USERS ." DROP `user_avatar_type`");
+}
+else
+{
+	$msg = '
'; + $msg .= '

Перед тем как нажать на кнопку, сделайте бекап базы данных! В ходе обновления базы данных, произойдет автоматическая конвертация имеющихся аватаров пользователей + по новому алгоритму. Для конвертации аватарка пользователя должна соответствовать текущим значениям из конфига: ширина не более '.$bb_cfg['avatars']['max_width'].' пикселов, высота не более '.$bb_cfg['avatars']['max_height'].' пикселов + и объем не более '.$bb_cfg['avatars']['max_size'].' байт. Если эти условия не соблюдены - аватарка пользователя не будет конвертирована и пользователю придется залить ее заново! Если вы хотите поправить указанные + значения - ПЕРЕД обновлением базы данных сделайте это в config.php!


'; + $msg .= ''; + $msg .= '
'; + + bb_die($msg); +} \ No newline at end of file diff --git a/upload/admin/admin_board.php b/upload/admin/admin_board.php index 1305e52eb..b6bc58ae9 100644 --- a/upload/admin/admin_board.php +++ b/upload/admin/admin_board.php @@ -38,16 +38,6 @@ else $new[$config_name] = isset($_POST[$config_name]) ? $_POST[$config_name] : $default_config[$config_name]; - // Attempt to prevent a mistake with this value. - if ($config_name == 'avatar_path') - { - $new['avatar_path'] = trim($new['avatar_path']); - if (strstr($new['avatar_path'], "\0") || !is_dir(BB_ROOT . $new['avatar_path']) || !is_writable(BB_ROOT . $new['avatar_path'])) - { - $new['avatar_path'] = $default_config['avatar_path']; - } - } - if (isset($_POST['submit']) && $row['config_value'] != $new[$config_name]) { if ($config_name == 'seed_bonus_points' || $config_name == 'seed_bonus_release') $new[$config_name] = serialize($new[$config_name]); @@ -146,13 +136,6 @@ switch($mode) 'CONFIG_SITE_DESCRIPTION' => htmlCHR($new['site_desc']), 'DISABLE_BOARD' => ($new['board_disable']) ? true : false, - 'ACTIVATION_NONE' => USER_ACTIVATION_NONE, - 'ACTIVATION_NONE_CHECKED' => ($new['require_activation'] == USER_ACTIVATION_NONE) ? 'checked="checked"' : '', - 'ACTIVATION_USER' => USER_ACTIVATION_SELF, - 'ACTIVATION_USER_CHECKED' => ($new['require_activation'] == USER_ACTIVATION_SELF) ? 'checked="checked"' : '', - 'ACTIVATION_ADMIN' => USER_ACTIVATION_ADMIN, - 'ACTIVATION_ADMIN_CHECKED' => ($new['require_activation'] == USER_ACTIVATION_ADMIN) ? 'checked="checked"' : '', - 'ALLOW_AUTOLOGIN' => ($new['allow_autologin']) ? true : false, 'AUTOLOGIN_TIME' => (int) $new['max_autologin_time'], 'MAX_POLL_OPTIONS' => $new['max_poll_options'], @@ -171,14 +154,6 @@ switch($mode) 'ALLOW_SIG' => ($new['allow_sig']) ? true : false, 'SIG_SIZE' => $new['max_sig_chars'], 'ALLOW_NAMECHANGE' => ($new['allow_namechange']) ? true : false, - 'ALLOW_AVATARS_LOCAL' => ($new['allow_avatar_local']) ? true : false, - 'ALLOW_AVATAR_UPLOAD' => ($new['allow_avatar_upload']) ? true : false, - 'AVATAR_FILESIZE' => $new['avatar_filesize'], - 'AVATAR_MAX_HEIGHT' => $new['avatar_max_height'], - 'AVATAR_MAX_WIDTH' => $new['avatar_max_width'], - 'AVATAR_PATH' => $new['avatar_path'], - 'AVATAR_GALLERY_PATH' => $new['avatar_gallery_path'], - 'NO_AVATAR' => $new['no_avatar'], 'SMILIES_PATH' => $new['smilies_path'], )); break; diff --git a/upload/admin/admin_forums.php b/upload/admin/admin_forums.php index 85f9ac55d..a91f0de1b 100644 --- a/upload/admin/admin_forums.php +++ b/upload/admin/admin_forums.php @@ -9,7 +9,9 @@ if (!empty($setmodules)) require('./pagestart.php'); // ACP Header - END -require(INC_DIR .'functions_group.php'); +require(INC_DIR .'functions_group.php'); + +array_deep($_POST, 'trim'); $s = ''; @@ -126,11 +128,6 @@ if ($mode) $forumstatus == ( FORUM_LOCKED ) ? $forumlocked = 'selected="selected"' : $forumunlocked = 'selected="selected"'; - // These two options ($lang['STATUS_UNLOCKED'] and $lang['STATUS_LOCKED']) seem to be missing from - // the language files. - $lang['STATUS_UNLOCKED'] = isset($lang['STATUS_UNLOCKED']) ? $lang['STATUS_UNLOCKED'] : 'Unlocked'; - $lang['STATUS_LOCKED'] = isset($lang['STATUS_LOCKED']) ? $lang['STATUS_LOCKED'] : 'Locked'; - $statuslist = '\n'; $statuslist .= '\n'; @@ -176,8 +173,8 @@ if ($mode) // Create a forum in the DB // $cat_id = intval($_POST[POST_CAT_URL]); - $forum_name = DB()->escape(trim($_POST['forumname'])); - $forum_desc = DB()->escape(trim($_POST['forumdesc'])); + $forum_name = (string) $_POST['forumname']; + $forum_desc = (string) $_POST['forumdesc']; $forum_status = intval($_POST['forumstatus']); $prune_days = intval($_POST['prune_days']); @@ -224,8 +221,11 @@ if ($mode) $value_sql .= ", $value"; } + $forum_name_sql = DB()->escape($forum_name); + $forum_desc_sql = DB()->escape($forum_desc); + $columns = ' forum_name, cat_id, forum_desc, forum_order, forum_status, prune_days, forum_parent, show_on_index, forum_display_sort, forum_display_order, forum_tpl_id, allow_reg_tracker, allow_porno_topic, self_moderated'. $field_sql; - $values = "'$forum_name', $cat_id, '$forum_desc', $forum_order, $forum_status, $prune_days, $forum_parent, $show_on_index, $forum_display_sort, $forum_display_order, $forum_tpl_id, $allow_reg_tracker, $allow_porno_topic, $self_moderated". $value_sql; + $values = "'$forum_name_sql', $cat_id, '$forum_desc_sql', $forum_order, $forum_status, $prune_days, $forum_parent, $show_on_index, $forum_display_sort, $forum_display_order, $forum_tpl_id, $allow_reg_tracker, $allow_porno_topic, $self_moderated". $value_sql; DB()->query("INSERT INTO ". BB_FORUMS ." ($columns) VALUES ($values)"); @@ -243,8 +243,8 @@ if ($mode) // $cat_id = intval($_POST[POST_CAT_URL]); $forum_id = intval($_POST[POST_FORUM_URL]); - $forum_name = DB()->escape(trim($_POST['forumname'])); - $forum_desc = DB()->escape(trim($_POST['forumdesc'])); + $forum_name = (string) $_POST['forumname']; + $forum_desc = (string) $_POST['forumdesc']; $forum_status = intval($_POST['forumstatus']); $prune_days = intval($_POST['prune_days']); @@ -294,11 +294,14 @@ if ($mode) $forum_order = $cat_forums[$old_cat_id]['f'][$old_parent]['forum_order'] - 5; } + $forum_name_sql = DB()->escape($forum_name); + $forum_desc_sql = DB()->escape($forum_desc); + DB()->query(" UPDATE ". BB_FORUMS ." SET - forum_name = '$forum_name', + forum_name = '$forum_name_sql', cat_id = $cat_id, - forum_desc = '$forum_desc', + forum_desc = '$forum_desc_sql', forum_order = $forum_order, forum_status = $forum_status, prune_days = $prune_days, @@ -469,26 +472,26 @@ if ($mode) message_die(GENERAL_ERROR, "Ambiguous forum ID's", "", __LINE__, __FILE__); } - // Update topics - DB()->query(" - UPDATE ". BB_TOPICS ." SET - forum_id = $to_id - WHERE forum_id = $from_id - "); + DB()->query("UPDATE ". BB_TOPICS ." SET forum_id = $to_id WHERE forum_id = $from_id"); + DB()->query("UPDATE ". BB_BT_TORRENTS ." SET forum_id = $to_id WHERE forum_id = $from_id"); - // Update posts - DB()->query(" - UPDATE ". BB_POSTS ." SET - forum_id = $to_id - WHERE forum_id = $from_id - "); - - // Update torrents - DB()->query(" - UPDATE ". BB_BT_TORRENTS ." SET - forum_id = $to_id - WHERE forum_id = $from_id - "); + $row = DB()->fetch_row("SELECT MIN(post_id) AS start_id, MAX(post_id) AS finish_id FROM ". BB_POSTS); + $start_id = (int) $row['start_id']; + $finish_id = (int) $row['finish_id']; + $per_cycle = 10000; + while (true) + { + set_time_limit(600); + $end_id = $start_id + $per_cycle - 1; + DB()->query(" + UPDATE ". BB_POSTS ." SET forum_id = $to_id WHERE post_id BETWEEN $start_id AND $end_id AND forum_id = $from_id + "); + if ($end_id > $finish_id) + { + break; + } + $start_id += $per_cycle; + } sync('forum', $to_id); } @@ -607,6 +610,7 @@ if ($mode) { if ($forum_info['forum_parent'] && $prev_forum['forum_parent'] != $forum_info['forum_parent']) { + $show_main_page = true; break; } else if ($move_down_forum_id = get_prev_root_forum_id($forums, $forum_order)) @@ -622,6 +626,7 @@ if ($mode) { if ($forum_info['forum_parent'] && $next_forum['forum_parent'] != $forum_info['forum_parent']) { + $show_main_page = true; break; } else if ($move_up_forum_id = get_next_root_forum_id($forums, $forum_order)) @@ -640,36 +645,26 @@ if ($mode) if ($forum_info['forum_parent']) { - $sql = 'UPDATE ' . BB_FORUMS . " SET + DB()->query(" + UPDATE ". BB_FORUMS ." SET forum_order = forum_order + $move - WHERE forum_id = $forum_id"; - - if (!DB()->sql_query($sql)) - { - message_die(GENERAL_ERROR, "Couldn't change forum order", '', __LINE__, __FILE__, $sql); - } + WHERE forum_id = $forum_id + "); } else if ($move_down_forum_id) { - $sql = 'UPDATE '. BB_FORUMS ." SET + DB()->query(" + UPDATE ". BB_FORUMS ." SET forum_order = forum_order + $move_down_ord_val WHERE cat_id = $cat_id - AND forum_order >= $move_down_forum_order"; - - if (!DB()->sql_query($sql)) - { - message_die(GENERAL_ERROR, "Couldn't change forum order", '', __LINE__, __FILE__, $sql); - } - - $sql = 'UPDATE '. BB_FORUMS ." SET + AND forum_order >= $move_down_forum_order + "); + DB()->query(" + UPDATE ". BB_FORUMS ." SET forum_order = forum_order - $move_up_ord_val WHERE forum_id = $move_up_forum_id - OR forum_parent = $move_up_forum_id"; - - if (!DB()->sql_query($sql)) - { - message_die(GENERAL_ERROR, "Couldn't change forum order", '', __LINE__, __FILE__, $sql); - } + OR forum_parent = $move_up_forum_id + "); } renumber_order('forum', $forum_info['cat_id']); @@ -773,13 +768,14 @@ if (!$mode || $show_main_page) $template->assign_vars(array( 'U_ALL_FORUMS' => "admin_forums.php?c=all", + 'FORUMS_COUNT' => $total_forums, )); for($i = 0; $i < $total_categories; $i++) { $cat_id = $category_rows[$i]['cat_id']; - $template->assign_block_vars('catrow', array( + $template->assign_block_vars("c", array( 'S_ADD_FORUM_SUBMIT' => "addforum[$cat_id]", 'S_ADD_FORUM_NAME' => "forumname[$cat_id]", @@ -804,7 +800,7 @@ if (!$mode || $show_main_page) if ($forum_rows[$j]['cat_id'] == $cat_id) { - $template->assign_block_vars('catrow.forumrow', array( + $template->assign_block_vars("c.f", array( 'FORUM_NAME' => htmlCHR($forum_rows[$j]['forum_name']), 'FORUM_DESC' => htmlCHR($forum_rows[$j]['forum_desc']), 'NUM_TOPICS' => $forum_rows[$j]['forum_topics'], @@ -822,6 +818,7 @@ if (!$mode || $show_main_page) 'ADD_SUB_HREF' => "admin_forums.php?mode=addforum&forum_parent={$forum_rows[$j]['forum_id']}", 'U_VIEWFORUM' => BB_ROOT ."viewforum.php?f=$forum_id", 'U_FORUM_EDIT' => "admin_forums.php?mode=editforum&f=$forum_id", + 'U_FORUM_PERM' => "admin_forumauth.php?f=$forum_id", 'U_FORUM_DELETE' => "admin_forums.php?mode=deleteforum&f=$forum_id", 'U_FORUM_MOVE_UP' => "admin_forums.php?mode=forum_order&move=-15&f=$forum_id&c=$req_cat_id", 'U_FORUM_MOVE_DOWN' => "admin_forums.php?mode=forum_order&move=15&f=$forum_id&c=$req_cat_id", @@ -925,16 +922,17 @@ function get_list($mode, $id, $select) $catlist = ''; - while( $row = DB()->sql_fetchrow($result) ) - { - $s = ''; - if ($row[$idfield] == $id) - { - $s = ' selected="selected"'; - } - $catlist .= '\n'; - } - return($catlist); + while( $row = DB()->sql_fetchrow($result) ) + { + $s = ''; + if ($row[$idfield] == $id) + { + $s = ' selected="selected"'; + } + $catlist .= '\n'; + } + + return($catlist); } function renumber_order($mode, $cat = 0) diff --git a/upload/ajax.php b/upload/ajax.php index 079eb7c05..b4d77410b 100644 --- a/upload/ajax.php +++ b/upload/ajax.php @@ -83,6 +83,7 @@ class ajax_common 'group_membership' => array('mod'), 'post_mod_comment' => array('mod'), + 'avatar' => array('user'), 'gen_passkey' => array('user'), 'change_torrent' => array('user'), 'change_tor_status' => array('user'), @@ -399,4 +400,9 @@ class ajax_common { require(AJAX_DIR . 'view_profile.php'); } + + function avatar() + { + require(AJAX_DIR . 'avatar.php'); + } } \ No newline at end of file diff --git a/upload/ajax/avatar.php b/upload/ajax/avatar.php new file mode 100644 index 000000000..cbd0e053a --- /dev/null +++ b/upload/ajax/avatar.php @@ -0,0 +1,33 @@ +request['mode']; +$user_id = (int) $this->request['user_id']; + +if (!$user_id OR !$u_data = get_userdata($user_id)) +{ + $this->ajax_die('invalid user_id'); +} + +if (!IS_ADMIN && $user_id != $user->id) +{ + $this->ajax_die('Не админ'); +} + +switch ($mode) +{ + case 'delete': + delete_avatar($user_id, $u_data['avatar_ext_id']); + $new_ext_id = 0; + $response = 'Аватар: удален'; + break; + default: + $this->ajax_die('invalid mode'); +} + +DB()->query("UPDATE ". BB_USERS ." SET avatar_ext_id = $new_ext_id WHERE user_id = $user_id LIMIT 1"); + +cache_rm_user_sessions($user_id); + +$this->response['avatar_html'] = $response; \ No newline at end of file diff --git a/upload/ajax/group_membership.php b/upload/ajax/group_membership.php index a1fe0963c..ad9c0459d 100644 --- a/upload/ajax/group_membership.php +++ b/upload/ajax/group_membership.php @@ -40,7 +40,7 @@ switch ($mode) } else { - // скрытая группа и сам юзер не является её членом + // скрытая группа и сам юзер не является ее членом if ($row['group_type'] == GROUP_HIDDEN && !$row['can_view']) { continue; diff --git a/upload/ajax/manage_admin.php b/upload/ajax/manage_admin.php index b1b33b6d0..1c1b70d76 100644 --- a/upload/ajax/manage_admin.php +++ b/upload/ajax/manage_admin.php @@ -96,7 +96,7 @@ switch ($mode) case 'sync_topics': sync('topic', 'all'); - sync('forum', 'all'); + sync_all_forums(); $this->response['sync_topics_html'] = ''. $lang['TOPICS_DATA_SYNCHRONIZED'] .''; diff --git a/upload/attach_mod/displaying_torrent.php b/upload/attach_mod/displaying_torrent.php index 8d434d33a..2cfe7989d 100644 --- a/upload/attach_mod/displaying_torrent.php +++ b/upload/attach_mod/displaying_torrent.php @@ -493,15 +493,19 @@ if ($tor_reged && $tor_info) $tr[$x]++; $template->assign_block_vars("$x_full.$x_row", array( - 'ROW_BGR' => $row_bgr, - 'NAME' => ($peer['update_time']) ? $name : "$name", - 'COMPL_PRC' => $compl_perc, - 'UP_TOTAL' => ($max_up_id[$x] == $pid) ? "$up_tot" : $up_tot, - 'DOWN_TOTAL' => ($max_down_id[$x] == $pid) ? "$down_tot" : $down_tot, - 'SPEED_UP' => ($max_sp_up_id[$x] == $pid) ? "$sp_up" : $sp_up, - 'SPEED_DOWN' => ($max_sp_down_id[$x] == $pid) ? "$sp_down" : $sp_down, - 'UPD_EXP_TIME' => ($peer['update_time']) ? $lang['DL_UPD'] . bb_date($peer['update_time'], 'd-M-y H:i') .' · '. delta_time($peer['update_time']) . $lang['TOR_BACK'] : $lang['DL_STOPPED'], - 'TOR_RATIO' => ($up_ratio) ? "UL/DL ratio: $up_ratio" : '', + 'ROW_BGR' => $row_bgr, + 'NAME' => ($peer['update_time']) ? $name : "$name", + 'COMPL_PRC' => $compl_perc, + 'UP_TOTAL' => ($max_up_id[$x] == $pid) ? "$up_tot" : $up_tot, + 'DOWN_TOTAL' => ($max_down_id[$x] == $pid) ? "$down_tot" : $down_tot, + 'SPEED_UP' => ($max_sp_up_id[$x] == $pid) ? "$sp_up" : $sp_up, + 'SPEED_DOWN' => ($max_sp_down_id[$x] == $pid) ? "$sp_down" : $sp_down, + 'UP_TOTAL_RAW' => $peer['uploaded'], + 'DOWN_TOTAL_RAW' => $peer['downloaded'], + 'SPEED_UP_RAW' => $peer['speed_up'], + 'SPEED_DOWN_RAW' => $peer['speed_down'], + 'UPD_EXP_TIME' => ($peer['update_time']) ? $lang['DL_UPD'] . bb_date($peer['update_time'], 'd-M-y H:i') .' · '. delta_time($peer['update_time']) . $lang['TOR_BACK'] : $lang['DL_STOPPED'], + 'TOR_RATIO' => ($up_ratio) ? $lang['USER_RATIO'] . "UL/DL: $up_ratio" : '', )); if ($ip) diff --git a/upload/config.php b/upload/config.php index 8bfdfedb8..539b0cc86 100644 --- a/upload/config.php +++ b/upload/config.php @@ -55,8 +55,8 @@ $domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $do // Increase number of revision after update $bb_cfg['tp_version'] = '2.6 (RC)'; -$bb_cfg['tp_release_date'] = '09-02-2014'; -$bb_cfg['tp_release_state'] = 'R582'; +$bb_cfg['tp_release_date'] = '11-02-2014'; +$bb_cfg['tp_release_state'] = 'R583'; // Database $charset = 'utf8'; @@ -314,10 +314,11 @@ $bb_cfg['max_last_visit_days'] = 14; // days $bb_cfg['last_visit_update_intrv'] = 3600; // sec // Registration -$bb_cfg['invalid_logins'] = 5; // Кол-во неверных попыток ввода пароля, перед выводом проверки капчи -$bb_cfg['new_user_reg_disabled'] = false; // Disable new user registrations -$bb_cfg['unique_ip'] = false; // Deny registration of several accounts by one ip -$bb_cfg['new_user_reg_restricted'] = false; +$bb_cfg['invalid_logins'] = 5; // Количество неверных попыток ввода пароля, перед выводом проверки капчей +$bb_cfg['new_user_reg_disabled'] = false; // Запретить регистрацию новых учетных записей +$bb_cfg['unique_ip'] = false; // Запретить регистрацию нескольких учетных записей с одного ip +$bb_cfg['new_user_reg_restricted'] = false; // Ограничить регистрацию новых пользователей по времени с 01:00 до 17:00 +$bb_cfg['reg_email_activation'] = false; // Требовать активацию учетной записи по email // Email $bb_cfg['emailer_disabled'] = false; @@ -513,6 +514,39 @@ $bb_cfg['ad_blocks'] = array( ), ); +// Attachments +$bb_cfg['attach'] = array( + 'upload_path' => BB_ROOT . 'torrents', // without '/' + 'max_size' => 250*1024, // bytes +); + +$bb_cfg['file_id_ext'] = array( + 1 => 'gif', + 2 => 'gz', + 3 => 'jpg', + 4 => 'png', + 5 => 'rar', + 6 => 'tar', + 7 => 'tiff', + 8 => 'torrent', + 9 => 'zip', +); + +$bb_cfg['tor_forums_allowed_ext'] = array('torrent', 'zip', 'rar'); // для разделов с раздачами +$bb_cfg['gen_forums_allowed_ext'] = array('zip', 'rar'); // для обычных разделов + +// Avatars +$bb_cfg['avatars'] = array( + 'allowed_ext' => array('gif','jpg','png'), // разрешенные форматы файлов + 'bot_avatar' => 'gallery/bot.gif', // аватара бота + 'max_size' => 15*1024, // размер аватары в байтах + 'max_height' => 100, // высота аватара в px + 'max_width' => 100, // ширина аватара в px + 'no_avatar' => 'gallery/noavatar.png', // дефолтная аватара + 'upload_path' => BB_ROOT . 'images/avatars/', // путь к директории с аватарами + 'up_allowed' => true, // разрешить загрузку аватар +); + // Misc define('MEM_USAGE', function_exists('memory_get_usage')); diff --git a/upload/images/avatars/bot.gif b/upload/images/avatars/gallery/bot.gif similarity index 100% rename from upload/images/avatars/bot.gif rename to upload/images/avatars/gallery/bot.gif diff --git a/upload/includes/cron/cron_run.php b/upload/includes/cron/cron_run.php index 116b143f5..90ecf8108 100644 --- a/upload/includes/cron/cron_run.php +++ b/upload/includes/cron/cron_run.php @@ -48,6 +48,7 @@ foreach ($cron_jobs as $job) $msg[] = 'start'; $msg[] = date('m-d'); $msg[] = date('H:i:s'); + $msg[] = sprintf('%-4s', round(sys('la'), 1)); $msg[] = sprintf('%05d', getmypid()); $msg[] = $job['cron_title']; $msg = join(LOG_SEPR, $msg); @@ -59,7 +60,7 @@ foreach ($cron_jobs as $job) DB()->log_next_query(100000, $cron_sql_log_file); } - @set_time_limit(600); + set_time_limit(600); require($job_script); if ($job['log_sql_queries']) @@ -74,6 +75,7 @@ foreach ($cron_jobs as $job) $msg[] = ' end'; $msg[] = date('m-d'); $msg[] = date('H:i:s'); + $msg[] = sprintf('%-4s', round(sys('la'), 1)); $msg[] = sprintf('%05d', getmypid()); $msg[] = round(utime() - $cron_start_time) .'/'. round(utime() - TIMESTART) . ' sec'; $msg = join(LOG_SEPR, $msg); @@ -112,7 +114,12 @@ foreach ($cron_jobs as $job) LIMIT 1 "); - sleep(3); + sleep(1); + + if (utime() - TIMESTART > 600) + { + return; // чтобы daily скрипты не блокировали надолго interval'ные + } } else { diff --git a/upload/includes/cron/jobs/avatars_cleanup.php b/upload/includes/cron/jobs/avatars_cleanup.php deleted file mode 100644 index 3b7cfbed1..000000000 --- a/upload/includes/cron/jobs/avatars_cleanup.php +++ /dev/null @@ -1,117 +0,0 @@ -query(" - CREATE TEMPORARY TABLE $tmp_tbl ( - user_avatar VARCHAR(255) NOT NULL default '', - KEY user_avatar (user_avatar(20)) - ) ENGINE = MyISAM DEFAULT CHARSET = utf8 -"); - -DB()->query("ALTER TABLE ". BB_USERS ." ADD INDEX user_avatar(user_avatar(10))"); - -$avatars_dir = BB_ROOT . $bb_cfg['avatar_path']; - -// Get all names of existed avatars and insert them into $tmp_tbl -if ($dir = @opendir($avatars_dir)) -{ - $check_avatars = true; - $files = array(); - $f_len = 0; - - while (false !== ($f = readdir($dir))) - { - if ($f == 'index.php' || $f == '.htaccess' || is_dir("$avatars_dir/$f") || is_link("$avatars_dir/$f")) - { - continue; - } - $f = DB()->escape($f); - $files[] = "('$f')"; - $f_len += strlen($f) + 5; - - if ($f_len > $db_max_packet) - { - $files = join(',', $files); - DB()->query("INSERT INTO $tmp_tbl VALUES $files"); - $files = array(); - $f_len = 0; - } - } - if ($files = join(',', $files)) - { - DB()->query("INSERT INTO $tmp_tbl VALUES $files"); - } - closedir($dir); -} - -if ($check_avatars) -{ - // Delete avatars that exist in file system but not exist in DB - $sql = "SELECT f.user_avatar - FROM $tmp_tbl f - LEFT JOIN ". BB_USERS ." u USING(user_avatar) - WHERE u.user_avatar IS NULL - LIMIT $sql_limit"; - - foreach (DB()->fetch_rowset($sql) as $row) - { - if ($filename = basename($row['user_avatar'])) - { - if ($fix_errors) - { - @unlink("$avatars_dir/$filename"); - } - if ($debug_mode) - { - $orphan_files[] = "$avatars_dir/$filename"; - } - } - } - // Find DB records for avatars that exist in DB but not exist in file system - $sql = "SELECT u.user_id - FROM ". BB_USERS ." u - LEFT JOIN $tmp_tbl f USING(user_avatar) - WHERE u.user_avatar_type = ". USER_AVATAR_UPLOAD ." - AND f.user_avatar IS NULL - LIMIT $sql_limit"; - - foreach (DB()->fetch_rowset($sql) as $row) - { - $orphan_db_avatars[] = $row['user_id']; - } - // Delete all orphan avatars from DB - if ($orphans_sql = join(',', $orphan_db_avatars)) - { - if ($fix_errors) - { - DB()->query(" - UPDATE ". BB_USERS ." SET - user_avatar = '', - user_avatar_type = ". USER_AVATAR_NONE ." - WHERE user_id IN($orphans_sql) - "); - } - } -} - -if ($debug_mode) -{ - prn_r($orphan_files, '$orphan_files'); - prn_r($orphan_db_avatars, '$orphan_db_avatars'); -} - -DB()->query("DROP TEMPORARY TABLE $tmp_tbl"); -DB()->query("ALTER TABLE ". BB_USERS ." DROP INDEX user_avatar"); - -unset($fix_errors, $debug_mode); \ No newline at end of file diff --git a/upload/includes/cron/jobs/bb_maintenance.php b/upload/includes/cron/jobs/bb_maintenance.php index 95602372f..fb14a1b16 100644 --- a/upload/includes/cron/jobs/bb_maintenance.php +++ b/upload/includes/cron/jobs/bb_maintenance.php @@ -6,8 +6,8 @@ require_once(INC_DIR .'functions_admin.php'); // Синхронизация sync('topic', 'all'); -sync('forum', 'all'); sync('user_posts', 'all'); +sync_all_forums(); // Чистка bb_poll_users if ($poll_max_days = (int) $bb_cfg['poll_max_days']) diff --git a/upload/includes/cron/jobs/cache_gc.php b/upload/includes/cron/jobs/cache_gc.php index 56fac64bf..bab507271 100644 --- a/upload/includes/cron/jobs/cache_gc.php +++ b/upload/includes/cron/jobs/cache_gc.php @@ -16,6 +16,6 @@ foreach ($gc_cache as $cache_name) if (method_exists(CACHE($cache_name), 'gc')) { $changes = CACHE($cache_name)->gc(); - $cron_runtime_log .= date('Y-m-d H:i:s') ." -- ". str_pad("$cache_name ", 25, '-', STR_PAD_RIGHT) ." del: $changes\n"; + $cron_runtime_log = date('Y-m-d H:i:s') ." -- ". str_pad("$cache_name ", 25, '-', STR_PAD_RIGHT) ." del: $changes\n"; } } \ No newline at end of file diff --git a/upload/includes/functions.php b/upload/includes/functions.php index 00d0f2351..6a14a2f4e 100644 --- a/upload/includes/functions.php +++ b/upload/includes/functions.php @@ -2,6 +2,31 @@ if (!defined('BB_ROOT')) die(basename(__FILE__)); +function get_path_from_id ($id, $ext_id, $base_path, $first_div, $sec_div) +{ + global $bb_cfg; + $ext = isset($bb_cfg['file_id_ext'][$ext_id]) ? $bb_cfg['file_id_ext'][$ext_id] : ''; + return ($base_path ? "$base_path/" : '') . floor($id/$first_div) .'/'. ($id % $sec_div) .'/'. $id . ($ext ? ".$ext" : ''); +} + +function get_avatar_path ($id, $ext_id, $base_path = '') +{ + return get_path_from_id($id, $ext_id, $base_path, 5000000, 100); +} + +function delete_avatar ($user_id, $avatar_ext_id) +{ + global $bb_cfg; + $avatar_file = ($avatar_ext_id) ? get_avatar_path($user_id, $avatar_ext_id, $bb_cfg['avatars']['upload_path']) : ''; + return ($avatar_file && file_exists($avatar_file)) ? @unlink($avatar_file) : false; +} + +function get_attach_path ($id) +{ + global $bb_cfg; + return get_path_from_id($id, '', $bb_cfg['attach']['upload_path'], 1000000, 100); +} + function get_tracks ($type) { static $pattern = '#^a:\d+:{[i:;\d]+}$#'; @@ -242,7 +267,7 @@ $bf['user_opt'] = array( 'notify_pm' => 6, // Сообщать о новых ЛС 'allow_passkey' => 7, // Запрет на добавление passkey, он же запрет на скачивание торрентов 'hide_porn_forums' => 8, // Скрывать pron форумы - 'allow_gallery' => 9, // Не используемое (запрет использования галереи) + 'allow_gallery' => 9, // Неиспользуемое (запрет использования галереи) 'hide_ads' => 10, // Запрет на показ рекламы 'allow_topic' => 11, // Запрет на создание новых тем 'allow_post' => 12, // Запрет на отправку сообщений @@ -2797,30 +2822,6 @@ function create_magnet($infohash, $auth_key, $logged_in) return ''; } -function get_avatar ($avatar, $type, $allow_avatar = true, $height = '', $width = '') -{ - global $bb_cfg; - - $height = ($height != '') ? 'height="'. $height .'"' : ''; - $width = ($width != '') ? 'width="'. $width .'"' : ''; - - $user_avatar = ''; - - if ($allow_avatar) - { - switch($type) - { - case USER_AVATAR_UPLOAD: - $user_avatar = ( $bb_cfg['allow_avatar_upload'] ) ? '' : ''; - break; - case USER_AVATAR_GALLERY: - $user_avatar = ( $bb_cfg['allow_avatar_local'] ) ? '' : ''; - break; - } - } - return $user_avatar; -} - function set_die_append_msg ($forum_id = null, $topic_id = null) { global $lang, $template; @@ -2859,13 +2860,6 @@ function CAPTCHA () return $captcha_obj; } -function get_path_from_id ($id, $ext_id, $base_path, $first_div, $sec_div) -{ - global $bb_cfg; - $ext = isset($bb_cfg['file_id_ext'][$ext_id]) ? $bb_cfg['file_id_ext'][$ext_id] : ''; - return ($base_path ? "$base_path/" : '') . ($id % $sec_div) .'/'. $id . ($ext ? ".$ext" : ''); -} - function send_pm ($user_id, $subject, $message, $poster_id = BOT_UID) { global $userdata; @@ -2934,4 +2928,27 @@ function profile_url ($data) } return $profile; +} + +function get_avatar ($user_id, $ext_id, $allow_avatar = true, $size = true) +{ + global $bb_cfg; + + if ($size) + { + // TODO + } + + $user_avatar = ''. $user_id .''; + + if ($user_id == BOT_UID && $bb_cfg['avatars']['bot_avatar']) + { + $user_avatar = ''. $user_id .''; + } + elseif ($allow_avatar && $ext_id) + { + $user_avatar = ''. $user_id .''; + } + + return $user_avatar; } \ No newline at end of file diff --git a/upload/includes/functions_admin.php b/upload/includes/functions_admin.php index 1747359ab..32ce428f8 100644 --- a/upload/includes/functions_admin.php +++ b/upload/includes/functions_admin.php @@ -2,44 +2,53 @@ if (!defined('BB_ROOT')) die(basename(__FILE__)); +function sync_all_forums () +{ + foreach (DB()->fetch_rowset("SELECT forum_id FROM ". BB_FORUMS) as $row) + { + sync('forum', $row['forum_id']); + } +} + function sync ($type, $id) { switch ($type) { case 'forum': - $all_forums = ($id === 'all'); - - if (!$all_forums AND !$forum_csv = get_id_csv($id)) + if (!$forum_csv = get_id_csv($id)) { break; } - + // sync posts $tmp_sync_forums = 'tmp_sync_forums'; DB()->query(" CREATE TEMPORARY TABLE $tmp_sync_forums ( forum_id SMALLINT UNSIGNED NOT NULL DEFAULT '0', - forum_last_post_id MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', + forum_last_post_id INT UNSIGNED NOT NULL DEFAULT '0', forum_posts MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', forum_topics MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (forum_id) ) ENGINE = MEMORY "); + DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_sync_forums"); - $where_sql = (!$all_forums) ? "WHERE f.forum_id IN($forum_csv)" : ''; + // начальное обнуление значений + $forum_ary = explode(',', $forum_csv); + DB()->query("REPLACE INTO $tmp_sync_forums (forum_id) VALUES(". join('),(', $forum_ary) .")"); DB()->query(" - INSERT INTO $tmp_sync_forums + REPLACE INTO $tmp_sync_forums + (forum_id, forum_last_post_id, forum_posts, forum_topics) SELECT - f.forum_id, - MAX(p.post_id), - COUNT(p.post_id), - COUNT(DISTINCT p.topic_id) - FROM ". BB_FORUMS ." f - LEFT JOIN ". BB_POSTS ." p USING(forum_id) - $where_sql - GROUP BY f.forum_id + forum_id, + MAX(topic_last_post_id), + SUM(topic_replies) + COUNT(topic_id), + COUNT(topic_id) + FROM ". BB_TOPICS ." + WHERE forum_id IN($forum_csv) + GROUP BY forum_id "); DB()->query(" @@ -73,15 +82,16 @@ function sync ($type, $id) DB()->query(" CREATE TEMPORARY TABLE $tmp_sync_topics ( - topic_id MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', - total_posts MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', - topic_first_post_id MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', - topic_last_post_id MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', - topic_last_post_time INT UNSIGNED NOT NULL DEFAULT '0', - topic_attachment TINYINT UNSIGNED NOT NULL DEFAULT '0', + topic_id INT UNSIGNED NOT NULL DEFAULT '0', + total_posts INT UNSIGNED NOT NULL DEFAULT '0', + topic_first_post_id INT UNSIGNED NOT NULL DEFAULT '0', + topic_last_post_id INT UNSIGNED NOT NULL DEFAULT '0', + topic_last_post_time INT UNSIGNED NOT NULL DEFAULT '0', + topic_attachment INT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (topic_id) ) ENGINE = MEMORY "); + DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_sync_topics"); $where_sql = (!$all_topics) ? "AND t.topic_id IN($topic_csv)" : ''; @@ -115,15 +125,8 @@ function sync ($type, $id) t.topic_id = tmp.topic_id "); - $sql = "SELECT topic_id FROM ". $tmp_sync_topics ." WHERE total_posts = 0"; - - if ($rowset = DB()->fetch_rowset($sql)) + if ($topics = DB()->fetch_rowset("SELECT topic_id FROM ". $tmp_sync_topics ." WHERE total_posts = 0", 'topic_id')) { - $topics = array(); - foreach ($rowset as $row) - { - $topics[] = $row['topic_id']; - } topic_delete($topics); } @@ -144,11 +147,12 @@ function sync ($type, $id) DB()->query(" CREATE TEMPORARY TABLE $tmp_user_posts ( - user_id MEDIUMINT NOT NULL DEFAULT '0', + user_id INT NOT NULL DEFAULT '0', user_posts MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (user_id) ) ENGINE = MEMORY "); + DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_user_posts"); // Set posts count = 0 and then update to real count $where_user_sql = (!$all_users) ? "AND user_id IN($user_csv)" : "AND user_posts != 0"; @@ -231,21 +235,17 @@ function topic_delete ($mode_or_topic_id, $forum_id = null, $prune_time = 0, $pr DB()->query(" CREATE TEMPORARY TABLE $tmp_delete_topics ( - topic_id MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', + topic_id INT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (topic_id) ) ENGINE = MEMORY "); + DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_delete_topics"); $where_sql = ($prune) ? "forum_id = $forum_id" : "topic_id IN($topic_csv)"; $where_sql .= ($prune && $prune_time) ? " AND topic_last_post_time < $prune_time" : ''; $where_sql .= ($prune && !$prune_all) ? " AND topic_type NOT IN(". POST_ANNOUNCE .",". POST_STICKY .")": ''; - DB()->query(" - INSERT INTO $tmp_delete_topics - SELECT topic_id - FROM ". BB_TOPICS ." - WHERE $where_sql - "); + DB()->query("INSERT INTO $tmp_delete_topics SELECT topic_id FROM ". BB_TOPICS ." WHERE $where_sql"); // Get topics count $row = DB()->fetch_row("SELECT COUNT(*) AS topics_count FROM $tmp_delete_topics"); @@ -261,11 +261,12 @@ function topic_delete ($mode_or_topic_id, $forum_id = null, $prune_time = 0, $pr DB()->query(" CREATE TEMPORARY TABLE $tmp_user_posts ( - user_id MEDIUMINT NOT NULL DEFAULT '0', + user_id INT NOT NULL DEFAULT '0', user_posts MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (user_id) ) ENGINE = MEMORY "); + DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_user_posts"); DB()->query(" INSERT INTO $tmp_user_posts @@ -323,16 +324,16 @@ function topic_delete ($mode_or_topic_id, $forum_id = null, $prune_time = 0, $pr unset($row, $result); // Delete posts, posts_text, attachments (from DB) - DB()->query(" - DELETE p, pt, ps, a, d, ph - FROM ". $tmp_delete_topics ." del - LEFT JOIN ". BB_POSTS ." p ON(p.topic_id = del.topic_id) - LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = p.post_id) - LEFT JOIN ". BB_POSTS_HTML ." ph ON(ph.post_id = p.post_id) - LEFT JOIN ". BB_POSTS_SEARCH ." ps ON(ps.post_id = p.post_id) - LEFT JOIN ". BB_ATTACHMENTS ." a ON(a.post_id = p.post_id) - LEFT JOIN ". BB_ATTACHMENTS_DESC ." d ON(d.attach_id = a.attach_id) - "); + DB()->query(" + DELETE p, pt, ps, a, d, ph + FROM ". $tmp_delete_topics ." del + LEFT JOIN ". BB_POSTS ." p ON(p.topic_id = del.topic_id) + LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = p.post_id) + LEFT JOIN ". BB_POSTS_HTML ." ph ON(ph.post_id = p.post_id) + LEFT JOIN ". BB_POSTS_SEARCH ." ps ON(ps.post_id = p.post_id) + LEFT JOIN ". BB_ATTACHMENTS ." a ON(a.post_id = p.post_id) + LEFT JOIN ". BB_ATTACHMENTS_DESC ." d ON(d.attach_id = a.attach_id) + "); // Delete topics, topics watch DB()->query(" @@ -411,13 +412,7 @@ function topic_move ($topic_id, $to_forum_id, $from_forum_id = null, $leave_shad // Get topics info $where_sql = ($forum_csv = get_id_csv($from_forum_id)) ? "AND forum_id IN($forum_csv)" : ''; - $sql = " - SELECT * - FROM ". BB_TOPICS ." - WHERE topic_id IN($topic_csv) - AND topic_status != ". TOPIC_MOVED ." - $where_sql - "; + $sql = "SELECT * FROM ". BB_TOPICS ." WHERE topic_id IN($topic_csv) AND topic_status != ". TOPIC_MOVED ." $where_sql"; $topics = array(); $sync_forums = array($to_forum_id => true); @@ -465,26 +460,9 @@ function topic_move ($topic_id, $to_forum_id, $from_forum_id = null, $leave_shad } } - // Update topics - DB()->query(" - UPDATE ". BB_TOPICS ." SET - forum_id = $to_forum_id - WHERE topic_id IN($topic_csv) - "); - - // Update posts - DB()->query(" - UPDATE ". BB_POSTS ." SET - forum_id = $to_forum_id - WHERE topic_id IN($topic_csv) - "); - - // Update torrents - DB()->query(" - UPDATE ". BB_BT_TORRENTS ." SET - forum_id = $to_forum_id - WHERE topic_id IN($topic_csv) - "); + DB()->query("UPDATE ". BB_TOPICS ." SET forum_id = $to_forum_id WHERE topic_id IN($topic_csv)"); + DB()->query("UPDATE ". BB_POSTS ." SET forum_id = $to_forum_id WHERE topic_id IN($topic_csv)"); + DB()->query("UPDATE ". BB_BT_TORRENTS ." SET forum_id = $to_forum_id WHERE topic_id IN($topic_csv)"); // Bot if ($insert_bot_msg) @@ -513,6 +491,7 @@ function topic_move ($topic_id, $to_forum_id, $from_forum_id = null, $leave_shad return true; } +// $exclude_first - в режиме удаления сообщений по списку исключать первое сообщение в теме function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) { global $log_action; @@ -528,7 +507,7 @@ function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) { if (!$post_csv = get_id_csv($mode_or_post_id)) return false; - // exclude first post of topic + // фильтр заглавных сообщений в теме if ($exclude_first) { $sql = "SELECT topic_first_post_id FROM ". BB_TOPICS ." WHERE topic_first_post_id IN($post_csv)"; @@ -550,23 +529,15 @@ function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) if ($del_user_posts) { - $sql = "SELECT DISTINCT topic_id FROM ". BB_POSTS ." WHERE poster_id IN($user_csv)"; - - foreach (DB()->fetch_rowset($sql) as $row) - { - $sync_topics[] = $row['topic_id']; - } + $sync_topics = DB()->fetch_rowset("SELECT DISTINCT topic_id FROM ". BB_POSTS ." WHERE poster_id IN($user_csv)", 'topic_id'); if ($topic_csv = get_id_csv($sync_topics)) { - $sql = "SELECT DISTINCT forum_id FROM ". BB_TOPICS ." WHERE topic_id IN($topic_csv)"; - - foreach (DB()->fetch_rowset($sql) as $row) + foreach (DB()->fetch_rowset("SELECT DISTINCT forum_id FROM ". BB_TOPICS ." WHERE topic_id IN($topic_csv)") as $row) { $sync_forums[$row['forum_id']] = true; } } - $sync_users = explode(',', $user_csv); } else @@ -586,12 +557,7 @@ function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) $sync_forums[$row['forum_id']] = true; } - $sql = "SELECT DISTINCT poster_id FROM ". BB_POSTS ." WHERE post_id IN($post_csv)"; - - foreach (DB()->fetch_rowset($sql) as $row) - { - $sync_users[] = $row['poster_id']; - } + $sync_users = DB()->fetch_rowset("SELECT DISTINCT poster_id FROM ". BB_POSTS ." WHERE post_id IN($post_csv)", 'poster_id'); } // Get all post_id for deleting @@ -599,7 +565,7 @@ function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) DB()->query(" CREATE TEMPORARY TABLE $tmp_delete_posts ( - post_id MEDIUMINT UNSIGNED NOT NULL DEFAULT '0', + post_id INT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (post_id) ) ENGINE = MEMORY "); @@ -624,12 +590,7 @@ function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) $where_sql = "post_id IN($post_csv)"; } - DB()->query(" - INSERT INTO $tmp_delete_posts - SELECT post_id - FROM ". BB_POSTS ." - WHERE $where_sql - "); + DB()->query("INSERT INTO $tmp_delete_posts SELECT post_id FROM ". BB_POSTS ." WHERE $where_sql"); // Deleted posts count $row = DB()->fetch_row("SELECT COUNT(*) AS posts_count FROM $tmp_delete_posts"); @@ -666,17 +627,17 @@ function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) unset($row, $result); // Delete posts, posts_text, attachments (from DB) - DB()->query(" - DELETE p, pt, ps, tor, a, d, ph - FROM ". $tmp_delete_posts ." del - LEFT JOIN ". BB_POSTS ." p ON(p.post_id = del.post_id) - LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = del.post_id) - LEFT JOIN ". BB_POSTS_HTML ." ph ON(ph.post_id = del.post_id) - LEFT JOIN ". BB_POSTS_SEARCH ." ps ON(ps.post_id = del.post_id) - LEFT JOIN ". BB_BT_TORRENTS ." tor ON(tor.post_id = del.post_id) - LEFT JOIN ". BB_ATTACHMENTS ." a ON(a.post_id = del.post_id) - LEFT JOIN ". BB_ATTACHMENTS_DESC ." d ON(d.attach_id = a.attach_id) - "); + DB()->query(" + DELETE p, pt, ps, tor, a, d, ph + FROM ". $tmp_delete_posts ." del + LEFT JOIN ". BB_POSTS ." p ON(p.post_id = del.post_id) + LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = del.post_id) + LEFT JOIN ". BB_POSTS_HTML ." ph ON(ph.post_id = del.post_id) + LEFT JOIN ". BB_POSTS_SEARCH ." ps ON(ps.post_id = del.post_id) + LEFT JOIN ". BB_BT_TORRENTS ." tor ON(tor.post_id = del.post_id) + LEFT JOIN ". BB_ATTACHMENTS ." a ON(a.post_id = del.post_id) + LEFT JOIN ". BB_ATTACHMENTS_DESC ." d ON(d.attach_id = a.attach_id) + "); // Log action if ($del_user_posts) @@ -709,14 +670,17 @@ function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true) function user_delete ($user_id, $delete_posts = false) { - global $bb_cfg, $log_action; - - $default_group_moderator_id = 2; + global $log_action; if (!$user_csv = get_id_csv($user_id)) { return false; } + if (!$user_id = DB()->fetch_rowset("SELECT user_id FROM ". BB_USERS ." WHERE user_id IN($user_csv)", 'user_id')) + { + return false; + } + $user_csv = get_id_csv($user_id); // LOG $log_action->admin('adm_user_delete', array( @@ -724,30 +688,12 @@ function user_delete ($user_id, $delete_posts = false) )); // Avatar - $result = DB()->query(" - SELECT user_avatar - FROM ". BB_USERS ." - WHERE user_avatar_type = ". USER_AVATAR_UPLOAD ." - AND user_avatar != '' - AND user_id IN($user_csv) - "); + $result = DB()->query("SELECT user_id, avatar_ext_id FROM ". BB_USERS ." WHERE avatar_ext_id > 0 AND user_id IN($user_csv)"); while ($row = DB()->fetch_next($result)) { - if ($filename = basename($row['user_avatar'])) - { - @unlink(BB_ROOT . $bb_cfg['avatar_path'] .'/'. $filename); - } + delete_avatar($row['user_id'], $row['avatar_ext_id']); } - unset($row, $result); - - // Group - DB()->query(" - UPDATE ". BB_GROUPS ." SET - group_moderator = $default_group_moderator_id - WHERE group_single_user = 0 - AND group_moderator IN($user_csv) - "); if ($delete_posts) { @@ -755,26 +701,12 @@ function user_delete ($user_id, $delete_posts = false) } else { - DB()->query(" - UPDATE ". BB_POSTS ." p, ". BB_USERS ." u SET - p.post_username = u.username, - p.poster_id = ". DELETED ." - WHERE u.user_id IN($user_csv) - AND p.poster_id = u.user_id - "); + DB()->query("UPDATE ". BB_POSTS ." SET poster_id = ". DELETED ." WHERE poster_id IN($user_csv)"); } - DB()->query(" - UPDATE ". BB_TOPICS ." SET - topic_poster = ". DELETED ." - WHERE topic_poster IN($user_csv) - "); - - DB()->query(" - UPDATE ". BB_BT_TORRENTS ." SET - poster_id = ". DELETED ." - WHERE poster_id IN($user_csv) - "); + DB()->query("UPDATE ". BB_GROUPS ." SET group_moderator = 2 WHERE group_single_user = 0 AND group_moderator IN($user_csv)"); + DB()->query("UPDATE ". BB_TOPICS ." SET topic_poster = ". DELETED ." WHERE topic_poster IN($user_csv)"); + DB()->query("UPDATE ". BB_BT_TORRENTS ." SET poster_id = ". DELETED ." WHERE poster_id IN($user_csv)"); DB()->query(" DELETE ug, g, a, qt1, qt2 @@ -821,17 +753,8 @@ function user_delete ($user_id, $delete_posts = false) AND pm.privmsgs_type IN(". PRIVMSGS_READ_MAIL .','. PRIVMSGS_SAVED_IN_MAIL .") "); - DB()->query(" - UPDATE ". BB_PRIVMSGS ." SET - privmsgs_from_userid = ". DELETED ." - WHERE privmsgs_from_userid IN($user_csv) - "); - - DB()->query(" - UPDATE ". BB_PRIVMSGS ." SET - privmsgs_to_userid = ". DELETED ." - WHERE privmsgs_to_userid IN($user_csv) - "); + DB()->query("UPDATE ". BB_PRIVMSGS ." SET privmsgs_from_userid = ". DELETED ." WHERE privmsgs_from_userid IN($user_csv)"); + DB()->query("UPDATE ". BB_PRIVMSGS ." SET privmsgs_to_userid = ". DELETED ." WHERE privmsgs_to_userid IN($user_csv)"); } function get_usernames_for_log ($user_id) diff --git a/upload/includes/functions_upload.php b/upload/includes/functions_upload.php new file mode 100644 index 000000000..d7fa75232 --- /dev/null +++ b/upload/includes/functions_upload.php @@ -0,0 +1,166 @@ + 0, + 'max_width' => 0, + 'max_height' => 0, + 'allowed_ext' => array(), + 'upload_path' => '', + ); + var $file = array( + 'name' => '', + 'type' => '', + 'size' => 0, + 'tmp_name' => '', + 'error' => UPLOAD_ERR_NO_FILE, + ); + var $orig_name = ''; + var $file_path = ''; // Stored file path + var $file_ext = ''; + var $file_ext_id = ''; + var $file_size = ''; + var $ext_ids = array(); // array_flip($bb_cfg['file_id_ext']) + var $errors = array(); + var $img_types = array(1=>'gif', 2=>'jpg', 3=>'png', 6=>'bmp', 7=>'tiff', 8=>'tiff'); + + function init ($cfg = array(), $post_params = array(), $uploaded_only = true) + { + global $bb_cfg, $lang; + + $lang['upload_error_common'] = 'Ошибка загрузки файла'; + $lang['upload_errors'] = array( + UPLOAD_ERR_INI_SIZE => 'превышен максимальный размер (upload_max_filesize)', + UPLOAD_ERR_FORM_SIZE => 'превышен максимальный размер (MAX_FILE_SIZE)', + UPLOAD_ERR_PARTIAL => 'файл был загружен частично', + UPLOAD_ERR_NO_FILE => 'файл не был загружен', + UPLOAD_ERR_NO_TMP_DIR => 'временная директория не найдена', + UPLOAD_ERR_CANT_WRITE => 'ошибка записи', + UPLOAD_ERR_EXTENSION => 'загрузка остановлена из-за расширения', + ); + + $this->cfg = array_merge($this->cfg, $cfg); + $this->file = $post_params; + + // upload errors from $_FILES + if ($this->file['error']) + { + $msg = $lang['upload_error_common']; + $msg .= ($err_desc =& $lang['upload_errors'][$this->file['error']]) ? " ($err_desc)" : ''; + $this->errors[] = $msg; + return false; + } + // file_exists + if (!file_exists($this->file['tmp_name'])) + { + $this->errors[] = "uploaded file not exists: {$this->file['tmp_name']}"; + return false; + } + // size + if (!$this->file_size = filesize($this->file['tmp_name'])) + { + $this->errors[] = "uploaded file is empty: {$this->file['tmp_name']}"; + return false; + } + if ($this->cfg['max_size'] && $this->file_size > $this->cfg['max_size']) + { + $this->errors[] = 'Загруженный файл превышает максимальный размер '. humn_size($this->cfg['max_size']); + return false; + } + // is_uploaded_file + if ($uploaded_only && !is_uploaded_file($this->file['tmp_name'])) + { + $this->errors[] = "not uploaded file: {$this->file['tmp_name']}"; + return false; + } + // get ext + $this->ext_ids = array_flip($bb_cfg['file_id_ext']); + $file_name_ary = explode('.', $this->file['name']); + $this->file_ext = strtolower(end($file_name_ary)); + + // img + if ($this->cfg['max_width'] || $this->cfg['max_height']) + { + if ($img_info = getimagesize($this->file['tmp_name'])) + { + list($width, $height, $type, $attr) = $img_info; + + // redefine ext + if (!$width || !$height || !$type || !isset($this->img_types[$type])) + { + $this->errors[] = 'Недопустимый тип файла изображения'; + return false; + } + $this->file_ext = $this->img_types[$type]; + + // width & height + if (($this->cfg['max_width'] && $width > $this->cfg['max_width']) || ($this->cfg['max_height'] && $height > $this->cfg['max_height'])) + { + $this->errors[] = "Размеры изображения превышают максимально допустимые {$this->cfg['max_width']}x{$this->cfg['max_height']} px"; + return false; + } + } + else + { + $this->errors[] = 'Загруженный файл не является изображением'; + return false; + } + } + // check ext + if (!isset($this->ext_ids[$this->file_ext]) || !in_array($this->file_ext, $this->cfg['allowed_ext'], true)) + { + $this->errors[] = 'Расширение '. htmlCHR($this->file_ext) .' для загружаемых файлов не разрешено'; + return false; + } + $this->file_ext_id = $this->ext_ids[$this->file_ext]; + + return true; + } + + function store ($mode = '', $params = array()) + { + global $bb_cfg; + + if ($mode == 'avatar') + { + delete_avatar($params['user_id'], $params['avatar_ext_id']); + $file_path = get_avatar_path($params['user_id'], $this->file_ext_id, $bb_cfg['avatars']['upload_path']); + return $this->_move($file_path); + } + else if ($mode == 'attach') + { + $file_path = get_attach_path($params['topic_id']); + return $this->_move($file_path); + } + else + { + trigger_error("invalid upload mode: $mode", E_USER_ERROR); + } + } + + function _move ($file_path) + { + $dir = dirname($file_path); + if (!file_exists($dir)) + { + if (!bb_mkdir($dir)) + { + $this->errors[] = "Cannot create dir: $dir"; + return false; + } + } + if (!@rename($this->file['tmp_name'], $file_path)) + { + if (!@copy($this->file['tmp_name'], $file_path)) + { + $this->errors[] = 'Cannot copy tmp file'; + return false; + } + @unlink($this->file['tmp_name']); + } + @chmod($file_path, 0664); + + return file_exists($file_path); + } +} \ No newline at end of file diff --git a/upload/includes/init_bb.php b/upload/includes/init_bb.php index feff1c228..9fdf5bb09 100644 --- a/upload/includes/init_bb.php +++ b/upload/includes/init_bb.php @@ -149,12 +149,6 @@ define('EXCLUDED_USERS_CSV', implode(',', $excluded_users)); // User related define('USER_ACTIVATION_NONE', 0); define('USER_ACTIVATION_SELF', 1); -define('USER_ACTIVATION_ADMIN', 2); - -define('USER_AVATAR_NONE', 0); -define('USER_AVATAR_UPLOAD', 1); -define('USER_AVATAR_REMOTE', 2); // не используется -define('USER_AVATAR_GALLERY', 3); // Group settings define('GROUP_OPEN', 0); diff --git a/upload/includes/page_header.php b/upload/includes/page_header.php index b96b73cd5..0cff054cd 100644 --- a/upload/includes/page_header.php +++ b/upload/includes/page_header.php @@ -166,105 +166,106 @@ else $report_list = ''; // Report [END] $template->assign_vars(array( + 'SIMPLE_HEADER' => !empty($gen_simple_header), - 'SIMPLE_HEADER' => !empty($gen_simple_header), + 'IN_ADMIN' => defined('IN_ADMIN'), + 'SHOW_ADS' => (!$logged_in || isset($bb_cfg['show_ads_users'][$user->id]) || (!($is_admin || $is_mod) && $user->show_ads)), + 'USER_HIDE_CAT' => (BB_SCRIPT == 'index'), - 'IN_ADMIN' => defined('IN_ADMIN'), - 'SHOW_ADS' => (!$logged_in || isset($bb_cfg['show_ads_users'][$user->id]) || (!($is_admin || $is_mod) && $user->show_ads)), - 'USER_HIDE_CAT' => (BB_SCRIPT == 'index'), + 'USER_RUS' => ($userdata['user_lang'] != 'english') ? true : false, - 'USER_RUS' => ($userdata['user_lang'] != 'english') ? true : false, + 'INCLUDE_BBCODE_JS' => !empty($page_cfg['include_bbcode_js']), + 'USER_OPTIONS_JS' => (IS_GUEST) ? '{}' : bb_json_encode($user->opt_js), - 'INCLUDE_BBCODE_JS' => !empty($page_cfg['include_bbcode_js']), - 'USER_OPTIONS_JS' => (IS_GUEST) ? '{}' : bb_json_encode($user->opt_js), + 'USE_TABLESORTER' => !empty($page_cfg['use_tablesorter']), - 'USE_TABLESORTER' => !empty($page_cfg['use_tablesorter']), + 'SITENAME' => $bb_cfg['sitename'], + 'U_INDEX' => BB_ROOT ."index.php", + 'T_INDEX' => sprintf($lang['FORUM_INDEX'], $bb_cfg['sitename']), - 'SITENAME' => $bb_cfg['sitename'], - 'U_INDEX' => BB_ROOT ."index.php", - 'T_INDEX' => sprintf($lang['FORUM_INDEX'], $bb_cfg['sitename']), + 'IS_GUEST' => IS_GUEST, + 'IS_USER' => IS_USER, + 'IS_ADMIN' => IS_ADMIN, + 'IS_MOD' => IS_MOD, + 'IS_AM' => IS_AM, - 'IS_GUEST' => IS_GUEST, - 'IS_USER' => IS_USER, - 'IS_ADMIN' => IS_ADMIN, - 'IS_MOD' => IS_MOD, - 'IS_AM' => IS_AM, + 'FORUM_PATH' => FORUM_PATH, + 'FULL_URL' => FULL_URL, - 'FORUM_PATH' => FORUM_PATH, - 'FULL_URL' => FULL_URL, + 'LAST_VISIT_DATE' => ($logged_in) ? sprintf($lang['YOU_LAST_VISIT'], bb_date($userdata['user_lastvisit'], $bb_cfg['last_visit_date_format'])) : '', + 'CURRENT_TIME' => sprintf($lang['CURRENT_TIME'], bb_date(TIMENOW, $bb_cfg['last_visit_date_format'])), + 'S_TIMEZONE' => sprintf($lang['ALL_TIMES'], $lang[''.str_replace(',', '.', floatval($bb_cfg['board_timezone'])).'']), - 'LAST_VISIT_DATE' => ($logged_in) ? sprintf($lang['YOU_LAST_VISIT'], bb_date($userdata['user_lastvisit'], $bb_cfg['last_visit_date_format'])) : '', - 'CURRENT_TIME' => sprintf($lang['CURRENT_TIME'], bb_date(TIMENOW, $bb_cfg['last_visit_date_format'])), - 'S_TIMEZONE' => sprintf($lang['ALL_TIMES'], $lang[''.str_replace(',', '.', floatval($bb_cfg['board_timezone'])).'']), - - 'PM_INFO' => $pm_info, - 'PRIVMSG_IMG' => $icon_pm, + 'PM_INFO' => $pm_info, + 'PRIVMSG_IMG' => $icon_pm, // Report - 'REPORT_LIST' => $report_list, - 'U_REPORT_LIST' => "report.php", + 'REPORT_LIST' => $report_list, + 'U_REPORT_LIST' => "report.php", // Report [END] - 'LOGGED_IN' => $logged_in, - 'SESSION_USER_ID' => $userdata['user_id'], - 'POINTS' => $userdata['user_points'], - 'THIS_USER' => profile_url($userdata), - 'THIS_AVATAR' => get_avatar($userdata['user_avatar'], $userdata['user_avatar_type'], !bf($userdata['user_opt'], 'user_opt', 'allow_avatar')), - 'SHOW_LOGIN_LINK' => !defined('IN_LOGIN'), - 'AUTOLOGIN_DISABLED' => !$bb_cfg['allow_autologin'], - 'S_LOGIN_ACTION' => LOGIN_URL, + 'LOGGED_IN' => $logged_in, + 'SESSION_USER_ID' => $userdata['user_id'], + 'POINTS' => $userdata['user_points'], + 'THIS_USER' => profile_url($userdata), + 'THIS_AVATAR' => get_avatar($userdata['user_id'], $userdata['avatar_ext_id'], !bf($userdata['user_opt'], 'user_opt', 'allow_avatar')), + 'AVATAR_DISALLOWED' => bf($userdata['user_opt'], 'user_opt', 'allow_avatar'), + 'SHOW_LOGIN_LINK' => !defined('IN_LOGIN'), + 'AUTOLOGIN_DISABLED' => !$bb_cfg['allow_autologin'], + 'S_LOGIN_ACTION' => LOGIN_URL, - 'U_CUR_DOWNLOADS' => PROFILE_URL . $userdata['user_id'], - 'U_FORUM' => "viewforum.php", - 'U_GROUP_CP' => "groupcp.php", - 'U_LOGIN_LOGOUT' => $u_login_logout, - 'U_MEMBERLIST' => "memberlist.php", - 'U_MODCP' => "modcp.php", - 'U_OPTIONS' => "profile.php?mode=editprofile", - 'U_PRIVATEMSGS' => PM_URL . "?folder=inbox", - 'U_PROFILE' => PROFILE_URL . $userdata['user_id'], - 'U_READ_PM' => PM_URL . "?folder=inbox". (($userdata['user_newest_pm_id'] && $userdata['user_new_privmsg'] == 1) ? "&mode=read&p={$userdata['user_newest_pm_id']}" : ''), - 'U_REGISTER' => "profile.php?mode=register", - 'U_SEARCH' => "search.php", - 'U_SEND_PASSWORD' => "profile.php?mode=sendpassword", - 'U_TERMS' => $bb_cfg['terms_and_conditions_url'], - 'U_TRACKER' => "tracker.php", + 'U_CUR_DOWNLOADS' => PROFILE_URL . $userdata['user_id'], + 'U_FORUM' => "viewforum.php", + 'U_GROUP_CP' => "groupcp.php", + 'U_LOGIN_LOGOUT' => $u_login_logout, + 'U_MEMBERLIST' => "memberlist.php", + 'U_MODCP' => "modcp.php", + 'U_OPTIONS' => "profile.php?mode=editprofile", + 'U_PRIVATEMSGS' => PM_URL . "?folder=inbox", + 'U_PROFILE' => PROFILE_URL . $userdata['user_id'], + 'U_READ_PM' => PM_URL . "?folder=inbox". (($userdata['user_newest_pm_id'] && $userdata['user_new_privmsg'] == 1) ? "&mode=read&p={$userdata['user_newest_pm_id']}" : ''), + 'U_REGISTER' => "profile.php?mode=register", + 'U_SEARCH' => "search.php", + 'U_SEND_PASSWORD' => "profile.php?mode=sendpassword", + 'U_TERMS' => $bb_cfg['terms_and_conditions_url'], + 'U_TRACKER' => "tracker.php", - 'SHOW_SIDEBAR1' => (!empty($page_cfg['show_sidebar1'][BB_SCRIPT]) || $bb_cfg['show_sidebar1_on_every_page']), - 'SHOW_SIDEBAR2' => (!empty($page_cfg['show_sidebar2'][BB_SCRIPT]) || $bb_cfg['show_sidebar2_on_every_page']), + 'SHOW_SIDEBAR1' => (!empty($page_cfg['show_sidebar1'][BB_SCRIPT]) || $bb_cfg['show_sidebar1_on_every_page']), + 'SHOW_SIDEBAR2' => (!empty($page_cfg['show_sidebar2'][BB_SCRIPT]) || $bb_cfg['show_sidebar2_on_every_page']), // Common urls - 'CAT_URL' => BB_ROOT . CAT_URL, - 'DOWNLOAD_URL' => BB_ROOT . DOWNLOAD_URL, - 'FORUM_URL' => BB_ROOT . FORUM_URL, - 'GROUP_URL' => BB_ROOT . GROUP_URL, - 'LOGIN_URL' => $bb_cfg['login_url'], - 'NEWEST_URL' => '&view=newest#newest', - 'PM_URL' => $bb_cfg['pm_url'], - 'POST_URL' => BB_ROOT . POST_URL, - 'POSTING_URL' => $bb_cfg['posting_url'], - 'PROFILE_URL' => BB_ROOT . PROFILE_URL, - 'TOPIC_URL' => BB_ROOT . TOPIC_URL, + 'AVATARS_URL' => "images/avatars", + 'CAT_URL' => BB_ROOT . CAT_URL, + 'DOWNLOAD_URL' => BB_ROOT . DOWNLOAD_URL, + 'FORUM_URL' => BB_ROOT . FORUM_URL, + 'GROUP_URL' => BB_ROOT . GROUP_URL, + 'LOGIN_URL' => $bb_cfg['login_url'], + 'NEWEST_URL' => '&view=newest#newest', + 'PM_URL' => $bb_cfg['pm_url'], + 'POST_URL' => BB_ROOT . POST_URL, + 'POSTING_URL' => $bb_cfg['posting_url'], + 'PROFILE_URL' => BB_ROOT . PROFILE_URL, + 'TOPIC_URL' => BB_ROOT . TOPIC_URL, - 'AJAX_HTML_DIR' => AJAX_HTML_DIR, + 'AJAX_HTML_DIR' => AJAX_HTML_DIR, - 'ONLY_NEW_POSTS' => ONLY_NEW_POSTS, - 'ONLY_NEW_TOPICS' => ONLY_NEW_TOPICS, + 'ONLY_NEW_POSTS' => ONLY_NEW_POSTS, + 'ONLY_NEW_TOPICS' => ONLY_NEW_TOPICS, // Misc - 'DEBUG' => DEBUG, - 'BOT_UID' => BOT_UID, - 'COOKIE_MARK' => COOKIE_MARK, - 'SID' => $userdata['session_id'], - 'SID_HIDDEN' => '', + 'DEBUG' => DEBUG, + 'BOT_UID' => BOT_UID, + 'COOKIE_MARK' => COOKIE_MARK, + 'SID' => $userdata['session_id'], + 'SID_HIDDEN' => '', - 'CHECKED' => HTML_CHECKED, - 'DISABLED' => HTML_DISABLED, - 'READONLY' => HTML_READONLY, - 'SELECTED' => HTML_SELECTED, + 'CHECKED' => HTML_CHECKED, + 'DISABLED' => HTML_DISABLED, + 'READONLY' => HTML_READONLY, + 'SELECTED' => HTML_SELECTED, - 'U_SEARCH_SELF_BY_LAST' => "search.php?uid={$userdata['user_id']}&o=5", - 'U_WATCHED_TOPICS' => "profile.php?mode=watch", + 'U_SEARCH_SELF_BY_LAST' => "search.php?uid={$userdata['user_id']}&o=5", + 'U_WATCHED_TOPICS' => "profile.php?mode=watch", )); if (!empty($page_cfg['show_torhelp'][BB_SCRIPT]) && !empty($userdata['torhelp'])) diff --git a/upload/includes/ucp/usercp_activate.php b/upload/includes/ucp/usercp_activate.php index ddfa030b4..00f3c2231 100644 --- a/upload/includes/ucp/usercp_activate.php +++ b/upload/includes/ucp/usercp_activate.php @@ -23,18 +23,6 @@ if ( $row = DB()->sql_fetchrow($result) ) } else if ((trim($row['user_actkey']) == trim($_GET['act_key'])) && (trim($row['user_actkey']) != '')) { - if (intval($bb_cfg['require_activation']) == USER_ACTIVATION_ADMIN && $row['user_newpasswd'] == '') - { - if (!$userdata['session_logged_in']) - { - redirect(LOGIN_URL . '?redirect=profile.php&mode=activate&' . POST_USERS_URL . '=' . $row['user_id'] . '&act_key=' . trim($_GET['act_key'])); - } - else if (!IS_ADMIN) - { - message_die(GENERAL_MESSAGE, $lang['NOT_AUTHORISED']); - } - } - $sql_update_pass = ( $row['user_newpasswd'] != '' ) ? ", user_password = '" . md5(md5($row['user_newpasswd'])) . "', user_newpasswd = ''" : ''; $sql = "UPDATE " . BB_USERS . " @@ -45,31 +33,8 @@ if ( $row = DB()->sql_fetchrow($result) ) message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql_update); } - if ( intval($bb_cfg['require_activation']) == USER_ACTIVATION_ADMIN && $sql_update_pass == '' ) - { - require(INC_DIR .'emailer.class.php'); - $emailer = new emailer($bb_cfg['smtp_delivery']); - - $emailer->from($bb_cfg['sitename'] ." <{$bb_cfg['board_email']}>"); - $emailer->email_address($row['username'] ." <{$row['user_email']}>"); - - $emailer->use_template('admin_welcome_activated', $row['user_lang']); - - $emailer->assign_vars(array( - 'SITENAME' => $bb_cfg['sitename'], - 'USERNAME' => $row['username'], - 'PASSWORD' => $row['user_newpasswd'], - )); - $emailer->send(); - $emailer->reset(); - - message_die(GENERAL_MESSAGE, $lang['ACCOUNT_ACTIVE_ADMIN']); - } - else - { - $message = ( $sql_update_pass == '' ) ? $lang['ACCOUNT_ACTIVE'] : $lang['PASSWORD_ACTIVATED']; - message_die(GENERAL_MESSAGE, $message); - } + $message = ( $sql_update_pass == '' ) ? $lang['ACCOUNT_ACTIVE'] : $lang['PASSWORD_ACTIVATED']; + message_die(GENERAL_MESSAGE, $message); } else { diff --git a/upload/includes/ucp/usercp_avatar.php b/upload/includes/ucp/usercp_avatar.php deleted file mode 100644 index a250c564d..000000000 --- a/upload/includes/ucp/usercp_avatar.php +++ /dev/null @@ -1,182 +0,0 @@ - '', 'user_avatar_type' => USER_AVATAR_NONE); -} - -function user_avatar_gallery ($mode, &$errors, $avatar_filename, $avatar_category) -{ - global $bb_cfg; - - $avatar_filename = bb_ltrim(basename($avatar_filename), "'"); - $avatar_category = bb_ltrim(basename($avatar_category), "'"); - - if(!preg_match('/(\.gif$|\.png$|\.jpg|\.jpeg)$/is', $avatar_filename)) - { - return ''; - } - if ($avatar_filename == "" || $avatar_category == "") - { - return ''; - } - - if ( file_exists(@bb_realpath($bb_cfg['avatar_gallery_path'] . '/' . $avatar_category . '/' . $avatar_filename)) && ($mode == 'editprofile') ) - { - return array('user_avatar' => DB()->escape($avatar_category . '/' . $avatar_filename), 'user_avatar_type' => USER_AVATAR_GALLERY); - } - else - { - return ''; - } -} - -function user_avatar_upload ($mode, $avatar_mode, &$current_avatar, &$current_type, &$errors, $avatar_filename, $avatar_realname, $avatar_filesize, $avatar_filetype) -{ - global $bb_cfg, $lang; - - $ini_val = ( @phpversion() >= '4.0.0' ) ? 'ini_get' : 'get_cfg_var'; - - $width = $height = 0; - $type = ''; - - if ( ( file_exists(@bb_realpath($avatar_filename)) ) && preg_match('/\.(jpg|jpeg|gif|png)$/i', $avatar_realname) ) - { - if ( $avatar_filesize <= $bb_cfg['avatar_filesize'] && $avatar_filesize > 0 ) - { - preg_match('#image\/[x\-]*([a-z]+)#', $avatar_filetype, $avatar_filetype); - $avatar_filetype = $avatar_filetype[1]; - } - else - { - $errors[] = sprintf($lang['AVATAR_FILESIZE'], round($bb_cfg['avatar_filesize'] / 1024)); - return; - } - - list($width, $height, $type) = @getimagesize($avatar_filename); - } - - if ( !($imgtype = check_image_type($avatar_filetype, $errors)) ) - { - return; - } - - switch ($type) - { - // GIF - case 1: - if ($imgtype != '.gif') - { - @unlink($tmp_filename); - message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); - } - break; - - // JPG, JPC, JP2, JPX, JB2 - case 2: - case 9: - case 10: - case 11: - case 12: - if ($imgtype != '.jpg' && $imgtype != '.jpeg') - { - @unlink($tmp_filename); - message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); - } - break; - - // PNG - case 3: - if ($imgtype != '.png') - { - @unlink($tmp_filename); - message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); - } - break; - - default: - @unlink($tmp_filename); - message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); - } - - if ( $width > 0 && $height > 0 && $width <= $bb_cfg['avatar_max_width'] && $height <= $bb_cfg['avatar_max_height'] ) - { - $new_filename = uniqid(rand()) . $imgtype; - - if ( $mode == 'editprofile' && $current_type == USER_AVATAR_UPLOAD && $current_avatar != '' ) - { - user_avatar_delete($current_type, $current_avatar); - } - - if ( @$ini_val('open_basedir') != '' ) - { - if ( @phpversion() < '4.0.3' ) - { - message_die(GENERAL_ERROR, 'open_basedir is set and your PHP version does not allow move_uploaded_file', '', __LINE__, __FILE__); - } - - $move_file = 'move_uploaded_file'; - } - else - { - $move_file = 'copy'; - } - - if (!is_uploaded_file($avatar_filename)) - { - message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); - } - $move_file($avatar_filename, './' . $bb_cfg['avatar_path'] . "/$new_filename"); - - @chmod('./' . $bb_cfg['avatar_path'] . "/$new_filename", 0777); - return array('user_avatar' => $new_filename, 'user_avatar_type' => USER_AVATAR_UPLOAD); - } - else - { - $errors[] = sprintf($lang['AVATAR_IMAGESIZE'], $bb_cfg['avatar_max_width'], $bb_cfg['avatar_max_height']); - return ''; - } -} \ No newline at end of file diff --git a/upload/includes/ucp/usercp_register.php b/upload/includes/ucp/usercp_register.php index cdbf08349..7f7403372 100644 --- a/upload/includes/ucp/usercp_register.php +++ b/upload/includes/ucp/usercp_register.php @@ -8,10 +8,10 @@ set_die_append_msg(); if (IS_ADMIN) { - $bb_cfg['require_activation'] = false; + $bb_cfg['reg_email_activation'] = false; $new_user = (int) request_var('admin', ''); - if($new_user) $gen_simple_header = true; + if ($new_user) $gen_simple_header = true; $template->assign_vars(array( 'NEW_USER' => $new_user, @@ -27,7 +27,6 @@ $adm_edit = false; // редактирование админом чужого require(INC_DIR .'bbcode.php'); require(INC_DIR .'functions_validate.php'); require(INC_DIR .'functions_selects.php'); -require(INC_DIR .'ucp/usercp_avatar.php'); $pr_data = array(); // данные редактируемого либо регистрационного профиля $db_data = array(); // данные для базы: регистрационные либо измененные данные юзера @@ -55,7 +54,7 @@ switch ($mode) } } // Отключение регистрации - if ($bb_cfg['new_user_reg_disabled']) + if ($bb_cfg['new_user_reg_disabled'] || ($bb_cfg['reg_email_activation'] && $bb_cfg['emailer_disabled'])) { bb_die($lang['NEW_USER_REG_DISABLED']); } @@ -86,6 +85,7 @@ switch ($mode) 'user_timezone' => $bb_cfg['board_timezone'], 'user_lang' => $bb_cfg['default_lang'], 'user_opt' => 0, + 'avatar_ext_id' => 0, ); break; @@ -109,6 +109,7 @@ switch ($mode) 'user_birthday' => true, 'user_timezone' => true, 'user_opt' => true, + 'avatar_ext_id' => true, 'user_icq' => true, 'user_skype' => true, 'user_website' => true, @@ -116,7 +117,6 @@ switch ($mode) 'user_sig' => true, 'user_occ' => true, 'user_interests' => true, - 'user_avatar_type' => true, 'tpl_name' => true, ); @@ -136,7 +136,6 @@ switch ($mode) user_id, user_rank, user_level, - user_avatar, user_email, $profile_fields_sql FROM ". BB_USERS ." @@ -147,25 +146,6 @@ switch ($mode) { bb_die($lang['PROFILE_NOT_FOUND']); } - - if (!bf($pr_data['user_opt'], 'user_opt', 'allow_avatar') && ($bb_cfg['allow_avatar_upload'] || $bb_cfg['allow_avatar_local'])) - { - $template->assign_block_vars('switch_avatar_block', array()); - - if ($bb_cfg['allow_avatar_upload'] && file_exists(@bb_realpath('./' . $bb_cfg['avatar_path']))) - { - $template->assign_block_vars('switch_avatar_block.switch_avatar_local_upload', array()); - } - - if ($bb_cfg['allow_avatar_local'] && file_exists(@bb_realpath('./' . $bb_cfg['avatar_gallery_path']))) - { - $template->assign_block_vars('switch_avatar_block.switch_avatar_local_gallery', array()); - } - } - else - { - $template->assign_block_vars('not_avatar_block', array()); - } break; default: @@ -242,9 +222,9 @@ foreach ($profile_fields as $field => $can_edit) { $errors[] = sprintf($lang['CHOOSE_PASS_ERR_MAX'], 20); } - elseif (mb_strlen($new_pass, 'UTF-8') < 5) + elseif (mb_strlen($new_pass, 'UTF-8') < 4) { - $errors[] = sprintf($lang['CHOOSE_PASS_ERR_MIN'], 5); + $errors[] = sprintf($lang['CHOOSE_PASS_ERR_MIN'], 4); } elseif ($new_pass != $cfm_pass) { @@ -283,7 +263,11 @@ foreach ($profile_fields as $field => $can_edit) { if ($mode == 'register') { - if ($err = validate_email($email)) + if (empty($email)) + { + $errors[] = $lang['CHOOSE_E_MAIL']; + } + if (!$errors AND $err = validate_email($email)) { $errors[] = $err; } @@ -299,7 +283,7 @@ foreach ($profile_fields as $field => $can_edit) { $errors[] = $err; } - if ($bb_cfg['require_activation'] == USER_ACTIVATION_SELF || $bb_cfg['require_activation'] == USER_ACTIVATION_ADMIN) + if ($bb_cfg['reg_email_activation']) { $pr_data['user_active'] = 0; $db_data['user_active'] = 0; @@ -417,6 +401,36 @@ foreach ($profile_fields as $field => $can_edit) } break; + /** + * Avatar (edit) + */ + case 'avatar_ext_id': + if ($submit && !bf($pr_data['user_opt'], 'user_opt', 'allow_avatar')) + { + if (isset($_POST['delete_avatar'])) + { + delete_avatar($pr_data['user_id'], $pr_data['avatar_ext_id']); + $pr_data['avatar_ext_id'] = 0; + $db_data['avatar_ext_id'] = 0; + } + else if (!empty($_FILES['avatar']['name']) && $bb_cfg['avatars']['up_allowed']) + { + require(INC_DIR .'functions_upload.php'); + $upload = new upload_common(); + + if ($upload->init($bb_cfg['avatars'], $_FILES['avatar']) AND $upload->store('avatar', $pr_data)) + { + $pr_data['avatar_ext_id'] = $upload->file_ext_id; + $db_data['avatar_ext_id'] = (int) $upload->file_ext_id; + } + else + { + $errors = array_merge($errors, $upload->errors); + } + } + } + break; + /** * ICQ (edit) */ @@ -453,6 +467,7 @@ foreach ($profile_fields as $field => $can_edit) } else { + $pr_data['user_website'] = ''; $errors[] = htmlCHR($lang['WEBSITE_ERROR']); } } @@ -542,167 +557,6 @@ foreach ($profile_fields as $field => $can_edit) $tp_data['USER_SKYPE'] = $pr_data['user_skype']; break; - case 'user_avatar_type': - if (isset($_POST['avatargallery']) && !$errors) - { - $category = (!empty($_POST['avatarcategory'])) ? htmlspecialchars($_POST['avatarcategory']) : ''; - - $dir = @opendir($bb_cfg['avatar_gallery_path']); - - $avatar_images = array(); - while($file = @readdir($dir)) - { - if($file != '.' && $file != '..' && !is_file($bb_cfg['avatar_gallery_path'] . '/' . $file) && !is_link($bb_cfg['avatar_gallery_path'] . '/' . $file)) - { - $sub_dir = @opendir($bb_cfg['avatar_gallery_path'] . '/' . $file); - - $avatar_row_count = 0; - $avatar_col_count = 0; - while ($sub_file = @readdir($sub_dir)) - { - if (preg_match('/(\.gif$|\.png$|\.jpg|\.jpeg)$/is', $sub_file)) - { - $avatar_images[$file][$avatar_row_count][$avatar_col_count] = $sub_file; - $avatar_name[$file][$avatar_row_count][$avatar_col_count] = ucfirst(str_replace("_", " ", preg_replace('/^(.*)\..*$/', '\1', $sub_file))); - - $avatar_col_count++; - if ($avatar_col_count == 5) - { - $avatar_row_count++; - $avatar_col_count = 0; - } - } - } - } - } - - @closedir($dir); - - @ksort($avatar_images); - @reset($avatar_images); - - if(empty($category)) - { - list($category,) = each($avatar_images); - } - @reset($avatar_images); - - $s_categories = ''; - - $s_colspan = 0; - for ($i = 0; $i < @count($avatar_images[$category]); $i++) - { - $template->assign_block_vars('avatar_row', array()); - - $s_colspan = max($s_colspan, count($avatar_images[$category][$i])); - - for($j = 0; $j < count($avatar_images[$category][$i]); $j++) - { - $template->assign_block_vars('avatar_row.avatar_column', array( - 'AVATAR_IMAGE' => $bb_cfg['avatar_gallery_path'] . '/' . $category . '/' . $avatar_images[$category][$i][$j], - 'AVATAR_NAME' => $avatar_name[$category][$i][$j]) - ); - - $template->assign_block_vars('avatar_row.avatar_option_column', array( - 'S_OPTIONS_AVATAR' => $avatar_images[$category][$i][$j]) - ); - } - } - - $s_hidden_vars = ''; - - $u_id = (isset($_GET['u']) && intval($_GET['u'])) ? intval($_GET['u']) : 0; - $mode = (IS_ADMIN && $u_id) ? $mode . '&u=' . $u_id : $mode; - - $template->assign_vars(array( - 'S_CATEGORY_SELECT' => $s_categories, - 'S_COLSPAN' => $s_colspan, - 'S_PROFILE_ACTION' => 'profile.php?mode='. $mode, - 'S_HIDDEN_FIELDS' => $s_hidden_vars) - ); - - print_page('usercp_avatar_gallery.tpl'); - } - - $user_avatar_local = (isset($_POST['avatarselect']) && !empty($_POST['submitavatar']) && $bb_cfg['allow_avatar_local']) ? htmlspecialchars($_POST['avatarselect']) : ((isset($_POST['avatarlocal'])) ? htmlspecialchars($_POST['avatarlocal']) : ''); - $user_avatar_category = (isset($_POST['avatarcatname']) && $bb_cfg['allow_avatar_local']) ? htmlspecialchars($_POST['avatarcatname']) : ''; - $user_avatar_upload = (!empty($_FILES['avatar']) && $_FILES['avatar']['tmp_name'] != "none") ? $_FILES['avatar']['tmp_name'] : ''; - $user_avatar_name = (!empty($_FILES['avatar']['name'])) ? $_FILES['avatar']['name'] : ''; - $user_avatar_size = (!empty($_FILES['avatar']['size'])) ? $_FILES['avatar']['size'] : 0; - $user_avatar_filetype = (!empty($_FILES['avatar']['type'])) ? $_FILES['avatar']['type'] : ''; - - $user_avatar = (empty($user_avatar_local)) ? $pr_data['user_avatar'] : ''; - $user_avatar_type = (empty($user_avatar_local)) ? $pr_data['user_avatar_type'] : ''; - - if ((isset($_POST['avatargallery']) || isset($_POST['submitavatar']) || isset($_POST['cancelavatar'])) && (!isset($submit))) - { - if (!isset($_POST['cancelavatar'])) - { - $user_avatar = $user_avatar_category . '/' . $user_avatar_local; - $user_avatar_type = USER_AVATAR_GALLERY; - } - } - - $ini_val = (phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var'; - $form_enctype = (@$ini_val('file_uploads') == '0' || strtolower(@$ini_val('file_uploads') == 'off') || phpversion() == '4.0.4pl1' || !$bb_cfg['allow_avatar_upload'] || (phpversion() < '4.0.3' && @$ini_val('open_basedir') != '')) ? '' : 'enctype="multipart/form-data"'; - - $avatar = ''; - - if (isset($_POST['avatardel']) && $mode == 'editprofile') - { - $avatar = user_avatar_delete($pr_data['user_avatar_type'], $pr_data['user_avatar']); - } - else if ((!empty($user_avatar_upload) || !empty($user_avatar_name)) && $bb_cfg['allow_avatar_upload']) - { - if (!empty($user_avatar_upload)) - { - $avatar = user_avatar_upload($mode, 'local', $pr_data['user_avatar'], $pr_data['user_avatar_type'], $errors, $user_avatar_upload, $user_avatar_name, $user_avatar_size, $user_avatar_filetype); - } - else if (!empty($user_avatar_name)) - { - $errors[] = sprintf($lang['AVATAR_FILESIZE'], round($bb_cfg['avatar_filesize'] / 1024)); - } - } - else if ($user_avatar_local != '' && $bb_cfg['allow_avatar_local']) - { - user_avatar_delete($pr_data['user_avatar_type'], $pr_data['user_avatar']); - $avatar = user_avatar_gallery($mode, $errors, $user_avatar_local, $user_avatar_category); - } - - if ($avatar) - { - $user_avatar = $avatar['user_avatar']; - $user_avatar_type = $avatar['user_avatar_type']; - $hidden_vars = ''; - foreach ($_POST as $name => $key) - { - $hidden_vars .= ''; - } - $tp_data['USER_AVATAR'] = get_avatar($user_avatar, $user_avatar_type) . $hidden_vars; - } - else - { - $tp_data['USER_AVATAR'] = get_avatar($pr_data['user_avatar'], $pr_data['user_avatar_type'], !bf($pr_data['user_opt'], 'user_opt', 'allow_avatar')); - } - if ($submit && !bf($pr_data['user_opt'], 'user_opt', 'allow_avatar')) - { - if ($user_avatar != $pr_data['user_avatar'] || $user_avatar_type != $pr_data['user_avatar_type']) - { - $db_data['user_avatar'] = $avatar['user_avatar']; - $db_data['user_avatar_type'] = $avatar['user_avatar_type']; - } - } - break; - /** * Выбор шаблона (edit) */ @@ -768,7 +622,7 @@ if ($submit && !$errors) */ if ($mode == 'register') { - if ($bb_cfg['require_activation'] == USER_ACTIVATION_SELF || $bb_cfg['require_activation'] == USER_ACTIVATION_ADMIN) + if ($bb_cfg['reg_email_activation']) { $user_actkey = make_rand_str(12); $db_data['user_active'] = 0; @@ -797,16 +651,11 @@ if ($submit && !$errors) } else { - if ($bb_cfg['require_activation'] == USER_ACTIVATION_SELF) + if ($bb_cfg['reg_email_activation']) { $message = $lang['ACCOUNT_INACTIVE']; $email_template = 'user_welcome_inactive'; } - else if ($bb_cfg['require_activation'] == USER_ACTIVATION_ADMIN) - { - $message = $lang['ACCOUNT_INACTIVE_ADMIN']; - $email_template = 'admin_welcome_inactive'; - } else { $message = $lang['ACCOUNT_ADDED']; @@ -832,26 +681,6 @@ if ($submit && !$errors) $emailer->send(); $emailer->reset(); - - if ($bb_cfg['require_activation'] == USER_ACTIVATION_ADMIN) - { - $sql = "SELECT username, user_email, user_lang FROM ". BB_USERS ." WHERE user_level = ". ADMIN; - - foreach (DB()->fetch_rowset($sql) as $row) - { - $emailer->from($bb_cfg['sitename'] ." <{$bb_cfg['board_email']}>"); - $emailer->email_address($row['username'] ." <{$row['user_email']}>"); - $emailer->use_template("admin_activate", $row['user_lang']); - - $emailer->assign_vars(array( - 'USERNAME' => html_entity_decode($username), - 'U_ACTIVATE' => make_url('profile.php?mode=activate&' . POST_USERS_URL . '=' . $new_user_id . '&act_key=' . $db_data['user_actkey']) - )); - - $emailer->send(); - $emailer->reset(); - } - } } bb_die($message); @@ -862,6 +691,7 @@ if ($submit && !$errors) else { set_pr_die_append_msg($pr_data['user_id']); + // если что-то было изменено if ($db_data) { @@ -875,15 +705,7 @@ if ($submit && !$errors) $emailer = new emailer($bb_cfg['smtp_delivery']); $emailer->from($bb_cfg['sitename'] ." <{$bb_cfg['board_email']}>"); - - if($bb_cfg['require_activation'] == USER_ACTIVATION_ADMIN) - { - $emailer->use_template('admin_activate', $pr_data['user_lang']); - } - else - { - $emailer->use_template('user_activate', $pr_data['user_lang']); - } + $emailer->use_template('user_activate', $pr_data['user_lang']); $emailer->email_address("$username <$email>"); $emailer->assign_vars(array( @@ -954,14 +776,16 @@ $template->assign_vars(array( 'TIMEZONE_SELECT' => tz_select($user_timezone, 'user_timezone'), 'USER_TIMEZONE' => $pr_data['user_timezone'], - 'AVATAR_EXPLAIN' => sprintf($lang['AVATAR_EXPLAIN'], $bb_cfg['avatar_max_width'], $bb_cfg['avatar_max_height'], (round($bb_cfg['avatar_filesize'] / 1024))), - 'SIGNATURE_EXPLAIN' => sprintf($lang['SIGNATURE_EXPLAIN'], $bb_cfg['max_sig_chars']), + 'AVATAR_EXPLAIN' => sprintf($lang['AVATAR_EXPLAIN'], $bb_cfg['avatars']['max_width'], $bb_cfg['avatars']['max_height'], (round($bb_cfg['avatars']['max_size'] / 1024))), + 'AVATAR_DISALLOWED' => bf($pr_data['user_opt'], 'user_opt', 'allow_avatar'), + 'SIGNATURE_EXPLAIN' => sprintf($lang['SIGNATURE_EXPLAIN'], $bb_cfg['max_sig_chars']), 'SIG_DISALLOWED' => bf($pr_data['user_opt'], 'user_opt', 'allow_sig'), 'PR_USER_ID' => $pr_data['user_id'], 'U_RESET_AUTOLOGIN' => LOGIN_URL . "?logout=1&reset_autologin=1&sid={$userdata['session_id']}", + 'AVATAR_URL_PATH' => ($pr_data['avatar_ext_id']) ? get_avatar_path($pr_data['user_id'], $pr_data['avatar_ext_id']) : '', )); print_page('usercp_register.tpl'); \ No newline at end of file diff --git a/upload/includes/ucp/usercp_viewprofile.php b/upload/includes/ucp/usercp_viewprofile.php index ab60815c1..507400d81 100644 --- a/upload/includes/ucp/usercp_viewprofile.php +++ b/upload/includes/ucp/usercp_viewprofile.php @@ -123,7 +123,6 @@ $template->assign_vars(array( 'GENDER' => ($bb_cfg['gender'] && $profiledata['user_gender']) ? $lang['GENDER_SELECT'][$profiledata['user_gender']] : '', 'BIRTHDAY' => ($bb_cfg['birthday_enabled'] && $profiledata['user_birthday'] != '0000-00-00') ? date('Y-m-d', strtotime($profiledata['user_birthday'])) : '', 'AGE' => ($bb_cfg['birthday_enabled'] && $profiledata['user_birthday'] != '0000-00-00') ? birthday_age($profiledata['user_birthday']) : '', - 'AVATAR_IMG' => get_avatar($profiledata['user_avatar'], $profiledata['user_avatar_type'], !bf($profiledata['user_opt'], 'user_opt', 'allow_avatar')), 'L_VIEWING_PROFILE' => sprintf($lang['VIEWING_USER_PROFILE'], $profiledata['username']), @@ -131,14 +130,17 @@ $template->assign_vars(array( 'U_SEARCH_TOPICS' => "search.php?uid={$profiledata['user_id']}&myt=1", 'U_SEARCH_RELEASES' => "tracker.php?rid={$profiledata['user_id']}#results", + 'AVATAR_IMG' => get_avatar($profiledata['user_id'], $profiledata['avatar_ext_id'], !bf($profiledata['user_opt'], 'user_opt', 'allow_avatar')), + 'AVATAR_DISALLOWED' => bf($profiledata['user_opt'], 'user_opt', 'allow_avatar'), + 'S_PROFILE_ACTION' => 'profile.php', 'SIGNATURE' => $signature, - 'SHOW_PASSKEY' => (IS_ADMIN || $profile_user_id), + 'SHOW_PASSKEY' => (IS_ADMIN || $profile_user_id), 'SHOW_ROLE' => (IS_AM || $profile_user_id || $profiledata['user_active']), 'GROUP_MEMBERSHIP' => false, 'TRAF_STATS' => !(IS_AM || $profile_user_id), - 'U_MANAGE' => (IS_ADMIN) ? "profile.php?mode=editprofile&u={$profiledata['user_id']}" : 'profile.php?mode=editprofile', + 'U_MANAGE' => (IS_ADMIN) ? "profile.php?mode=editprofile&u={$profiledata['user_id']}" : 'profile.php?mode=editprofile', )); if (IS_ADMIN) diff --git a/upload/index.php b/upload/index.php index e1ff5df75..67f0d8628 100644 --- a/upload/index.php +++ b/upload/index.php @@ -220,9 +220,9 @@ $template->assign_vars(array( // Tracker stats 'TORRENTS_STAT' => ($bb_cfg['tor_stats']) ? sprintf($lang['TORRENTS_STAT'], $stats['torrentcount'], humn_size($stats['size'])) : '', - 'PEERS_STAT' => ($bb_cfg['tor_stats']) ? sprintf($lang['PEERS_STAT'], $stats['peers'], $stats['seeders'], $stats['leechers']) : '', - 'SPEED_STAT' => ($bb_cfg['tor_stats']) ? sprintf($lang['SPEED_STAT'], humn_size($stats['speed']) .'/s') : '', - 'SHOW_MOD_INDEX' => $bb_cfg['show_mod_index'], + 'PEERS_STAT' => ($bb_cfg['tor_stats']) ? sprintf($lang['PEERS_STAT'], $stats['peers'], $stats['seeders'], $stats['leechers']) : '', + 'SPEED_STAT' => ($bb_cfg['tor_stats']) ? sprintf($lang['SPEED_STAT'], humn_size($stats['speed']) .'/s') : '', + 'SHOW_MOD_INDEX' => $bb_cfg['show_mod_index'], 'FORUM_IMG' => $images['forum'], 'FORUM_NEW_IMG' => $images['forum_new'], 'FORUM_LOCKED_IMG' => $images['forum_locked'], diff --git a/upload/language/lang_english/email/admin_activate.tpl b/upload/language/lang_english/email/admin_activate.tpl deleted file mode 100644 index e5bf095e5..000000000 --- a/upload/language/lang_english/email/admin_activate.tpl +++ /dev/null @@ -1,10 +0,0 @@ -Subject: New user account -Charset: UTF-8 - -Hello, - -The account owned by "{USERNAME}" has been deactivated or newly created, you should check the details of this user (if required) and activate it using the following link: - -{U_ACTIVATE} - -{EMAIL_SIG} \ No newline at end of file diff --git a/upload/language/lang_english/email/admin_welcome_activated.tpl b/upload/language/lang_english/email/admin_welcome_activated.tpl deleted file mode 100644 index 9ef91ee7e..000000000 --- a/upload/language/lang_english/email/admin_welcome_activated.tpl +++ /dev/null @@ -1,8 +0,0 @@ -Subject: Account Activated -Charset: UTF-8 - -Hello {USERNAME}, - -Your account on "{SITENAME}" has now been activated, you may login using the username and password you received in a previous email. - -{EMAIL_SIG} \ No newline at end of file diff --git a/upload/language/lang_english/email/admin_welcome_inactive.tpl b/upload/language/lang_english/email/admin_welcome_inactive.tpl deleted file mode 100644 index 37ff793c5..000000000 --- a/upload/language/lang_english/email/admin_welcome_inactive.tpl +++ /dev/null @@ -1,19 +0,0 @@ -Subject: Welcome to {SITENAME} Forums -Charset: UTF-8 - -{WELCOME_MSG} - -Please keep this email for your records. Your account information is as follows: - ----------------------------- -Username: {USERNAME} -Password: {PASSWORD} ----------------------------- - -Your account is currently inactive, the administrator of the board will need to activate it before you can log in. You will receive another email when this has occured. - -Please do not forget your password as it has been encrypted in our database and we cannot retrieve it for you. However, should you forget your password you can request a new one which will be activated in the same way as this account. - -Thank you for registering. - -{EMAIL_SIG} \ No newline at end of file diff --git a/upload/language/lang_english/lang_main.php b/upload/language/lang_english/lang_main.php index 5255a5b20..19f06395d 100644 --- a/upload/language/lang_english/lang_main.php +++ b/upload/language/lang_english/lang_main.php @@ -514,7 +514,6 @@ $lang['REGISTRATION_INFO'] = 'Registration Information'; $lang['PROFILE_INFO'] = 'Profile Information'; $lang['PROFILE_INFO_WARN'] = 'This information will be publicly viewable'; $lang['AVATAR_PANEL'] = 'Avatar control panel'; -$lang['AVATAR_GALLERY'] = 'Avatar gallery'; $lang['WEBSITE'] = 'Website'; $lang['LOCATION'] = 'Location'; @@ -598,9 +597,6 @@ $lang['RESET_AUTOLOGIN_EXPL'] = ''; $lang['AVATAR'] = 'Avatar'; $lang['AVATAR_EXPLAIN'] = 'Displays a small graphic image below your details in posts. Only one image can be displayed at a time, its width can be no greater than %d pixels, the height no greater than %d pixels, and the file size no more than %d KB.'; $lang['UPLOAD_AVATAR_FILE'] = 'Upload Avatar from your machine'; -$lang['PICK_LOCAL_AVATAR'] = 'Select Avatar from the gallery'; -$lang['SELECT_FROM_GALLERY'] = 'Select Avatar from gallery'; -$lang['VIEW_AVATAR_GALLERY'] = 'Show gallery'; $lang['SELECT_AVATAR'] = 'Select avatar'; $lang['RETURN_PROFILE'] = 'Return to profile'; @@ -635,7 +631,7 @@ $lang['FIELDS_EMPTY'] = 'You must fill in the required fields.'; $lang['AVATAR_FILETYPE'] = 'The avatar filetype must be .jpg, .gif or .png'; $lang['AVATAR_FILESIZE'] = 'The avatar image file size must be less than %d KB'; // The avatar image file size must be less than 6 KB $lang['AVATAR_IMAGESIZE'] = 'The avatar must be less than %d pixels wide and %d pixels high'; -$lang['AVATAR_DISABLE'] = 'You are not allowed to use an avatar.'; +$lang['AVATAR_DISABLE'] = 'Forbidden to show avatar'; $lang['WELCOME_SUBJECT'] = 'Welcome to %s Forums'; // Welcome to my.com forums $lang['NEW_ACCOUNT_SUBJECT'] = 'New user account'; @@ -643,9 +639,7 @@ $lang['ACCOUNT_ACTIVATED_SUBJECT'] = 'Account Activated'; $lang['ACCOUNT_ADDED'] = 'Thank you for registering. Your account has been created. You may now log in with your username and password'; $lang['ACCOUNT_INACTIVE'] = 'Your account has been created. However, this forum requires account activation. An activation key has been sent to the e-mail address you provided. Please check your e-mail for further information'; -$lang['ACCOUNT_INACTIVE_ADMIN'] = 'Your account has been created. However, this forum requires account activation by the administrator. An e-mail has been sent to them and you will be informed when your account has been activated'; $lang['ACCOUNT_ACTIVE'] = 'Your account has just been activated. Thank you for registering'; -$lang['ACCOUNT_ACTIVE_ADMIN'] = 'The account has just been activated'; $lang['REACTIVATE'] = 'Reactivate your account!'; $lang['ALREADY_ACTIVATED'] = 'You have already activated your account'; @@ -1978,18 +1972,6 @@ $lang['MAX_SIG_LENGTH'] = 'Maximum signature length'; $lang['MAX_SIG_LENGTH_EXPLAIN'] = 'Maximum number of characters in user signatures'; $lang['ALLOW_NAME_CHANGE'] = 'Allow Username changes'; -$lang['AVATAR_SETTINGS'] = 'Avatar Settings'; -$lang['ALLOW_LOCAL'] = 'Enable gallery avatars'; -$lang['ALLOW_UPLOAD'] = 'Enable avatar uploading'; -$lang['MAX_FILESIZE'] = 'Maximum Avatar File Size'; -$lang['MAX_FILESIZE_EXPLAIN'] = 'For uploaded avatar files'; -$lang['MAX_AVATAR_SIZE'] = 'Maximum Avatar Dimensions'; -$lang['MAX_AVATAR_SIZE_EXPLAIN'] = '(Height x Width in pixels)'; -$lang['AVATAR_STORAGE_PATH'] = 'Avatar Storage Path'; -$lang['AVATAR_STORAGE_PATH_EXPLAIN'] = 'Path under your phpBB root dir, e.g. images/avatars'; -$lang['AVATAR_GALLERY_PATH'] = 'Avatar Gallery Path'; -$lang['AVATAR_GALLERY_PATH_EXPLAIN'] = 'Path under your phpBB root dir for pre-loaded images, e.g. images/avatars/gallery'; - $lang['EMAIL_SETTINGS'] = 'Email Settings'; // Visual Confirmation @@ -3194,4 +3176,5 @@ $lang['SORT_OPTIONS'] = 'Sort options:'; $lang['LAST_VISIT'] = 'Last Visit'; $lang['DAY'] = 'Day'; -$lang['POST_EDIT_CANNOT'] = 'Sorry, but you cannot edit posts'; \ No newline at end of file +$lang['POST_EDIT_CANNOT'] = 'Sorry, but you cannot edit posts'; +$lang['FORUMS_IN_CAT'] = 'forums in that category'; \ No newline at end of file diff --git a/upload/language/lang_russian/email/admin_activate.tpl b/upload/language/lang_russian/email/admin_activate.tpl deleted file mode 100644 index d2c1bb802..000000000 --- a/upload/language/lang_russian/email/admin_activate.tpl +++ /dev/null @@ -1,10 +0,0 @@ -Subject: Новый пользователь -Charset: UTF-8 - -Здравствуйте, - -Учётная запись "{USERNAME}" была отключена или только что создана. Вы должны проверить информацию о пользователе и активировать её, перейдя по этой ссылке: - -{U_ACTIVATE} - -{EMAIL_SIG} \ No newline at end of file diff --git a/upload/language/lang_russian/email/admin_welcome_activated.tpl b/upload/language/lang_russian/email/admin_welcome_activated.tpl deleted file mode 100644 index ffd00f427..000000000 --- a/upload/language/lang_russian/email/admin_welcome_activated.tpl +++ /dev/null @@ -1,8 +0,0 @@ -Subject: Учётная запись активирована -Charset: UTF-8 - -Здравствуйте, {USERNAME}! - -Ваша учётная запись на сайте "{SITENAME}" была активирована. Теперь вы можете входить в систему, используя имя и пароль, присланные вам в предыдущем письме. - -{EMAIL_SIG} \ No newline at end of file diff --git a/upload/language/lang_russian/email/admin_welcome_inactive.tpl b/upload/language/lang_russian/email/admin_welcome_inactive.tpl deleted file mode 100644 index c2921dd90..000000000 --- a/upload/language/lang_russian/email/admin_welcome_inactive.tpl +++ /dev/null @@ -1,19 +0,0 @@ -Subject: Добро пожаловать на сайт {SITENAME} -Charset: UTF-8 - -{WELCOME_MSG} - -Пожалуйста, сохраните это сообщение. Параметры вашей учётной записи таковы: - ----------------------------- -Имя пользователя: {USERNAME} -Пароль: {PASSWORD} ----------------------------- - -Ваша учётная запись ещё не активна, её должен активировать администратор сайта. Как только это произойдёт, вам будет прислано письмо. - -Не забывайте свой пароль: он хранится в нашей базе в зашифрованном виде, и мы не сможем вам его выслать. Если вы всё же забудете пароль, то сможете запросить новый, который придётся активировать таким же образом, как и вашу учётную запись. - -Спасибо за то, что зарегистрировались на нашем сайте. - -{EMAIL_SIG} \ No newline at end of file diff --git a/upload/language/lang_russian/email/privmsg_notify.tpl b/upload/language/lang_russian/email/privmsg_notify.tpl index 710506d54..9e3395d1c 100644 --- a/upload/language/lang_russian/email/privmsg_notify.tpl +++ b/upload/language/lang_russian/email/privmsg_notify.tpl @@ -9,6 +9,6 @@ Charset: UTF-8 {U_INBOX} -Вы можете отказаться от получения подобных уведомлений, если измените настройки в своём профиле. +Вы можете отказаться от получения подобных уведомлений, если измените настройки в своем профиле. {EMAIL_SIG} \ No newline at end of file diff --git a/upload/language/lang_russian/email/topic_notify.tpl b/upload/language/lang_russian/email/topic_notify.tpl index bd635c7fd..ded189b69 100644 --- a/upload/language/lang_russian/email/topic_notify.tpl +++ b/upload/language/lang_russian/email/topic_notify.tpl @@ -7,7 +7,7 @@ Charset: UTF-8 {U_TOPIC} -Если вы больше не хотите следить за темой, то либо щёлкните по ссылке "перестать следить за темой" внизу страницы, либо перейдите по следующей ссылке: +Если вы больше не хотите следить за темой, то либо щелкните по ссылке "перестать следить за темой" внизу страницы, либо перейдите по следующей ссылке: {U_STOP_WATCHING_TOPIC} diff --git a/upload/language/lang_russian/email/user_activate.tpl b/upload/language/lang_russian/email/user_activate.tpl index 0598a0cf6..0c18f01e1 100644 --- a/upload/language/lang_russian/email/user_activate.tpl +++ b/upload/language/lang_russian/email/user_activate.tpl @@ -1,9 +1,9 @@ -Subject: Повторная активация учётной записи +Subject: Повторная активация учетной записи Charset: UTF-8 Здравствуйте, {USERNAME}! -Ваша учётная запись на сайте {SITENAME} была отключена, скорее всего из-за внесённых в ваш профиль изменений. Чтобы вновь её активировать, перейдите по этой ссылке: +Ваша учетная запись на сайте {SITENAME} была отключена, скорее всего из-за внесенных в ваш профиль изменений. Чтобы вновь ее активировать, перейдите по этой ссылке: {U_ACTIVATE} diff --git a/upload/language/lang_russian/email/user_activate_passwd.tpl b/upload/language/lang_russian/email/user_activate_passwd.tpl index a8173b7e3..06a3828b8 100644 --- a/upload/language/lang_russian/email/user_activate_passwd.tpl +++ b/upload/language/lang_russian/email/user_activate_passwd.tpl @@ -3,7 +3,7 @@ Charset: UTF-8 Здравствуйте, {USERNAME}! -Вы получили это письмо потому, что вы (либо кто-то, выдающий себя за вас) попросили выслать новый пароль к вашей учётной записи на сайте {SITENAME}. Если вы не просили выслать пароль, то не обращайте внимания на это письмо, если же подобные письма будут продолжать приходить, обратитесь к администратору сайта. +Вы получили это письмо потому, что вы (либо кто-то, выдающий себя за вас) попросили выслать новый пароль к вашей учетной записи на сайте {SITENAME}. Если вы не просили выслать пароль, то не обращайте внимания на это письмо, если же подобные письма будут продолжать приходить, обратитесь к администратору сайта. Прежде чем использовать новый пароль, вы должны его активировать. Для этого перейдите по ссылке: diff --git a/upload/language/lang_russian/email/user_welcome.tpl b/upload/language/lang_russian/email/user_welcome.tpl index 328f8117c..a8cef0bcb 100644 --- a/upload/language/lang_russian/email/user_welcome.tpl +++ b/upload/language/lang_russian/email/user_welcome.tpl @@ -3,14 +3,14 @@ Charset: UTF-8 {WELCOME_MSG} -Пожалуйста сохраните это сообщение. Параметры вашей учётной записи таковы: +Пожалуйста сохраните это сообщение. Параметры вашей учетной записи таковы: ---------------------------- Имя пользователя: {USERNAME} Пароль: {PASSWORD} ---------------------------- -Не забывайте свой пароль: он хранится в нашей базе в зашифрованном виде, и мы не сможем вам его выслать. Если вы всё же забудете пароль, то сможете запросить новый, который придётся активировать таким же образом, как и вашу учётную запись. +Не забывайте свой пароль: он хранится в нашей базе в зашифрованном виде, и мы не сможем вам его выслать. Если вы все же забудете пароль, то сможете запросить новый, который придется активировать таким же образом, как и вашу учетную запись. Спасибо за то, что зарегистрировались на нашем сайте. diff --git a/upload/language/lang_russian/email/user_welcome_inactive.tpl b/upload/language/lang_russian/email/user_welcome_inactive.tpl index bcac422b1..b34245a39 100644 --- a/upload/language/lang_russian/email/user_welcome_inactive.tpl +++ b/upload/language/lang_russian/email/user_welcome_inactive.tpl @@ -3,18 +3,18 @@ Charset: UTF-8 {WELCOME_MSG} -Пожалуйста сохраните это сообщение. Параметры вашей учётной записи таковы: +Пожалуйста сохраните это сообщение. Параметры вашей учетной записи таковы: ---------------------------- Имя пользователя: {USERNAME} Пароль: {PASSWORD} ---------------------------- -Ваша учётная запись ещё не активна. Вы не сможете ей пользоваться, пока не перейдёте по следующей ссылке: +Ваша учетная запись еще не активна. Вы не сможете ей пользоваться, пока не перейдете по следующей ссылке: {U_ACTIVATE} -Не забывайте свой пароль: он хранится в нашей базе в зашифрованном виде, и мы не сможем вам его выслать. Если вы всё же забудете пароль, то сможете запросить новый, который придётся активировать таким же образом, как и вашу учётную запись. +Не забывайте свой пароль: он хранится в нашей базе в зашифрованном виде, и мы не сможем вам его выслать. Если вы все же забудете пароль, то сможете запросить новый, который придется активировать таким же образом, как и вашу учетную запись. Спасибо за то, что зарегистрировались на нашем сайте. diff --git a/upload/language/lang_russian/lang_main.php b/upload/language/lang_russian/lang_main.php index 63cc05854..d918161a3 100644 --- a/upload/language/lang_russian/lang_main.php +++ b/upload/language/lang_russian/lang_main.php @@ -84,7 +84,7 @@ $lang['REPLY_TO_TOPIC'] = 'Ответить на тему'; $lang['REPLY_WITH_QUOTE'] = 'Ответить с цитатой'; $lang['CLICK_RETURN_TOPIC'] = '%sВернуться в тему%s'; -$lang['CLICK_RETURN_LOGIN'] = '%sПопробовать ещё раз%s'; +$lang['CLICK_RETURN_LOGIN'] = '%sПопробовать еще раз%s'; $lang['CLICK_RETURN_FORUM'] = '%sВернуться в форум%s'; $lang['CLICK_VIEW_MESSAGE'] = '%sПросмотреть ваше сообщение%s'; $lang['CLICK_RETURN_MODCP'] = '%sВернуться к панели модерации%s'; @@ -187,8 +187,8 @@ $lang['PRIVATE_MESSAGE'] = 'Личное сообщение'; $lang['PRIVATE_MESSAGES'] = 'Личные сообщения'; $lang['WHOSONLINE'] = 'Кто сейчас на форуме'; -$lang['MARK_ALL_FORUMS_READ'] = 'Отметить все форумы как прочтённые'; -$lang['FORUMS_MARKED_READ'] = 'Все форумы были отмечены как прочтённые'; +$lang['MARK_ALL_FORUMS_READ'] = 'Отметить все форумы как прочтенные'; +$lang['FORUMS_MARKED_READ'] = 'Все форумы были отмечены как прочтенные'; $lang['LATEST_NEWS'] = 'Новости трекера'; $lang['NETWORK_NEWS'] = 'Новости в сети'; @@ -213,8 +213,8 @@ $lang['TOPIC_STICKY'] = 'Прилеплена:'; $lang['TOPIC_MOVED'] = 'Перемещена:'; $lang['TOPIC_POLL'] = '[ Опрос ]'; -$lang['MARK_TOPICS_READ'] = 'Отметить все темы как прочтённые'; -$lang['TOPICS_MARKED_READ'] = 'Все темы в этом форуме были отмечены как прочтённые'; +$lang['MARK_TOPICS_READ'] = 'Отметить все темы как прочтенные'; +$lang['TOPICS_MARKED_READ'] = 'Все темы в этом форуме были отмечены как прочтенные'; $lang['RULES_POST_CAN'] = 'Вы можете начинать темы'; $lang['RULES_POST_CANNOT'] = 'Вы не можете начинать темы'; @@ -343,8 +343,8 @@ $lang['TOPIC_LOCKED'] = 'Эта тема закрыта, вы не можете $lang['TOPIC_LOCKED_SHORT'] = 'Тема закрыта'; $lang['NO_POST_ID'] = 'Вы должны выбрать сообщение для редактирования'; $lang['NO_TOPIC_ID'] = 'Вы должны выбрать тему для ответа'; -$lang['NO_VALID_MODE'] = 'Вы можете только создавать темы, отвечать и редактировать сообщения. Вернитесь и попробуйте ещё раз.'; -$lang['NO_SUCH_POST'] = 'Сообщение отсутствует. Вернитесь и попробуйте ещё раз.'; +$lang['NO_VALID_MODE'] = 'Вы можете только создавать темы, отвечать и редактировать сообщения. Вернитесь и попробуйте еще раз.'; +$lang['NO_SUCH_POST'] = 'Сообщение отсутствует. Вернитесь и попробуйте еще раз.'; $lang['EDIT_OWN_POSTS'] = 'Извините, вы можете редактировать только ваши собственные сообщения'; $lang['DELETE_OWN_POSTS'] = 'Извините, вы можете удалять только ваши собственные сообщения'; $lang['CANNOT_DELETE_REPLIED'] = 'Извините, вы не можете удалить сообщение, на которое были получены ответы'; @@ -361,7 +361,7 @@ $lang['ADD_POLL'] = 'Добавить опрос'; $lang['ADD_POLL_EXPLAIN'] = 'Если вы не хотите добавлять опрос к вашему сообщению, оставьте поля пустыми'; $lang['POLL_QUESTION'] = 'Вопрос'; $lang['POLL_OPTION'] = 'Вариант ответа'; -$lang['ADD_OPTION'] = 'Добавить ещё вариант'; +$lang['ADD_OPTION'] = 'Добавить еще вариант'; $lang['UPDATE'] = 'Обновить'; $lang['POLL_FOR'] = 'Опрос должен идти'; $lang['DAYS'] = 'Дней'; @@ -376,8 +376,8 @@ $lang['NOTIFY'] = 'Сообщать мне о получении ответа'; $lang['STORED'] = 'Сообщение было успешно добавлено'; $lang['EDITED'] = 'Сообщение было успешно изменено'; $lang['DELETED'] = 'Cообщение было успешно удалено'; -$lang['POLL_DELETE'] = 'Ваш опрос был успешно удалён'; -$lang['VOTE_CAST'] = 'Ваш голос был учтён'; +$lang['POLL_DELETE'] = 'Ваш опрос был успешно удален'; +$lang['VOTE_CAST'] = 'Ваш голос был учтен'; $lang['TOPIC_REPLY_NOTIFICATION'] = 'Уведомление об ответе в теме'; $lang['EMOTICONS'] = 'Смайлики'; @@ -385,20 +385,20 @@ $lang['MORE_EMOTICONS'] = 'Дополнительные смайлики'; $lang['FONT_COLOR'] = 'Цвет'; $lang['COLOR_DEFAULT'] = 'По умолчанию'; -$lang['COLOR_DARK_RED'] = 'Тёмно-красный'; +$lang['COLOR_DARK_RED'] = 'Темно-красный'; $lang['COLOR_RED'] = 'Красный'; $lang['COLOR_ORANGE'] = 'Оранжевый'; $lang['COLOR_BROWN'] = 'Коричневый'; -$lang['COLOR_YELLOW'] = 'Жёлтый'; -$lang['COLOR_GREEN'] = 'Зелёный'; +$lang['COLOR_YELLOW'] = 'Желтый'; +$lang['COLOR_GREEN'] = 'Зеленый'; $lang['COLOR_OLIVE'] = 'Оливковый'; $lang['COLOR_CYAN'] = 'Голубой'; $lang['COLOR_BLUE'] = 'Синий'; -$lang['COLOR_DARK_BLUE'] = 'Тёмно-синий'; +$lang['COLOR_DARK_BLUE'] = 'Темно-синий'; $lang['COLOR_INDIGO'] = 'Индиго'; $lang['COLOR_VIOLET'] = 'Фиолетовый'; $lang['COLOR_WHITE'] = 'Белый'; -$lang['COLOR_BLACK'] = 'Чёрный'; +$lang['COLOR_BLACK'] = 'Черный'; $lang['FONT_SIZE'] = 'Размер'; $lang['FONT_TINY'] = 'Очень маленький'; @@ -409,7 +409,7 @@ $lang['FONT_HUGE'] = 'Огромный'; $lang['STYLES_TIP'] = 'Подсказка: можно быстро применить стили к выделенному тексту'; -$lang['NEW_POSTS_PREVIEW'] = 'В топике есть новые, изменённые или непрочитанные сообщения'; +$lang['NEW_POSTS_PREVIEW'] = 'В топике есть новые, измененные или непрочитанные сообщения'; // // Private Messaging @@ -435,7 +435,7 @@ $lang['EDIT_PM'] = 'Редактировать сообщение'; $lang['INBOX'] = 'Входящие'; $lang['OUTBOX'] = 'Исходящие'; -$lang['SAVEBOX'] = 'Сохранённые'; +$lang['SAVEBOX'] = 'Сохраненные'; $lang['SENTBOX'] = 'Отправленные'; $lang['FLAG'] = 'Флаг'; $lang['SUBJECT'] = 'Тема'; @@ -469,7 +469,7 @@ $lang['MESSAGE_SENT'] = 'Ваше сообщение было отправл $lang['CLICK_RETURN_INBOX'] = 'Перейти в папку:

%sВходящие%s'; $lang['CLICK_RETURN_SENTBOX'] = '   %sОтправленные%s'; $lang['CLICK_RETURN_OUTBOX'] = '   %sИсходящие%s'; -$lang['CLICK_RETURN_SAVEBOX'] = '   %sСохранённые%s'; +$lang['CLICK_RETURN_SAVEBOX'] = '   %sСохраненные%s'; $lang['CLICK_RETURN_INDEX'] = '%sВернуться к списку форумов%s'; $lang['SEND_A_NEW_MESSAGE'] = 'Отправить личное сообщение'; @@ -495,11 +495,11 @@ $lang['CONFIRM_DELETE_PMS'] = 'Вы уверены, что хотите удал $lang['INBOX_SIZE'] = 'Ваша папка «Входящие»
заполнена на %d%%'; // eg. Your Inbox is 50% full $lang['SENTBOX_SIZE'] = 'Ваша папка «Отправленные»
заполнена на %d%%'; -$lang['SAVEBOX_SIZE'] = 'Ваша папка «Сохранённые»
заполнена на %d%%'; +$lang['SAVEBOX_SIZE'] = 'Ваша папка «Сохраненные»
заполнена на %d%%'; $lang['CLICK_VIEW_PRIVMSG'] = '%sПерейти в папку «Входящие»%s'; -$lang['OUTBOX_EXPL'] = 'В папке Исходящие находятся отправленные, но еще не прочтённые получателем сообщения. В Отправленные они попадают только после того, как получатель их прочтет. Сообщения, находящиеся в папке Исходящие, можно отредактировать или удалить.'; +$lang['OUTBOX_EXPL'] = 'В папке Исходящие находятся отправленные, но еще не прочтенные получателем сообщения. В Отправленные они попадают только после того, как получатель их прочтет. Сообщения, находящиеся в папке Исходящие, можно отредактировать или удалить.'; // // Profiles/Registration @@ -515,7 +515,6 @@ $lang['REGISTRATION_INFO'] = 'Регистрационная информаци $lang['PROFILE_INFO'] = 'Профиль'; $lang['PROFILE_INFO_WARN'] = 'Эта информация будет в открытом доступе'; $lang['AVATAR_PANEL'] = 'Управление аватарой'; -$lang['AVATAR_GALLERY'] = 'Галерея аватар'; $lang['WEBSITE'] = 'Сайт'; $lang['LOCATION'] = 'Откуда'; @@ -542,7 +541,7 @@ $lang['ONLY_ONE_AVATAR'] = 'Может быть указан только оди $lang['FILE_NO_DATA'] = 'Файл по указанному вами URL не содержит данных'; $lang['NO_CONNECTION_URL'] = 'Невозможно установить соединения с указанным вами URL'; $lang['INCOMPLETE_URL'] = 'Вы указали неполный URL'; -$lang['NO_SEND_ACCOUNT_INACTIVE'] = 'Извините, но пароль не может быть выслан (учётная запись неактивна)'; +$lang['NO_SEND_ACCOUNT_INACTIVE'] = 'Извините, но пароль не может быть выслан (учетная запись неактивна)'; $lang['NO_SEND_ACCOUNT'] = 'Извините, но пароль для этого пользователя не может быть выслан. Обратитесь к администраторам форума за дополнительной информацией'; $lang['ALWAYS_ADD_SIG'] = 'Всегда присоединять мою подпись'; @@ -598,11 +597,8 @@ $lang['RESET_AUTOLOGIN'] = 'Удалить ключ автоматическог $lang['RESET_AUTOLOGIN_EXPL'] = 'включая все места, где вы заходили на форум с включенным авто-входом'; $lang['AVATAR'] = 'Аватара'; -$lang['AVATAR_EXPLAIN'] = 'Показывает небольшое изображение под информацией о вас в сообщениях. Может быть показано только одно изображение, шириной не более %d пикселов, высотой не более %d пикселов и объёмом не более %d кб.'; +$lang['AVATAR_EXPLAIN'] = 'Показывает небольшое изображение под информацией о вас в сообщениях. Может быть показано только одно изображение, шириной не более %d пикселов, высотой не более %d пикселов и объемом не более %d кб.'; $lang['UPLOAD_AVATAR_FILE'] = 'Загрузить аватару с вашего компьютера'; -$lang['PICK_LOCAL_AVATAR'] = 'Выбрать аватару из галереи'; -$lang['SELECT_FROM_GALLERY'] = 'Выбрать аватару из галереи'; -$lang['VIEW_AVATAR_GALLERY'] = 'Показать галерею'; $lang['SELECT_AVATAR'] = 'Выберите аватару'; $lang['RETURN_PROFILE'] = 'Вернуться к профилю'; @@ -615,11 +611,11 @@ $lang['NOTIFY_ON_PRIVMSG'] = 'Уведомлять о новых личных с $lang['HIDE_USER'] = 'Скрывать ваше пребывание на форуме'; $lang['HIDDEN_USER'] = 'Скрыто пользователем'; -$lang['PROFILE_UPDATED'] = 'Ваш профиль был изменён'; -$lang['PROFILE_UPDATED_INACTIVE'] = 'Ваш профиль был изменён, но вы изменили важные данные, так что теперь ваша учётная запись неактивна. Проверьте ваш почтовый ящик, чтобы узнать как вновь активировать учётную запись или, если требуется одобрение администратора, подождите, пока это сделает администратор.'; +$lang['PROFILE_UPDATED'] = 'Ваш профиль был изменен'; +$lang['PROFILE_UPDATED_INACTIVE'] = 'Ваш профиль был изменен, но вы изменили важные данные, так что теперь ваша учетная запись неактивна. Проверьте ваш почтовый ящик, чтобы узнать как вновь активировать учетную запись или, если требуется одобрение администратора, подождите, пока это сделает администратор.'; -$lang['PASSWORD_MISMATCH'] = 'Введённые пароли не совпадают'; -$lang['CURRENT_PASSWORD_MISMATCH'] = 'Введённый вами пароль не совпадает с паролем из базы'; +$lang['PASSWORD_MISMATCH'] = 'Введенные пароли не совпадают'; +$lang['CURRENT_PASSWORD_MISMATCH'] = 'Введенный вами пароль не совпадает с паролем из базы'; $lang['PASSWORD_LONG'] = 'Ваш пароль должен быть не длиннее 20 символов'; $lang['TOO_MANY_REGISTERS'] = 'Вы исчерпали предельное количество попыток регистрации для данной сессии. Пожалуйста, повторите попытку позднее.'; $lang['USERNAME_TAKEN'] = 'Извините, пользователь с таким именем уже существует'; @@ -628,44 +624,42 @@ $lang['USERNAME_DISALLOWED'] = 'Извините, это имя было зап $lang['USERNAME_TOO_LONG'] = 'Слишком длинное имя'; $lang['USERNAME_TOO_SMALL'] = 'Слишком короткое имя'; $lang['EMAIL_TAKEN'] = 'Извините, этот e-mail адрес уже занят другим пользователем'; -$lang['EMAIL_BANNED'] = 'Извините, адрес %s находится в чёрном списке'; +$lang['EMAIL_BANNED'] = 'Извините, адрес %s находится в черном списке'; $lang['EMAIL_INVALID'] = 'Извините, но этот e-mail адрес неправилен'; $lang['EMAIL_TOO_LONG'] = 'Слишком длинный email адрес'; $lang['SIGNATURE_TOO_LONG'] = 'Слишком длинная подпись'; $lang['SIGNATURE_ERROR_HTML'] = 'Подпись может содержать только BBCode'; $lang['FIELDS_EMPTY'] = 'Вы должны заполнить обязательные поля'; $lang['AVATAR_FILETYPE'] = 'Файл аватары должен быть .jpg, .gif или .png'; -$lang['AVATAR_FILESIZE'] = 'Объём файла аватары должен быть не более %d кб'; +$lang['AVATAR_FILESIZE'] = 'Объем файла аватары должен быть не более %d кб'; $lang['AVATAR_IMAGESIZE'] = 'Аватара должна быть не больше %d пикселов в ширину и %d пикселов в высоту'; -$lang['AVATAR_DISABLE'] = 'Вам запрещено использовать аватару.'; +$lang['AVATAR_DISABLE'] = 'Запрещено показывать аватар'; $lang['WELCOME_SUBJECT'] = 'Добро пожаловать на сайт %s'; $lang['NEW_ACCOUNT_SUBJECT'] = 'Новый пользователь'; -$lang['ACCOUNT_ACTIVATED_SUBJECT'] = 'Учётная запись активирована'; +$lang['ACCOUNT_ACTIVATED_SUBJECT'] = 'Учетная запись активирована'; -$lang['ACCOUNT_ADDED'] = 'Спасибо за регистрацию, учётная запись была создана. Вы можете войти в систему, используя ваше имя и пароль.'; -$lang['ACCOUNT_INACTIVE'] = 'Учётная запись была создана. На этом форуме требуется активация учётной записи, ключ для активации был выслан на введённый вами адрес. Проверьте свою почту для более подробной информации.'; -$lang['ACCOUNT_INACTIVE_ADMIN'] = 'Учётная запись была создана. На этом форуме требуется активизация новой учётной записи администраторами. Им был отправлен e-mail, и, как только они активируют вашу учётную запись, вы получите уведомление.'; -$lang['ACCOUNT_ACTIVE'] = 'Ваша учётная запись была активирована. Спасибо за регистрацию.'; -$lang['ACCOUNT_ACTIVE_ADMIN'] = 'Ваша учётная запись была активирована.'; -$lang['REACTIVATE'] = 'Вновь активировать учётную запись'; -$lang['ALREADY_ACTIVATED'] = 'Вы уже активировали свою учётную запись'; +$lang['ACCOUNT_ADDED'] = 'Спасибо за регистрацию, учетная запись была создана. Вы можете войти в систему, используя ваше имя и пароль.'; +$lang['ACCOUNT_INACTIVE'] = 'Учетная запись была создана. На этом форуме требуется активация учетной записи, ключ для активации был выслан на введенный вами адрес. Проверьте свою почту для более подробной информации.'; +$lang['ACCOUNT_ACTIVE'] = 'Ваша учетная запись была активирована. Спасибо за регистрацию'; +$lang['REACTIVATE'] = 'Вновь активировать учетную запись'; +$lang['ALREADY_ACTIVATED'] = 'Вы уже активировали свою учетную запись'; $lang['REGISTRATION'] = 'Условия регистрации'; -$lang['WRONG_ACTIVATION'] = 'Введённый вами ключ активации не совпадает с хранящимся в базе'; +$lang['WRONG_ACTIVATION'] = 'Введенный вами ключ активации не совпадает с хранящимся в базе'; $lang['SEND_PASSWORD'] = 'Выслать новый пароль'; $lang['PASSWORD_UPDATED'] = 'Новый пароль был создан, проверьте почтовый ящик, чтобы узнать как его активировать'; -$lang['NO_EMAIL_MATCH'] = 'Введённый вами адрес e-mail не совпадает с записанным на этого пользователя'; +$lang['NO_EMAIL_MATCH'] = 'Введенный вами адрес e-mail не совпадает с записанным на этого пользователя'; $lang['NEW_PASSWORD_ACTIVATION'] = 'Активация нового пароля'; -$lang['PASSWORD_ACTIVATED'] = 'Ваша учётная запись была вновь активирована. Для входа в систему используйте пароль из присланного вам письма.'; +$lang['PASSWORD_ACTIVATED'] = 'Ваша учетная запись была вновь активирована. Для входа в систему используйте пароль из присланного вам письма.'; $lang['SEND_EMAIL_MSG'] = 'Отправить e-mail'; $lang['NO_USER_SPECIFIED'] = 'Пользователь не был выбран'; $lang['USER_PREVENT_EMAIL'] = 'Пользователь не желает получать e-mail. Попробуйте отправить ему/ей личное сообщение'; $lang['USER_NOT_EXIST'] = 'Пользователя не существует'; $lang['EMAIL_MESSAGE_DESC'] = 'Сообщение будет отправлено в виде простого текста, не включайте в него HTML или BBCode. В качестве обратного адреса будет показываться ваш e-mail адрес.'; -$lang['FLOOD_EMAIL_LIMIT'] = 'Вы не можете отправить ещё один e-mail сразу после предыдущего, повторите запрос позднее.'; +$lang['FLOOD_EMAIL_LIMIT'] = 'Вы не можете отправить еще один e-mail сразу после предыдущего, повторите запрос позднее.'; $lang['RECIPIENT'] = 'Получатель'; $lang['EMAIL_SENT'] = 'Сообщение было отправлено'; $lang['SEND_EMAIL'] = 'Отправить e-mail'; @@ -734,7 +728,7 @@ $lang['NO_GROUPS_EXIST'] = 'Нет ни одной группы'; $lang['GROUP_NOT_EXIST'] = 'Такой группы не существует'; $lang['NO_GROUP_MEMBERS'] = 'В этой группе нет ни одного члена'; -$lang['HIDDEN_GROUP_MEMBERS'] = 'Эта группа скрыта, вы не можете посмотреть её состав'; +$lang['HIDDEN_GROUP_MEMBERS'] = 'Эта группа скрыта, вы не можете посмотреть ее состав'; $lang['NO_PENDING_GROUP_MEMBERS'] = 'В этой группе нет кандидатов в члены'; $lang['GROUP_JOINED'] = 'Вы попросили о вступлении в группу. Когда вашу просьбу одобрит модератор группы, вам будет прислано уведомление.'; $lang['GROUP_REQUEST'] = 'Было подана просьба о вступлении в группу.'; @@ -742,7 +736,7 @@ $lang['GROUP_APPROVED'] = 'Ваша просьба была удовлетвор $lang['GROUP_ADDED'] = 'Вы были включены в группу'; $lang['ALREADY_MEMBER_GROUP'] = 'Вы уже являетесь членом этой группы'; $lang['USER_IS_MEMBER_GROUP'] = 'Пользователь уже является членом этой группы'; -$lang['GROUP_TYPE_UPDATED'] = 'Тип группы успешно изменён'; +$lang['GROUP_TYPE_UPDATED'] = 'Тип группы успешно изменен'; $lang['EFFECTIVE_DATE'] = 'Дата вступления'; $lang['COULD_NOT_ADD_USER'] = 'Выбранного пользователя не существует'; @@ -760,7 +754,7 @@ $lang['REMOVE_SELECTED'] = 'Удалить выделенное'; $lang['ADD_MEMBER'] = 'Добавить члена группы'; $lang['NOT_GROUP_MODERATOR'] = 'Вы не являетесь модератором группы и не можете выполнить данное действие'; -$lang['LOGIN_TO_JOIN'] = 'Войдите в систему, чтобы менять своё членство в группах'; +$lang['LOGIN_TO_JOIN'] = 'Войдите в систему, чтобы менять свое членство в группах'; $lang['THIS_OPEN_GROUP'] = 'Это группа с открытым членством, вы можете подать просьбу о вступлении'; $lang['THIS_CLOSED_GROUP'] = 'Это группа с закрытым членством, новые пользователи не принимаются'; $lang['THIS_HIDDEN_GROUP'] = 'Это скрытая группа, автоматическое добавление пользователей не разрешается'; @@ -944,7 +938,7 @@ $lang['11'] = 'GMT + 11'; $lang['12'] = 'GMT + 12'; $lang['13'] = 'GMT + 13'; -// это для выпадающего меню, раньше тут ещё были города +// это для выпадающего меню, раньше тут еще были города $lang['TZ']['-12'] = 'GMT - 12'; $lang['TZ']['-11'] = 'GMT - 11'; $lang['TZ']['-10'] = 'GMT - 10'; @@ -1064,7 +1058,7 @@ $lang['FILENAME'] = 'Имя файла'; $lang['FILE_COMMENT'] = 'Комментарий'; // Posting/PM -> Posted Attachments -$lang['POSTED_ATTACHMENTS'] = 'Прикреплённые файлы'; +$lang['POSTED_ATTACHMENTS'] = 'Прикрепленные файлы'; $lang['UPDATE_COMMENT'] = 'Обновить комментарий'; $lang['DELETE_ATTACHMENTS'] = 'Удалить файлы'; $lang['DELETE_ATTACHMENT'] = 'Удалить файл'; @@ -1116,9 +1110,9 @@ $lang['FTP_ERROR_PASV_MODE'] = 'Невозможно включить/отклю // Attach Rules Window $lang['RULES_PAGE'] = 'Правила вложений'; -$lang['ATTACH_RULES_TITLE'] = 'Разрешённые группы расширений и их размер'; +$lang['ATTACH_RULES_TITLE'] = 'Разрешенные группы расширений и их размер'; $lang['GROUP_RULE_HEADER'] = '%s -> Максимальный общий размер: %s'; // Replace first %s with Extension Group, second one with the Size STRING -$lang['ALLOWED_EXTENSIONS_AND_SIZES'] = 'Разрешённые расширения и их размер'; +$lang['ALLOWED_EXTENSIONS_AND_SIZES'] = 'Разрешенные расширения и их размер'; $lang['NOTE_USER_EMPTY_GROUP_PERMISSIONS'] = 'ВНИМАНИЕ:
Вы можете отправлять вложения в этот форум,
но, так как ни одной группе расширений не разрешено быть вложенной здесь,
вы не можете ничего отправить. Если вы попытаетесь,
то получите сообщение об ошибке.
'; // Quota Variables @@ -1198,7 +1192,7 @@ $lang['TOR_STATUS_CHANGED'] = 'Статус изменил: '; $lang['TOR_BACK'] = ' назад'; $lang['PROCEED'] = 'Продолжить'; $lang['INVALID_ATTACH_ID'] = 'Отсутствует идентификатор файла!'; -$lang['CHANGE_TOR_TYPE'] = 'Тип торрента успешно изменён'; +$lang['CHANGE_TOR_TYPE'] = 'Тип торрента успешно изменен'; $lang['DEL_TORRENT'] = 'Вы уверены, что хотите удалить торрент?'; $lang['DEL_MOVE_TORRENT'] = 'Вы уверены, что хотите удалить и перенести топик?'; $lang['UNEXECUTED_RELEASE'] = 'У вас есть неоформленный релиз, прежде чем создавать новый - исправьте свой неоформленный!'; @@ -1209,7 +1203,7 @@ $lang['TOR_MOD_TITLE'] = 'Изменение статуса раздачи - %s' $lang['TOR_MOD_MSG'] = "Здравствуйте, %s.\n\n Статус [url=%s]вашей[/url] раздачи изменен на [b]%s[/b]"; $lang['TOR_AUTH_TITLE'] = 'Изменение в оформлении - %s'; -$lang['TOR_AUTH_MSG'] = "Здравствуйте, %s.\n\n Оформление моей раздачи изменено - [url=%s]%s[/url]\n\n Просьба повторно её проверить."; +$lang['TOR_AUTH_MSG'] = "Здравствуйте, %s.\n\n Оформление моей раздачи изменено - [url=%s]%s[/url]\n\n Просьба повторно ее проверить."; $lang['TOR_AUTH_FIXED'] = 'Исправил'; $lang['TOR_AUTH_SENT_COMMENT'] = ' · Информация отправлена модератору. Ожидайте.'; //end torrent status mod @@ -1306,7 +1300,7 @@ $lang['SEARCH_DL_WILL_DOWNLOADS'] = 'Будущие закачки'; $lang['SEARCH_DL_DOWN'] = 'Текущие'; $lang['SEARCH_DL_COMPLETE'] = 'Прошлые'; $lang['SEARCH_DL_COMPLETE_DOWNLOADS'] = 'Прошлые закачки'; -$lang['SEARCH_DL_CANCEL'] = 'Отменённые'; +$lang['SEARCH_DL_CANCEL'] = 'Отмененные'; $lang['CUR_DOWNLOADS'] = 'Текущие закачки'; $lang['CUR_UPLOADS'] = 'Текущие раздачи'; $lang['SEARCH_RELEASES'] = 'Найти раздачи'; @@ -1348,7 +1342,7 @@ $lang['BONUS_UPLOAD_DESC'] = '%s к раздаче
Обменят $lang['BONUS_UPLOAD_PRICE'] = '%s'; $lang['PRICE'] = 'Цена'; $lang['EXCHANGE_NOT'] = 'Обмен не доступен'; -$lang['BONUS_SUCCES'] = 'Обмен произведён удачно! Вам прибавлено %s'; +$lang['BONUS_SUCCES'] = 'Обмен произведен удачно! Вам прибавлено %s'; $lang['BONUS_NOT_SUCCES'] = 'У вас недостаточно Бонусов в наличии. Больше сидируйте!'; $lang['BONUS_RETURN'] = 'Вернуться к обмену Сид бонусов'; @@ -1360,7 +1354,7 @@ $lang['SHOW_CURSOR'] = 'подсвечивать строки под курсо $lang['BT_LOW_RATIO_FUNC'] = 'У вас слишком низкий рейтинг для того, чтобы воспользоваться этой функцией'; $lang['BT_LOW_RATIO_FOR_DL'] = 'Рейтинг %s уже не позволяет вам скачивать новые торренты.

Для поднятия рейтинга вы можете что-либо раздать из ваших прошлых закачек, либо организовать новую раздачу.

Пожалуйста, помните о том, что ваше yчастие в системе BitTorrent не может ограничиваться только скачиванием!'; -$lang['BT_RATIO_WARNING_MSG'] = 'Если ваш рейтинг упадёт ниже %s, вы не сможете скачивать торренты! Подробнее о рейтинге.'; +$lang['BT_RATIO_WARNING_MSG'] = 'Если ваш рейтинг упадет ниже %s, вы не сможете скачивать торренты! Подробнее о рейтинге.'; $lang['SEEDER_LAST_SEEN'] = 'Полного источника не было: %s'; @@ -1437,9 +1431,9 @@ $lang['NO_TEXT_SEL'] = 'Нет выделенного текста'; $lang['QR_FONT_SEL'] = 'Шрифт'; $lang['QR_COLOR_SEL'] = 'Цвет шрифта'; $lang['QR_SIZE_SEL'] = 'Размер шрифта'; -$lang['COLOR_STEEL_BLUE'] = 'Тёмно-Голубой'; +$lang['COLOR_STEEL_BLUE'] = 'Темно-Голубой'; $lang['COLOR_GRAY'] = 'Серый'; -$lang['COLOR_DARK_GREEN'] = 'Тёмно-Зелёный'; +$lang['COLOR_DARK_GREEN'] = 'Темно-Зеленый'; //qr end //txtb @@ -1559,7 +1553,7 @@ $lang['TRACKER_S'] = 'по трекеру'; // copyright $lang['NOTICE'] = '!ВНИМАНИЕ!'; $lang['POWERED'] = 'UG93ZXJlZCBieSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3RvcnJlbnRwaWVyLm1lIj5Ub3JyZW50UGllciBJSTwvYT4gJmNvcHk7IE1laXRoYXIsIFRvcnJlbnRQaWVyIElJIFRlYW0='; -$lang['COPY'] = 'Сайт не предоставляет электронные версии произведений, а занимается лишь коллекционированием и каталогизацией ссылок, присылаемых и публикуемых на форуме нашими читателями. Если вы являетесь правообладателем какого-либо представленного материала и не желаете, чтобы ссылка на него находилась в нашем каталоге, свяжитесь с нами, и мы незамедлительно удалим её. Файлы для обмена на трекере предоставлены пользователями сайта, и администрация не несёт ответственности за их содержание. Просьба не заливать файлы, защищенные авторскими правами, а также файлы нелегального содержания!'; +$lang['COPY'] = 'Сайт не предоставляет электронные версии произведений, а занимается лишь коллекционированием и каталогизацией ссылок, присылаемых и публикуемых на форуме нашими читателями. Если вы являетесь правообладателем какого-либо представленного материала и не желаете, чтобы ссылка на него находилась в нашем каталоге, свяжитесь с нами, и мы незамедлительно удалим ее. Файлы для обмена на трекере предоставлены пользователями сайта, и администрация не несет ответственности за их содержание. Просьба не заливать файлы, защищенные авторскими правами, а также файлы нелегального содержания!'; $lang['CALLSEED'] = 'Позвать скачавших'; @@ -1579,7 +1573,7 @@ $lang['WEBSITE_ERROR'] = 'Поле "Сайт" может содержать то $lang['ICQ_ERROR'] = 'Поле "ICQ" может содержать только номер icq'; $lang['INVALID_DATE'] = 'Ошибка даты '; $lang['PROFILE_USER'] = 'Профиль пользователя'; -$lang['GOOD_UPDATE'] = 'был успешно изменён'; +$lang['GOOD_UPDATE'] = 'был успешно изменен'; $lang['DENY_VISITORS'] = 'Скрывать список текущих закачек в профиле'; $lang['BAN_USER'] = 'Запретить пользователю'; $lang['USER_NOT_ALLOWED'] = 'Пользователю запрещено'; @@ -1596,7 +1590,7 @@ $lang['USER_DELETE_EXPLAIN'] = 'Удалить этого пользовател $lang['USER_DELETE_ME'] = 'Извините, свой аккаунт запрещено удалять!'; $lang['USER_DELETE_CSV'] = 'Извините, этот аккаунт запрещено удалять!'; $lang['USER_DELETE_CONFIRM'] = 'Вы действительно хотите удалить этого пользователя?'; -$lang['USER_DELETED'] = 'Пользователь был успешно удалён'; +$lang['USER_DELETED'] = 'Пользователь был успешно удален'; $lang['DELETE_USER_ALL_POSTS'] = 'Удалить все сообщения пользователя'; $lang['DELETE_USER_ALL_POSTS_CONFIRM'] = 'Вы действительно хотите удалить все сообщения и все начатые пользователем топики целиком?'; $lang['DELETE_USER_POSTS'] = 'Удалить все сообщения, кроме заглавных'; @@ -1625,7 +1619,7 @@ $lang['USER_ACTIVATE_OFF'] = 'Пользователь успешно деакт $lang['CHOOSE_A_NAME'] = 'Вы должны выбрать имя'; $lang['CHOOSE_E_MAIL'] = 'Вы должны указать e-mail'; $lang['CHOOSE_PASS'] = 'Поля для ввода пароля не должны быть пустыми!'; -$lang['CHOOSE_PASS_ERR'] = 'Введённые пароли не совпадают'; +$lang['CHOOSE_PASS_ERR'] = 'Введенные пароли не совпадают'; $lang['CHOOSE_PASS_ERR_MIN'] = 'Пароль должен быть не короче %d символов'; $lang['CHOOSE_PASS_ERR_MAX'] = 'Пароль должен быть не длиннее %d символов'; $lang['CHOOSE_PASS_OK'] = 'Пароли совпадают'; @@ -1674,7 +1668,7 @@ $lang['HOR_LINE'] = 'Горизонтальная линия (Ctrl+8)'; $lang['NEW_LINE'] = 'Перенос на новую строку'; $lang['BOLD'] = 'Жирный текст: [b]текст[/b] (Ctrl+B)'; $lang['ITALIC'] = 'Наклонный текст: [i]текст[/i] (Ctrl+I)'; -$lang['UNDERLINE'] = 'Подчёркнутый текст: [u]текст[/u] (Ctrl+U)'; +$lang['UNDERLINE'] = 'Подчеркнутый текст: [u]текст[/u] (Ctrl+U)'; $lang['STRIKEOUT'] = 'Зачеркнутый текст: [s]текст[/s] (Ctrl+S)'; $lang['QUOTE_TITLE'] = 'Цитата: [quote]текст[/quote] (Ctrl+Q)'; $lang['IMG_TITLE'] = 'Вставить картинку: [img]http://image_url[/img] (Ctrl+R)'; @@ -1706,14 +1700,14 @@ $lang['DL_PORT'] = 'Порт'; $lang['DL_FORMULA'] = 'Формула: Отдано/Размер раздачи'; $lang['DL_ULR'] = 'ULR'; $lang['DL_STOPPED'] = 'Остановил Скачивание/Раздачу'; -$lang['DL_UPD'] = 'Подключён: '; +$lang['DL_UPD'] = 'Подключен: '; $lang['DL_INFO'] = 'показаны данные только за текущую сессию'; // Закрепление первого поста $lang['POST_PIN'] = 'Закрепить первый пост'; $lang['POST_UNPIN'] = 'Открепить первый пост'; -$lang['POST_PINNED'] = 'Первый пост закреплён'; -$lang['POST_UNPINNED'] = 'Первый пост откреплён'; +$lang['POST_PINNED'] = 'Первый пост закреплен'; +$lang['POST_UNPINNED'] = 'Первый пост откреплен'; // Управление моими сообщениями $lang['GOTO_MY_MESSAGE'] = 'Закрыть и вернуться к списку "Мои сообщения"'; @@ -1723,7 +1717,7 @@ $lang['EDIT_MY_MESSAGE_LIST'] = 'Редактировать список'; $lang['SELECT_INVERT'] = 'отметить/инвертировать'; $lang['RESTORE_ALL_POSTS'] = 'Восстановить все сообщения'; $lang['DEL_LIST_MY_MESSAGE'] = 'Удалить выбранные темы из списка'; -$lang['DEL_LIST_MY_MESSAGE_INFO'] = 'После удаления и до обновления всего списка в нём могут быть показаны уже удаленные темы'; +$lang['DEL_LIST_MY_MESSAGE_INFO'] = 'После удаления и до обновления всего списка в нем могут быть показаны уже удаленные темы'; $lang['DEL_LIST_INFO'] = 'Для удаления тем из списка кликните на иконку слева от названия любого раздела'; //Отслеживаемые темы @@ -1757,12 +1751,12 @@ $lang['TORRENTPIER'] = 'Технические настройки'; $lang['CONFIGURATION'] = 'Конфигурация'; $lang['MANAGE'] = 'Управление'; -$lang['DISALLOW'] = 'Запрещённые имена'; +$lang['DISALLOW'] = 'Запрещенные имена'; $lang['PRUNE'] = 'Чистка'; $lang['MASS_EMAIL'] = 'Массовая рассылка почты'; $lang['RANKS'] = 'Звания'; $lang['SMILIES'] = 'Смайлики'; -$lang['BAN_MANAGEMENT'] = 'Чёрные списки (Ban)'; +$lang['BAN_MANAGEMENT'] = 'Черные списки (Ban)'; $lang['WORD_CENSOR'] = 'Автоцензор'; $lang['EXPORT'] = 'Экспорт'; $lang['CREATE_NEW'] = 'Создать'; @@ -1812,7 +1806,7 @@ $lang['NUMBER_USERS'] = 'Кол-во пользователей'; $lang['USERS_PER_DAY'] = 'Пользователей в день'; $lang['BOARD_STARTED'] = 'Дата запуска'; $lang['AVATAR_DIR_SIZE'] = 'Размер директории с аватарами'; -$lang['DATABASE_SIZE'] = 'Объём БД'; +$lang['DATABASE_SIZE'] = 'Объем БД'; $lang['GZIP_COMPRESSION'] ='сжатие Gzip'; $lang['NOT_AVAILABLE'] = 'Недоступно'; @@ -1846,7 +1840,7 @@ $lang['LOOK_UP_FORUM'] = 'Выбрать форум'; $lang['GROUP_AUTH_EXPLAIN'] = 'Здесь вы можете изменить права доступа и статус модератора для каждой группы пользователей. Не забывайте при изменении прав доступа для групп, что права доступа для отдельных пользователей могут давать пользователю возможность входа в форумы и т.п. Вы будете предупреждены в этом случае.'; $lang['USER_AUTH_EXPLAIN'] = 'Здесь вы можете изменить права доступа и статус модератора для отдельных пользователей. Не забывайте при изменении прав пользователя, что права доступа для группы могут давать пользователю возможность входа в форумы и т.п. Вы будете предупреждены в этом случае.'; -$lang['FORUM_AUTH_EXPLAIN'] = 'Здесь вы можете регулировать доступ к каждому форуму. У вас будет обычный и продвинутый режим для этого, продвинутый даёт больше возможностей для контроля. Помните, что изменение прав доступа к форуму повлияет на то, какие пользователи смогут совершать в нём различные действия.'; +$lang['FORUM_AUTH_EXPLAIN'] = 'Здесь вы можете регулировать доступ к каждому форуму. У вас будет обычный и продвинутый режим для этого, продвинутый дает больше возможностей для контроля. Помните, что изменение прав доступа к форуму повлияет на то, какие пользователи смогут совершать в нем различные действия.'; $lang['SIMPLE_MODE'] = 'Простой режим'; $lang['ADVANCED_MODE'] = 'Продвинутый режим'; @@ -1857,11 +1851,11 @@ $lang['DISALLOWED_ACCESS'] = 'Доступ закрыт'; $lang['IS_MODERATOR'] = 'Модератор'; $lang['CONFLICT_WARNING'] = 'Предупреждение о конфликте прав'; -$lang['CONFLICT_ACCESS_USERAUTH'] = 'У пользователя (пользователей) всё ещё есть права доступа к этому форуму, связанные с членством в группе. Вам, возможно, надо изменить права доступа для групп или исключить пользователя из группы для того, чтобы полностью закрыть ему права доступа. Группы, дающие такие права, перечислены ниже.'; -$lang['CONFLICT_MOD_USERAUTH'] = 'У данного пользователя всё ещё есть право модерирования этого форума, связанное с его членством в группе. Вам, возможно, надо изменить права доступа для групп или исключить пользователя из группы для того, чтобы полностью закрыть ему право модерации. Группы, дающие это право, перечислены ниже.'; +$lang['CONFLICT_ACCESS_USERAUTH'] = 'У пользователя (пользователей) все еще есть права доступа к этому форуму, связанные с членством в группе. Вам, возможно, надо изменить права доступа для групп или исключить пользователя из группы для того, чтобы полностью закрыть ему права доступа. Группы, дающие такие права, перечислены ниже.'; +$lang['CONFLICT_MOD_USERAUTH'] = 'У данного пользователя все еще есть право модерирования этого форума, связанное с его членством в группе. Вам, возможно, надо изменить права доступа для групп или исключить пользователя из группы для того, чтобы полностью закрыть ему право модерации. Группы, дающие это право, перечислены ниже.'; -$lang['CONFLICT_ACCESS_GROUPAUTH'] = 'У пользователя (пользователей) всё ещё есть права доступа к этому форуму из-за установок их личных прав. Вам, возможно, надо изменить их права для того, чтобы полностью закрыть им доступ. Пользователи, имеющие такие права, перечислены ниже.'; -$lang['CONFLICT_MOD_GROUPAUTH'] = 'У пользователя (пользователей) всё ещё есть право модерирования этого форума из-за установок их личных прав. Вам, возможно, надо изменить их права для того, чтобы полностью закрыть им возможность модерирования. Пользователи, имеющие такие права, перечислены ниже.'; +$lang['CONFLICT_ACCESS_GROUPAUTH'] = 'У пользователя (пользователей) все еще есть права доступа к этому форуму из-за установок их личных прав. Вам, возможно, надо изменить их права для того, чтобы полностью закрыть им доступ. Пользователи, имеющие такие права, перечислены ниже.'; +$lang['CONFLICT_MOD_GROUPAUTH'] = 'У пользователя (пользователей) все еще есть право модерирования этого форума из-за установок их личных прав. Вам, возможно, надо изменить их права для того, чтобы полностью закрыть им возможность модерирования. Пользователи, имеющие такие права, перечислены ниже.'; $lang['PUBLIC'] = 'Публичный'; $lang['PRIVATE'] = 'Приватный'; @@ -1910,9 +1904,9 @@ $lang['CLICK_RETURN_FORUMAUTH'] = '%sВернуться к управлению // // Banning // -$lang['BAN_CONTROL'] = 'Чёрные списки'; -$lang['BAN_EXPLAIN'] = 'Здесь вы можете закрывать пользователям любой доступ к форумам. Вы можете внести в чёрный список конкретного пользователя, а также один ил несколько IP адресов или имён серверов. Этот метод не даст пользователю увидеть даже список форумов. Чтобы запретить регистрацию под другим именем, вы можете также внести в чёрный список адрес e-mail. Учтите, запрещение только e-mail адреса не закроет пользователю возможность заходить на форум и писать сообщения. Для этого вам придётся воспользоваться одним из первых двух методов.'; -$lang['BAN_EXPLAIN_WARN'] = 'Учтите, что ввод диапазона IP адресов приведёт к добавлению всех адресов между первым и последним в «чёрный список». Будут проделаны попытки уменьшить это количество вводом шаблонов, где это возможно. Если вам действительно надо ввести диапазон адресов, постарайтесь сделать его поменьше или, что ещё лучше, вводите отдельные адреса.'; +$lang['BAN_CONTROL'] = 'Черные списки'; +$lang['BAN_EXPLAIN'] = 'Здесь вы можете закрывать пользователям любой доступ к форумам. Вы можете внести в черный список конкретного пользователя, а также один ил несколько IP адресов или имен серверов. Этот метод не даст пользователю увидеть даже список форумов. Чтобы запретить регистрацию под другим именем, вы можете также внести в черный список адрес e-mail. Учтите, запрещение только e-mail адреса не закроет пользователю возможность заходить на форум и писать сообщения. Для этого вам придется воспользоваться одним из первых двух методов.'; +$lang['BAN_EXPLAIN_WARN'] = 'Учтите, что ввод диапазона IP адресов приведет к добавлению всех адресов между первым и последним в «черный список». Будут проделаны попытки уменьшить это количество вводом шаблонов, где это возможно. Если вам действительно надо ввести диапазон адресов, постарайтесь сделать его поменьше или, что еще лучше, вводите отдельные адреса.'; $lang['SELECT_IP'] = 'Выберите IP адрес'; $lang['SELECT_EMAIL'] = 'Выберите адрес e-mail'; @@ -1936,12 +1930,12 @@ $lang['UNBAN_IP_EXPLAIN'] = 'Вы можете вновь разрешить д $lang['UNBAN_EMAIL'] = 'Вновь разрешить адреса e-mail'; $lang['UNBAN_EMAIL_EXPLAIN'] = 'Вы можете вновь разрешить несколько адресов e-mail за один раз, используя подходящую для вашего компьютера и браузера комбинацию клавиатуры и мыши.'; -$lang['NO_BANNED_USERS'] = 'Чёрный список пользователей пуст'; -$lang['NO_BANNED_IP'] = 'Чёрный список адресов IP пуст'; -$lang['NO_BANNED_EMAIL'] = 'Чёрный список адресов e-mail пуст'; +$lang['NO_BANNED_USERS'] = 'Черный список пользователей пуст'; +$lang['NO_BANNED_IP'] = 'Черный список адресов IP пуст'; +$lang['NO_BANNED_EMAIL'] = 'Черный список адресов e-mail пуст'; -$lang['BAN_UPDATE_SUCESSFUL'] = 'Чёрный список был успешно обновлён'; -$lang['CLICK_RETURN_BANADMIN'] = '%sВернуться к чёрным спискам%s'; +$lang['BAN_UPDATE_SUCESSFUL'] = 'Черный список был успешно обновлен'; +$lang['CLICK_RETURN_BANADMIN'] = '%sВернуться к черным спискам%s'; // @@ -1961,7 +1955,7 @@ $lang['SITE_NAME'] = 'Название сайта'; $lang['SITE_DESC'] = 'Описание сайта'; $lang['FORUMS_DISABLE'] = 'Отключить форумы'; $lang['BOARD_DISABLE_EXPLAIN'] = 'Форумы станут недоступными пользователям. У Администраторов останется доступ через Панель Администрирования пока форум выключен.'; -$lang['ACCT_ACTIVATION'] = 'Включить активизацию учётных записей'; +$lang['ACCT_ACTIVATION'] = 'Включить активизацию учетных записей'; $lang['ACC_NONE'] = 'Нет'; // These three entries are the type of activation $lang['ACC_USER'] = 'Пользователем'; $lang['ACC_ADMIN'] = 'Администратором'; @@ -1986,23 +1980,11 @@ $lang['MAX_SIG_LENGTH'] = 'Макс. длина подписи'; $lang['MAX_SIG_LENGTH_EXPLAIN'] = 'Максимальное кол-во символов в подписи пользователя'; $lang['ALLOW_NAME_CHANGE'] = 'Разрешить смену имени пользователя'; -$lang['AVATAR_SETTINGS'] = 'Настройки аватар'; -$lang['ALLOW_LOCAL'] = 'Разрешить аватар из галереи'; -$lang['ALLOW_UPLOAD'] = 'Разрешить закачку аватар'; -$lang['MAX_FILESIZE'] = 'Макс. размер файла аватары'; -$lang['MAX_FILESIZE_EXPLAIN'] = 'Для закачанных файлов'; -$lang['MAX_AVATAR_SIZE'] = 'Макс. размер изображения'; -$lang['MAX_AVATAR_SIZE_EXPLAIN'] = '(высота x ширина в пикселях)'; -$lang['AVATAR_STORAGE_PATH'] = 'Путь к аватарам'; -$lang['AVATAR_STORAGE_PATH_EXPLAIN'] = 'Каталог ниже корня phpBB, например images/avatars'; -$lang['AVATAR_GALLERY_PATH'] = 'Путь к галерее аватар'; -$lang['AVATAR_GALLERY_PATH_EXPLAIN'] = 'Каталог ниже корня phpBB для готовых картинок, например images/avatars/gallery'; - $lang['EMAIL_SETTINGS'] = 'Настройки e-mail'; // Visual Confirmation $lang['VISUAL_CONFIRM'] = 'Включить визуальное подтверждение'; -$lang['VISUAL_CONFIRM_EXPLAIN'] = 'Потребовать от пользователей ввести при регистрации изображённый на картинке код.'; +$lang['VISUAL_CONFIRM_EXPLAIN'] = 'Потребовать от пользователей ввести при регистрации изображенный на картинке код.'; // Autologin Keys - added 2.0.18 $lang['ALLOW_AUTOLOGIN'] = 'Разрешить автоматический вход на форум'; @@ -2026,7 +2008,7 @@ $lang['RESYNC'] = 'Синхронизация'; $lang['NO_MODE'] = 'Не было задано действие'; $lang['FORUM_EDIT_DELETE_EXPLAIN'] = 'Здесь вы можете изменить название и описание форума, закрыть его (или вновь открыть) и настроить автоматическую чистку. Для управления правами доступа к форуму воспользуйтесь соответствующей ссылкой в левой части.'; -$lang['MOVE_CONTENTS'] = 'Перенести всё содержимое'; +$lang['MOVE_CONTENTS'] = 'Перенести все содержимое'; $lang['FORUM_DELETE'] = 'Удалить форум'; $lang['FORUM_DELETE_EXPLAIN'] = 'Здесь вы сможете удалить форум (или категорию) и решить, куда перенести все темы (или форумы), которые там содержались.'; $lang['CATEGORY_DELETE'] = 'Удалить Категорию'; @@ -2086,9 +2068,9 @@ $lang['EXPORT_SMILE_PACK'] = 'Создать набор смайликов'; $lang['EXPORT_SMILES'] = 'Для создания набора смайликов из смайликов, установленных в данный момент, %sскачайте файл smiles.pak%s. Переименуйте его как вам нужно, сохранив при этом расширение .pak, затем создайте файл zip, содержащий все изображения смайликов, а также этот файл.'; $lang['SMILEY_ADD_SUCCESS'] = 'Смайлик был успешно добавлен'; -$lang['SMILEY_EDIT_SUCCESS'] = 'Смайлик был успешно изменён'; +$lang['SMILEY_EDIT_SUCCESS'] = 'Смайлик был успешно изменен'; $lang['SMILEY_IMPORT_SUCCESS'] = 'Набор смайликов был успешно импортирован'; -$lang['SMILEY_DEL_SUCCESS'] = 'Смайлик был успешно удалён'; +$lang['SMILEY_DEL_SUCCESS'] = 'Смайлик был успешно удален'; $lang['CLICK_RETURN_SMILEADMIN'] = '%sВернуться к списку смайликов%s'; @@ -2101,7 +2083,7 @@ $lang['USER_ADMIN_EXPLAIN'] = 'Здесь вы можете изменить и $lang['LOOK_UP_USER'] = 'Выбрать пользователя'; $lang['ADMIN_USER_FAIL'] = 'Не могу изменить профиль пользователя'; -$lang['ADMIN_USER_UPDATED'] = 'Профиль пользователя был успешно изменён'; +$lang['ADMIN_USER_UPDATED'] = 'Профиль пользователя был успешно изменен'; $lang['CLICK_RETURN_USERADMIN'] = '%sВернуться к управлению пользователями%s'; $lang['USER_ALLOWPM'] = 'Может посылать личные сообщения'; @@ -2117,7 +2099,7 @@ $lang['USER_SPECIAL_EXPLAIN'] = 'Эти поля сами пользовател // Group Management // $lang['GROUP_ADMINISTRATION'] = 'Управление группами'; -$lang['GROUP_ADMIN_EXPLAIN'] = 'Здесь вы можете управлять всеми вашими группами: это включает удаление, добавление и изменение групп. Вы можете назначать модераторов, изменять открытый/закрытый статус группы и устанавливать её название и описание.'; +$lang['GROUP_ADMIN_EXPLAIN'] = 'Здесь вы можете управлять всеми вашими группами: это включает удаление, добавление и изменение групп. Вы можете назначать модераторов, изменять открытый/закрытый статус группы и устанавливать ее название и описание.'; $lang['ERROR_UPDATING_GROUPS'] = 'Ошибка при изменении группы.'; $lang['UPDATED_GROUP'] = 'Группа была успешно изменена'; $lang['ADDED_NEW_GROUP'] = 'Группа была успешно создана'; @@ -2134,7 +2116,7 @@ $lang['NO_GROUP_MODERATOR'] = 'Вы должны выбрать модерато $lang['NO_GROUP_MODE'] = 'Вы должны выбрать режим группы: открытый или закрытый'; $lang['NO_GROUP_ACTION'] = 'Не было выбрано действие'; $lang['DELETE_OLD_GROUP_MOD'] = 'Удалить старого модератора?'; -$lang['DELETE_OLD_GROUP_MOD_EXPL'] = 'Если вы меняете модератора группы и поставите здесь галочку, то предыдущий модератор будет исключён из группы. Если вы её не поставите, то он станет обычным членом группы.'; +$lang['DELETE_OLD_GROUP_MOD_EXPL'] = 'Если вы меняете модератора группы и поставите здесь галочку, то предыдущий модератор будет исключен из группы. Если вы ее не поставите, то он станет обычным членом группы.'; $lang['CLICK_RETURN_GROUPSADMIN'] = '%sВернуться к управлению группами%s'; $lang['SELECT_GROUP'] = 'Выберите группу'; $lang['LOOK_UP_GROUP'] = 'Выбрать группу'; @@ -2144,7 +2126,7 @@ $lang['LOOK_UP_GROUP'] = 'Выбрать группу'; // Prune Administration // $lang['FORUM_PRUNE'] = 'Чистка форумов'; -$lang['FORUM_PRUNE_EXPLAIN'] = 'Будут удалены темы, в которых не было новых сообщений за выбранное число дней. Если вы не введёте число, то будут удалены все темы. Не будут удалены прилепленные темы и объявления. Вам придётся удалять такие темы вручную.'; +$lang['FORUM_PRUNE_EXPLAIN'] = 'Будут удалены темы, в которых не было новых сообщений за выбранное число дней. Если вы не введете число, то будут удалены все темы. Не будут удалены прилепленные темы и объявления. Вам придется удалять такие темы вручную.'; $lang['DO_PRUNE'] = 'Провести чистку'; $lang['ALL_FORUMS'] = 'Все форумы'; $lang['PRUNE_TOPICS_NOT_POSTED'] = 'Удалить темы, в которых не было ответов за данное кол-во дней'; @@ -2157,7 +2139,7 @@ $lang['NOT_DAYS'] = 'Вы не указали количество дней'; // Word censor // $lang['WORDS_TITLE'] = 'Автоцензор'; -$lang['WORDS_EXPLAIN'] = 'Здесь вы можете добавить, изменить или удалить слова, которые будут автоматически подвергаться цензуре на ваших форумах. Кроме того, пользователи не смогут зарегистрироваться под именами, содержащими эти слова. В списке слов могут использоваться шаблоны (*), т.е. к \'*тест*\' подойдёт \'протестировать\', к \'тест*\' — \'тестирование\', к \'*тест\' — \'протест\'.
(Примечание переводчика) Рекомендую пользоваться этой фичей очень аккуратно: например, некие очевидные замены буду неадекватно реагировать на слова \'потребитель\', \'употреблять\' и т.п.'; +$lang['WORDS_EXPLAIN'] = 'Здесь вы можете добавить, изменить или удалить слова, которые будут автоматически подвергаться цензуре на ваших форумах. Кроме того, пользователи не смогут зарегистрироваться под именами, содержащими эти слова. В списке слов могут использоваться шаблоны (*), т.е. к \'*тест*\' подойдет \'протестировать\', к \'тест*\' — \'тестирование\', к \'*тест\' — \'протест\'.
(Примечание переводчика) Рекомендую пользоваться этой фичей очень аккуратно: например, некие очевидные замены буду неадекватно реагировать на слова \'потребитель\', \'употреблять\' и т.п.'; $lang['WORD'] = 'Слово'; $lang['EDIT_WORD_CENSOR'] = 'Изменить автоцензор'; $lang['REPLACEMENT'] = 'Замена'; @@ -2167,9 +2149,9 @@ $lang['UPDATE_WORD'] = 'Обновить автоцензор'; $lang['MUST_ENTER_WORD'] = 'Вы должны ввести слово и его замену'; $lang['NO_WORD_SELECTED'] = 'Не выбрано слово для редактирования'; -$lang['WORD_UPDATED'] = 'Выбранный автоцензор был успешно изменён'; +$lang['WORD_UPDATED'] = 'Выбранный автоцензор был успешно изменен'; $lang['WORD_ADDED'] = 'Автоцензор был успешно добавлен'; -$lang['WORD_REMOVED'] = 'Выбранный автоцензор был успешно удалён'; +$lang['WORD_REMOVED'] = 'Выбранный автоцензор был успешно удален'; $lang['CLICK_RETURN_WORDADMIN'] = '%sВернуться к управлению автоцензором%s'; @@ -2177,7 +2159,7 @@ $lang['CLICK_RETURN_WORDADMIN'] = '%sВернуться к управлению // // Mass Email // -$lang['MASS_EMAIL_EXPLAIN'] = 'Вы можете разослать e-mail сообщение либо всем вашим пользователям, либо пользователям, входящим в определённую группу. Сообщение будет отправлено на административный адрес, с BCC: всем получателям. Если вы отправляете письмо большой группе людей, то будьте терпеливы: не останавливайте загрузку страницы после нажатия кнопки. Массовая рассылка может занять много времени, вы увидите сообщение, когда выполнение завершится.'; +$lang['MASS_EMAIL_EXPLAIN'] = 'Вы можете разослать e-mail сообщение либо всем вашим пользователям, либо пользователям, входящим в определенную группу. Сообщение будет отправлено на административный адрес, с BCC: всем получателям. Если вы отправляете письмо большой группе людей, то будьте терпеливы: не останавливайте загрузку страницы после нажатия кнопки. Массовая рассылка может занять много времени, вы увидите сообщение, когда выполнение завершится.'; $lang['COMPOSE'] = 'Текст сообщения'; $lang['RECIPIENTS'] = 'Получатели'; @@ -2203,43 +2185,43 @@ $lang['RANK_MAXIMUM'] = 'Максимум сообщений'; $lang['RANK_IMAGE'] = 'Картинка к званию'; $lang['RANK_IMAGE_EXPLAIN'] = 'Здесь вы можете присвоить всем имеющим такое звание специальное изображение. Вы можете указать либо относительный, либо абсолютный путь к изображению'; -$lang['MUST_SELECT_RANK'] = 'Извините, вы не выбрали звание. Вернитесь и попробуйте ещё раз.'; +$lang['MUST_SELECT_RANK'] = 'Извините, вы не выбрали звание. Вернитесь и попробуйте еще раз.'; $lang['NO_ASSIGNED_RANK'] = 'Специального звания не присвоено'; $lang['RANK_UPDATED'] = 'Звание было успешно изменено'; $lang['RANK_ADDED'] = 'Звание было успешно добавлено'; $lang['RANK_REMOVED'] = 'Звание было успешно удалено'; -$lang['NO_UPDATE_RANKS'] = 'Звание было успешно удалено. Тем не менее, информация о пользователях, у которых было это звание, не была изменена. Вам придётся изменить эту информацию вручную.'; +$lang['NO_UPDATE_RANKS'] = 'Звание было успешно удалено. Тем не менее, информация о пользователях, у которых было это звание, не была изменена. Вам придется изменить эту информацию вручную.'; $lang['CLICK_RETURN_RANKADMIN'] = '%sВернуться к управлению званиями%s'; // // Disallow Username Admin // -$lang['DISALLOW_CONTROL'] = 'Запрещённые имена пользователя'; -$lang['DISALLOW_EXPLAIN'] = "Здесь вы можете задать имена, которые будут запрещены к использованию. Запрещённые имена могут содержать шаблон '*'. Учтите: вы не сможете запретить имя, если уже существует пользователь с таким именем. Вам придётся сначала удалить пользователя, а уже потом запретить имя."; +$lang['DISALLOW_CONTROL'] = 'Запрещенные имена пользователя'; +$lang['DISALLOW_EXPLAIN'] = "Здесь вы можете задать имена, которые будут запрещены к использованию. Запрещенные имена могут содержать шаблон '*'. Учтите: вы не сможете запретить имя, если уже существует пользователь с таким именем. Вам придется сначала удалить пользователя, а уже потом запретить имя."; $lang['DELETE_DISALLOW'] = 'Удалить'; -$lang['DELETE_DISALLOW_TITLE'] = 'Удалить запрещённое имя пользователя'; -$lang['DELETE_DISALLOW_EXPLAIN'] = 'Вы можете убрать запрещённое имя, выбрав его из списка и нажав кнопку «сохранить»'; +$lang['DELETE_DISALLOW_TITLE'] = 'Удалить запрещенное имя пользователя'; +$lang['DELETE_DISALLOW_EXPLAIN'] = 'Вы можете убрать запрещенное имя, выбрав его из списка и нажав кнопку «сохранить»'; $lang['ADD_DISALLOW'] = 'Добавить'; -$lang['ADD_DISALLOW_TITLE'] = 'Добавить запрещённое имя пользователя'; +$lang['ADD_DISALLOW_TITLE'] = 'Добавить запрещенное имя пользователя'; $lang['ADD_DISALLOW_EXPLAIN'] = 'Вы можете запретить имя пользователя, используя шаблон \'*\', который подходит к любому символу'; -$lang['NO_DISALLOWED'] = 'Нет запрещённых имён'; +$lang['NO_DISALLOWED'] = 'Нет запрещенных имен'; -$lang['DISALLOWED_DELETED'] = 'Запрещённое имя пользователя было успешно удалено'; -$lang['DISALLOW_SUCCESSFUL'] = 'Запрещённое имя пользователя было успешно добавлено'; +$lang['DISALLOWED_DELETED'] = 'Запрещенное имя пользователя было успешно удалено'; +$lang['DISALLOW_SUCCESSFUL'] = 'Запрещенное имя пользователя было успешно добавлено'; $lang['DISALLOWED_ALREADY'] = 'Имя, которое вы пытаетесь запретить, либо уже запрещено, либо есть в списке нецензурных слов, либо существует пользователь с подходящим именем'; -$lang['CLICK_RETURN_DISALLOWADMIN'] = '%sВернуться к управлению запрещёнными именами%s'; +$lang['CLICK_RETURN_DISALLOWADMIN'] = '%sВернуться к управлению запрещенными именами%s'; // FTP $lang['ATTACHMENT_FTP_SETTINGS'] = 'Настройка закачки вложений на FTP'; $lang['FTP_CHOOSE'] = 'Выберите метод скачивания'; $lang['FTP_OPTION'] = '
В этой версии PHP включены возможности FTP, вы можете попробовать сначала автоматически закачать файл настроек по FTP в нужный каталог.'; -$lang['FTP_INSTRUCTS'] = 'Вы решили закачать файл настроек по FTP в каталог, содержащий phpBB 2. Пожалуйста, укажите информацию, требуемую для осуществления этого процесса. Учтите, что путь FTP должен быть полным путём к вашей установке phpBB 2, как если бы вы пользовались обычным клиентом FTP.'; +$lang['FTP_INSTRUCTS'] = 'Вы решили закачать файл настроек по FTP в каталог, содержащий phpBB 2. Пожалуйста, укажите информацию, требуемую для осуществления этого процесса. Учтите, что путь FTP должен быть полным путем к вашей установке phpBB 2, как если бы вы пользовались обычным клиентом FTP.'; $lang['FTP_INFO'] = 'Укажите настройки FTP'; $lang['ATTEMPT_FTP'] = 'Попробовать закачать файл настроек по FTP'; $lang['SEND_FILE'] = 'Просто прислать файл, я закачаю его вручную'; @@ -2390,7 +2372,7 @@ $lang['SEED_BONUS_ROPORTION'] = 'Добавление пропорции для // Modules, this replaces the keys used $lang['CONTROL_PANEL'] = 'Контрольная Панель'; $lang['SHADOW_ATTACHMENTS'] = 'Теневые приложения'; -$lang['FORBIDDEN_EXTENSIONS'] = 'Запрещённые Расширения'; +$lang['FORBIDDEN_EXTENSIONS'] = 'Запрещенные Расширения'; $lang['EXTENSION_CONTROL'] = 'Контроль Расширений'; $lang['EXTENSION_GROUP_MANAGE'] = 'Контроль Групп Расширений'; $lang['SPECIAL_CATEGORIES'] = 'Специальные Категории'; @@ -2399,7 +2381,7 @@ $lang['QUOTA_LIMITS'] = 'Ограничение Квоты'; // Attachments -> Management $lang['ATTACH_SETTINGS'] = 'Конфигурация приложений'; -$lang['MANAGE_ATTACHMENTS_EXPLAIN'] = 'Здесь Вы можете конфигурировать главные настройки для Мода Приложений. Если Вы нажмёте на кнопку "Проверить Настройки", Мод Приложений проведёт несколько тестов, чтобы проверить - всё ли правильно настроено. Если у Вас возникли проблемы с закачиванием файлов, используйте эту функцию, чтобы получить подробную информацию об ошибке.'; +$lang['MANAGE_ATTACHMENTS_EXPLAIN'] = 'Здесь Вы можете конфигурировать главные настройки для Мода Приложений. Если Вы нажмете на кнопку "Проверить Настройки", Мод Приложений проведет несколько тестов, чтобы проверить - все ли правильно настроено. Если у Вас возникли проблемы с закачиванием файлов, используйте эту функцию, чтобы получить подробную информацию об ошибке.'; $lang['ATTACH_FILESIZE_SETTINGS'] = 'Настройки размеров приложений'; $lang['ATTACH_NUMBER_SETTINGS'] = 'Настройка количества приложений'; $lang['ATTACH_OPTIONS_SETTINGS'] = 'Настройка приложений'; @@ -2416,7 +2398,7 @@ $lang['SHOW_APCP'] = 'Использовать новую панель конт $lang['SHOW_APCP_EXPLAIN'] = 'Выберите, хотите ли Вы использовать отдельную панель контроля приложений (да), или старый метод с двумя боксами для приложений и редактирования приложений (нет) в окне сообщения. Трудно объяснить, как это выглядит, поэтому попробуйте сами.'; $lang['MAX_FILESIZE_ATTACH'] = 'Максимальный размер приложений'; -$lang['MAX_FILESIZE_ATTACH_EXPLAIN'] = 'Максимальный размер для приложений. Ноль значит неограниченно. Эта настройка зависит от конфигурации Вашего сёрвера. Например, если php на Вашем сервере позволяет закачивать файлы не более 2 МБ, то эту величину изменить невозможно.'; +$lang['MAX_FILESIZE_ATTACH_EXPLAIN'] = 'Максимальный размер для приложений. Ноль значит неограниченно. Эта настройка зависит от конфигурации Вашего сервера. Например, если php на Вашем сервере позволяет закачивать файлы не более 2 МБ, то эту величину изменить невозможно.'; $lang['ATTACH_QUOTA'] = 'Квота приложений'; $lang['ATTACH_QUOTA_EXPLAIN'] = 'Максимальный размер для всех приложений. Ноль значит неограниченно.'; $lang['MAX_FILESIZE_PM'] = 'Максимальный размер в папке для личных сообщений'; @@ -2425,9 +2407,9 @@ $lang['DEFAULT_QUOTA_LIMIT'] = 'Стандартное ограничение к $lang['DEFAULT_QUOTA_LIMIT_EXPLAIN'] = 'Здесь Вы можете конфигурировать стандартное ограничение квоты для новых пользователей или пользователей без установленных ограничений. Настройка "Без Ограничений" для тех, кто не хочет использовать квоты приложений. Вместо этого будут использованы стандартные настройки, заданные в контрольной панеле.'; $lang['MAX_ATTACHMENTS'] = 'Максимальное количество приложений'; -$lang['MAX_ATTACHMENTS_EXPLAIN'] = 'Максимальное количество приложений, разрешённых в каждом сообщении.'; -$lang['MAX_ATTACHMENTS_PM'] = 'Максимальное количество приложений разрешённых в каждом личном сообщении'; -$lang['MAX_ATTACHMENTS_PM_EXPLAIN'] = 'Задайте максимальное количество приложений, разрешённое в каждом личном сообщении.'; +$lang['MAX_ATTACHMENTS_EXPLAIN'] = 'Максимальное количество приложений, разрешенных в каждом сообщении.'; +$lang['MAX_ATTACHMENTS_PM'] = 'Максимальное количество приложений разрешенных в каждом личном сообщении'; +$lang['MAX_ATTACHMENTS_PM_EXPLAIN'] = 'Задайте максимальное количество приложений, разрешенное в каждом личном сообщении.'; $lang['DISABLE_MOD'] = 'Выключить мод приложений'; $lang['DISABLE_MOD_EXPLAIN'] = 'Эта настройка используется главным образом для проверки новых скинов, она выключает все функции Мода Приложений, кроме административной панели.'; @@ -2439,14 +2421,14 @@ $lang['ATTACHMENT_TOPIC_REVIEW'] = 'Показывать приложения в $lang['ATTACHMENT_TOPIC_REVIEW_EXPLAIN'] = 'Если поставите "да", все приложения будут показываться в окне обзора сообщений темы.'; $lang['FTP_SERVER'] = 'FTP сервер для загрузки'; -$lang['FTP_SERVER_EXPLAIN'] = 'Здесь Вы можете задать IP адрес или домен FTP сервера, который будет использоваться для загрузки файлов. Если оставите это поле пустым, будет использоваться сервер, на котором установлен Ваш форум. Заметьте, что нельзя добавлять ftp:// или что то ещё к адресу, только ftp.foo.com или просто IP адрес.'; +$lang['FTP_SERVER_EXPLAIN'] = 'Здесь Вы можете задать IP адрес или домен FTP сервера, который будет использоваться для загрузки файлов. Если оставите это поле пустым, будет использоваться сервер, на котором установлен Ваш форум. Заметьте, что нельзя добавлять ftp:// или что то еще к адресу, только ftp.foo.com или просто IP адрес.'; $lang['ATTACH_FTP_PATH'] = 'FTP путь к папке для закаченных файлов'; $lang['ATTACH_FTP_PATH_EXPLAIN'] = 'Папка для приложений. CMOD не нужен. Пожалуйста не вставляйте Ваш IP или FTP адрес, только относительный или абсолютный путь к папке на самом сервере.
Например: /home/web/uploads'; $lang['FTP_DOWNLOAD_PATH'] = 'Ссылка для скачивания файлов c FTP'; $lang['FTP_DOWNLOAD_PATH_EXPLAIN'] = 'Задайте ссылку к FTP, где лежат приложения.
Если Вы используете удаленный FTP сервер, задайте полный адрес, например: http://www.mystorage.com/phpBB2/upload.
Если Вы используете локальный сервер для приложений, задайте относительный адрес к папке форума "upload".
Слеш будет удален. Оставьте поле пустым, если FTP недоступен из интернета. Если поле будет пустым, физический метод скачивания будет недоступен.'; $lang['FTP_PASSIVE_MODE'] = 'Задействовать пассивный FTP режим'; -$lang['FTP_PASSIVE_MODE_EXPLAIN'] = 'Команда PASV просит удаленный сервер открыть порт для связи и сообщить номер данного порта. Удалённый сервер открывает порт и клиент подключается к нему.'; +$lang['FTP_PASSIVE_MODE_EXPLAIN'] = 'Команда PASV просит удаленный сервер открыть порт для связи и сообщить номер данного порта. Удаленный сервер открывает порт и клиент подключается к нему.'; $lang['NO_FTP_EXTENSIONS_INSTALLED'] = 'Вы не можете использовать FTP для закачивания файлов, потому что Ваш PHP этого не поддерживает данную возможность.'; @@ -2465,22 +2447,22 @@ $lang['SYNC_THUMBNAILS'] = 'Синхронизация миниатюр'; // Extensions -> Extension Control $lang['MANAGE_EXTENSIONS'] = 'Конфигурация расширений'; -$lang['MANAGE_EXTENSIONS_EXPLAIN'] = 'Здесь Вы можете настроить расширения файлов. Если Вы хотите разрешить/запретить определённые расширения, пожалуйста, используйте Контроль Групп Расширений.'; +$lang['MANAGE_EXTENSIONS_EXPLAIN'] = 'Здесь Вы можете настроить расширения файлов. Если Вы хотите разрешить/запретить определенные расширения, пожалуйста, используйте Контроль Групп Расширений.'; $lang['EXPLANATION'] = 'Обьяснение'; $lang['EXTENSION_GROUP'] = 'Группа Расширений'; $lang['INVALID_EXTENSION'] = 'Неправильное расширения'; $lang['EXTENSION_EXIST'] = 'Расширение %s уже существует'; // replace %s with the Extension -$lang['UNABLE_ADD_FORBIDDEN_EXTENSION'] = 'Расширение %s запрещено, Вы не можете добавить его к группе разрешённых расширений'; // replace %s with Extension +$lang['UNABLE_ADD_FORBIDDEN_EXTENSION'] = 'Расширение %s запрещено, Вы не можете добавить его к группе разрешенных расширений'; // replace %s with Extension // Extensions -> Extension Groups Management $lang['MANAGE_EXTENSION_GROUPS'] = 'Контроль Групп Расширений'; -$lang['MANAGE_EXTENSION_GROUPS_EXPLAIN'] = 'Здесь Вы можете добавить, убрать или изменить группы расширений, Вы можете выключить группы расширений, добавить их в определённые категории, изменить механизм скачивания и выбрать иконку, которая будет отображаться приложением, которое относится к определённой группе.'; +$lang['MANAGE_EXTENSION_GROUPS_EXPLAIN'] = 'Здесь Вы можете добавить, убрать или изменить группы расширений, Вы можете выключить группы расширений, добавить их в определенные категории, изменить механизм скачивания и выбрать иконку, которая будет отображаться приложением, которое относится к определенной группе.'; $lang['SPECIAL_CATEGORY'] = 'Специальная категория'; $lang['CATEGORY_IMAGES'] = 'Картинки'; $lang['CATEGORY_STREAM_FILES'] = 'Потоковые файлы'; $lang['CATEGORY_SWF_FILES'] = 'Flash файлы'; $lang['ALLOWED'] = 'Разрешено'; -$lang['ALLOWED_FORUMS'] = 'Разрешённые форумы'; +$lang['ALLOWED_FORUMS'] = 'Разрешенные форумы'; $lang['EXT_GROUP_PERMISSIONS'] = 'Права Групп'; $lang['DOWNLOAD_MODE'] = 'Метод скачивания'; $lang['UPLOAD_ICON'] = 'Иконка для закачки'; @@ -2489,7 +2471,7 @@ $lang['EXTENSION_GROUP_EXIST'] = 'Группа расширений %s уже с // Extensions -> Special Categories $lang['MANAGE_CATEGORIES'] = 'Контроль специальных категорий'; -$lang['MANAGE_CATEGORIES_EXPLAIN'] = 'Здесь Вы можете настраивать специальные категории. Вы можете задать специальные параметры для специальных категорий прикреплённых к группам расширений.'; +$lang['MANAGE_CATEGORIES_EXPLAIN'] = 'Здесь Вы можете настраивать специальные категории. Вы можете задать специальные параметры для специальных категорий прикрепленных к группам расширений.'; $lang['SETTINGS_CAT_IMAGES'] = 'Настройки для специальной категории: Изображения'; $lang['SETTINGS_CAT_STREAMS'] = 'Настройки для специальной категории: Потоковые файлы'; $lang['SETTINGS_CAT_FLASH'] = 'Настройки для специальной категории: Flash файлы'; @@ -2502,7 +2484,7 @@ $lang['IMAGE_LINK_SIZE_EXPLAIN'] = 'Картинки установленной $lang['ASSIGNED_GROUP'] = 'Прикрепленная группа'; $lang['IMAGE_CREATE_THUMBNAIL'] = 'Создать миниатюру'; -$lang['IMAGE_CREATE_THUMBNAIL_EXPLAIN'] = 'Всегда создавать миниатюры. Эта функция замещает все настройки в этой специальной категории, кроме настройки "Максимальная величина изображения". При включении этой функции в сообщении будет отображаться миниатюра, пользователь может на неё нажать, чтобы открыть само изображение.
Пожалуйста, заметьте, что для этой функции необходим Imagick, если он не инсталлирован или если включен Safe-Mode, будет использоваться PHP расширения GD. Если тип изображения не поддерживается PHP, эта функция не будет задействована.'; +$lang['IMAGE_CREATE_THUMBNAIL_EXPLAIN'] = 'Всегда создавать миниатюры. Эта функция замещает все настройки в этой специальной категории, кроме настройки "Максимальная величина изображения". При включении этой функции в сообщении будет отображаться миниатюра, пользователь может на нее нажать, чтобы открыть само изображение.
Пожалуйста, заметьте, что для этой функции необходим Imagick, если он не инсталлирован или если включен Safe-Mode, будет использоваться PHP расширения GD. Если тип изображения не поддерживается PHP, эта функция не будет задействована.'; $lang['IMAGE_MIN_THUMB_FILESIZE'] = 'Минимальный размер миниатюры'; $lang['IMAGE_MIN_THUMB_FILESIZE_EXPLAIN'] = 'Если изображение меньше, чем данный размер, миниатюра создаваться не будет, потому что само изображение уже достаточно маленькое.'; $lang['IMAGE_IMAGICK_PATH'] = 'Приложение Imagick (полный путь)'; @@ -2514,14 +2496,14 @@ $lang['USE_GD2_EXPLAIN'] = 'PHP может быть скомпилировано $lang['ATTACHMENT_VERSION'] = 'Версия Мода приложений (Attachment Mod) %s'; // %s is the version number // Extensions -> Forbidden Extensions -$lang['MANAGE_FORBIDDEN_EXTENSIONS'] = 'Управление запрещёнными расширениями'; -$lang['MANAGE_FORBIDDEN_EXTENSIONS_EXPLAIN'] = 'Здесь Вы можете добавить или удалить запрещённое расширение. Расширения php, php3, php4 запрещены для безопасности по умолчанию, и их невозможно удалить.'; -$lang['FORBIDDEN_EXTENSION_EXIST'] = 'Запрещённое расширение %s уже существует'; // replace %s with the extension -$lang['EXTENSION_EXIST_FORBIDDEN'] = 'Расширение %s уже задано в разрешённых расширениях, пожалуйста, удалите его оттуда, перед тем, как добавлять его здесь.'; // replace %s with the extension +$lang['MANAGE_FORBIDDEN_EXTENSIONS'] = 'Управление запрещенными расширениями'; +$lang['MANAGE_FORBIDDEN_EXTENSIONS_EXPLAIN'] = 'Здесь Вы можете добавить или удалить запрещенное расширение. Расширения php, php3, php4 запрещены для безопасности по умолчанию, и их невозможно удалить.'; +$lang['FORBIDDEN_EXTENSION_EXIST'] = 'Запрещенное расширение %s уже существует'; // replace %s with the extension +$lang['EXTENSION_EXIST_FORBIDDEN'] = 'Расширение %s уже задано в разрешенных расширениях, пожалуйста, удалите его оттуда, перед тем, как добавлять его здесь.'; // replace %s with the extension // Extensions -> Extension Groups Control -> Group Permissions $lang['GROUP_PERMISSIONS_TITLE_ADMIN'] = 'Права групп расширений -> \'%s\''; // Replace %s with the Groups Name -$lang['GROUP_PERMISSIONS_EXPLAIN'] = 'Здесь Вы можете ограничить использование определённых групп расширений в форумах (как задано в боксе "Разрешённые Форумы"). По умолчанию разрешены все группы расширений во всех форумах, в которых пользователь может добавлять файлы (т.е. нормальный метод, который использовался в Моде приложений с самого начала). Если Вы разрешите только определённые форумы, то вариант "Все Форумы" исчезнет. Вы сможете снова добавить все форумы в любое время. Если Вы добавите новый раздел на Вашем форуме и разрешение установлено на "Все форумы", то ничего не изменится. Но если Вы изменили или ограничили доступ к определённым форумам, Вы должны вернуться сюда и добавить этот новый форум. Это можно было бы сделать автоматически, но Вам бы пришлось изменять много файлов, поэтому автор решил использовать текущий вариант. Пожалуйста, заметьте, что здесь будут перечислены все Вами форумы.'; +$lang['GROUP_PERMISSIONS_EXPLAIN'] = 'Здесь Вы можете ограничить использование определенных групп расширений в форумах (как задано в боксе "Разрешенные Форумы"). По умолчанию разрешены все группы расширений во всех форумах, в которых пользователь может добавлять файлы (т.е. нормальный метод, который использовался в Моде приложений с самого начала). Если Вы разрешите только определенные форумы, то вариант "Все Форумы" исчезнет. Вы сможете снова добавить все форумы в любое время. Если Вы добавите новый раздел на Вашем форуме и разрешение установлено на "Все форумы", то ничего не изменится. Но если Вы изменили или ограничили доступ к определенным форумам, Вы должны вернуться сюда и добавить этот новый форум. Это можно было бы сделать автоматически, но Вам бы пришлось изменять много файлов, поэтому автор решил использовать текущий вариант. Пожалуйста, заметьте, что здесь будут перечислены все Вами форумы.'; $lang['NOTE_ADMIN_EMPTY_GROUP_PERMISSIONS'] = 'Замечание:
В ниже перечисленных форумах пользователи обычно могут добавлять файлы, но так как никакие группы расширений там не разрешены, пользователи не смогут ничего прикрепить. Если они попробуют, они увидят сообщение об ошибке. Может быть Вы хотите установить разрешение \'Добавить файлы\' для администрации в этих форумах.

'; $lang['ADD_FORUMS'] = 'Добавить форумы'; $lang['ADD_SELECTED'] = 'Добавить выбранные'; @@ -2529,7 +2511,7 @@ $lang['PERM_ALL_FORUMS'] = 'Все форумы'; // Attachments -> Quota Limits $lang['MANAGE_QUOTAS'] = 'Настройка лимита квоты для расширений'; -$lang['MANAGE_QUOTAS_EXPLAIN'] = 'Здесь Вы можете добавить/удалить/изменить квоты для расширений. Позднее Вы можете прикрепить эти ограничения к определённым пользователям или группам. Чтобы прикрепить ограничение к пользователю, откройте Пользователи->Управление, выберите пользователя и Вы увидите необходимые настройки внизу страницы. Чтобы прикрепить ограничение к группе, откройте Группы->Управление, выберите группу и Вы увидите панель настроек. Если Вы хотите увидеть, какие пользователи и группы прикреплены к определённым ограничениям, нажмите на "Посмотреть" слева от описания квоты.'; +$lang['MANAGE_QUOTAS_EXPLAIN'] = 'Здесь Вы можете добавить/удалить/изменить квоты для расширений. Позднее Вы можете прикрепить эти ограничения к определенным пользователям или группам. Чтобы прикрепить ограничение к пользователю, откройте Пользователи->Управление, выберите пользователя и Вы увидите необходимые настройки внизу страницы. Чтобы прикрепить ограничение к группе, откройте Группы->Управление, выберите группу и Вы увидите панель настроек. Если Вы хотите увидеть, какие пользователи и группы прикреплены к определенным ограничениям, нажмите на "Посмотреть" слева от описания квоты.'; $lang['ASSIGNED_USERS'] = 'Прикрепленные пользователи'; $lang['ASSIGNED_GROUPS'] = 'Прикрепленные группы'; $lang['QUOTA_LIMIT_EXIST'] = 'Ограничение %s уже существует.'; // Replace %s with the Quota Description @@ -2753,7 +2735,7 @@ $lang['CRON_RUN_COUNT'] = 'Запусков'; $lang['CRON_MANAGE'] = 'Управление'; $lang['CRON_OPTIONS'] = 'Настройки крона'; -$lang['CRON_ENABLED'] = 'Крон включён'; +$lang['CRON_ENABLED'] = 'Крон включен'; $lang['CRON_CHECK_INTERVAL'] = 'Проверка (сек)'; $lang['WITH_SELECTED'] = 'С выделенными'; @@ -3136,8 +3118,8 @@ $lang['TPL_IN_LINE'] = 'на той же строке'; $lang['TPL_HEADER_ONLY'] = 'только в заголовке'; $lang['SEARCH_INVALID_USERNAME'] = 'Введено неправильное имя для поиска'; -$lang['SEARCH_INVALID_EMAIL'] = 'Введён неправильный адрес email для поиска'; -$lang['SEARCH_INVALID_IP'] = 'Введён неправильный IP-адрес для поиска'; +$lang['SEARCH_INVALID_EMAIL'] = 'Введен неправильный адрес email для поиска'; +$lang['SEARCH_INVALID_IP'] = 'Введен неправильный IP-адрес для поиска'; $lang['SEARCH_INVALID_GROUP'] = 'Введена неправильная группа для поиска'; $lang['SEARCH_INVALID_RANK'] = 'Введено неправильное звание для поиска'; $lang['SEARCH_INVALID_DATE'] = 'Введена неправильная дата для поиска'; @@ -3149,9 +3131,9 @@ $lang['SEARCH_INVALID_STYLE'] = 'Выбран неправильный стил $lang['SEARCH_INVALID_TIMEZONE'] = 'Выбран неправильный часовой пояс'; $lang['SEARCH_INVALID_MODERATORS'] = 'Выбран неправильный форум'; $lang['SEARCH_INVALID'] = 'Неверный поиск'; -$lang['SEARCH_INVALID_DAY'] = 'Введённый день неверен'; -$lang['SEARCH_INVALID_MONTH'] = 'Введённый месяц неверен'; -$lang['SEARCH_INVALID_YEAR'] = 'Введённый год неверен'; +$lang['SEARCH_INVALID_DAY'] = 'Введенный день неверен'; +$lang['SEARCH_INVALID_MONTH'] = 'Введенный месяц неверен'; +$lang['SEARCH_INVALID_YEAR'] = 'Введенный год неверен'; $lang['SEARCH_NO_REGEXP'] = 'База данных не поддерживает поиск по регулярным выражениям.'; $lang['SEARCH_FOR_USERNAME'] = 'Поиск имени пользователя %s'; $lang['SEARCH_FOR_EMAIL'] = 'Поиск адреса email %s'; @@ -3181,8 +3163,8 @@ $lang['SEARCH_FOR_STYLE'] = 'Поиск пользователей, исполь $lang['SEARCH_FOR_MODERATORS'] = 'Поиск модареторов форума -> %s'; $lang['SEARCH_USERS_ADVANCED'] = 'Расширенный поиск пользователя'; $lang['SEARCH_USERS_EXPLAIN'] = 'Позволяет осуществлять расширенный поиск пользователей по большому диапазону критериев. Пожалуйста, читайте описания полей поиска, чтобы полностью понять каждую из поисковых возможностей.'; -$lang['SEARCH_USERNAME_EXPLAIN'] = 'Здесь можно произвести регистронезависимый поиск имени пользователя. Если вы хотите задать только часть имени, используйте * (звёздочка) как маску. Выбор регулярных выражений позволит искать по образцу.'; -$lang['SEARCH_EMAIL_EXPLAIN'] = ' Введите выражение, соответствующее адресам email пользователей. Регистр не имеет значения. Для осуществления поиска по частичному соответствию, используйте * (звёздочка) как маску. Выбор регулярных выражений позволит искать по образцу.'; +$lang['SEARCH_USERNAME_EXPLAIN'] = 'Здесь можно произвести регистронезависимый поиск имени пользователя. Если вы хотите задать только часть имени, используйте * (звездочка) как маску. Выбор регулярных выражений позволит искать по образцу.'; +$lang['SEARCH_EMAIL_EXPLAIN'] = ' Введите выражение, соответствующее адресам email пользователей. Регистр не имеет значения. Для осуществления поиска по частичному соответствию, используйте * (звездочка) как маску. Выбор регулярных выражений позволит искать по образцу.'; $lang['SEARCH_IP_EXPLAIN'] = 'Поиск пользователей по IP-адресу (xxx.xxx.xxx.xxx), по маске (xxx.xxx.xxx.*) или диапазону (xxx.xxx.xxx.xxx-yyy.yyy.yyy.yyy). Примечание: последняя четверть .255 означает весь диапазон IP адресов этой четверти. Если задано 10.0.0.255, это равнозначно запросу 10.0.0.* (IP-адрес .255 не присваивается, а является зарезервированным). Это можно встретить при поиске по диапазону, 10.0.0.5-10.0.0.255 равнозначно "10.0.0.*" . На самом деле необходимо задать 10.0.0.5-10.0.0.254 .'; $lang['SEARCH_USERS_JOINED'] = 'Пользователи, зарегистрированные'; $lang['SEARCH_USERS_LASTVISITED'] = 'Пользователи, посетившие трекер'; @@ -3195,18 +3177,18 @@ $lang['SEARCH_USERS_GROUPS_EXPLAIN'] = 'Просмотреть всех член $lang['SEARCH_USERS_RANKS_EXPLAIN'] = 'Просмотреть всех носителей выбранного звания.'; $lang['BANNED_USERS'] = 'Забаненные пользователи'; $lang['DISABLED_USERS'] = 'Отключенные пользователи'; -$lang['SEARCH_USERS_MISC_EXPLAIN'] = 'Администраторы - все пользователи с правами администратора; Модераторы - все модераторы форумов; Забаненные пользователи - все учётные записи, запрещённые на трекере; отключенные пользователи - все пользователи с отключенными учётными записями (вручную, или не подтвердившие свой адрес email); Пользователи с отключенными ЛС - Пользователи, не имеющие права пользоваться личными сообщениями (установлено через управление пользователями)'; +$lang['SEARCH_USERS_MISC_EXPLAIN'] = 'Администраторы - все пользователи с правами администратора; Модераторы - все модераторы форумов; Забаненные пользователи - все учетные записи, запрещенные на трекере; отключенные пользователи - все пользователи с отключенными учетными записями (вручную, или не подтвердившие свой адрес email); Пользователи с отключенными ЛС - Пользователи, не имеющие права пользоваться личными сообщениями (установлено через управление пользователями)'; $lang['POSTCOUNT'] = 'Число сообщений'; $lang['EQUALS'] = 'Равно'; $lang['GREATER_THAN'] = 'Больше чем'; $lang['LESS_THAN'] = 'Меньше чем'; $lang['SEARCH_USERS_POSTCOUNT_EXPLAIN'] = 'Вы можете искать пользователей по количеству оставленных сообщений. Поиск можно произвести либо по конкретному значению, либо большему или меньшему заданного, либо находящемуся в заданном диапазоне значений. Для поиска в диапазоне, выберите "Равно", и задайте начало и конец диапазона через дефис (-), напр. 10-15'; $lang['USERFIELD'] = 'Поле профиля'; -$lang['SEARCH_USERS_USERFIELD_EXPLAIN'] = 'Поиск пользователей по различным полям профиля. В качестве маски разрешены звёздочки (*). Выбор регулярных выражений позволит искать по образцу.'; +$lang['SEARCH_USERS_USERFIELD_EXPLAIN'] = 'Поиск пользователей по различным полям профиля. В качестве маски разрешены звездочки (*). Выбор регулярных выражений позволит искать по образцу.'; $lang['SEARCH_USERS_LASTVISITED_EXPLAIN'] = 'Вы можете искать пользователей по дате их последнего входа на трекер, используя эту поисковую возможность.'; -$lang['SEARCH_USERS_LANGUAGE_EXPLAIN'] = 'Поиск пользователей, выбравших заданный язык в своём профиле'; -$lang['SEARCH_USERS_TIMEZONE_EXPLAIN'] = 'Поиск пользователей, выбравших заданный часовой пояс в своём профиле'; -$lang['SEARCH_USERS_STYLE_EXPLAIN'] = 'Поиск пользователей, выбравших заданный стиль в своём профиле'; +$lang['SEARCH_USERS_LANGUAGE_EXPLAIN'] = 'Поиск пользователей, выбравших заданный язык в своем профиле'; +$lang['SEARCH_USERS_TIMEZONE_EXPLAIN'] = 'Поиск пользователей, выбравших заданный часовой пояс в своем профиле'; +$lang['SEARCH_USERS_STYLE_EXPLAIN'] = 'Поиск пользователей, выбравших заданный стиль в своем профиле'; $lang['MODERATORS_OF'] = 'Модераторы'; $lang['SEARCH_USERS_MODERATORS_EXPLAIN'] = 'Поиск пользователей с правами модератора на заданном форуме. Права модератора определяются в соответствии с правами пользователя, или в соответствии с правами группы, челоном которой он является.'; $lang['REGULAR_EXPRESSION'] = 'Регулярное выражение?'; @@ -3214,10 +3196,11 @@ $lang['REGULAR_EXPRESSION'] = 'Регулярное выражение?'; $lang['SEARCH_USERS_NEW'] = '%s дал %d результат(ов). Новый поиск.'; $lang['BANNED'] = 'Забаненные'; $lang['NOT_BANNED'] = 'Не забаненные'; -$lang['SEARCH_NO_RESULTS'] = 'Нет пользователей, отвечающих выбранным критериям. Пожалуйста, попробуйте повторить поиск. Если вы ищете имя пользователя или адрес email по частичному совпадению, вы должны использовать маску * (звёздочку).'; -$lang['ACCOUNT_STATUS'] = 'Статус учётной записи'; +$lang['SEARCH_NO_RESULTS'] = 'Нет пользователей, отвечающих выбранным критериям. Пожалуйста, попробуйте повторить поиск. Если вы ищете имя пользователя или адрес email по частичному совпадению, вы должны использовать маску * (звездочку).'; +$lang['ACCOUNT_STATUS'] = 'Статус учетной записи'; $lang['SORT_OPTIONS'] = 'Поля сортировки:'; $lang['LAST_VISIT'] = 'Последнее посещение'; $lang['DAY'] = 'День'; -$lang['POST_EDIT_CANNOT'] = 'Извините, вы не можете редактировать сообщения'; \ No newline at end of file +$lang['POST_EDIT_CANNOT'] = 'Извините, вы не можете редактировать сообщения'; +$lang['FORUMS_IN_CAT'] = 'форумов в этой категории'; \ No newline at end of file diff --git a/upload/misc/html/copyright_holders.html b/upload/misc/html/copyright_holders.html index 5ece2bb88..7a251f601 100644 --- a/upload/misc/html/copyright_holders.html +++ b/upload/misc/html/copyright_holders.html @@ -20,7 +20,7 @@

Для этого необходимо, чтобы вы прислали нам письмо (в электронном виде) в котором указали нам следующую информацию:

-

1. Документальное подтверждение ваших прав на материал, защищённый авторским правом:

+

1. Документальное подтверждение ваших прав на материал, защищенный авторским правом:

- отсканированный документ с печатью, либо

- email с официального почтового домена компании правообладателя, либо

- иная контактная информация, позволяющая однозначно идентифицировать вас, как правообладателя данного материала.

diff --git a/upload/misc/js/main.js b/upload/misc/js/main.js index 62c36bdc8..125f47fa1 100644 --- a/upload/misc/js/main.js +++ b/upload/misc/js/main.js @@ -191,18 +191,6 @@ function ie_copyTextToClipboard (fromNode) return txt.execCommand("Copy"); } -// Clickable LABELs in IE -// based on http://web.tampabay.rr.com/bmerkey/examples/clickable-labels.html -function ie6_make_clickable_labels () -{ - var labels = document.getElementsByTagName("label"); - for (var i=0, len=labels.length; irm("poll_$topic_id"); - bb_die('Спасибо! Ваш голос учтён'); + bb_die('Спасибо! Ваш голос учтен'); break; // возобновить возможность голосовать @@ -110,7 +110,7 @@ switch ($mode) bb_die('Опрос не найден'); } DB()->query("UPDATE ". BB_TOPICS ." SET topic_vote = ". POLL_FINISHED ." WHERE topic_id = $topic_id LIMIT 1"); - bb_die('Опрос завершён'); + bb_die('Опрос завершен'); break; // удаление @@ -120,7 +120,7 @@ switch ($mode) bb_die('Опрос не найден'); } $poll->delete_poll($topic_id); - bb_die('Опрос удалён'); + bb_die('Опрос удален'); break; // добавление @@ -151,7 +151,7 @@ switch ($mode) } $poll->insert_votes_into_db($topic_id); CACHE('bb_poll_data')->rm("poll_$topic_id"); - bb_die('Опрос изменён и старые результаты удалены'); + bb_die('Опрос изменен и старые результаты удалены'); break; default: diff --git a/upload/posting.php b/upload/posting.php index 5c98b02a4..40b6e163a 100644 --- a/upload/posting.php +++ b/upload/posting.php @@ -430,7 +430,7 @@ elseif ( ($submit || $confirm) && !$topic_has_new_posts ) } $sub_forums[] = $forum_id; $sub_forums = join(',', $sub_forums); - // Подсчёт проверенных релизов в форумах раздела + // Подсчет проверенных релизов в форумах раздела $count_checked_releases = DB()->fetch_row(" SELECT COUNT(*) AS checked_releases FROM ". BB_BT_TORRENTS ." diff --git a/upload/privmsg.php b/upload/privmsg.php index 0f3987871..4f5b60c2a 100644 --- a/upload/privmsg.php +++ b/upload/privmsg.php @@ -161,7 +161,7 @@ if ( $mode == 'read' ) // // Major query obtains the message ... // - $sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_email, u.user_regdate, u.user_rank, u.user_avatar, + $sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_email, u.user_regdate, u.user_rank, u2.username AS to_username, u2.user_id AS to_user_id, u2.user_rank as to_user_rank, pm.*, pmt.privmsgs_text FROM " . BB_PRIVMSGS . " pm, " . BB_PRIVMSGS_TEXT . " pmt, " . BB_USERS . " u, " . BB_USERS . " u2 @@ -483,7 +483,6 @@ if ( $mode == 'read' ) 'POSTER_JOINED' => (@$poster_joined) ? $poster_joined : '', 'POSTER_POSTS' => (@$poster_posts) ? $poster_posts : '', 'POSTER_FROM' => (@$poster_from) ? $poster_from : '', - 'POSTER_AVATAR' => (@$poster_avatar) ? $poster_avatar : '', 'POST_SUBJECT' => $post_subject, 'POST_DATE' => $post_date, 'PM_MESSAGE' => $private_message, diff --git a/upload/search.php b/upload/search.php index 9aabc03b5..0cceb94b2 100644 --- a/upload/search.php +++ b/upload/search.php @@ -604,7 +604,6 @@ if ($post_mode) 'POST_DATE' => bb_date($post['post_time'], $bb_cfg['post_date_format']), 'IS_UNREAD' => is_unread($post['post_time'], $topic_id, $forum_id), 'MESSAGE' => ($chars_val == $show_all) ? get_parsed_post($post, 'full') : get_parsed_post($post, 'briefly'), - 'AVATAR' => '', 'POSTED_AFTER' => '', 'QUOTE' => $quote_btn, 'EDIT' => $edit_btn, diff --git a/upload/templates/admin/admin_board.tpl b/upload/templates/admin/admin_board.tpl index 72366ea52..c35208b55 100644 --- a/upload/templates/admin/admin_board.tpl +++ b/upload/templates/admin/admin_board.tpl @@ -32,14 +32,6 @@ - -

{L_ACCT_ACTIVATION}

- -
-
-
- -

{L_ALLOW_AUTOLOGIN}

{L_ALLOW_AUTOLOGIN_EXPLAIN}
@@ -151,43 +143,6 @@ - - {L_AVATAR_SETTINGS} - - -

{L_ALLOW_LOCAL}

- -    - - - - -

{L_ALLOW_UPLOAD}

- -    - - - - -

{L_MAX_FILESIZE}

{L_MAX_FILESIZE_EXPLAIN}
- {L_BYTES} - - -

{L_MAX_AVATAR_SIZE}

{L_MAX_AVATAR_SIZE_EXPLAIN}
- x - - -

{L_AVATAR_STORAGE_PATH}

{L_AVATAR_STORAGE_PATH_EXPLAIN}
- - - -

{L_AVATAR_GALLERY_PATH}

{L_AVATAR_GALLERY_PATH_EXPLAIN}
- - - -

{L_NOAVATAR}

- - {L_EMAIL_SETTINGS} diff --git a/upload/templates/admin/admin_forums.tpl b/upload/templates/admin/admin_forums.tpl index e42e792c3..5c0718ce6 100644 --- a/upload/templates/admin/admin_forums.tpl +++ b/upload/templates/admin/admin_forums.tpl @@ -22,63 +22,64 @@ function toggle_cat_list (val)

{L_FORUM_EDIT_DELETE_EXPLAIN}


-
+ {S_HIDDEN_FIELDS} -{SID_HIDDEN} - +
++ - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - +
{L_FORUM_SETTINGS}
{L_FORUM_NAME}{L_FORUM_NAME}
{L_FORUM_DESC}{L_FORUM_DESC}
{L_SF_PARENT_FORUM}{L_SF_PARENT_FORUM}
{L_CATEGORY}{L_CATEGORY}
{L_SF_SHOW_ON_INDEX} -    + {L_SF_SHOW_ON_INDEX} +    -
{L_FORUM_STATUS}{L_FORUM_STATUS}
{L_REG_TORRENTS}{ALLOW_REG_TRACKER}   {L_SELF_MODERATED}: {SELF_MODERATED}   {L_ALLOW_PORNO_TOPIC}: {ALLOW_PORNO_TOPIC}
{L_REG_TORRENTS}{ALLOW_REG_TRACKER}   {L_SELF_MODERATED}: {SELF_MODERATED}   {L_ALLOW_PORNO_TOPIC}: {ALLOW_PORNO_TOPIC}
{L_DESIGNER}{TPL_SELECT} - {L_FOR_NEW_TEMPLATE}
{L_DESIGNER}{TPL_SELECT} - {L_FOR_NEW_TEMPLATE}
{L_FORUM_PRUNING}{L_PRUNE_DAYS} {L_DAYS}  (0 = {L_DISABLED})
{L_FORUM_PRUNING}{L_PRUNE_DAYS} {L_DAYS}  (0 = {L_DISABLED})
{L_SORT_BY} + {L_SORT_BY}    
- +
@@ -95,9 +96,8 @@ function toggle_cat_list (val)

{L_EDIT_CATEGORY_EXPLAIN}


- + {S_HIDDEN_FIELDS} -{SID_HIDDEN} @@ -107,7 +107,7 @@ function toggle_cat_list (val) @@ -126,9 +126,8 @@ function toggle_cat_list (val)

{L_FORUM_DELETE_EXPLAIN}


- + {S_HIDDEN_FIELDS} -{SID_HIDDEN}
{L_CATEGORY}: -   +  
@@ -178,49 +177,61 @@ function hl (id, on) } -

{L_FORUM_TITLE}

+

{L_FORUM_TITLE} [{L_FORUMS_IN_CAT}: {FORUMS_COUNT}]

{L_FORUM_EDIT_DELETE_EXPLAIN}


-{SID_HIDDEN} - +
- + - + - - - - - - - - - + + + + + + + + + - +
 ↑  ↓  ↑  ↓  - {catrow.CAT_DESC} + {c.CAT_DESC} - {L_CREATE_FORUM} - | - {L_EDIT} - | - {L_DELETE} + {L_CREATE_FORUM} + · + {L_EDIT} + · + {L_DELETE} {L_PRUNE}{L_PRUNE}
 ↑  ↓ {catrow.forumrow.FORUM_NAME}  {L_TOPICS_SHORT}: {catrow.forumrow.NUM_TOPICS} {L_POSTS_SHORT}: {catrow.forumrow.NUM_POSTS} {L_EDIT}  +sub  {L_RESYNC}  {L_REMOVE} {catrow.forumrow.PRUNE_DAYS}
 ↑  ↓  +sub {c.f.FORUM_NAME}{L_TOPICS_SHORT}: {c.f.NUM_TOPICS}{L_POSTS_SHORT}: {c.f.NUM_POSTS} +   + edit +  ·  + perm +  ·  + sync +  ·  + x +   + {c.f.PRUNE_DAYS}
- + - +
+ + +
@@ -230,6 +241,5 @@ function hl (id, on)

{L_SHOW_ALL_FORUMS_ON_ONE_PAGE}


- - + \ No newline at end of file diff --git a/upload/templates/default/donate.tpl b/upload/templates/default/donate.tpl index 302c8968c..8900cf4b0 100644 --- a/upload/templates/default/donate.tpl +++ b/upload/templates/default/donate.tpl @@ -20,7 +20,7 @@ Валюта - Кошелёк + Кошелек Евро diff --git a/upload/templates/default/page_header.tpl b/upload/templates/default/page_header.tpl index 34ae8f740..2e1142425 100644 --- a/upload/templates/default/page_header.tpl +++ b/upload/templates/default/page_header.tpl @@ -223,7 +223,7 @@ function getElText (e) } function escHTML (txt) { - return txt.replace(/ $(document).ready(function() { @@ -254,25 +254,10 @@ function post2url (url, params) { } - - - - -
- - - - -
- {L_REGISTER} · - - {L_USERNAME}: - {L_PASSWORD}: -   - - · - {L_FORGOTTEN_PASSWORD} -
+ + + + +
+ {L_REGISTER} · +
+ {L_USERNAME}: + {L_PASSWORD}: +   + +
· + {L_FORGOTTEN_PASSWORD} +
- - - - - - - - - - @@ -578,7 +550,7 @@ important_info -