summaryrefslogtreecommitdiff
path: root/src
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 /src
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
Diffstat (limited to 'src')
-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
6 files changed, 84 insertions, 202 deletions
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