From 983384a9be62eb694a8e1cf640685973c2a23ec2 Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 18 Oct 2026 12:19:52 +0200 Subject: =?UTF-8?q?nouveau=20File.php,=20suppression=20de=20files.php,=20c?= =?UTF-8?q?ontenu=20d=C3=A9plac=C3=A9=20dans=20Latex.php=20et=20File.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/livre_recettes.php | 6 +- src/File.php | 129 +++++++++++++---------------------------- src/Latex.php | 34 ++++++++++- src/files.php | 99 ------------------------------- src/main.php | 8 +-- src/sections/2_service.php | 6 +- src/sections/3_modify_data.php | 10 ++-- "\303\240 faire.txt" | 11 +--- 8 files changed, 89 insertions(+), 214 deletions(-) delete mode 100644 src/files.php 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'); Config::hydrate(); // créer les dossiers si nécéssaire -makeFolder(Config::$db_path); -makeFolder(Config::$latex_path); -makeFolder(Config::$pdf_path); +File::makeFolder(Config::$db_path); +File::makeFolder(Config::$latex_path); +File::makeFolder(Config::$pdf_path); //require 'src/model/doctrine-bootstrap.php'; require __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 @@ file_name = $file_name; - $this->path = $path; - } - - // getters - public function getData(): string - { - return $this->data; - } - - // setters - public function setFileName($file_name) - { - $this->file_name = $file_name; - } - - public function setPath($path) - { - $this->path = $path; - } - - public function setData($data) - { - $this->data = $data; - } - - public function setFileRights(int $octal) - { - $this->file_rights($octal); - } - public function setFolderRights(int $octal) - { - $this->folder_rights($octal); - } - - public function setWriteMod(int $mod) - { - $this->write_mod = $mod; - } - - - // fichiers - public function readFile(): string - {} - - public function writeFile() - { - file_put_contents($this->path. $this->file_name, $data); - chmod($this->path, $this->file_rights); - } - - - // dossiers - public function makeFolder() + if(!is_dir($path) || !is_writable($path)){ + echo "erreur: dossier de destination interdit en écriture\n"; + } + + if(!file_put_contents($path . $file_name, $data)){ // le / ajouté dans PrestaLatex::setData + echo "erreur: dossier de destination interdit en écriture\n"; + } + chmod($path . $file_name, 0644); // droits en octal + } + //~ protected function createFile(string $latex, string $file_name, string $latexPath) + //~ { + //~ // nom du fichier créé = nom.tex + //~ // pour les devis, factures et enveloppes, le nom est le code la prestation + //~ // pour les livre de recettes et registres des achats mensuels: + //~ // le nom du fichier suit cet exemple: "Recettes-2022-06-Juin.tex" + //~ // pour le livre de recette ou le registre des achats annuel, même principe: "Achats-2022.tex" + //~ // pour le bilan comptable annuel, ça donne: "Bilan-2022.tex" + //~ $fichier = fopen($latexPath . $file_name, "w+"); + //~ fputs($fichier, $latex); + //~ fclose($fichier); + //~ } + + static public function makeFolder(string $path): void { - if(!file_exists($this->path)) - { - mkdir($this->path); - chmod($this->path, $this->folder_rights); + if(!is_dir($path)){ + if(!mkdir($path, 0755)){ + echo "erreur : impossible de créer le dossier.\n"; + return; + } + } + elseif(!chmod($path, 0755)){ + echo "erreur: impossible de modifier les permissions du dossier\n"; } } -} -// compilation à partir d'un fichier .tex -class latexToPdf extends File -{ - public function __construct(string $latex_path, string $file_name, string $pdf_path) - {} - - $output_dir = ''; - if($pdf_path !== '') + // équivalent de la commande mv + static public function renameFiles(Object $Object, string $old_code, string $new_code): void { - $output_dir = '-output-directory=' . $pdf_path . ' '; + rename($Object->getLatexPath() . $old_code . '.tex', + $Object->getLatexPath() . $new_code . '.tex'); + rename($Object->getPdfPath() . $old_code . '.pdf', + $Object->getPdfPath() . $new_code . '.pdf'); } - - // compilation - //echo 'pdflatex ' . $output_dir . $latex_path . $file_name . "\n"; - exec('pdflatex ' . $output_dir . $latex_path . $file_name); - - // nettoyage - $basename = basename($file_name, '.tex'); - unlink($pdf_path . $basename . '.aux'); - unlink($pdf_path . $basename . '.log'); + + //~ function removeFile(Object $Object) + //~ {} } 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 // puis la mémoire est libérée à la fin de la fonction // le PHP inséré fait donc partie de cette "mémoire" } + + public function makeTexAndPdf(): void // document polymorphe + { + if(get_class($this) !== 'EnveloppeVersoLatex') + { + File::makeFolder($this->latex_path); + File::makeFolder($this->pdf_path); + } + File::makeFile($this->latex_path, $this->file_name, $this->latex); // fichier .tex + $this->latexToPdf(); + } + + // commande système pdflatex + private function latexToPdf(): void + { + // paramètre optionnel + $output_dir = ''; + if($this->pdf_path !== '') + { + $output_dir = '-output-directory=' . $this->pdf_path; + } + + // compilation + exec('pdflatex ' . $output_dir . ' ' . $this->latex_path . $this->file_name); + + // nettoyage + $basename = basename($this->file_name, '.tex'); + unlink($this->pdf_path . $basename . '.aux'); + unlink($this->pdf_path . $basename . '.log'); + } // getters public function getFileName(): string @@ -109,8 +139,8 @@ abstract class PrestaLatex extends Latex { $this->file_name = $Object->getCodePresta() . '.tex'; $this->date_array = explode('-', $Object->getdate()); - $this->latex_path = Config::$latex_path . $this->date_array[0] . '/'; - $this->pdf_path = Config::$pdf_path . $this->date_array[0] . '/'; + $this->latex_path = Config::$latex_path . $this->date_array[0] . DIRECTORY_SEPARATOR; + $this->pdf_path = Config::$pdf_path . $this->date_array[0] . DIRECTORY_SEPARATOR; } 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 @@ -getLatexPath() . $old_code . '.tex', - $Object->getLatexPath() . $new_code . '.tex'); - rename($Object->getPdfPath() . $old_code . '.pdf', - $Object->getPdfPath() . $new_code . '.pdf'); -} - -function makeTexAndPdf(Object $Object) // paramètre = enfant de Latex -{ - if(get_class($Object) !== 'EnveloppeVersoLatex') - { - makeFolder($Object->getLatexPath()); - makeFolder($Object->getPdfPath()); - } - makeFile($Object->getLatexPath(), $Object->getFileName(), $Object->getLatex()); // fichier .tex - latexToPdf($Object->getLatexPath(), $Object->getFileName(), $Object->getPdfPath()); // fichier .pdf avec pdflatex -} - -//~ function removeFile(Object $Object) -//~ {} 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(); //require('config_window.php'); // configuration user-friendly et assistée avec des messages d'erreur et des indications // création du dossier data et sous-dossiers -//require('model/File.php'); // utilité d'une classe File? -require 'src/files.php'; -makeFolder(Config::$db_path); -makeFolder(Config::$latex_path); -makeFolder(Config::$pdf_path); +File::makeFolder(Config::$db_path); +File::makeFolder(Config::$latex_path); +File::makeFolder(Config::$pdf_path); // variables diverses $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 } // création des fichiers - makeTexAndPdf($EnveloppeRecto); - makeTexAndPdf($EnveloppeVerso); + $EnveloppeRecto->makeTexAndPdf(); + $EnveloppeVerso->makeTexAndPdf(); if($DocumentPresta !== null) { - makeTexAndPdf($DocumentPresta); + $DocumentPresta->makeTexAndPdf(); } 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 $EnveloppeRecto = Latex::makeInstance('enveloppe_recto'); $EnveloppeRecto->setData($Client); $EnveloppeRecto->makeLatex(); - makeTexAndPdf($EnveloppeRecto); + $EnveloppeRecto->makeTexAndPdf(); } else { @@ -155,8 +155,8 @@ function modifyData(?Client $Client = null): array $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails); $DocumentPresta->makeLatex(); // en mémoire - renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta()); - makeTexAndPdf($DocumentPresta); // une nouvelle facture est créée, supprimer l'ancienne ou la renommer avec la nouvelle date + File::renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta()); + $DocumentPresta->makeTexAndPdf(); // une nouvelle facture est créée, supprimer l'ancienne ou la renommer avec la nouvelle date } return [3, $Client]; // menu précédent @@ -194,8 +194,8 @@ function modifyData(?Client $Client = null): array $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails); // polymorphisme $DocumentPresta->makeLatex(); - renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta()); - makeTexAndPdf($DocumentPresta); + File::renameFiles($DocumentPresta, $old_code, $Presta->getCodePresta()); + $DocumentPresta->makeTexAndPdf(); } } else diff --git "a/\303\240 faire.txt" "b/\303\240 faire.txt" index 7530062..15275a9 100644 --- "a/\303\240 faire.txt" +++ "b/\303\240 faire.txt" @@ -3,6 +3,8 @@ Prestations classe abstraite + héritage? calcul correct des code presta si une ancienne facture est modifiée +permettre de modifier le code_presta dans "Modifier une prestation" +une classe CodePresta? structure BDD en anglais @@ -32,15 +34,8 @@ changer les fichiers dans "pub" factoriser la partie 4 dans 3_modify_data.php -décider quoi faire avec le fichier File.php - -src/files.php: dans makeFile() et makeFolder() -améliorer is_writable() pour renvoyer true du moment que PHP peut écrire - src/dependances.php: tester les dépendances de texlive -permettre de modifier le code_presta dans "Modifier une prestation" - erreur de bash avec zenity: > remplacer 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) les constantes sont globales, remplacer donc ZenitySetup.php par un vrai fichier de données (json, yaml, ini) -une classe CodePresta? - pouvoir faire plusieurs modifications d'une presta sans devoir la retrouver à chaque fois possibilité d'imprimer une facture vierge avec juste les coordonnées d'un client pour remplir sur-place -- cgit v1.2.3