From dbbae15a8458679db0f4540dacdbdcff9c02ec8c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 7 Apr 2023 12:40:43 +0200 Subject: Remove ConfigurationSetter (#5251) This class has not been maintained for a while. Only a subset of our configuration properties are there, and some code is not relevant anymore. Furthermore, it is relying exclusively on dynamically invoked functions, making it challenging to maintain, in particular to find out what is used and what is not, what is handled and what is not. It is not well suited for changes in data formats, which have been handled in the Context class instead. It is also not able to handle configuration properties that are missing. It is the class with most errors for PHPStan level 6 (179 errors). It is also making intense use of is_callable and call_user_func_array, which are performance killers. Should the need arrise again to perform validation of our internal configuration files, I suggest an implementation with the opposite approach, namely driven by our code instead of driven by the data. In summary, at the moment, this class is costly, while not offering many guarantees. --- app/Models/ConfigurationSetter.php | 429 ------------------------------------- 1 file changed, 429 deletions(-) delete mode 100644 app/Models/ConfigurationSetter.php (limited to 'app/Models/ConfigurationSetter.php') diff --git a/app/Models/ConfigurationSetter.php b/app/Models/ConfigurationSetter.php deleted file mode 100644 index 2f33ab925..000000000 --- a/app/Models/ConfigurationSetter.php +++ /dev/null @@ -1,429 +0,0 @@ -= 60) ? $value : ''; - } - - private function _content_width(&$data, $value) { - $value = strtolower($value); - if (!in_array($value, array('thin', 'medium', 'large', 'no_limit'))) { - $value = 'thin'; - } - - $data['content_width'] = $value; - } - - private function _default_state(&$data, $value) { - $data['default_state'] = (int)$value; - } - - private function _default_view(&$data, $value) { - switch ($value) { - case 'all': - $data['default_view'] = $value; - $data['default_state'] = (FreshRSS_Entry::STATE_READ + FreshRSS_Entry::STATE_NOT_READ); - break; - case 'adaptive': - case 'unread': - default: - $data['default_view'] = $value; - $data['default_state'] = FreshRSS_Entry::STATE_NOT_READ; - } - } - - // It works for system config too! - private function _extensions_enabled(&$data, $value) { - if (!is_array($value)) { - $value = array($value); - } - $data['extensions_enabled'] = $value; - } - - private function _html5_notif_timeout(&$data, $value) { - $value = intval($value); - $data['html5_notif_timeout'] = $value >= 0 ? $value : 0; - } - - // It works for system config too! - private function _language(&$data, $value) { - $value = strtolower($value); - $languages = Minz_Translate::availableLanguages(); - if (!in_array($value, $languages)) { - $value = 'en'; - } - $data['language'] = $value; - } - - private function _passwordHash(&$data, $value) { - $data['passwordHash'] = ctype_graph($value) && (strlen($value) >= 60) ? $value : ''; - } - - private function _posts_per_page(&$data, $value) { - $value = intval($value); - $data['posts_per_page'] = $value > 0 ? $value : 10; - } - - private function _queries(&$data, $values) { - $data['queries'] = array(); - foreach ($values as $value) { - if ($value instanceof FreshRSS_UserQuery) { - $data['queries'][] = $value->toArray(); - } elseif (is_array($value)) { - $data['queries'][] = $value; - } - } - } - - private function _sharing(&$data, $values) { - $data['sharing'] = array(); - foreach ($values as $value) { - if (!is_array($value)) { - continue; - } - - // Verify URL and add default value when needed - if (isset($value['url'])) { - $is_url = checkUrl($value['url']); - if (!$is_url) { - continue; - } - } else { - $value['url'] = null; - } - - $data['sharing'][] = $value; - } - } - - private function _shortcuts(&$data, $values) { - if (!is_array($values)) { - return; - } - - $data['shortcuts'] = $values; - } - - private function _sort_order(&$data, $value) { - $data['sort_order'] = $value === 'ASC' ? 'ASC' : 'DESC'; - } - - private function _ttl_default(&$data, $value) { - $value = intval($value); - $data['ttl_default'] = $value > FreshRSS_Feed::TTL_DEFAULT ? $value : 3600; - } - - private function _view_mode(&$data, $value) { - $value = strtolower($value); - if (!in_array($value, array('global', 'normal', 'reader'))) { - $value = 'normal'; - } - $data['view_mode'] = $value; - } - - /** - * A list of boolean setters. - */ - private function _anon_access(&$data, $value) { - $data['anon_access'] = $this->handleBool($value); - } - - private function _auto_load_more(&$data, $value) { - $data['auto_load_more'] = $this->handleBool($value); - } - - private function _auto_remove_article(&$data, $value) { - $data['auto_remove_article'] = $this->handleBool($value); - } - - private function _mark_updated_article_unread(&$data, $value) { - $data['mark_updated_article_unread'] = $this->handleBool($value); - } - - private function _show_nav_buttons(&$data, $value) { - $data['show_nav_buttons'] = $this->handleBool($value); - } - - private function _show_fav_unread(&$data, $value) { - $data['show_fav_unread'] = $this->handleBool($value); - } - - private function _display_categories(&$data, $value) { - if (!in_array($value, [ 'active', 'remember', 'all', 'none' ], true)) { - $value = $value === true ? 'all' : 'active'; - } - $data['display_categories'] = $value; - } - - private function show_tags(&$data, $value) { - $data['show_tags'] = $value; - } - - private function show_tags_max(&$data, $value) { - $value = intval($value); - $data['show_tags_max'] = $value >= 0 ? $value : 0; - } - - private function _show_author_date(&$data, $value) { - $data['show_author_date'] = $value; - } - - private function _show_feed_name(&$data, $value) { - $data['show_feed_name'] = $value; - } - - private function _display_posts(&$data, $value) { - $data['display_posts'] = $this->handleBool($value); - } - - private function _hide_read_feeds(&$data, $value) { - $data['hide_read_feeds'] = $this->handleBool($value); - } - - private function _sides_close_article(&$data, $value) { - $data['sides_close_article'] = $this->handleBool($value); - } - - private function _lazyload(&$data, $value) { - $data['lazyload'] = $this->handleBool($value); - } - - private function _onread_jump_next(&$data, $value) { - $data['onread_jump_next'] = $this->handleBool($value); - } - - private function _reading_confirm(&$data, $value) { - $data['reading_confirm'] = $this->handleBool($value); - } - - private function _sticky_post(&$data, $value) { - $data['sticky_post'] = $this->handleBool($value); - } - - private function _darkMode(&$data, $value) { - if (!in_array($value, [ 'no', 'auto'], true)) { - $value = 'no'; - } - $data['darkMode'] = $value; - } - - private function _bottomline_date(&$data, $value) { - $data['bottomline_date'] = $this->handleBool($value); - } - private function _bottomline_favorite(&$data, $value) { - $data['bottomline_favorite'] = $this->handleBool($value); - } - private function _bottomline_link(&$data, $value) { - $data['bottomline_link'] = $this->handleBool($value); - } - private function _bottomline_read(&$data, $value) { - $data['bottomline_read'] = $this->handleBool($value); - } - private function _bottomline_sharing(&$data, $value) { - $data['bottomline_sharing'] = $this->handleBool($value); - } - private function _bottomline_tags(&$data, $value) { - $data['bottomline_tags'] = $this->handleBool($value); - } - - private function _topline_date(&$data, $value) { - $data['topline_date'] = $this->handleBool($value); - } - private function _topline_favorite(&$data, $value) { - $data['topline_favorite'] = $this->handleBool($value); - } - private function _topline_link(&$data, $value) { - $data['topline_link'] = $this->handleBool($value); - } - private function _topline_read(&$data, $value) { - $data['topline_read'] = $this->handleBool($value); - } - private function _topline_website(&$data, $value) { - $value = strtolower($value); - if (!in_array($value, array('none', 'icon', 'name', 'full'))) { - $value = 'full'; - } - $data['topline_website'] = $value; - } - private function _topline_thumbnail(&$data, $value) { - $value = strtolower($value); - if (!in_array($value, array('none', 'portrait', 'square', 'landscape'))) { - $value = 'none'; - } - $data['topline_thumbnail'] = $value; - } - private function _topline_summary(&$data, $value) { - $data['topline_summary'] = $this->handleBool($value); - } - private function _topline_display_authors(&$data, $value) { - $data['topline_display_authors'] = $this->handleBool($value); - } - - /** - * The (not so long) list of setters for system configuration. - */ - private function _allow_anonymous(&$data, $value) { - $data['allow_anonymous'] = $this->handleBool($value) && FreshRSS_Auth::accessNeedsAction(); - } - - private function _allow_anonymous_refresh(&$data, $value) { - $data['allow_anonymous_refresh'] = $this->handleBool($value) && $data['allow_anonymous']; - } - - private function _api_enabled(&$data, $value) { - $data['api_enabled'] = $this->handleBool($value); - } - - private function _auth_type(&$data, $value) { - $value = strtolower($value); - if (!in_array($value, array('form', 'http_auth', 'none'))) { - $value = 'none'; - } - $data['auth_type'] = $value; - $this->_allow_anonymous($data, $data['allow_anonymous']); - } - - private function _db(&$data, $value) { - if (!isset($value['type'])) { - return; - } - - switch ($value['type']) { - case 'mysql': - case 'pgsql': - if (empty($value['host']) || - empty($value['user']) || - empty($value['base']) || - !isset($value['password'])) { - return; - } - - $data['db']['type'] = $value['type']; - $data['db']['host'] = $value['host']; - $data['db']['user'] = $value['user']; - $data['db']['base'] = $value['base']; - $data['db']['password'] = $value['password']; - $data['db']['prefix'] = isset($value['prefix']) ? $value['prefix'] : ''; - break; - case 'sqlite': - $data['db']['type'] = $value['type']; - $data['db']['host'] = ''; - $data['db']['user'] = ''; - $data['db']['base'] = ''; - $data['db']['password'] = ''; - $data['db']['prefix'] = ''; - break; - default: - return; - } - } - - private function _default_user(&$data, $value) { - $user_list = listUsers(); - if (in_array($value, $user_list)) { - $data['default_user'] = $value; - } - } - - private function _environment(&$data, $value) { - $value = strtolower($value); - if (!in_array($value, array('silent', 'development', 'production'))) { - $value = 'production'; - } - $data['environment'] = $value; - } - - private function _limits(&$data, $values) { - $max_small_int = 16384; - $limits_keys = array( - 'cookie_duration' => array( - 'min' => 0, - ), - 'cache_duration' => array( - 'min' => 0, - ), - 'timeout' => array( - 'min' => 0, - ), - 'max_inactivity' => array( - 'min' => 0, - ), - 'max_feeds' => array( - 'min' => 0, - 'max' => $max_small_int, - ), - 'max_categories' => array( - 'min' => 0, - 'max' => $max_small_int, - ), - 'max_registrations' => array( - 'min' => 0, - ), - ); - - foreach ($values as $key => $value) { - if (!isset($limits_keys[$key])) { - continue; - } - - $value = intval($value); - $limits = $limits_keys[$key]; - // @phpstan-ignore-next-line - if ((!isset($limits['min']) || $value >= $limits['min']) && - (!isset($limits['max']) || $value <= $limits['max']) - ) { - $data['limits'][$key] = $value; - } - } - } - - private function _unsafe_autologin_enabled(&$data, $value) { - $data['unsafe_autologin_enabled'] = $this->handleBool($value); - } - - private function _auto_update_url(&$data, $value) { - if (!$value) { - return; - } - - $data['auto_update_url'] = $value; - } - - private function _force_email_validation(&$data, $value) { - $data['force_email_validation'] = $this->handleBool($value); - } -} -- cgit v1.2.3