/dev/null 2>&1 &'; // stdout > /dev/null et & permettent de rendre la main à PHP // stderr > stdout pour cacher un message inutile return $command; } function enterCustomer($Client): bool { // fenêtre $NouveauClient = new ZenityForms(ZenitySetup::$nouveau_client['text'], ZenitySetup::$nouveau_client['entrees']); $input = exec($NouveauClient->get()); if($input == '') { echo "debug: annulation lors de l'enregistrement d'un nouveau client\n"; return false; } if(!$Client->hydrateFromForm($input)) { // messages d'erreur dans hydrateFromForm() return false; } unset($input); $Client->create(); // écrire dans la base $Client->setID(); // sans paramètre, exécute un $this->db->lastInsertId() return true; } function makeObjectClient() { // fenêtres $RechercheClient = new zenityEntry(ZenitySetup::$recherche_client_text); $ResultatsRechercheClient = new ZenityList(ZenitySetup::$resultats_recherche_client_text, []); $Client = new Clients; $input = exec($RechercheClient->get()); if($input == '') { echo "debug: recherche annulée ou saisie vide\n"; return 0; } echo "debug: recherche effectuée\n"; $ResultatsRechercheClient->setListRows( searchCustomer($input, $Client), count(StructTablesDB::$structureOfTables[$Client->getTable()])); // 2è paramètre = nombre de colonnes // sélection parmi les résultats $input = exec($ResultatsRechercheClient->get()); // renvoie l'ID de la table 'clients' $ResultatsRechercheClient->cleanCommand(); if($input == '') { echo "debug: client pas trouvé ou pas sélectionné\n"; return 0; } echo "debug: client sélectionné\n"; $Client->setID($input); $Client->hydrate($Client->findById()); return $Client; } // NOTE 1: en PHP les objets sont passés aux fonctions par référence par défaut, toutefois ce n'est pas entièrement vrai // NOTE 2: PHP n'a pas de pointeur mais des références, une référence est un alias qui ne contient pas l'objet lui-même // NOTE 3: la variable créée lors d'un "new" est elle-même une référence contenant un identifiant (= le pointeur?) // NOTE 4: l'objet est détruit lorsque la dernière référence est supprimée function searchCustomer(string $input, Clients $Client): array { $input_array = explode(' ', $input); // si plusieurs mot, on les recherche tous l'un après l'autre $result = $Client->findByKeywords($input_array, 'prenom_nom'); // on obtient un tableau à deux dimensions avec les entrées trouvées //var_dump($result); return($result); } function getServices(Clients $Client, string $type = '') { echo "debug: recherche d'une prestation\n"; // on recherche les ID des prestas dans la table 'prestations' avec 'ID_client' $Presta = new Prestations($Client->getID()); $Presta->setTypePresta($type); $IDs = $Presta->getIDsByIdClient(); // comportement différent si le type est connu unset($Presta); // mettres toutes les données dans un tableau $PrestaList = []; foreach($IDs as $id) { $PrestaList[$id] = new Prestations($Client->getID()); // renseigne 'ID_client' $PrestaList[$id]->setID($id); // ID de la prestation = clé du tableau $PrestaList[$id]->hydrate($PrestaList[$id]->findById()); // données copiés de la table à l'objet } // fenêtre $entrees = []; foreach($PrestaList as $Presta) { $id = $Presta->getID(); $entrees[$id][] = $id; $Date = new Dates((int)$Presta->getDate()); // envoi du timestamp, (int) est là par sécurité $entrees[$id][] = $Date->getDate(); $entrees[$id][] = $Presta->getTypePresta(); $entrees[$id][] = $Presta->getCodePresta(); } $ResultatsRecherchePresta = new ZenityList(ZenitySetup::$resultats_recherche_presta_text, []); $ResultatsRecherchePresta->setListRows($entrees, 4); // choix de l'utilisateur $input = exec($ResultatsRecherchePresta->get()); // $input est l'ID de la prestation if($input == '') { echo "debug: recherche annulée ou saisie vide\n"; return 0; } else { return $PrestaList[$input]; } }