Ajout de nouveau bouton activer/désactiver enregistrement

Bonjour,

v17.0.2 avec module builder / PHP 8.1.22 / Hébergement

Je voulais ajouter un bouton Désactiver au niveau de mes enregistrements.
Je n’ai pas trouvé l’info sur le forum et dans la doc, donc j’ai fait quelques recherches et je pensais avoir trouvé ma solution, sauf que ça plante à la dernière étape.

Dans mon fichier .class, j’ai bien mes constantes :

const STATUS_DISABLED = 0;
const STATUS_VALIDATED = 1;

J’ai aussi ajouté mes fonctions :

public function enable($user, $notrigger = 0)
{
    // Protection
	if ($this->status != self::STATUS_DISABLED) {
		return 0;
	}
	return $this->setStatusCommon($user, self::STATUS_VALIDATED, $notrigger, 'BENEFICIAIRE_ENABLE');
}

public function disable($user, $notrigger = 0)
{
    // Protection
	if ($this->status != self::STATUS_VALIDATED) {
		return 0;
	}
	return $this->setStatusCommon($user, self::STATUS_DISABLED, $notrigger, 'BENEFICIAIRE_DISABLE');
}

J’ai bien ajouté mes boutons dans le fichier XXX_card.php

if ($permissiontoadd) {
    if ($object->status == $object::STATUS_VALIDATED) {
        print dolGetButtonAction($langs->trans('Disable'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=disable&token='.newToken(), '', $permissiontoadd);
	} else {
	    print dolGetButtonAction($langs->trans('Enable'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=enable&token='.newToken(), '', $permissiontoadd);
	}
}

Pour ne pas avoir de souci au niveau des droits, j’ai ajusté mes droits avec la variable $enablepermissioncheck :

// Set $enablepermissioncheck to 1 to enable a minimum low level of checks
$enablepermissioncheck = 0;
Etc.

Mais quel est donc ce problème ?

  • Les boutons apparaissent bien comme il faut selon le statut
  • Lorsque je clique sur « Activer » ou « Désactiver », c’est la page blanche
  • Rien n’apparait dans mes logs
  • Ma base de données n’est pas modifiée

J’ai vu et revu mon code trois fois en comparant avec d’autres modules, je n’ai pas saisi le souci.
J’ai fait des recherches sur le forum, je n’ai pas trouvé de réponse, le sujet étant très peu documenté (si je m’en sors avec ce sujet, je veux bien faire un article sur le Wiki en remerciement)

J’ai mis des print un peu partout et visiblement je ne rentre pas mes fonctions enable et disable.

Je suis preneur d’un petit coup de main. Merci pour vorte aide !

Bonjour,

Et les logs Dolibarr ils disent quoi ?
Il faut être en
image

Sinon la Débug Barre c’est super pratique quand on développe :
image

Salut @ksar,

J’ai l’impression qu’il n’y a rien dans les logs, sauf erreur de ma part.
Beaucoup de SELECT, mais pas d’UPDATE.

2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.civility as civility_code, u.birth, u.email, u.personal_email, u.job, u.socialnetworks, u.signature, u.office_phone, u.office_fax, u.user_mobile, u.personal_mobile, u.address, u.zip, u.town, u.fk_state as state_id, u.fk_country as country_id, u.admin, u.login, u.note_private, u.note_public, u.pass, u.pass_crypted, u.pass_temp, u.api_key, u.fk_soc, u.fk_socpeople, u.fk_member, u.fk_user, u.ldap_sid, u.fk_user_expense_validator, u.fk_user_holiday_validator, u.statut as status, u.lang, u.entity, u.datec as datec, u.tms as datem, u.datelastlogin as datel, u.datepreviouslogin as datep, u.iplastlogin, u.ippreviouslogin, u.datelastpassvalidation, u.datestartvalidity, u.dateendvalidity, u.photo as photo, u.openid as openid, u.accountancy_code, u.thm, u.tjm, u.salary, u.salaryextra, u.weeklyhours, u.color, u.dateemployment, u.dateemploymentend, u.fk_warehouse, u.ref_ext, u.default_range, u.default_c_exp_tax_cat, u.national_registration_number, u.ref_employee, c.code as country_code, c.label as country, d.code_departement as state_code, d.nom as state FROM piym_user as u LEFT JOIN piym_c_country as c ON u.fk_country = c.rowid LEFT JOIN piym_c_departements as d ON u.fk_state = d.rowid WHERE u.entity IN (0, 1) AND u.login = 'fbrichart' ORDER BY u.entity ASC
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT rowid, name, label, type, size, elementtype, fieldunique, fieldrequired, param, pos, alwayseditable, perms, langs, list, printable, totalizable, fielddefault, fieldcomputed, entity, enabled, help, css, cssview, csslist FROM piym_extrafields WHERE elementtype = 'user' ORDER BY pos
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT rowid, nom_naissance, nai_pays, nai_ville, tps_partiel, mutuelle, rqth, contrat, statut, contrat_spe, rtt, avance_frais, assurance_auto, vismed, vismed_pro, nationalite, etg_type, etg_num, etg_date, urgence FROM piym_user_extrafields WHERE fk_object = 4
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT param, value FROM piym_user_param WHERE fk_user = 4 AND entity = 1
2023-10-13 14:44:17 DEBUG   5.10.134.254    DefaultValues::fetchAll
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT rowid,type,user_id,page,param,value FROM piym_default_values as t WHERE 1 = 1 AND (t.user_id IN (0,4) AND entity IN (0,1))
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT DISTINCT r.module, r.perms, r.subperms FROM piym_user_rights as ur, piym_rights_def as r WHERE r.id = ur.fk_id AND r.entity = 1 AND ur.entity = 1 AND ur.fk_user= 4 AND r.perms IS NOT NULL
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT DISTINCT r.module, r.perms, r.subperms FROM piym_usergroup_rights as gr, piym_usergroup_user as gu, piym_rights_def as r WHERE r.id = gr.fk_id AND gr.entity = 1 AND gu.entity IN (0,1) AND r.entity = 1 AND gr.fk_usergroup = gu.fk_usergroup AND gu.fk_user = 4 AND r.perms IS NOT NULL
2023-10-13 14:44:17 NOTICE  5.10.134.254    --- Access to GET /custom/beneficiaires/beneficiaire_card.php - action=disable, massaction=
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT transkey, transvalue FROM piym_overwrite_trans where lang='fr_FR' OR lang IS NULL AND entity IN (0, 1) ORDER BY lang DESC
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT m.rowid, m.type, m.module, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu, m.url, m.titre, m.prefix, m.langs, m.perms, m.enabled, m.target, m.mainmenu, m.leftmenu, m.position FROM piym_menu as m WHERE m.entity IN (0,1) AND m.menu_handler IN ('eldy','all') AND m.usertype IN (0,2) ORDER BY m.position, m.rowid
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT rowid, name, label, type, size, elementtype, fieldunique, fieldrequired, param, pos, alwayseditable, perms, langs, list, printable, totalizable, fielddefault, fieldcomputed, entity, enabled, help, css, cssview, csslist FROM piym_extrafields WHERE elementtype = 'beneficiaires_beneficiaire' ORDER BY pos
2023-10-13 14:44:17 DEBUG   5.10.134.254    sql=SELECT t.rowid,t.ref,t.note_public,t.note_private,t.date_creation,t.tms,t.fk_user_creat,t.fk_user_modif,t.import_key,t.analytique,t.nom,t.prenom,t.tel,t.mail,t.civ,t.date_nai,t.age,t.ville,t.action_deb,t.action_fin,t.zus_qpv,t.qpv,t.etu,t.justice,t.th,t.deld,t.rsa,t.senior,t.ass,t.prioritaire,t.sortie_type,t.sortie_motif,t.sortie_etp,t.recherche,t.creation_etp,t.arret,t.comment,t.prescripteur,t.referent,t.formation,t.diplome,t.projet_pro,t.mentor_etp,t.mentor_pers,t.cv,t.salarie,t.status,t.cej,t.domaine,t.sortie_info FROM piym_beneficiaires_beneficiaire as t WHERE t.rowid = 527 LIMIT 1
2023-10-13 14:44:17 INFO    5.10.134.254    --- End access to /custom/beneficiaires/beneficiaire_card.php

Merci pour ton aide !

Je me permets une petite relance.
@ksar aurais-tu une piste pour moi à tout hasard ?

Merci beaucoup !

Bonjour @ksar,

J’ai fait quelques tests avec les logs et je ne rentre à aucun moment dans ma fonction disable.

J’ai comparé mes fichiers avec un module vierge, j’ai vu que j’avais ajouté ce code dans mon fichier _card.php :

if ($action == 'enable' && $permissiontoadd) {
	$object->enable();
}
if ($action == 'disable' && $permissiontoadd) {
	$object->disable();
}

Je l’ai remis en commentaire. Donc ça ne plante plus, mais logiquement, ça ne rentre toujours pas dans la fonction disable.

Donc c’est bien au moment de rentrer dans $object->disable(); que ça plante.
Aurais-tu une idée de ce qui me manquerait pour pouvoir faire appel à cette fonction dans ce fichier ?

Merci beaucoup pour ton aide !
C’est une fonction que les membres de mon assos me demandent depuis longtemps.
Bonne soirée !

C’est bon, j’ai trouvé ma solution, toute bête comme souvent…

Lorsque j’appelle mes fonctions, je n’avais pas mis d’argument :
$object->disable($object->fk_user_modif,0);

C’est bon, ça marche au top !
Je mets la solution pour celles et ceux que ça intéresserait.

J’ai fait un petit tuto sur le wiki : (pas forcément super générique, mais ça donnera sans doute des pistes pour les curieux et c’est toujours une première base de travail pour les suivants. J’en ai profité pour ajouter tous les statuts, je n’avais pas vu cet élément répertorié (status1,status2, etc.)

En ajoutant un lien vers le développement de modules :

Bonne journée !