diff --git a/common.php b/common.php index 0558f07f6..b7787ee3c 100644 --- a/common.php +++ b/common.php @@ -15,12 +15,36 @@ if (!defined('BB_ROOT')) define('BB_ROOT', './'); header('X-Frame-Options: SAMEORIGIN'); -// Get initial config -require(BB_ROOT . 'library/config.php'); +// Cloudflare +if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) +{ + $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; +} + +require_once BB_ROOT . 'library/defines.php'; // Composer require(BB_ROOT . 'vendor/autoload.php'); +require_once BB_ROOT . 'library/config.php'; + +$di = new \TorrentPier\Di(); + +$di->register(new \TorrentPier\ServiceProviders\ConfigServiceProvider, [ + 'config.file.system.main' => __DIR__ . '/library/config.php', + 'config.file.local.main' => __DIR__ . '/library/config.local.php', +]); + +$di->register(new \TorrentPier\ServiceProviders\DbServiceProvider, [ + 'config.db' => $di->config->db->toArray() +]); + +$bb_cfg = $di->config->toArray(); +$page_cfg = $di->config->page->toArray(); +$tr_cfg = $di->config->tracker->toArray(); +$rating_limits = $di->config->rating->toArray(); +define('BB_CFG_LOADED', true); + // Load Zend Framework use Zend\Loader\StandardAutoloader; $loader = new StandardAutoloader(array('autoregister_zf' => true)); @@ -65,12 +89,25 @@ define('BOT_UID', -746); /** * Database + * @deprecated */ // Core DB class require(CORE_DIR . 'dbs.php'); -$DBS = new DBS($bb_cfg); +$DBS = new DBS([ + 'db' => [ + 'db' => [ + $di->config->db->hostname, + $di->config->db->database, + $di->config->db->username, + $di->config->db->password, + $di->config->db->charset, + false + ] + ], + 'db_alias' => $bb_cfg['db_alias'] +]); -function DB ($db_alias = 'db1') +function DB ($db_alias = 'db') { global $DBS; return $DBS->get_db_obj($db_alias); diff --git a/composer.json b/composer.json index ac45266f1..9d8be0b5c 100644 --- a/composer.json +++ b/composer.json @@ -38,11 +38,12 @@ "zendframework/zend-loader": "^2.5", "zendframework/zend-mail": "^2.5", "zendframework/zend-session": "^2.5", - "zendframework/zend-version": "^2.5" + "zendframework/zend-version": "^2.5", + "pimple/pimple": "^3.0" }, "autoload": { "psr-4": { - "TorrentPier\\": "library/" + "TorrentPier\\": "src/" } }, "minimum-stability": "stable", diff --git a/composer.lock b/composer.lock index 4bbe492d5..fe5f6c830 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "9a65af4ba5edfe73ffdded1ea1b995f7", - "content-hash": "0074d54ee83fdffa1dec1fba0adc560d", + "hash": "e8a2d6011dd844e4be12323e4375f772", + "content-hash": "dc3c90480a0003746504276bfac71364", "packages": [ { "name": "container-interop/container-interop", @@ -79,6 +79,52 @@ ], "time": "2015-09-02 17:23:59" }, + { + "name": "pimple/pimple", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a", + "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2015-09-11 15:10:35" + }, { "name": "rych/bencode", "version": "v1.0.0", diff --git a/library/config.php b/library/config.php index 330ad4fca..b3b199797 100644 --- a/library/config.php +++ b/library/config.php @@ -61,561 +61,487 @@ if (!defined('BB_ROOT')) die(basename(__FILE__)); -$bb_cfg = $tr_cfg = $page_cfg = array(); +$domain_name = 'torrentpier.me'; -// Increase number after changing js or css -$bb_cfg['js_ver'] = $bb_cfg['css_ver'] = 1; +$config = [ + // Increase number after changing js or css + 'js_ver' => 1, + 'css_ver' => 1, -// Primary domain name -$domain_name = 'torrentpier.me'; // enter here your primary domain name of your site -$domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $domain_name; + // Version info + 'tp_version' => '2.2.0', + 'tp_release_date' => '**/02/2016', + 'tp_release_state' => 'ALPHA', -// Version info -$bb_cfg['tp_version'] = '2.2.0'; -$bb_cfg['tp_release_date'] = '**/02/2016'; -$bb_cfg['tp_release_state'] = 'ALPHA'; + // Database + 'db' => [ + 'driver' => 'Pdo_Mysql', + 'hostname' => 'localhost', + 'database' => 'tp_220', + 'username' => 'root', + 'password' => 'dev', + 'charset' => 'utf8' + ], -// Database -$charset = 'utf8'; -$pconnect = false; + // Aliases + // @deprecated + 'db_alias' => [ +// 'alias' => 'srv_name' +# db1 + 'log' => 'db', // BB_LOG + 'search' => 'db', // BB_TOPIC_SEARCH + 'sres' => 'db', // BB_BT_USER_SETTINGS, BB_SEARCH_RESULTS + 'u_ses' => 'db', // BB_USER_SES, BB_USER_LASTVISIT +# db2 + 'dls' => 'db', // BB_BT_DLS_* + 'ip' => 'db', // BB_POSTS_IP + 'ut' => 'db', // BB_TOPICS_USER_POSTED +# db3 + 'pm' => 'db', // BB_PRIVMSGS, BB_PRIVMSGS_TEXT + 'pt' => 'db', // BB_POSTS_TEXT + ], -// Настройка баз данных ['db']['srv_name'] => (array) srv_cfg; -// порядок параметров srv_cfg (хост, название базы, пользователь, пароль, charset, pconnect); -$bb_cfg['db'] = array( - 'db1' => array('localhost', 'tp_220', 'user', 'pass', $charset, $pconnect), - //'db2' => array('localhost2', 'dbase2', 'user2', 'pass2', $charset, $pconnect), - //'db3' => array('localhost3', 'dbase3', 'user2', 'pass3', $charset, $pconnect), -); + // Cache + 'cache' => [ + 'pconnect' => true, + 'db_dir' => realpath(BB_ROOT) .'/internal_data/cache/filecache/', + 'prefix' => 'tp_', // Префикс кеша ('tp_') + 'memcache' => [ + 'host' => '127.0.0.1', + 'port' => 11211, + 'pconnect' => true, + 'con_required' => true, + ], + 'redis' => [ + 'host' => '127.0.0.1', + 'port' => 6379, + 'con_required' => true, + ], + 'engines' => [ + // Available cache types: memcache, sqlite, redis, apc, xcache (default of filecache) + # name => array( (string) type, (array) cfg ) + 'bb_cache' => ['filecache', []], + 'bb_config' => ['filecache', []], + 'tr_cache' => ['filecache', []], + 'session_cache' => ['filecache', []], + 'bb_login_err' => ['filecache', []], + 'bb_poll_data' => ['filecache', []], + ] + ], -$bb_cfg['db_alias'] = array( -// 'alias' => 'srv_name' -# db1 - 'log' => 'db1', // BB_LOG - 'search' => 'db1', // BB_TOPIC_SEARCH - 'sres' => 'db1', // BB_BT_USER_SETTINGS, BB_SEARCH_RESULTS - 'u_ses' => 'db1', // BB_USER_SES, BB_USER_LASTVISIT -# db2 - 'dls' => 'db1', // BB_BT_DLS_* - 'ip' => 'db1', // BB_POSTS_IP - 'ut' => 'db1', // BB_TOPICS_USER_POSTED -# db3 - 'pm' => 'db1', // BB_PRIVMSGS, BB_PRIVMSGS_TEXT - 'pt' => 'db1', // BB_POSTS_TEXT -); + // Datastore + // Available datastore types: memcache, sqlite, redis, apc, xcache (default filecache) + 'datastore_type' => $domain_name, -// Cache -$bb_cfg['cache']['pconnect'] = true; -$bb_cfg['cache']['db_dir'] = realpath(BB_ROOT) .'/internal_data/cache/filecache/'; -$bb_cfg['cache']['prefix'] = 'tp_'; // Префикс кеша ('tp_') -$bb_cfg['cache']['memcache'] = array( - 'host' => '127.0.0.1', - 'port' => 11211, - 'pconnect' => true, - 'con_required' => true, -); -$bb_cfg['cache']['redis'] = array( - 'host' => '127.0.0.1', - 'port' => 6379, - 'con_required' => true, -); + // Server + 'server_name' => $domain_name, // The domain name from which this board runs + 'server_port' => (!empty($_SERVER['SERVER_PORT'])) ? $_SERVER['SERVER_PORT'] : 80, // The port your server is running on + 'script_path' => '/', // The path where FORUM is located relative to the domain name -// Available cache types: memcache, sqlite, redis, apc, xcache (default of filecache) -# name => array( (string) type, (array) cfg ) -$bb_cfg['cache']['engines'] = array( - 'bb_cache' => array('filecache', array()), - 'bb_config' => array('filecache', array()), - 'tr_cache' => array('filecache', array()), - 'session_cache' => array('filecache', array()), - 'bb_login_err' => array('filecache', array()), - 'bb_poll_data' => array('filecache', array()), -); -// Datastore -// Available datastore types: memcache, sqlite, redis, apc, xcache (default filecache) -$bb_cfg['datastore_type'] = 'filecache'; + // GZip + 'gzip_compress' => true, // compress output -// Server -$bb_cfg['server_name'] = $domain_name; // The domain name from which this board runs -$bb_cfg['server_port'] = (!empty($_SERVER['SERVER_PORT'])) ? $_SERVER['SERVER_PORT'] : 80; // The port your server is running on -$bb_cfg['script_path'] = '/'; // The path where FORUM is located relative to the domain name + // Tracker + 'announce_interval' => 2400, // Announce interval (default: 1800) + 'passkey_key' => 'uk', // Passkey key name in GET request + 'ignore_reported_ip' => false, // Ignore IP reported by client + 'verify_reported_ip' => true, // Verify IP reported by client against $_SERVER['HTTP_X_FORWARDED_FOR'] + 'allow_internal_ip' => false, // Allow internal IP (10.xx.. etc.) -// Cloudflare -if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) -{ - $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; -} + // Ocelot + 'ocelot' => [ + 'enabled' => false, + 'host' => $domain_name, + 'port' => 2710, + 'url' => "http://$domain_name:2710/", // with '/' + 'secret' => 'some_10_chars', // 10 chars + 'stats' => 'some_10_chars', // 10 chars + ], -// GZip -$bb_cfg['gzip_compress'] = true; // compress output + // FAQ url help link + 'how_to_download_url_help' => 'viewtopic.php?t=1', // Как скачивать? + 'what_is_torrent_url_help' => 'viewtopic.php?t=2', // Что такое торрент? + 'ratio_url_help' => 'viewtopic.php?t=3', // Рейтинг и ограничения + 'search_help_url' => 'viewtopic.php?t=4', // Помощь по поиску -// Tracker -$bb_cfg['announce_interval'] = 2400; // Announce interval (default: 1800) -$bb_cfg['passkey_key'] = 'uk'; // Passkey key name in GET request -$bb_cfg['ignore_reported_ip'] = false; // Ignore IP reported by client -$bb_cfg['verify_reported_ip'] = true; // Verify IP reported by client against $_SERVER['HTTP_X_FORWARDED_FOR'] -$bb_cfg['allow_internal_ip'] = false; // Allow internal IP (10.xx.. etc.) + // Torrents + 'bt_min_ratio_allow_dl_tor' => 0.3, // 0 - disable + 'bt_min_ratio_warning' => 0.6, // 0 - disable -// Ocelot -$bb_cfg['ocelot'] = array( - 'enabled' => false, - 'host' => $domain_name, - 'port' => 2710, - 'url' => "http://$domain_name:2710/", // with '/' - 'secret' => 'some_10_chars', // 10 chars - 'stats' => 'some_10_chars', // 10 chars -); + 'show_dl_status_in_search' => true, + 'show_dl_status_in_forum' => true, + 'allow_dl_list_names_mode' => true, -// FAQ url help link -$bb_cfg['how_to_download_url_help'] = 'viewtopic.php?t=1'; // Как скачивать? -$bb_cfg['what_is_torrent_url_help'] = 'viewtopic.php?t=2'; // Что такое торрент? -$bb_cfg['ratio_url_help'] = 'viewtopic.php?t=3'; // Рейтинг и ограничения -$bb_cfg['search_help_url'] = 'viewtopic.php?t=4'; // Помощь по поиску + // Сколько дней сохранять торрент зарегистрированным / Days to keep torrent registered, if: + 'seeder_last_seen_days_keep' => 0, // сколько дней назад был сид последний раз + 'seeder_never_seen_days_keep' => 0, // сколько дней имеется статус "Сида не было никогда" -// Torrents -$bb_cfg['bt_min_ratio_allow_dl_tor'] = 0.3; // 0 - disable -$bb_cfg['bt_min_ratio_warning'] = 0.6; // 0 - disable + // DL-Status (days to keep user's dlstatus records) + 'dl_will_days_keep' => 360, + 'dl_down_days_keep' => 180, + 'dl_complete_days_keep' => 180, + 'dl_cancel_days_keep' => 30, -$tr_cfg = array( - 'autoclean' => true, - 'off' => false, - 'off_reason' => 'temporarily disabled', - 'numwant' => 50, - 'update_dlstat' => true, - 'expire_factor' => 2.5, - 'compact_mode' => true, - 'upd_user_up_down_stat' => true, - 'browser_redirect_url' => '', - 'scrape' => true, - 'limit_active_tor' => true, - 'limit_seed_count' => 0, - 'limit_leech_count' => 8, - 'leech_expire_factor' => 60, - 'limit_concurrent_ips' => false, - 'limit_seed_ips' => 0, - 'limit_leech_ips' => 0, - 'gold_silver_enabled' => true, - 'retracker' => true, - 'retracker_host' => 'http://retracker.local/announce', - 'freeleech' => false, -); + // Tor-Stats + 'torstat_days_keep' => 60, // days to keep user's per-torrent stats -$bb_cfg['show_dl_status_in_search'] = true; -$bb_cfg['show_dl_status_in_forum'] = true; -$bb_cfg['allow_dl_list_names_mode'] = true; + // Tor-Help + 'torhelp_enabled' => false, // find dead torrents (without seeder) that user might help seeding -// Сколько дней сохранять торрент зарегистрированным / Days to keep torrent registered, if: -$bb_cfg['seeder_last_seen_days_keep'] = 0; // сколько дней назад был сид последний раз -$bb_cfg['seeder_never_seen_days_keep'] = 0; // сколько дней имеется статус "Сида не было никогда" + // URL's + 'ajax_url' => 'ajax.php', # "http://{$_SERVER['SERVER_NAME']}/ajax.php" + 'dl_url' => 'dl.php?t=', # "http://{$domain_name}/dl.php" + 'login_url' => 'login.php', # "http://{$domain_name}/login.php" + 'posting_url' => 'posting.php', # "http://{$domain_name}/posting.php" + 'pm_url' => 'privmsg.php', # "http://{$domain_name}/privmsg.php" -// Ratio limits -define('TR_RATING_LIMITS', true); // ON/OFF -define('MIN_DL_FOR_RATIO', 10737418240); // 10 GB in bytes, 0 - disable + // Language + 'charset' => 'utf8', // page charset + 'auto_language' => true, // select user-preferred language automatically + 'lang' => [ + 'ru' => [ + 'name' => 'Русский', + 'locale' => 'ru_RU.UTF-8', + 'encoding' => 'UTF-8', + 'captcha' => 'ru', + ], + 'uk' => [ + 'name' => 'Український', + 'locale' => 'uk_UA.UTF-8', + 'encoding' => 'UTF-8', + 'captcha' => 'uk', + ], + 'en' => [ + 'name' => 'English', + 'locale' => 'en_US.UTF-8', + 'encoding' => 'UTF-8', + 'captcha' => 'en', + ], + ], -// Don't change the order of ratios (from 0 to 1) -// rating < 0.4 -- allow only 1 torrent for leeching -// rating < 0.5 -- only 2 -// rating < 0.6 -- only 3 -// rating > 0.6 -- depend on your tracker config limits (in "ACP - Tracker Config - Limits") -$rating_limits = array( - '0.4' => 1, - '0.5' => 2, - '0.6' => 3, -); + // Templates + 'templates' => [ + #'folder' => 'Name', + 'default' => 'Стандартный', + ], + 'tpl_name' => 'default', + 'stylesheet' => 'main.css', + 'show_sidebar1_on_every_page' => false, + 'show_sidebar2_on_every_page' => false, -// DL-Status (days to keep user's dlstatus records) -$bb_cfg['dl_will_days_keep'] = 360; -$bb_cfg['dl_down_days_keep'] = 180; -$bb_cfg['dl_complete_days_keep'] = 180; -$bb_cfg['dl_cancel_days_keep'] = 30; + // Cookie + 'cookie_domain' => in_array($domain_name, array(getenv('SERVER_ADDR'), 'localhost')) ? '' : ".$domain_name", + 'cookie_secure' => (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') ? 1 : 0, + 'cookie_prefix' => 'bb_', // 'bb_' -// Tor-Stats -$bb_cfg['torstat_days_keep'] = 60; // days to keep user's per-torrent stats + // Sessions + 'session_update_intrv' => 180, // sec + 'user_session_duration' => 1800, // sec + 'admin_session_duration' => 6*3600, // sec + 'user_session_gc_ttl' => 1800, // number of seconds that a staled session entry may remain in sessions table + 'session_cache_gc_ttl' => 1200, // sec + 'max_last_visit_days' => 14, // days + 'last_visit_update_intrv' => 3600, // sec -// Tor-Help -$bb_cfg['torhelp_enabled'] = false; // find dead torrents (without seeder) that user might help seeding + // Registration + 'invalid_logins' => 5, // Количество неверных попыток ввода пароля, перед выводом проверки капчей + 'new_user_reg_disabled' => false, // Запретить регистрацию новых учетных записей + 'unique_ip' => false, // Запретить регистрацию нескольких учетных записей с одного ip + 'new_user_reg_restricted' => false, // Ограничить регистрацию новых пользователей по времени с 01:00 до 17:00 + 'reg_email_activation' => true, // Требовать активацию учетной записи по email -$page_cfg['show_torhelp'] = array( -# BB_SCRIPT => true - 'index' => true, - 'tracker' => true, -); + // Email + 'emailer_disabled' => false, + 'smtp_delivery' => false, // send email via a named server instead of the local mail function + 'smtp_ssl' => false, // use ssl connect + 'smtp_host' => '', // SMTP server host + 'smtp_port' => 25, // SMTP server port + 'smtp_username' => '', // enter a username if your SMTP server requires it + 'smtp_password' => '', // enter a password if your SMTP server requires it + 'smtp' => [ + 'name' => 'yandex.ru', + 'host' => 'smtp.yandex.ru', + 'port' => 465, + 'connection_class' => 'login', + 'connection_config' => [ + 'username' => '', + 'password' => '', + 'ssl' => 'ssl', + ], + ], -// Path (trailing slash '/' at the end: XX_PATH - without, XX_DIR - with) -define('BB_PATH', realpath(BB_ROOT) ); -define('ADMIN_DIR', BB_PATH .'/admin/' ); -define('DATA_DIR', BB_PATH .'/data/' ); -define('INT_DATA_DIR', BB_PATH .'/internal_data/' ); -define('AJAX_HTML_DIR', BB_ROOT .'/internal_data/ajax_html/' ); -define('CACHE_DIR', BB_PATH .'/internal_data/cache/' ); -define('LOG_DIR', BB_PATH .'/internal_data/log/' ); -define('SITEMAP_DIR', BB_PATH .'/internal_data/sitemap/' ); -define('TRIGGERS_DIR', BB_PATH .'/internal_data/triggers/' ); -define('AJAX_DIR', BB_ROOT .'/library/ajax/' ); -define('CFG_DIR', BB_PATH .'/library/config/' ); -define('INC_DIR', BB_PATH .'/library/includes/' ); -define('CLASS_DIR', BB_PATH .'/library/includes/classes/'); -define('CORE_DIR', BB_PATH .'/library/includes/core/' ); -define('UCP_DIR', BB_PATH .'/library/includes/ucp/' ); -define('LANG_ROOT_DIR', BB_PATH .'/library/language/' ); -define('IMAGES_DIR', BB_PATH .'/styles/images/' ); -define('TEMPLATES_DIR', BB_PATH .'/styles/templates/' ); + 'board_email' => "noreply@$domain_name", // admin email address + 'board_email_form' => false, // can users send email to each other via board + 'board_email_sig' => '', // this text will be attached to all emails the board sends + 'board_email_sitename' => $domain_name, // sitename used in all emails header + 'topic_notify_enabled' => true, + 'pm_notify_enabled' => true, + 'group_send_email' => true, + 'email_change_disabled' => false, // disable changing email by user + 'tech_admin_email' => "admin@$domain_name", // email for sending error reports + 'abuse_email' => "abuse@$domain_name", + 'adv_email' => "adv@$domain_name", -// URL's -$bb_cfg['ajax_url'] = 'ajax.php'; # "http://{$_SERVER['SERVER_NAME']}/ajax.php" -$bb_cfg['dl_url'] = 'dl.php?t='; # "http://{$domain_name}/dl.php" -$bb_cfg['login_url'] = 'login.php'; # "http://{$domain_name}/login.php" -$bb_cfg['posting_url'] = 'posting.php'; # "http://{$domain_name}/posting.php" -$bb_cfg['pm_url'] = 'privmsg.php'; # "http://{$domain_name}/privmsg.php" + // Special users + 'dbg_users' => [ + #user_id => 'name', + 2 => 'admin', + ], + 'unlimited_users' => [ + #user_id => 'name', + 2 => 'admin', + ], + 'super_admins' => [ + #user_id => 'name', + 2 => 'admin', + ], -// Language -$bb_cfg['charset'] = 'utf8'; // page charset -$bb_cfg['auto_language'] = true; // select user-preferred language automatically -if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && $bb_cfg['auto_language']) + // Date format + 'date_format' => 'Y-m-d', + + // Subforums + 'sf_on_first_page_only' => true, + + // Forums + 'allowed_topics_per_page' => [50, 100, 150, 200, 250, 300], + + // Topics + 'show_quick_reply' => true, + 'show_rank_text' => false, + 'show_rank_image' => true, + 'show_poster_joined' => true, + 'show_poster_posts' => true, + 'show_poster_from' => true, + 'show_bot_nick' => false, + 'text_buttons' => false, // replace EDIT, QUOTE... images with text links + 'parse_ed2k_links' => true, // make ed2k links clickable + 'post_date_format' => 'd-M-Y H:i', + 'ext_link_new_win' => true, // open external links in new window + + 'topic_moved_days_keep' => 7, // remove topic moved links after xx days (or FALSE to disable) + + 'allowed_posts_per_page' => [15, 30, 50, 100], + 'user_signature_start' => '

_________________
', + 'user_signature_end' => '
', // Это позволит использовать html теги, которые требуют закрытия. Например или + + // Posts + 'use_posts_cache' => true, // if you switch from ON to OFF, you need to TRUNCATE `bb_posts_html` table + 'posts_cache_days_keep' => 14, + 'max_post_length' => 120000, // bytes + 'use_ajax_posts' => true, + + // Search + 'sphinx_enabled' => false, // if false mysql by default + 'sphinx_topic_titles_host' => '127.0.0.1', + 'sphinx_topic_titles_port' => 3312, + 'sphinx_config_path' => realpath("../install/sphinx/sphinx.conf"), + 'disable_ft_search_in_posts' => false, // disable searching in post bodies + 'disable_search_for_guest' => true, + 'allow_search_in_bool_mode' => true, + 'max_search_words_per_post' => 200, + 'search_min_word_len' => 3, + 'search_max_word_len' => 35, + 'limit_max_search_results' => false, + 'spam_filter_file_path' => '', // BB_PATH .'/misc/spam_filter_words.txt'; + 'autocorrect_wkl' => true, // autocorrect wrong keyboard layout + + // Posting + 'prevent_multiposting' => true, // replace "reply" with "edit last msg" if user (not admin or mod) is last topic poster + 'max_smilies' => 10, // Максимальное число смайлов в посте (0 - без ограничения) + + // PM + 'privmsg_disable' => false, // отключить систему личных сообщений на форуме + 'max_outgoing_pm_cnt' => 10, // ограничение на кол. одновременных исходящих лс (для замедления рассылки спама) + 'max_inbox_privmsgs' => 200, // максимальное число сообщений в папке входящие + 'max_savebox_privmsgs' => 25, // максимальное число сообщений в папке сохраненные + 'max_sentbox_privmsgs' => 50, // максимальное число сообщений в папке отправленные + 'pm_days_keep' => 180, // время хранения ЛС + + // Actions log + 'log_days_keep' => 90, + + // Users + 'color_nick' => true, // Окраска ников пользователей по user_rank + 'user_not_activated_days_keep' => 7, // "not activated" == "not finished registration" + 'user_not_active_days_keep' => 180, // inactive users but only with no posts + + // Groups + 'group_members_per_page' => 50, + + // Tidy + 'tidy_post' => (!in_array('tidy', get_loaded_extensions())) ? false : true, + + + 'mem_on_start' => (MEM_USAGE) ? memory_get_usage() : 0, + + 'translate_dates' => true, // in displaying time + 'use_word_censor' => true, + + 'last_visit_date_format' => 'd-M H:i', + 'last_post_date_format' => 'd-M-y H:i', + 'poll_max_days' => 180, // сколько дней с момента создания темы опрос будет активным + + 'allow_change' => [ + 'language' => true, + 'dateformat' => true, + ], + + + 'trash_forum_id' => 0, // (int) 7 + + 'first_logon_redirect_url' => 'index.php', + 'terms_and_conditions_url' => 'terms.php', + 'tor_help_links' => 'terms.php', + + 'user_agreement_url' => 'info.php?show=user_agreement', + 'copyright_holders_url' => 'info.php?show=copyright_holders', + 'advert_url' => 'info.php?show=advert', + + // Extensions + 'file_id_ext' => [ + 1 => 'gif', + 2 => 'gz', + 3 => 'jpg', + 4 => 'png', + 5 => 'rar', + 6 => 'tar', + 7 => 'tiff', + 8 => 'torrent', + 9 => 'zip', + ], + + // Attachments + 'attach' => [ + 'upload_path' => DATA_DIR . 'torrent_files', // путь к директории с torrent файлами + 'max_size' => 5*1024*1024, // максимальный размер файла в байтах + ], + + 'tor_forums_allowed_ext' => ['torrent', 'zip', 'rar'], // для разделов с раздачами + 'gen_forums_allowed_ext' => ['torrent', 'zip', 'rar'], // для обычных разделов + + // Avatars + 'avatars' => [ + 'allowed_ext' => ['gif','jpg','jpeg','png'], // разрешенные форматы файлов + 'bot_avatar' => 'gallery/bot.gif', // аватара бота + 'max_size' => 100*1024, // размер аватары в байтах + 'max_height' => 100, // высота аватара в px + 'max_width' => 100, // ширина аватара в px + 'no_avatar' => 'gallery/noavatar.png', // дефолтная аватара + 'upload_path' => BB_ROOT . 'data/avatars/', // путь к директории с аватарами + 'up_allowed' => true, // разрешить загрузку аватар + ], + + // Group avatars + 'group_avatars' => [ + 'allowed_ext' => ['gif','jpg','jpeg','png'], // разрешенные форматы файлов + 'max_size' => 300*1024, // размер аватары в байтах + 'max_height' => 300, // высота аватара в px + 'max_width' => 300, // ширина аватара в px + 'no_avatar' => 'gallery/noavatar.png', // дефолтная аватара + 'upload_path' => BB_ROOT . 'data/avatars/', // путь к директории с аватарами + 'up_allowed' => true, // разрешить загрузку аватар + ], + + // Captcha + // Get a Google reCAPTCHA API Key: https://www.google.com/recaptcha/admin + 'captcha' => [ + 'disabled' => false, + 'public_key' => '', // your public key + 'secret_key' => '', // your secret key + 'theme' => 'light', // light or dark + ], + + // Atom feed + 'atom' => [ + 'path' => INT_DATA_DIR .'atom', // without ending slash + 'url' => './internal_data/atom', // without ending slash + ], + + // Nofollow + 'nofollow' => [ + 'disabled' => false, + 'allowed_url' => [$domain_name], // 'allowed.site', 'www.allowed.site' + ], + + // Page settings + 'page' => [ + 'show_torhelp' => [ + #BB_SCRIPT => true + 'index' => true, + 'tracker' => true, + ], + 'show_sidebar1' => [ + #BB_SCRIPT => true + 'index' => true, + ], + 'show_sidebar2' => [ + #BB_SCRIPT => true + 'index' => true, + ] + ], + + // Tracker settings + 'tracker' => [ + 'autoclean' => true, + 'off' => false, + 'off_reason' => 'temporarily disabled', + 'numwant' => 50, + 'update_dlstat' => true, + 'expire_factor' => 2.5, + 'compact_mode' => true, + 'upd_user_up_down_stat' => true, + 'browser_redirect_url' => '', + 'scrape' => true, + 'limit_active_tor' => true, + 'limit_seed_count' => 0, + 'limit_leech_count' => 8, + 'leech_expire_factor' => 60, + 'limit_concurrent_ips' => false, + 'limit_seed_ips' => 0, + 'limit_leech_ips' => 0, + 'gold_silver_enabled' => true, + 'retracker' => true, + 'retracker_host' => 'http://retracker.local/announce', + 'freeleech' => false, + ], + + // Don't change the order of ratios (from 0 to 1) + // rating < 0.4 -- allow only 1 torrent for leeching + // rating < 0.5 -- only 2 + // rating < 0.6 -- only 3 + // rating > 0.6 -- depend on your tracker config limits (in "ACP - Tracker Config - Limits") + 'rating' => [ + '0.4' => 1, + '0.5' => 2, + '0.6' => 3, + ] +]; + +if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && $config['auto_language']) { $user_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); if (file_exists(LANG_ROOT_DIR . $user_lang .'/')) { - $bb_cfg['default_lang_dir'] = LANG_ROOT_DIR . $user_lang .'/'; - $bb_cfg['default_lang'] = $user_lang; + $config['default_lang_dir'] = LANG_ROOT_DIR . $user_lang .'/'; + $config['default_lang'] = $user_lang; } else { - $bb_cfg['default_lang_dir'] = LANG_ROOT_DIR .'en/'; - $bb_cfg['default_lang'] = 'en'; + $config['default_lang_dir'] = LANG_ROOT_DIR .'en/'; + $config['default_lang'] = 'en'; } } else { - if (isset($bb_cfg['default_lang']) && file_exists(LANG_ROOT_DIR . $bb_cfg['default_lang'] .'/')) + if (isset($config['default_lang']) && file_exists(LANG_ROOT_DIR . $config['default_lang'] .'/')) { - $bb_cfg['default_lang_dir'] = LANG_ROOT_DIR . $bb_cfg['default_lang'] .'/'; + $config['default_lang_dir'] = LANG_ROOT_DIR . $config['default_lang'] .'/'; } else { - $bb_cfg['default_lang_dir'] = LANG_ROOT_DIR .'en/'; + $config['default_lang_dir'] = LANG_ROOT_DIR .'en/'; } } -$bb_cfg['lang'] = array( - 'ru' => array( - 'name' => 'Русский', - 'locale' => 'ru_RU.UTF-8', - 'encoding' => 'UTF-8', - 'captcha' => 'ru', - ), - 'uk' => array( - 'name' => 'Український', - 'locale' => 'uk_UA.UTF-8', - 'encoding' => 'UTF-8', - 'captcha' => 'uk', - ), - 'en' => array( - 'name' => 'English', - 'locale' => 'en_US.UTF-8', - 'encoding' => 'UTF-8', - 'captcha' => 'en', - ), -); - -// Templates -define('ADMIN_TPL_DIR', TEMPLATES_DIR .'/admin/'); - -$bb_cfg['templates'] = array( -// 'folder' => 'Name', - 'default' => 'Стандартный', -); - -$bb_cfg['tpl_name'] = 'default'; -$bb_cfg['stylesheet'] = 'main.css'; - -$bb_cfg['show_sidebar1_on_every_page'] = false; -$bb_cfg['show_sidebar2_on_every_page'] = false; - -$page_cfg['show_sidebar1'] = array( -# BB_SCRIPT => true - 'index' => true, -); -$page_cfg['show_sidebar2'] = array( -# BB_SCRIPT => true - 'index' => true, -); - -// Cookie -$bb_cfg['cookie_domain'] = in_array($domain_name, array(getenv('SERVER_ADDR'), 'localhost')) ? '' : ".$domain_name"; -$bb_cfg['cookie_secure'] = (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') ? 1 : 0; -$bb_cfg['cookie_prefix'] = 'bb_'; // 'bb_' - -// Sessions -$bb_cfg['session_update_intrv'] = 180; // sec -$bb_cfg['user_session_duration'] = 1800; // sec -$bb_cfg['admin_session_duration'] = 6*3600; // sec -$bb_cfg['user_session_gc_ttl'] = 1800; // number of seconds that a staled session entry may remain in sessions table -$bb_cfg['session_cache_gc_ttl'] = 1200; // sec -$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; // Запретить регистрацию новых учетных записей -$bb_cfg['unique_ip'] = false; // Запретить регистрацию нескольких учетных записей с одного ip -$bb_cfg['new_user_reg_restricted'] = false; // Ограничить регистрацию новых пользователей по времени с 01:00 до 17:00 -$bb_cfg['reg_email_activation'] = true; // Требовать активацию учетной записи по email - -// Email -$bb_cfg['emailer_disabled'] = false; - -$bb_cfg['smtp_delivery'] = false; // send email via a named server instead of the local mail function -$bb_cfg['smtp_ssl'] = false; // use ssl connect -$bb_cfg['smtp_host'] = ''; // SMTP server host -$bb_cfg['smtp_port'] = 25; // SMTP server port -$bb_cfg['smtp_username'] = ''; // enter a username if your SMTP server requires it -$bb_cfg['smtp_password'] = ''; // enter a password if your SMTP server requires it - -$bb_cfg['smtp'] = array( - 'name' => 'yandex.ru', - 'host' => 'smtp.yandex.ru', - 'port' => 465, - 'connection_class' => 'login', - 'connection_config' => array( - 'username' => '', - 'password' => '', - 'ssl' => 'ssl', - ), -); - -$bb_cfg['board_email'] = "noreply@$domain_name"; // admin email address -$bb_cfg['board_email_form'] = false; // can users send email to each other via board -$bb_cfg['board_email_sig'] = ''; // this text will be attached to all emails the board sends -$bb_cfg['board_email_sitename'] = $domain_name; // sitename used in all emails header - -$bb_cfg['topic_notify_enabled'] = true; -$bb_cfg['pm_notify_enabled'] = true; -$bb_cfg['group_send_email'] = true; -$bb_cfg['email_change_disabled'] = false; // disable changing email by user - -$bb_cfg['tech_admin_email'] = "admin@$domain_name"; // email for sending error reports -$bb_cfg['abuse_email'] = "abuse@$domain_name"; -$bb_cfg['adv_email'] = "adv@$domain_name"; - -// Debug -define('DBG_LOG', false); // enable forum debug (off on production) -define('DBG_TRACKER', false); // enable tracker debug (off on production) -define('COOKIE_DBG', 'bb_dbg'); // debug cookie name -define('SQL_DEBUG', true); // enable forum sql & cache debug -define('SQL_LOG_ERRORS', true); // all SQL_xxx options enabled only if SQL_DEBUG == TRUE -define('SQL_CALC_QUERY_TIME', true); // for stats -define('SQL_LOG_SLOW_QUERIES', true); // log sql slow queries -define('SQL_SLOW_QUERY_TIME', 10); // slow query in seconds -define('SQL_PREPEND_SRC_COMM', false); // prepend source file comment to sql query - -// Special users -$bb_cfg['dbg_users'] = array( -# user_id => 'name', - 2 => 'admin', -); - -$bb_cfg['unlimited_users'] = array( -# user_id => 'name', - 2 => 'admin', -); - -$bb_cfg['super_admins'] = array( -# user_id => 'name', - 2 => 'admin', -); - -// Log options -define('LOG_EXT', 'log'); -define('LOG_SEPR', ' | '); -define('LOG_LF', "\n"); -define('LOG_MAX_SIZE', 1048576); // bytes - -// Error reporting -ini_set('error_reporting', E_ALL); -ini_set('display_errors', 0); -ini_set('log_errors', 1); -ini_set('error_log', LOG_DIR .'php_err.log'); - -// Triggers -define('BB_ENABLED', TRIGGERS_DIR .'$on'); -define('BB_DISABLED', TRIGGERS_DIR .'$off'); -define('CRON_ALLOWED', TRIGGERS_DIR .'cron_allowed'); -define('CRON_RUNNING', TRIGGERS_DIR .'cron_running'); - -// Date format -$bb_cfg['date_format'] = 'Y-m-d'; - -// Subforums -$bb_cfg['sf_on_first_page_only'] = true; - -// Forums -$bb_cfg['allowed_topics_per_page'] = array(50, 100, 150, 200, 250, 300); - -// Topics -$bb_cfg['show_quick_reply'] = true; -$bb_cfg['show_rank_text'] = false; -$bb_cfg['show_rank_image'] = true; -$bb_cfg['show_poster_joined'] = true; -$bb_cfg['show_poster_posts'] = true; -$bb_cfg['show_poster_from'] = true; -$bb_cfg['show_bot_nick'] = false; -$bb_cfg['text_buttons'] = false; // replace EDIT, QUOTE... images with text links -$bb_cfg['parse_ed2k_links'] = true; // make ed2k links clickable -$bb_cfg['post_date_format'] = 'd-M-Y H:i'; -$bb_cfg['ext_link_new_win'] = true; // open external links in new window - -$bb_cfg['topic_moved_days_keep'] = 7; // remove topic moved links after xx days (or FALSE to disable) - -$bb_cfg['allowed_posts_per_page'] = array(15, 30, 50, 100); -$bb_cfg['user_signature_start'] = '

_________________
'; -$bb_cfg['user_signature_end'] = '
'; // Это позволит использовать html теги, которые требуют закрытия. Например
или - -// Posts -$bb_cfg['use_posts_cache'] = true; // if you switch from ON to OFF, you need to TRUNCATE `bb_posts_html` table -$bb_cfg['posts_cache_days_keep'] = 14; -$bb_cfg['max_post_length'] = 120000; // bytes -$bb_cfg['use_ajax_posts'] = true; - -// Search -$bb_cfg['sphinx_enabled'] = false; // if false mysql by default -$bb_cfg['sphinx_topic_titles_host'] = '127.0.0.1'; -$bb_cfg['sphinx_topic_titles_port'] = 3312; -$bb_cfg['sphinx_config_path'] = realpath("../install/sphinx/sphinx.conf"); -$bb_cfg['disable_ft_search_in_posts'] = false; // disable searching in post bodies -$bb_cfg['disable_search_for_guest'] = true; -$bb_cfg['allow_search_in_bool_mode'] = true; -$bb_cfg['max_search_words_per_post'] = 200; -$bb_cfg['search_min_word_len'] = 3; -$bb_cfg['search_max_word_len'] = 35; -$bb_cfg['limit_max_search_results'] = false; -$bb_cfg['spam_filter_file_path'] = ''; // BB_PATH .'/misc/spam_filter_words.txt'; -$bb_cfg['autocorrect_wkl'] = true; // autocorrect wrong keyboard layout - -// Posting -$bb_cfg['prevent_multiposting'] = true; // replace "reply" with "edit last msg" if user (not admin or mod) is last topic poster -$bb_cfg['max_smilies'] = 10; // Максимальное число смайлов в посте (0 - без ограничения) - -// PM -$bb_cfg['privmsg_disable'] = false; // отключить систему личных сообщений на форуме -$bb_cfg['max_outgoing_pm_cnt'] = 10; // ограничение на кол. одновременных исходящих лс (для замедления рассылки спама) -$bb_cfg['max_inbox_privmsgs'] = 200; // максимальное число сообщений в папке входящие -$bb_cfg['max_savebox_privmsgs'] = 25; // максимальное число сообщений в папке сохраненные -$bb_cfg['max_sentbox_privmsgs'] = 50; // максимальное число сообщений в папке отправленные -$bb_cfg['pm_days_keep'] = 180; // время хранения ЛС - -// Actions log -$bb_cfg['log_days_keep'] = 90; - -// Users -$bb_cfg['color_nick'] = true; // Окраска ников пользователей по user_rank -$bb_cfg['user_not_activated_days_keep'] = 7; // "not activated" == "not finished registration" -$bb_cfg['user_not_active_days_keep'] = 180; // inactive users but only with no posts - -// Groups -$bb_cfg['group_members_per_page'] = 50; - -// Tidy -$bb_cfg['tidy_post'] = (!in_array('tidy', get_loaded_extensions())) ? false : true; - -// Misc -define('MEM_USAGE', function_exists('memory_get_usage')); - -$bb_cfg['mem_on_start'] = (MEM_USAGE) ? memory_get_usage() : 0; - -$bb_cfg['translate_dates'] = true; // in displaying time -$bb_cfg['use_word_censor'] = true; - -$bb_cfg['last_visit_date_format'] = 'd-M H:i'; -$bb_cfg['last_post_date_format'] = 'd-M-y H:i'; -$bb_cfg['poll_max_days'] = 180; // сколько дней с момента создания темы опрос будет активным - -$bb_cfg['allow_change'] = array( - 'language' => true, - 'dateformat' => true, -); - -define('GZIP_OUTPUT_ALLOWED', (extension_loaded('zlib') && !ini_get('zlib.output_compression'))); - -$bb_cfg['trash_forum_id'] = 0; // (int) 7 - -$bb_cfg['first_logon_redirect_url'] = 'index.php'; -$bb_cfg['terms_and_conditions_url'] = 'terms.php'; -$bb_cfg['tor_help_links'] = 'terms.php'; - -$bb_cfg['user_agreement_url'] = 'info.php?show=user_agreement'; -$bb_cfg['copyright_holders_url'] = 'info.php?show=copyright_holders'; -$bb_cfg['advert_url'] = 'info.php?show=advert'; - -// Extensions -$bb_cfg['file_id_ext'] = array( - 1 => 'gif', - 2 => 'gz', - 3 => 'jpg', - 4 => 'png', - 5 => 'rar', - 6 => 'tar', - 7 => 'tiff', - 8 => 'torrent', - 9 => 'zip', -); - -// Attachments -$bb_cfg['attach'] = array( - 'upload_path' => DATA_DIR . 'torrent_files', // путь к директории с torrent файлами - 'max_size' => 5*1024*1024, // максимальный размер файла в байтах -); - -$bb_cfg['tor_forums_allowed_ext'] = ['torrent', 'zip', 'rar']; // для разделов с раздачами -$bb_cfg['gen_forums_allowed_ext'] = ['torrent', 'zip', 'rar']; // для обычных разделов - -// Avatars -$bb_cfg['avatars'] = array( - 'allowed_ext' => array('gif','jpg','jpeg','png'), // разрешенные форматы файлов - 'bot_avatar' => 'gallery/bot.gif', // аватара бота - 'max_size' => 100*1024, // размер аватары в байтах - 'max_height' => 100, // высота аватара в px - 'max_width' => 100, // ширина аватара в px - 'no_avatar' => 'gallery/noavatar.png', // дефолтная аватара - 'upload_path' => BB_ROOT . 'data/avatars/', // путь к директории с аватарами - 'up_allowed' => true, // разрешить загрузку аватар -); - -// Group avatars -$bb_cfg['group_avatars'] = array( - 'allowed_ext' => array('gif','jpg','jpeg','png'), // разрешенные форматы файлов - 'max_size' => 300*1024, // размер аватары в байтах - 'max_height' => 300, // высота аватара в px - 'max_width' => 300, // ширина аватара в px - 'no_avatar' => 'gallery/noavatar.png', // дефолтная аватара - 'upload_path' => BB_ROOT . 'data/avatars/', // путь к директории с аватарами - 'up_allowed' => true, // разрешить загрузку аватар -); - -// Captcha -// Get a Google reCAPTCHA API Key: https://www.google.com/recaptcha/admin -$bb_cfg['captcha'] = array( - 'disabled' => false, - 'public_key' => '', // your public key - 'secret_key' => '', // your secret key - 'theme' => 'light', // light or dark -); - -// Atom feed -$bb_cfg['atom'] = array( - 'path' => INT_DATA_DIR .'atom', // without ending slash - 'url' => './internal_data/atom', // without ending slash -); - -// Nofollow -$bb_cfg['nofollow'] = array( - 'disabled' => false, - 'allowed_url' => array($domain_name), // 'allowed.site', 'www.allowed.site' -); - -// Local config -if (file_exists(BB_ROOT. '/library/config.local.php')) -{ - include_once(BB_ROOT. '/library/config.local.php'); -} - -define('BB_CFG_LOADED', true); \ No newline at end of file +return $config; diff --git a/library/defines.php b/library/defines.php new file mode 100644 index 000000000..a28108db0 --- /dev/null +++ b/library/defines.php @@ -0,0 +1,62 @@ +offsetExists($id)) { + return $this->offsetGet($id); + } + + throw new \Exception("Service '{$id}' is not registered in the container"); + } +} \ No newline at end of file diff --git a/src/ServiceProviders/ConfigServiceProvider.php b/src/ServiceProviders/ConfigServiceProvider.php new file mode 100644 index 000000000..1ecb1d6e3 --- /dev/null +++ b/src/ServiceProviders/ConfigServiceProvider.php @@ -0,0 +1,26 @@ +merge(Factory::fromFile($container['config.file.local.main'], true)); + } + + return $config; + }; + } +} \ No newline at end of file diff --git a/src/ServiceProviders/DbServiceProvider.php b/src/ServiceProviders/DbServiceProvider.php new file mode 100644 index 000000000..50814b5fd --- /dev/null +++ b/src/ServiceProviders/DbServiceProvider.php @@ -0,0 +1,22 @@ +