Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
0c3b230
Refactor mass action handling in timesheetweek list
mapiolca Oct 28, 2025
12ce8d2
Corrige la suppression multiple dans la liste
mapiolca Oct 28, 2025
4cb6641
Corrige l'affichage de la confirmation de suppression
mapiolca Oct 28, 2025
5e16085
Corrige la récupération de sélection pour les suppressions
mapiolca Oct 28, 2025
405d806
Affiche la confirmation avant suppression de masse
mapiolca Oct 28, 2025
806612f
Corrige l'identifiant des champs de suppression de masse
mapiolca Oct 28, 2025
c744b45
Add mass action confirmation display
mapiolca Oct 28, 2025
5dbc706
Sécurise la confirmation de suppression multiple
mapiolca Oct 28, 2025
6f99747
Add debug output for mass action processing
mapiolca Oct 28, 2025
571c89c
Comment out mass action confirmation print
mapiolca Oct 28, 2025
d322dc2
Fix mass action confirmation display logic
mapiolca Oct 28, 2025
8f55bb4
Répare la confirmation de suppression massive
mapiolca Oct 28, 2025
e795388
Implement test confirmation in timesheetweek_list.php
mapiolca Oct 28, 2025
a4637de
Update print statement from 'Hello' to 'Goodbye'
mapiolca Oct 28, 2025
e507e6c
Refactor permissions and clean up timesheetweek list
mapiolca Oct 28, 2025
ed1c391
Assure la confirmation de suppression massive
mapiolca Oct 28, 2025
8a88cf5
Update print statement from 'Hello' to 'Goodbye'
mapiolca Oct 28, 2025
638e253
Update print statement from 'Hello' to 'Goodbye'
mapiolca Oct 28, 2025
9d93424
Corrige la suppression massive
mapiolca Oct 28, 2025
69627fc
Sécurise les actions de masse
mapiolca Oct 28, 2025
ee27fe8
Rétablit la massaction delete
mapiolca Oct 28, 2025
b70d097
Corrige l'initialisation des suppressions de masse
mapiolca Oct 28, 2025
e21812d
Harmonise les actions de masse pour la v1.0.7
mapiolca Oct 28, 2025
6f3cf13
chore: met à jour la version du module en 1.0.7
mapiolca Oct 28, 2025
c81a74f
Merge branch '1.0.7---Fix-des-massactions' into 2025-10-28-fix-bulk-d…
mapiolca Oct 28, 2025
41fab0e
Update print statement from 'Hello' to 'Goodbye'
mapiolca Oct 28, 2025
8bf575e
Add summary PDF mass action
mapiolca Oct 28, 2025
cd5716f
Improve summary PDF row rendering
mapiolca Oct 28, 2025
37f6f11
Corrige l'indentation du tableau récapitulatif PDF
mapiolca Oct 28, 2025
0e8e62f
Corrige la pagination du PDF de synthèse
mapiolca Oct 28, 2025
2286152
Ajuste la largeur du tableau du PDF de synthèse
mapiolca Oct 28, 2025
1cd5045
Assure l'entête/pied standards et le premier tableau en page 1
mapiolca Oct 28, 2025
fb46535
Remonte le pied de page du PDF de synthèse
mapiolca Oct 28, 2025
a6e3d9a
Garantit le contenu du PDF entre entête et pied
mapiolca Oct 28, 2025
b5e12bf
Harmonise le pied de page PDF sur le helper Dolibarr
mapiolca Oct 28, 2025
f2cfb0c
Empêche la scission des tableaux PDF
mapiolca Oct 28, 2025
cfb0b31
Évite le double dessin du pied de page PDF
mapiolca Oct 28, 2025
ae0aca7
Empêche la scission du pied de page PDF
mapiolca Oct 28, 2025
0f7c67d
Merge pull request #59 from mapiolca/2025-10-28-update-footer-in-time…
mapiolca Oct 28, 2025
5fddd3e
Aligner l'en-tête du PDF de synthèse
mapiolca Oct 28, 2025
78c4181
Corriger le nettoyage des libellés d'entête PDF
mapiolca Oct 28, 2025
91c406d
Charger les traductions du PDF de synthèse
mapiolca Oct 28, 2025
7a36384
Charge la langue principale pour la synthèse PDF
mapiolca Oct 28, 2025
af36b34
Nomme le PDF de synthèse sur l'intervalle
mapiolca Oct 28, 2025
fdfcfad
Sécurise le nom du PDF de synthèse
mapiolca Oct 28, 2025
64f3902
Charge la langue main avant la synthèse PDF
mapiolca Oct 28, 2025
406f190
Charge la langue companies avant la synthèse PDF
mapiolca Oct 28, 2025
3ef9e6e
Masque le nom société dans l'entête PDF avec logo
mapiolca Oct 28, 2025
ab7af76
Aligne le titre PDF sur une seule ligne
mapiolca Oct 28, 2025
f6801a3
Affiche la plage de semaines et nettoie le nom du PDF
mapiolca Oct 28, 2025
46ed50f
Corrige l'injection de la plage de semaines
mapiolca Oct 28, 2025
c1c3f4d
Préserve le nom lisible du PDF de synthèse
mapiolca Oct 28, 2025
797867a
Corrige l'affichage des accents dans l'entête PDF
mapiolca Oct 28, 2025
1fd6aa9
Normalise l'affichage des accents dans le PDF
mapiolca Oct 28, 2025
a38dd2f
Bump version to 1.1.0 for summary PDF creation
mapiolca Oct 28, 2025
9eb6d5a
Update ChangeLog for version 1.1.0
mapiolca Oct 28, 2025
42ed804
Add entity and permission parameters to download URL
mapiolca Oct 29, 2025
0ba2d9a
Fix download URL permission handling
mapiolca Oct 29, 2025
b4bd7ee
Update timesheetweek_list.php
mapiolca Oct 29, 2025
9af69dd
Fix download URL encoding for timesheet week
mapiolca Oct 29, 2025
702ea66
Refactor permission checks for timesheet week
mapiolca Oct 29, 2025
588798b
Update timesheetweek_document.php
mapiolca Oct 29, 2025
5a8ddfe
Update timesheetweek_note.php
mapiolca Oct 29, 2025
2731513
Update timesheetweek_card.php
mapiolca Oct 29, 2025
2c1999c
Update timesheetweek_agenda.php
mapiolca Oct 29, 2025
9ae9fac
Update modTimesheetWeek.class.php
mapiolca Oct 29, 2025
db09ac6
Update actions_timesheetweek.class.php
mapiolca Oct 29, 2025
b1bb658
Update timesheetweek.php
mapiolca Oct 29, 2025
63a454a
Update modTimesheetWeek.class.php
mapiolca Oct 29, 2025
9910ed4
Update modTimesheetWeek.class.php
mapiolca Oct 29, 2025
7b8336a
Update timesheetweek_list.php
mapiolca Oct 29, 2025
cdf301d
Update ChangeLog.md
mapiolca Oct 29, 2025
8cbff9a
Update modTimesheetWeek.class.php
mapiolca Oct 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# CHANGELOG MODULE TIMESHEETWEEK FOR [DOLIBARR ERP CRM](https://www.dolibarr.org)

## 1.1.1
- Mise à "plat" des permissions pour régler un problème d'affichage des PDF. / "Flattening" permissions to fix a PDF display issue.

## 1.1.0
- Ajoute la massaction « Générer le PDF de synthèse » afin de produire un récapitulatif multi-salariés dans un PDF conforme aux standards Dolibarr. / Adds the "Generate summary PDF" mass action to produce a multi-employee PDF recap compliant with Dolibarr standards.

## 1.0.7
- Harmonise les pictogrammes d'approbation et de refus avec les icônes Dolibarr natives. / Harmonises the approval and refusal pictograms with native Dolibarr icons.
- Ajoute la massaction « Sceller » et applique les contrôles de permissions Dolibarr aux actions de masse. / Adds the "Seal" mass action and applies Dolibarr permission checks to bulk operations.
- Limite la suppression massive aux feuilles en brouillon et avertit en cas de sélection invalide. / Restricts bulk deletion to draft sheets and warns when invalid selections are detected.
- Complète les traductions de la liste pour les actions de masse. / Completes list translations for bulk actions.


## 1.0.6
- Réorganise le menu gauche pour afficher « Nouvelle feuille » avant « Liste ». / Reorders the left menu to display "New sheet" before "List".
- Ajoute les entrées « TimesheetWeek » dans les menus principaux Agenda et Projet. / Adds the "TimesheetWeek" entries under the Agenda and Project main menus.
Expand Down Expand Up @@ -31,6 +44,10 @@
- Corrige un problème dans les options de partage du module "Multicompany". / Fixes an issue in the "Multicompany" module sharing options.
- Repositionne les totaux correctement. / Correctly repositions totals.
- Inversion de position de "Nouvelle Feuille d'heure" et "Liste" dans le menu gauche. / Swaps the position of "New Timesheet" and "List" in the left menu.
- Le tableau du PDF de synthèse occupe désormais toute la largeur imprimable pour une meilleure lisibilité. / Summary PDF table now spans the full printable width for improved readability.
- Ajoute les entêtes et pieds de page standards à chaque page du PDF de synthèse et garantit que le premier tableau débute dès la première page. / Adds standard headers and footers to every summary PDF page and ensures the first table starts on the opening page.
- Remonte le pied de page du PDF de synthèse pour réduire la marge basse et améliorer la lisibilité. / Raises the summary PDF footer to reduce the bottom margin and improve readability.
- Garantit que le contenu du PDF de synthèse reste entre l'entête et le pied de page sur chaque feuille. / Ensures the summary PDF content stays between the header and footer on every sheet.
- Corrige un problème pouvant masquer les tâches clôturées dans les Fiches passées. / Fix an issue that could hide closed tasks in passed timesheet.

## 1.0.1
Expand Down
6 changes: 3 additions & 3 deletions ajax/timesheetweek.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@

// EN: Evaluate write permissions, including subordinate scope, before processing the request.
// FR: Évalue les permissions d'écriture, y compris sur les subordonnés, avant de traiter la requête.
$permWrite = $user->hasRight('timesheetweek', 'timesheetweek', 'write');
$permWriteChild = $user->hasRight('timesheetweek', 'timesheetweek', 'writeChild');
$permWriteAll = $user->hasRight('timesheetweek', 'timesheetweek', 'writeAll');
$permWrite = $user->hasRight('timesheetweek', 'write');
$permWriteChild = $user->hasRight('timesheetweek', 'writeChild');
$permWriteAll = $user->hasRight('timesheetweek', 'writeAll');
$canWriteAll = (!empty($user->admin) || $permWriteAll);
if (!($permWrite || $permWriteChild || $canWriteAll)) {
// EN: Return a JSON 403 response when the user cannot edit any timesheet.
Expand Down
2 changes: 1 addition & 1 deletion class/actions_timesheetweek.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public function menuDropdownQuickaddItems($parameters, &$object, &$action, $hook
// EN: Evaluate user permissions to control quick creation visibility.
// FR: Évaluer les droits de l'utilisateur pour contrôler la visibilité de la création rapide.

$hasWriteRight = $user->hasRight('timesheetweek', 'timesheetweek', 'write') || $user->hasRight('timesheetweek', 'timesheetweek', 'writeChild') || $user->hasRight('timesheetweek', 'timesheetweek', 'writeAll');
$hasWriteRight = $user->hasRight('timesheetweek', 'write') || $user->hasRight('timesheetweek', 'writeChild') || $user->hasRight('timesheetweek', 'writeAll');

// EN: Inject the quick creation entry with translated metadata.
// FR: Injecter l'entrée de création rapide avec des métadonnées traduites.
Expand Down
142 changes: 78 additions & 64 deletions core/modules/modTimesheetWeek.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ public function __construct($db)
$this->editor_squarred_logo = ''; // Must be image filename into the module/img directory followed with @modulename. Example: 'myimage.png@timesheetweek'

// Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated', 'experimental_deprecated' or a version string like 'x.y.z'
$this->version = '1.0.6'; // EN: Reorders the left menu, adds agenda and project menu entries and fixes the list page limit selector.
// FR: Réorganise le menu gauche, ajoute les entrées de menus agenda et projet et corrige le sélecteur de limite dans la liste.
$this->version = '1.1.1'; // EN: "Flattening" permissions to fix a PDF display issue.
// FR: Mise à "plat" des permissions pour régler un problème d'affichage des PDF.
// Url to the file with your last numberversion of this module
//$this->url_last_version = 'http://www.example.com/versionmodule.txt';

Expand Down Expand Up @@ -305,96 +305,110 @@ public function __construct($db)
/* BEGIN MODULEBUILDER PERMISSIONS */
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 0 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightReadOwn');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'read';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'read';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 1 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightReadChild');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'readChild';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'readChild';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 2 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightReadAll');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'readAll';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'readAll';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 3 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightWriteOwn');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'write';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'write';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 4 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightWriteChild');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'writeChild';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'writeChild';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 5 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightWriteAll');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'writeAll';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'writeAll';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 6 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightDeleteOwn');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'delete';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'delete';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 7 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightDeleteChild');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'deleteChild';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'deleteChild';
$this->rights[$r][5] = '';
$r++;
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 8 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightDeleteAll');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'deleteAll';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'deleteAll';
$this->rights[$r][5] = '';
$r++;
// EN: Legacy validation permission kept for backward compatibility
// FR : Droit de validation générique conservé pour compatibilité ascendante
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 9 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightValidateGeneric');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'validate';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'validate';
$this->rights[$r][5] = '';
$r++;
// EN: Allow managers to validate their own timesheets only
// FR : Autorise un utilisateur à valider uniquement ses propres feuilles
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 10 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightValidateOwn');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'validateOwn';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'validateOwn';
$this->rights[$r][5] = '';
$r++;
// EN: Allow validation on subordinate timesheets
// FR : Autorise la validation des feuilles des subordonnés
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 11 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightValidateChild');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'validateChild';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'validateChild';
$this->rights[$r][5] = '';
$r++;
// EN: Allow global validation on all employee timesheets
// FR : Autorise la validation de toutes les feuilles de temps
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 12 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightValidateAll');
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'validateAll';
$this->rights[$r][5] = '';
$r++;

// EN: Allow sealing approved timesheets.
// FR : Autorise le scellement des feuilles approuvées.
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 13 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightSeal');
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'seal';
$this->rights[$r][5] = '';
$r++;

// EN: Allow reopening sealed timesheets.
// FR : Autorise le descellage des feuilles scellées.
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 14 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightUnseal');
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'unseal';
$this->rights[$r][5] = '';
$r++;
// EN: Allow global validation on all employee timesheets
// FR : Autorise la validation de toutes les feuilles de temps
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 12 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightValidateAll');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'validateAll';
$r++;

// EN: Allow sealing approved timesheets.
// FR : Autorise le scellement des feuilles approuvées.
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 13 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightSeal');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'seal';
$r++;

// EN: Allow reopening sealed timesheets.
// FR : Autorise le descellage des feuilles scellées.
$this->rights[$r][0] = $this->numero . sprintf('%02d', (0 * 10) + 14 + 1);
$this->rights[$r][1] = $langs->trans('TimesheetWeekRightUnseal');
$this->rights[$r][4] = 'timesheetweek';
$this->rights[$r][5] = 'unseal';
$r++;

/* END MODULEBUILDER PERMISSIONS */

/* END MODULEBUILDER PERMISSIONS */

// Main menu entries to add
$this->menu = array();
Expand All @@ -413,7 +427,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")', // Define condition to show or hide menu entry. Use 'isModEnabled("timesheetweek")' if entry must be visible if module is enabled.
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")', // Use 'perms'=>'$user->hasRight("timesheetweek", "timesheetweek", "read")' if you want your menu with a permission rules
'perms' => '$user->hasRight("timesheetweek", "read")', // Use 'perms'=>'$user->hasRight("timesheetweek", "read")' if you want your menu with a permission rules
'target' => '',
'user' => 2, // 0=Menu for internal users, 1=external users, 2=both
);
Expand Down Expand Up @@ -452,7 +466,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")',
'perms' => '$user->hasRight("timesheetweek", "read")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -467,7 +481,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "write")',
'perms' => '$user->hasRight("timesheetweek", "write")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -482,7 +496,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")',
'perms' => '$user->hasRight("timesheetweek", "read")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -500,7 +514,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")',
'perms' => '$user->hasRight("timesheetweek", "read")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -515,7 +529,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "write")',
'perms' => '$user->hasRight("timesheetweek", "write")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -530,7 +544,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")',
'perms' => '$user->hasRight("timesheetweek", "read")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -549,7 +563,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")',
'perms' => '$user->hasRight("timesheetweek", "read")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -564,7 +578,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "write")',
'perms' => '$user->hasRight("timesheetweek", "write")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -579,7 +593,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek',
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")',
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")',
'perms' => '$user->hasRight("timesheetweek", "read")',
'target' => '',
'user' => 2,
'object' => 'TimesheetWeek'
Expand All @@ -599,7 +613,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")', // Define condition to show or hide menu entry. Use 'isModEnabled("timesheetweek")' if entry must be visible if module is enabled.
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")',
'perms' => '$user->hasRight("timesheetweek", "read")',
'target' => '',
'user' => 2, // 0=Menu for internal users, 1=external users, 2=both
'object' => 'TimesheetWeek'
Expand All @@ -614,7 +628,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")', // Define condition to show or hide menu entry. Use 'isModEnabled("timesheetweek")' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "write")'
'perms' => '$user->hasRight("timesheetweek", "write")'
'target' => '',
'user' => 2, // 0=Menu for internal users, 1=external users, 2=both
'object' => 'TimesheetWeek'
Expand All @@ -629,7 +643,7 @@ public function __construct($db)
'langs' => 'timesheetweek@timesheetweek', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position' => 1000 + $r,
'enabled' => 'isModEnabled("timesheetweek")', // Define condition to show or hide menu entry. Use 'isModEnabled("timesheetweek")' if entry must be visible if module is enabled.
'perms' => '$user->hasRight("timesheetweek", "timesheetweek", "read")'
'perms' => '$user->hasRight("timesheetweek", "read")'
'target' => '',
'user' => 2, // 0=Menu for internal users, 1=external users, 2=both
'object' => 'TimesheetWeek'
Expand Down
Loading