Commit graph

314 commits

Author SHA1 Message Date
VIAL-GOUTEYRON Quentin
e837854094
NEW: ModuleBuilder - consistent status labels and explicit trigger naming (#38883)
* NEW : Derive ModuleBuilder status labels from arrayofkeyval

LibStatut() in the ModuleBuilder object template hardcoded the
Draft/Enabled/Disabled labels, which diverged from the labels defined
in the 'status' field arrayofkeyval used by the list filter and the
select. Build labelStatus/labelStatusShort from arrayofkeyval so the
badge, the filter and the select all show the same configurable labels.

Add ModuleBuilderTemplateConventionsTest covering the derivation.

Next: normalize trigger codes to MYMODULE_MYOBJECT_ACTION in class line 637 + typo line 50, sql/data.sql lines 27/30-32, myobject_card.php line 378; extend the test with trigger assertions.

* NEW : Use explicit MODULE_OBJECT_ACTION trigger naming in template

The ModuleBuilder object template emitted the validate trigger as the
generic MYOBJECT_VALIDATE, inconsistent with the MYMODULE_MYOBJECT
prefix already advertised by $TRIGGER_PREFIX and used by the
unvalidate/cancel/reopen/sentbymail trigger codes. Normalize the
validate trigger, the seed data.sql agenda triggers and the close
notification example to the MYMODULE_MYOBJECT_<ACTION> policy so
generated modules expose clear, non-ambiguous trigger codes. Also fix a
typo in the $TRIGGER_PREFIX comment.

Extend ModuleBuilderTemplateConventionsTest with trigger naming checks.

Next: ChangeLog entry covering both features, then dolibarr-audit + functional verification, then push to remote quentin and run pr-review-v2.

* DOC : Add ChangeLog entries for ModuleBuilder status labels and triggers

Next: dolibarr-audit on both features, then functional verification, then push to remote quentin and run pr-review-v2.

* FIX : Guard ModuleBuilder LibStatut against undefined status key

Hardening from audit: when LibStatut() is called with a status value
that is not present in the 'status' field arrayofkeyval, reading
labelStatus/labelStatusShort raised an undefined-array-key warning under
PHP 8. Default both labels to an empty string, which dolGetStatus
already accepts, so the badge degrades gracefully to the status code.

Next: push branch to remote quentin and run dolibarr-pr-review-v2 on the full diff vs develop.

* CHORE Drop the files CONTRIBUTING forbids to edit in a PR [skip-claudemd]

ChangeLog is generated from the commit messages at release time, and the
language files other than en_US are synced from Transifex.

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
Co-authored-by: Alexandre SPANGARO <aspangaro.dolibarr@gmail.com>
2026-08-17 21:41:18 +02:00
VIAL-GOUTEYRON Quentin
3216098ab5
NEW: ModuleBuilder - selectable object tabs (+ fixes for multi-object generation) (#38570)
* NEW : add ModuleBuilder object-tabs map and filter helpers

Add getModuleBuilderObjectTabs() (source-of-truth map of optional object
tabs) and filterEnabledTabs() (sanitizes user-requested tab keys against the
map). Covered by ModuleBuilderLibTest.

Next: add BEGIN/END markers around tab flags and blocks in template lib (Task 2)

* NEW : wrap object tab flags and blocks with MODULEBUILDER markers

Surround each optional tab flag declaration (TABFLAG) and each prepareHead tab
block (TAB) with BEGIN/END MODULEBUILDER comment markers, so the generator can
purge a whole tab atomically while keeping $h and $head intact. Card tab is
not wrapped (always generated).

Next: add tab selection checkboxes to the newobject form in modulebuilder/index.php (Task 3)

* NEW : add object tab selection checkboxes to newobject form

Render one checkbox per optional tab (contact, note, document, agenda) in the
ModuleBuilder newobject form, all checked by default and reflecting posted
state on redisplay.

Next: handle enabledtab in initobject — exclude files, purge blocks, hardcode flags (Task 4)

* NEW : apply object tab selection during object generation

Excludes page files of unselected tabs, purges their prepareHead flag and
block via MODULEBUILDER markers, and hardcodes the show flag to 1 for selected
tabs. Emits a best-effort warning when regenerating an existing object.

Next: add language keys EnabledTabsForObject(Help) + WarningTabSelectionOnRegeneration (Task 5)

* NEW : add language keys for object tab selection

Next: add ChangeLog entry (Task 6)

* DOC : changelog entry for ModuleBuilder selectable object tabs

* FIX : purge agenda card widget when agenda tab is excluded

Audit finding: myobject_card.php hardcodes a 'SeeAll' link to myobject_agenda.php
in an event widget. When the agenda tab is excluded the page is not generated,
leaving a latent dead link if the widget is enabled. Wrap the widget with
MODULEBUILDER TAB AGENDA markers and purge it from the generated card when the
agenda tab is not selected.

Next: functional verification (step 5 of dev workflow)

* FIX : check file operation results when applying object tab selection

PR review: align with the nogeneratelines pattern by checking the return of
removePatternFromFile/dolReplaceInFile and raising $error + dol_syslog with the
failing tab/file context, instead of ignoring silent write failures during
object generation. Add PR reference to the changelog entry.

* FIX : do not abort object generation when nogeneratelines targets a missing file

The nogeneratelines handler purges the MODULEBUILDER LINES block from class,
API and card files. When API generation is disabled the api_<module>.class.php
file does not exist, so removePatternFromFile returns false and $error was
incremented, which skipped the whole success path (name substitution,
rebuildObjectClass, $tabobj assignment). Generated classes kept the literal
'class MyObject', so dolGetListOfObjectClasses listed every object as MyObject.
Guard each purge with file_exists so a missing optional file is skipped.

* FIX : keep module descriptor out of the blanket name substitution

The 'substitute all module php files' pass applied the object/module name map
to every .php file including the module descriptor. That rewrote the persistent
/* ... MODULEBUILDER TOPMENU/LEFTMENU MYOBJECT */ marker placeholders to the
first object name, so generating a second object could no longer find them
(checkExistComment returned -1, 'comments not found for section Menus' warning)
and its menu entries were not inserted. Skip the descriptor in that loop: its
module name is already resolved by initmodule and its object entries are added
by the dedicated menu/permission blocks.

* FIX : preserve MODULEBUILDER markers when substituting the module descriptor

The previous commit only skipped the descriptor in the secondary substitution
pass, but the primary pass (over $filetogenerate, which includes the descriptor)
still rewrote its persistent /* ... MODULEBUILDER TOPMENU/LEFTMENU MYOBJECT */
markers to the first object name. Those markers cannot simply be excluded from
substitution because the descriptor also has functional MYOBJECT/MYMODULE tokens
(e.g. the MYMODULE_MYOBJECT_ADDON numbering constant) that must be resolved.

Add dolReplaceInFilePreservingModuleBuilderMarkers(): it hides every MODULEBUILDER
marker behind a sentinel, applies the substitution, then restores the markers
verbatim. Use it for the descriptor in the primary pass; the descriptor stays
excluded from the secondary pass. Generating a second object now finds the
markers (checkExistComment) and inserts its menu entries without warning.

Verified by CLI: markers preserved across two successive objects, while content
(rights, exports, addon constant) is correctly substituted.

* FIX : silence phan on the new ModuleBuilder test and typed closure

CI phan (diff-only) flagged the freshly added test file: PhanUndeclaredExtendedClass
(\CommonClassTest) and PhanUndeclaredMethod (assertSame), like the sibling
NamingContractTest. Add the same @phan-file-suppress block (plus
PhanTypeMismatchArgumentProbablyReal for the non-array guard test case). Also
type the preg_replace_callback parameter (array $matches) to clear
PhanPluginUnknownClosureParamType. phpstan is already green; no phpstan
annotations added.

* FIX : drop closure in marker-preserving substitution to satisfy phan

phan's PhanPluginUnknownArrayClosureParamType wanted key/value types on the
preg_replace_callback closure parameter. Replace the callback with preg_match_all
plus a str_replace loop over the unique markers: same behaviour, no closure,
no plugin warning.

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-06-09 19:04:00 +02:00
VIAL-GOUTEYRON Quentin
110b35cba6
NEW Specify If the Object Manages Lines for Module Builder (#32664)
* Specify If the Object Manages Lines for Module Builder

* Update htdocs/modulebuilder/index.php

* Update myobject.class.php

* Update myobject.class.php

* Update myobject.class.php

* Update myobject.class.php

* Update myobject.class.php

* Update myobject.class.php

* Update myobject.class.php

* Update myobject.class.php

* Fix modulebuilder CI issues

* Fix Phan PhanUndeclaredProperty errors on PR #32664

- pdf_standard_myobject: add @phan-suppress-current-line on situation_percent,
  localtax2_tx, localtax1_type, localtax2_type, vat_src_code, pagebreak
  (MyObjectLine template class does not declare these inherited properties)
- doc_generic_project_odt: replace fk_soc with socid (correct PHP property;
  fk_soc is the DB column name, Project::fetch() maps it to $this->socid)

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-05-18 16:13:35 +02:00
Laurent Destailleur
b0dca0eb46 Clean code 2026-05-04 09:54:31 +02:00
Laurent Destailleur
1e6492c17a Work on stats page in template module 2026-04-27 04:55:29 +02:00
Anthony Berton
86a913d5b1
FIX - Standardization with other Dolibarr objects (#36725)
* FIX - Standardization with other Dolibarr objects

* Solve CI error

---------

Co-authored-by: Anthony Berton <anthony.berton@bb2a.fr>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-02-05 12:42:15 +01:00
Lucas Marcouiller
3f406a994f Fix path traversal with $_SERVER["CONTEXT_DOCUMENT_ROOT"] variable for new modulebuilder modules 2025-12-09 13:36:20 +01:00
Laurent Destailleur
f0f2afd7a3 Fix action type for button action Email 2025-11-26 13:41:16 +01:00
Laurent Destailleur
0c8581f80d Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop
2025-11-24 16:23:07 +01:00
Regis Houssin
0aa6652005
FIX #35141 (#36390)
* FIX #35141

* FIX avoid problem with chinese language
2025-11-24 16:03:38 +01:00
Laurent Destailleur
1abc87ff03 Clean code 2025-11-17 19:35:10 +01:00
Frédéric FRANCE
29b3880e6c
add dolBuildUrl (#35664)
* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

* clean baseline

* add dolBuildUrl

* add dolBuildUrl

* add dolBuildUrl

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2025-10-17 02:31:07 +02:00
ldestailleur
74a775f0e1 Fix CI 2025-09-04 13:22:00 +02:00
ldestailleur
3b668903b5 Clean code. Show how to use TRIGGER_PREFIX in modulebuilder template. 2025-09-04 11:30:24 +02:00
ldestailleur
54439b6fcd Clean code 2025-08-14 15:26:32 +02:00
ldestailleur
50e4e9fa2f Fix warnings 2025-08-09 14:27:52 +02:00
ldestailleur
7506fd006e Fix CI 2025-08-09 14:24:59 +02:00
ldestailleur
1390c34a23 Fix CI 2025-08-09 14:02:49 +02:00
ldestailleur
3abad41f87 Clean code 2025-08-07 23:50:05 +02:00
ldestailleur
8c88eab05c Debug v22 - Removed conflict code with old dolopenpopup architecture 2025-06-25 12:29:11 +02:00
Frédéric FRANCE
b7a00127a9
add missing translation (#33461)
* add missing translation

* add missing translation

* add missing translation

* add missing translation

* add missing translation

* add missing translation

* add missing translation

* add missing translation

* add missing translation

* add missing translation

* add missing translation
2025-03-15 11:21:03 +01:00
Francis Appels
504a8b8eaf Fix some modulebuilder backward compatibility 2025-01-08 16:04:06 +01:00
Frédéric FRANCE
1b6ee9e654
fix phpdoc (#32097)
* fix phpdoc

* Update accountancycategory.class.php

* fix phpstan

* fix phpstan

* fix phpstan

* fix phan

* fix phpstan

* fix phpstan

* fix phpstan

* fix phpstan

* fix

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2024-11-28 11:15:56 +01:00
Frédéric FRANCE
1adc883b56
add baseline exclude for phpstan (#31632)
* add baseline exclude for phpstan

* update

* update

* update

* update

* update

* merge

* restore one filter

* delete old errors

* fix

* fix

* fix

* $moreforfilter can t be empty

* fix

* enable check

* refresh baseline

* add phpdoc

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* update phpstan baseline

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2024-11-04 23:53:20 +01:00
Laurent Destailleur
f5e4ab0220 Rewrite code to prepare refactoring 2024-10-26 15:24:54 +02:00
Laurent Destailleur
cc3f6a8b80 Debug v21 2024-10-15 11:27:46 +02:00
Laurent Destailleur
950d749198 FIX Warning visible when it should not 2024-09-24 13:11:52 +02:00
Laurent Destailleur
a59e933d59 Merge branch '20.0' of git@github.com:Dolibarr/dolibarr.git into develop 2024-08-22 14:47:00 +02:00
Laurent Destailleur
e631ce7475 Fix sanitizing dol_openinpopup 2024-08-22 14:46:10 +02:00
MDW
b0087aaf61
Qual: Enable phan on modulebuilder (#30652)
* Allow null for buyer, and force '' for  in printObjectLine(s)

* Allow null for Contact in show_actions_done

* Qual: Enable phan on modulebuilder

# Qual: Enable phan on modulebuilder

Most files of the modulebuilder template can be checked as regular files.
It will help improve the template

* Update baseline (enable modulebuilder notices)

* Add properties that are expected to exist on modules_boxes

* Qual: Ignore false positive (phan)

* Set phpdoc type to include null on formAddObjectLine

* Qual: Fixes for modulebuilder (phan, phpstan, bugs, format)

* Fix phpcs for intracom

* Make ModeleBoxes:showBox() signature match child class's

* Fix *box::showBox() phpdoc types

* Update index.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2024-08-18 18:16:08 +02:00
Laurent Destailleur
3114d1d13e Clean code 2024-08-17 23:46:16 +02:00
Laurent Destailleur
13d61527c9 Debug module intracommreport 2024-08-17 19:18:00 +02:00
Alexandre SPANGARO
96afcaa476
Better comments (#30200)
* Fix language

* Fix language

* Fix language

* Fix language

* Fix language

* Fix language

* Fix language

* CI Missing language key

* Update eventorganization.lang

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2024-06-30 21:02:50 +02:00
Laurent Destailleur
2f7e9734bd Debug v20 2024-04-23 00:38:56 +02:00
Laurent Destailleur
b58e439a17 Clean use of $_POST 2024-03-28 21:29:02 +01:00
Laurent Destailleur
f598bcbd54 Look and feel v20 2024-03-24 16:36:08 +01:00
MDW
591306d7b1
Qual: Spelling htdocs/[l-o]* & htdocs/pa* (#27435)
# Qual: Fix spelling htdocs/[l-o]* & htdocs/pa*

Mostly comments, some local variables changed and translations to avoid
automatic fixes.

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2024-01-12 18:06:50 +01:00
Laurent Destailleur
484dd8e426 Debug v19 2023-12-23 10:17:28 +01:00
ATM john
00cba14e99 Add llxHeader body css for modulebuilder 2023-12-16 14:38:13 +01:00
Laurent Destailleur
d191220683 Debug v19 2023-12-05 10:45:46 +01:00
Laurent Destailleur
1c9429643a Fix php-cs 2023-12-04 13:46:42 +01:00
Laurent Destailleur
552e745908 Debug v19 2023-11-28 10:33:06 +01:00
Laurent Destailleur
92ec85df26 Debug v19 2023-10-11 14:40:02 +02:00
UT from dolibit
785b274700
Update myobject_card.php 2023-09-13 23:10:22 +02:00
Laurent Destailleur
150de687bf Merge branch '18.0' of git@github.com:Dolibarr/dolibarr.git into develop 2023-09-05 20:13:38 +02:00
Laurent Destailleur
f43ef55b26 Merge branch '17.0' of git@github.com:Dolibarr/dolibarr.git into 18.0
Conflicts:
	htdocs/modulebuilder/template/class/myobject.class.php
	htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php
	htdocs/modulebuilder/template/core/modules/modMyModule.class.php
	htdocs/modulebuilder/template/core/modules/mymodule/doc/doc_generic_myobject_odt.modules.php
	htdocs/modulebuilder/template/core/modules/mymodule/doc/pdf_standard_myobject.modules.php
	htdocs/modulebuilder/template/myobject_agenda.php
	htdocs/modulebuilder/template/myobject_list.php
2023-09-05 19:38:45 +02:00
Florian HENRY
e387e009bf fix: use of getDolGlobal in module builder template 2023-08-16 11:59:14 +02:00
Laurent Destailleur
81b8d1e532 Clean code 2023-08-04 18:33:07 +02:00
Laurent Destailleur
b52f426518 Remove hardcoded value 2023-08-01 18:52:35 +02:00
Laurent Destailleur
b5cdb1b88c Debug v18 2023-06-28 15:15:37 +02:00