From e4107ac9520ca404d4ab49ef79ca74430e8fd772 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 22 Feb 2021 21:47:48 +0300 Subject: wip: initial for config object --- classes/api.php | 9 +++++---- classes/article.php | 6 +++--- classes/db.php | 12 ++++++------ classes/digest.php | 12 ++++++------ classes/diskcache.php | 6 +++--- classes/feeditem/common.php | 2 +- classes/feeds.php | 36 ++++++++++++++++++------------------ classes/handler/public.php | 18 +++++++++--------- classes/opml.php | 2 +- classes/pref/feeds.php | 18 +++++++++--------- classes/pref/prefs.php | 16 ++++++++-------- classes/rpc.php | 12 ++++++------ classes/rssutils.php | 40 ++++++++++++++++++++-------------------- classes/userhelper.php | 6 +++--- 14 files changed, 98 insertions(+), 97 deletions(-) (limited to 'classes') diff --git a/classes/api.php b/classes/api.php index 5677cb908..6f3ee77db 100755 --- a/classes/api.php +++ b/classes/api.php @@ -57,7 +57,7 @@ class API extends Handler { $password = clean($_REQUEST["password"]); $password_base64 = base64_decode(clean($_REQUEST["password"])); - if (SINGLE_USER_MODE) $login = "admin"; + if (Config::get(Config::SINGLE_USER_MODE)) $login = "admin"; if ($uid = UserHelper::find_user_by_login($login)) { if (get_pref("ENABLE_API_ACCESS", $uid)) { @@ -361,9 +361,10 @@ class API extends Handler { } function getConfig() { - $config = array( - "icons_dir" => ICONS_DIR, - "icons_url" => ICONS_URL); + $config = [ + "icons_dir" => Config::get(Config::ICONS_DIR), + "icons_url" => Config::get(Config::ICONS_URL) + ]; $config["daemon_is_running"] = file_is_locked("update_daemon.lock"); diff --git a/classes/article.php b/classes/article.php index acd83694c..a2a38118b 100755 --- a/classes/article.php +++ b/classes/article.php @@ -85,7 +85,7 @@ class Article extends Handler_Protected { content = ?, content_hash = ? WHERE id = ?"); $sth->execute([$content, $content_hash, $ref_id]); - if (DB_TYPE == "pgsql"){ + if (Config::get(Config::DB_TYPE) == "pgsql") { $sth = $pdo->prepare("UPDATE ttrss_entries SET tsvector_combined = to_tsvector( :ts_content) WHERE id = :id"); @@ -130,7 +130,7 @@ class Article extends Handler_Protected { if ($row = $sth->fetch()) { $ref_id = $row["id"]; - if (DB_TYPE == "pgsql"){ + if (Config::get(Config::DB_TYPE) == "pgsql"){ $sth = $pdo->prepare("UPDATE ttrss_entries SET tsvector_combined = to_tsvector( :ts_content) WHERE id = :id"); @@ -475,7 +475,7 @@ class Article extends Handler_Protected { // purge orphaned posts in main content table - if (DB_TYPE == "mysql") + if (Config::get(Config::DB_TYPE) == "mysql") $limit_qpart = "LIMIT 5000"; else $limit_qpart = ""; diff --git a/classes/db.php b/classes/db.php index 490cecd57..1ccaa3533 100755 --- a/classes/db.php +++ b/classes/db.php @@ -21,9 +21,9 @@ class Db $db_host = defined('DB_HOST') && DB_HOST ? ';host=' . DB_HOST : ''; try { - $pdo = new PDO(DB_TYPE . ':dbname=' . DB_NAME . $db_host . $db_port, - DB_USER, - DB_PASS); + $pdo = new PDO(Config::get(Config::DB_TYPE) . ':dbname=' . Config::get(Config::DB_NAME) . $db_host . $db_port, + Config::get(Config::DB_USER), + Config::get(Config::DB_PASS)); } catch (Exception $e) { print "
Exception while creating PDO object:" . $e->getMessage() . "
"; exit(101); @@ -31,14 +31,14 @@ class Db $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $pdo->query("set client_encoding = 'UTF-8'"); $pdo->query("set datestyle = 'ISO, european'"); $pdo->query("set TIME ZONE 0"); $pdo->query("set cpu_tuple_cost = 0.5"); - } else if (DB_TYPE == "mysql") { + } else if (Config::get(Config::DB_TYPE) == "mysql") { $pdo->query("SET time_zone = '+0:0'"); if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { @@ -68,7 +68,7 @@ class Db } public static function sql_random_function() { - if (DB_TYPE == "mysql") { + if (Config::get(Config::DB_TYPE) == "mysql") { return "RAND()"; } else { return "RANDOM()"; diff --git a/classes/digest.php b/classes/digest.php index e0c23d705..9ac3f6a17 100644 --- a/classes/digest.php +++ b/classes/digest.php @@ -8,9 +8,9 @@ class Digest Debug::log("Sending digests, batch of max $user_limit users, headline limit = $limit"); - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $interval_qpart = "last_digest_sent < NOW() - INTERVAL '1 days'"; - } else /* if (DB_TYPE == "mysql") */ { + } else /* if (Config::get(Config::DB_TYPE) == "mysql") */ { $interval_qpart = "last_digest_sent < DATE_SUB(NOW(), INTERVAL 1 DAY)"; } @@ -91,19 +91,19 @@ class Digest $tpl->setVariable('CUR_DATE', date('Y/m/d', $local_ts)); $tpl->setVariable('CUR_TIME', date('G:i', $local_ts)); - $tpl->setVariable('TTRSS_HOST', SELF_URL_PATH); + $tpl->setVariable('TTRSS_HOST', Config::get(Config.Config::get(Config::SELF_URL_PATH))); $tpl_t->setVariable('CUR_DATE', date('Y/m/d', $local_ts)); $tpl_t->setVariable('CUR_TIME', date('G:i', $local_ts)); - $tpl_t->setVariable('TTRSS_HOST', SELF_URL_PATH); + $tpl_t->setVariable('TTRSS_HOST', Config::get(Config.Config::get(Config::SELF_URL_PATH))); $affected_ids = array(); $days = (int) $days; - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $interval_qpart = "ttrss_entries.date_updated > NOW() - INTERVAL '$days days'"; - } else /* if (DB_TYPE == "mysql") */ { + } else /* if (Config::get(Config::DB_TYPE) == "mysql") */ { $interval_qpart = "ttrss_entries.date_updated > DATE_SUB(NOW(), INTERVAL $days DAY)"; } diff --git a/classes/diskcache.php b/classes/diskcache.php index 94f645f32..063a3847c 100644 --- a/classes/diskcache.php +++ b/classes/diskcache.php @@ -191,7 +191,7 @@ class DiskCache { ]; public function __construct($dir) { - $this->dir = CACHE_DIR . "/" . basename(clean($dir)); + $this->dir = Config::get(Config::CACHE_DIR) . "/" . basename(clean($dir)); } public function get_dir() { @@ -339,7 +339,7 @@ class DiskCache { } static function expire() { - $dirs = array_filter(glob(CACHE_DIR . "/*"), "is_dir"); + $dirs = array_filter(glob(Config::get(Config::CACHE_DIR) . "/*"), "is_dir"); foreach ($dirs as $cache_dir) { $num_deleted = 0; @@ -396,7 +396,7 @@ class DiskCache { $tmppluginhost = new PluginHost(); - $tmppluginhost->load(PLUGINS, PluginHost::KIND_SYSTEM); + $tmppluginhost->load(Config::get(Config::PLUGINS), PluginHost::KIND_SYSTEM); //$tmppluginhost->load_data(); if ($tmppluginhost->run_hooks_until(PluginHost::HOOK_SEND_LOCAL_FILE, true, $filename)) diff --git a/classes/feeditem/common.php b/classes/feeditem/common.php index f387e0779..8f2b9188b 100755 --- a/classes/feeditem/common.php +++ b/classes/feeditem/common.php @@ -179,7 +179,7 @@ abstract class FeedItem_Common extends FeedItem { $cat = preg_replace('/[,\'\"]/', "", $cat); - if (DB_TYPE == "mysql") { + if (Config::get(Config::DB_TYPE) == "mysql") { $cat = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $cat); } diff --git a/classes/feeds.php b/classes/feeds.php index b59504c03..274cb22d0 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -186,7 +186,7 @@ class Feeds extends Handler_Protected { $id = $line["id"]; // frontend doesn't expect pdo returning booleans as strings on mysql - if (DB_TYPE == "mysql") { + if (Config::get(Config::DB_TYPE) == "mysql") { foreach (["unread", "marked", "published"] as $k) { $line[$k] = $line[$k] === "1"; } @@ -576,7 +576,7 @@ class Feeds extends Handler_Protected { function search() { print json_encode([ - "show_language" => DB_TYPE == "pgsql", + "show_language" => Config::get(Config::DB_TYPE) == "pgsql", "show_syntax_help" => count(PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SEARCH)) == 0, "all_languages" => Pref_Feeds::get_ts_languages(), "default_language" => get_pref('DEFAULT_SEARCH_LANGUAGE') @@ -716,21 +716,21 @@ class Feeds extends Handler_Protected { switch ($mode) { case "1day": - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $date_qpart = "date_entered < NOW() - INTERVAL '1 day' "; } else { $date_qpart = "date_entered < DATE_SUB(NOW(), INTERVAL 1 DAY) "; } break; case "1week": - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $date_qpart = "date_entered < NOW() - INTERVAL '1 week' "; } else { $date_qpart = "date_entered < DATE_SUB(NOW(), INTERVAL 1 WEEK) "; } break; case "2week": - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $date_qpart = "date_entered < NOW() - INTERVAL '2 week' "; } else { $date_qpart = "date_entered < DATE_SUB(NOW(), INTERVAL 2 WEEK) "; @@ -807,7 +807,7 @@ class Feeds extends Handler_Protected { $intl = (int) get_pref("FRESH_ARTICLE_MAX_AGE"); - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $match_part = "date_entered > NOW() - INTERVAL '$intl hour' "; } else { $match_part = "date_entered > DATE_SUB(NOW(), @@ -900,7 +900,7 @@ class Feeds extends Handler_Protected { $intl = (int) get_pref("FRESH_ARTICLE_MAX_AGE", $owner_uid); - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $match_part .= " AND date_entered > NOW() - INTERVAL '$intl hour' "; } else { $match_part .= " AND date_entered > DATE_SUB(NOW(), INTERVAL $intl HOUR) "; @@ -1332,7 +1332,7 @@ class Feeds extends Handler_Protected { list($search_query_part, $search_words) = self::_search_to_sql($search, $search_language, $owner_uid); } - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $test_sth = $pdo->prepare("select $search_query_part FROM ttrss_entries, ttrss_user_entries WHERE id = ref_id limit 1"); @@ -1469,7 +1469,7 @@ class Feeds extends Handler_Protected { } else if ($feed == -6) { // recently read $query_strategy_part = "unread = false AND last_read IS NOT NULL"; - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $query_strategy_part .= " AND last_read > NOW() - INTERVAL '1 DAY' "; } else { $query_strategy_part .= " AND last_read > DATE_SUB(NOW(), INTERVAL 1 DAY) "; @@ -1486,7 +1486,7 @@ class Feeds extends Handler_Protected { $intl = (int) get_pref("FRESH_ARTICLE_MAX_AGE", $owner_uid); - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $query_strategy_part .= " AND date_entered > NOW() - INTERVAL '$intl hour' "; } else { $query_strategy_part .= " AND date_entered > DATE_SUB(NOW(), INTERVAL $intl HOUR) "; @@ -1605,7 +1605,7 @@ class Feeds extends Handler_Protected { if ($feed == -3) $first_id_query_strategy_part = "true"; - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $sanity_interval_qpart = "date_entered >= NOW() - INTERVAL '1 hour' AND"; $yyiw_qpart = "to_char(date_entered, 'IYYY-IW') AS yyiw"; @@ -1705,7 +1705,7 @@ class Feeds extends Handler_Protected { } else { // browsing by tag - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $distinct_columns = str_replace("desc", "", strtolower($order_by)); $distinct_qpart = "DISTINCT ON (id, $distinct_columns)"; } else { @@ -1948,10 +1948,10 @@ class Feeds extends Handler_Protected { if ($row = $sth->fetch()) { $owner_uid = $row["owner_uid"]; - if (FORCE_ARTICLE_PURGE != 0) { - Debug::log("purge_feed: FORCE_ARTICLE_PURGE is set, overriding interval to " . FORCE_ARTICLE_PURGE, Debug::$LOG_VERBOSE); + if (Config::get(Config::FORCE_ARTICLE_PURGE) != 0) { + Debug::log("purge_feed: FORCE_ARTICLE_PURGE is set, overriding interval to " . Config::get(Config::FORCE_ARTICLE_PURGE), Debug::$LOG_VERBOSE); $purge_unread = true; - $purge_interval = FORCE_ARTICLE_PURGE; + $purge_interval = Config::get(Config::FORCE_ARTICLE_PURGE); } else { $purge_unread = get_pref("PURGE_UNREAD_ARTICLES", $owner_uid, false); } @@ -1970,7 +1970,7 @@ class Feeds extends Handler_Protected { else $query_limit = ""; - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $sth = $pdo->prepare("DELETE FROM ttrss_user_entries USING ttrss_entries WHERE ttrss_entries.id = ref_id AND @@ -2153,7 +2153,7 @@ class Feeds extends Handler_Protected { array_push($query_keywords, "(".SUBSTRING_FOR_DATE."(updated,1,LENGTH('$k')) $not = '$k')"); } else { - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $k = mb_strtolower($k); array_push($search_query_leftover, $not ? "!$k" : $k); } else { @@ -2168,7 +2168,7 @@ class Feeds extends Handler_Protected { if (count($search_query_leftover) > 0) { - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { // if there's no joiners consider this a "simple" search and // concatenate everything with &, otherwise don't try to mess with tsquery syntax diff --git a/classes/handler/public.php b/classes/handler/public.php index 3910cf7c1..79dff37b5 100755 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -43,7 +43,7 @@ class Handler_Public extends Handler { $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid); $tmppluginhost = new PluginHost(); - $tmppluginhost->load(PLUGINS, PluginHost::KIND_ALL); + $tmppluginhost->load(Config::get(Config::PLUGINS), PluginHost::KIND_ALL); $tmppluginhost->load((string)$user_plugins, PluginHost::KIND_USER, $owner_uid); //$tmppluginhost->load_data(); @@ -309,7 +309,7 @@ class Handler_Public extends Handler { $format = clean($_REQUEST['format'] ?? "atom"); $orig_guid = clean($_REQUEST["orig_guid"] ?? false); - if (SINGLE_USER_MODE) { + if (Config::get(Config::SINGLE_USER_MODE)) { UserHelper::authenticate("admin", null); } @@ -347,7 +347,7 @@ class Handler_Public extends Handler { } function login() { - if (!SINGLE_USER_MODE) { + if (!Config::get(Config::SINGLE_USER_MODE)) { $login = clean($_POST["login"]); $password = clean($_POST["password"]); @@ -355,7 +355,7 @@ class Handler_Public extends Handler { $safe_mode = checkbox_to_sql_bool(clean($_POST["safe_mode"] ?? false)); if ($remember_me) { - @session_set_cookie_params(SESSION_COOKIE_LIFETIME); + @session_set_cookie_params(Config::get(Config::SESSION_COOKIE_LIFETIME)); } else { @session_set_cookie_params(0); } @@ -398,7 +398,7 @@ class Handler_Public extends Handler { $return = clean($_REQUEST['return']); - if ($_REQUEST['return'] && mb_strpos($return, SELF_URL_PATH) === 0) { + if ($_REQUEST['return'] && mb_strpos($return, Config::get(Config::SELF_URL_PATH)) === 0) { header("Location: " . clean($_REQUEST['return'])); } else { header("Location: " . get_self_url_prefix()); @@ -559,7 +559,7 @@ class Handler_Public extends Handler { $tpl->setVariable('LOGIN', $login); $tpl->setVariable('RESETPASS_LINK', $resetpass_link); - $tpl->setVariable('TTRSS_HOST', SELF_URL_PATH); + $tpl->setVariable('TTRSS_HOST', Config::get(Config::SELF_URL_PATH)); $tpl->addBlock('message'); @@ -613,7 +613,7 @@ class Handler_Public extends Handler { function dbupdate() { startup_gettext(); - if (!SINGLE_USER_MODE && $_SESSION["access_level"] < 10) { + if (!Config::get(Config::SINGLE_USER_MODE) && $_SESSION["access_level"] < 10) { $_SESSION["login_error_msg"] = __("Your access level is insufficient to run this script."); $this->_render_login_form(); exit; @@ -660,7 +660,7 @@ class Handler_Public extends Handler { is_update_required()) { @@ -709,7 +709,7 @@ class Handler_Public extends Handler { print "

".T_sprintf("Tiny Tiny RSS database needs update to the latest version (%d to %d).", $updater->get_schema_version(), SCHEMA_VERSION)."

"; - if (DB_TYPE == "mysql") { + if (Config::get(Config::DB_TYPE) == "mysql") { print_error("READ THIS: Due to MySQL limitations, your database is not completely protected while updating. ". "Errors may put it in an inconsistent state requiring manual rollback. BACKUP YOUR DATABASE BEFORE CONTINUING."); } else { diff --git a/classes/opml.php b/classes/opml.php index 04d287125..cbc1269e3 100644 --- a/classes/opml.php +++ b/classes/opml.php @@ -594,7 +594,7 @@ class OPML extends Handler_Protected { } if (is_uploaded_file($_FILES['opml_file']['tmp_name'])) { - $tmp_file = (string)tempnam(CACHE_DIR . '/upload', 'opml'); + $tmp_file = (string)tempnam(Config::get(Config::CACHE_DIR) . '/upload', 'opml'); $result = move_uploaded_file($_FILES['opml_file']['tmp_name'], $tmp_file); diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index e583a5f51..229effeb3 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -9,7 +9,7 @@ class Pref_Feeds extends Handler_Protected { public static function get_ts_languages() { $rv = []; - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $dbh = Db::pdo(); $res = $dbh->query("SELECT cfgname FROM pg_ts_config"); @@ -453,7 +453,7 @@ class Pref_Feeds extends Handler_Protected { header("Content-type: text/html"); if (is_uploaded_file($_FILES['icon_file']['tmp_name'])) { - $tmp_file = tempnam(CACHE_DIR . '/upload', 'icon'); + $tmp_file = tempnam(Config::get(Config::CACHE_DIR) . '/upload', 'icon'); if (!$tmp_file) return; @@ -529,7 +529,7 @@ class Pref_Feeds extends Handler_Protected { $local_update_intervals = $update_intervals; $local_update_intervals[0] .= sprintf(" (%s)", $update_intervals[get_pref("DEFAULT_UPDATE_INTERVAL")]); - if (FORCE_ARTICLE_PURGE == 0) { + if (Config::get(Config::FORCE_ARTICLE_PURGE) == 0) { $local_purge_intervals = $purge_intervals; $default_purge_interval = get_pref("PURGE_OLD_DAYS"); @@ -539,7 +539,7 @@ class Pref_Feeds extends Handler_Protected { $local_purge_intervals[0] .= " " . sprintf("(%s)", __("Disabled")); } else { - $purge_interval = FORCE_ARTICLE_PURGE; + $purge_interval = Config::get(Config::FORCE_ARTICLE_PURGE); $local_purge_intervals = [ T_nsprintf('%d day', '%d days', $purge_interval, $purge_interval) ]; } @@ -550,13 +550,13 @@ class Pref_Feeds extends Handler_Protected { "select" => \Controls\select_feeds_cats("cat_id", $row["cat_id"]), ], "plugin_data" => $plugin_data, - "force_purge" => (int)FORCE_ARTICLE_PURGE, + "force_purge" => (int)Config::get(Config::FORCE_ARTICLE_PURGE), "intervals" => [ "update" => $local_update_intervals, "purge" => $local_purge_intervals, ], "lang" => [ - "enabled" => DB_TYPE == "pgsql", + "enabled" => Config::get(Config::DB_TYPE) == "pgsql", "default" => get_pref('DEFAULT_SEARCH_LANGUAGE'), "all" => $this::get_ts_languages(), ] @@ -614,7 +614,7 @@ class Pref_Feeds extends Handler_Protected { - +
1]) ?> @@ -632,7 +632,7 @@ class Pref_Feeds extends Handler_Protected { _batch_toggle_checkbox("update_interval") ?>
- +
1]) ?> @@ -1147,7 +1147,7 @@ class Pref_Feeds extends Handler_Protected { function inactiveFeeds() { - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $interval_qpart = "NOW() - INTERVAL '3 months'"; } else { $interval_qpart = "DATE_SUB(NOW(), INTERVAL 3 MONTH)"; diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php index adb249dac..1ca5b28be 100644 --- a/classes/pref/prefs.php +++ b/classes/pref/prefs.php @@ -236,7 +236,7 @@ class Pref_Prefs extends Handler_Protected { $tpl->setVariable('LOGIN', $row["login"]); $tpl->setVariable('NEWMAIL', $email); - $tpl->setVariable('TTRSS_HOST', SELF_URL_PATH); + $tpl->setVariable('TTRSS_HOST', Config::get(Config::SELF_URL_PATH)); $tpl->addBlock('message'); @@ -625,7 +625,7 @@ class Pref_Prefs extends Handler_Protected { continue; } - if ($pref_name == "DEFAULT_SEARCH_LANGUAGE" && DB_TYPE != "pgsql") { + if ($pref_name == "DEFAULT_SEARCH_LANGUAGE" && Config::get(Config::DB_TYPE) != "pgsql") { continue; } @@ -705,7 +705,7 @@ class Pref_Prefs extends Handler_Protected { array_push($listed_boolean_prefs, $pref_name); - if ($pref_name == "PURGE_UNREAD_ARTICLES" && FORCE_ARTICLE_PURGE != 0) { + if ($pref_name == "PURGE_UNREAD_ARTICLES" && Config::get(Config::FORCE_ARTICLE_PURGE) != 0) { $is_disabled = true; $is_checked = true; } else { @@ -719,9 +719,9 @@ class Pref_Prefs extends Handler_Protected { } else if (in_array($pref_name, ['FRESH_ARTICLE_MAX_AGE', 'PURGE_OLD_DAYS', 'LONG_DATE_FORMAT', 'SHORT_DATE_FORMAT'])) { - if ($pref_name == "PURGE_OLD_DAYS" && FORCE_ARTICLE_PURGE != 0) { + if ($pref_name == "PURGE_OLD_DAYS" && Config::get(Config::FORCE_ARTICLE_PURGE) != 0) { $attributes = ["disabled" => true, "required" => true]; - $value = FORCE_ARTICLE_PURGE; + $value = Config::get(Config::FORCE_ARTICLE_PURGE); } else { $attributes = ["required" => true]; } @@ -829,7 +829,7 @@ class Pref_Prefs extends Handler_Protected { private function index_plugins_system() { print_notice("System plugins are enabled in config.php for all users."); - $system_enabled = array_map("trim", explode(",", (string)PLUGINS)); + $system_enabled = array_map("trim", explode(",", (string)Config::get(Config::PLUGINS))); $tmppluginhost = new PluginHost(); $tmppluginhost->load_all($tmppluginhost::KIND_ALL, $_SESSION["uid"], true); @@ -862,7 +862,7 @@ class Pref_Prefs extends Handler_Protected { } private function index_plugins_user() { - $system_enabled = array_map("trim", explode(",", (string)PLUGINS)); + $system_enabled = array_map("trim", explode(",", (string)Config::get(Config::PLUGINS))); $user_enabled = array_map("trim", explode(",", get_pref("_ENABLED_PLUGINS"))); $tmppluginhost = new PluginHost(); @@ -1135,7 +1135,7 @@ class Pref_Prefs extends Handler_Protected { $tpl->readTemplateFromFile("otp_disabled_template.txt"); $tpl->setVariable('LOGIN', $row["login"]); - $tpl->setVariable('TTRSS_HOST', SELF_URL_PATH); + $tpl->setVariable('TTRSS_HOST', Config::get(Config::SELF_URL_PATH)); $tpl->addBlock('message'); diff --git a/classes/rpc.php b/classes/rpc.php index 95fd0f5ae..bf24132b0 100755 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -174,7 +174,7 @@ class RPC extends Handler_Protected { static function updaterandomfeed_real() { // Test if the feed need a update (update interval exceded). - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $update_limit_qpart = "AND (( ttrss_feeds.update_interval = 0 AND ttrss_feeds.last_updated < NOW() - CAST((ttrss_user_prefs.value || ' minutes') AS INTERVAL) @@ -199,7 +199,7 @@ class RPC extends Handler_Protected { } // Test if feed is currently being updated by another process. - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < NOW() - INTERVAL '5 minutes')"; } else { $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < DATE_SUB(NOW(), INTERVAL 5 MINUTE))"; @@ -361,7 +361,7 @@ class RPC extends Handler_Protected { $params["safe_mode"] = !empty($_SESSION["safe_mode"]); $params["check_for_updates"] = CHECK_FOR_UPDATES; $params["icons_url"] = ICONS_URL; - $params["cookie_lifetime"] = SESSION_COOKIE_LIFETIME; + $params["cookie_lifetime"] = Config::get(Config::SESSION_COOKIE_LIFETIME); $params["default_view_mode"] = get_pref("_DEFAULT_VIEW_MODE"); $params["default_view_limit"] = (int) get_pref("_DEFAULT_VIEW_LIMIT"); $params["default_view_order_by"] = get_pref("_DEFAULT_VIEW_ORDER_BY"); @@ -433,7 +433,7 @@ class RPC extends Handler_Protected { $data["labels"] = Labels::get_all($_SESSION["uid"]); if (LOG_DESTINATION == 'sql' && $_SESSION['access_level'] >= 10) { - if (DB_TYPE == 'pgsql') { + if (Config::get(Config::DB_TYPE) == 'pgsql') { $log_interval = "created_at > NOW() - interval '1 hour'"; } else { $log_interval = "created_at > DATE_SUB(NOW(), INTERVAL 1 HOUR)"; @@ -452,13 +452,13 @@ class RPC extends Handler_Protected { } } - if (file_exists(LOCK_DIRECTORY . "/update_daemon.lock")) { + if (file_exists(Config::get(Config::LOCK_DIRECTORY) . "/update_daemon.lock")) { $data['daemon_is_running'] = (int) file_is_locked("update_daemon.lock"); if (time() - ($_SESSION["daemon_stamp_check"] ?? 0) > 30) { - $stamp = (int) @file_get_contents(LOCK_DIRECTORY . "/update_daemon.stamp"); + $stamp = (int) @file_get_contents(Config::get(Config::LOCK_DIRECTORY) . "/update_daemon.stamp"); if ($stamp) { $stamp_delta = time() - $stamp; diff --git a/classes/rssutils.php b/classes/rssutils.php index 30d08328f..c951003f0 100755 --- a/classes/rssutils.php +++ b/classes/rssutils.php @@ -61,8 +61,8 @@ class RSSUtils { $pdo = Db::pdo(); - if (!SINGLE_USER_MODE && DAEMON_UPDATE_LOGIN_LIMIT > 0) { - if (DB_TYPE == "pgsql") { + if (!Config::get(Config::SINGLE_USER_MODE) && DAEMON_UPDATE_LOGIN_LIMIT > 0) { + if (Config::get(Config::DB_TYPE) == "pgsql") { $login_thresh_qpart = "AND ttrss_users.last_login >= NOW() - INTERVAL '".DAEMON_UPDATE_LOGIN_LIMIT." days'"; } else { $login_thresh_qpart = "AND ttrss_users.last_login >= DATE_SUB(NOW(), INTERVAL ".DAEMON_UPDATE_LOGIN_LIMIT." DAY)"; @@ -71,7 +71,7 @@ class RSSUtils { $login_thresh_qpart = ""; } - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $update_limit_qpart = "AND (( ttrss_feeds.update_interval = 0 AND ttrss_user_prefs.value != '-1' @@ -96,7 +96,7 @@ class RSSUtils { } // Test if feed is currently being updated by another process. - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $updstart_thresh_qpart = "AND (last_update_started IS NULL OR last_update_started < NOW() - INTERVAL '10 minutes')"; } else { $updstart_thresh_qpart = "AND (last_update_started IS NULL OR last_update_started < DATE_SUB(NOW(), INTERVAL 10 MINUTE))"; @@ -106,7 +106,7 @@ class RSSUtils { // Update the least recently updated feeds first $query_order = "ORDER BY last_updated"; - if (DB_TYPE == "pgsql") $query_order .= " NULLS FIRST"; + if (Config::get(Config::DB_TYPE) == "pgsql") $query_order .= " NULLS FIRST"; $query = "SELECT DISTINCT ttrss_feeds.feed_url, ttrss_feeds.last_updated FROM @@ -182,7 +182,7 @@ class RSSUtils { if (self::function_enabled('passthru')) { $exit_code = 0; - passthru(PHP_EXECUTABLE . " update.php --update-feed " . $tline["id"] . " --pidlock feed-" . $tline["id"] . " $quiet $log $log_level", $exit_code); + passthru(Config::get(Config::PHP_EXECUTABLE) . " update.php --update-feed " . $tline["id"] . " --pidlock feed-" . $tline["id"] . " $quiet $log $log_level", $exit_code); Debug::log(sprintf("<= %.4f (sec) exit code: %d", microtime(true) - $fstarted, $exit_code)); @@ -275,7 +275,7 @@ class RSSUtils { $pluginhost = new PluginHost(); $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid); - $pluginhost->load(PLUGINS, PluginHost::KIND_ALL); + $pluginhost->load(Config::get(Config::PLUGINS), PluginHost::KIND_ALL); $pluginhost->load((string)$user_plugins, PluginHost::KIND_USER, $owner_uid); //$pluginhost->load_data(); @@ -395,12 +395,12 @@ class RSSUtils { $date_feed_processed = date('Y-m-d H:i'); - $cache_filename = CACHE_DIR . "/feeds/" . sha1($fetch_url) . ".xml"; + $cache_filename = Config::get(Config::CACHE_DIR) . "/feeds/" . sha1($fetch_url) . ".xml"; $pluginhost = new PluginHost(); $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid); - $pluginhost->load(PLUGINS, PluginHost::KIND_ALL); + $pluginhost->load(Config::get(Config::PLUGINS), PluginHost::KIND_ALL); $pluginhost->load((string)$user_plugins, PluginHost::KIND_USER, $owner_uid); //$pluginhost->load_data(); @@ -488,7 +488,7 @@ class RSSUtils { } // cache vanilla feed data for re-use - if ($feed_data && !$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/feeds")) { + if ($feed_data && !$auth_pass && !$auth_login && is_writable(Config::get(Config::CACHE_DIR) . "/feeds")) { $new_rss_hash = sha1($feed_data); if ($new_rss_hash != $rss_hash) { @@ -561,7 +561,7 @@ class RSSUtils { Debug::log("language: $feed_language", Debug::$LOG_VERBOSE); Debug::log("processing feed data...", Debug::$LOG_VERBOSE); - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $favicon_interval_qpart = "favicon_last_checked < NOW() - INTERVAL '12 hour'"; } else { $favicon_interval_qpart = "favicon_last_checked < DATE_SUB(NOW(), INTERVAL 12 HOUR)"; @@ -755,7 +755,7 @@ class RSSUtils { $e->type, $e->length, $e->title, $e->width, $e->height); // Yet another episode of "mysql utf8_general_ci is gimped" - if (DB_TYPE == "mysql" && MYSQL_CHARSET != "UTF8MB4") { + if (Config::get(Config::DB_TYPE) == "mysql" && MYSQL_CHARSET != "UTF8MB4") { for ($i = 0; $i < count($e_item); $i++) { if (is_string($e_item[$i])) { $e_item[$i] = self::strip_utf8mb4($e_item[$i]); @@ -833,7 +833,7 @@ class RSSUtils { Debug::log("plugin data: $entry_plugin_data", Debug::$LOG_VERBOSE); // Workaround: 4-byte unicode requires utf8mb4 in MySQL. See https://tt-rss.org/forum/viewtopic.php?f=1&t=3377&p=20077#p20077 - if (DB_TYPE == "mysql" && MYSQL_CHARSET != "UTF8MB4") { + if (Config::get(Config::DB_TYPE) == "mysql" && MYSQL_CHARSET != "UTF8MB4") { foreach ($article as $k => $v) { // i guess we'll have to take the risk of 4byte unicode labels & tags here if (is_string($article[$k])) { @@ -1079,7 +1079,7 @@ class RSSUtils { Debug::log("resulting RID: $entry_ref_id, IID: $entry_int_id", Debug::$LOG_VERBOSE); - if (DB_TYPE == "pgsql") + if (Config::get(Config::DB_TYPE) == "pgsql") $tsvector_qpart = "tsvector_combined = to_tsvector(:ts_lang, :ts_content),"; else $tsvector_qpart = ""; @@ -1107,7 +1107,7 @@ class RSSUtils { ":lang" => $entry_language, ":id" => $ref_id]; - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $params[":ts_lang"] = $feed_language; $params[":ts_content"] = mb_substr(strip_tags($entry_title . " " . $entry_content), 0, 900000); } @@ -1375,7 +1375,7 @@ class RSSUtils { $pdo = Db::pdo(); - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $pdo->query("DELETE FROM ttrss_error_log WHERE created_at < NOW() - INTERVAL '7 days'"); } else { @@ -1396,8 +1396,8 @@ class RSSUtils { $num_deleted = 0; - if (is_writable(LOCK_DIRECTORY)) { - $files = glob(LOCK_DIRECTORY . "/*.lock"); + if (is_writable(Config::get(Config::LOCK_DIRECTORY))) { + $files = glob(Config::get(Config::LOCK_DIRECTORY) . "/*.lock"); if ($files) { foreach ($files as $file) { @@ -1589,9 +1589,9 @@ class RSSUtils { $days = DAEMON_UNSUCCESSFUL_DAYS_LIMIT; - if (DB_TYPE == "pgsql") { + if (Config::get(Config::DB_TYPE) == "pgsql") { $interval_query = "last_successful_update < NOW() - INTERVAL '$days days' AND last_updated > NOW() - INTERVAL '1 days'"; - } else /* if (DB_TYPE == "mysql") */ { + } else /* if (Config::get(Config::DB_TYPE) == "mysql") */ { $interval_query = "last_successful_update < DATE_SUB(NOW(), INTERVAL $days DAY) AND last_updated > DATE_SUB(NOW(), INTERVAL 1 DAY)"; } diff --git a/classes/userhelper.php b/classes/userhelper.php index 7fe1e5557..82a2fe05f 100644 --- a/classes/userhelper.php +++ b/classes/userhelper.php @@ -2,7 +2,7 @@ class UserHelper { static function authenticate(string $login = null, string $password = null, bool $check_only = false, string $service = null) { - if (!SINGLE_USER_MODE) { + if (!Config::get(Config::SINGLE_USER_MODE)) { $user_id = false; $auth_module = false; @@ -88,7 +88,7 @@ class UserHelper { static function login_sequence() { $pdo = Db::pdo(); - if (SINGLE_USER_MODE) { + if (Config::get(Config::SINGLE_USER_MODE)) { @session_start(); self::authenticate("admin", null); startup_gettext(); @@ -98,7 +98,7 @@ class UserHelper { if (empty($_SESSION["uid"])) { - if (AUTH_AUTO_LOGIN && self::authenticate(null, null)) { + if (Config::get(Config::AUTH_AUTO_LOGIN) && self::authenticate(null, null)) { $_SESSION["ref_schema_version"] = get_schema_version(true); } else { self::authenticate(null, null, true); -- cgit v1.2.3 From 383f4ca04af8c7a1ff4f8be5a488f6799e0e0d37 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 22 Feb 2021 21:49:09 +0300 Subject: add config.php --- classes/config.php | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 classes/config.php (limited to 'classes') diff --git a/classes/config.php b/classes/config.php new file mode 100644 index 000000000..8a7470135 --- /dev/null +++ b/classes/config.php @@ -0,0 +1,98 @@ + "pgsql", + Config::DB_HOST => "db", + Config::DB_USER => "", + Config::DB_NAME => "", + Config::DB_PASS => "", + Config::DB_PORT => "5432", + Config::MYSQL_CHARSET => "UTF8", + Config::SELF_URL_PATH => "", + Config::SINGLE_USER_MODE => "", + Config::SIMPLE_UPDATE_MODE => "", + Config::PHP_EXECUTABLE => "/usr/bin/php", + Config::LOCK_DIRECTORY => "lock", + Config::CACHE_DIR => "cache", + Config::ICONS_DIR => "feed-icons", + Config::ICONS_URL => "feed-icons", + Config::AUTH_AUTO_CREATE => "true", + Config::AUTH_AUTO_LOGIN => "true", + Config::FORCE_ARTICLE_PURGE => 0, + Config::ENABLE_REGISTRATION => "", + Config::SESSION_COOKIE_LIFETIME => 86400, + Config::SMTP_FROM_NAME => "Tiny Tiny RSS", + Config::SMTP_FROM_ADDRESS => "noreply@localhost", + Config::DIGEST_SUBJECT => "[tt-rss] New headlines for last 24 hours", + Config::CHECK_FOR_UPDATES => "true", + Config::PLUGINS => "auth_internal", + Config::LOG_DESTINATION => "sql", + ]; + + private const _ENVVAR_PREFIX = "TTRSS_"; + private static $instance; + + private $params = []; + + public static function get_instance() { + if (self::$instance == null) + self::$instance = new self(); + + return self::$instance; + } + + function __construct() { + $ref = new ReflectionClass(get_class($this)); + + foreach ($ref->getConstants() as $const => $cvalue) { + if (strpos($const, "_") !== 0) { + $override = getenv($this::_ENVVAR_PREFIX . $const); + + if (!empty($override)) { + $this->params[$cvalue] = $override; + } else { + $this->params[$cvalue] = $this::_DEFAULTS[$const]; + } + } + } + } + + private function _get($param) { + return $this->params[$param]; + } + + static function get($param) { + $instance = self::get_instance(); + + return $instance->_get($param); + } + +} \ No newline at end of file -- cgit v1.2.3 From 211f699aa0c4211e4ee8a02446d51b9811d0c28c Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 22 Feb 2021 22:35:27 +0300 Subject: migrate the rest into Config:: --- classes/config.php | 192 ++++++++++++++++++++++++++++-------------------- classes/db.php | 4 +- classes/digest.php | 8 +- classes/diskcache.php | 2 +- classes/feeds.php | 6 +- classes/logger.php | 2 +- classes/mailer.php | 6 +- classes/pref/feeds.php | 8 +- classes/pref/system.php | 4 +- classes/pref/users.php | 2 +- classes/rpc.php | 18 ++--- classes/rssutils.php | 36 ++++----- classes/urlhelper.php | 10 +-- 13 files changed, 166 insertions(+), 132 deletions(-) (limited to 'classes') diff --git a/classes/config.php b/classes/config.php index 8a7470135..349706390 100644 --- a/classes/config.php +++ b/classes/config.php @@ -1,98 +1,134 @@ "pgsql", - Config::DB_HOST => "db", - Config::DB_USER => "", - Config::DB_NAME => "", - Config::DB_PASS => "", - Config::DB_PORT => "5432", - Config::MYSQL_CHARSET => "UTF8", - Config::SELF_URL_PATH => "", - Config::SINGLE_USER_MODE => "", - Config::SIMPLE_UPDATE_MODE => "", - Config::PHP_EXECUTABLE => "/usr/bin/php", - Config::LOCK_DIRECTORY => "lock", - Config::CACHE_DIR => "cache", - Config::ICONS_DIR => "feed-icons", - Config::ICONS_URL => "feed-icons", - Config::AUTH_AUTO_CREATE => "true", - Config::AUTH_AUTO_LOGIN => "true", - Config::FORCE_ARTICLE_PURGE => 0, - Config::ENABLE_REGISTRATION => "", - Config::SESSION_COOKIE_LIFETIME => 86400, - Config::SMTP_FROM_NAME => "Tiny Tiny RSS", - Config::SMTP_FROM_ADDRESS => "noreply@localhost", - Config::DIGEST_SUBJECT => "[tt-rss] New headlines for last 24 hours", - Config::CHECK_FOR_UPDATES => "true", - Config::PLUGINS => "auth_internal", - Config::LOG_DESTINATION => "sql", - ]; + const DB_TYPE = "DB_TYPE"; + const DB_HOST = "DB_HOST"; + const DB_USER = "DB_USER"; + const DB_NAME = "DB_NAME"; + const DB_PASS = "DB_PASS"; + const DB_PORT = "DB_PORT"; + const MYSQL_CHARSET = "MYSQL_CHARSET"; + const SELF_URL_PATH = "SELF_URL_PATH"; + const SINGLE_USER_MODE = "SINGLE_USER_MODE"; + const SIMPLE_UPDATE_MODE = "SIMPLE_UPDATE_MODE"; + const PHP_EXECUTABLE = "PHP_EXECUTABLE"; + const LOCK_DIRECTORY = "LOCK_DIRECTORY"; + const CACHE_DIR = "CACHE_DIR"; + const ICONS_DIR = "ICONS_DIR"; + const ICONS_URL = "ICONS_URL"; + const AUTH_AUTO_CREATE = "AUTH_AUTO_CREATE"; + const AUTH_AUTO_LOGIN = "AUTH_AUTO_LOGIN"; + const FORCE_ARTICLE_PURGE = "FORCE_ARTICLE_PURGE"; + const ENABLE_REGISTRATION = "ENABLE_REGISTRATION"; + const SESSION_COOKIE_LIFETIME = "SESSION_COOKIE_LIFETIME"; + const SMTP_FROM_NAME = "SMTP_FROM_NAME"; + const SMTP_FROM_ADDRESS = "SMTP_FROM_ADDRESS"; + const DIGEST_SUBJECT = "DIGEST_SUBJECT"; + const CHECK_FOR_UPDATES = "CHECK_FOR_UPDATES"; + const PLUGINS = "PLUGINS"; + const LOG_DESTINATION = "LOG_DESTINATION"; + const LOCAL_OVERRIDE_STYLESHEET = "LOCAL_OVERRIDE_STYLESHEET"; + const DAEMON_MAX_CHILD_RUNTIME = "DAEMON_MAX_CHILD_RUNTIME"; + const DAEMON_MAX_JOBS = "DAEMON_MAX_JOBS"; + const FEED_FETCH_TIMEOUT = "FEED_FETCH_TIMEOUT"; + const FEED_FETCH_NO_CACHE_TIMEOUT = "FEED_FETCH_NO_CACHE_TIMEOUT"; + const FILE_FETCH_TIMEOUT = "FILE_FETCH_TIMEOUT"; + const FILE_FETCH_CONNECT_TIMEOUT = "FILE_FETCH_CONNECT_TIMEOUT"; + const DAEMON_UPDATE_LOGIN_LIMIT = "DAEMON_UPDATE_LOGIN_LIMIT"; + const DAEMON_FEED_LIMIT = "DAEMON_FEED_LIMIT"; + const DAEMON_SLEEP_INTERVAL = "DAEMON_SLEEP_INTERVAL"; + const MAX_CACHE_FILE_SIZE = "MAX_CACHE_FILE_SIZE"; + const MAX_DOWNLOAD_FILE_SIZE = "MAX_DOWNLOAD_FILE_SIZE"; + const MAX_FAVICON_FILE_SIZE = "MAX_FAVICON_FILE_SIZE"; + const CACHE_MAX_DAYS = "CACHE_MAX_DAYS"; + const MAX_CONDITIONAL_INTERVAL = "MAX_CONDITIONAL_INTERVAL"; + const DAEMON_UNSUCCESSFUL_DAYS_LIMIT = "DAEMON_UNSUCCESSFUL_DAYS_LIMIT"; + const LOG_SENT_MAIL = "LOG_SENT_MAIL"; - private const _ENVVAR_PREFIX = "TTRSS_"; - private static $instance; + private const _DEFAULTS = [ + Config::DB_TYPE => "pgsql", + Config::DB_HOST => "db", + Config::DB_USER => "", + Config::DB_NAME => "", + Config::DB_PASS => "", + Config::DB_PORT => "5432", + Config::MYSQL_CHARSET => "UTF8", + Config::SELF_URL_PATH => "", + Config::SINGLE_USER_MODE => "", + Config::SIMPLE_UPDATE_MODE => "", + Config::PHP_EXECUTABLE => "/usr/bin/php", + Config::LOCK_DIRECTORY => "lock", + Config::CACHE_DIR => "cache", + Config::ICONS_DIR => "feed-icons", + Config::ICONS_URL => "feed-icons", + Config::AUTH_AUTO_CREATE => "true", + Config::AUTH_AUTO_LOGIN => "true", + Config::FORCE_ARTICLE_PURGE => 0, + Config::ENABLE_REGISTRATION => "", + Config::SESSION_COOKIE_LIFETIME => 86400, + Config::SMTP_FROM_NAME => "Tiny Tiny RSS", + Config::SMTP_FROM_ADDRESS => "noreply@localhost", + Config::DIGEST_SUBJECT => "[tt-rss] New headlines for last 24 hours", + Config::CHECK_FOR_UPDATES => "true", + Config::PLUGINS => "auth_internal", + Config::LOG_DESTINATION => "sql", + Config::LOCAL_OVERRIDE_STYLESHEET => "local-overrides.css", + Config::DAEMON_MAX_CHILD_RUNTIME => 1800, + Config::DAEMON_MAX_JOBS => 2, + Config::FEED_FETCH_TIMEOUT => 45, + Config::FEED_FETCH_NO_CACHE_TIMEOUT => 15, + Config::FILE_FETCH_TIMEOUT => 45, + Config::FILE_FETCH_CONNECT_TIMEOUT => 15, + Config::DAEMON_UPDATE_LOGIN_LIMIT => 30, + Config::DAEMON_FEED_LIMIT => 500, + Config::DAEMON_SLEEP_INTERVAL => 120, + Config::MAX_CACHE_FILE_SIZE => 64*1024*1024, + Config::MAX_DOWNLOAD_FILE_SIZE => 16*1024*1024, + Config::MAX_FAVICON_FILE_SIZE => 1*1024*1024, + Config::CACHE_MAX_DAYS => 7, + Config::MAX_CONDITIONAL_INTERVAL => 3600*12, + Config::DAEMON_UNSUCCESSFUL_DAYS_LIMIT => 30, + Config::LOG_SENT_MAIL => "", + ]; - private $params = []; + private static $instance; - public static function get_instance() { + private $params = []; + + public static function get_instance() { if (self::$instance == null) self::$instance = new self(); return self::$instance; } - function __construct() { - $ref = new ReflectionClass(get_class($this)); + function __construct() { + $ref = new ReflectionClass(get_class($this)); - foreach ($ref->getConstants() as $const => $cvalue) { - if (strpos($const, "_") !== 0) { - $override = getenv($this::_ENVVAR_PREFIX . $const); + foreach ($ref->getConstants() as $const => $cvalue) { + if (strpos($const, "_") !== 0) { + $override = getenv($this::_ENVVAR_PREFIX . $const); - if (!empty($override)) { - $this->params[$cvalue] = $override; - } else { - $this->params[$cvalue] = $this::_DEFAULTS[$const]; - } - } - } - } + if (!empty($override)) { + $this->params[$cvalue] = $override; + } else { + $this->params[$cvalue] = $this::_DEFAULTS[$const]; + } + } + } + } - private function _get($param) { - return $this->params[$param]; - } + private function _get($param) { + return $this->params[$param]; + } - static function get($param) { - $instance = self::get_instance(); + static function get($param) { + $instance = self::get_instance(); - return $instance->_get($param); - } + return $instance->_get($param); + } } \ No newline at end of file diff --git a/classes/db.php b/classes/db.php index 1ccaa3533..5196e7c7d 100755 --- a/classes/db.php +++ b/classes/db.php @@ -41,8 +41,8 @@ class Db } else if (Config::get(Config::DB_TYPE) == "mysql") { $pdo->query("SET time_zone = '+0:0'"); - if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { - $pdo->query("SET NAMES " . MYSQL_CHARSET); + if (defined('Config::get(Config::MYSQL_CHARSET)') && Config::get(Config::MYSQL_CHARSET)) { + $pdo->query("SET NAMES " . Config::get(Config::MYSQL_CHARSET)); } } diff --git a/classes/digest.php b/classes/digest.php index 9ac3f6a17..a6a0c47de 100644 --- a/classes/digest.php +++ b/classes/digest.php @@ -48,11 +48,11 @@ class Digest $mailer = new Mailer(); - //$rc = $mail->quickMail($line["email"], $line["login"], DIGEST_SUBJECT, $digest, $digest_text); + //$rc = $mail->quickMail($line["email"], $line["login"], Config::get(Config::DIGEST_SUBJECT), $digest, $digest_text); $rc = $mailer->mail(["to_name" => $line["login"], "to_address" => $line["email"], - "subject" => DIGEST_SUBJECT, + "subject" => Config::get(Config::DIGEST_SUBJECT), "message" => $digest_text, "message_html" => $digest]); @@ -91,11 +91,11 @@ class Digest $tpl->setVariable('CUR_DATE', date('Y/m/d', $local_ts)); $tpl->setVariable('CUR_TIME', date('G:i', $local_ts)); - $tpl->setVariable('TTRSS_HOST', Config::get(Config.Config::get(Config::SELF_URL_PATH))); + $tpl->setVariable('TTRSS_HOST', Config::get(Config::get(Config::SELF_URL_PATH))); $tpl_t->setVariable('CUR_DATE', date('Y/m/d', $local_ts)); $tpl_t->setVariable('CUR_TIME', date('G:i', $local_ts)); - $tpl_t->setVariable('TTRSS_HOST', Config::get(Config.Config::get(Config::SELF_URL_PATH))); + $tpl_t->setVariable('TTRSS_HOST', Config::get(Config::get(Config::SELF_URL_PATH))); $affected_ids = array(); diff --git a/classes/diskcache.php b/classes/diskcache.php index 063a3847c..9c594acc5 100644 --- a/classes/diskcache.php +++ b/classes/diskcache.php @@ -349,7 +349,7 @@ class DiskCache { if ($files) { foreach ($files as $file) { - if (time() - filemtime($file) > 86400*CACHE_MAX_DAYS) { + if (time() - filemtime($file) > 86400*Config::get(Config::CACHE_MAX_DAYS)) { unlink($file); ++$num_deleted; diff --git a/classes/feeds.php b/classes/feeds.php index 274cb22d0..eaedc1aee 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -1056,11 +1056,11 @@ class Feeds extends Handler_Protected { } static function _get_icon_file($feed_id) { - return ICONS_DIR . "/$feed_id.ico"; + return Config::get(Config::ICONS_DIR) . "/$feed_id.ico"; } static function _has_icon($id) { - return is_file(ICONS_DIR . "/$id.ico") && filesize(ICONS_DIR . "/$id.ico") > 0; + return is_file(Config::get(Config::ICONS_DIR) . "/$id.ico") && filesize(Config::get(Config::ICONS_DIR) . "/$id.ico") > 0; } static function _get_icon($id) { @@ -1084,7 +1084,7 @@ class Feeds extends Handler_Protected { $icon = self::_get_icon_file($id); if ($icon && file_exists($icon)) { - return ICONS_URL . "/" . basename($icon) . "?" . filemtime($icon); + return Config::get(Config::ICONS_URL) . "/" . basename($icon) . "?" . filemtime($icon); } } break; diff --git a/classes/logger.php b/classes/logger.php index cdc6b240a..6cc33314d 100755 --- a/classes/logger.php +++ b/classes/logger.php @@ -42,7 +42,7 @@ class Logger { } function __construct() { - switch (LOG_DESTINATION) { + switch (Config::get(Config::LOG_DESTINATION)) { case "sql": $this->adapter = new Logger_SQL(); break; diff --git a/classes/mailer.php b/classes/mailer.php index 16be16523..93f778210 100644 --- a/classes/mailer.php +++ b/classes/mailer.php @@ -11,15 +11,15 @@ class Mailer { $subject = $params["subject"]; $message = $params["message"]; $message_html = $params["message_html"]; - $from_name = $params["from_name"] ? $params["from_name"] : SMTP_FROM_NAME; - $from_address = $params["from_address"] ? $params["from_address"] : SMTP_FROM_ADDRESS; + $from_name = $params["from_name"] ? $params["from_name"] : Config::get(Config::SMTP_FROM_NAME); + $from_address = $params["from_address"] ? $params["from_address"] : Config::get(Config::SMTP_FROM_ADDRESS); $additional_headers = $params["headers"] ? $params["headers"] : []; $from_combined = $from_name ? "$from_name <$from_address>" : $from_address; $to_combined = $to_name ? "$to_name <$to_address>" : $to_address; - if (defined('_LOG_SENT_MAIL') && _LOG_SENT_MAIL) + if (Config::get(Config::LOG_SENT_MAIL)) Logger::get()->log(E_USER_NOTICE, "Sending mail from $from_combined to $to_combined [$subject]: $message"); // HOOK_SEND_MAIL plugin instructions: diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index 229effeb3..7c3a40647 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -441,7 +441,7 @@ class Pref_Feeds extends Handler_Protected { $sth->execute([$feed_id, $_SESSION['uid']]); if ($row = $sth->fetch()) { - @unlink(ICONS_DIR . "/$feed_id.ico"); + @unlink(Config::get(Config::ICONS_DIR) . "/$feed_id.ico"); $sth = $this->pdo->prepare("UPDATE ttrss_feeds SET favicon_avg_color = NULL, favicon_last_checked = '1970-01-01' where id = ?"); @@ -479,7 +479,7 @@ class Pref_Feeds extends Handler_Protected { $sth->execute([$feed_id, $_SESSION['uid']]); if ($row = $sth->fetch()) { - $new_filename = ICONS_DIR . "/$feed_id.ico"; + $new_filename = Config::get(Config::ICONS_DIR) . "/$feed_id.ico"; if (file_exists($new_filename)) unlink($new_filename); @@ -1228,8 +1228,8 @@ class Pref_Feeds extends Handler_Protected { $pdo->commit(); - if (file_exists(ICONS_DIR . "/$id.ico")) { - unlink(ICONS_DIR . "/$id.ico"); + if (file_exists(Config::get(Config::ICONS_DIR) . "/$id.ico")) { + unlink(Config::get(Config::ICONS_DIR) . "/$id.ico"); } } else { diff --git a/classes/pref/system.php b/classes/pref/system.php index bc519a321..35c776463 100644 --- a/classes/pref/system.php +++ b/classes/pref/system.php @@ -153,10 +153,10 @@ class Pref_System extends Handler_Administrative {
'> _log_viewer($page, $severity); } else { - print_notice("Please set LOG_DESTINATION to 'sql' in config.php to enable database logging."); + print_notice("Please set Config::get(Config::LOG_DESTINATION) to 'sql' in config.php to enable database logging."); } ?>
diff --git a/classes/pref/users.php b/classes/pref/users.php index 5ac6a7990..f30abe001 100644 --- a/classes/pref/users.php +++ b/classes/pref/users.php @@ -86,7 +86,7 @@ class Pref_Users extends Handler_Administrative { fetch()) { ?>
  • diff --git a/classes/rpc.php b/classes/rpc.php index bf24132b0..4aa3f69d5 100755 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -165,8 +165,9 @@ class RPC extends Handler_Protected { function setpanelmode() { $wide = (int) clean($_REQUEST["wide"]); + // FIXME should this use SESSION_COOKIE_LIFETIME and be renewed periodically? setcookie("ttrss_widescreen", (string)$wide, - time() + COOKIE_LIFETIME_LONG); + time() + 86400*365); print json_encode(array("wide" => $wide)); } @@ -328,7 +329,7 @@ class RPC extends Handler_Protected { get_version($git_commit, $git_timestamp); - if (defined('CHECK_FOR_UPDATES') && CHECK_FOR_UPDATES && $_SESSION["access_level"] >= 10 && $git_timestamp) { + if (defined('Config::get(Config::CHECK_FOR_UPDATES)') && Config::get(Config::CHECK_FOR_UPDATES) && $_SESSION["access_level"] >= 10 && $git_timestamp) { $content = @UrlHelper::fetch(["url" => "https://tt-rss.org/version.json"]); if ($content) { @@ -359,8 +360,8 @@ class RPC extends Handler_Protected { } $params["safe_mode"] = !empty($_SESSION["safe_mode"]); - $params["check_for_updates"] = CHECK_FOR_UPDATES; - $params["icons_url"] = ICONS_URL; + $params["check_for_updates"] = Config::get(Config::CHECK_FOR_UPDATES); + $params["icons_url"] = Config::get(Config::ICONS_URL); $params["cookie_lifetime"] = Config::get(Config::SESSION_COOKIE_LIFETIME); $params["default_view_mode"] = get_pref("_DEFAULT_VIEW_MODE"); $params["default_view_limit"] = (int) get_pref("_DEFAULT_VIEW_LIMIT"); @@ -390,15 +391,10 @@ class RPC extends Handler_Protected { $params["self_url_prefix"] = get_self_url_prefix(); $params["max_feed_id"] = (int) $max_feed_id; $params["num_feeds"] = (int) $num_feeds; - $params["hotkeys"] = $this->get_hotkeys_map(); - $params["widescreen"] = (int) ($_COOKIE["ttrss_widescreen"] ?? 0); - - $params['simple_update'] = SIMPLE_UPDATE_MODE; - + $params['simple_update'] = Config::get(Config::SIMPLE_UPDATE_MODE); $params["icon_indicator_white"] = $this->image_to_base64("images/indicator_white.gif"); - $params["labels"] = Labels::get_all($_SESSION["uid"]); return $params; @@ -432,7 +428,7 @@ class RPC extends Handler_Protected { $data['cdm_expanded'] = get_pref('CDM_EXPANDED'); $data["labels"] = Labels::get_all($_SESSION["uid"]); - if (LOG_DESTINATION == 'sql' && $_SESSION['access_level'] >= 10) { + if (Config::get(Config::LOG_DESTINATION) == 'sql' && $_SESSION['access_level'] >= 10) { if (Config::get(Config::DB_TYPE) == 'pgsql') { $log_interval = "created_at > NOW() - interval '1 hour'"; } else { diff --git a/classes/rssutils.php b/classes/rssutils.php index c951003f0..5dcbb48d6 100755 --- a/classes/rssutils.php +++ b/classes/rssutils.php @@ -34,9 +34,9 @@ class RSSUtils { $pdo = Db::pdo(); $sth = $pdo->prepare("SELECT id FROM ttrss_feeds WHERE id = ?"); - // check icon files once every CACHE_MAX_DAYS days - $icon_files = array_filter(glob(ICONS_DIR . "/*.ico"), - function($f) { return filemtime($f) < time() - 86400*CACHE_MAX_DAYS; }); + // check icon files once every Config::get(Config::CACHE_MAX_DAYS) days + $icon_files = array_filter(glob(Config::get(Config::ICONS_DIR) . "/*.ico"), + function($f) { return filemtime($f) < time() - 86400 * Config::get(Config::CACHE_MAX_DAYS); }); foreach ($icon_files as $icon) { $feed_id = basename($icon, ".ico"); @@ -52,20 +52,22 @@ class RSSUtils { } } - static function update_daemon_common($limit = DAEMON_FEED_LIMIT, $options = []) { + static function update_daemon_common($limit = null, $options = []) { $schema_version = get_schema_version(); + if (!$limit) $limit = Config::get(Config::DAEMON_FEED_LIMIT); + if ($schema_version != SCHEMA_VERSION) { die("Schema version is wrong, please upgrade the database.\n"); } $pdo = Db::pdo(); - if (!Config::get(Config::SINGLE_USER_MODE) && DAEMON_UPDATE_LOGIN_LIMIT > 0) { + if (!Config::get(Config::SINGLE_USER_MODE) && Config::get(Config::DAEMON_UPDATE_LOGIN_LIMIT) > 0) { if (Config::get(Config::DB_TYPE) == "pgsql") { - $login_thresh_qpart = "AND ttrss_users.last_login >= NOW() - INTERVAL '".DAEMON_UPDATE_LOGIN_LIMIT." days'"; + $login_thresh_qpart = "AND ttrss_users.last_login >= NOW() - INTERVAL '".Config::get(Config::DAEMON_UPDATE_LOGIN_LIMIT)." days'"; } else { - $login_thresh_qpart = "AND ttrss_users.last_login >= DATE_SUB(NOW(), INTERVAL ".DAEMON_UPDATE_LOGIN_LIMIT." DAY)"; + $login_thresh_qpart = "AND ttrss_users.last_login >= DATE_SUB(NOW(), INTERVAL ".Config::get(Config::DAEMON_UPDATE_LOGIN_LIMIT)." DAY)"; } } else { $login_thresh_qpart = ""; @@ -288,7 +290,7 @@ class RSSUtils { if (!$basic_info) { $feed_data = UrlHelper::fetch($fetch_url, false, $auth_login, $auth_pass, false, - FEED_FETCH_TIMEOUT, + Config::get(Config::FEED_FETCH_TIMEOUT), 0); $feed_data = trim($feed_data); @@ -455,7 +457,7 @@ class RSSUtils { Debug::log("not using CURL due to open_basedir restrictions", Debug::$LOG_VERBOSE); } - if (time() - strtotime($last_unconditional) > MAX_CONDITIONAL_INTERVAL) { + if (time() - strtotime($last_unconditional) > Config::get(Config::MAX_CONDITIONAL_INTERVAL)) { Debug::log("maximum allowed interval for conditional requests exceeded, forcing refetch", Debug::$LOG_VERBOSE); $force_refetch = true; @@ -469,7 +471,7 @@ class RSSUtils { "url" => $fetch_url, "login" => $auth_login, "pass" => $auth_pass, - "timeout" => $no_cache ? FEED_FETCH_NO_CACHE_TIMEOUT : FEED_FETCH_TIMEOUT, + "timeout" => $no_cache ? Config::get(Config::FEED_FETCH_NO_CACHE_TIMEOUT) : Config::get(Config::FEED_FETCH_TIMEOUT), "last_modified" => $force_refetch ? "" : $stored_last_modified ]); @@ -591,7 +593,7 @@ class RSSUtils { /* terrible hack: if we crash on floicon shit here, we won't check * the icon avgcolor again (unless the icon got updated) */ - $favicon_file = ICONS_DIR . "/$feed.ico"; + $favicon_file = Config::get(Config::ICONS_DIR) . "/$feed.ico"; $favicon_modified = file_exists($favicon_file) ? filemtime($favicon_file) : -1; Debug::log("checking favicon for feed $feed...", Debug::$LOG_VERBOSE); @@ -755,7 +757,7 @@ class RSSUtils { $e->type, $e->length, $e->title, $e->width, $e->height); // Yet another episode of "mysql utf8_general_ci is gimped" - if (Config::get(Config::DB_TYPE) == "mysql" && MYSQL_CHARSET != "UTF8MB4") { + if (Config::get(Config::DB_TYPE) == "mysql" && Config::get(Config::MYSQL_CHARSET) != "UTF8MB4") { for ($i = 0; $i < count($e_item); $i++) { if (is_string($e_item[$i])) { $e_item[$i] = self::strip_utf8mb4($e_item[$i]); @@ -833,7 +835,7 @@ class RSSUtils { Debug::log("plugin data: $entry_plugin_data", Debug::$LOG_VERBOSE); // Workaround: 4-byte unicode requires utf8mb4 in MySQL. See https://tt-rss.org/forum/viewtopic.php?f=1&t=3377&p=20077#p20077 - if (Config::get(Config::DB_TYPE) == "mysql" && MYSQL_CHARSET != "UTF8MB4") { + if (Config::get(Config::DB_TYPE) == "mysql" && Config::get(Config::MYSQL_CHARSET) != "UTF8MB4") { foreach ($article as $k => $v) { // i guess we'll have to take the risk of 4byte unicode labels & tags here if (is_string($article[$k])) { @@ -1298,7 +1300,7 @@ class RSSUtils { $file_content = UrlHelper::fetch(array("url" => $src, "http_referrer" => $src, - "max_size" => MAX_CACHE_FILE_SIZE)); + "max_size" => Config::get(Config::MAX_CACHE_FILE_SIZE))); if ($file_content) { $cache->put($local_filename, $file_content); @@ -1328,7 +1330,7 @@ class RSSUtils { $file_content = UrlHelper::fetch(array("url" => $url, "http_referrer" => $url, - "max_size" => MAX_CACHE_FILE_SIZE)); + "max_size" => Config::get(Config::MAX_CACHE_FILE_SIZE))); if ($file_content) { $cache->put($local_filename, $file_content); @@ -1643,7 +1645,7 @@ class RSSUtils { } static function check_feed_favicon($site_url, $feed) { - $icon_file = ICONS_DIR . "/$feed.ico"; + $icon_file = Config::get(Config::ICONS_DIR) . "/$feed.ico"; $favicon_url = self::get_favicon_url($site_url); if (!$favicon_url) { @@ -1654,7 +1656,7 @@ class RSSUtils { // Limiting to "image" type misses those served with text/plain $contents = UrlHelper::fetch([ 'url' => $favicon_url, - 'max_size' => MAX_FAVICON_FILE_SIZE, + 'max_size' => Config::get(Config::MAX_FAVICON_FILE_SIZE), //'type' => 'image', ]); if (!$contents) { diff --git a/classes/urlhelper.php b/classes/urlhelper.php index 8717d02c3..42aa069e6 100644 --- a/classes/urlhelper.php +++ b/classes/urlhelper.php @@ -209,7 +209,7 @@ class UrlHelper { $last_modified = isset($options["last_modified"]) ? $options["last_modified"] : ""; $useragent = isset($options["useragent"]) ? $options["useragent"] : false; $followlocation = isset($options["followlocation"]) ? $options["followlocation"] : true; - $max_size = isset($options["max_size"]) ? $options["max_size"] : MAX_DOWNLOAD_FILE_SIZE; // in bytes + $max_size = isset($options["max_size"]) ? $options["max_size"] : Config::get(Config::MAX_DOWNLOAD_FILE_SIZE); // in bytes $http_accept = isset($options["http_accept"]) ? $options["http_accept"] : false; $http_referrer = isset($options["http_referrer"]) ? $options["http_referrer"] : false; @@ -250,8 +250,8 @@ class UrlHelper { if (count($curl_http_headers) > 0) curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_http_headers); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout ? $timeout : FILE_FETCH_CONNECT_TIMEOUT); - curl_setopt($ch, CURLOPT_TIMEOUT, $timeout ? $timeout : FILE_FETCH_TIMEOUT); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout ? $timeout : Config::get(Config::FILE_FETCH_CONNECT_TIMEOUT)); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout ? $timeout : Config::get(Config::FILE_FETCH_TIMEOUT)); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("open_basedir") && $followlocation); curl_setopt($ch, CURLOPT_MAXREDIRS, 20); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); @@ -395,7 +395,7 @@ class UrlHelper { ), 'method' => 'GET', 'ignore_errors' => true, - 'timeout' => $timeout ? $timeout : FILE_FETCH_TIMEOUT, + 'timeout' => $timeout ? $timeout : Config::get(Config::FILE_FETCH_TIMEOUT), 'protocol_version'=> 1.1) ); @@ -417,7 +417,7 @@ class UrlHelper { $old_error = error_get_last(); - $fetch_effective_url = self::resolve_redirects($url, $timeout ? $timeout : FILE_FETCH_CONNECT_TIMEOUT); + $fetch_effective_url = self::resolve_redirects($url, $timeout ? $timeout : Config::get(Config::FILE_FETCH_CONNECT_TIMEOUT)); if (!self::validate($fetch_effective_url, true)) { $fetch_last_error = "URL received after redirection failed extended validation."; -- cgit v1.2.3 From 445ac1213c52360046e87508d2060d1b3620a7a0 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 22 Feb 2021 22:51:12 +0300 Subject: finalize config:: migration; make config.php optional --- classes/config.php | 4 +++- classes/db.php | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'classes') diff --git a/classes/config.php b/classes/config.php index 349706390..b154206da 100644 --- a/classes/config.php +++ b/classes/config.php @@ -2,7 +2,9 @@ class Config { private const _ENVVAR_PREFIX = "TTRSS_"; - /* overriding defaults (defined below in _DEFAULTS[]) via environment: DB_TYPE becomes TTRSS_DB_TYPE, etc */ + // TODO: this should be extensible so plugins could add their own global directives (with defaults) + + // overriding defaults (defined below in _DEFAULTS[]) via environment: DB_TYPE becomes TTRSS_DB_TYPE, etc const DB_TYPE = "DB_TYPE"; const DB_HOST = "DB_HOST"; diff --git a/classes/db.php b/classes/db.php index 5196e7c7d..cbfb9e598 100755 --- a/classes/db.php +++ b/classes/db.php @@ -17,8 +17,8 @@ class Db // normal usage is Db::pdo()->prepare(...) etc public function pdo_connect() { - $db_port = defined('DB_PORT') && DB_PORT ? ';port=' . DB_PORT : ''; - $db_host = defined('DB_HOST') && DB_HOST ? ';host=' . DB_HOST : ''; + $db_port = Config::get(Config::DB_PORT) ? ';port=' . Config::get(Config::DB_PORT) : ''; + $db_host = Config::get(Config::DB_HOST) ? ';host=' . Config::get(Config::DB_HOST) : ''; try { $pdo = new PDO(Config::get(Config::DB_TYPE) . ':dbname=' . Config::get(Config::DB_NAME) . $db_host . $db_port, -- cgit v1.2.3 From 77e6d589ffdf4ddb381f0b63b319e59bacfff1e8 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 22 Feb 2021 23:20:52 +0300 Subject: allow adding custom config options --- classes/config.php | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'classes') diff --git a/classes/config.php b/classes/config.php index b154206da..6f62863e9 100644 --- a/classes/config.php +++ b/classes/config.php @@ -2,9 +2,7 @@ class Config { private const _ENVVAR_PREFIX = "TTRSS_"; - // TODO: this should be extensible so plugins could add their own global directives (with defaults) - - // overriding defaults (defined below in _DEFAULTS[]) via environment: DB_TYPE becomes TTRSS_DB_TYPE, etc + // override defaults, defined below in _DEFAULTS[], via environment: DB_TYPE becomes TTRSS_DB_TYPE, etc const DB_TYPE = "DB_TYPE"; const DB_HOST = "DB_HOST"; @@ -114,23 +112,31 @@ class Config { if (strpos($const, "_") !== 0) { $override = getenv($this::_ENVVAR_PREFIX . $const); - if (!empty($override)) { - $this->params[$cvalue] = $override; - } else { - $this->params[$cvalue] = $this::_DEFAULTS[$const]; - } + $this->params[$cvalue] = !empty($override) ? $override : $this::_DEFAULTS[$const]; } } } - private function _get($param) { + private function _get(string $param) { return $this->params[$param]; } - static function get($param) { + private function _add(string $param, string $default) { + $override = getenv($this::_ENVVAR_PREFIX . $param); + + $this->params[$param] = !empty($override) ? $override : $default; + } + + static function add(string $param, string $default) { + $instance = self::get_instance(); + + return $instance->_add($param, $default); + } + + static function get(string $param) { $instance = self::get_instance(); return $instance->_get($param); } -} \ No newline at end of file +} -- cgit v1.2.3