summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2026-10-18 12:19:52 +0200
committerpolo <ordipolo@gmx.fr>2026-10-18 12:19:52 +0200
commit983384a9be62eb694a8e1cf640685973c2a23ec2 (patch)
tree5e4c8c6f2862a4eec289de634851108fcc165ce4
parent10c5064932f417e3ca38176224178bb6a1b9ab55 (diff)
downloadAppliGestionPHP-983384a9be62eb694a8e1cf640685973c2a23ec2.tar.gz
AppliGestionPHP-983384a9be62eb694a8e1cf640685973c2a23ec2.tar.bz2
AppliGestionPHP-983384a9be62eb694a8e1cf640685973c2a23ec2.zip
nouveau File.php, suppression de files.php, contenu déplacé dans Latex.php et File.php
-rwxr-xr-xbin/livre_recettes.php6
-rw-r--r--src/File.php129
-rw-r--r--src/Latex.php34
-rw-r--r--src/files.php99
-rw-r--r--src/main.php8
-rw-r--r--src/sections/2_service.php6
-rw-r--r--src/sections/3_modify_data.php10
-rw-r--r--à faire.txt11
8 files changed, 89 insertions, 214 deletions
diff --git a/bin/livre_recettes.php b/bin/livre_recettes.php
index 9e39f39..54418a4 100755
--- a/bin/livre_recettes.php
+++ b/bin/livre_recettes.php
@@ -15,9 +15,9 @@ Config::readFile('config/config.ini');
15Config::hydrate(); 15Config::hydrate();
16 16
17// créer les dossiers si nécéssaire 17// créer les dossiers si nécéssaire
18makeFolder(Config::$db_path); 18File::makeFolder(Config::$db_path);
19makeFolder(Config::$latex_path); 19File::makeFolder(Config::$latex_path);
20makeFolder(Config::$pdf_path); 20File::makeFolder(Config::$pdf_path);
21 21
22//require 'src/model/doctrine-bootstrap.php'; 22//require 'src/model/doctrine-bootstrap.php';
23require __DIR__ . '/../src/model/doctrine-bootstrap.php'; // chemin absolu 23require __DIR__ . '/../src/model/doctrine-bootstrap.php'; // chemin absolu
diff --git a/src/File.php b/src/File.php
index 660a2e1..f4fdf76 100644
--- a/src/File.php
+++ b/src/File.php
@@ -1,101 +1,54 @@
1<?php 1<?php
2// src/File.php 2// src/File.php
3//
4// manipulations des fichiers
5 3
6class File 4class File
7{ 5{
8 private $file_name = ''; 6 static public function makeFile(string $path, string $file_name, mixed $data): void
9 private $path = '';
10 private $data = ''; // écriture de binaire (blob) non prévue
11 private $file_rights = 0644;
12 private $folder_rights = 0755; // droits en octal
13 private $write_mod = 0; // 0 = écraser, 1 = ajouter à la suite, 2 = nouveau fichier
14
15
16 public function __construct(string $file_name, string $path)
17 { 7 {
18 $this->file_name = $file_name; 8 if(!is_dir($path) || !is_writable($path)){
19 $this->path = $path; 9 echo "erreur: dossier de destination interdit en écriture\n";
20 } 10 }
21 11
22 // getters 12 if(!file_put_contents($path . $file_name, $data)){ // le / ajouté dans PrestaLatex::setData
23 public function getData(): string 13 echo "erreur: dossier de destination interdit en écriture\n";
24 { 14 }
25 return $this->data; 15 chmod($path . $file_name, 0644); // droits en octal
26 } 16 }
27 17 //~ protected function createFile(string $latex, string $file_name, string $latexPath)
28 // setters 18 //~ {
29 public function setFileName($file_name) 19 //~ // nom du fichier créé = nom.tex
30 { 20 //~ // pour les devis, factures et enveloppes, le nom est le code la prestation
31 $this->file_name = $file_name; 21 //~ // pour les livre de recettes et registres des achats mensuels:
32 } 22 //~ // le nom du fichier suit cet exemple: "Recettes-2022-06-Juin.tex"
33 23 //~ // pour le livre de recette ou le registre des achats annuel, même principe: "Achats-2022.tex"
34 public function setPath($path) 24 //~ // pour le bilan comptable annuel, ça donne: "Bilan-2022.tex"
35 { 25 //~ $fichier = fopen($latexPath . $file_name, "w+");
36 $this->path = $path; 26 //~ fputs($fichier, $latex);
37 } 27 //~ fclose($fichier);
38 28 //~ }
39 public function setData($data) 29
40 { 30 static public function makeFolder(string $path): void
41 $this->data = $data;
42 }
43
44 public function setFileRights(int $octal)
45 {
46 $this->file_rights($octal);
47 }
48 public function setFolderRights(int $octal)
49 {
50 $this->folder_rights($octal);
51 }
52
53 public function setWriteMod(int $mod)
54 {
55 $this->write_mod = $mod;
56 }
57
58
59 // fichiers
60 public function readFile(): string
61 {}
62
63 public function writeFile()
64 {
65 file_put_contents($this->path. $this->file_name, $data);
66 chmod($this->path, $this->file_rights);
67 }
68
69
70 // dossiers
71 public function makeFolder()
72 { 31 {
73 if(!file_exists($this->path)) 32 if(!is_dir($path)){
74 { 33 if(!mkdir($path, 0755)){
75 mkdir($this->path); 34 echo "erreur : impossible de créer le dossier.\n";
76 chmod($this->path, $this->folder_rights); 35 return;
36 }
37 }
38 elseif(!chmod($path, 0755)){
39 echo "erreur: impossible de modifier les permissions du dossier\n";
77 } 40 }
78 } 41 }
79}
80 42
81// compilation à partir d'un fichier .tex 43 // équivalent de la commande mv
82class latexToPdf extends File 44 static public function renameFiles(Object $Object, string $old_code, string $new_code): void
83{
84 public function __construct(string $latex_path, string $file_name, string $pdf_path)
85 {}
86
87 $output_dir = '';
88 if($pdf_path !== '')
89 { 45 {
90 $output_dir = '-output-directory=' . $pdf_path . ' '; 46 rename($Object->getLatexPath() . $old_code . '.tex',
47 $Object->getLatexPath() . $new_code . '.tex');
48 rename($Object->getPdfPath() . $old_code . '.pdf',
49 $Object->getPdfPath() . $new_code . '.pdf');
91 } 50 }
92 51
93 // compilation 52 //~ function removeFile(Object $Object)
94 //echo 'pdflatex ' . $output_dir . $latex_path . $file_name . "\n"; 53 //~ {}
95 exec('pdflatex ' . $output_dir . $latex_path . $file_name);
96
97 // nettoyage
98 $basename = basename($file_name, '.tex');
99 unlink($pdf_path . $basename . '.aux');
100 unlink($pdf_path . $basename . '.log');
101} 54}
diff --git a/src/Latex.php b/src/Latex.php
index f49fdea..c638264 100644
--- a/src/Latex.php
+++ b/src/Latex.php
@@ -57,6 +57,36 @@ abstract class Latex
57 // puis la mémoire est libérée à la fin de la fonction 57 // puis la mémoire est libérée à la fin de la fonction
58 // le PHP inséré fait donc partie de cette "mémoire" 58 // le PHP inséré fait donc partie de cette "mémoire"
59 } 59 }
60
61 public function makeTexAndPdf(): void // document polymorphe
62 {
63 if(get_class($this) !== 'EnveloppeVersoLatex')
64 {
65 File::makeFolder($this->latex_path);
66 File::makeFolder($this->pdf_path);
67 }
68 File::makeFile($this->latex_path, $this->file_name, $this->latex); // fichier .tex
69 $this->latexToPdf();
70 }
71
72 // commande système pdflatex
73 private function latexToPdf(): void
74 {
75 // paramètre optionnel
76 $output_dir = '';
77 if($this->pdf_path !== '')
78 {
79 $output_dir = '-output-directory=' . $this->pdf_path;
80 }
81
82 // compilation
83 exec('pdflatex ' . $output_dir . ' ' . $this->latex_path . $this->file_name);
84
85 // nettoyage
86 $basename = basename($this->file_name, '.tex');
87 unlink($this->pdf_path . $basename . '.aux');
88 unlink($this->pdf_path . $basename . '.log');
89 }
60 90
61 // getters 91 // getters
62 public function getFileName(): string 92 public function getFileName(): string
@@ -109,8 +139,8 @@ abstract class PrestaLatex extends Latex
109 { 139 {
110 $this->file_name = $Object->getCodePresta() . '.tex'; 140 $this->file_name = $Object->getCodePresta() . '.tex';
111 $this->date_array = explode('-', $Object->getdate()); 141 $this->date_array = explode('-', $Object->getdate());
112 $this->latex_path = Config::$latex_path . $this->date_array[0] . '/'; 142 $this->latex_path = Config::$latex_path . $this->date_array[0] . DIRECTORY_SEPARATOR;
113 $this->pdf_path = Config::$pdf_path . $this->date_array[0] . '/'; 143 $this->pdf_path = Config::$pdf_path . $this->date_array[0] . DIRECTORY_SEPARATOR;
114 } 144 }
115 145
116 return $this; // pour chainer les méthodes 146 return $this; // pour chainer les méthodes
diff --git a/src/files.php b/src/files.php
deleted file mode 100644
index 2a68d9d..0000000
--- a/src/files.php
+++ /dev/null
@@ -1,99 +0,0 @@
1<?php
2// src/files.php
3//
4// fonctions pour manipuler les fichiers latex et pdf
5
6function makeFile($path, $file_name, $data)
7{
8 //~ if(is_writable('../' . $path))
9 //~ {
10 file_put_contents($path. $file_name, $data);
11 chmod($path . $file_name, 0644); // droits en octal
12 //~ }
13
14 //~ protected function createFile(string $latex, string $file_name, string $latexPath)
15 //~ {
16 //~ // nom du fichier créé = nom.tex
17 //~ // pour les devis, factures et enveloppes, le nom est le code la prestation
18 //~ // pour les livre de recettes et registres des achats mensuels:
19 //~ // le nom du fichier suit cet exemple: "Recettes-2022-06-Juin.tex"
20 //~ // pour le livre de recette ou le registre des achats annuel, même principe: "Achats-2022.tex"
21 //~ // pour le bilan comptable annuel, ça donne: "Bilan-2022.tex"
22 //~ $fichier = fopen($latexPath . $file_name, "w+");
23 //~ fputs($fichier, $latex);
24 //~ fclose($fichier);
25 //~ }
26}
27
28function makeFolder(string $path)
29{
30 $rights = 0755; // droits en octal
31
32 if(!file_exists($path))
33 {
34 //~ if(is_writable('../' . $path))
35 //~ {
36 mkdir($path);
37 chmod($path, $rights);
38 //~ }
39 //~ else
40 //~ {
41 //~ echo "debug: la création du dossier " . $path . " est impossible\n";
42 //~ }
43 }
44 else
45 {
46 //~ if(is_writable($path))
47 //~ {
48 chmod($path, $rights);
49 //~ }
50 //~ else
51 //~ {
52 //~ echo "debug: la modification des droits du dossier " . $path . " est impossible\n";
53 //~ }
54 }
55}
56
57// commande système pdflatex
58function latexToPdf(string $latex_path, string $file_name, string $pdf_path)
59{
60 // paramètre optionnel
61 $output_dir = '';
62 if($pdf_path !== '')
63 {
64 $output_dir = '-output-directory=' . $pdf_path;
65 }
66
67 // compilation
68 //echo 'pdflatex ' . $output_dir . ' ' . $latex_path . $file_name . "\n";
69 //die;
70 exec('pdflatex ' . $output_dir . ' ' . $latex_path . $file_name);
71
72 // nettoyage
73 $basename = basename($file_name, '.tex');
74 unlink($pdf_path . $basename . '.aux');
75 unlink($pdf_path . $basename . '.log');
76}
77
78// équivalent de la commande mv
79function renameFiles(Object $Object, string $old_code, string $new_code)
80{
81 rename($Object->getLatexPath() . $old_code . '.tex',
82 $Object->getLatexPath() . $new_code . '.tex');
83 rename($Object->getPdfPath() . $old_code . '.pdf',
84 $Object->getPdfPath() . $new_code . '.pdf');
85}
86
87function makeTexAndPdf(Object $Object) // paramètre = enfant de Latex
88{
89 if(get_class($Object) !== 'EnveloppeVersoLatex')
90 {
91 makeFolder($Object->getLatexPath());
92 makeFolder($Object->getPdfPath());
93 }
94 makeFile($Object->getLatexPath(), $Object->getFileName(), $Object->getLatex()); // fichier .tex
95 latexToPdf($Object->getLatexPath(), $Object->getFileName(), $Object->getPdfPath()); // fichier .pdf avec pdflatex
96}
97
98//~ function removeFile(Object $Object)
99//~ {}
diff --git a/src/main.php b/src/main.php
index 9b8cf8e..edf10f2 100644
--- a/src/main.php
+++ b/src/main.php
@@ -11,11 +11,9 @@ Config::hydrate();
11//require('config_window.php'); // configuration user-friendly et assistée avec des messages d'erreur et des indications 11//require('config_window.php'); // configuration user-friendly et assistée avec des messages d'erreur et des indications
12 12
13// création du dossier data et sous-dossiers 13// création du dossier data et sous-dossiers
14//require('model/File.php'); // utilité d'une classe File? 14File::makeFolder(Config::$db_path);
15require 'src/files.php'; 15File::makeFolder(Config::$latex_path);
16makeFolder(Config::$db_path); 16File::makeFolder(Config::$pdf_path);
17makeFolder(Config::$latex_path);
18makeFolder(Config::$pdf_path);
19 17
20// variables diverses 18// variables diverses
21$exec_mode = 'gui'; // les versions pure console (CLI) et serveur web (CGI) de ce programme ne sont pas prévues pour l'instant 19$exec_mode = 'gui'; // les versions pure console (CLI) et serveur web (CGI) de ce programme ne sont pas prévues pour l'instant
diff --git a/src/sections/2_service.php b/src/sections/2_service.php
index 4dccdb9..dc16fe8 100644
--- a/src/sections/2_service.php
+++ b/src/sections/2_service.php
@@ -169,12 +169,12 @@ function newService(?Client $Client = null): array
169 } 169 }
170 170
171 // création des fichiers 171 // création des fichiers
172 makeTexAndPdf($EnveloppeRecto); 172 $EnveloppeRecto->makeTexAndPdf();
173 makeTexAndPdf($EnveloppeVerso); 173 $EnveloppeVerso->makeTexAndPdf();
174 174
175 if($DocumentPresta !== null) 175 if($DocumentPresta !== null)
176 { 176 {
177 makeTexAndPdf($DocumentPresta); 177 $DocumentPresta->makeTexAndPdf();
178 } 178 }
179 179
180 180
diff --git a/src/sections/3_modify_data.php b/src/sections/3_modify_data.php
index f021285..d70c7d6 100644
--- a/src/sections/3_modify_data.php
+++ b/src/sections/3_modify_data.php
@@ -77,7 +77,7 @@ function modifyData(?Client $Client = null): array
77 $EnveloppeRecto = Latex::makeInstance('enveloppe_recto'); 77 $EnveloppeRecto = Latex::makeInstance('enveloppe_recto');
78 $EnveloppeRecto->setData($Client); 78 $EnveloppeRecto->setData($Client);
79 $EnveloppeRecto->makeLatex(); 79 $EnveloppeRecto->makeLatex();
80 makeTexAndPdf($EnveloppeRecto); 80 $EnveloppeRecto->makeTexAndPdf();
81 } 81 }
82 else 82 else
83 { 83 {
@@ -155,8 +155,8 @@ function modifyData(?Client $Client = null): array
155 $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails); 155 $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails);
156 $DocumentPresta->makeLatex(); // en mémoire 156 $DocumentPresta->makeLatex(); // en mémoire
157 157
158 renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta()); 158 File::renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta());
159 makeTexAndPdf($DocumentPresta); // une nouvelle facture est créée, supprimer l'ancienne ou la renommer avec la nouvelle date 159 $DocumentPresta->makeTexAndPdf(); // une nouvelle facture est créée, supprimer l'ancienne ou la renommer avec la nouvelle date
160 } 160 }
161 161
162 return [3, $Client]; // menu précédent 162 return [3, $Client]; // menu précédent
@@ -194,8 +194,8 @@ function modifyData(?Client $Client = null): array
194 $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails); // polymorphisme 194 $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails); // polymorphisme
195 $DocumentPresta->makeLatex(); 195 $DocumentPresta->makeLatex();
196 196
197 renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta()); 197 File::renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta());
198 makeTexAndPdf($DocumentPresta); 198 $DocumentPresta->makeTexAndPdf();
199 } 199 }
200 } 200 }
201 else 201 else
diff --git a/à faire.txt b/à faire.txt
index 7530062..15275a9 100644
--- a/à faire.txt
+++ b/à faire.txt
@@ -3,6 +3,8 @@
3Prestations classe abstraite + héritage? 3Prestations classe abstraite + héritage?
4 4
5calcul correct des code presta si une ancienne facture est modifiée 5calcul correct des code presta si une ancienne facture est modifiée
6permettre de modifier le code_presta dans "Modifier une prestation"
7une classe CodePresta?
6 8
7structure BDD en anglais 9structure BDD en anglais
8 10
@@ -32,15 +34,8 @@ changer les fichiers dans "pub"
32 34
33factoriser la partie 4 dans 3_modify_data.php 35factoriser la partie 4 dans 3_modify_data.php
34 36
35décider quoi faire avec le fichier File.php
36
37src/files.php: dans makeFile() et makeFolder()
38améliorer is_writable() pour renvoyer true du moment que PHP peut écrire
39
40src/dependances.php: tester les dépendances de texlive 37src/dependances.php: tester les dépendances de texlive
41 38
42permettre de modifier le code_presta dans "Modifier une prestation"
43
44erreur de bash avec zenity: > 39erreur de bash avec zenity: >
45 40
46remplacer la durée de location par les dates de début et de fin 41remplacer la durée de location par les dates de début et de fin
@@ -49,8 +44,6 @@ taille des fenêtres zenity (avec gtk4)
49 44
50les constantes sont globales, remplacer donc ZenitySetup.php par un vrai fichier de données (json, yaml, ini) 45les constantes sont globales, remplacer donc ZenitySetup.php par un vrai fichier de données (json, yaml, ini)
51 46
52une classe CodePresta?
53
54pouvoir faire plusieurs modifications d'une presta sans devoir la retrouver à chaque fois 47pouvoir faire plusieurs modifications d'une presta sans devoir la retrouver à chaque fois
55 48
56possibilité d'imprimer une facture vierge avec juste les coordonnées d'un client pour remplir sur-place 49possibilité d'imprimer une facture vierge avec juste les coordonnées d'un client pour remplir sur-place