summaryrefslogtreecommitdiff
path: root/php
diff options
context:
space:
mode:
Diffstat (limited to 'php')
-rw-r--r--php/Database.php26
-rw-r--r--php/ZenityClasses.php111
-rw-r--r--php/compileLatex.php30
-rw-r--r--php/dependances.php100
-rw-r--r--php/functions.php26
-rw-r--r--php/saisie.php59
-rw-r--r--php/zenity_text.php21
7 files changed, 373 insertions, 0 deletions
diff --git a/php/Database.php b/php/Database.php
new file mode 100644
index 0000000..81ce669
--- /dev/null
+++ b/php/Database.php
@@ -0,0 +1,26 @@
1<?php
2// php/Database.php
3
4// connexion avec PDO_sqlite
5try
6{
7 $db = new PDO('sqlite:' . $db_name . '.sqlite');
8 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
9}
10catch (Exception $e)
11{
12 die('Erreur : '.$e->getMessage());
13}
14
15
16// requêtes SQL
17class SQL
18{
19 // créer les tables si elles n'existent pas encore
20 static function create_tables()
21 {
22 //$db->exec("CREATE TABLE IF NOT EXISTS matable (ID INTEGER PRIMARY KEY, champ1 INTEGER, champ2 TEXT);");
23 //
24 //
25 }
26}
diff --git a/php/ZenityClasses.php b/php/ZenityClasses.php
new file mode 100644
index 0000000..c286d14
--- /dev/null
+++ b/php/ZenityClasses.php
@@ -0,0 +1,111 @@
1<?php
2// php/ZenityClasses.php
3//
4// commande système zenity
5
6abstract class Zenity_cmd
7{
8 protected $command = 'zenity';
9 protected $command_type = '';
10 protected $rows = [];
11 private $title = 'ORDIPOLO';
12 private $text = '';
13 protected $width = 300;
14 protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150
15
16
17 protected function __construct($text, array $rows = []) // $rows est optionnel
18 {
19 $this->text = $text;
20 $this->rows= $rows;
21 $this->command .= $this->command_type;
22 $this->command .= ' --title="' . $this->title . '"';
23 $this->command .= ' --text="' . $this->text . '"';
24 }
25
26 public function get()
27 {
28 return($this->command);
29 }
30}
31
32
33class Zenity_list extends Zenity_cmd
34{
35 public function __construct($text, array $rows)
36 {
37 $this->command_type = ' --list';
38 parent::__construct($text, $rows);
39 $this->height = 80 + count($this->rows) * 25;
40 $this->command .= ' --width=' . $this->width;
41 $this->command .= ' --height=' . $this->height;
42 $this->command .= ' --hide-header'; // ligne inutile, il y a déjà le --text
43 self::one_column_zenity_list($this->rows);
44 }
45
46 public function set_entries($rows_set) // variable renseignée après la construction
47 {
48 $this->rows = $rows_set;
49 }
50
51 private function one_column_zenity_list($rows)
52 {
53 $output = ' --column=""';
54 foreach($rows as $entry)
55 {
56 $output .= ' "' . $entry . '"'; // forme: ' "choix 1" "choix 2"'
57 }
58 $this->command .= $output;
59 }
60}
61
62class Zenity_question extends Zenity_cmd
63{
64 public function __construct($text)
65 {
66 $this->command_type = ' --question';
67 parent::__construct($text);
68 $this->command .= ' && echo $?';
69 // la sortie de "zenity --question" est le statut de sortie "$?"
70 // $? vaut 0 pour oui, 1 pour non, à ceci près que pour non zenity ne renvoie rien
71 }
72}
73
74class Zenity_forms extends Zenity_cmd
75{
76 public function __construct($text, array $rows)
77 {
78 $this->command_type = ' --forms';
79 parent::__construct($text, $rows);
80 //$this->height = 80 + count($this->rows) * 25; // à tester, mais devrait produire le rendu attendu
81 self::entries_zenity_forms($this->rows);
82 }
83
84 private function entries_zenity_forms($entries)
85 {
86 $output = '';
87 foreach($entries as $one_entry)
88 {
89 $output .= ' --add-entry="' . $one_entry . '"'; // forme: ' "choix 1" "choix 2"'
90 }
91 $this->command .= $output;
92 }
93}
94
95class Zenity_calendar extends Zenity_cmd
96{
97 public function __construct($text)
98 {
99 $this->command_type = ' --calendar';
100 parent::__construct($text);
101 }
102}
103
104class Zenity_entry extends Zenity_cmd
105{
106 public function __construct($text)
107 {
108 $this->command_type = ' --entry';
109 parent::__construct($text);
110 }
111}
diff --git a/php/compileLatex.php b/php/compileLatex.php
new file mode 100644
index 0000000..ccd9dab
--- /dev/null
+++ b/php/compileLatex.php
@@ -0,0 +1,30 @@
1<?php
2// compileLatex.php
3
4// contenu
5$codeLaTeX = '\documentclass{article}
6
7\usepackage[francais]{babel}
8\usepackage[utf8]{inputenc}
9\usepackage[T1]{fontenc}
10
11\begin{document}
12 Bravo, ça compile !!
13\end{document}';
14
15
16// ficher tex
17// regarder la doc, php-cli permettrait de manipuler les fichiers directement comme le bash
18$fichier = fopen("latex.tex", "w+");
19fputs($fichier, $codeLaTeX);
20fclose($fichier);
21
22// compilation
23exec('pdflatex latex.tex');
24
25// nettoyage
26unlink("latex.aux");
27unlink("latex.log");
28unlink("latex.tex");
29
30exec('xdg-open latex.pdf');
diff --git a/php/dependances.php b/php/dependances.php
new file mode 100644
index 0000000..4a5667e
--- /dev/null
+++ b/php/dependances.php
@@ -0,0 +1,100 @@
1<?php
2// php/dependances.php
3// Vérification des dépendances nécessaires au fonctionnement de ce programmes.
4
5// Environnement dans lequel ce programmes a été créé:
6// - système archlinux avec l'interpréteur bash
7// - PHP 8.1 + paquet php-sqlite
8// - module pdo_sqlite activé dans le fichier php.ini
9// - sqlitebrowser (interface graphique pour sqlite)
10// - distribution LaTeX texlive
11// - zenity
12
13// zenity disponible
14if(exec("zenity --version 2> /dev/null") == '') // commande qui n'ouvre pas de fenêtre, erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null
15{
16 printf("Impossible de lancer zenity. Veuillez installer le paquet zenity\n");
17 exit();
18}
19
20// compilateur pdflatex disponible
21if(exec("pdflatex -version 2> /dev/null") == '') // erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null
22{
23 printf("Impossible de lancer pdflatex. Veuillez installer une distribution LaTeX.\n");
24 exit();
25}
26
27// test de la présence du paquet php-sqlite
28// compliqué? dépend de l'OS?
29// note: l'erreur se produit dès le démarrage de PHP si le php.ini est bon mais qu'il manque le paquet
30
31// module pdo_sqlite de PHP activé?
32if(!extension_loaded("pdo_sqlite"))
33{
34 printf("Impossible d'utiliser la base de données. Veuillez installer le paquet php-sqlite ET activer l'extension pdo_sqlite dans le fichier php.ini.\n");
35 exit();
36}
37
38
39// client sqlite
40if($exec_mode == 'gui')
41{
42 // sqlitebrowser disponible
43 if(exec("which sqlitebrowser 2> /dev/null") != '') // which parcourt les dossiers du PATH et affiche les chemins trouvés, erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null
44 {
45 $sqlitebrowser_enable = true;
46 }
47 // terminal en mode graphique disponible, permettra d'y utiliser sqlite dans la console
48 else
49 {
50 printf("Sqlitebrowser n'est pas disponible. J'espère que vous maîtrisez le SQL.\n");
51
52 if(exec("which xterm 2> /dev/null") != '' && exec("xterm -v 2> /dev/null") != '')
53 {
54 $x_term_ccommand = 'xterm -e';
55 }
56 elseif(exec("which urxvt 2> /dev/null") != '')
57 {
58 $x_term_ccommand = 'urxvt -e';
59 }
60 elseif(exec("which lxterminal 2> /dev/null") != '' && exec("lxterminal -v 2> /dev/null") != '')
61 {
62 $x_term_ccommand = 'lxterminal -e';
63 }
64 elseif(exec("which xfce4-terminal 2> /dev/null") != '' && exec("xfce4-terminal -V 2> /dev/null") != '')
65 {
66 $x_term_ccommand = 'xfce4-terminal -x';
67 }
68 elseif(exec("which gnome-terminal 2> /dev/null") != '')
69 {
70 $x_term_ccommand = 'gnome-terminal --';
71 }
72 elseif(exec("which konsole 2> /dev/null") != '' && exec("konsole -v 2> /dev/null") != '')
73 {
74 $x_term_ccommand = 'konsole -e';
75 }
76 // pour MAC - NON TESTÉ !! (possibilité de détecter le système avec uname?)
77 //~ elseif(exec("which Terminal 2> /dev/null") != '')
78 //~ {
79 //~ $x_term_ccommand = 'open -a Terminal -e'; // ne marche probablement pas
80 //~ }
81 else
82 {
83 printf("Impossible d'ouvrir un terminal pour y lancer sqlite. Veuillez installer un terminal en mode graphique (par exemple xterm).\n");
84 }
85 }
86}
87
88// sqlite CLI disponible
89if(exec("which sqlite 2> /dev/null") != '' && exec("sqlite --version 2> /dev/null") != '')
90{
91 $sqlite_cli = 'sqlite';
92}
93elseif(exec("which sqlite3 2> /dev/null") != '' && exec("sqlite3 --version 2> /dev/null") != '')
94{
95 $sqlite_cli = 'sqlite3';
96}
97else
98{
99 printf("Impossible de lancer sqlite dans le terminal en utilisant la commande ' . $sqlite_cli . '\n");
100}
diff --git a/php/functions.php b/php/functions.php
new file mode 100644
index 0000000..61bc13e
--- /dev/null
+++ b/php/functions.php
@@ -0,0 +1,26 @@
1<?php
2// php/functions.php
3
4// commande pour lancer une application graphique en ouvrant un fichier
5function window_app_command(string $app, string $path = ''): string
6{
7 $command = 'nohup ' . $app; // détache l'appli du script PHP
8 if($path != '')
9 {
10 $command .= ' ' . $path;
11 }
12 $command .= ' > /dev/null 2>&1 &';
13 // stdout > /dev/null et & permettent de rendre la main à PHP
14 // stderr > stdout pour cacher un message inutile
15 return $command;
16}
17
18function recherche_client(string $saisie): array
19{
20 $resultats = [];
21
22 // recherche dans la BDD
23
24
25 return($resultats);
26}
diff --git a/php/saisie.php b/php/saisie.php
new file mode 100644
index 0000000..4b41fbf
--- /dev/null
+++ b/php/saisie.php
@@ -0,0 +1,59 @@
1<?php
2// saisie.php
3
4$date = exec('zenity --calendar --width=320 --title="Enregistrer une prestation avec un nouveau client 1/2" --text="Choisir une date."');
5var_dump($date);
6
7$start_command = 'zenity --forms';
8$title = ' --title="Enregistrer une prestation avec un nouveau client 2/2"';
9$text = ' --text="Nouveau client"';
10$name = ' --add-entry="Prénom Nom:"';
11$adresse = ' --add-entry="Adresse:"';
12$prestation_type = ' --add-entry="Type de prestation:"';
13$tasks = ' --add-entry="Tâches effectuées:"';
14$computer_model = ' --add-entry="Modèle du PC:"';
15$system = ' --add-entry="OS:"';
16$computer_data = ' --add-entry="Données sauvegardées:"';
17$activation_keys = ' --add-entry="Clés d\'activation:"';
18$labour_time = ' --add-entry="Temps main d\'oeuvre (heures):"';
19$total_labour = ' --add-entry="Total main d\'oeuvre (euros):"';
20$total_parts = ' --add-entry="Total pièces (euros):"';
21$trip = ' --add-entry="Déplacement (euros)"';
22$total = ' --add-entry="Total HT (euros):"';
23$comments = ' --add-entry="Commentaires:"';
24
25$command = $start_command . $title . $text . $name . $adresse . $prestation_type . $tasks. $computer_model . $system . $computer_data . $activation_keys . $labour_time . $total_labour . $total_parts . $trip . $total . $comments;
26//$result = explode('|', "alain dubois|2 rue foch, rennes|assistance|boum le PC !!|tour acer|win 10|sur DD externe|dans le BIOS|2h, 80€|15,80€|10€|105,80€|client chiant");
27$result = explode('|', exec($command));
28var_dump($result);
29//exit();
30
31// nouveau client
32#$choix = exec('zenity --forms --title="Enregistrer une prestation 1/4" --text="Nouveau client" --add-entry="Prénom, nom:" --add-entry="Adresse:" --add-calendar="Date: (ici ou fenêtre suivante?)" --add-entry="Type de prestation:" --add-entry="Prix prestation:" --add-entry="Prix déplacement:" --add-entry="Total HT:"');
33
34// date
35#$date = exec('zenity --calendar --width=320 --title="Enregistrer une prestation 2/4" --text="Choisir une date."');
36// date sous la forme jj/mm/aaaa
37// utiliser ensuite cette option: --forms-date-format=MODÈLE Définit le format de la date retournée
38
39// détail prestation
40#$prestation = exec('zenity --forms --title="Enregistrer une prestation 3/4" --text="Tâches effectuées" --add-entry="Détails:" --add-entry="Modèle de l\'ordinateur:" --add-entry="OS:" --add-entry="Sauvegarde:" --add-entry="Clé d\'activation"');
41// infos saisies sous la forme aaa|bbb|ccc|ddd|eee
42
43// Prix total calculé automatiquement
44
45// référence de la facture avec format automatique par concaténation
46
47// commentaire personnel enregistré à part
48$commentaire = exec('zenity --entry --width=400 --title="Enregistrer une prestation 4/4" --text="Commentaire sur le déroulement de la prestation."');
49var_dump($result);
50// afficher le résultat en LaTeX et demande de confirmation
51// écrire du LaTeX avec PHP
52
53// mise à jour de la base de données
54
55// message de confirmation (si la base a bien été mise à jour), puis demande pour imprimer une facture
56$imprimer_facture = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer la facture?"');
57
58// imprimer une enveloppe
59$imprimer_enveloppe = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer l\'adresse sur une enveloppe? (insérer une enveloppe DL sans fenêtre dans l\'imprimante"');
diff --git a/php/zenity_text.php b/php/zenity_text.php
new file mode 100644
index 0000000..2246463
--- /dev/null
+++ b/php/zenity_text.php
@@ -0,0 +1,21 @@
1<?php
2// php/zenity_text.php
3
4// contenu des fenêtres zenity
5$menu_principal_text = "Gestion d'une micro-entreprise";
6$menu_principal_entrees = ["Nouvelle prestation", "Fichier clients", "Créer/imprimer un document", "Communication", "Base de données"];
7$question_nouveau_client_text = "Ce client figure t\'il déjà dans le fichier clients?";
8$menu_enregistrement_text = "Type d\'enregistrement?";
9$menu_enregistrement_entrees = ["Devis", "Facture", "CESU", "Pas de prestation"];
10$menu_documents_text = "Création de documents LaTeX";
11$menu_documents_entrees = ["Devis", "Facture", "Lettre avec adresse", "Livre des recettes", "Registre des achats", "Bilan annuel"];
12$menu_communication_text = "Imprimer un support de communication";
13$menu_communication_entrees = ["Flyer (nécessite gimp)", "Carte de visite (nécessite scribus)", "Explorateur de fichiers"];
14$recherche_client_text = "Recherche d'un client avec son nom ou son code client";
15$resultats_recherche_client_text = "Résultats de la recherche, sélectionner un client";
16$nouveau_client_text = "Nouveau client";
17$nouveau_client_entrees = ["Prénom Nom:", "Adresse:", "Code client, type: J.P.Duchmol"];
18$calendar_text = 'Nouvelle prestation étape 1/3 - Choisir une date';
19$formulaire_text = 'Nouvelle prestation 2/3 - Détail des travaux';
20$formulaire_entrees = ["Tâches effectuées:", "Modèle du PC:", "OS:", "Données sauvegardées:", "Clés d\'activation:", "Temps main d\'oeuvre (heures):", "Total main d\'oeuvre (euros):", "Total pièces (euros):", "Déplacement (euros)", "Total HT (euros):",];
21$commentaire_prestation_text = 'Nouvelle prestation 3/3 - Commentaires';