-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NEW: Create a DB static function to check deprecated table names #31968
Conversation
It looks like in many places, there some code to change table name from old "french" names that are deprecated throughout version releases in favour of english names for internationalisation of Dolibarr. I propose to place this code as a common static function in the DoliDB class (which is generally contained in every other class). This would allow to continue to change table names without having to check every class for usage of old names and fix it. Usage: If object has no $db property; `$table_name = DoliDB::checkTableName($table_name);` if object has a $db property: `$table_name = $this->db->checkTableName($table_name);`
Originally I added this function to CommonObject, but it looked to me that using DoliDB as recipient is more logical. However, I forgot to adapt this change during the copy/paste. Sorry.
@omogenot I don't understand the purpose of this function! Can you tell me more? |
This is just var name of deprecated table name? It's poor to add this function! |
The purpose is to centralise the capture and replacement of deprecated table names so that this is not done all over the code, with the possibility to be forgotten. To illustrate this, as an example, take the
which would be replaced by just one call:
Now, imagine tomorrow you decide to rename the database table Hope I have been clear enough. Do not hesitate to contact me again if need be. Olivier. |
J'avoue que la question posée en anglais était plus claire que ce commentaire. Et justement, le but de la manoeuvre est d'éviter de modifier toutes les classes si un nom de table devait être traduit. |
@omogenot yep but the static :
is static and if you add another "static" table name you could change this array ! this is not flexible |
I don't understand your comment. Why is this not flexible? It's static, not private. The table is static so that you can call it in any php file, even if you do not have access (or need to access) to a $db object. |
@omogenot à mon sens il ne faut plus définir des noms en dur dans le code ! à chaque modifications il faut modifier le code... faisons en sorte d'avoir un code commun qui ne dépend plus de valeurs pré établies... mais un code qui réagit en fonction de données en base ou en constantes ! |
@omogenot ce code est static et nécessite de le modifier si il y a un changement static $_deprecated_table_names = array( ce code est déprécié justement ! |
Justement, avec cette fonction centralisée, on évite de devoir changer quoi que ce soit dans le code si on change encore de nom de table. D'accord pour ne plus utiliser de nom en dur, mais alors que proposez vous? |
Je dois être idot parce que je ne comprends pas le commentaire. S'il y a un changement de nom de table, que le code soit static ou pas, il faut bien changer le nom de la table quelque part non? Nous ne devons pas avoir la même définition du mot static. |
@omogenot il y a beaucoups de codes dans dolibarr qui devrait être déplacé dans chaque module afin de rendre les modules beaucoup moins dépendant des autres modules ! un module devrait ne pas contenir des dépendances d'un autre module... un module comme une fonction linux, ne devrait fournir que ce que le module doit fournir et seulement ce qu'il doit fournir... avec des entrées et des sorties... le module ne devrait pas contenir des contraintes d'autres modules ! |
@omogenot j'avais cet esprit quand j'ai mis en place le répertoire "custom"... c'est l'esprit des applications Mac OS... tout au même endroit afin de na pas en mettre de partout, ce qui simplifie les mises à jour... |
@omogenot à mon sens tous les modules natifs de dolibarr devraient être modifié pour que tout leur fonctionnement soit centralisé dans leur répertoire... (admin, trigger, etc...) un module doit être autonome... des entrés et des sorties... c'est ce qu'on avait fait avec le fork... les modules dialoguaient entre eux en api REST... chaque module doit avoir ses propres fonctions et seulement ses fonctions... |
le but serait d'avoir un socle commun et des modules afin de pouvoir enlever un module sans que ça pénalise le fonctionnement du socle... |
C'est prêcher un converti ! Je suis un utilisateur Mac.
Là par contre, je ne comprends pas bien le sens du commentaire. Le but de la programmation objet et de toutes ces classes est de centraliser et de réutiliser un maximum de code d'un object à l'autre par héritage, en évitant d'avoir sans cesse à ré-écrire les mêmes morceaux de code à chaque fois. |
Il va être compliqué ce soir de tout ré-écrire, et je pense que l'on diverge du thread original. La question initiale était de savoir à quoi servait ma proposition de fonction supplémentaire, je crois l'avoir expliqué: ne pas avoir à toujours tout ré-écrire si à l'avenir on change le nom d'une table dans la base de données. Juste s'assurer dans son code de faire appel à cette simple fonction qui s'assurera que le nom de la table est toujours valide, s'il ne l'est pas le nom correct est substitué automatiquement. C'est tout. |
oui c'est ce que je dit ! un module est un objet, une classe... un module fait ce qu'on lui demande... tu vois ce que je veux dire ? |
@omogenot yep on ne va pas tout réécrire ce soir... mais il va falloir y penser sérieusement ! :-) |
bonne soirée |
Je vois, néanmoins il est vrai qu'un utilisateur peut activer les modules de son choix et que cela a un impact sur le déroulement général. Une facture est liée à une commande, elle même liée à une propal, etc... Mais si, comme moi, je n'active pas le module propal, il faut bien que le module facture continue à fonctionner... |
@omogenot il faut juste revoir l'architecture du code ! si linux fonctionnait comme dolibarr on serait obligé d'ajouter tous les packages pour qu'il fonctionne ! Un package linux fait une fonction tout en autonomie et il le fait bien, il peut utiliser d'autres packages mais il n'en est pas dépendant ! |
It looks like in many places, there is some code to change table name from old "french" names that are deprecated throughout version releases in favour of english names for internationalisation of Dolibarr.
I propose to place this code as a common static function in the DoliDB class (which is generally contained in every other class). This would allow to continue to change table names without having to check every class for usage of old names and fix it, if each class calls this function before using an SQL statement.
Usage:
If object has no $db property;
$table_name = DoliDB::checkTableName($table_name);
if object has a $db property:
$table_name = $this->db->checkTableName($table_name);