Ajax_object_onoff

Bonjour à tous ! Je suis en train de développer un petit module, avec module builder. J’aurais besoin d’un petit peu d’aide pour comprendre le fonctionnement et les attentes de la fonction Ajax_object_onoff. Je lui ai, je pense, fourni tous les paramètres, mais lorsque j’essaie de l’activer en appuyant sur le interrupteur, elle me remonte une erreur 403. Bad element/field.

Est-ce que quelqu’un s’en est déjà servi et pourrait me l’expliquer ? Merci d’avance.

Hello,

https://doxygen.dolibarr.org/dolibarr_18.0/build/html/d7/d9a/ajax_8lib_8php.html#a4f07a9a5cb41ac4856ba68d37a900bd2

Sur cette page tu as ta fonction, tu as bien rempli les arguments comme inidiqué ?

Bonjour ! Oui en principe voilà ce qui est censé remonter dans le javascript :


        $(function() {
            var input = [];

            // Set constant
            $("#set_status_mail_26").click(function() {
				console.log("Click managed by ajax_object_onoff");
                $.get( "/core/ajax/objectonoff.php", {
                    action: 'set',
                    field: 'method_mail',
                    value: '1',
                    element: 'diffusioncontact@diffusionplans',
                    id: '26',
					token: '501643da2c9bb4991c9bd8c53242f9cc'
                },
                function() {
                    $("#set_status_mail_26").hide();
                    $("#del_status_mail_26").show();
                    // Enable another element
                    if (input.disabled && input.disabled.length > 0) {
                        $.each(input.disabled, function(key,value) {
                            $("#" + value).removeAttr("disabled");
                            if ($("#" + value).hasClass("butActionRefused") == true) {
                                $("#" + value).removeClass("butActionRefused");
                                $("#" + value).addClass("butAction");
                            }
                        });
                    // Show another element
                    } else if (input.showhide && input.showhide.length > 0) {
                        $.each(input.showhide, function(key,value) {
                            $("#" + value).show();
                        });
                    }
                });
            });

            // Del constant
            $("#del_status_mail_26").click(function() {
				console.log("Click managed by ajax_object_onoff");
                $.get( "/core/ajax/objectonoff.php", {
                    action: 'set',
                    field: 'method_mail',
                    value: '0',
                    element: 'diffusioncontact@diffusionplans',
                    id: '26',
					token: '501643da2c9bb4991c9bd8c53242f9cc'
                },
                function() {
                    $("#del_status_mail_26").hide();
                    $("#set_status_mail_26").show();
                    // Disable another element
                    if (input.disabled && input.disabled.length > 0) {
                        $.each(input.disabled, function(key,value) {
                            $("#" + value).prop("disabled", true);
                            if ($("#" + value).hasClass("butAction") == true) {
                                $("#" + value).removeClass("butAction");
                                $("#" + value).addClass("butActionRefused");
                            }
                        });
                    // Hide another element
                    } else if (input.showhide && input.showhide.length > 0) {
                        $.each(input.showhide, function(key,value) {
                            $("#" + value).hide();
                        });
                    }
                });
            });
        });
    

Mais je ne sais pas comment vérifier ce qu’il se passe après.

Voilà ce qu’il me retourne précisément : Bad value for combination of parameters element/field: Field not supported.

Tu passes dans ce else ce qui te bloque :

if (preg_match('/stat[u][st]$/', $field) || ($field == 'evenunsubscribe' && $object->table_element == 'mailing')) {
	restrictedArea($user, $object->module, $object, $object->table_element, $usesublevelpermission);
} elseif ($element == 'product' && in_array($field, array('tosell', 'tobuy', 'tobatch'))) {	// Special case for products
	restrictedArea($user, 'produit|service', $object, 'product&product', '', '', 'rowid');
} else {
	httponly_accessforbidden("Bad value for combination of parameters element/field: Field not supported.");	// This includes the exit.
}

Assures toi de remplir une des conditions

Hello,

tu t’en es sortie ?

Bonne journée

Je suis toujours dessus, je n’arrive pas e déterminer ce qu’il attend exactement. J’essai de trouver des exemple de d’utilisations, mais je manque un peu de temps en ce moment…

Bon, je progresse, la requête à l’air de passer les filtres, et le bouton passe au vert. Par contre, malgré le SQL qui semble correct, la requête ne va pas jusqu’en base de donnée… Du coup je cherche.

Voilà ce que me remonte les logs :

2025-05-23 22:52:02 DEBUG   90.61.248.93    2600878   1008   sql=UPDATE llx_diffusionplans_diffusioncontact SET letter_status = 1, fk_user_modif = 1 WHERE rowid = 10
2025-05-23 22:52:02 INFO    90.61.248.93    2600878   1008    DiffusionContact::fetch sql=SELECT `rowid` FROM `llx_diffusionplans_diffusioncontact` WHERE `fk_contact`='' AND `fk_diffusion`='' AND `contact_source`='' entry=
2025-05-23 22:52:02 DEBUG   90.61.248.93    2600878   1008    sql=SELECT `rowid` FROM `llx_diffusionplans_diffusioncontact` WHERE `fk_contact`='' AND `fk_diffusion`='' AND `contact_source`=''

On voit bien que le SQL est conforme, mais l’INFO derrière a perdu les données. du coup je me demande si le problème ne vient pas de là.

Bonjour,

Avez-vous vérifié la valeur dans la base de données, pour être sûr que ce ne soit pas un souci de lecture de la valeur enregistrée?

Si vous faites un copier/coller des requêtes directement dans la bdd, vous n’avez pas d’erreur?

Non, quand je lance la requête de phpmyadmin, elle fonctionne…