PROJET LOLLIPOP
Cahier des charges (lol ça fait drôle d'écrire ça)
Date de commencement du projet : 11:10 05/05/2007
Date de dernière mise à jour du fichier (le projet lollipop cahier des charges) : 09:40 06/05/2007
Auteur : Thierry POINOT
Description : Projet de création d'un CMS/blog (publication de contenu)
Membres du projet : (personne pour le moment, normal, j'en ai parlé à personne.
12:41 05/05/2007
J'ai envi de codé un CMS, alors pour le moment, je ne veux pas trop me lancer directement à codé, alors je pose mes idées en vrac. De plus, actuellement je suis en terminale S et j'ai le BAC dans un mois, je vais donc débrancher mon ordi pour me consacrer au BAC, je ne fais que noter mes idées pour ne pas les oublier, je reprendrais activement le projet Lollipop cet été. Bon normalement, ça fai déjà une semaine que mon ordi est débranché, mais hier soir des potes m'on proposer d'aller voir Spiderman 3 alors que je devais partir en week-end avec mes parents, mais j'ai négocier le week-end seul à la maison , et je n'ai pas pu m'empêcher de rebrancher le PC, et là, mon écran est par terre et je suis très mal placé. Donc voilà, j'ai fini de noter la majorité de mes idées, ++
22:10 05/05/2007
Les idées fleurissent, il y a des tas d'informations qu'ils faut que je note pour bien tout coder d'un seul coup.
09:21 06/05/2007
Le projet devient de plus en plus complexe

je crois que j'en veux trop, mais bon, si j'y arrvive, ça sera pas mal
Conventions de codage:
il faut absolument commenter le code source, sinon tel que je me connais, je vais coder, coder, coder, laisser un mois de côté le projet, et quand je vais vouloir reprendre, j'en serai incapable, parce que ça ne sera pas commenté, et que je ne comprendrais plus rien, et j'abandonnerais l'idée comme toutes les autres idées avant.
public function UneApiDuSystème ($var1 = '', $var2 = '') {
// Une API du système, c'est une fonction qui retourne des information sur le contenu du blog, c'est différent d'une fonction interne du système.
// ici le nom des fonctions commence par une majuscule et chaque mot du nom de la fonction commence par une majuscule. il n'y a pas de caractère de séparation des mots.
// ex : GetBlogParam
/*
ceci est un commentaire de code sur plusieurs ligne. De cette manière, il suffit de rajouter un '/' au tout début du commentaire avant '/*' pour décommenter le code.
//*/
return(); //return n'est pas une fonction mais une instruction, mais si une grande chaine de caractère est à renvoyer, c'est plus lisible, donc on utilisera toujours par convention return($var);
}
public function fonction_interne_du_système ($var1 = '', $var2 = '') {
}
if ($var == '' && $var2 == '' || $var3 == '') {
// pas de 'OR' ou 'AND'
}
switch ($var) {
case '':
case default:
break;
}
idées de noms pour le projets
lolly
myCMS
wabby
MIBL0G
Projet lollipop en vrac
La version 0.1.0 de ce CMS devra afficher les articles avec commentaires (post de commentaire possible par les visiteurs), le CMS devra posséder son système de plugins, puisqu'il devra avoir un thème, et le système d'article à gérer.
ça serait bien aussi que le système renvoie des pages qui s'affichent bien sur les appareils mobiles (téléphones mobiles, PDA, console de jeux...), mais ça, je sais pas si ça sera facile à coder...
faire un système multiblog (on verra dans la version 2.0.0 si je n'abandonne pas avant ^^)
MAIS pb rencontré :
gestion des droits utilisateurs sur les différents blog trop compliqué
il faudrait définir des privilèges pour chaques utilisateurs sur chaque blog
DONC POUR LE MOMENT, JE NE GÈRE PAS PLUSIEURS BLOG, JE LAISSE LA VARIABLE BLOG_ID POUR UNE UTILISATION ULTÉRIEUR, MAIS IL N'Y AURA PAS DE GESTION MULTIBLOG PRÉVU.
DONC POUR LE MOMENT, LE BLOG_ID RESTERA 0 PAR DEFAUT.
une petite idée me vient à l'esprit, avec les users_type, on pourrait faire pour chaque utilisateur, définir leur actions possible sur chaque blog par exemple :
redactor: post_comments_0;post_posts_0
|
V
cet utilisateur, serait un genre de rédacteur qui n'a que ces droits là, poster des commentaires uniquement sur le blog 0 et créer des articles uniquement sur le blog 0
initialiser dès le début du script, une connection avec la base de données plutôt que d'ouvrir et de refermer une connection à chaque requête => nécessite de savoir quand est-ce que tel ou tel script se termine, et de le terminer en fermant la connection à la DB
Faire un système utilisant l'url demandé (path_info), après le index.php on met /articles/2007 pour avoir tous les articles postés en 2007 par exemple
donner la possibilité de gérer plusieurs blog
Articles + commentaires
éditeur WYSIWYG (pour l'éditions des articles)
en premier lieu, je ferai un éditeur où je diviserai la page en deux, avec une zone de texte (textarea) où s'affichera la source et une zone où s'affichera le rendu.
sondages
comptes Utilisateurs
validation de l'enregistrement d'utilisateurs:
soit faire une validation par email après l'enregistrement
soit, demandé dès le début l'email de l'utilisateur, puis dans le mail on met une url vers laquelle il pourra s'inscrire, et il devra mettre l'email à laquelle il à reçut la confirmation dans la case email pour pouvoir s'enregistrer
|
V
la deuxième méthode, c'est la méthode de Likipad (http://likipad.com), enfin c'est en m'inscrivant sur ce site que j'ai vu cette méthode qui est différente de la première, beaucoup plus commune.
avatars:
faire une compatibilité avec le site gravatar.com
possibiliter d'uploader son avatar
NewsLetter
A chaque nouvel article, un mail est envoyé aux inscrits de la newsletter
faire en sorte qu'un utilisateur puisse s'inscrire à la newsletter d'un seul article (si un utilisateur s'inscrit, il recevra un mail à chaque changement de l'article (ajout de commentaire, modification de l'article, suppression de l'article)
donner des options à l'utilisateurs:
lui donner la possibiliter de configurer sa newsletter
fréquence d'envoi
abréger l'article ou pas
afficher les commentaires ou seulement le pseudo du membre qui l'a posté
ou tout simplement recevoir un mail à chaque nouveau commentaire du gere :
"Nouveau commentaire sur l'article 'nom de l'article' du membre Toto."
on peut aussi lui proposer de mettre les deux derniers commentaires
de mettre ou pas le commentaire (sinon juste le pseudo)...
Flux RSS2
articles et des commentaires
proposer dans les options du blog (admin) d'abréger ou pas les articles dans les news
choix du nombre d'articles dans les flux RSS
divers
upload de fichiers pour les rédacteurs, ou créé une actions (rights) : can_upload_file
création de miniatures des images
système de plugins
themes
soit:
définir chaques themes commes des plugins de type theme
définir une variable du plugin : $plugin_type = {theme, admin, rédaction, gestion_categorie, gestion_commentaire, public, widget}
soit:
définir un dossier spécial themes (CE QUI EST MIEUX)
Dans le dossier plugin, on créé un dossier themes où se trouve tous les themes
les thèmes sont des fichiers php, on peut intégrer du code PHP dans les thèmes
Faire un système multilang avec une fonction '__()'
les commentaires peuvent faire office de forum
on peut répondre à un seul commentaire en particulier
si un utilisateur pose une question en commentaire, on pourra lui répondre et il y aura comme titre du commentaire : Réponse au commentaire de Tcheeky du 23/01/1970 à 19:00
pour poster un commentaire, l'utilisateur devra répondre à une question aléatoire, avec une réponse évidente que seul un humain (et non un robot) peut répondre.
soit faire deux fichiers : un fichier question avec une question par ligne et un fichier réponse avec les réponses correspondantes
soit créer plusieurs images avec la question écrite dedans, et la réponse est le nom de l'image
permettre un titre à chaque commentaire (titre facultatif)
system: (variables à mettre soit dans un fichier config.ini soit dans une table MySQL)
default_blog_id (identifiant du blog par défaut)
site_url = "http://nomdusite.com/s"
plugins_path = "./plugins/"
plugins_url = site_url."plugins/"
themes_path = "./plugins/themes/"
themes_url = site_url."plugins/themes/"
blog_#id#: (remplacer #id# par l'identifiant du blog)
title
description
copyrights
default_theme
users:
user_id
login
nickname (pseudo, nom d'affichage)
pass
site_web
email
msn_id
gmail_id
localisation
sex
age = {enfant, ado, jeune adulte, adulte, adulte agé} (pas d'age préci pour plus de respect de la vie privée de l'utilisateur
avatar_url (faire un système d'upload d'avatar)
state = {actif, bloqué, validé(email), non_validé} définir une variable qui bloque un utilisateur si il n'est pas venu depuis un certain temps (1 an)
type = {invité, membre, membre_actif, membre_peu_présent, non_validé, bloqué}
(définir un membre actif d'un membre passif en fonction de ses deux time_last_connection, si elles sont séparé de moins de 2 ou 3 jours (par exemple) c'est un membre actif (qui vient souvent), si ses deux time_last_connection sont séparé de 3 à 15j (voire 1 ou 2mois), c'est un membre tout simple, et au dela de 15j (voire 1 ou 2 mois), c'est un membre_passif (qui vient rarement))
(non validé: si l'utilisateur s'est enregistré et que la validation par email était activé, et qu'il n'a pas confirmé, il est dans cet état)
(bloqué: utilisateur bloqué par un admin)
user_type (différent de type, on pourra créer des user_type dans la partie ADMIN, on créé un nom pour le type et on y attribue ce qu'il à le droit de faire : (redactor: post_comments;post_posts;del_comments;del_posts super_admin:ALL(toutes les actions possibles)))
rights (les droits de chaques utilisateurs, ici on met les actions qu'il peut faire (les mêmes actions définit pour les users_type)
time_creation
time_validation (date à laquelle, l'utilisateur à validé sont compte)
time_last_update_profil
time_last_connection
time_last_connection2
rights: (ceci n'est pas une table MySQL, mais sera une série de if qui vérifira à chaque fois que l'utilisateur veut faire une action, si il peut la faire)
all (toutes les actions sont possible ATTENTION: à ne mettre que pour les super_admin)
can_post_posts
// can_modify_his_posts
// can_modify_every_posts
can_change_his_posts_title
can_change_his_posts_content
can_change_his_posts_chapo
can_change_his_posts_time_published
...
can_change_every_posts_title
can_change_every_posts_content
...
can_del_his_posts
can_del_every_posts (peut supprimmer(effacer sans retour en arrière) n'importe quel post)
can_put_offline_his_posts
can_put_offline_every_posts
can_post_comments
can_del_his_comments (peut supprimer ses commentaires)
can_del_every_comments (peut supprimer n'importe quel commentaires (il peut supprimer les commentaires d'autres membres))
can_put_offline_his_comments
can_put_offline_every_comments
can_change_his_login
can_change_his_nickname
can_change_his_email
can_change_his_birthday
...
can_change_login_of_every_users
can_change_nickname_of_every_users
...
users_type: (table mysql définissant le nom d'un type d'utilisateur, et ses droits (rights) séparé par un point virgule)
super_admin=all
modo=can_put_offline_every_comments;can_post_comments
user=can_post_comments;can_put_offline_his_comments;can_change_his_birthday
...
posts:
post_id
title
author
author_IP
sources (les éventuelles sources de l'article, ne pas afficher sur la partie publique si c'est vide)
categories (chaque catégorie sera séparé par un point virgule ';' ex: 'humour;divers'
tags (chaque tags sera séparé par un point virgule ';' ex: 'blagagogo;liste de blagues;liste de devinettes;humour;sélection de blagues;'
chapô
content
time_creation
time_last_update
time_published (l'article s'affichera seulement si la date actuelle du système dépasse la date de publication (time_published))
state (létat de l'article: state={online_en_cours_de_rédaction, offline_en_cours_de_rédaction, online, offline, en_attente, inachevé})
lang
files_annexes (les fichiers liés à l'article, séparé par un point virugle (url))
notes (notes diverses qui ne seront visibles uniquement dans la partie admin)
log
comments:
comment_id
article_id
comment_id_reponse (id du commentaire auquel ce commentaires est une réponse)
author
author_IP
title
message
time_creation
state (état du commentaire state={online, offline, censored})
polls:
poll_id
title
question
lst_reponses (liste de réponses possible au sondage séparé par un point virgule (tableau dont la première réponse à l'ID 0)
time_creation
time_last_vote (date du dernier vote d'un visiteur)
allow_multiple_reponse (autorise ou pas que l'utilisateur puisse répondre plusieurs réponse à un seul sondage)
polls_reponses
reponse_id (ID de la réponse de l'utilisateur)
poll_id
time_creation
user_login
user_IP
user_comment (éventuel commentaire d'un utilisateur (facultatif))
listes des APIs (fonctions du cms) :
GetUserCommentsCount($user_id) $user_id est INDISPENSABLE
GetCommentsCount($articles_id) si rien en arguments, renvoyer le nombre de commentaires sur tout le blog
GetArticlesCount()
GetUsersCount()
GetArticle($value) $value = {title, catégories, tags, author, content, comments, files_linked, state, time_creation, time_last_update, time_published}
GetBlogParams($blog_id, $value) $value = {title, description, author, designer, redactor, copyrights, articles_per_page, articles_in _rss, abrege_articles_in_rss, time_creation, time_last_uptdate, time_published, admin_path, admin_url, plugin_path, plugin_url, themes_path, theme_url, folder_share_path, folder_share_url, blog_url, use_path_info, use_query_string}
GetPolls ($poll_id, $value) $value = {question, choix_de_réponses}
GetThemes(theme_id, $value) si theme_id vide, on renvoi un tablo avec tous les themes et les paramètres de chacuns, si theme_id a une valeur mais que $value est vide, on renvoit un tablo avec tous les paramètre du theme ayant l'ID theme_id, si $value n'est pas vide, on renvoi le paramètre demandé $value = {name, author, time_creation, time_last_update, description, copyrights, url_snapshot, themeid_path, themeid_ url, versions_cms_compatible}
GetThemesCount()
faire les même fonctions pour les plugins que pour les thèmes
arborescence éventuelle du CMS :
./
admin
plugins (plugins et THEMEs puisque les themes sont des plugins)
articles
admin.php (sera éxécuté lorsque le plugin sera appelé en ADMIN)
public.php (sera éxécuté lorsque le plugin sera appelé en PUBLIC)
share (dossier où les fichier sont uploader, fichiers de l'utilisateur, du bloggeur)
inc
functions.php
index.php
require('inc/init.php');
$blog = new blog(1); // 1 est l'ID du blog
CHANGELOG
./inc/blog.class.php:
class blog {
public function __construct ($current_blog_id = 0) {
$this->$current_blog_id = $current_blog_id;
if (self::is_blog_exists() == true) { /* $this->is_blog_exists ();*/
self::GetBlogParams();
self::ShowBlog();
}
}
public function is_blog_exists ($blog_id = $this->$current_blog_id) {
/*
Vérifie si le blog existe, sinon, renvoie un message comme quoi le blog n'existe pas, et renvoie un lien vers le blog par défaut.
//*/
}
public function GetBlogParams ($blog_id = $this->$current_blog_id, $value) {
/*
Récupère les paramètres du blog dans la base de données
//*/
}
}
CHANGELOG - Projet Lollipop
12:49 05/05/2007 ----> V0.0.1 ----> Projet à l'état d'idée seulment, j'écris mes idées dans un fichier en vrac...le projet s'appelle Lollipop parce que quand j'écout la chanson Lollipop de Mika, je pense à ce projet. Je n'ai pas encore de nom pour le futur CMS