![]() |
Documentation du module DocDB |
echo affiche un texte sur l'écran du navigateur, ou strpos donne la position d'une chaîne de caractères dans une autre, ou encore sort va trier un tableau de valeurs. Ces fonctions sont très nombreuses et couvrent la quasi totalité des problèmes auxquels sont confrontés les développeurs.opendir, readdir ou readfile qui lisent des répertoires ou des fichiers contenus sur le disque du serveur, ou aussi exif_read_data, imagejpeg, ou getimagesize qui traitent les images. Il y en a bien d'autres, j'en recense 99 au moment ou j'écris ces lignes.blob, qui ne sont pas apparus très tôt dans l'histoire des bases de données, alors qu'au contraire les gros fichiers ont été une problématique réglée dès le début dans la conception des systèmes de fichiers.blob est au point de nos jours et on a donc avantage à l'utiliser dans Dolibarr.opendir est remplacé par opendir_Bypass. Là ou opendir ouvrait un répertoire sur le disque, opendir_Bypass va ouvrir et lire une table de la base de donnée. C'est ce qu'on appelle un émulateur. Les fonctions initiales sont émulées par les fonctions d'émulation. Elles produisent les mêmes résultats, mais avec une méthode sous-jacente totalement différente, et on agit de même pour toutes les fonctions qui concernent les documents. Une terminologie plus moderne parlerait peut-être de programmation orientée aspects.install.lock, ainsi que le sous-répertoire api nécessaire à certaines opérations. En tout cas, il ne stocke plus rien, les documents peuvent être supprimés. Ils sont maintenant stockés dans deux tables (llx_doc_data et llx_doc_directory) et sont donc associés de façon naturelle à toute opération de production concernant la base de données.docDBmigrateScripts.py et docDBmigrateFiles.py) à utiliser une fois chacun. Le premier modifie le code des scripts Dolibarr, et le deuxième pompe le répertoire des documents pour le charger dans la base de données. Ces deux opérations sont réversibles, ce qui permet de tester et de revenir en arrière si nécessaire.install-fr_FR.html livré avec le module. L'opération est assez simple et rapide pour qui dispose d'un minimum d'expérience de la ligne de commande.
--reverse pour recréer ces mêmes documents, seuls les dossiers non vides seront générés. Aucune importance en réalité, Dolibarr sait créer un dossier quand il en a besoin, et cela ne gênera pas le fonctionnement.htdocs/customdocDBmigrateScripts.py pour migrer votre module. La commande verra uniquement les modifications à faire dans le module, puisque les scripts Dolibarr auront déjà été migrés. N'hésitez pas à positionner l'option --dry-run lors d'un premier essai pour bien visualiser ce qui va se passer| Module | Version | Date du test | Nom du testeur |
|---|---|---|---|
| Scanner | 17.0.0 | 15/05/2023 | jmbc |
| Liste des opérations inclues dans le protocole : |
| - migration docDB |
| - comparaison docs initiaux / après reverse |
| - ajout/retrait logo |
| - caractères accentués dans le nom d’un document |
| - vérification génération pdf factures clients |
| - accès documents thumbnail |
| - accès documents document complet |
| - stockage document tiers |
| - recadrage document tiers |
| - stockage document projets |
| - espace GED : création dossier |
| - espace GED : chargement fichier |
| - espace GED : création sous-dossier |
| - espace GED : suppression dossier/sous-dossier |
| - espace GED : renommer dossier/sous-dossier/dossier avec fichiers |
| - espace GED : renommer fichier avec accents |
| - espace GED : arborescence automatique - développement |
| - espace GED : arborescence automatique - aperçu |
| - espace GED : arborescence automatique - accès factures clients |
| - espace GED : arborescence automatique - accès projets |
| - espace GED : arborescence automatique - accès tiers |
| - suite test - création 10 clients par API |
| - suite test - création 100 factures par client |
| - suite test - téléchargement 100 documents par client |
| - accès documents après reverse |
select default_character_set_name from information_schema.schemata where schema_name = "dolibarr_base_name";utf8mb4 ou utf8mb3É est different de E, à est différent de a, etc), alors qu'ils sont considérés comme équivalents lors d'une requête SQL. Ceci est gênant pour émuler un comportement de systèmes de fichiers dans une requête SQL, c'est pourquoi docDB utilise CHARSET=utf8 COLLATE=utf8_bin qui donne les résultats dont il a besoin.
install-fr_FR.html livré avec le module pour des exemples de fonctionnement.| docDBmigrateScripts |
Linux : python3 docDBmigrateScripts.py --dolibarrDir=path_name [--reverse] [--dry-run]Windows : py -X utf8 docDBmigrateScripts.py --dolibarrDir=path_name [--reverse] [--dry-run]Modifie le contenu des scripts du répertoire htdocs de Dolibarr de manière à réaliser l'accès en base de données.Par exemple, une séquence d'instructions if (file_exists($file)) va être transormées en if (file_exists_Bypass($file)). Ce traitement est réalisé pour la totalité des scripts PHP, à l'exception de ceux qui sont recopiés depuis le dossier install/scriptFiles de docDB.L'option --reverse remet les scripts à l'état standard
|
|
|---|---|---|
| --dolibarrDir | Chemin d'accès complet du répertoire htdocs de Dolibarr.Si Dolibarr est placé sur /var/www/dolibarr, alors --dolibarrDir= devra pointer sur /var/www/dolibarr/htdocs |
|
| --reverse | Demande la remise à l'état initial des scripts PHP de Dolibarr. Il ne s'agit pas d'une restauration qui reprendrait des fichiers sauvegardés, mais d'un traitement inverse des scripts trouvés dans le dossier |
|
| --dry-run | Demande un traitement d'essai. L'algorithme est suivi de manière exacte jusqu'au moment de la modification de l'élément traité, qui n'a finalement pas lieu |
|
| -X utf8 | Windows. Indique à python que le jeu de caractères utilisé dans le script est utf8 | |
| docDBmigrateFiles |
Linux : python3 docDBmigrateFiles.py --dolibarrDir=path_name [--reverse] [--dry-run]Windows : py -X utf8 docDBmigrateFiles.py --dolibarrDir=path_name [--reverse] [--dry-run] [--phpdir=php_binaries_path]Lit le contenu du répertoire documents de Dolibarr, et charge celui-ci dans la base de données. Le chemin d'accès du répertoire est connu grâce à la variable $dolibarr_main_data_root contenue dans le fichier de configuration de Dolibarr (htdocs/conf/conf.php). Celui-ci fournit également les paramètres d'accès à la base de données.Si un fichier est indiqué comme manquant, une correction doit être faite soit au niveau de la base de données (table llx_ecm_files) soit au niveau du dossier où le fichier est manquant. L'action correctrice est préférable de manière à éviter les problèmes ultérieurs lors de l'exploitation. On utilisera par exemple une commande sql delete from llx_ecm_files where filename like '%missing_file_name%'; pour éliminer la référence à un document qui n'existe plus. Dans ce cas, vérifier d'abord l'innocuité de la requête en utilisant d'abord une commande de consultation comme select filepath,filename from llx_ecm_files where filename like '%missing_file_name%'; afin de lister d'éventuels documents non concernés et risquant d'être supprimés à tord
|
|
|---|---|---|
| --dolibarrDir | Chemin d'accès complet du répertoire htdocs de Dolibarr.Si Dolibarr est placé sur /var/www/dolibarr, alors --dolibarrDir= devra pointer sur /var/www/dolibarr/htdocs |
|
| --reverse | Demande le chargement des documents GED depuis la base de données vers le dossier des documents Dolibarr. | |
| --dry-run | Demande un traitement d'essai. L'algorithme est suivi de manière exacte jusqu'au moment de la modification de l'élément traité, qui n'a pas lieu |
|
| -X utf8 | Windows. Indique à python que le jeu de caractères utilisé dans le script est utf8 | |
| --phpdir | Windows. Indique à python le chemin d'accès de l'exécutable PHP. Cette option est nécessaire si ce chemin d'accès n'est pas dans le |
|
| Requête SQL | Exemple de résultat | Explication |
|---|---|---|
select * from llx_doc_directory; |
| rowid | path_name |
| 1 | |
| 2 | /adherent |
| 3 | /adherent/1 |
| 4 | /adherent/10 |
| 5 | /adherent/11 |
|
La table docDB llx_doc_directory contient la liste des répertoires censés contenir les documents |
select rowid,path_name,filemtime, |
| rowid | path_name | filemtime | filesize | exif_data | imagesize |
| 1 | /adherent/1/Jean.pdf | 2023-01-27 21:36:39 | 153092 | 4 | 4 |
| 2 | /adherent/10/Jeanne.pdf | 2023-01-27 21:36:39 | 44421 | 4 | 4 |
| 3 | /adherent/11/Léo.pdf | 2023-01-30 09:56:36 | 16135 | 4 | 4 |
| 4 | /adherent/14/Charlie.pdf | 2023-01-30 09:56:18 | 25034 | 4 | 4 |
| 5 | /adherent/2/Arthur.pdf | 2023-01-27 21:36:39 | 44844 | 4 | 4 |
|
La table docDB llx_doc_data contient les documents. La colonne datablob n'est pas affichable. À la place filesize indique ce qui correspond à la taille du document. exif_data et imagesize sont des chaînes encodées contenant les caractéristiques des images s'il y a lieu (vides dans le cas des fichiers pdf) |
select filepath,filename from llx_ecm_files; |
| filepath | filename |
| adherent/1 | Jean.pdf |
| adherent/10 | Jeanne.pdf |
| adherent/11 | Léo.pdf |
| adherent/14 | Charlie.pdf |
| adherent/2 | Arthur.pdf |
|
La table Dolibarr llx_ecm_files contient la liste des documents et des chemins d'accès censés y accéder |
select label from llx_ecm_directories; |
| label |
| Documents annuels |
|
La table Dolibarr llx_ecm_directories contient la liste de certains répertoires, ceux qui sont créés par les utilisateurs dans l'espace GED |
file_exists, transformée par docDB en file_exists_Bypass, laquelle fonction utilise pour faire court la requête select rowid from llx_doc_data where path_name='/facture/FA2304-0001/FA2304-0001.pdf'. Si la requête est couronnée de succès, c'est-à-dire si le document existe dans la table llx_doc_data, docDB renvoie la valeur true.filectime pour connaître la date de création d'un fichier. C'est le cas de temps à autre, mais jamais pour un document. La fonction docDB correspondante filectime_Bypass se contente donc de faire appel à PHP quoi qu'il arrive et renvoie à Dolibarr le résultat renvoyé par PHP.filectime_Bypass. Ceci consisterait à tester si le fichier concerné est un document (if ($useByPass && doc_in_db($filename))) et à utiliser dans ce cas la requête SQL appropriée. Les fonctions docDB sont relativement simples et leur utilisation et extension est à la portée d'un programmeur PHP raisonnablement expérimenté.docDBmigrateScripts.py dans la variable KEYWORDS_FOUND_16.filebypass.php après le commentaire The following functions are not used in the Dolibarr documents context.
LOG_DEBUG(7).2023-05-12 15:00:02 DEBUG n.n.n.n DOC_DB ++ filesize /projet/PJ2303-0025/contrat_signé [370816]. Dans cet exemple, la mention DOC_DB ++ indique l'appel à la fonction filesize pour le document /projet/PJ2303-0025/contrat_signé avec une taille de 370816 renvoyée en retour.DOC_DB --, cela indique que la donnée renvoyée est celle de PHP, sans traitement particulier effectué par docDB.docDBmigrateFiles.py sous Windows, obtenir un plantage avec un message fieldnotfound error. Ceci indique qu'il faut préciser le path de PHP avec l'option --phpdir.exif_data est bien activée. À cet effet, vous pouvez suivre la procédure expliquée dans le guide d'installation.
COPYING pour plus de détails.