# Programmation PHP/Exemples/MiniForum

* Introduction
* Installer PHP
* Composer
* IDE
** PhpStorm
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Commentaires
** Premier programme
** Variables
** Variables superglobales
** Constantes
** Opérateurs
** Fonctions
** Tableaux
** Structures de contrôle
** Boucles
* Programmation avancée
** Dates
** Sessions
** Cookies
** Cache
*** Memcached
*** Redis
** Formulaire
** Fichiers
*** Objets COM
*** Images
** Mails
** Sécurité
** Programmation orientée objet
** Bases de données
*** Microsoft SQL Server
*** MySQL
*** PDO
*** SQLite
** Expressions rationnelles
** Code de haute qualité
*** Analyse statique de programmes
** Exceptions
** Xdebug
** Mots réservés
* Apprendre par l'exemple
** Utilisation de variables
** Un sommaire simple
** Interaction avec un formulaire
** Afficher le résultat d'une requête BDD
** Modifier une table
** Faire un livre d'or
** Faire un mini forum de discussion
** Parser avec DomXml
** Coder en MVC
** Faire un webservice
** Vérification RIO
** AJAX
** Sommaire en Ajax
** Mise à jour périodique d'un cadre
** Mini CMS
** Introduction
** Développement
*** Les couches choisies
*** Code de service
*** Modélisation
*** Implémentation
*** La vue
*** Ajaxification
*** Premier noyau
*** Fournir les données
*** IHM
** Rétrospective
** Conclusion
* Extensions PHP
** cURL
** DOMDocument
** JSON
** MING
** SPL
* Bibliothèques externes
** ADODB
** DOMPDF
** FPDF
** PHPExcel
** PHPMailer
** PHPWord
** RabbitMQ
* Cadriciels
** CakePHP
** PEAR
** Symfony
** Frameworks de tests
*** PHPUnit
*** SimpleTest
*** Behat
* Logiciels métier
* Problèmes connus
* Introduction
* Installer PHP
* Composer
* IDE
** PhpStorm
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Commentaires
** Premier programme
** Variables
** Variables superglobales
** Constantes
** Opérateurs
** Fonctions
** Tableaux
** Structures de contrôle
** Boucles
* Programmation avancée
** Dates
** Sessions
** Cookies
** Cache
*** Memcached
*** Redis
** Formulaire
** Fichiers
*** Objets COM
*** Images
** Mails
** Sécurité
** Programmation orientée objet
** Bases de données
*** Microsoft SQL Server
*** MySQL
*** PDO
*** SQLite
** Expressions rationnelles
** Code de haute qualité
*** Analyse statique de programmes
** Exceptions
** Xdebug
** Mots réservés
* Apprendre par l'exemple
** Utilisation de variables
** Un sommaire simple
** Interaction avec un formulaire
** Afficher le résultat d'une requête BDD
** Modifier une table
** Faire un livre d'or
** Faire un mini forum de discussion
** Parser avec DomXml
** Coder en MVC
** Faire un webservice
** Vérification RIO
** AJAX
** Sommaire en Ajax
** Mise à jour périodique d'un cadre
** Mini CMS
** Introduction
** Développement
*** Les couches choisies
*** Code de service
*** Modélisation
*** Implémentation
*** La vue
*** Ajaxification
*** Premier noyau
*** Fournir les données
*** IHM
** Rétrospective
** Conclusion
* Extensions PHP
** cURL
** DOMDocument
** JSON
** MING
** SPL
* Bibliothèques externes
** ADODB
** DOMPDF
** FPDF
** PHPExcel
** PHPMailer
** PHPWord
** RabbitMQ
* Cadriciels
** CakePHP
** PEAR
** Symfony
** Frameworks de tests
*** PHPUnit
*** SimpleTest
*** Behat
* Logiciels métier
* Problèmes connus
[ Modifier le sommaire ]

## Faire un mini forum de discussion

Bon nombre de forums sur internet ont repris des opensources et les ont customisé. Dans cet article, nous verrons comment simplement opposer de meilleures solutions, plus souples et personnelles. Ce chapitre traitera du programme à fournir pour cette solution sans proposer de sécurisation.

## Introduction

Voici un forum modulaire, universel, illimité, fonctionnel et très réactif mais à sécuriser avec MySQL en backend et HTML en frontend.

## Architecture

À bâtir en MVC, le forum est segmenté comme :
    ./index.php
    ./config.inc.php
// STATICAL MODULES
    ./Objects/
    ./Objects/frameset.inc.php // main frameset
    ./Objects/mainPage.inc.php // main pages content
// FUNCTIONNAL MODULES
    ./Libraries/

## Déploiement

La méthodologie processus unifié fonctionne par itérations successives et augmentation, amélioration du code. On obtient donc pour chaque module différentes itérations représentatives de l'état d'avancement de l'application. L'état 0 ou incrément 0 étant l'ébauche et incrément 1, la première itération de l'applicatif.
increment 0 : index.php
increment 1 : index.php
increment 2 : index.php

### Objects

increment 3 : frameset.inc.php
increment 0 : mainPage.inc.php
increment 1 : listener.inc.php
increment 1 : controler.inc.php
increment 1 : mainPage.inc.php
    À cette itération, l'authentification du user est fonctionnelle.
    Le snippet content['authorize'] change de mode.
increment 2 : mainPage.inc.php
    À cette itération, l'attribution des privilèges du user est fonctionnelle.
    Le snippet content['authorize'] affiche le statut user mode.
increment 3 : jsScript.inc.php
    intégration des javascripts
increment 3 : pages.inc.php
    contenus des pages
increment 4 : pages.inc.php
    contenus des pages complétés
increment 4 : controler.inc.php
    controler complété
    À ce stade on a une ébauche de layout pour notre forum :

#### Constatations

Après le login, on a :
    [1] admin
    [2] mod
    [3] user
[2] & [3] sont similaires, quelques indicateurs à basculer dans la base. Il reste donc deux cas.
L'admin aura sa propre IHM avec fonctions élevées sur le forum.

#### RUP - Rational Unified Process (ou comment coder ?)

La granularité de la solution s'effectuera par l'affinage des modules.
Il n'est pas intelligent de coder en procédurale ou suivant un développement linéaire dans ce cas. Chaque module ou addon s'interfacera par adjonction de classes et snippets. Ceux-ci étant bien définis quand aux (in/out)put, avec le type précis.
De cette manière l'applicatif sera modulaire et évolutif.

#### Module administratif

Le forum doit être dédié aux légumes. L'admin doit avoir le choix de créer ces différents sujets principaux.
Par exemple les sections :
* coups de cœur,
* espace détente,
* nouveauté & trouvailles,
* légumes.

### Bibliothèques

Nous aurons d'emblée besoin des deux utilitaires :
[classes]
    Les classes usuelles
* Connectivity
* Request
[functions]
    Les fonctionnalités usuelles
[classes]
[functions]
increment 2 : utils.fnc.php
increment 4 : utils.fnc.php
    add function

### Modélisation

La modélisation est fonction du métier et des affinités. En voici une fonctionnelle pour notre exemple :
un script d'installation pourrait être :

## Conclusion

Cette façon de coder n'est pas la plus élégante et ne vise pas l'excellence. Bien que l'approche modulaire accroisse la quantité de code, elle a cependant l'avantage d'être lisible pour les longs développements. L'approche itérative et incrémentale de la méthodologie RUP tire fortement parti du développement modulaire.
* une vue
* un frameset variable
* des sujets illimités
* des catégories illimités
* un système de classement
* un système d'administration
* un système d'authentification
* un espace myAccount
NICE TO HAVE :
* tout automatiser (censure / délation / ..)
* mailer
* BO admin