88 Commits

Author SHA1 Message Date
Luc SANCHEZ
15745d42b7 Upgrade code to php 8.1 (#6748)
* revert
Fix code indentation
Fix code

Upgrade code to php 8.1

* fix remarques

* code review

* code review

* code review

* Apply suggestions from code review

* code review

* Fixes

* Many remainging updates of array syntax

* Lost case 'reading-list'

* Uneeded PHPDoc

---------

Co-authored-by: Luc Sanchez <l.sanchez-prestataire@alptis.fr>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2024-11-28 17:11:04 +01:00
Alexandre Alapetite
5b28a35003 Pass PHPStan level 9 (#6544)
* More PHPStan

* More, passing

* 4 more files

* Update to PHPStan 1.11.4
Needed for fixed bug: Consider numeric-string types after string concat
https://github.com/phpstan/phpstan/releases/tag/1.11.4

* Pass PHPStan level 9
Start tracking booleansInConditions

* Fix mark as read

* Fix doctype

* ctype_digit
2024-06-09 20:32:12 +02:00
Luc SANCHEZ
30c7a61a9b Use strict_types (#5830)
* Little's optimisations and booleans in conditions

* Apply strict type

* Apply strict type

* Apply strict type

* Fix multiple bugs with PHP 8.2 and 8.3

* Many declares missing, more errors fixed

* Apply strict type

* Another approach

* Stronger typing for Minz_Session

* Fix case of SQLite

---------

Co-authored-by: Luc <sanchezluc+freshrss@gmail.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2023-11-16 22:43:00 +01:00
Alexandre Alapetite
fe7d9bbcd6 Typed view model classes (#5380)
* Typed view model classes
* Add ability to provide a typed view model class to a controller
* Use `::class` instead of string for referring to classes
* Examplified with `stats` and `javascript` controllers / views (more to do)
* Also useful for extensions (my usecase today), which did not have the ability to define own view model attributes before.

* Typo
2023-05-11 12:53:32 +02:00
Alexandre Alapetite
509c8cae63 Dynamic OPML (#4407)
* Dynamic OPML draft
#fix https://github.com/FreshRSS/FreshRSS/issues/4191

* Export dynamic OPML
http://opml.org/spec2.opml#1629043127000

* Restart with simpler approach

* Minor revert

* Export dynamic OPML also for single feeds

* Special category type for importing dynamic OPML

* Parameter for excludeMutedFeeds

* Details

* More draft

* i18n

* Fix update

* Draft manual import working

* Working manual refresh

* Draft automatic update

* Working Web refresh + fixes

* Import/export dynamic OPML settings

* Annoying numerous lines in SQL logs

* Fix minor JavaScript error

* Fix auto adding new columns

* Add require

* Add missing 🗲

* Missing space

* Disable adding new feeds to dynamic categories

* Link from import

* i18n typo

* Improve theme icon function

* Fix pink-dark
2022-07-04 09:53:26 +02:00
Alexandre Alapetite
77e9877316 Add PHPStan (#4021)
* Add PHPStan
#fix https://github.com/FreshRSS/FreshRSS/issues/4016
https://phpstan.org/

```sh
composer run-script phpstan
```

* More fixes

* Fix global variables

* Add .phtml

* Fix merge
https://github.com/FreshRSS/FreshRSS/pull/4090

* Fix more warnings

* Fix view errors and enable in CI

* ReturnTypeWillChange

* Dynamic view type

* Fix Minz static/self bug
2021-12-31 17:00:51 +01:00
Alexandre Alapetite
8ee8a573f1 Custom labels (#2027)
* First draft of custom tags

https://github.com/FreshRSS/FreshRSS/issues/928
https://github.com/FreshRSS/FreshRSS/issues/1367

* SMALLINT to BIGINT for id_entry

And uppercase SQL types

* Fix layout for unreads

* Start UI menu

* Change menu order

* Clean database helpers

https://github.com/FreshRSS/FreshRSS/pull/2027#discussion_r217971535

* Travis rules do not understand PostgreSQL constants

Grrr

* Tag controller + UI

* Add column attributes to tags

* Use only favicon for now, for label

* Fix styling for different themes

* Constant for maximum InnoDB index length in Unicode

https://github.com/FreshRSS/FreshRSS/pull/2027#discussion_r219052200
(I would have personnally prefered keeping the readability of a real
value instead of a constant, in this case of many SQL fields)

* Use FreshRSS_Factory::createCategoryDao

* Add view of all articles containing any tag

* Fix search in tags

* Mark as read tags

* Partial auto-update unread tags

* More auto update tag unreads

* Add tag deletion

* Do not purge tagged articles

* Minor comment

* Fix SQLite and UI bug

* Google Reader API support for user tags

Add SQL check that tag names must be distinct from category names

* whitespace

* Add missing API for EasyRSS

* Compatibility SQLite

Problematic parentheses

* Add SQL DISTINCT for cases with multiple tags

* Fix for PostgreSQL

PostgreSQL needs some additional type hint to avoid "could not determine
data type of parameter $1"

http://www.postgresql-archive.org/Could-not-determine-data-type-of-parameter-1-tp2171092p2171094.html
2018-09-29 20:47:17 +02:00
Alexandre Alapetite
c9d3d78340 CSP manually refreshing feeds
https://github.com/FreshRSS/FreshRSS/issues/1075
2016-02-27 17:51:13 +01:00
Marien Fressinaud
a1faa826bf Fix french i18n for last views 2014-12-11 21:44:25 +01:00
Marien Fressinaud
6655c1b429 Improve design of actualize notification
- Remove progress bar
- Show title of updated feed
2014-08-10 15:28:54 +02:00
Marien Fressinaud
ab9d656135 Block user to click many times on the refresh button
See https://github.com/marienfressinaud/FreshRSS/issues/513
2014-07-09 20:20:17 +02:00
Marien Fressinaud
4bdabbd39f Fix theme Origine2
It should be equivalent to Origine (modulo some improvements)

See https://github.com/marienfressinaud/FreshRSS/issues/320
2014-06-03 23:41:19 +02:00
Marien Fressinaud
b77d9c60ac Use complete instead of done during feed refresh
A request can fail: in this case, the progress bar is not updated by using
"done".
See #421
2014-02-13 21:15:50 +01:00
Marien Fressinaud
178af19fb0 Add possibility to open notification in JavaScript + new message
Notifications can be opened directly in JavaScript
Class .notification is now id #notification
New message when there is no feed to refresh
See 06abbd02c2 (comments)
2014-02-13 21:01:12 +01:00
Alexandre Alapetite
7d9a813ed3 Petite simplification mise à jour JavaScript
https://github.com/marienfressinaud/FreshRSS/pull/414
2014-02-06 18:48:49 +01:00
Alexis Degrugillier
ed61f9346f Changement du rafraichissement manuel des flux
Au lieu de lancer un rafraichissement sur l'ensemble des flux, le rafraichissement se fait sur 10 flux simultanément. Quand un flux est rafraichit, il lance le rafraichissement d'un autre flux jusqu'à épuisement des flux disponibles.
2014-02-05 20:12:23 -05:00
Alexandre Alapetite
eb50ab3b61 Mot de passe + nonce serveur
Début de https://github.com/marienfressinaud/FreshRSS/issues/104
2014-01-11 16:48:10 +01:00
Alexandre Alapetite
3d876091e1 Nouveau rafraîchissement automatique du nombre d'articles non lus + session Persona
Devrait aussi résoudre
https://github.com/marienfressinaud/FreshRSS/issues/358
À tester
2014-01-09 23:17:35 +01:00
Alexandre Alapetite
b48b7939d7 JavaScript : Bug actualize quand il n'y a aucun flux
+ un peu de JSLint.
2014-01-02 19:08:21 +01:00
Alexandre Alapetite
878e96202e Grosse refactorisation pour permettre le chargement automatique des classes
C'est parti de changements pour
https://github.com/marienfressinaud/FreshRSS/issues/255 et finalement
j'ai continué la refactorisation...

Ajout de préfixes FreshRSS_ et Minz_ sur le modèle de SimplePie_.
Toutes les classes sont maintenant en chargement automatique (devrait
améliorer les performances en évitant de charger plein de classes
inutilisées, et faciliter la maintenance).
Suppression de set_include_path().
Si souhaité, certaines classes de Minz pourraient être déplacées dans un
sous-répertoire, par exemple les exceptions.

Tests et relecture nécessaires.
2013-12-15 03:30:24 +01:00
Marien Fressinaud
9d32d7fe19 Déplace le fichier main.phtml
app/views/javascript/main.phtml est déplacé vers
app/views/helpers/javascript_vars.phtml

Il reste à déplacer le fichier actualize.phtml pour se débarrasser de
javascriptController
2013-11-08 23:31:38 +01:00
Marien Fressinaud
d4f636f26a Ne charge les raccourcis que sur la page principale 2013-11-08 23:15:29 +01:00
Marien Fressinaud
0382f4b152 Issue #235: ajout d'une condition pour Persona
Si la connexion n'est pas paramétrée, on ne charge pas Persona
2013-11-08 10:34:27 +01:00
Alexandre Alapetite
5e2023392e Meilleur async pour Persona
Contribue à https://github.com/marienfressinaud/FreshRSS/issues/235
2013-11-08 10:13:21 +01:00
Marien Fressinaud
5a2a5ee374 Issue #235: refactorisation code Persona
Le code pour la connexion via Persona a été bougée dans le fichier
main.js avec le reste du code JS
Ça ne marche toujours pas sous Firefox car il essaye d'initialiser
navigator.id.watch avant que le fichier login.persona.org/include.js
ne soit chargé
L'url est correctement écrite côté serveur pour permettre à Persona
d'indiquer au site que la connexion s'est bien passée
2013-11-07 23:50:21 +01:00
Alexandre Alapetite
a58e4203f6 Variable full_lazyload
Pour savoir s'il faut attendre le chargement async de
jquery.lazyload.min.js ou pas
2013-11-04 23:34:22 +01:00
Alexandre Alapetite
231516f523 Grosse optimisation JavaScript
* Fusion de endless_mode.js dans main.js car endless_mode.js est
toujours chargé et assez petit.
* Suppression des changements de style en JavaScript lors du chargement
(genre boucle de .hide(), ou d'ajout de classe ".stick") et
implémentation en PHP + CSS à la place.
* Chargement JavaScript asynchrone (defer + async) pour de meilleurs
performances.
* Utilisation préférable des événements globaux plutôt que des
événements pour chaque élément avec jQuery.on(events, selector) pour un
chargement plus rapide et moins de mémoire utilisée.
* Optimisation manuelle du JavaScript (sélecteurs CSS plus performants,
méthodes jQuery plus appropriées, etc.).
* Désactivation de init_img() qui était coûteux, lancé à un moment où
les images ne sont de toute manière pas encore chargées, et qui
n'apporte rien car il y a déjà un img {max-width:100%} en CSS.
* JavaScript en mode strict.
* Enfin, passage du code JavaScript dans JSLint et du coup nombreuses
corrections (syntaxe, variables, méthodes dépréciées...).
* Devrait permettre de fermer
https://github.com/marienfressinaud/FreshRSS/issues/121
* Au passage, quelques simplifications CSS pour de meilleures
performances.
2013-11-04 23:31:36 +01:00
Alexandre Alapetite
c447e65c5a Chargement à la volée de actualize.phtml
Au lieu de faire une requête systématiquement à chaque action de
l'utilisateur vers actualize.phtml (qui est lourd à générer et à lire),
cette requête se fait maintenant uniquement lors de son utilisation.
2013-10-13 17:53:00 +02:00
Alexandre Alapetite
4bbe82ff01 Remplace main.phtml non-cachable par main.js cachable
Amélioration des performances en permettant la mise en cache de 10Ko de
JavaScript et en évitant une requête HTTP à chaque action de
l'utilisateur.
2013-10-13 17:11:13 +02:00
Marien Fressinaud
a09dc8a7c0 Fix défilement articles dépliés en vue globale 2013-10-07 21:50:49 +02:00
Marien Fressinaud
978a48a1d6 Fix le scroll en changeant d'article 2013-10-07 21:48:22 +02:00
Marien Fressinaud
381df3aea4 Merge branch 'patch-1' of github.com:Alkarex/FreshRSS into Alkarex-patch-1 2013-10-07 21:32:49 +02:00
Marien Fressinaud
3e9c3d7c43 Corrige la vue globale
On initialisait plus correctement le panel de la vue globale depuis
l'ajout de la fonction JS init_stream_delegates(). C'est corrigé :)
2013-10-07 21:31:01 +02:00
Alexandre Alapetite
1b8b72b81d Corrige images qui ne se chargent pas avec LazyLoad
Tel qu'utilisé, LazyLoad charge les nouvelles images lors d'un scroll. Hors dans certains cas (navigation clavier ou clic souris sur un article pour l'ouvrir), aucun scroll n'est généré et du coup les images ne sont pas chargées.
Ce patch ajoute un événement scroll artificiel dans ces cas là.

Exemple de cas sans scroll: bas de liste d'articles (ex: non lus), avec des articles plus petits que la taille verticale de la fenêtre, il n'y a pas de matière pour scroller plus haut.
2013-10-07 21:26:13 +02:00
Marien Fressinaud
109c276e1d Design + suppression 2 raccourcis
Les raccourcis page suivante et précédente n'avait plus lieu d'être avec
le mode endless

Petite correction du design pour les formulaire : les labels (float left)
dépassaient des form-group
2013-10-07 20:23:19 +02:00
Alexandre Alapetite
ca9e5f0135 Corrige doublons autochargement avec navigation clavier
1) Lors de la navigation clavier, si le chargement automatique en bas de page est activé, il ne faut pas manuellement charger les nouveaux articles, sinon il y a des doublons.

2) Il faut d'abord changer d'article avant d'en charger des nouveaux.

Vite fait, et vite testé, mais semble marcher et corriger les bugs de doublons que je constatais en navigation clavier (les articles non-lus que je venais de lire se rechargeaient une 2ème fois).
2013-10-06 21:42:46 +02:00
Alexandre Alapetite
d9db9bae0d Speed: jQuery optimisation of init_posts()
- jQuery updated from version 1.5.2 to 1.10.2 (checked that it is ok
with jQuery Migrate Plugin)
- Put hide_posts() first to avoid flashing content during load
- Big speed optimisation of init_img()
- Use a single on() delegated event (jQuery 1.7+) instead of all
per-article click events as described on http://api.jquery.com/on/
- Moved all the per-article click events to an outside function
init_stream_delegates() that is called only once even when new articles
are dynamically added. Much lighter approach, and does not require
unbinding events and rebinding them at each dynamic load.
- Side effect: corrected the bug of favourites and read/unread that were
not properly unbound during dynamic loading.
- Corrected a JavaScript error for auto_load_more when #load_more is not
visible and therefore does not have a position() defined.
2013-09-04 01:46:49 +02:00
Marien Fressinaud
48f8401c8b Fix issue #130 : amélioration vue globale
Désormais, en cliquant sur une catégorie ou un flux, une "popup" s'ouvre
nous proposant les flux à lire directement. Les mêmes actions que la vue
normale sont alors possibles

Cela a impliqué de gros changements javascript en aval puisque les
articles n'étaient plus repérés en fonction de la fenêtre, mais en
fonction du popup (#panel)

Le code va vraiment devoir être repris pour avoir une architecture
logique (voir issue #121)
2013-08-21 19:59:56 +02:00
Marien Fressinaud
456c95d2db Fix issue #125 : "Load more" automatique
En bas de page, si l'option a été cochée (ne l'est pas par défaut), on
va charger automatiquement les articles suivants
2013-08-21 15:22:30 +02:00
Marien Fressinaud
aa94bdaeff Issue #125 : "suivant" charge articles suivants
Le raccourci pour passer à l'article suivant charge automatiquement les
articles suivants si on vient d'ouvrir le dernier article de la page

Il reste à rajouter une option pour les charger si on se trouve en bas
de la page
2013-08-21 14:57:22 +02:00
Marien Fressinaud
9ae0652d9f Fix issue #131 : pied d'article
Ajout de la date et du lien vers site externe au pied des articles

Modification comportement raccourci "up" : si la fenêtre est sous
l'article actif, on remonte en haut de cet article. Si la fenêtre est au
début de l'article actif ou au-dessus, on remonte en haut de l'écran
2013-08-21 14:36:18 +02:00
Marien Fressinaud
24b3b0cdfc Amélioration marquage des articles au défilement
Un petit bug faisait qu'un article marqué comme lu pouvait repasser en
non lu même en mettant le paramètre "only_not_read" à true pour la
fonction mark_read.
2013-08-18 12:12:30 +02:00
Marien Fressinaud
29873ed1ef Correction comportement JS
L'ouverture d'un article sur le site d'origine via le raccourci
fonctionne de nouveau normalement

Lorsque la connexion est paramétrée et la lecture anonyme autorisée, une
personne non connectée pouvait avoir l'impression de marquer des
articles comme (non) lus (mais ça n'était pas effectif après un
rafraichissement de la page). Les articles ne peuvent plus être marqués
désormais
2013-08-18 11:56:41 +02:00
Marien Fressinaud
4a78d880b7 Fix issues #98 #99 : marquage lors du défilement
Modification de la zone du viewport qui faisait toute la taille de
l'écran. Désormais le viewport va du haut de l'écran jusqu'à sa moitié

Modification de la zone de marquage en la réduisant : début au 3/4 de
l'article et fin 50px plus loin (ou bas de l'article si dépasse)
2013-07-26 18:03:20 +02:00
Marien Fressinaud
371434c63a Fix issues #93 et #94
Les noms de catégorie trop longs ne cassent plus les boutons dans la
colonne de gauche (ajout d'un overflow hidden)

Les articles enroulés ne bugguent plus lorsqu'on charge plus d'articles.
L'action au clic pour dérouler un article était appliqué deux fois,
désormais on "unbind" d'abord l'action avant de la réappliquer (pas très
efficace mais c'est la façon la plus simple)
2013-07-02 18:04:02 +02:00
Marien Fressinaud
9758d1d736 Amélioration du marquage au défilement
Ne marque plus que lorsqu'on s'est déplacé de plus de 50px (évite de
checker à chaque fois)
De plus, lorsque les articles sont repliés, le marquage ne marche plus
(évite donc de marquer des articles non lus)
2013-06-23 20:25:21 +02:00
Marien Fressinaud
7396b3d897 Fix #77 : articles marqués comme lus au défilement
Possibilité de marquer les articles automatiquement comme lus lors
du défilement de la page. Le marquage survient aux 3/4 de l'article
visible.
Ajout d'une option pour activer / désactiver (défaut) la fonctionnalité
et disparition de l'option de marquage au chargement de la page.
Ajout de 2 boutons pour marquer comme lu et en favori en bas des
articles
2013-06-23 17:40:05 +02:00
Marien Fressinaud
dff85f9a30 Ajout d'une barre de navigation en version mobile
Fix issue #57 : pas d'effet de slide (effet trop bling-bling) mais
ajout d'une barre de navigation permettant d'aller à l'article
suivant / précédent ou de remonter en haut de la page
2013-06-23 15:05:39 +02:00
Marien Fressinaud
36316a6d7e Implémentation des vues lecture et globale (issue #67) 2013-06-16 20:28:57 +02:00
Marien Fressinaud
e3b3fa39d8 Première version de la vue lecture (issue #67) 2013-06-15 20:14:13 +02:00