# INSTRUCTIONS D'INSTALLATION

## RosarioSIS Student Information System

RosarioSIS est une application web qui dépend d'un serveur web, du langage de script PHP et d'un serveur de base de données PostgreSQL ou MySQL/MariaDB.

Pour que RosarioSIS fonctionne, vous devrez d'abord avoir votre serveur web, PostgreSQL (ou MySQL/MariaDB) et PHP (extensions `pgsql`, `mysqli`, `gettext`, `intl`, `mbstring`, `gd`, `curl`, `xml` & `zip` incluses) en état de marche. L'installation et la configuration des ces derniers varie selon votre système d'exploitation aussi ne seront-elles pas couvertes ici.

RosarioSIS a été testé sur:

- Windows 10 x86 avec Apache 2.4.16, Postgres 9.3.6, et PHP 7.1.18
- macOS Monterey avec Apache 2.4.54, Postgres 14.4, et PHP 8.0.21
- Ubuntu 14.04 avec Apache 2.4.18, Postgres 9.3.10, MySQL 5.6.33 et PHP 5.5.9
- Ubuntu 20.04 avec Apache 2.4.48, Postgres 12.11, et PHP 7.4.22
- Debian Bullseye avec Apache 2.4.54, Postgres 13.7, MariaDB 10.5.15 et PHP 8.1.4
- CentOS 8.2 avec Apache 2.4.37, Postgres 9.6.10, et PHP 7.2.24
- Hébergement mutualisé avec cPanel, nginx, Postgres 8.4, et PHP 5.6.27
- à travers Mozilla Firefox et Google Chrome
- à travers BrowserStack pour la compatibilité navigateurs (incompatible avec Internet Explorer)

Minimum requis: **PHP 5.5.9** & **PostgreSQL 8.4** ou **MySQL 5.6**/MariaDB

Instructions d'installation pour:

- [**Windows**](https://gitlab.com/francoisjacquet/rosariosis/wikis/Installer-RosarioSIS-sur-Windows)
- [**Mac**](https://gitlab.com/francoisjacquet/rosariosis/-/wikis/How-to-install-RosarioSIS-on-Mac-(macOS,-OS-X)) (en anglais)
- [**cPanel**](https://gitlab.com/francoisjacquet/rosariosis/wikis/How-to-install-RosarioSIS-on-cPanel) (en anglais)
- [**Softaculous**](https://gitlab.com/francoisjacquet/rosariosis/-/wikis/How-to-install-RosarioSIS-with-Softaculous) (en anglais)
- [**Docker**](https://github.com/francoisjacquet/docker-rosariosis) (en anglais)
- **Ubuntu** (ou n'importe quelle distribution Linux basée sur Debian), voir ci-dessous


Installer le paquet
-------------------

Décompressez l'archive de RosarioSIS, ou bien clonez le dépôt avec git dans un répertoire accessible depuis le navigateur. Éditez le fichier `config.inc.sample.php` afin de régler les variables de configuration et renommez-le `config.inc.php`.

- `$DatabaseType` Type du serveur de base de données: mysql ou postgresql.
- `$DatabaseServer` Nom de l'hôte ou IP du serveur de base de données.
- `$DatabaseUsername` Nom d'utilisateur pour se connecter à la base de données.
- `$DatabasePassword` Mot de passe pour se connecter à la base de données.
- `$DatabaseName` Nom de la base de données.

- `$DatabaseDumpPath` Chemin complet vers l'utilitaire d'export de base de donnée, pg_dump (PostgreSQL) ou mysqldump (MySQL).
- `$wkhtmltopdfPath` Chemin complet vers l'utilitaire de génération de PDF, wkhtmltopdf.

- `$DefaultSyear` Année scolaire par défaut. Ne changer qu'après avoir lancé le programme _Report Final_.
- `$RosarioNotifyAddress` Adresse email pour les notifications (nouvel administrateur, nouvel élève / utilisateur, nouvelle inscription).
- `$RosarioLocales` Liste des codes de langues séparées par des virgules. Voir le dossier `locale/` pour les codes disponibles.

#### Variables optionelles

- `$DatabasePort` Numéro du port pour accéder au serveur de base de données. Défaut : 5432 pour PostgreSQL et 3306 pour MySQL.
- `$RosarioPath` Chemin complet vers l'installation de RosarioSIS.
- `$StudentPicturesPath` Chemin vers les photos des élèves.
- `$UserPicturesPath` Chemin vers les photos des utilisateurs.
- `$PortalNotesFilesPath` Chemin vers les fichiers joints des notes du portail.
- `$AssignmentsFilesPath` Chemin vers les fichiers des devoirs des élèves.
- `$FS_IconsPath` Chemin vers les icônes de la cantine.
- `$FileUploadsPath` Chemin vers les fichiers uploadés.
- `$LocalePath` Chemin vers les packs de langue. Redémarrer Apache après modification.
- `$PNGQuantPath` Chemin vers [PNGQuant](https://pngquant.org/) (compression des images PNG).
- `$RosarioErrorsAddress` Adresse email pour les erreurs (PHP fatal, base de donnée, tentatives de piratage).
- `$Timezone` Fuseau horaire utilisé par les fonctions de date/heure. [Liste des Fuseaux Horaires Supportés](http://php.net/manual/fr/timezones.php).
- `$ETagCache` Passer à `false` pour désactiver le [cache ETag](https://fr.wikipedia.org/wiki/Balise-entit%C3%A9_ETag_HTTP) et le cache de session "privée". Voir [Sessions et sécurité](https://secure.php.net/manual/fr/session.security.php).
- `define( 'ROSARIO_POST_MAX_SIZE_LIMIT', 16 * 1024 * 1024 );` Limiter la taille de `$_POST` (16MB par défaut). Détails [ici](https://gitlab.com/francoisjacquet/rosariosis/-/blob/mobile/Warehouse.php#L290).
- `define( 'ROSARIO_DEBUG', true );` Mode debug activé.
- `define( 'ROSARIO_DISABLE_ADDON_UPLOAD', true );` Désactiver l'upload de compléments (modules et plugins).
- `define( 'ROSARIO_DISABLE_ADDON_DELETE', true );` Désactiver la possibilité de supprimer les compléments (modules & plugins).


Créer la base de données
------------------------

Vous êtes maintenant prêt pour configurer la base de données de RosarioSIS. Si vous avez accès à l'invite de commande sur votre serveur, ouvrez une fenêtre de terminal et suivez ces instructions.

Les instructions suivantes sont pour **PostgreSQL** (voir plus bas pour MySQL) :

1. Connectez-vous à PostgreSQL avec l'utilisateur postgres :
```bash
server$ sudo -u postgres psql
```
2. Permettre la création de fonctions:
```bash
mysql> SET GLOBAL log_bin_trust_function_creators=1;
```
3. Créez l'utilisateur rosariosis :
```bash
postgres=# CREATE USER rosariosis_user WITH PASSWORD 'rosariosis_user_password';
```
4. Créez la base de données rosariosis :
```bash
postgres=# CREATE DATABASE rosariosis_db WITH ENCODING 'UTF8' OWNER rosariosis_user;
```
5. Déconnexion de PostgreSQL :
```bash
postgres=# \q
```

Aussi, vous devrez peut-être éditer le fichier [`pg_hba.conf`](http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html) afin d'autoriser la connexion d'utilisateur par mot de passe (`md5`):
```
# "local" is for Unix domain socket connections only
local   all             all                                     md5
```

---------------------------------------------

Les instructions suivantes sont pour **MySQL** (RosarioSIS version 10 et supérieur) :

1. Connectez-vous à MySQL avec l'utilisateur root :
```bash
server$ sudo mysql
```
ou bien
```bash
server$ mysql -u root -p
```
2. Créez l'utilisateur rosariosis :
```bash
mysql> CREATE USER 'rosariosis_user'@'localhost' IDENTIFIED BY 'rosariosis_user_password';
```
3. Créez la base de données rosariosis :
```bash
mysql> CREATE DATABASE rosariosis_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
mysql> GRANT ALL PRIVILEGES ON rosariosis_db.* TO 'rosariosis_user'@'localhost';
```
4. Déconnexion de MySQL :
```bash
mysql> \q
```


Installer la base de données
----------------------------

Pour installer la base de données, pointez votre navigateur sur: `http://votredomaine.com/REPERTOIRE_DINSTALLATION/InstallDatabase.php`

C'est tout!... maintenant, pointez votre navigateur sur: `http://votredomaine.com/REPERTOIRE_DINSTALLATION/index.php`

et connectez-vous avec le nom d'utilisateur 'admin' et le mot de passe 'admin'. Avec cet utilisateur, vous pourrez créer de nouveaux utilisateurs, et modifier ou supprimer les trois utilisateurs type.


Problèmes
---------

Afin de vous aider à identifier les problèmes, pointez votre navigateur sur: `http://votredomaine.com/REPERTOIRE_DINSTALLATION/diagnostic.php`


Extensions PHP
--------------

Instructions d'installation pour Ubuntu 20.04:
```bash
server$ sudo apt-get install php-pgsql php-mysql gettext php-intl php-mbstring php-gd php-curl php-xmlrpc php-xml php-zip
```


php.ini
-------

Configuration de PHP recommandée. Editez le fichier [`php.ini`](https://www.php.net/manual/fr/ini.list.php) comme suit:
```
; Maximum time in seconds a PHP script is allowed to run
max_execution_time = 240

; Maximum accepted input variables ($_GET, $_POST)
; 4000 allows submitting lists of up to 1000 elements, each with multiple inputs
max_input_vars = 4000

; Maximum memory (RAM) allocated to a PHP script
memory_limit = 512M

; Session timeout: 1 hour
session.gc_maxlifetime = 3600

; Maximum allowed size for uploaded files
upload_max_filesize = 50M

; Must be greater than or equal to upload_max_filesize
post_max_size = 51M
```
Redémarrer PHP et Apache.


Autres langues
--------------

Instructions d'installation pour Ubuntu 20.04 et la locale _Espagnol_:
```bash
server$ sudo apt-get install language-pack-es
```
Ensuite redémarrez le serveur.


[wkhtmltopdf](http://wkhtmltopdf.org/)
--------------------------------------

Instructions d'installation pour Ubuntu 20.04 (Focal):
```bash
server$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
server$ sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb
```

Définir le chemin dans le fichier `config.inc.php`:
    `$wkhtmltopdfPath = '/usr/local/bin/wkhtmltopdf';`


Envoi d'email
-------------

Instructions d'installation pour Ubuntu 20.04. Activer la fonction `mail()` de PHP:
```bash
server$ sudo apt-get install sendmail
```


Configuration additionnelle
---------------------------

[Guide de Configuration Rapide](https://www.rosariosis.org/fr/quick-setup-guide/)

[Sécuriser RosarioSIS](https://gitlab.com/francoisjacquet/rosariosis/-/wikis/Secure-RosarioSIS)
