Désolé de mon manque de réactivité des dernières semaines. Je me remets donc à Xhoromag 4 à deux semaines du Yaz'.
Bon alors, la base de données, la structure est bonne, aux inévitables ajouts de dernière minute près, et les membres commencent à la remplir, le design et le ramassage d'articles sont en cours... Bon, je crois qu'on est bon, il ne reste plus rien à faire, je peux retourner dormir... ah si, tiens, coder le site. Bah, trivial.
Heureusement pour nous, le framework génère automatiquement énormèment de codes à partir de la simple structure de la base, y compris les formulaires de création, édition, suppression et recherche des aventures, séries et membres. Mais ce n'est pas non plus magique. Donc, spécifications.
Nous ne parlerons ici que du fonctionnel, pour le design, voir le sujet correspondant. Je m'appuie sur le sujet Fonctionnalités et droits, ainsi que de celui sur la structure de la base. Je me suis également uniquement concentré sur le cœur de métier de Xhoromag, les aventures. Une fois ce morceau de choix codé, la gestion des articles ne sera qu'un ajout mineur, car on aura déjà une complète gestion des membres, commentaires et recherches.
Comme vous l'aurez sans doute remarqué, la majeure partie des problèmes à résoudre est liée la gestion des permissions : qui peut faire quoi ? Pour savoir comment le framework les gère, voir le sujet (très technique) Authentification and Authorization de la doc de Yii.
Vous remarquerez que j'ai allégé certaines contraintes. En particulier, j'ai transformé la plupart des validations a priori (attendre confirmation de l'administrateur) par des validations a posteriori (on laisse faire, et on traite les plaintes s'il y a un problème). Cela allègera la charge de travail de développeurs, et évitera des crises de nerfs aux membres.
Notes : par défaut, l'admin peut tout faire, je ne l'ai donc pas systématiquement précisé. De la même façon, membre inscrit sous-entend "non banni".
/******* Attention, pavé !!! **********/
Module Member
Inscription
Priorité Maximale
Détails
Récupération de mot de passe
Priorité Moyenne
Détails
Création d'un compte d'un autre membre
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Pour pouvoir ajouter un auteur à une aventure, il faudra qu'il dispose d'un compte sur le site. Cependant, ce ne sera pas toujours le cas, particulièrement dans le cas d'œuvres traduites. D'où la possibilité de créer des "fiches auteurs", à la charge d'autres membres.
Restrictions : il sera explicitement indiqué sur les fiches auteurs non réclamées que tel est leur état, et qui est leur gestionnaire. Comme cela, si troll42 crée les auteurs z'Osio, Oiselle, Le Bird etc. il sera vide repéré.
Fonctionnalités à développer :
Réclamer un compte
Qui ? : N'importe quel membre non-inscrit
Pourquoi ? : Parce qu'un auteur autrefois absent peut finalement décider de venir administrer sa fiche lui-même. Ce sera d'ailleurs une fonctionnalité très utilisée dans les premiers jours de Xhoromag 4, quand tous les membres des forums ayant une aventure réclameront leur compte.
Restrictions : L'un des rares points qui méritent une validation un peu plus poussée, tant l'identité numérique est un sujet sensible. Il ne faut pas qu'en un seul clic, troll42 puisse s'emparer du compte de Fitz parce qu'il a martelé F5 lors de la mise en ligne du site.
Fonctionnalités à développer :
Édition du profil
Qui ? : Tout membre peut modifier son propre compte, et les comptes qu'il a créé et qui n'ont pas été réclamés avec succès
Fonctionnalités à développer :
Suppression d'un membre
Qui ? : personne si le membre est associé à au moins une aventure/série (il faudra d'abord l'en retirer). Même permission que l'édition sinon.
Fonctionnalités à développer :
Qu'est-ce qui existe déjà ? (liste non-exhaustive)
Module Collection
Création d'une série
Qui ? : N'importe quel membre inscrit
Fonctionnalités à développer :
Ajout d'ayant-droits à une série
Qui ? : Créateur de la série
Pourquoi ? : Dans le cas d'une série collective, plusieurs personnes doivent pouvoir contribuer et mettre à jour les informations générales.
Fonctionnalités à développer :
Édition des informations de la série
Qui ? : Créateur + ayant-droits
Fonctionnalités à développer :
Suppression d'une série
Qui ? : Personne si la série comporte au moins une avh (il faut d'abord l'en retirer). Créateur sinon.
Fonctionnalités à développer :
Module Avh
Création d'une aventure
Qui ? : N'importe quel membre inscrit
Fonctionnalités à développer :
Édition d'une aventure
Qui ? : Le créateur de la fiche de l'aventure. Si l'aventure a un ou plusieurs chef(s) de projet actifs sur le site, ils ont également tous les droits. Si non, mais que l'aventure dispose d'un ou plusieurs auteurs et/ou traducteurs actifs sur le site, ils les récupèrent (oui, les illustrateurs se font avoir).
Fonctionnalités à développer :
Le processus étant long et compliqué, je vais détailler certaines tâches. Les permissions sont celles de la création/édition.
Ajouter un membre à l'équipe de l'aventure : il serait possible de développer un système d'amis entre les membres, et le membre ne pourrait ajouter que d'autres membres ayant validé son invitation... sauf que c'est compliqué, et pénible à la fois pour les développeurs et pour l'utilisateur.
Je propose donc de simplifier cela à l'extrême : on peut associer n'importe quel membre du site à une aventure, à n'importe quelle tâche. Simplement, si la cible est différente du créateur de la fiche, le membre (ou le gestionnaire du membre) recevra un mail l'avertissant de ce fait ("Machin vous a ajouté comme auteur. Si vous n'êtes d'accord, cliquez ici.").
Ajouter une aventure à une série : on ne peut associer une aventure qu'à une série que l'on a créée, dont on est un ayant-droit, ou dont le créateur a explicitement autorisé l'utilisation publique (exemple : "hors-série Xhoromag" est une série publique). Envoi d'un mail au créateur de la série, s(il est différent de la personne ayant ajoutée l'aventure
Note : les petits malins auront remarqué que si Salla crée l'aventure le retour des Xhâ Niâs 12 : la retour de la vengeance, même s'il met Oiseau en auteur, il ne pourra pas ajouter lui-même cette à la série RXN. Par contre, quand Oiseau passera, il aura accès à la fiche car il est auteur (et aussi parce qu'il est admin, mais ce n'est pas important ici) et pourra l'ajouter, car il est le créateur de RXN. C'est un feature rigolo, qui se produit dans un cas improbable, mais je ne vois pas de méthode simple pour l'éviter.
Gérer l'avancement d'une aventure
Qui ? : Même permission que pour l'édition
Fonctionnalités à développer :
Donner accès à des aventures sur d'autres sites
Qui ? : Même permission que pour l'édition
Fonctionnalités :
Héberger son aventure sur Xhoromag
Qui ? : Même permission que pour l'édition
Restrictions : Pour des raisons de sécurité, que des .pdf et des .html, pas plus de 5M par fichier. Pour le reste (logiciels, pdf costaud type Marais 2, lourdes archives d'images), il faudra encore passer par l'intermédiaire de l'administrateur, en lui envoyant un mail. Ce dernier aura la même interface, mais sans les restrictions.
Fonctionnalités :
Trier les aventures
Qui ? : N'importe qui
Pourquoi ? : Fournir des raccourcis à l'utilisateur pour ordonner et filtrer les aventures selon ses préférences sans l'obliger à passer par la fonction de recherche. Comme la colonne de gauche sur cette image.
Fonctionnalités à développer :
Général
Alerter sur un contenu
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Parce que l'on n'est jamais à l'abri d'un troll
Fonctionnalités :
Contacter l'équipe du site
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Pour permettre au non-membres d'un des forums de faire remonter leurs remarques, problèmes etc.
Fonctionnalités :
Créer un commentaire
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Pour commenter directement des séries, des avh ou des articles
Fonctionnalités :
Éditer un commentaire
Qui ? : Créateur du commentaire
Fonctionnalités :
Supprimer un commentaire
Qui ? : Créateur du commentaire
Fonctionnalités :
Rechercher sur le site
Qui ? : N'importe qui
Pourquoi ? : Parce qu'à chaque fois que je recherche une aventure sur Xhoromag, je rêve de n'avoir qu'à taper son nom à un endroit et à cliquer sur rechercher.
Fonctionnalités :
Qu'est-ce qui existe déjà ? (liste non-exhaustive)
Remarques
/****** Fin du pavé ********/
Si vous avez eu le courage de lire, ou ne serait-ce que de survoler ce qui précéde, et que vous avez des remarques, n'hésitez pas, j'y répondrai dès que mon cerveau aura retrouvé toutes ses capacités.
Bon alors, la base de données, la structure est bonne, aux inévitables ajouts de dernière minute près, et les membres commencent à la remplir, le design et le ramassage d'articles sont en cours... Bon, je crois qu'on est bon, il ne reste plus rien à faire, je peux retourner dormir... ah si, tiens, coder le site. Bah, trivial.
Heureusement pour nous, le framework génère automatiquement énormèment de codes à partir de la simple structure de la base, y compris les formulaires de création, édition, suppression et recherche des aventures, séries et membres. Mais ce n'est pas non plus magique. Donc, spécifications.
Nous ne parlerons ici que du fonctionnel, pour le design, voir le sujet correspondant. Je m'appuie sur le sujet Fonctionnalités et droits, ainsi que de celui sur la structure de la base. Je me suis également uniquement concentré sur le cœur de métier de Xhoromag, les aventures. Une fois ce morceau de choix codé, la gestion des articles ne sera qu'un ajout mineur, car on aura déjà une complète gestion des membres, commentaires et recherches.
Comme vous l'aurez sans doute remarqué, la majeure partie des problèmes à résoudre est liée la gestion des permissions : qui peut faire quoi ? Pour savoir comment le framework les gère, voir le sujet (très technique) Authentification and Authorization de la doc de Yii.
Vous remarquerez que j'ai allégé certaines contraintes. En particulier, j'ai transformé la plupart des validations a priori (attendre confirmation de l'administrateur) par des validations a posteriori (on laisse faire, et on traite les plaintes s'il y a un problème). Cela allègera la charge de travail de développeurs, et évitera des crises de nerfs aux membres.
Notes : par défaut, l'admin peut tout faire, je ne l'ai donc pas systématiquement précisé. De la même façon, membre inscrit sous-entend "non banni".
/******* Attention, pavé !!! **********/
Module Member
Inscription
Priorité Maximale
Détails
Récupération de mot de passe
Priorité Moyenne
Détails
Création d'un compte d'un autre membre
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Pour pouvoir ajouter un auteur à une aventure, il faudra qu'il dispose d'un compte sur le site. Cependant, ce ne sera pas toujours le cas, particulièrement dans le cas d'œuvres traduites. D'où la possibilité de créer des "fiches auteurs", à la charge d'autres membres.
Restrictions : il sera explicitement indiqué sur les fiches auteurs non réclamées que tel est leur état, et qui est leur gestionnaire. Comme cela, si troll42 crée les auteurs z'Osio, Oiselle, Le Bird etc. il sera vide repéré.
Fonctionnalités à développer :
- Simple formulaire de création : pseudo, vrai nom (champ facultatif), utiliser le vrai nom pour la licence des aventures (oui/non)
Réclamer un compte
Qui ? : N'importe quel membre non-inscrit
Pourquoi ? : Parce qu'un auteur autrefois absent peut finalement décider de venir administrer sa fiche lui-même. Ce sera d'ailleurs une fonctionnalité très utilisée dans les premiers jours de Xhoromag 4, quand tous les membres des forums ayant une aventure réclameront leur compte.
Restrictions : L'un des rares points qui méritent une validation un peu plus poussée, tant l'identité numérique est un sujet sensible. Il ne faut pas qu'en un seul clic, troll42 puisse s'emparer du compte de Fitz parce qu'il a martelé F5 lors de la mise en ligne du site.
Fonctionnalités à développer :
- Formulaire de demande de récupération de compte, demandant bien sûr le mail de l'intéressé, mais aussi une anecdote sur la création de son AVH/le monde des LVH. Juste pour filtrer les trolls du plus bas niveau ("lè LVH, c tro kikoo lol").
- Envoi d'un mail à l'utilisateur pour lui indiquer que sa demande a été prise en compte
- Envoi d'un mail à l'administrateur pour le prévenir de cette demande
- Page de backoffice, uniquement accessible à l'administrateur, où il peut voir et valider, ou rejeter, les demandes en attente.
- Si la demande est validée, envoi d'un mail de confimration au membre, avec un mot de passe autogénéré
- Si la demande est rejetée, envoi d'un mail au membre, avec la raison de ce rejet ("TROLL" est une raison suffisante)
- Si la demande est validée, envoi d'un mail de confimration au membre, avec un mot de passe autogénéré
Édition du profil
Qui ? : Tout membre peut modifier son propre compte, et les comptes qu'il a créé et qui n'ont pas été réclamés avec succès
Fonctionnalités à développer :
- Formulaire d'édition des informations personnelles
- Changement de mot de passe
- Gestion de l'avatar : à enregistrer, éventuellement en plusieurs tailles (normal et minus, pour la format utilisé dans les commentaires), dans public/member/<id du membre>/avatar/nom-du-membre-en-minuscules-sans-accents-avec-tirets-à-la-place-des-espaces.jpeg (ou avatar/mini/ pour les miniatures).
Suppression d'un membre
Qui ? : personne si le membre est associé à au moins une aventure/série (il faudra d'abord l'en retirer). Même permission que l'édition sinon.
Fonctionnalités à développer :
- Formulaire de suppression
Qu'est-ce qui existe déjà ? (liste non-exhaustive)
- Yii génère de base des formulaires à partir de la structure de données, il ne reste ensuite qu'à les mettre en forme et à ajouter les validations de champs manquantes. Un même formulaire peut bien sûr servir à la fois à la création et l'édition.
- Le module yii-user apporte énormément de fonctionnalités, mais à vouloir être trop général, il a des performances et une structure de base pourries. Cependant, on peut allégrement y piller les méthodes les plus utiles (validation de compte par mail, changement de mot de passe).
Module Collection
Création d'une série
Qui ? : N'importe quel membre inscrit
Fonctionnalités à développer :
- Formulaire de création
- Enregistrement du logo, si présent, dans public/collection/logo/nom-de-la-serie-en-minuscules-avec-des-tirets-pour-les-espaces-et-apostrophes.jpeg (et /logo/s/ pour la version réduite du logo, pour la page d'accueil ou les listes).
Ajout d'ayant-droits à une série
Qui ? : Créateur de la série
Pourquoi ? : Dans le cas d'une série collective, plusieurs personnes doivent pouvoir contribuer et mettre à jour les informations générales.
Fonctionnalités à développer :
- Formulaire "Donner des droits sur la série à un membre", avec un simple champ texte à autocomplétion pour le nom du membre
Édition des informations de la série
Qui ? : Créateur + ayant-droits
Fonctionnalités à développer :
- Formulaire d'édition
Suppression d'une série
Qui ? : Personne si la série comporte au moins une avh (il faut d'abord l'en retirer). Créateur sinon.
Fonctionnalités à développer :
- Formulaire de suppression
Module Avh
Création d'une aventure
Qui ? : N'importe quel membre inscrit
Fonctionnalités à développer :
- Formulaire de création
- Enregistrement de la couverture, si présente, dans public/avh/<id de l'avh>/cover/nom-de-l-avh-en-minuscules-avec-des-tirets-pour-les-espaces-et-apostrophes.jpeg (et /cover/s/ pour la version réduite de la couverture, pour la page d'accueil ou les listes)
Édition d'une aventure
Qui ? : Le créateur de la fiche de l'aventure. Si l'aventure a un ou plusieurs chef(s) de projet actifs sur le site, ils ont également tous les droits. Si non, mais que l'aventure dispose d'un ou plusieurs auteurs et/ou traducteurs actifs sur le site, ils les récupèrent (oui, les illustrateurs se font avoir).
Fonctionnalités à développer :
- Formulaire d'édition
Le processus étant long et compliqué, je vais détailler certaines tâches. Les permissions sont celles de la création/édition.
Ajouter un membre à l'équipe de l'aventure : il serait possible de développer un système d'amis entre les membres, et le membre ne pourrait ajouter que d'autres membres ayant validé son invitation... sauf que c'est compliqué, et pénible à la fois pour les développeurs et pour l'utilisateur.
Je propose donc de simplifier cela à l'extrême : on peut associer n'importe quel membre du site à une aventure, à n'importe quelle tâche. Simplement, si la cible est différente du créateur de la fiche, le membre (ou le gestionnaire du membre) recevra un mail l'avertissant de ce fait ("Machin vous a ajouté comme auteur. Si vous n'êtes d'accord, cliquez ici.").
Ajouter une aventure à une série : on ne peut associer une aventure qu'à une série que l'on a créée, dont on est un ayant-droit, ou dont le créateur a explicitement autorisé l'utilisation publique (exemple : "hors-série Xhoromag" est une série publique). Envoi d'un mail au créateur de la série, s(il est différent de la personne ayant ajoutée l'aventure
Note : les petits malins auront remarqué que si Salla crée l'aventure le retour des Xhâ Niâs 12 : la retour de la vengeance, même s'il met Oiseau en auteur, il ne pourra pas ajouter lui-même cette à la série RXN. Par contre, quand Oiseau passera, il aura accès à la fiche car il est auteur (et aussi parce qu'il est admin, mais ce n'est pas important ici) et pourra l'ajouter, car il est le créateur de RXN. C'est un feature rigolo, qui se produit dans un cas improbable, mais je ne vois pas de méthode simple pour l'éviter.
Gérer l'avancement d'une aventure
Qui ? : Même permission que pour l'édition
Fonctionnalités à développer :
- Simple formulaire : nombre de paragraphes actuels et prévus, un commentaire sur l'avancement, et éventuellement une mise à jour du statut (terminée, abandonnée...). Initalisé par défaut au premier chargement à 0 sur 400.
Donner accès à des aventures sur d'autres sites
Qui ? : Même permission que pour l'édition
Fonctionnalités :
- Formulaire : format de l'aventure, adresse externe
Héberger son aventure sur Xhoromag
Qui ? : Même permission que pour l'édition
Restrictions : Pour des raisons de sécurité, que des .pdf et des .html, pas plus de 5M par fichier. Pour le reste (logiciels, pdf costaud type Marais 2, lourdes archives d'images), il faudra encore passer par l'intermédiaire de l'administrateur, en lui envoyant un mail. Ce dernier aura la même interface, mais sans les restrictions.
Fonctionnalités :
- Champs pour téléverser l'aventure elle-même + d'autres pour des compléments éventuels (bêtiser, making-off, table de hasard...), en précisant la nature du contenu. À enregistrer dans public/avh/<id de l'avh>/<nom de l'aventure>.pdf et public/avh/<id de l'avh>/extra/<nom du complément>.pdf. C'est ce qu'il y a de plus simple, et c'est ainsi que le site est naturellement conçu : un grand lien vers ce qui nous intéresse, l'aventure, et, à côté, sa version anglaise ou sa table de hasard ou...
Trier les aventures
Qui ? : N'importe qui
Pourquoi ? : Fournir des raccourcis à l'utilisateur pour ordonner et filtrer les aventures selon ses préférences sans l'obliger à passer par la fonction de recherche. Comme la colonne de gauche sur cette image.
Fonctionnalités à développer :
- Inclure une page de backoffice où l'administrateur peut regrouper les différents tags des aventures selon des catégories de tri
Général
Alerter sur un contenu
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Parce que l'on n'est jamais à l'abri d'un troll
Fonctionnalités :
- Formulaire d'alerte : page concernée, raison
- Envoi d'un mail à l'admin
Contacter l'équipe du site
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Pour permettre au non-membres d'un des forums de faire remonter leurs remarques, problèmes etc.
Fonctionnalités :
- Formulaire de contact
- Envoi d'un mail à l'équipe
Créer un commentaire
Qui ? : N'importe quel membre inscrit
Pourquoi ? : Pour commenter directement des séries, des avh ou des articles
Fonctionnalités :
- Zone de texte simple au possible
- Un commentaire peut répondre à un autre commentaire ou être dans le fil général de la discussion
- Pour les commentaires d'avh, possibilité d'inclure un lien vers un feedback plus détaillé (zone à part, pour accès facilité)
Éditer un commentaire
Qui ? : Créateur du commentaire
Fonctionnalités :
- Pouvoir éditer la zone de texte précédente...
Supprimer un commentaire
Qui ? : Créateur du commentaire
Fonctionnalités :
- Suppression avec confirmation. Supprimer un commentaire supprime aussi ses descendants
Rechercher sur le site
Qui ? : N'importe qui
Pourquoi ? : Parce qu'à chaque fois que je recherche une aventure sur Xhoromag, je rêve de n'avoir qu'à taper son nom à un endroit et à cliquer sur rechercher.
Fonctionnalités :
- Recherche simple via un champ de texte
- Recherche avancée selon des critères (même principe que la recherche sur le forum)
Qu'est-ce qui existe déjà ? (liste non-exhaustive)
- De base, Yii propose un formulaire de contact
- Une gestion basique des commentaires est présenté dans le tutoriel de Yii, et il existe probablement des milliers de variantes pour les gérer sur le net.
- Yii inclue déjà une fonctionnalité de recherche basique et avancée, générée à partir des classes. Elle permet de limiter la recherche à certains champs côté code, soit le titre, le titre de la série, les auteurs, la description, le genre et l'univers. S'agissant d'une recherche directe dans la base SQL, ce n'est pas le top de la performance, mais cela devrait suffir pour nos besoins. Si c'est vraiment trop lent, il faudra passer à des extensions plus lourdes, mais plus efficaces, comme Apache Solr ou autre.
Remarques
- L'url, et en particulier le nom, d'une image compte dans sa SEO. C'est la raison pour laquelle couvertures et logos sont enregistrés sous des noms à rallonge, pour augmenter leur chance d'apparaître dans Google Image lorsque l'on entre le titre de l'aventure.
- Je suis parti du principe que l'hébergeur de Xhoromag (ou le futur hébergeur... faudra voir ce que l'on fait) nous laisse accéder aux extensions de traitement d'images de php, histoire de pouvoir enregistrer les images aux tailles idéales pour le site dans la mémoire (cela évite à votre navigateur d'avoir à charger une image trop lourde, ce qui vous fait attendre plus longtemps.
- Google peut lire les pdf, en particulier les métadonnées et les titres et sous-titres internes au document. Cependant, il les aime beaucoup moins que les pages html, n'aime pas les URL avec des espaces, et l'utilisateur lambda lui n'aime pas les noms de fichiers avec des tirets partout. Mais bon, avec la magie des redirections web, c'est un faux problème, l'adresse "truc/neige-d-automne.pdf" pouvant tout à fait envoyer sur le fichier "Neige d'Automne.pdf".
/****** Fin du pavé ********/
Si vous avez eu le courage de lire, ou ne serait-ce que de survoler ce qui précéde, et que vous avez des remarques, n'hésitez pas, j'y répondrai dès que mon cerveau aura retrouvé toutes ses capacités.