Changelog for
tt-rss-19.8~git2241.df489df30-lp156.10.1.noarch.rpm :
* Wed Oct 02 2024 mrueckertAATTsuse.de- Update to version 19.8~git2241.df489df30:
* drop php-http/guzzle7-adapter
* drop OPENTELEMETRY_ global config entries
* composer dump-autoload --optimize
* drop opentelemetry
* disable absolute redirects & redirect port in phpdoc image
* Translated using Weblate (Spanish)
* Mon Sep 23 2024 mrueckertAATTsuse.de- Update to version 19.8~git2231.8a8ce0696:
* phpdoc - switch to nginx unprivileged
* Translated using Weblate (Galician)
* add another test for self url, split regex into two parts - one for plugins, one for everything else
* fix Config::get_self_url() invoked from plugin context, better deal with multiple trailing slashes in URL, update phpunit image path
* Translated using Weblate (Greek)
* Translated using Weblate (Spanish)
* Translated using Weblate (Greek)
* don\'t try to publish phpdoc image without creds
* Revert \"Update .gitlab-ci.yml file\"
* Update .gitlab-ci.yml file
* spacing fix
* Update nginx.conf to move the currently unused PATH_INFO configuration into a separate location rule for plugins to leverage
* Translated using Weblate (Spanish)
* Translated using Weblate (Spanish)
* Translated using Weblate (Galician)
* Make a search query \'feed title\' a link to get back to the search modal.
* Translated using Weblate (Spanish)
* Translated using Weblate (Spanish)
* Set \'str_getcsv\' escape param to empty string to avoid PHP 8.4 deprecation message.
* Fix some broken links and make minor wording tweaks.
* Remove extra PHP version checks.
* Translated using Weblate (Galician)
* enforce lowercase usernames while keeping backwards-compatibility for authentication
* fix build: directive missing in dev compose file for updater
* Remove unused \'dashboard feed\' code.
* Translated using Weblate (German)
* Replace basic \'isset()\' cases with the null coalescing operator.
* Translated using Weblate (Spanish)
* set proper stages for phpdoc jobs
* copy docs to subpath
* set phpdoc image name
* add phpdoc dockerfile
* exp - use phpdoc container
* Sun Jul 28 2024 mrueckertAATTsuse.de- Update to version 19.8~git2183.9d37158d8:
* Fix breakage when \'ALPINE_MIRROR\' is not provided.
* support optional mirror for alpine
* Add the \'Sessions\' class to the autoloader.
* update CONTRIBUTING
* Translated using Weblate (Portuguese (Portugal))
* Translated using Weblate (Chinese (Traditional))
* Move side effects out of the \'Sessions\' constructor.
* Add and use the \'Sessions\' class.
* retry selenium tests several times
* Translated using Weblate (Chinese (Traditional))
* Switch to the non-deprecated form of \'session_set_save_handler\'.
* Don\'t reuse the \'$matches\' array in \'RSSUtils::decode_srcset()\'.
* Tue Jul 09 2024 mrueckertAATTsuse.de- Update to version 19.8~git2165.59cf21814:
* Translated using Weblate (Polish)
* Translated using Weblate (Turkish)
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Dutch)
* Translated using Weblate (French)
* Translated using Weblate (German)
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Galician)
* add some time-related debugging output for feeds and users
* Translated using Weblate (Galician)
* set DAEMON_FEED_LIMIT to 50 by default and use it consistently between forking daemon and any other update methods
*
* pass arbitrary CLI arguments to update daemon via updater.sh entrypoint
* add configurable log level for update daemon (DAEMON_LOG_LEVEL)
* when daemon log level is set to LOG_EXTENDED (2) log queries for feed update selection
* add gitlab CR publish jobs
* wip split image build/push
* Translated using Weblate (Chinese (Simplified))
* Translated using Weblate (Italian)
* Translated using Weblate (Chinese (Simplified))
* Update translation files
* Translated using Weblate (Chinese (Simplified))
* update messages.pot
* fix untranslated strings
* Translated using Weblate (Galician)
* don\'t ask rsync to set ownership when copying to persistent volume in a container
* Bump to Alpine 3.20.
* drop es_LA, move es_ES to es
* Sun May 19 2024 mrueckertAATTsuse.de- Update to version 19.8~git2129.8b037e81d:
* Add option to debug feeds in \'Feeds with update errors\' dialog.
* Thu May 16 2024 mrueckertAATTsuse.de- Update to version 19.8~git2127.e2e161dec:
* Check \'head\' and \'body\' when searching HTML for feed links.
* Move \'include/functions.php\' require into Composer autoloader.
* Wed Apr 17 2024 mrueckertAATTsuse.de- Update to version 19.8~git2123.b1e3d660e:
* Switch 2 more implicitly nullable params to explicitly nullable.
* force-set absolute path for local cache if CACHE_DIR config value is relative
* Mon Apr 08 2024 mrueckertAATTsuse.de- Update to version 19.8~git2120.435c321ca:
* Make implicit nullable parameters explicitly nullable.
* Support doing a prefs page search via Enter.
* Wed Mar 06 2024 mrueckertAATTsuse.de- Update to version 19.8~git2116.536085c76:
* Update CONTRIBUTING.md
* Sat Feb 24 2024 mrueckertAATTsuse.de- Update to version 19.8~git2115.81f313999:
* add HOOK_VALIDATE_SESSION
* use update job template
* fix demo values file, drop .helm
* add demo job back
* more prod helm stuff
* unquote commit hash & add files to commit
* maybe fix placeholder git name
* set placeholder git email/name
* set image
* wip: update-prod
* Ensure correct permissions on the backup script.
* Fri Feb 09 2024 mrueckertAATTsuse.de- Update to version 19.8~git2103.373a2fec3:
* Fix passing auth credentials to plugins for HOOK_FETCH_FEED.
* implement above changes for 3 panel view, add basic tooltip
* make headline elements with feed title lead to originating site while RSS icon elements lead to the feed within tt-rss UI
* fix unfunctional rss icon in grouped-by-feed heading
* Thu Feb 01 2024 mrueckertAATTsuse.de- Update to version 19.8~git2098.3d70fb21f:
* use OCI for integration tests
* fix missing include
* switch to template helm ci
* Use FeedEnclosure throughout RSSUtils.
* Mon Jan 22 2024 mrueckertAATTsuse.de- Update to version 19.8~git2093.a86df7eac:
* Use APP_BASE in the web-nginx health check URL.
* Only include the exception message in \'UrlHelper::$fetch_last_error\'.
* shorten DIGEST_MIN_SCORE help text
*
* mark get_pref/set_pref wrappers as deprecated
* add per-user preference for minimal score required for digest
*
* mail test - fill user email address as default
* digest - fix some warnings
* Clean up some unused variables.
* Sun Jan 07 2024 Marcus Rueckert
- the new curl based fetcher needs the temp directory redirected - create corresponding directories - set proper environment variables * Sun Jan 07 2024 Marcus Rueckert - cleanup unused apparmor code * Fri Jan 05 2024 mrueckertAATTsuse.de- Update to version 19.8~git2084.f0f22c23c: * Update all UrlHelper::fetch() calls to use the associative array approach. * Perform validation of redirect URLs during the redirect process. * Fix specifying auth type in UrlHelper::fetch(), add a test for 403 auth retry. * Appease PHPStan in UrlHelperTest * Add some tests for UrlHelper::fetch() * Ensure the feed name is easily visible when looking at the feeds with errors list. * Rework content encoding error retrying in UrlHelper::fetch() * Clean up UrlHelper::resolve_redirects(). * Add back \'any auth\' retry in UrlHelper::fetch() * Use Guzzle * sanitizer: add a test to make sure is intact * Revert \"Fix sanitizer with libxml2 >= 2.12.0\" * bump CI jobs & utility scripts to php83 * Bump to Alpine 3.19 and PHP 8.3. * add coverage-filter * add phpunit code coverage driver * add some unittest options for xmlrunner * fix filename * enable unit test results for selenium * collect phpunit artifacts * add env prefixes * add db vars * add cobertura args for phpunit-integration * disable local rules for integration tests * add sanitizer integration test * Fix sanitizer with libxml2 >= 2.12.0 * set registry project * Thu Nov 16 2023 mrueckertAATTsuse.de- Update to version 19.8~git2050.1fe1132a1: * use variable for fastcgi_pass to force resolver usage * explicitly set resolver in the nginx container (configurable envvar) * add wip UI/backend stuff to filter feed tree * add wait-for-element to selenium test * remove .git before_scripts * Revert \"pass .git to docker context so self-built images would have some way to determine version without CI variables\" * forgot one job * do the same for :publish jobs * fix yaml indents * add .git to .dockerignore when building master images * pass .git to docker context so self-built images would have some way to determine version without CI variables * Mon Oct 30 2023 mrueckertAATTsuse.de- Update to version 19.8~git2039.1be156408: * add some more phpunit api tests * pass API_URL to phpunit-integration CLI * fix apitest * fix circular dependency * reduce targets * add phpunit integration (wip) * add stuff necessary to run integration tests using phpunit * add always-failing mock of api test * phpunit - skip integration tests * use python unittest for selenium tests * add a separate interface for auth modules w/ change_password() method * unify test class naming * replace some dirname horrors with a separate unit-tested method * Fix class names in some more places. * make phpstan happy * add healthcheck public method, map by default to /healthz * move to psr-4 autoloader * Revert \"api: escape newlines in headline content HTML object\" * add a workaround for make_self_url() when invoked off /api/ endpoint, add unit tests for this method * disable xdebug tracing * api: escape newlines in headline content HTML object * add stub opentelemetry classes in case it is disabled * Update docker-compose.yml * Revert \"add a self url path hack to strip request path directories (needed for /api/index.php)\" * Revert \"make phpstan happy\" * make phpstan happy * add a self url path hack to strip request path directories (needed for /api/index.php) * set demo webroot values * demo - enable auto restart * remove helm debug, hide demo job behind CI var * we don\'t need a separate demo stage now * set imageTag * move demo to later stage * add demo k8s job * make sure we fail properly * add configurable ns * un-mock test, use SELENIUM_IMAGE * use CI_COMMIT_SHORT_SHA for selenium test mock * remove startup checks for SELF_URL_PATH, rely on auto-detection instead * update test filename * add integration branch job * add selenium mock * fix local compose file typo, wait a bit before curling login page * fix previous * force create cache directories on app startup * enable updater by default * compose tweaks * add simple dev compose * test: run curl to get login page * move phpdoc to publish stage * set phpdoc to always run * add publish jobs * test stub * switch to html2text() instead of strip_tags() when preparing FTS index * cosmetic fix for root span name * fix previous * stop whining if _SESSION etc are not defined * show logged in user as root span name * make phpstan happy, run phpstan on all files on task startup * a bit more tracing * add placeholder instrumentation for public * stop calling spans scopes * make tracer field non-static * OPENTELEMETRY_HOST -> OPENTELEMETRY_ENDPOINT * make phpstan & watcher happy, stop running phpstan on vendor/ * jaeger-client -> opentelemetry * unharcode proxy registry * Revert \"Revert \"exp: switch to kaniko\"\" * Revert \"exp: switch to kaniko\" * exp: switch to kaniko * update phpdoc image * Fri Oct 13 2023 mrueckertAATTsuse.de- Update to version 19.8~git1964.9556519e6: * fix content_preview not shown in JSON shared feed * Wed Oct 11 2023 mrueckertAATTsuse.de- Update to version 19.8~git1963.c779e2ba0: * batch feed editor: don\'t try to save feed_url or title, those aren\'t in the dialog * fix feed_language being unnecessarily quoted in batch feed editor * enable fpm status page * Revert \"CI: use nexus alpine proxy\" * phpstan fix * feed debugger: add content regexp matches to filter debug output * gitignore phpstan-tmp * phpstan: set tmp dir * CI: use nexus alpine proxy * phpstan: exclude intervention from plugins/ * fix basename() being passed a NULL value * add .dockerignore * use non-deprecated variant of get_schema_version() * phpstan: exclude psr/log * * logger: add optional HTML output * feed debugger: add checkbox to dump feed XML * use nginx envsubst to make tt-rss root configurable * Sat Jun 17 2023 mrueckertAATTsuse.de- Update to version 19.8~git1945.dc25a9cf6: * disable app passwords in the UI if auth_internal is not loaded * move af_redditimgur to a separate repo * keep two sets of content-insert size cookies for wide & normal mode * public/getUnread: fix PHP8 warning if fresh optional parameter is not given * Fix version string for unsupported installations * Forgot delimiter * Update API Add site_url property for 9e169dc3aa7c7e30c11d7d3d1bbc4bc66fa39760 * Thu May 18 2023 mrueckertAATTsuse.de- Update to version 19.8~git1936.a4543de3a: * Bump to Alpine 3.18, PHP 8.2 * Fri May 12 2023 mrueckertAATTsuse.de- Update to version 19.8~git1934.11946f014: * Update CONTRIBUTING.md * _order_to_override_query: fix custom sort plugins overriding each other * add Headlines.default_move_on_expand tunable * fix 881f8805bd behaving improperly * add APCu & opcache * long year -> short year * we don\'t need BUILD_TIMESTAMP either * move branch to version tooltip * use short sha CI envvar for version.json compatibility * no more pointless txt files for version * a bit more diskcache tracing * don\'t try to pass array to span tags * better static version * add CI_COMMIT_TIMESTAMP to version-static file * create version_static.txt on build * fix typo * make jaeger service name configurable * add tracing to UrlHelper * add php81-sockets * a bit more tracing * even more tracing * more tracing * Tracer: rework options to tags * add icatchall * make phpstan happy * some tracer class fixes / unhardcode jaeger IP * exp: jaeger tracing * Revert \"docker: point xaccel plugin url to gitlab\" * bump dojo to 1.16.5 * docker: point xaccel plugin url to gitlab * add window.requestIdleCallback polyfill for safari * Update config.php: $ttrss_version in private function _get_version() replaced by $this->version * CI: phpstan: check for PHPDOC_DEPLOY_SSH_KEY * phpstan task: analyze only modified files * filters: allow matching on tags if there are no tags * make phpstan happy * add simple autocompleter for tags * add branch targets * remove .gitea workflows * dockerfile cleanup * fix eslint task extending .phpunit * use common CI template * Make edit feed dialog\'s \'remove icon\' button a regular button. * add branch tasks * more pipeline tweaks * phpstan: depend on phpunit * add some manual job triggers * remove docs stage * CI: set some job filters * fix phpdoc stage * add phpdoc job * WIP: gitlab-ci * isLoggedIn adds a message to the system log when it returns false, fix for php8+, removed empty test for bool conversion. * lint job: remove useless cache hash * isLoggedIn adds a message to the system log when it returns false, fix for php8+ * good idea to checkout code before trying to document it * phpdoc job: verbosity * simplify pipeline setup * fix ssh for phpdoc pipeline * add phpdoc job * add docker build cache * use action for image meta * we don\'t need to do npm install either * remove node_modules after eslint pass * shorten pipeline * update FROM links for harbor * enable multiarch * bring back nginx_xaccel * add gitea-CI docker builder * commit package-lock.json, add eslint task * CI: add on PR * jenkins lint -> gitea workflow * add lint workflow * * auth_internal OTP form: fix double-urlencode * post-login redirect: handle ?return in a less idiotic fashion * combined mode: prevent left part of footer pushing right part out of viewport * Change \'FEED_NOTHING\' to \'FEED_DASHBOARD\'. * Also use friendly names for special feed+cat IDs in the frontend. * Replace special feed and category numbers with constants. * Revert 7ed4fa4c1dbdd9df552cf6dd28907c6769911a0e and use AATTvar instead. * Remove unused \'Prefs::_delete()\'. * Address PHPStan warning about unused private method \'Prefs::_delete()\'. * Tweak to appease PHPStan in \'Pref_Feeds::_makefeedtree()\'. * Address PHPStan \'right side always true\' in \'PluginHost::lookup_command()\'. * Address PHPStan \'right side always true\' in FeedItem_RSS. * Bump PHPStan from 1.8.2 to 1.10.3 * API: - sharedToPublished: add optional sanitize parameter (defaults to true) if disabled, allows inserting HTML into shared article content; - clean() already invokes strip_tags() so it\'s pointless to do both; * tags display: instead of limiting to 5 tags, limit by container width % * require PHP to have support for flock() * add override links to utility views * API: add getFeedIcon endpoint, bump version * Mon Feb 20 2023 mrueckertAATTsuse.de- Update to version 19.8~git1835.fcfcb69a2: * Handle fetch issues in \'RSSUtils::update_basic_info\'. * Wed Feb 15 2023 mrueckertAATTsuse.de- Update to version 19.8~git1833.7bbe71b81: * Fix calculating average color for *.ico * Thu Feb 09 2023 mrueckertAATTsuse.de- Update to version 19.8~git1831.0cd4abe4e: * Minor tweak to favicon avg color debug log message. * Don\'t set \'favicon_avg_color\' on feed obj unless it\'s valid. * Fix logging favicon-related bools in \'RSSUtils::update_rss_feed()\'. * Persist failure to detect favicon average color. * Ensure custom favicon color detection happens. * Mon Jan 23 2023 mrueckertAATTsuse.de- Update to version 19.8~git1825.c30b24d09: * deal with type errors in batch feed editor properly, un-deprecate PDO wrapper functions and document them for posterity * batch feed editor: silence some more php8.1 undefined field warnings * batch feed editor: - fix some field changes not applying because of DB type errors - rework to use bound vars instead of sql query concatenation deprecate: checkbox_to_sql_bool(), bool_to_sql_bool() * CI: use local registry php image * show full commit timestamp with version information in prefs footer * Translated using Weblate (German) * Fix getting active feeds with errors. * Only count updating (i.e. enabled) feeds when determining active feeds with errors. * Only touch on send for expirable cache files. * make phpstan happy * * bring back cache-busting for feed icons based on timestamp * DiskCache: use singleton pattern to create less cache object instances * DiskCache: implement ETag * limit tree expando white color to prefs * move af_readability out of master tree * Add af_readability \'html5-php\' Jenkinsfile. * Bump af_readability \'html5-php\' dependency to latest. * phpstan: exclude tests in lib/ * Sun Dec 04 2022 mrueckertAATTsuse.de- Update to version 19.8~git1804.fa9c614ff: * fix cleanup_feed_icons unlinking nonexistant files, limit it to actual feed icons * Consistently get the self URL. * get_self_url: strip all trailing slashes * Sat Nov 26 2022 mrueckertAATTsuse.de- Update to version 19.8~git1799.52180c9f8: * DiskCache: enforce basename() on filenames passed to cache adapter * migrate favicons directly to new cache * rework favicon storage to use DiskCache * DiskCache: tweak how expiration is invoked * deprecate DiskCache->touch() * update_rss_feed: use DiskCache to store feed data * * split local cache implementation into a separate class * allow custom implementations provided by plugins * Translated using Weblate (Galician) * Translated using Weblate (Galician) * Translated using Weblate (Chinese (Traditional)) * Mon Nov 21 2022 mrueckertAATTsuse.de- Update to version 19.8~git1788.9a0dcdd6c: * Address upcoming string interpolation deprecation. * Wed Oct 19 2022 mrueckertAATTsuse.de- Update to version 19.8~git1786.602e86842: * fix some PHP8 warnings generated while dragging feed tree items around * fix tree expando being invisible on selected tree nodes * Return true in custom error handler for proper suppression * Jenkins: set discarder * remove docker-on-docker hacks from Jenkinsfile * add Jenkinsfile to enable separate CI for pull requests * Fix PHP8 strtime warning if argument is null (addendum) * Fix handling of suppressed errors * make phpstan happy * Thu Sep 29 2022 mrueckertAATTsuse.de- Update to version 19.8~git1772.3545d3ba8: * Update \'CONTRIBUTING.md\' * Added support for api plugins virtual feeds * Fix PHP8 strtime warning if argument is null * Mon Sep 05 2022 mrueckertAATTsuse.de- Update to version 19.8~git1766.d47b8c849: * Set user related sessions for single user mode * Add last_login to single user mode * Fix PHP8 empty param problem * update gl translation label (2) * update gl translation label * enable gl translation (Galician) * Translated using Weblate (Dutch) * Translated using Weblate (Czech) * generate_syndicated_feed: add source section to JSON-formatted output * amend logic flow to fix phpstan warning in previous * Handle \'file_get_contents()\' failure in \'UrlHelper::fetch()\'. * Handle valid HTTP responses with no response body. * Use the null coalescing assignment operator in various places. * Replace use of \'array_merge\' with the spread operator and \'array_push\' in various places. * Use arrow functions in some places. * minor: remove a PHP >= 5.6 check in \'af_redditimgur\' * Remove a PHP < 7.1 branch in UrlHelper. * Switch to direct type declarations of class properties. * Sat Aug 06 2022 mrueckertAATTsuse.de- Update to version 19.8~git1741.ed2cbeffc: * disable composer platform check * update phpstan to 1.8.2 * rework phpstan task to use inotifywait * enable phpstan task to run in background * readability: import fixed html5-php * add vscode task for phpstan * fork masterminds html5-php * properly check for baseline required PHP version (7.4) * af_redditimgur: absolutize links before working on them (again) * Revert \"af_redditimgur: absolutize links before working on them\" * af_redditimgur: absolutize links before working on them * af_redditimgur: don\'t try to check if null domain is blacklisted * * add HOOK_LOGINFORM_ADDITIONAL_BUTTONS * allow plugins to inject JS code into login form * public: allow system plugins to expose public methods * make_self_url: properly strip out GET params * readability: depend on psr/http-factory * readability: add missing dependencies * use correct namespace for forked readability-php * Fix an error when disabling all user plugins * add missing files for forked idiorm * downgrade phpstan to 1.1.2 * af_redditimgur: absolutize links before processing them * some very minor php8.1 warnings fixed * upgrade idiorm to php8.1-patched version (aaronpk/idiorm) * Update php-qrcode and php-settings-container for PHP 8.1 * Update beberlei/assert for PHP 8 compatibility * fix: lower-case remote usernames before validation * Fix MySQL search Queries * schema: don\'t use \'create index if not exists\' syntax because mysql doesn\'t support it * experimental, af_psql_trgm: attempt to pseudo-normalize returned mysql score values by dividing by match length * implement native fulltext search on mysql * schema: add fulltext indexes for mysql to support af_psql_trgm and possibly future fulltext search * af_psql_trgm: add support for querying against mariadb FULLTEXT indexes * Translated using Weblate (Ukrainian) * Translated using Weblate (Chinese (Simplified)) * fix rendering of articles with titles containing extremely long words * userhelper: fix optional parameter being declared before a required one * UserHelper, CLI: add a method to check user password * phpstan: limit concurrency * CLI: properly deal with --force-yes on schema update * CLI: exit with error status when operation has failed * * add UserHelper methods to manipulate user database (add, modify, delete) * expose said methods via CLI (update.php) * fix several invocations of deprecated functions * set stricter type hints on several method arguments * Translated using Weblate (Galician) * Translated using Weblate (Italian) * throttle updates if received HTTP 429 (Too Many Requests) * Translated using Weblate (French) * Update translation files * Tue Jun 07 2022 mrueckertAATTsuse.de- Update to version 19.8~git1687.7cd26272f: * Revert \"minor: Support html content in mailer.php\" * Revert \"trivia: coding style\" * feeds-tree: move external onClick dojo/method to PrefFeedTree class * filter-tree: move external dojo/method to PrefFilterTree class * rebase translations * prefs: move external filter tree onload method (which checks for inactive feeds, etc.) to FilterTree class * pref-filters: add a button to hide or show rules in the filter list * gulp task: add flatpak node16 sdk to path because it doesn\'t inherit launch environment * fix PHP8 undefined array key warning when resetting prefs to defaults * bookmarklets: fix wiki URL * fix custom-set site URLs never used while updating feeds * when determining feed-specific favicon, instead of using first match or generic fallback, go through entire list of determined favicon URLs * trivia: coding style * minor: Support html content in mailer.php * use CURLAUTH_BASIC by default for password-protected feeds, keeping CURLAUTH_ANY as a fallback in case we got a 403. * Fix typo * Fix xml parsing error * Update \'CONTRIBUTING.md\' * make phpstan stfu about unmatcher ignored errors (seriously) * add some more phpstan excludes * Translated using Weblate (Belarusian) * fix be locale label * enable Belarusian translation (proper UI label pending) * Translated using Weblate (Belarusian) * Translated using Weblate (Belarusian) * Translated using Weblate (Belarusian) * Added translation using Weblate (Belarusian) * Fri Apr 08 2022 mrueckertAATTsuse.de- Update to version 19.8~git1656.2654b3c6b: * disable some pointless startup sanity checks when running under docker * Sat Apr 02 2022 mrueckertAATTsuse.de- Update to version 19.8~git1655.41a52c833: * update CONTRIBUTING.md re: gitea registration * set last_login_update session variable immediately when logging in * Fix af_comics for explosm after site changes * rewrite_relative: deal with undefined path warning * rewrite_relative: use isset() to check for relative path * add phpunit configuration * tests: add stub autoloader, add a few more rewrite_relative tests * * add phpunit as a dev dependency * add some basic tests for UrlHelper::rewrite_relative() * fix UrlHelper::rewrite_relative() to work better on non-absolute relative URL paths * af_readability: ask readability-php library to fix relative URLs * Fri Mar 11 2022 mrueckertAATTsuse.de- Update to version 19.8~git1644.170385021: * Translated using Weblate (German) * various fixes vor php 8.1 compatibility * Translated using Weblate (Galician) * Translated using Weblate (Galician) * Translated using Weblate (Galician) * Translated using Weblate (Galician) * Added translation using Weblate (Galician) * Translated using Weblate (Ukrainian) * Translated using Weblate (Dutch) * Mon Feb 28 2022 mrueckertAATTsuse.de- Update to version 19.8~git1632.a39557451: * actions dropdown: add context-sensitive UI layout labels * getAllCounters: set default value if frontend doesn\'t pass label or feed id count * * add actions dropdown to toggle combined mode * hide \'toggle widescreen\' menu item when in combined mode * unify some mode toggling code in App * inline attachment links: break long words to prevent horizontal scrolling * Mon Feb 21 2022 mrueckertAATTsuse.de- Update to version 19.8~git1628.9a5c21630: * update.php: better error reporting if invoked with PHP SAPI other than CLI * fix Feeds::_get_counters() used improperly as a replacement for getFeedUnread() * * Feeds::_get_counters - fix retrieving unread for tags * mark several symbols as AATTdeprecated properly * replace uses of (deprecated) getFeedUnread() with Feeds::_get_counters() * Fri Feb 18 2022 mrueckertAATTsuse.de- Update to version 19.8~git1625.168dc6fe5: * rewrite_relative: prevent php warning when checking for unset content type in EXTRA_SCHEMES_BY_CONTENT_TYPE * rewrite_relative: whitelist specific schemes for URLs with \'known\' content-types i.e. specified for enclosures * allow running as root in a container environment * Tue Feb 08 2022 mrueckertAATTsuse.de- Update to version 19.8~git1622.079f6dfdd: * note: use proper hook to set click handlers * Replace deprecated `strftime` * Tue Feb 01 2022 mrueckertAATTsuse.de- Update to version 19.8~git1618.4e35c44ad: * plugins/note: allow editing note by clicking on it * Add workaround for boolean values being intergers with MySQL/PHP 8.1 * make sure notification is closed when saving/creating filter * fix filter last_triggered not updating * Mon Jan 24 2022 mrueckertAATTsuse.de- Update to version 19.8~git1612.56fd06d61: * make sure #headline-spacer click to open prompt is not obscured when mark as read on scroll is enabled * Fix starred images not being deleted * share plugin: fix previous * rework several instances of translated strings being used with single quotes as HTML element attribute values * update_rss_feed: juxtapose pdo and ORM commit on timestamp update * Headlines: fix multiple article ids not passed to setScore as an array * Mon Jan 10 2022 mrueckertAATTsuse.de- Update to version 19.8~git1602.4a4928ea2: * af_readability: use data-src for images if available * generate a warning if plugin-generated content of HOOK_ARTICLE_BUTTON or _LEFT_BUTTON can\'t be parsed as valid XML * themes: Fix incorrect blur and opacity interaction * process gallery media in the correct order * fetch: return HTTP code when no curl_error() is available * remove deprecated LOG_ constants * Mon Dec 20 2021 mrueckertAATTsuse.de- Update to version 19.8~git1594.7aeaa1b03: * rssutils: rewrite several invocations of (deprecated) rewrite_relative_url() to UrlHelper::rewrite_relative() * filters: * add filter action to ignore feed-provided tags * simplify handling of various filter-provided tags * bump schema to 146 * af_redditimgur: don\'t generate a warning if fallback video is not found for hosted:video post * * fox.form.Select: add several properties allowing it to better imitate other controls like DropDownButton, etc. * rework several main toolbar items to use fox.form.Select instead of other controls * replace HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM with HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM2 because of markup change (option instead of menuitem) * PluginHost: add some explicit typecasts to make intellephense shut up * PluginHost: add run_until() and HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM2 * Handle another potential \'SUM()\' null situation in Feeds. * Add a note on why ed74c43f18 was needed. * Handle the admin user not having any entries in \'Feeds::_get_global_unread\'. * Translated using Weblate (Czech) * Translated using Weblate (Chinese (Traditional)) * Tue Dec 07 2021 mrueckertAATTsuse.de- Update to version 19.8~git1582.53061d150: * * add HOOK_POST_LOGOUT * auth_remote: add config option AUTH_REMOTE_POST_LOGOUT_URL * af_comics: add Powerup Comics and Danby Draws * Fixes declaration of Pref_Prefs::csrf_ignore to match IHandler::csrf_ignore * Prevent \"Undefined index: version\" events for git version with open_basedir after 9dabfbfa11 * Thu Dec 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1576.5df8dacf9: * api, getHeadlines: properly accept feed_id 0 * combined mode: add a hack (?) for .titleWrap width * Revert \"various fixes vor php 8.1 compatibility\" * Revert \"replace strftime with date\" * replace strftime with date * various fixes vor php 8.1 compatibility * combined mode: limit feed title element to 25% width * remove mixed type hints from function arguments because we still support PHP7 * * fix showing headlines for tag-based virtual feeds * API: allow retrieving headlines for tag-based feeds (bump api level to 18) * Sun Nov 28 2021 mrueckertAATTsuse.de- Update to version 19.8~git1566.831648e3c: * af_redditimgur: check content-type before downloading data for og:image and imgur pages * urlhelper: add debugging output for download attempts * mark clean() return value as nullable * api: don\'t try to pass null login/password when subscribing to feed * _get_version: * Sun Nov 21 2021 mrueckertAATTsuse.de- Update to version 19.8~git1561.7cfc30ac2: * format_backtrace: revise previous to only try truncating/adding actual strings * * sql_bool_to_bool: make parameter nullable * errorhandler: don\'t try to truncate null strings * UrlHelper::rewrite_relative: fix undefined offset warnings for URLs that lack schema/host (data: etc) * sanitize: make force_remove_images nullable * Fri Nov 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git1558.2b4ba59a7: * feeds/add: force cast category id to integer * Don\'t type DiskCache\'s $mimeMap. * Fix Undefined array key \"order_by\" * Fix \'view_mode\' default in API#getHeadlines() * Switch from null to false as the default for missing bool params. * Actually, always clean in Handler._param_to_bool() * Clean string params in Handler._param_to_bool() * Consistently handle param string to bool conversions in handlers. * config: use phpdoc comments for global options, etc * API/catchupFeed: properly pass is_cat as bool * * base plugin class: correct description of hook_house_keeping() * cache_starred_images: keep status files in a separate cache directory * _format_headlines_list: fix phpstan warning properly * API: fix unexpected null being passed to _order_to_override_query * API: force methods to return bool to make wrap() mistakes easier to track * api: a few more returns in login * api: don\'t return errors on login success * Minor correction to RSSUtils::cache_enclosures() $enclosures param type. * Switch FeedParser back to described behavior for setting \'error\'. * document a few more plugin hooks * add descriptions for some plugin hooks * schema: remove default subscription of admin to the forums rss feed * better check for docker * correctly show non-docker git installs as unsupported * pluginhost: set stricter AATTparams * adjust phpdoc tags for hook definitions/constants (make them reference each other) * not dead: Article.assigntolabel etc are exported methods called by frontend (Headlines.js) * mailer: don\'t crash if php mail() fails with no reported errors * Minor fix in \'classes/articles.php\'. * * DiskCache: add download() helper * Af_Comics_Gocomics_FarSide: cache linked images because it seems to be required anyway * when uninstall plugins, refresh plugins index instead of reloading entire prefs pane * update dojo/dijit to 1.16.4 * update phpstan to 1.1.2 (composer files) * update phpstan to 1.1.2; update php-qrcode to 3.4.1 * Minor fix to DOMNodeList#item() potential type (null vs false) * auth_internal: limit password throttling to failed login attempts not using OTP * remove themes/Makefile (obsolete, replaced with gulp) * deal with several DOMElement-related errors * unignore several phpstan errors * set better matching type hint on virtual feed object * require virtual feed plugins to implement IVirtualFeed * add IVirtualFeed interface for plugins implementing virtual feeds * revise phpdoc annotations for hook_search() * Fix a PHPStan warning in \'UrlHelper::rewrite_relative()\'. * Address PHPStan warnings for FeedEnclosure. * Address PHPStan warnings in FeedItem classes. * Change the param type for UserHelper::hash_password() $algo to appease PHPStan. * Also fix the param signature for Plugin#hook_hotkey_info() * Fix the return signature for Plugin#hook_hotkey_info() * Address PHPStan warnings in \'include/colors.php\'. * Address PHPStan warning in \'classes/pref/users.php\'. * Address PHPStan warning in \'classes/pref/system.php\'. * Address PHPStan warning in \'classes/pref/prefs.php\'. * Address PHPStan warning in \'classes/pref/labels.php\'. * revise prototype for hook_enclosure_imported * deal with most of warnings in plugins/af_readability * deal with phpstan warnings in plugins/note, nsfw, and share * deal with phpstan warnings in auto_assign_labels and bookmarklets * deal with (most of) phpstan warnings in auth_internal and auth_remote * Address PHPStan warning in \'classes/pref/filters.php\'. * Address PHPStan warning in \'classes/mailer.php\'. * deal with phpstan warnings in plugins/cache_starred_images.php * adjust some return types in urlhelper * deal with phpstan warnings in plugins/af_redditimgur.php * set annotations/types in af_psql_trgm * set missing annotations in af_comics * set phpdoc annotations for auth_base * revise phpdoc annotations for hook_sanitize() * Handle potentially null link, title, etc. in FeedParser. * plugin.php: add some minor method phpdoc corrections * userhelper: add a phpdoc variable class hint * deal with the rest of warnings in plugin.php * deal with a few more phpstan warnings re: base plugin class * fix HOOK_QUERY_HEADLINES being invoked with different argument lists, add some more phpdoc comments for base plugin class * * deal with some phpstan warnings in base plugin class * arguably better hack for incompatible plugins causing E_COMPILE_ERROR * deal with phpstan warnings in update.php * prefs: properly report failures when loading plugin list * show safe mode warning dialog in prefs * xhr.json: properly pass failure callback to xhr.post() * xhr.json: don\'t call resolve() on failed to parse data * pluginhost: add a hack to not crash on an incompatible plugin more than once (per login) - UGLY * normalize some mismatching hook function definitions to match base Plugin class * deal with phpstan warnings related to base authentication modules * Address PHPStan warnings in \'classes/pref/filters.php\'. * set some annotations on Plugin hook methods * experimental: bring back plugin hooks to Plugin base class once (to be improved/fixed with annotations later) * deal with some warnings in plugins/trgm,readability and base plugin class * no need to duplicate annotations * phpstan: deal with plugins/share * rework previous Plugin changes as phpdoc annotations * revert all plugin base class related changes to keep compatibility with extant plugins (for the time being) * minor: correct $cat type in Pref_Feeds#calculate_children_count() * Address PHPStan warnings in \'classes/pref/feeds.php\'. * Fix the type of Labels::update_cache() * fix phpstan warnings in classes/plugin-template.php * experimental: also don\'t keep base plugin template as a non-analyzed file * experimental: auto-generate and add all plugin hook methods to Plugin class * fix phpstan warnings in classes/sanitizer.php * fix phpstan warnings in classes/api.php * fix phpstan warnings in classes/feedparser.php * fix phpstan warnings in classes/db/migrations.php * Address PHPStan warnings in \'classes/api.php\'. * Typing IHandler methods, typing Handler_Public, fix type of $feed_id (might be tag). * Fix type of \'check_first_id\' in Feeds \'_format_headlines_list\'. * Switch class properties from PHP typing to PHPDoc for compatibility with PHP < 7.4.0 * Address PHPStan warnings in \'classes/mailer.php\', \'classes/opml.php\', and \'classes/pluginhandler.php\'. * Address PHPStan warnings in \'classes/rpc.php\'. * Fix some PHPStan warnings in \'classes/db/migrations.php\', \'classes/db/prefs.php\', and \'classes/debug.php\'. * Fix a warning in \'classes/counters.php\'. * PHPStan warning fix in \'backend.php\'. * Minor PHPStand warning fix in \'update.php\'. * Address PHPStan warnings in \'classes/feeds.php\'. * Update signature of handler \'csrf_ignore\' to include types. * Address PHPStan warnings in \'classes/article.php\'. * Address PHPStan warnings in \'classes/pluginhost.php\'. * Address PHPStan warnings in \'classes/labels.php\'. * Address PHPStan warnings in \'classes/diskcache.php\'. * Address PHPStan warnings in \'inclasses/digest.php\'. * Address PHPStan warnings in \'include/functions.php\'. * Fix \'TimeHelper::make_local_datetime()\' (null is allowed). * Address PHPStan warnings in \'classes/debug.php\'. * Address PHPStan warnings in \'include/errorhandler.php\'. * Address PHPStan warnings in \'include/controls_compat.php\'. * Address PHPStan warnings in \'include/controls.php\'. * Address PHPStan warnings in \'classes/userhelper.php\'. * Address PHPStan warnings in \'classes/timehelper.php\'. * Address PHPStan warnings in \'classes/sanitizer.php\'. * Address PHPStan warnings in \'classes/rssutils.php\'. * Address PHPStan warnings in \'classes/prefs.php\'. * Address PHPStan warnings in \'include/sessions.php\'. * Address PHPStan warnings in \'classes/counters.php\'. * Address PHPStan warning and tweak \'tasks\'+\'interval\' handling in \'update_daemon2.php\'. * Fix some additional PHPStan warnings in UrlHelper. * Don\'t use \'mixed\' directly (PHP 8+). * Initial go at PHPStan rule level 6. * Mon Nov 15 2021 mrueckertAATTsuse.de- Update to version 19.8~git1417.3a3fde1a2: * when uninstall plugins, refresh plugins index instead of reloading entire prefs pane * add IVirtualFeed interface for plugins implementing virtual feeds * xhr.json: properly pass failure callback to xhr.post() * xhr.json: don\'t call resolve() on failed to parse data * plugin cleanup re: phpstan 1.0 warnings * add two helper account access levels: - read only - can\'t subscribe to more feeds, feed updates are skipped - disabled - can\'t login define used access levels as UserHelper constants and refactor code to use them instead of hardcoded numbers * Tue Nov 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1411.7a52560e4: * Address PHPStan warning in \'update.php\'. * Address PHPStan warnings in \'include/colors.php\'. * Address PHPStan warnings in \'classes/urlhelper.php\'. * Address PHPStan warning in \'classes/pref/users.php\'. * Address PHPStan warning in \'classes/pref/prefs.php\'. * Address PHPStan warnings in \'classes/pluginhost.php\'. * Address PHPStan warning in \'classes/logger/sql.php\'. * Address PHPStan warning in \'classes/feeds.php\'. * Address PHPStan warning in \'classes/feeditem/common.php\'. * Address PHPStan warnings in \'classes/db.php\'. * Address PHPStan warnings in \'classes/config.php\'. * Bump PHPStan to 1.0.0 * HOOK_ARTICLE_BUTTON/HOOK_ARTICLE_LEFT_BUTTON: only try to parse markup if its actually there * css: make plugin button container a flexbox backend: pass plugin button generated code through domdocument to ensure its correctness; set data-plugin-name attribute on children to make them sortable via css * minor phpstan tweaks * require phpstan via composer * af_redditimgur: allow subscribing to teddit.net subreddits directly (rewriting to reddit.com) * pluginhost: update comments for HOOK_ constants to use phpdoc syntax; add HOOK_PRE_SUBSCRIBE * af_redditimgur: set some AATTvar hints * Translated using Weblate (Chinese (Traditional)) * Translated using Weblate (Chinese (Traditional)) * Translated using Weblate (Chinese (Traditional)) * Translated using Weblate (Chinese (Traditional)) * Translated using Weblate (Chinese (Simplified)) * Translated using Weblate (Chinese (Traditional)) * Translated using Weblate (Chinese (Traditional)) * Translated using Weblate (Chinese (Simplified)) * Translated using Weblate (Italian) * Translated using Weblate (French) * Thu Oct 21 2021 mrueckertAATTsuse.de- Update to version 19.8~git1380.377e0b812: * add data-orig-feed-title to generated headline markup * af_comics: pass PluginHost to filter constructors * Fix undefined array key \"output\" when adding new label * OPML improvements/fixes: * fix vfeed menu in three panel mode * fix wrongly renamed CLI options --debug-force-... to --force-... * headlines: attach context menu to vfeed title node * feed tree context menu: add an entry to open originating website * Fri Oct 01 2021 mrueckertAATTsuse.de- Update to version 19.8~git1371.949e2ab4d: * properly sanitize video poster attribute * Fri Sep 17 2021 mrueckertAATTsuse.de- Update to version 19.8~git1370.8ed927dbd: * OPML: multiple fixes * classes/opml: fix indentation; when importing, don\'t produce warning on filters with no rules defined. * Fix undefined index error * Thu Sep 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1366.36e174750: * fix label ordering in feed tree * fix password recovery * block useless usort() E_DEPRECATED for the time being * remove SELF_USER_AGENT custom constant, replaced with configurable Config::HTTP_USER_AGENT / Config::get_user_agent() * Pref_Feeds:calculate_children_count - fix operator precedence * Thu Aug 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git1360.080812317: * fix broken feed tree generation when categories are disabled * Make prefs feed search case-insensitive. * Use ORM more in \'classes/pref/feeds.php\'. * pull latest readability-php via composer * Use ORM in some more parts of \'update.php\'. * Tue Aug 03 2021 mrueckertAATTsuse.de- Update to version 19.8~git1352.73d14338a: * fix rendering of category filters on Uncategorized * Sat Jul 10 2021 mrueckertAATTsuse.de- Update to version 19.8~git1351.9f6237a1b: * main toolbar: clarify element ordering, fix some indents * prolong PHP session cookie automatically to stop hard logouts after SESSION_COOKIE_LIFETIME expires * Mon Jun 21 2021 mrueckertAATTsuse.de- Update to version 19.8~git1349.9f6237a1b: * Rewrite feed entry link as href content * Fix operator precedence * Update translation files * rebase translations * revise previous a little bit more * revise previous a little bit * UrlHelper::rewrite_relative(): * clarify some AATTdeprecation notices * Skip URI base on ALLOWED_RELATIVE_SCHEMES in rewrite_relative * add settings profile cloning * Mon May 31 2021 mrueckertAATTsuse.de- Update to version 19.8~git1336.92c78beb9: * apply usort workaround for readability-php because its authors were unable to do so for 3 months (https://github.com/andreskrey/readability.php/issues/99) * add workaround for prefs feed tree favicon placement * UrlHelper::rewrite_relative: don\'t try to feed NULL to with_trailing_slash() * feeditem_atom: support xml:base for enclosures and entry content UrlHelper::rewrite_relative: use base URL path if relative url path is not absolute (experimental) * split googlereaderkeys plugin into separate repo * add hotkeys J/K to move between unread feeds * Translated using Weblate (German) * API: bump api level to 17 * provide base configuration object in login response to skip on initial getConfig * Tue May 25 2021 mrueckertAATTsuse.de- Downgrade to version 19.8~git1326.9f6237a1b: https://github.com/nilsbraden/ttrss-reader-fork/issues/451 * Mon May 24 2021 mrueckertAATTsuse.de- Update to version 19.8~git1334.326850845: * UrlHelper::rewrite_relative: don\'t try to feed NULL to with_trailing_slash() * feeditem_atom: support xml:base for enclosures and entry content UrlHelper::rewrite_relative: use base URL path if relative url path is not absolute (experimental) * split googlereaderkeys plugin into separate repo * add hotkeys J/K to move between unread feeds * Translated using Weblate (German) * API: bump api level to 17 * provide base configuration object in login response to skip on initial getConfig * API: return custom sort types in getConfig * Fix:Plugins-share:init.php - site_url is NULL when share article by URL from archived * checking for PDO there is rather useless * sanity check: in single user mode, only test for admin user if migrations have been completed * use database-backed sessions in single user mode * Improve missing token check * Fix:Plugins-share:init.php - site_url is NULL when share article by URL from archived * include archived articles (which lack associated feed id) when browsing by tag * af_redditimgur: use core youtube vid helper * add urlhelper to extract youtube video id from url * fix combined/three panel transition to expandable mode * Fix:Plugins-share:init.php - site_url is NULL when share atircle by URL form archived * Sun May 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1309.e8f78181f: * af_redditimgur: instead of generating potentially blacklisted iframes (i.e. huge black boxes), save found youtube videos as post enclosures for af_youtube_... plugins to deal with later, if enabled * fix for previous changeset that broke expanded mode * Article.pack: add no-op for three panel mode * * cdm: render enclosures into content element * deprecate cdm.intermediate * implement lazy-load for rendered enclosures * simplify pack/unpack logic for articles * youtube_embed: use embed-responsive * Translated using Weblate (German) * FIX: public.php - Undefined index: feed_title * Fix `getCategory` method. * getPreviousFeed/getNextFeed: implement wrap around * functions_enabled: trim spaces from disable_functions php ini setting * if backend request \'op\' is empty fixed * pluginhost: add profile_get/profile_set helpers * fix noscript notifications * Translated using Weblate (Ukrainian) * Translated using Weblate (Polish) * Translated using Weblate (French) * Thu Apr 08 2021 mrueckertAATTsuse.de- Update to version 19.8~git1287.49ef15f11: * * fonts-ui: use system font family instead of segoe, etc. by name * disable segoe-specific baseline hack for the time being * OTP: generate longer secrets, also make them easier to read/copy * Adjust quotation marks in search query before \'str_getcsv\'. * Fix automatically showing next feed on catchup * revert back to lower contrast light theme by default, add separate light-high-contrast.less * don\'t use css-defined .svg files because firefox * fonts-ui: add Cantarell * light theme: increase contrast * fix previous issue properly * Revert \"clip max displayed counter value to 9999 because of container node width\" * clip max displayed counter value to 9999 because of container node width * yet another flex feedtree attempt * Revert \"Revert \"another attempt at flex-based feed tree\"\" * don\'t try to j/k move to nonexistant feed * unify return values for getPreviousFeed and usages of both prev/next * * Feeds.openNextUnread: fix * model.getNextFeed: make sure return values are consistent, stop wrapping back to starred * Revert \"another attempt at flex-based feed tree\" * another attempt at flex-based feed tree * share: move og:image back to head * Switch most of API to ORM * remove model.getNextUnreadFeed; unify code with feedTree.getNextFeed * prefs: allow setting email if it was previously blank * Minor cleanup in \'Handler_Public->getProfiles\' * Fix a couple of array index warnings in \'Handler_Public->forgotpass\' * fix excessive CPU usage on linux chromium caused by animated SVG icons * Switch \'Handler_Public->forgotpass\' to ORM * Switch \'Handler_Public->login\' to ORM, fix \'Handler_Public->getProfiles\' * Switch \'Handler_Public->rss\' to ORM * Switch \'Handler_Public->getProfiles\' to ORM * feed tree: set cursor pointer on tree label * fix loadingNode offset for feeds * filter test dialog: remove .gif; cleanup markup * Switch \'RSSUtils::update_basic_info\' to ORM * use svg icon for headlines loadmore prompt * use svg icon for the subscribe dialog (night mode) * use svg icon for the subscribe dialog * use svg icon for packed article placeholders * update night theme re: previous * add svg loading indicators * simplify feed tree expando/loading/feed icon handling * remove some hardcoded color values * remove published opml (use CLI instead) * fix selected feedtree item being invisible in dark theme * Fix E_NOTICE in `add_handler()`. * feed tree: css cleanup; set cursor * error log: fix column widths * nsfw: set cursor pointer * mailer: stop warning if to_name is unset (it\'s optional anyway) * Translated using Weblate (Czech) * Translated using Weblate (Chinese (Simplified)) * Translated using Weblate (Italian) * Update translation files * Mon Mar 15 2021 mrueckertAATTsuse.de- Update to version 19.8~git1225.15b39a534: * update editorconfig * set orm and pdo mysql charset on connection * only show right-side feed icon for vfeeds * * limit progressfunction debugging to size quota exceeded notifications * af_redditimgur: reparent generated iframes outside of post table * Add coalescing operator to otp_enabled when changing user password * make description clickable in plugin list row * api: don\'t try to pass null site_url to Article::_get_image() * cdmToggleGridSpan: toggle classname instead of a style property * add HOOK_HEADLINES_SCROLL_HANDLER * sticky header: better positioning strategy * gettextify previous * throttle login attempts, controlled by Config::AUTH_MIN_INTERVAL * schema: add ttrss_users.last_auth_attempt * shorten_expanded: reduce log spam * grid mode: limit word breaking to link elements * get_override_links: actually return overrides * valid OTP code should not be enough to login, oops * * shorten_expanded: use ResizeObserver (DUH) * add HOOK_HEADLINES_RENDERED * update zoom layout a bit * add some media queries to improve main UI on small-width devices * continuation of the css cleanup * css cleanup, combined mode, fonts * Article.cdmToggleGridSpan: also set as active * grid: add a header icon (and a hotkey) to toggle article span entire row * add Config::LOCAL_OVERRIDE_JS * route Logger:log() to user_error() if there\'s no adapter * remove previous spacer-specific hack, not needed anymore * exp: set last odd grid child to span all columns * nsfw plugin: we don\'t actually need any JS * fix related to Promise.allSettled() returning a bit different result object * grid: add workaround for a single loaded headline not spanning all columns * * it feels weird for requireIdleCallback() to be optional while more modern browser features are required * simplify browser startup feature check a bit * adjust grid view footer (3) * adjust grid view footer (2) * adjust grid view footer * shorten stuff in af_zz_vidmute * in grid mode, also force word-break .intermediate (enclosures) * shorten_expanded: remove loading=lazy on the js side instead * shorten_expanded: no need to hook on HOOK_SANITIZE anymore * instead of a fixed column layout, fit based on minimum column size * shorten_expanded: increase timeout * * shorten_expanded: use promises instead of a timeout hack * normalize some icon colors * stop setting specific background color on .cdm.expanded * fix crash in preferences due to headlines-frame missing * small stuck header fixes in grid mode * fix headlines-spacer height in grid mode * in grid mode, hide feed title from header * grid view tweaks * add hotkey to toggle grid view * use proper syntax for equal-width columns * fix vfeed group subtitle in grid mode * some minor grid stuff * set #headlines-spacer, etc, to span grid columns * experimental: add preference to show combined mode headlines as a 2 column grid * set border color on that too * support coloring counters by feed-id/is-cat; set fresh counter to green * add HOOK_HEADLINE_MUTATIONS, HOOK_HEADLINE_MUTATIONS_SYNCED * show E_COMPILE_ERROR in event log at higher severity levels * error log: allow wrapping long filenames * reorganize update.php a bit, remove unneeded options * add another coalesce for rule inverse * get_article_filters: set coalesce values for inverse and match_any_rule * app password list: fix th/td alignment * af_redditimgur: import link flair as tags * describe global settings in classes/config.php * update messages.pot * Default to null \'rv\' for plugin update check. * cleanup javascript_tag and stylesheet_tag * show user css editor before xhr is completed * search dialog: add button icon * api: add support for setting score (bump api level to 16) * fix some php8 warnings * minor cleanup related to toolbar-main (use dijit methods, etc) * fix digest preview not working on mysql because of a quoted LIMIT argument * add to previous a bit * check updates one plugin at a time * * af_redditimgur: optionally import score * add pluginhost->set_array() to set many plugin settings at once * HOOK_ARTICLE_IMAGE: stop after first provided match * nsfw: fix wrong return parameter count in hook article image * add nsfw.png placeholder * nsfw: support API clients * fix previous to actually save enabled plugins * prevent list of enabled plugins resetting if saved while in search results * make rendered labels clickable * logger: use constants instead of hardcoded string literals * hide event log accordion pane if LOG_DESTINATION is not sql * allow blank override values * set plugin list name width same as preferences table * add some icons, remove some words * add some more dialog icons * reduce overhead in hash set/get * Fix \"array offset on value of type null\" for $error and $old_error * fix plugins-list line height * some small layout fixes, remove a few inline styles * render list of plugins on the client * set some more type hints * general cleanup, set some type hints * fix some leftover variables * * don\'t try to update custom set feed favicons * cleanup update_rss_feed() a bit, use ORM * fix plugins not shown as already installed if they have more than 1 dash * The type hint for \'DAEMON_MAX_CHILD_RUNTIME\' should be T_INT * use separate database column for OTP secrets (migrate previous format if needed) * schema: add separate otp_secret column * login page: fix a warning if return is unset * add a bunch of button icons * sessions: stop validating against hash of user agent because chromium is sending different agent headers for whatever reason, example: * don\'t check for plugin updates automatically on pane open * split af_zz_noautoplay into a separate repo * af_comics filters: don\'t try to load empty html * split no_url_hashes into a separate repo * split scored_oldest_first into a separate repo * rename unfairly prefixed get_enclosures() in feeditem * plugin installer: show last commit timestamp * Translated using Weblate (Czech) * Translated using Weblate (Chinese (Simplified)) * Thu Mar 04 2021 mrueckertAATTsuse.de- Update to version 19.8~git1099.d016f7a49: * show installed plugins in the installer list * Fix Undefined index when using Single User Mode * shorten plugin list action buttons * split af_unburn * a bit better search behavior for plugin installer * shorten install button text * reduce plugin installer entry height * _get_available_plugins: decode as array * split vf_shared * add search to plugin installer * split a bunch of plugins into separate repos * use computed style for element.prototype.visible * fix a bunch of bookmarklets login forms not leading back * use orm for settings profiles stuff * log applied migrations * migrations: refuse to apply empty schema files * migrations: don\'t try to use transactions on mysql * remove ttrss_version from base schema * bring back web dbupdate using new migrations system * sessions: don\'t check schema version * wip for db_migrations for core schema * support loading base schema as latest version * wip: initial for db_migrations * Thu Mar 04 2021 mrueckertAATTsuse.de- Update to version 19.8~git1074.0cb719a40: * add basic local plugin uninstaller * add word wrap for git stdout/stderr pre elements * add basic plugin installer (uses tt-rss.org) * add update button for system plugins * reduce Amount of Caps Used in Multiple Dialogs * add a send test email button to prefs/system * previous one was not good enough i guess * config::make_self_url() strip index.php etc * * remove _SKIP_SELF_URL_PATH_CHECKS * simplify SELF_URL_PATH checks wrt trailing slash * show timing information in xhr.post/json * reddit: import comment counts * use orm in some more places; prevent _get_cat_title from hitting the db for uncategorized * add digest preview button, also fix a bunch of bugs * changed skip and limit to coalesce to 0 instead of \"\" * Fix undefined array key warnings when using iOS app * update previous (comment) * initialize Db object early because otherwise ORM might be used unconfigured * move dbupdater to db/updater; move base SCHEMA_VERSION constant inside db/updater class * pluginhost: remove namespace classloader, plugins should use composer instead * limit user data sent to frontend * user editor: allow toggling otp * use orm when setting personal data; fix some warnings in mailer class * store widescreen mode setting in preferences instead of a cookie * move around some methods in base plugins class * use ORM for article _labels_of/_feeds_of * use separate connection for logging * Tue Mar 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1046.c4eaab8a3: * feeds/_add_cat: use ORM * use ORM when subscribing feeds * sql logger: use orm * revise behavior of Feeds::_cat_of * article/redirect: use orm (cast id to int) * article/redirect: use orm * Tue Mar 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1040.f195e86be: * don\'t rely on exit code when checking version (again) * use orm for feed access keys * * sanitize: never rewrite relative links to our own prefix * use Config::get_self_url() instead of get_self_url_prefix() in a bunch of places * remove (unused) prefs/toggleAdvanced * use orm for app password stuff * use dash instead of space when invoking git to get version * Get the version as an array in RPC->checkforupdates. * don\'t try to pass string literal NOW() to ORM as a timestamp * revert back load_filters-related changes * delete Article getScore (seems to be unused) * use orm for a bunch of short feed/cat queries * userhelper: use orm for a few more user-related things * userhelper: use orm for some things * initial for idiorm * Mon Mar 01 2021 mrueckertAATTsuse.de- Update to version 19.8~git1024.f96abd2b5: * generate_syndicated_feed: timestamp is a strtotime() expression, not an integer * come to think of it, we don\'t need it at all * auth_internal: don\'t try to get otp_enabled on old schema * simplify internal authentication code and bump default algo to SSHA-512 * move version-related stuff to Config; fix conditional feed requests * hide version for bundled plugins because it\'s meaningless; for everything else support showing version using git (if about[0] is null) * we don\'t need to initialize urlhelper properties * move startup checks to Config, set a bunch of AATTdeprecated annotations * speed up plugin updating a bit, fix some phpstan warnings * check schema version on backend calls because session stuff does it anyway and it\'s already cached * sanity_check: config.php is now optional, also cleanup some error messages * move material-icons to composer * OTP form: simplify layout, use dojo controls * some plugin updater UI improvements * move all $fetch globals to UrlHelper * plugin updater: show changes before updating * add plugin updates checker into normal updates checker * disable plugin update checking if CHECK_FOR_UPDATES is disabled * don\'t try to update all plugins * reload prefs when plugin updater is closed * only show plugin update buttons when needed * feeds/add: hide php8 warning * af_redditimgur: allow adding custom tags for NSFW posts * add basic updater for stuff in plugins.local * add an option to disable conditional counters * bump schema for ttrss_user_labels2 indexes * don\'t rely only on label_cache contents when displaying headline labels * don\'t try to compare null value against anything * use absolute namespace for readability * exclude a bunch of phpunit test files * remove a bunch of return type hints that didn\'t quite fit * * switch to composer for qrcode and otp dependencies * move most OTP-related stuff into userhelper * remove old phpqrcode and otphp libraries * add missing composer files * pull latest readability-php via composer * when browsing by tags, return same set of columns as normally * add pluginhost->get_array() shorthand * Fix the type hint for \'_DEFAULT_VIEW_MODE\'. * rebase-translations: disable everything except for messages.pot * silence php8 warnings in otp secondary login form * check if client-presented URL scheme is different from one configured in SELF_URL_PATH * _get_headlines: don\'t try to use _SESSION uid * we need to compile .mo files after all * Translated using Weblate (Italian) * Translated using Weblate (Russian) * Update translation files * match a few more translated strings * rebase-translations: try only dealing with messages.pot, let weblate rebuild .po files * Update translation files * rebase translations, fixing a few JS strings not mached; remove obsolete scripts (2) * rebase translations, fixing a few JS strings not mached; remove obsolete scripts * Translated using Weblate (Russian) * Translated using Weblate (Chinese (Simplified)) * Translated using Weblate (Italian) * Translated using Weblate (French) * upd previous * add Prefs::DEBUG_HEADLINE_IDS * add a separator before HEADLINES_NO_DISTINCT * feeds/view: silence view_mode warning * add an option to disable DISTINCT on headlines query (unless it\'s Labels category) * silence phpstan warning * cleanup previous * pass translations to frontend as a json object * prefs: migrate after cache has been filled to skip 1 pref request * cache schema version better * reduce overall amount of unnecessary database queries * wrap prefs->migrate() into a transaction block * userhelper: only notify failed login for actual logins * fix crash caused by non-numeric non-null _SESSION[uid] passed to sql logger * enforce some stricter type checking for loggers * logger: shorter syntax * api: remove base64 encoded passwords (wtf), log all authentication failures in userhelper * stop caching schema version entirely, fix some session_start() related warnings * prefs cleanup * get_version: pass int to strftime() * use constants in get_pref()/set_pref() * pref-prefs: use constants instead of hardcoded strings * prefs: don\'t try to do anything on schema < 141 * cleanup a bunch of old prefs code * fix checkboxes shown as checked when they\'re not with mysql * updater: show owner login instead of just uid * deal with feed update scheduling w/ new prefs * add fallback for feed_language on edit-feed-saving * remove unused data from schema files * fix get_pref always using default profile; remove unneeded code from db_prefs * implement prefs UI based on new prefs class and a few more things * add prefs caching * bump schema for upcoming prefs overhaul * initial (wip) for new prefs: add missing * initial (wip) for new prefs * reorder debug targets * Update translation files * rebase translations * add hide/show events for feeds sidebar * add a hack to position labels on a dijit toolbar better * decouple runtime-info object from counters * request label counters conditionally * fix warning in counters::get_feeds() * pass array to setScore * pass a bunch of related arrays properly to backend * fix typo * only request counters once for headline mutations * cats_of: enforce owner_uid * no special counter handling for catchupAll * _cats_of: only request parents if needed * try to calculate counters conditionally based on feed ids * add Errors.php * drop errors.php and simplify error handling * App.requestCounters() is not a thing * rename TTRSS_SESSION_NAME to SESSION_NAME * config: add a type hint system * add some ;s * floIcon: declare images property * cleanup some defined-stuff * af_redditimgur: fix an oopsie * cleanup config.php-dist * move db-prefs shortcut functions to functions.php * allow adding custom config options * update config.php-dist * finalize config:: migration; make config.php optional * update gitignore * don\'t include config.php everywhere * migrate the rest into Config:: * add config.php * wip: initial for config object * Check whether data is parsable by \'imagecreatefromstring\' in jimIcon. * dirname(__FILE__) -> __DIR__ * do not use define_default() because it screws with static analyzers * Remove check against the old file in \'RSSUtils::check_feed_favicon\'. * fix several issues reported by phpstan * add chrome configuration for debugging * add launch.json for xdebug * reinstate HOOK_RENDER_ENCLOSURE * Try to limit max favicon size, don\'t store current/old in a var. * add phpstan config * pref-prefs: switch to new control shorthand in a few places * Let \'RSSUtils::check_feed_favicon\' update existing favicons. * move published opml JS code to pref helpers * batch editor: comment out getChildByName * batch feed editor: use tab layout, cleanup * Open the default feed after unsubscribing. * move published OPML endpoint to public.php * minor filter UI layout fix * prevent creation of filter rules matching no feeds * Element visible: check for offsetHeight/offsetWidth * deal with filter actions UI * for the most part, deal with filter rules UI * more filter stuff * prevent filter selected text dialog from opening in wrong order * a few more methods shuffled around * first for filter frontend overhaul * haven\'t i fixed this already * also disable Article.completeTags * rpc: disable completeLabels for now * feed editor: use client dialog * wip: feed editor client-side * bookmarklets: cleanup some more markup * Fix an undefined array key warning in \'catchupFeed\'. * Translated using Weblate (Italian) * Translated using Weblate (Chinese (Simplified)) * Fri Feb 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git849.053b262aa: * rename public.php/cached_url to cached * move bookmarklet-related methods out of public.php into the plugin * fix for startup crash because of classes containing spaces * Fri Feb 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git846.cf249d7e8: * modify classname helpers to use element.classList; fix feed debugger & share--get * headlines.select: maybe fix another one * af_readability: fix selector * fix height of dijit input boxes embedded into toolbars * render feed icon markup on the client * format note on the client * setArticleTags: always return tags from the db * add onTagsUpdated similar to onLabelsUpdated * render tags on the client * use template strings in a bunch of places instead of id concatenation * render headline labels on the client * * switch to xhr.post() almost everywhere * call App.handlerpcjson() automatically on json request (if possible) * show net/log indicators in prefs * migrate a bunch of xhrPost invocations * migrate xhrJson invocations to the new helper * add element fadeout/fadein and a shorter xhr helper * table helpers: don\'t try to iterate over a single element * use .closest() instead of .up() to lookup parent by selector * fix some eslint-related stuff * fix eslint configuration * cleanup some unused code, fix App.byId() invoked by wrong name * properly validate feed editor dialog * move stuff in common.js around a bit * bring back hash functions * add $/423 shims * get rid of a few more prototype-isms * compat shim fixes * compat shim fixes * add Element toggleClassName * initial for RIP prototype/scriptaculous * fix hotkey help toolbar action * rebase translations * rework previous to be even less jumpy * rework previous to be less jumpy * * use es5 (?) default parameter values for some functions * when moving to next article, try to show hsp if its next * af_psql_trgm: cleanup * bookmarklets: cleanup * user details: cleanup * remove unneeded headings * shorten many invocations of Ajax.Request in inline form methods * af_proxy_http: markup cleanup * small markup adjustment * profiles: use client dialog; move related methods to pref-prefs * cache_starred_images: don\'t try to use undefined array index * * add (disabled) shortcut syntax for plugin methods * add controls shortcut for pluginhandler tags * add similar shortcut for frontend * allow plugins to selectively exclude their methods from CSRF checking * * App: rename hidden to hidden_tag * search: use client dialog * add some form field helpers * search dialog: bring back id of language dropdown * af_proxy_http: don\'t try to proxy back to ourselves * cache_starred_images: minor fixes * delete unused mail .pngs * mail, mailto: cleanup markup * pluginhandler: reject method requests without CSRF * plugins: load dialogs via xhr instead of http * fix some php8 warnings * don\'t show E_USER_DEPRECATED on the frontpage * af_psql_trgm: don\'t load dialog via http * pluginhandlers: post notice if pluginmethod is requested without CSRF token * af_readability: cleanup markup * close_button: fix color not applying * RIP af_tumblr_1280 * af_redditimgur: cleanup markup * af_readability: cleanup markup * af_comics: markup cleanup * share: markup cleanup * * implement shortcut syntax for exposed plugin methods * move shared article rendering code to share plugin * share plugin: cleanup, fix icon not highlighting properly * cleanup markup in some plugins, make nsfw generate dijit widgets * Article.render: parse dojo widgets * replace a few more controls to new style * controls_compat: comment out most of them * replace a few more controls to new style * fix floicon not imported from global namespace * move session-related functions to their own namespace * move rgb/hsl functions to their own namespace * rework controls to accept parameters as array * amend previous to fix actual underlying problem (double escaping) * hidden_tag: temporarily prevent htmlspecialchars() to stop embedded JSON from breaking * use a few more control helpers for checkboxes * login form: use control helpers * remove backend helper and move its only function to rpc for the time being * feed debugger: use hidden helpers; add button helpers * replace print_hidden with hidden_tag * add namespaced controls with unified naming; deprecated old-style control shortcuts * pref-labels: remove unused code * CommonDialogs.addLabel: remove long unused parameters * _format_enclosures: always return entries array * feeds/view: fix php8 warning * shorten_expanded: fix for posts without attachments * db-prefs: minor cleanup, add warnings if unknown prefs are requested * pref-filters: fix some warnings * counters: just merge everything at once * move reset_password to UserHelper * drop legacy DB interface and related sanity checks * remove the rest of db.php; rename some leftover methods in feeds * move bookmarklet-related subscribe_to_feed_url to bookmarklet plugin * drop legacy db_ functions wrapper * router: add additional logging for refused requests; reject requests for methods starting with _ * api: unify naming * counters: one more * dbupdater: unify naming * diskcache: unify naming * prefs: unify naming * counters: unify naming * article: unify naming * feeds: unify naming * subscribe to feed: use client dialog * edit tags: use client dialog * render enclosures on the client * api: rewrite article urls at the very end to prevent plugins which expect source URLs from breaking * Revert \"api: get flavor image from plugin-processed content\" * api: get flavor image from plugin-processed content * shared opml and feed dialogs: remove unique target element id, move associated methods into dialog * renderToolbar: support empty data i.e. dashboard feed * render headline-specific toolbar on the client * Lazy load image attachments * SingleUseDialog: destroy existing widget with same id on create * remove old-style markup from exception dialog * pref-users edit: use client dialog * add Handler_Administrative * pref-users/add: remove unused variable * * remove users/filters toolbar edit button (just click on it) * fix title of edit filter dialog always showing create filter * move logout_user() to UserHelper * pref-users: cleanup index * prefs system: load phpinfo using inline method * pref prefs: load secondary tabs when needed * appPasswordList: markup cleanup * pref prefs: split index into manageable chunks * use shortcut echo syntax for php templates * pref-feeds: load error button via xhr * remove getinactivefeeds (duplicate functionality) * batch subscribe: use client dialog * feeds with errors: use client dialog * inactive feeds: use client dialog * pref feeds: index cleanup, split into several methods, use tabs to maximize space for feed tree, persist feed tree state * minor fixes re: previous * pref filters index: markup cleanup * prefs system: markup cleanup * pref-labels index: use cleaner markup * pref-labels/index: cleanup * label editor: use client dialog * fail better if requested article URL is blank * Translated using Weblate (French) * fix a bunch of warnings related to generated feeds * pref helpers: move some methods to their own sections * drop ENABLE_GZIP_OUTPUT; system prefs: load php info only if needed * fix a few more session-related warnings * validate_csrf: remove warning * add HTTP_ACCEPT_LANGUAGE handling for php8 * Update translation files * rebase translations * silence some more eslint warnings * prefs: fix published shared URL dialog * silence (or fix) a bunch of eslint warnings * RIP tag cloud: last of the vanilla popup dialog system * batchsubscribe: xhr * move some dialogs to xhr loading * force _ENABLED_PLUGINS to string when passed to pluginhost * RIP easy-installer * RIP self-registration * more dialog-related cleanup * * OPML import: don\'t reload everything, just feed tree * dialogs: use auto-destroying dialog for almost all dialogs instead of destroying them manually * some general dialog-related cleanup * fix previous: secondary dialog not opening because of onLoad * * filters: remove duplicate code, overall cleanup * check if some tres exist before trying to reload them * Add defaults to api.php variables * edit filter dialog: cleanup * fix typo * dialogOf: deal with both raw DOM elements and widgets * remove customizecss from csrf-ignored methods * various dialog-related fixes; stop referring to many dialogs by name; move filter test initial dialog to client side * rework a few more dialogs to use App.dialogOf() * * customizeCSS: client dialog * remove hardcoded width from most dialogs (move to css) * add helper to easily get dialog from its widget * rework some dialog buttons to use current object instead of calling dialog by name * remove OPML.onImportComplete * opml import: no more iframe, use client dialog * fix typo introduced by 4182018cb7 * remove explainError server-side dlg * generated feed: use client dialog * publishedOPML: use client dialog * disable themes in safe mode; rework safe mode warning/login prompt * shorten pref tab names; make log-alert clickable * format_backtrace: don\'t try to use resources as strings * add UserHelper::find_user_by_login() and rewrite some user checks to invoke it instead of going through PDO * authentication: make logins case-insensitive (force lowercase) * fix warning in profile edit dialog (2) * fix warning in profile edit dialog * pref/prefs: fix warning when in non-default profile * close_button: fix warning * make feed/cat nested dropdowns a bit more readable * fix 2 warnings in feed editor * api: one more php8 warning * pluginhost: a few more warnings and type hints * api: pass hook object payload by reference * api: fix some php8 warnings (4) * api: fix some php8 warnings (3) * make ARTICLE_KIND_ constants class members * api: fix some php8 warnings (2) * api: fix some php8 warnings * rewrite some more hooks in classes/feeds * rewrite some more hooks * front page log checker: filter out idiotic GD warning * login: fix profile warning * opml: normalize class name * pluginhost: add some type hints * even more hooks * db: add type hints * more hooks, also add type hint for PluginHost::getInstance() * some more hooks * pluginhost: note hook function prototypes * remove PHPMD.UnusedFormalParameter * pluginhost: deny hook registration to plugins which lack relevant implementation methods * fix hierarchy of authentication modules, make everything extend Auth_Base and implement hook_auth_user() for pluginhost * log viewer: disable previous page on page 1 * api: rewrite a few more hooks * rewrite a few more hooks * move some old-style handlers to new callback ones * prefs: fix user plugins shown by incorrect criteria * pluginhost: rework run_hooks() to be shorter, add callback variant; implement exception handling for both * Mon Feb 08 2021 mrueckertAATTsuse.de- Update to version 19.8~git625.20b56b5b2: * pluginhost: catch errors while loading plugin source code * pluginhost: catch fatal errors in plugin init * af_psql_trgm: fix warning * fix several warnings related to feed editor * add phpstan dummy file * dlg: fix unset param warning * sanity checks: use better CLI detection, shorten most of the text * revert jimIcon stuff * oops, remove unneeded warnings * jimIcon: hide GD warning * public/subscribe: fix warnings * bookmarklet: encode URL properly so special characters won\'t get lost * fix even more warnings reported by phpstan * fix some more warnings reported by phpstan * fix several warnings reported by phpstan * pref-users: css fixes * error log: fix severity dropdown * fix some warnings in prefs (filters, users) * error log: make it more readable * log viewer: show total pages * af_redditimgur: don\'t try to load empty html; fix a warning in update debugger * fix a few more warnings * event log: add pagination * check a few more php8 warnings * _color_pack: define variable before using * fix clean() for arrays and user plugin list * more php8 fixes mostly related to login * initial WIP for php8; bump php version requirement to 7.0 * add workaround for gulp4 not updating file timestamps on build * Translated using Weblate (German) * night theme: disable on-hover undimming * night theme: dim images unless hovered over * Wed Jan 27 2021 mrueckertAATTsuse.de- Update to version 19.8~git590.64f7ac0e7: * dark theme: fix color of .dijitSplitterHover * Update \'CONTRIBUTING.md\' * update contributing.md due to gitea changes * af_redditimgur: handle youtube /embed/ URLs * feed debugger: wrap long lines * af_redditimgur: add some last minute handling for generic preview media URLs provided in JSON * af_redditimgur: * draw a basic form for testurl() if no url is given * only process specific JSON media files/child elements until something is found * handle generic preview images for self posts (not link posts because link is handled afterwards) * af_redditimgur: cleanup, rework to embed stuff from reddit-provided JSON first * add a hack (Headlines.unpackVisible) to workaround against unpack observer sometimes missing articles * af_redditimgur: add basic support for reddit galleries * af_redditimgur: shorten href stuff * Archive cleanup: - remove code to manually archive/unarchive articles - remove ttrss_archived_feeds/orig_feed_id handling - the whole thing was implemented for this data to be kept indefinitely; it doesn\'t make a lot of sense to deal with this stuff now that it is expired after one month anyway (same reasons as feed browser being removed - privacy) - remove \"originally from\"-related stuff because of the above - also remove unused remaining frontend/backend code related to feed browser (rip) * remove CommonDialogs.feedBrowser() * Select... dropdown: replace dijit Select with DropDownButton, simplify layout PluginHost: add HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM Headlines.onActionChanged: removed * scored_oldest_first: update sort caption * add plugins/scored_oldest_first * remove show as feed from Select dropdown in main toolbar * remove menu options to manually un/archive articles * pluginhost: load_data: check schema last * pluginhost: load plugin data automatically (also marks load_data method as private) * pre: set white-space: pre-wrap to remove horizontal scrolling * HOOK_ARTICLE_EXPORT_FEED: also pass owner_uid * Translated using Weblate (Italian) * af_psql_trgm: * Include tags for HOOK_ARTICLE_EXPORT_FEED. * Translated using Weblate (Chinese (Simplified)) * Update translation files * rebase translations * translations: rebase, add T_nsprintf * feed editor: show purge interval correctly if FORCE_ARTICLE_PURGE is set * auth_remote: use empty() instead of isset() while checking headers * fix auth_remote broken by previous commit * auth_remote: rewrite header checking to be more readable * get_user_ip: remove REMOTEADDR for the time being * use X-Real-IP headers if possible while authenticating * af_redditimgur: also blacklist in-content links * daemon: clarify some task-related messages * event log: add severity filtering * edit tags dialog: initialize autocomplete in onShow (instead of onLoad) because of xhr * search dialog: populate current search values onShow instead of onLoad because the dialog is preloaded via xhr * Translated using Weblate (Chinese (Simplified)) * Add support for HTTP_REMOTE_USER variable for user authentication * BLACKLISTED_TAGS: use textarea for editing; normalize value when saving * update_rss_feed: fix BLACKLISTED_TAGS not working properly, simplify tag-related code * purge_feed: limit debugging to LOG_VERBOSE * af_redditimgur: also rewrite in the API handler * af_redditimgur: add option to rewrite reddit URLs to teddit.net * Actually return the array of errors... * redditimgur: blacklist github because it usually resolves to a huge profile photo of someone * Switch from \'vsprintf\' to \'sprintf\' in another place. * purge_feed: shorten one log message * purge_feed: add more debugging output * feed editor: properly show global purging interval as disabled * purge_intervals global: set \'1 week old\' to mean 7 days instead of 5 (???) * Use correct \'sprintf\' function and other minor fixes in Pref_Feeds. * Remove duplicate block in \'classes/pref/filters.php\'. * Fix some \'isset\' checks in \'classes/pref/prefs.php\'. * Handle potential absence of a URL path in UrlHelper. * Make \'ttrss_error_handler\' compatible w/ 8. * Don\'t do deprecated \'libxml_disable_entity_loader(true)\' under PHP 8. * Switch to \'get_error_types()\' to ensure availability in \'include/functions.php\'. * Only do sanity checks for self URL if we can create a valid URL. * Switch to recommended \'default_charset\' to fix \'gettext\' error. * Address param order deprecation warning for \'af_redditimgur\'. * Fix passing options to plugins in \'update.php\'. * Mon Dec 14 2020 mrueckertAATTsuse.de- Update to version 19.8~git514.83962a856: * feed debugger: allow setting log level to LOG_EXTENDED * - move sphinx plugin to a separate repo - regenerate config checks without sphinx-related variables * shorten_expanded: remove loading=lazy from images if enabled * queryFeedHeadlines: - there should be no need for DISTINCT query when checking for first id - fix DISTINCT query part being undefined when browsing by tags - add query debugging for tags * get_article_image: add support for ARTICLE_KIND_ALBUM * setArticleTags: prevent duplicate tags being assigned if called twice editTagsDlg: prevent dialot from being submitted twice normalize_categories: filter out empty values that failed validation * viewfeed debugger: open properly for categories * queryFeedHeadlines: bring back DISTINCT for a limited set of columns * get_article_image: return basic kind to which flavor image belongs * viewfeed: reintroduce timestamps, fix debugging, fix some indents * queryFeedHeadlines: properly define for a few more variables * queryFeedHeadlines: make sure feed_check_qpart is always defined * queryFeedHeadlines: no longer select DISTINCT headlines for performance reasons (this also removes _HEADLINES_QUERY_NO_DISTINCT) * experimental: add optional _HEADLINES_QUERY_NO_DISTINCT to disable DISTINCT keyword in queryFeedHeadlines query * add support for an override stylesheet which applies to all users * feed editor: also show default value for purge interval * feed editor: show actual value of default update interval * don\'t select next unread feed when marking as read last week, etc. * use more consistent margins for left toolbar icons * prevent horizontal scrolling in filter editor dialog if rules are very long * af_readability: allow appending to original summary instead of always replacing it, some minor code cleanup * URLHelper: fix E_DEPRECATED error related to idn_to_ascii() * allow audio to be sent to client from the cache * Disable mobile Safari right-click menu on headlines. * update jimIcon (https://github.com/jimparis/jimIcon/pull/4) * Fix incorrect parenthesis placement in `count()`. * Translated using Weblate (Polish) * Translated using Weblate (Polish) * Translated using Weblate (Polish) * Translated using Weblate (Polish) * Translated using Weblate (German) * Translated using Weblate (Polish) * Translated using Weblate (Dutch) * Translated using Weblate (German) * Revert \"fix HOOK_ARTICLE_RENDERED_CDM never being called\" * Revert \"somewhat experimental: disable article packing/unpacking, render content immediately\" * Wed Oct 21 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2652.8d75a542c: * Translated using Weblate (Persian) * mark feed as having an error if update task fails (and no last error is already stored for this feed) * Translated using Weblate (French) * Translated using Weblate (Chinese (Simplified)) * Translated using Weblate (Italian) * Update translation files * rebase translations * Translated using Weblate (Italian) * Ensure proxy_all setting is saved in database. * fix HOOK_ARTICLE_RENDERED_CDM never being called * somewhat experimental: disable article packing/unpacking, render content immediately * Translated using Weblate (Persian) * Translated using Weblate (Persian) * Translated using Weblate (Ukrainian) * Translated using Weblate (Persian) * api: catchupfeed: allow passing \'mode\' (optional), bump api version * when auto disabling feeds based on DAEMON_UNSUCCESSFUL_DAYS_LIMIT only consider feeds with recent attempts to update (to prevent clashes with not recently logged users, etc) * hide uninteresting errors in several DOMDocument->loadHTML() invocations * enable Farsi locale in the UI * add DAEMON_UNSUCCESSFUL_DAYS_LIMIT tunable (defaults to 30 days) * set ttrss_feeds.last_successful_update as needed * Translated using Weblate (Persian) * set session.cookie_lifetime to 0 initially instead of a rather useless min() * updater: set --update-schema as optional-value * housekeeping: add task to cleanup orphan feed icons * Logger::log - allow specifying errno bump severity of PDO exception log messages to E_USER_WARNING * exclude E_USER_NOTICE from recent events icon * update_rss_feed: fallback to previous method if passthru() is not available * validate url: feed urlencoded() URL to filter_var() only * accept -1 as a valid exit code for per-feed update processes * schema: add ttrss_feeds.last_successful_update * allow updating database schema in batch mode * don\'t mention last_updated in non-zero failure error message because that\'s not what it means * improve logging for per-feed update task failures * update_rss_feed: don\'t return as if failed on http 304 * update-feed: exit with non-zero exit code if update_rss_feed() failed daemon: log if per-feed update task terminated with non-zero exit code * lock per-feed update processes based on feed ID to reduce possibilty of concurrent updates * update individual feed in a separate process to prevent PHP fatal errors (for example, OOM) from stopping the entire batch this should also slightly increase memory budget for update processes * Translated using Weblate (Persian) * search_to_sql: use per-user default language instead of hardcoded english if isn\'t specified explicitly * prev: add missing class * move timestamp-related stuff to a separate class * fix updater never scheduling feeds for update if they never been updated before while having default update interval set * another hack for validation of URLs with invalid characters * validate URLs: convert IDN to punycode before passing URL to filter_var() * use self:: in some places to invoke static methods from the same class * - don\'t fail on non-ascii characters when validating URLs - fix IDN hostnames not being converted properly * router: only allow functions without required parameters as handler methods * fix previous re: resolve_redirects * remove a lot of stuff from global context (functions.php), add a few helper classes instead * Translated using Weblate (French) * Added translation using Weblate (Persian) * clarify some URL validation-related error messages * clarify some URL validation-related error messages * update_rss_feed: log effective URL after fetching validate_url: treat scheme as case-insensitive * resolve_redirects: fix previous * resolve_redirects: only use three argument version of get_headers() on php 7.1+ * update URL pointing to version.json * Remove `private` scope for class constants. * add basic safe mode which doesn\'t load any user plugins * - gettext: merge patch from Sunil Mohan Adapa which rewrites plural parser to not use eval() - fix typo in aforementioned patch which caused plurals to never load - update code again to newer PHP constructor syntax * prevent source errors from crashing gulp watch * add eslint to package.json * add less to package.json * validate_url: relax requirements for URLs, limit additional port/loopback filtering to fetch_file_contents() * replace FALSE with false so that static analyzer shuts up about it * rename gettext.inc to gettext.inc.php (cosmetic) * auth_internal: cast OTP code to integer before trying to check it * fetch_file_contents: validate effective URL (after redirects) without CURL * fetch_file_contents: validate effective URL (after redirects) if using CURL * don\'t try to update manually disabled feeds even if they haven\'t been updated before or are marked for a manual update * add gulp task for less compilation * add makefile for less to css compilation * forgotpass: use type strict comparison for reset token * don\'t try to call hash_equals() on unset user token * use hash_equals() correctly * fix several cases of Db class being invoked as wrong name (as DB) * replace some plain http links with https * * use get_random_bytes() for CSRF token * get_random_bytes: use PHP7 random_bytes() if it is available * validate CSRF token using hash_equals * auth_internal: use type-strict comparison when checking OTP code * fix typo in previous * fix OTP QR code not displayed because of CSRF token passed as a query parameter use type-strict comparison when validating CSRF token on the backend * amend previous to 127/8 subnet * fetch_file_contents: resolve requested hosts and check for possible loopback address * build_url: also put query parameters and fragment in resulting URL rewrite_relative_url: simplify handling of relative URLs * subscribe: allow pre-filling feed URL if passed via query string * cached_url: block SVG images because of potential javascript inside * pass CSRF token to opml import and feed icon replace dialogs * fix default password nag dialog, load via xhr * editFeed: only try to reload feed tree in preferences if its actually there * comments link: load in new tab * editarticletags: load dialog via XHR * handler: default base csrf_ignore() to false * backend handler: require CSRF, remove obsolete code * public/logout: require valid CSRF token * Feeds: load quickaddfeed and search dialogs via XHR w/ CSRF protection * - backend: require CSRF token to be passed via POST - do not leak CSRF token via GET request in feed debugger - rework Article/redirect to use POST * don\'t pass csrf token as a GET parameter to Article * require CSRF token for Article/redirect * - enable CSRF support earlier - remove rpc/sanityCheck from CSRF-excluded calls * af_proxy_http: require separate token to access imgproxy * rewrite_relative_url: validate resulting absolutized URLs * validate_url: only allow safe ports (80, 443), disallow access to loopback * validate_url: add clean() * rename base64_img() to image_to_base64() * af_proxy_http: never print received data directly, always redirect to cached_url cache/getUrl: basename() passed filename just in case * cached_url: perform mimetype validation before possible HOOK_SEND_LOCAL_FILE hooks * af_redditimgur: don\'t add embedded blank gif image for rewritten videos * user preferences: forbid < and > characters when changing passwords (were silently stripped on save because of clean()) * public/subscribe: require valid CSRF token when validating the form * remove csrf token from rpc method sanityCheck * - fix multiple vulnerabilities in af_proxy_http - fix vulnerability in rewrite_relative_url() which prevented some URLs from being properly absolutized - fetch_file_contents: validate all URLs before requesting them - validate URLs: explicitly whitelist http and https scheme, forbid everything else - DiskCache/cached_url: only serve whitelisted content types (images, video) - simplify filename/URL handling code, remove and consolidate some less-used functions * order_to_override_query: allow HOOK_HEADLINES_CUSTOM_SORT_OVERRIDE plugins to override built-in sorting * Translated using Weblate (Czech) * Translated using Weblate (Norwegian Bokmål) * Translated using Weblate (Norwegian Bokmål) * Translated using Weblate (Norwegian Bokmål) * Translated using Weblate (Norwegian Bokmål) * Sun Aug 30 2020 Marcus Rueckert - move apparmor profile to apparmor-profiles-nordisch (tt-rss-apparmor package) * Sun Aug 30 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2524.67f02e2aa: * properly return counters for labels with zero assigned articles refs https://community.tt-rss.org/t/label-counter-doesnt-update-when-count-goes-down-to-zero/3766 * Thu Aug 27 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2523.5497a137d: * Silence php 7.2 error message generated in `session_set_cookie_params`. * pluginhost: allow overriding default sort modes via HOOK_HEADLINES_CUSTOM_SORT_MAP etc * move order_by to SQL override logic into a separate function * Thu Aug 13 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2519.48be00577: * instead of taking batch timestamp and score (?) into account, make oldest first sorting work consistently with newest first - i.e. rely on feed-provided timestamp * OPML: export/import per-feed purge interval * Thu Aug 13 2020 Marcus Rueckert - fix socket path * Wed Aug 05 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2517.2b50aaed6: * more int/string type mismatches on getCategories * make sure all ints are casted (to int) on getCategories * Update wiki and forums links in error message. * Store FeedTree data in localStorage * when exporting OPML via web UI, add user login to the filename * prefs: show disabled filters properly on mysql * prefs: show root of filter tree as enabled so it\'s not grayed out * Properly check if OPML file was loaded during import. * core: pass found enclosures to HOOK_ARTICLE_FILTER af_redditimgur: remove enclosures if we found something to embed because it\'s going to be a low-res thumbnail * Fri Jun 19 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2503.6eb94f1e1: * better support for image srcset attributes as discussed in https://community.tt-rss.org/t/problem-with-img-srcset/3519 * more eslint fixes * eslint-related fixes; move a few things from global context to App * fix various minor issues reported by eslint * add eslintrc * unify prefs/main App objects, remove fake classes, use single static App object instead * same, but for preferences * don\'t use declare() for static objects with no inheritance because apparently it\'s not actually needed by AMD * Tue Jun 09 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2495.06cc6e3a2: * move isCombinedMode to AppBase so we wouldn\'t crash in preferences * Translated using Weblate (Dutch) * Translated using Weblate (German) * Translated using Weblate (German) * Translated using Weblate (German) * Translated using Weblate (German) * Created hotkeys_force_top plugin * add Headlines.default_force_previous, default_force_to_top * only bind up/down in 3 panel mode * Revert \"unbind up/down by default (use native scrolling for consistency with pgup/pgdn)\" * unbind up/down by default (use native scrolling for consistency with pgup/pgdn) * hide #toolbar-frame_splitter back again * - RIP smooth scrolling and associated hacks - attempt to make Headlines.move() / Article.cdmMoveToId() behave a bit more intuitively * when removing favicon, reset its auto-refresh timer * Headlines.move: add params.force_previous to always move to previous article in CDM * Headlines.move: use requestAnimationFrame in CDM :( * Headlines.move: when going back to top of active article, use a smarter (?) offset calculation * calculate_article_hash: don\'t die() on previous, woops * calculate_article_hash: ignore some useless or read-only fields (i.e. GUID) when calculating hash * rename Headlines.correctHeadlinesOffset() to scrollToArticleId() invoke it in Article.view() instead of all over the place * Headlines.move: maybe glitch less when moving back to top, etc * * store UID in article hashed GUID separately so it could be migrated cleanly to a different instance * store resulting GUID as a JSON object so it could be extended easier if needed * Use more specific definitions for applying `stuck` effects. * implement keyboard-related changes discussed in https://community.tt-rss.org/t/changing-the-amount-of-scroll-by-arrow-key/3452/7 * Keep header above iframes in CDM. * Make iframes size responsively. * only enable unpack observer in expanded mode * add --opml-export to update.php * use intersection observer to unpack visible articles, remove Headlines.unpackVisible() * remove floating title, use position: sticky for cdm headers instead * DiskCache: append fake file extension when sending cached files based on mime type to make saving files easier * Article.cdmMoveToId: don\'t crash if params is not given * sanitize: forbid \"allow\" attribute CSS: remove auto hyphens stuff, remove iframe width clipping to 98% because they get squished * rename cdmScrollToId to cdmMoveToId prevent smooth scrolling when going directly to an article * add hotkey \"\\\" to cancel current search * Translated using Weblate (Italian) * Translated using Weblate (Chinese (Simplified)) * Fri May 08 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2454.c8243b03c: * Allow setting Insert (45) and Delete (46) as hotkeys These are not reported via keypress either, so handle them via keydown. * DiskCache: properly deal with srcset attributes * sanitize: simplify initial attribute processing * sanitize: remove srcset plain-http hack, globally disallow width and height attributes for all elements * sanitize: handle picture[AATTsrcset] elements properly, i.e. rewrite relative URLs * remove unneeded var_dump() * * add HOOK_ENCLOSURE_IMPORTED * pass feed id to HOOK_FEED_PARSED * More fixes when installer generates config file. * During install, HTML encode POST data for forms. * Escape user-defined values during installation. * Sat Apr 18 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2438.0d467973d: * Article.pack: dispose of unpacked content properly * Headlines.renderAgain: scroll instantly to active article when going back to combined mode on the fly * in combined non-expanded mode, pack headline rows as they are unfocused to save RAM * Fri Apr 10 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2435.afaac95d8: * if comment URL is not specified but comment count is non-zero, show comments prompt leading to the article * search: add support for label:XXX search keyword Labels: enforce case-insensitive lookups when creating/looking for labels * remove atom-to-html XSLT * Fix documentation for _noexpand commands * Mon Mar 16 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2429.61be0b215: * minitemplator->writeString: print always returns 1 in PHP * minitemplator: fix deprecations for PHP 7.4 * allow overriding built-in templates via templates.local * add support for video[AATTsrc] in media cache * actually download posters to media cache * fix url rewriting for videos with poster and src * PluginHost/save_data: use separate PDO connection to prevent issues with nested transactions * In get_version() disable DIRECTORY_SEPARATOR check, permit using git on Windows to get version details; * do not keep current feed visible when hide as read is enabled * fix wrong colors applying to rule textarea when invoked from main UI * filter rule editor: bring back regexp valid/invalid BG colors (now for light theme) * filter rule editor: bring back regexp valid/invalid BG colors * add URL parameter to ignore user theme on startup * move default (light) theme LESS source to a more appropriate place add compact_dark theme variant * set all tooltip colors via less variables * fix tooltip colors for night mode * source validationtextarea in main UI * batchSubscribe: use validationtextarea * add validationtextarea control, use it for filter match editor * getTestResults: don\'t try to use previously removed variable * filter edit dialog: load rule editor via XHR * fix typo * filter test dialog: pass contents via xhr POST * rebase translations * af_readability: allow get full text button to work as a toggle; in cdm, scroll to article after embedding * external subscribe dialog: support dark theme * share anything dialog: support dark theme * fix alert-info/alert-danger colors on dark theme * af_comics: split contents of subscribe/basic_info/fetch hooks into appropriate per-comic filters * af_comics: mention that Far Side needs cached media * af_comics: escape all template urls * use canonical fetch url for Far Side * remove unnecessary debugging from previous * af_comics: add experimental support for The Far Side * update toggle_embed_original hotkey to invoke readability embed instead of removed embed_original plugin * af_readability: sanitize content requested for embedding * fix plugins/note javascript part broken by previous changeset * af_readability: add article button to embed content of a specific article * fix hr colors for dark theme, don\'t use hardcoded rgb value in light theme * adjust previous to not use hardcoded rgb color * dark theme, all articles icon: improve contrast * feed tree: do not mark Labels as Special * don\'t generate default.css, replace with themes/light.css as a default root CSS file * remove night_base.css: not needed * remove defines.css: not needed * fix default.css not being built properly by phpstorm * feed tree: don\'t set Special class on Labels category * hide read feeds / hide read shows special: use CSS instead of JS-based hiding * properly calculate marked counters for feeds in nested categories * 1. feedtree: show counters for marked articles if view-mode == marked 2. hide/show relevant counter nodes using css 3. cleanup some counter-related code 4. compile default css into light theme to prevent cache-related issues * prefs layout fixes: * Translated using Weblate (Italian) * add support for image loading=lazy attribute * Translated using Weblate (Czech) * Mon Jan 27 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2372.47135160d: * getCategoryCounters: properly handle categories which don\'t have any stored feeds/articles * login form: add workarounds for chrome password manager * mark primary button in the default password dialog * default password warning: fix close button, don\'t crash if dialog is recreated (on feed tree reload etc) * getCategoryUnread: return correct unread count for labels category * getCategoryChildrenUnread: fix typo * getCategoryCounters: properly calculate counters for child subcategory entries getCategoryUnread: cleanup * mark feeds with marked articles if marked view mode is set * onViewModeChanged: set view mode value as a custom body attribute * getCategoryUnread: don\'t return unread counters for Special category because it doesn\'t make a lot of sense to do so * Fri Mar 01 2019 Marcus Rueckert - initial package