diff --git a/.editorconfig b/.editorconfig
index cdaf5b3af2e..f1d2d2e0864 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -26,3 +26,7 @@ trim_trailing_whitespace = false
indent_style = tab
trim_trailing_whitespace = true
indent_size = 4
+[*.yml]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index b221f3115fe..a992c0a13f6 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,56 +1,90 @@
How to contribute to Dolibarr
=============================
-Bug reports and feature requests
---------------------------------
+Submit a Bug report or a Feature request
+---------------------------------------
-*Note*: **GitHub Issues is not a support forum.** If you have questions about Dolibarr / need help using the software, please use [the forums](https://www.dolibarr.org/forum.php). Forums exist in different languages.
+*Note*: **GitHub Issues is not a support forum.**
+If you have questions about Dolibarr or need help on using the software, please use [the forums](https://www.dolibarr.org/forum.php). Forums exist in different languages.
-Issues are managed on [GitHub](https://github.com/Dolibarr/dolibarr/issues).
-Default **language here is English**. So please prepare your contributions in English.
+Issues to inform about a bug or a development trouble and requests for a new feature, are managed on [GitHub](https://github.com/Dolibarr/dolibarr/issues).
+Default **language here is English**. So please prepare your contributions in English (we recommend using an online translation service if you don't speak English).
-1. Please [use the search engine](https://help.github.com/articles/searching-issues) to check if nobody's already reported your problem.
+1. Please [use the search engine](https://help.github.com/articles/searching-issues) to check if anyone else has already reported your issue.
2. [Create an issue](https://help.github.com/articles/creating-an-issue). Choose an appropriate title. Prepend appropriately with Bug or Feature Request.
3. Tell us the version you are using! (look at /htdocs/admin/system/dolibarr.php? and check if you are using the latest version)
4. Write a report with as much detail as possible (Use [screenshots](https://help.github.com/articles/issue-attachments) or even screencasts and provide logging and debugging information whenever possible).
5. Delete unnecessary submissions.
-6. **Check your Message at Preview before sending.**
+6. **Check your Message at Preview before submitting.**
-Submit code
+
+
+Submit code
---------------------
+This process describes how a Developer can submit code to the project so it can be analyzed and validated by the PR Maintainer (we call this a Pull Request).
+
+Definition:
+- Developer: is the human knowing the development language of the application that wants to change some part of the code by modifying the sources of the project.
+- PR Maintainer: is the human knowing the development language and code who checks that the code submitted for approbation is correct to validate it, in other words, the PR Maintainer is the approbator of commits.
+- Release Maintainer: is the human that validates that a freeze/beta version is ok to be released officially as a stable version.
+
+
### Basic workflow
-1. [Fork](https://help.github.com/articles/fork-a-repo) the [GitHub repository](https://github.com/Dolibarr/dolibarr).
-2. Clone your fork.
-3. Choose a branch(See the [Branches](#branches) section below).
-4. Read our developer documentation on the [Dolibarr Wiki](https://wiki.dolibarr.org/index.php?title=Developer_documentation).
-5. Commit and push your changes.
-6. [Make a pull request](https://help.github.com/articles/creating-a-pull-request).
+As the Developer:
+
+1. Check you agree with the terms of the [DCO - Developer's Certificate of Origin](https://github.com/Dolibarr/dolibarr/blob/develop/DCO)
+2. [Fork](https://help.github.com/articles/fork-a-repo) the [GitHub repository](https://github.com/Dolibarr/dolibarr).
+3. Clone your fork.
+4. Choose a branch(See the [Branches](#branches) section below).
+5. Read our developer documentation on the [Dolibarr Wiki](https://wiki.dolibarr.org/index.php?title=Developer_documentation).
+6. Commit and push your changes.
+7. [Make a pull request](https://help.github.com/articles/creating-a-pull-request).
+
+As the PR Maintainer:
+
+7. The PR Maintainer will check and decide if he approves or not the commits. During this step, the PR Maintainer can modify your own code to make it valid for approbation or ask you to make the change yourself. For this the PR Maintainer may add commits to a PR. Depending on the tools used (can be done from github directly or from an IDE), such commits may be done directly after validating your PR (for example to complete it).
+
+As the Release Maintainer:
+
+8. A tag will be added to take a snapshot of the code with all the changes approved by PR Maintainers, when ready to do a release.
+
+
+Note: Project leader(Master Yoda and BDFL) retains all above roles and can directly commit to the project without a PR. Of course anyone can check commit history and comment!
+
### Branches
Unless you're fixing a bug, all pull requests should be made against the *develop* branch.
-If you're fixing a bug, it is preferred that you cook your fix and pull request it against an oldest version affected.
+If you're fixing a bug, it is preferred that you make a pull request against the oldest version affected.
-We recommend to push it into N - 2 for N the latest version available, if not possible into version N - 1, and finally into develop.
-This is just a recommendation, currently, if you push a bug fix on a very old version, it is still merged and propagated into
-higher versions.
+We recommend to push it into N - 2 where N is the latest version available, if not possible into version N - 1, and finally into develop.
+
+The rule N - 2 is just a tip if you don't know which version to choose to get the best compromise between ease of correction and number of potential beneficiaries of the correction.
+
+If you push a bug fix on a very old version it is still going to be merged and propagated into newer versions(choose wisely because old versions depend on old deprecated/unsupported versions of PHP and external libraries).
-The rule N - 2 is just a tip if you don't know which version to choose to get the best the best compromise between ease of correction
-and number of potential beneficiaries of the correction.
### General rules
-Please don't edit the ChangeLog file. This file is generated from all commit messages during release process by the project manager.
+
+- As the Developer, please don't edit the ChangeLog file. This file is generated from all commit messages during the release process by the Project releaser.
+
+- As the Developer: Do not submit changes into files xx_XX/afile.lang. They are language files and are updated/synced automatically from Transifex. If you need to add a new language file, just add it for the en_US language.
+
+- As the Release Maintainer: The Release Maintainer will decide to make a new release as soon as the planning of the release is reached and the code in the branch to release reach the status of "No more known serious bugs".
-### Commits
+
+
+### Commits
+
Use clear commit messages with the following structure:
```plaintext
@@ -106,9 +140,9 @@ FIX|Fix #456 Short description (where #456 is number of bug fix, if it exists. I
or
CLOSE|Close #456 Short description (where #456 is number of feature request, if it exists. In upper case to appear into ChangeLog)
or
-NEW|New|QUAL|Qual|PERF|Perf Short description (In upper case to appear into ChangeLog, use this if you add a feature not tracked, otherwise use CLOSE #456)
+NEW|New|QUAL|Qual|PERF|Perf Short description (In upper case to appear into ChangeLog, use this if you add a feature not tracked, otherwise use CLOSE #xxx)
or
-Short description (when the commit is not introducing feature nor closing a bug)
+Short description (when the commit is not introducing a feature nor closing a bug)
Long description (Can span across multiple lines).
@@ -125,11 +159,11 @@ a process to follow to optimize the chance to have PRs merged efficiently...
* When submitting a pull request, use same rule as [Commits](#commits) for the message. If your pull request only contains 1 commit, GitHub will be smart enough to fill it for you. Otherwise, please be a bit verbose about what you're providing.
-* A screenshot will be always required for any PR of change/addition of a GUI behaviour.
+* A screenshot will be always required for any PR of change/addition of a GUI behavior.
Also, some code changes need a prior approbation:
-* if you want to include a new external library (into htdocs/includes directory), please ask before to the core project manager (mention @dolibarr-jedi in your issue) to see if such a library can be accepted.
+* if you want to include a new external library (into htdocs/includes directory), please contact the core project manager first (mention @dolibarr-jedi in your issue) to see if such a library can be accepted.
* if you add new tables or fields, you MUST first submit a standalone PR with the data structure changes you plan to add/modify (and only data structure changes). Start development only once this data structure has been accepted.
@@ -137,12 +171,12 @@ Once a PR has been submitted, you may need to wait for its integration. It is co
If the label of PR start with "Draft" or "WIP" (Work In Progress), it will not be analyzed for merging until you change the label of the PR (but it can be analyzed for discussion).
-If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. Don't expect anything on your PR if you have such errors, you MUST first fix the Continuous Integration error to have it taken into consideration.
+If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several months later. Don't expect anything on your PR if you have such errors, you MUST first fix the Continuous Integration error to have it taken into consideration.
-If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet.
-In most cases, it gives you information of things you have to do to have the PR taken into consideration (for example a change is requested, a conflict is expected to be solved, some questions were asked). If you have a yellow, red flag of purple flag, don't expect to have your PR validated. You must first provide the answer the tag ask you. The majority of open PR are waiting an action of the author of the PR.
+If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. By putting your mouse on the tag, you will get a full explanation of the tag/status that explains why your PR has not been integrated yet.
+In most cases, it gives you information of things you have to do to have the PR taken into consideration (for example a change is requested, a conflict is expected to be solved, some questions were asked). If you have a yellow, red flag of purple flag, don't expect to have your PR validated. You must first provide the answer the tag asks you. The majority of open PRs are waiting an action of the author of the PR.
-Statistics on Dolibarr project shows that 95% of submitted PR are reviewed and tagged. Average answer delay is also one of the best among Open source projects (just few days before having the Answer Tag set). This is one of the most important ratio of answered PR in Open Source world for a major project. Don't expect the core team to reach the 100%.
+Statistics on Dolibarr project shows that 95% of submitted PRs are reviewed and tagged. Average answer delay is also one of the best among Open source projects (just few days before having the Answer Tag set). This is one of the most important ratio of answered PRs in Open Source world for a major project. Don't expect the core team to reach 100%.
A so high ratio is very rare on a so popular project and with the increasing popularity of Dolibarr, this ratio will probably decrease in future to a more common level.
@@ -157,9 +191,9 @@ All other translations are managed online at [Transifex](https://www.transifex.c
Translations done on transifex are available in the next major release.
-Note: Sometimes, the source text (English) is modified. In such a case, the translation is reset. Transifex assume that if the original source
+Note: Sometimes, the source text (English) is modified. In such a case, the translation is reset. Transifex assumes that if the original source
has changed, the translation is surely no more correct so must be done again. But old translation is not lost and you can use the tab "History"
-to retrieve all old translation of a source text, and restore the translation in one click with no need to retranslate it if there is no need to.
+to retrieve all old translations of a source text and restore the translation in one click with no need to retranslate it if there is no need to.
### Resources
diff --git a/.github/workflows/cache-clean-pr.yml b/.github/workflows/cache-clean-pr.yml
index 51a4282a0e9..bad5d6837df 100644
--- a/.github/workflows/cache-clean-pr.yml
+++ b/.github/workflows/cache-clean-pr.yml
@@ -19,17 +19,17 @@ jobs:
- name: Cleanup
run: |
gh extension install actions/gh-actions-cache
- REPO=${{ github.repository }}
- BRANCH=refs/pull/${{ github.event.pull_request.number }}/merge
+ REPO="${{ github.repository }}"
+ BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
echo "Fetching list of cache key"
- cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )
+ cacheKeysForPR=$(gh actions-cache list -R "$REPO" -B "$BRANCH" | cut -f 1 )
- ## Setting this to not fail the workflow while deleting cache keys.
+ ## Setting this to not fail the workflow while deleting cache keys.
set +e
echo "Deleting caches..."
for cacheKey in $cacheKeysForPR
do
- gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
+ gh actions-cache delete "$cacheKey" -R "$REPO" -B "$BRANCH" --confirm
done
echo "Done"
env:
diff --git a/.github/workflows/ci-on-pull_request.yml b/.github/workflows/ci-on-pull_request.yml
index 7b3fff88c7d..4e118d8bff9 100644
--- a/.github/workflows/ci-on-pull_request.yml
+++ b/.github/workflows/ci-on-pull_request.yml
@@ -16,7 +16,7 @@ jobs:
phpstan:
uses: ./.github/workflows/phpstan.yml
secrets: inherit
- needs: [pre-commit, phan]
+ needs: [pre-commit]
with:
gh_event: ${{ github.event_name }}
#windows-ci:
@@ -30,11 +30,12 @@ jobs:
# needs: [pre-commit, phan]
# needs: [windows-ci]
secrets: inherit
+ needs: [pre-commit, phan, phpstan]
uses: ./.github/workflows/gh-travis.yml
with:
gh_event: ${{ github.event_name }}
# Note (not tested, from https://github.com/orgs/community/discussions/38361)
-# To cancel jobs if one failes, the following action may help
+# To cancel jobs if one fails, the following action may help
# - if: "failure()"
# uses: "andymckay/cancel-action@0.3"
diff --git a/.github/workflows/ci-on-push.yml b/.github/workflows/ci-on-push.yml
index 45137e8ed7a..a3997f9147e 100644
--- a/.github/workflows/ci-on-push.yml
+++ b/.github/workflows/ci-on-push.yml
@@ -16,7 +16,7 @@ jobs:
phpstan:
uses: ./.github/workflows/phpstan.yml
secrets: inherit
- needs: [pre-commit, phan]
+ needs: [pre-commit]
with:
gh_event: ${{ github.event_name }}
windows-ci:
@@ -30,11 +30,12 @@ jobs:
# needs: [pre-commit, phan]
# needs: [windows-ci]
secrets: inherit
+ needs: [pre-commit, phan, phpstan]
uses: ./.github/workflows/gh-travis.yml
with:
gh_event: ${{ github.event_name }}
# Note (not tested, from https://github.com/orgs/community/discussions/38361)
-# To cancel jobs if one failes, the following action may help
+# To cancel jobs if one fails, the following action may help
# - if: "failure()"
# uses: "andymckay/cancel-action@0.3"
diff --git a/.github/workflows/exakat.yml b/.github/workflows/exakat.yml
index 3b1b2f656e0..420ca085cad 100644
--- a/.github/workflows/exakat.yml
+++ b/.github/workflows/exakat.yml
@@ -4,10 +4,8 @@ name: "Exakat analysis"
on:
# execute once a month, the 1st
schedule:
- - cron: "0 20 1 * *"
+ - cron: "0 20 1 * *"
workflow_dispatch:
- branches:
- - develop
permissions:
contents: read
@@ -19,6 +17,7 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 1
+ ref: develop
- name: Exakat
uses: docker://exakat/exakat-ga
with:
diff --git a/.github/workflows/phan.yml b/.github/workflows/phan.yml
index e2ce5a75443..20aa67b3598 100644
--- a/.github/workflows/phan.yml
+++ b/.github/workflows/phan.yml
@@ -14,8 +14,7 @@ concurrency:
cancel-in-progress: true
env:
gh_event: ${{ inputs.gh_event || github.event_name }}
- PHAN_CONFIG: >
- ${{ 'dev/tools/phan/config.php' }}
+ PHAN_CONFIG: dev/tools/phan/config.php
PHAN_BASELINE: dev/tools/phan/baseline.txt
PHAN_MIN_PHP: 7.0
PHAN_QUICK: ${{ github.event.schedule && '' || '--quick' }}
@@ -40,7 +39,8 @@ jobs:
tools: cs2pr,phan
- name: Run Phan analysis
run: |
- phan $PHAN_QUICK -k $PHAN_CONFIG -B $PHAN_BASELINE --analyze-twice --minimum-target-php-version $PHAN_MIN_PHP --output-mode=checkstyle -o _phan.xml
+ # shellcheck disable=2086
+ phan $PHAN_QUICK -k "$PHAN_CONFIG" -B "$PHAN_BASELINE" --analyze-twice --minimum-target-php-version "$PHAN_MIN_PHP" --output-mode=checkstyle -o _phan.xml
- name: Add results to PR
if: ${{ always() }}
run: |
diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml
index 24a12cecd4b..844ad46af3c 100644
--- a/.github/workflows/phpstan.yml
+++ b/.github/workflows/phpstan.yml
@@ -36,14 +36,14 @@ jobs:
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4
-
# Get PHP and addons
- name: Setup PHP
id: setup-php
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
- tools: phpstan:1, cs2pr
+ coverage: none # disable xdebug, pcov
+ tools: phpstan:2.0, cs2pr
extensions: calendar, json, imagick, gd, zip, mbstring, intl, opcache, imap,
mysql, pgsql, sqlite3, ldap, xml, mcrypt
@@ -85,3 +85,9 @@ jobs:
name: phpstan-srcrt
path: ${{ github.workspace }}/_stan.xml
retention-days: 2
+ # Run PHPStan generate baseline
+ # - name: Run PHPStan generate baseline
+ # id: phpstan-baseline
+ # if: ${{ success() }}
+ # run: |
+ # phpstan -vv analyse --memory-limit 7G -a build/phpstan/bootstrap_action.php --generate-baseline build/phpstan/phpstan-baseline.neon
diff --git a/.github/workflows/phpstan_baseline.yml b/.github/workflows/phpstan_baseline.yml
new file mode 100644
index 00000000000..9503c25de77
--- /dev/null
+++ b/.github/workflows/phpstan_baseline.yml
@@ -0,0 +1,80 @@
+name: 'PHPStan baseline'
+
+on:
+ # Every day we want to refresh the baseline
+ schedule:
+ - cron: '0 12 * * *'
+
+ # We want to be able to manually refresh the baseline too
+ workflow_dispatch:
+
+ workflow_call:
+ inputs:
+ gh_event:
+ required: true
+ type: string
+ # Run PHPStan analyse on pull requests
+ # pull_request:
+
+permissions: {} # none
+
+env:
+ PHP_VERSION: '8.2'
+ GH_TOKEN: ${{ github.token }}
+ gh_event: ${{ inputs.gh_event || github.event_name }}
+ CACHE_KEY_PART: ${{ ( inputs.gh_event == 'pull_request' || github.event_name == 'pull_request' ) && format('{0}-{1}', github.base_ref, github.head_ref) || github.ref_name }}
+jobs:
+ phpstan:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ pull-requests: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ env.PHP_VERSION }}
+ coverage: none # disable xdebug, pcov
+ tools: phpstan:2.0, cs2pr
+ extensions: calendar, json, imagick, gd, zip, mbstring, intl, opcache, imap,
+ mysql, pgsql, sqlite3, ldap, xml, mcrypt
+ env:
+ fail-fast: true
+ # Restore old cache
+ - name: Restore phpstan cache
+ id: cache
+ uses: actions/cache/restore@v4
+ with:
+ path: ./.github/tmp
+ key: phpstan-cache-${{ env.PHP_VERSION }}-${{ env.CACHE_KEY_PART }}-${{
+ github.run_id }}
+ restore-keys: |
+ phpstan-cache-${{ env.PHP_VERSION }}-${{ env.CACHE_KEY_PART }}-
+ phpstan-cache-${{ env.PHP_VERSION }}-${{ github.head_ref }}-
+ phpstan-cache-${{ env.PHP_VERSION }}-${{ github.base_ref }}-
+ phpstan-cache-${{ env.PHP_VERSION }}-
+ - uses: ruudk/phpstan-baseline-refresh-create-pr-action@main
+ with:
+ github_token: ${{ env.GH_TOKEN }}
+ phpstan_path: phpstan
+ configuration_path: phpstan.neon.dist
+ phpstan_additional_arguments: --memory-limit 7G -a build/phpstan/bootstrap_action.php
+ baseline_path: build/phpstan/phpstan-baseline.neon
+ commit_name: Dolibot
+ commit_email: dolibarr-bot@users.noreply.github.com
+ commit_message: PHPStan > Update baseline
+ target_branch: develop
+ # pr_create: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'schedule') && 1 || 0 }}
+ pr_create: 1
+ pr_title: PHPStan > Update baseline
+ pr_reviewer: eldy
+ pr_body: |
+ This PR is automatically created to cleanup our baseline.
+
+ Since the last refresh of the baseline we have fixed {0} ignored errors.
+
+ Keep it up all! :muscle:
+
+ There are only {1} ignored errors left :sweat_smile:
diff --git a/.github/workflows/pr-18.yaml b/.github/workflows/pr-18.yaml
index 04b4b0ff35e..04c2c21d884 100644
--- a/.github/workflows/pr-18.yaml
+++ b/.github/workflows/pr-18.yaml
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
#- name: Install GitHub CLI
# run: |
@@ -39,16 +39,26 @@ jobs:
#REVIEWER: "eldy,lvessiller-opendsi,rycks" # Remplacez par le nom d'utilisateur GitHub du reviewer
REVIEWER: "rycks" # Remplacez par le nom d'utilisateur GitHub du reviewer
run: |
- echo "Run action by ${{ github.actor }}"
+ # shellcheck disable=2086
+ echo "Run action by ${{ github.actor }}"
+ # shellcheck disable=2086
echo "github.token=${{ github.token }}"
+ # shellcheck disable=2086
echo "secrets.GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}"
+ # shellcheck disable=2086
echo "GITHUB_EVENT_PATH=$GITHUB_EVENT_PATH"
+ # shellcheck disable=2086
echo Get the pr_number
+ # shellcheck disable=2086
pr_number=$(jq --raw-output .number < $GITHUB_EVENT_PATH)
+ # shellcheck disable=2086
echo "pr_number=$pr_number"
+ # shellcheck disable=2086
echo Authenticate login gh
+ # shellcheck disable=2086
gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}"
+ # shellcheck disable=2086
gh auth setup-git
- echo Set the reviewer
+ # shellcheck disable=2086
gh pr edit $pr_number --add-reviewer "$REVIEWER"
continue-on-error: true
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 82d2d9ad068..ccd276f8a97 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -32,7 +32,7 @@ jobs:
# This is faster for a big repo.
- name: Get all changed php files (if PR)
id: changed-php
- uses: tj-actions/changed-files@v44
+ uses: tj-actions/changed-files@v45
if: env.gh_event == 'pull_request'
with:
files: |
@@ -62,8 +62,9 @@ jobs:
- name: Extract PHP version
id: extract-php-version
run: |
+ # shellcheck disable=SC2016
PHP_VERSION=$(sed -n 's/.*\$arrayphpmaxversionwarning\s*=\s*array\s*(\s*\([0-9]\+\)\s*,\s*\([0-9]\+\).*/\1.\2/p' htdocs/install/check.php)
- echo "PHP_VERSION=$PHP_VERSION" >> $GITHUB_ENV
+ echo "PHP_VERSION=$PHP_VERSION" >> "$GITHUB_ENV"
- name: Setup PHPCS
uses: shivammathur/setup-php@v2
@@ -95,12 +96,12 @@ jobs:
run: |
set -o pipefail
pre-commit gc
- pre-commit run --show-diff-on-failure --color=always --all-files | tee ${RAW_LOG}
+ pre-commit run --show-diff-on-failure --color=always --all-files | tee "${RAW_LOG}"
# The next uses git, which is slow for a bit repo.
# - name: Get all changed php files (if PR)
# id: changed-php
- # uses: tj-actions/changed-files@v44
+ # uses: tj-actions/changed-files@v45
# if: env.gh_event == 'pull_request'
# with:
# files: |
@@ -112,7 +113,8 @@ jobs:
ALL_CHANGED_FILES: ${{ steps.changed-php.outputs.all_changed_files }}
run: |
set -o pipefail
- pre-commit run php-cs --files ${ALL_CHANGED_FILES} | tee -a ${RAW_LOG}
+ # shellcheck disable=2086
+ pre-commit run php-cs --files ${ALL_CHANGED_FILES} | tee -a "${RAW_LOG}"
- name: Run some pre-commit hooks on all files on push to "main" branches
if: |
@@ -124,8 +126,8 @@ jobs:
run: |
set -o pipefail
ln -sf ~/.cache .cache # Absolute path in .pre-commit-config.yaml
- pre-commit run --hook-stage manual -a php-cs-with-cache | tee -a ${RAW_LOG}
- pre-commit run --hook-stage manual -a sqlfluff-lint | tee -a ${RAW_LOG}
+ pre-commit run --hook-stage manual -a php-cs-with-cache | tee -a "${RAW_LOG}"
+ pre-commit run --hook-stage manual -a sqlfluff-lint | tee -a "${RAW_LOG}"
ls -l ~/.cache/pre-commit/
- name: Convert Raw Log to Annotations
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 97f218fce4d..c4deb467261 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Log
run: |
- echo "Run action by ${{ github.actor }}"
+ echo "Run action by ${{ github.actor }}"
echo "github.token=${{ github.token }}"
echo "secrets.GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}"
echo "GITHUB_EVENT_PATH=$GITHUB_EVENT_PATH"
diff --git a/.github/workflows/windows-ci.yml b/.github/workflows/windows-ci.yml
index 0343ec771b4..c15d2747125 100644
--- a/.github/workflows/windows-ci.yml
+++ b/.github/workflows/windows-ci.yml
@@ -61,7 +61,7 @@ jobs:
KEY_ROOT: ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}
with:
# See https://github.com/actions/cache/issues/1275#issuecomment-1925217178
- enableCrossOsArchive: true
+ enableCrossOsArchive: true
path: |
./db_init.sql
./db_init.sql.md5
@@ -116,6 +116,7 @@ jobs:
# Note this is bash (MSYS) on Windows
shell: bash
run: |
+ # shellcheck disable=SC2129
ECHO "#[group]Directory contents to verify cache files, ..."
ls -l
ECHO "#[endgroup]"
@@ -130,10 +131,12 @@ jobs:
ls -l
ECHO "#[endgroup]"
# Export some tool paths to reuse the from CMD shell.
- echo "TAIL=$(cygpath -w "$(which tail)")" >> "$GITHUB_ENV"
- echo "GREP=$(cygpath -w "$(which grep)")" >> "$GITHUB_ENV"
- echo "TEE=$(cygpath -w "$(which tee)")" >> "$GITHUB_ENV"
- echo "BASEDIR=$(realpath .)" >> "$GITHUB_ENV"
+ {
+ echo "TAIL=$(cygpath -w "$(which tail)")"
+ echo "GREP=$(cygpath -w "$(which grep)")"
+ echo "TEE=$(cygpath -w "$(which tee)")"
+ echo "BASEDIR=$(realpath .)"
+ } >> "$GITHUB_ENV"
- name: Run PHPUnit tests
# continue-on-error: true
@@ -186,7 +189,7 @@ jobs:
if: ${{ ! cancelled() }}
with:
# See https://github.com/actions/cache/issues/1275#issuecomment-1925217178
- enableCrossOsArchive: true
+ enableCrossOsArchive: true
key: ${{ steps.cache.outputs.cache-primary-key }}
path: |
./db_init.sql
diff --git a/.gitignore b/.gitignore
index fb62ffeaf22..0a6e4cf6655 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,6 +41,7 @@ htdocs/includes/php-parallel-lint/
htdocs/includes/sebastian/
htdocs/includes/squizlabs/
htdocs/includes/webmozart/
+htdocs/install/install.forced.php
htdocs/.well-known/apple-developer-merchantid-domain-association
/factory/
/output/
diff --git a/.mailmap b/.mailmap
index f5486ee8634..6a8ff802293 100644
--- a/.mailmap
+++ b/.mailmap
@@ -5,7 +5,7 @@ Laurent Destailleur Laurent Destailleur eldy
Laurent Destailleur Laurent Destailleur
Laurent Destailleur eldy10
-Laurent Destailleur Laurent Destailleur
+Laurent Destailleur Laurent Destailleur
Regis Houssin Regis Houssin
Regis Houssin Régis Houssin
Juanjo Menent simnandez
@@ -94,4 +94,4 @@ Anthony Berton Berton Anthony
Anthony Berton BB2A-Anthony
Anthony Berton Anthony Berton
Anthony Berton Berton Anthony
-Anthony Berton BB2A-Anthony
\ No newline at end of file
+Anthony Berton BB2A-Anthony
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 16927ef7bbc..950e65c97d5 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,9 +1,9 @@
---
-exclude: (?x)^( htdocs/includes/ckeditor/.*|(\.[^/]*/.*))$
+exclude: (?x)^( htdocs/includes/ckeditor/.*|(\.(?!github/workflows)[^/]*/.*))$
repos:
# Several miscellaneous checks and fix (on yaml files, end of files fix)
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.5.0
+ rev: v4.6.0
hooks:
# This hook tests the name of the branch and return an error if the name is
# 'develop' or an official version 'x.y'
@@ -43,7 +43,7 @@ repos:
- id: end-of-file-fixer
# Check that there are no completely merged file conflicts
- id: check-merge-conflict
- stages: [pre-commit, pre-rebase, pre-commit, pre-merge-commit]
+ stages: [pre-rebase, pre-commit, pre-merge-commit]
# Check that files with shebangs have the executable bit set (in git)
- id: check-executables-have-shebangs
# Check that shell files are executables
@@ -58,12 +58,18 @@ repos:
# Check that there are no files that have are the same when uppercased (conflict on windows)
- id: check-case-conflict
- # Beautify shell scripts
+ # Gitleaks is a SAST tool for detecting and preventing hardcoded secrets like passwords, api keys, and tokens in git repos
- repo: https://github.com/gitleaks/gitleaks.git
rev: v8.16.1
hooks:
- id: gitleaks
+ # Check github actions
+ - repo: https://github.com/rhysd/actionlint
+ rev: v1.7.3
+ hooks:
+ - id: actionlint
+
# Beautify shell scripts
- repo: https://github.com/lovesegfault/beautysh.git
rev: v6.2.1
@@ -185,7 +191,7 @@ repos:
# Check format of yaml files
- repo: https://github.com/adrienverge/yamllint.git
- rev: v1.33.0
+ rev: v1.35.1
hooks:
- id: yamllint
args:
@@ -195,7 +201,7 @@ repos:
# Execute codespell to fix typo errors (setup of codespell into dev/tools/codespell/)
- repo: https://github.com/codespell-project/codespell
- rev: v2.2.6
+ rev: v2.3.0
hooks:
- id: codespell
# Due to a current limitation of configuration files,
@@ -212,7 +218,7 @@ repos:
- -x
- dev/tools/codespell/codespell-lines-ignore.txt
exclude_types: [image]
- exclude: (?x)^(.phan/stubs/.*)$
+ exclude: (?x)^(.phan/stubs/.*|phpstan\.neon.*)$
additional_dependencies: [tomli]
- alias: codespell-lang-en_US
# Only for translations with specialised exceptions
@@ -238,30 +244,31 @@ repos:
# Check some shell scripts
- repo: https://github.com/shellcheck-py/shellcheck-py
- rev: v0.9.0.6
+ rev: v0.10.0.1
hooks:
- id: shellcheck
args: [-W, "100"]
+ # Check sql file syntax
- repo: https://github.com/sqlfluff/sqlfluff
- rev: 3.0.4
+ rev: 3.1.0
hooks:
- id: sqlfluff-lint
stages: [pre-commit, manual] # manual needed for ci
exclude: (?x)^
- (htdocs/includes/.*
- |htdocs/install/doctemplates/websites/.*_template
+ (dev/initdemo/mysqldump_.*\.sql
|htdocs/core/menus/init_menu_auguria\.sql
- |htdocs/install/doctemplates/websites/website_template-.*\.sql
- |(htdocs/install/mysql/data/(llx_20_c_departements\.sql
- |llx_accounting_account_.*\.sql)
- |(htdocs/install/mysql/migration/3\.[256]\.0-.*\.sql)
- )
+ |htdocs/includes/.*
+ |htdocs/install/doctemplates/websites/.*_template
+ |htdocs/install/doctemplates/websites/website_template.*\.sql
+ |htdocs/install/mysql/data/llx_20_c_departements\.sql
+ |htdocs/install/mysql/data/llx_accounting_account_.*\.sql
+ |htdocs/install/mysql/migration/3\..*\.sql
|htdocs/install/mysql/migration/(1[0-5]|[456789])\.0\.0-.*\.sql
- |htdocs/install/mysql/migration/3\.([0134789])\.0-.*\.sql
|htdocs/install/mysql/migration/repair\.sql
|htdocs/install/mysql/tables/llx_bookcal_availabilities-bookcal\.sql
- |htdocs/install/mysql/tables/llx_categorie(_(account|actioncomm|contact|fournisseur|knowledgemanagement-knowledgemanagement|member|product|project|societe|ticket-ticket|user|warehouse|website_page-website)?\.key\.sql)
+ |htdocs/install/mysql/tables/llx_categorie.*\.key\.sql
|htdocs/install/mysql/tables/llx_rights_def\.key\.sql
- |htdocs/install/pgsql/functions/functions(-(don|loan|mailing|opensurvey|partnership|recruitment|website))?\.sql
+ |htdocs/install/pgsql/functions/functions.*\.sql
+ |htdocs/modulebuilder/template/sql/.*\.sql
)$
diff --git a/.travis.yml b/.travis.yml
index 0020c7b067b..65f1200e866 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -37,7 +37,7 @@ cache:
jobs:
fast_finish: true
allow_failures:
- - php: '8.3'
+ - php: '8.4'
include:
- stage: PHP min and max
if: type = push
@@ -47,16 +47,16 @@ jobs:
- TRAVIS_PHP_VERSION=7.1
- stage: PHP min and max
if: type = pull_request OR type = push
- php: '8.2'
- env:
- - DB=mysql
- - TRAVIS_PHP_VERSION=8.2
- - stage: PHP 8.3
- if: type = push AND branch = develop
php: '8.3'
env:
- DB=mysql
- TRAVIS_PHP_VERSION=8.3
+ - stage: PHP 8.4
+ if: type = push AND branch = develop
+ php: '8.4'
+ env:
+ - DB=mysql
+ - TRAVIS_PHP_VERSION=8.4
notifications:
email:
@@ -94,6 +94,9 @@ before_install:
if [ "$TRAVIS_PHP_VERSION" = '8.3' ]; then
sudo apt install unzip apache2 php8.3 php8.3-cli php8.3-curl php8.3-mysql php8.3-pgsql php8.3-gd php8.3-imap php8.3-intl php8.3-ldap php8.3-xml php8.3-mbstring php8.3-xml php8.3-zip libapache2-mod-php8.3
fi
+ if [ "$TRAVIS_PHP_VERSION" = '8.4' ]; then
+ sudo apt install unzip apache2 php8.4 php8.4-cli php8.4-curl php8.4-mysql php8.4-pgsql php8.4-gd php8.4-imap php8.4-intl php8.4-ldap php8.4-xml php8.4-mbstring php8.4-xml php8.4-zip libapache2-mod-php8.4
+ fi
- |
echo Install pgsql if run is for pgsql
@@ -164,7 +167,7 @@ install:
squizlabs/php_codesniffer ^3
fi
# phpunit 9 is required for php 8
- if [ "$TRAVIS_PHP_VERSION" = '8.0' ] || [ "$TRAVIS_PHP_VERSION" = '8.1' ] || [ "$TRAVIS_PHP_VERSION" = '8.2' ] || [ "$TRAVIS_PHP_VERSION" = '8.3' ] || [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
+ if [ "$TRAVIS_PHP_VERSION" = '8.0' ] || [ "$TRAVIS_PHP_VERSION" = '8.1' ] || [ "$TRAVIS_PHP_VERSION" = '8.2' ] || [ "$TRAVIS_PHP_VERSION" = '8.3' ] || [ "$TRAVIS_PHP_VERSION" = '8.4' ] || [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
sudo composer self-update 2.4.4
composer -n require --ignore-platform-reqs phpunit/phpunit ^8 \
php-parallel-lint/php-parallel-lint ^1.2 \
@@ -354,6 +357,13 @@ script:
--exclude htdocs/includes/mike42/escpos-php/example --exclude htdocs/includes/maximebf \
--exclude htdocs/includes/phpunit/ --exclude htdocs/includes/tecnickcom/tcpdf/include/barcodes --exclude htdocs/includes/webmozart --exclude htdocs/includes/webklex --blame .
fi
+ if [ "$TRAVIS_PHP_VERSION" = "8.4" ]; then
+ parallel-lint -e php --exclude dev/tools/test/namespacemig --exclude htdocs/includes/composer --exclude htdocs/includes/myclabs --exclude htdocs/includes/phpspec --exclude dev/initdata/dbf/includes \
+ --exclude htdocs/includes/sabre --exclude htdocs/includes/phpoffice/PhpSpreadsheet --exclude htdocs/includes/sebastian \
+ --exclude htdocs/includes/squizlabs/php_codesniffer --exclude htdocs/includes/jakub-onderka --exclude htdocs/includes/php-parallel-lint --exclude htdocs/includes/symfony \
+ --exclude htdocs/includes/mike42/escpos-php/example --exclude htdocs/includes/maximebf \
+ --exclude htdocs/includes/phpunit/ --exclude htdocs/includes/tecnickcom/tcpdf/include/barcodes --exclude htdocs/includes/webmozart --exclude htdocs/includes/webklex --blame .
+ fi
set +e
echo
@@ -373,6 +383,9 @@ script:
if [ "$TRAVIS_PHP_VERSION" = "8.3" ]; then
phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --severity=1 ${CACHE_OPT} --runtime-set ignore_warnings_on_exit true .;
fi
+ if [ "$TRAVIS_PHP_VERSION" = "8.4" ]; then
+ phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --severity=1 ${CACHE_OPT} --runtime-set ignore_warnings_on_exit true .;
+ fi
set +e
echo
@@ -391,6 +404,9 @@ script:
if [ "$TRAVIS_PHP_VERSION" = "8.3" ]; then
var-dump-check --extensions php --tracy --exclude htdocs/includes --exclude test/ --exclude htdocs/public/test/ --exclude htdocs/core/lib/functions.lib.php .
fi
+ if [ "$TRAVIS_PHP_VERSION" = "8.4" ]; then
+ var-dump-check --extensions php --tracy --exclude htdocs/includes --exclude test/ --exclude htdocs/public/test/ --exclude htdocs/core/lib/functions.lib.php .
+ fi
set +e
echo
@@ -492,6 +508,9 @@ script:
php upgrade.php 19.0.0 20.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade19002000.log || cat $TRAVIS_BUILD_DIR/upgrade19002000.log
php upgrade2.php 19.0.0 20.0.0 > $TRAVIS_BUILD_DIR/upgrade19002000-2.log || cat $TRAVIS_BUILD_DIR/upgrade19002000-2.log
php step5.php 19.0.0 20.0.0 > $TRAVIS_BUILD_DIR/upgrade19002000-3.log || cat $TRAVIS_BUILD_DIR/upgrade19002000-3.log
+ php upgrade.php 20.0.0 21.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade20002100.log || cat $TRAVIS_BUILD_DIR/upgrade20002100.log
+ php upgrade2.php 20.0.0 21.0.0 > $TRAVIS_BUILD_DIR/upgrade20002100-2.log || cat $TRAVIS_BUILD_DIR/upgrade20002100-2.log
+ php step5.php 20.0.0 21.0.0 > $TRAVIS_BUILD_DIR/upgrade20002100-3.log || cat $TRAVIS_BUILD_DIR/upgrade20002100-3.log
set +e
echo
diff --git a/COPYRIGHT b/COPYRIGHT
index 80604483109..e979d87fcf3 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -47,7 +47,7 @@ Sabre 4.6.0 BSD Yes
Swift Mailer 5.4.2-DEV MIT License Yes Comprehensive mailing tools for PHP
Symfony/var-dumper ??? MIT License Yes Library to make var dump (used by DebugBar)
Stripe 10.7.0 MIT Licence Yes Library for Stripe module
-TCPDF 6.3.2 LGPL-3+ Yes PDF generation
+TCPDF 6.7.5 LGPL-3+ Yes PDF generation
TCPDI 1.0.0 LGPL-3+ / Apache 2.0 Yes FPDI replacement
bacon, dasprid, swiss-qr-bill, kmukku, symfony/validator
diff --git a/ChangeLog b/ChangeLog
index 87f353f6cd2..38c94efa24a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,222 @@
English Dolibarr ChangeLog
--------------------------------------------------------------
+***** ChangeLog for 21.0.0 compared to 20.0 *****
+
+For users:
+----------
+NEW: NEW Module - help to setup OpenID Connect (#30317)
+NEW: Module AI moved from experimental to stable
+NEW: Add hidden option CONTRACT_HIDE_MYCOMPANY_SIGNATURE_SECTION_PDF
+NEW: Add a tab on recurring invoice card to see the list of invoices generated from this recurring invoice (customer and supplier invoices) (#31463)
+NEW: #28871 signed_status to commande (#30359)
+NEW: #30269 linked project in column of last record tables (#30344)
+NEW: Accountancy - Add general account on thirdparty
+NEW: Accountancy - Add partial reconcile on subledger (#30027)
+NEW: Accountancy - Option to select the label of operation (#31200)
+NEW: Accountancy - Allow grouping taxes with primary line price (#26732)
+NEW: Activate PHPUnit with tests on permission on $action ==...
+NEW: Add advice for max size on list for better performance
+NEW: Add an advanced permission to validate knowledge (#30855)
+NEW: Add a test mode into the setup of AI module to test the AI prompts.
+NEW: Add a tool to decrypt data encrypted in database.
+NEW: Add auto generate document when reception is created (#30688)
+NEW: Add badge for generate invoice client tab (#31559)
+NEW: Add caldav on fichinter (#30582)
+NEW: Add column agenda_id to implement the link between files and event
+NEW: Add column "comment" in list of payment
+NEW: Add constant to hide version (#30865)
+NEW: Add country in search of project
+NEW: add duration extrafields (#31595)
+NEW: Add export for thirdparty bank accounts (#30807)
+NEW: Add export profile to export MO and lines of consumption/production
+NEW: Add option to store the text content of uploaded files into database (with conversion with pdftotext)
+NEW: Add Filter Assistance for Filling Filters Field (#31646)
+NEW: add last stock movement and product nature to StocksWithBatch export (#30578)
+NEW: Add member title to the labels (#31710)
+NEW: Add mode Customer price + level price (#31091)
+NEW: add option to add external billing contact on the supplier_proposal pdf (#30298)
+NEW: Add option to clone its default BOM when cloning a product (#30088)
+NEW: Add option to enable PDF frame rounded corners
+NEW: Add option to round weight and volume on shipment PDF
+NEW: add pdf regeneration to mass action for shipments (#29970)
+NEW: Add picto on list of notification email templates
+NEW: add recurring supplier invoice on supplier tab #30945 #30949
+NEW: Add sort by ref warehouse/product or ref product/warehouse on inventory product list (#31639)
+NEW: Add some improvement for ODT Contracts (#31715)
+NEW: Add terms of sale on documents (#24846)
+NEW: Add thirdparty state in substitution array (#31549)
+NEW: Add tooltip on closing accounting setup
+NEW: add trigger for linking and unlinking invoices (#30182)
+NEW: Add Unit price on supplier order stat product (#31055)
+NEW: add warehouseId parameters in select_produit to limit result to existing product in select (#30477)
+NEW: allow link feature to task (#30235)
+NEW: Authorize modification of a partially shipped order (#31423)
+NEW: autogenerate project reference in API (#30638)
+NEW: automatically change status on answering a ticket (#30556)
+NEW: Browser notifications use now jnotify (fix browser compatibility)
+NEW: can add extrafields with dol_move (#30574)
+NEW: Can change the type of a social contribution if no payment
+NEW: can delete a category translation (#31396)
+NEW: Can link an object to another using the ref. Close #31001
+NEW: Can set a class on the tr lines of form setup lines
+NEW: Can set border radius of list and tables
+NEW: Can set date of transmission in 1 click when validating SEPA
+NEW: Can set parameters with setup type yesno.
+NEW: Can set the contact type for the autoassigned user that creates a project (#30444)
+NEW: Can show raw value of oauth token
+NEW: Can use a specific profile to send email for password forgotten
+NEW: option to care grandchild (#31314)
+NEW: Look and feel - checkbox to choose thirdparty nature (#30192)
+NEW: Color line total and sub total (#26172)
+NEW: Constant to hide user login times (#29815)
+NEW: Const ASSET_ROUND_INTEGER_NUMBER_UPWARDS for ASSET Module. Compatibility to migrate from other accounting solutions. (#31615)
+NEW: Content of tab "attached files" is more compact.
+NEW: Contract signed status update (#30779)
+NEW: Create thirdparty notification by action code (#30541)
+NEW: Customer price and level price together
+NEW: default configuration for event reminder (#31407)
+NEW: determine multi-currency price on object line create tpl (#28021)
+NEW: Display for socialnetworks admin
+NEW: display mark rates in objectLineCreate (#30872)
+NEW: due date in accounting bookkeeping list and card (#30061)
+NEW: enhance the OAUTH2 token manager. Can refresh a token from page.
+NEW: EPC QR CODE - Use bank owner account name instead of company (#31735)
+NEW: fichinter list disable details option (#30884)
+NEW: filter on invoice dates in product margin tab (#29997) and thirdparty margin tab (#29998)
+NEW: FIX: Display invoice widgets by amount instead of number (#30215)
+NEW: Add the Clone of company (#29755)
+NEW: function for Preview In CKeditor products
+NEW: FY Changed Period handle in Module Asset (#31618)
+NEW: hidden option MAIN_TE_PRIVATE_FIRST_AND_LASTNAME_TO_UPPER (#31143)
+NEW: Hide completed items in Link to (#31329)
+NEW: Iban is saved encrypted
+NEW: if a user is associated with the expense report, then that user will get an associated credit line ($tabtp) generated.
+NEW: Implementing Billable tasks on projects using new attribute "billable" (#30092)
+NEW: Include a protection into check update of module to detect malware
+NEW: intervention signed status update (#30629)
+NEW: INTRA VAT ID field optionally mandatory and/or invoice mandatory in thirdparty module setup (#31663)
+NEW: Invoice - Generate payment information - Structured communication (#31376)
+NEW: Invoice line import - fk_product can be a ref (#30795)
+NEW: Look and feel v21 - Can have rounded border on tables
+NEW: Look and feel v21 - Toolbar for WYSIWYG editor is short on smartphone
+NEW: Management of extrafields on customer prices, level prices and default prices (#31313)
+NEW: manage several type of dangerous goods for a same parcel (#30238)
+NEW: Member - Can upload a file with drag and drop (#30265)
+NEW: Move the picto in the first tab label always visible
+NEW: ODTSubsitution for date_start_real / Contracts
+NEW: Look and feel - Opacity for finished lines (#30219)
+NEW: option: assign default roles to "individual" third-party contacts (#30499)
+NEW: option to allow freezing qty in BOM service's line (#29990)
+NEW: Add a page to list the lines of orderse (#31521)
+NEW: pagination in product margin tab
+NEW: payment term and mode on creating supplier (#31166) and third-party (#31067)
+NEW: PDF Add Customer accountancy code (#31544)
+NEW: PDF Add discount total if line discount exists (#31483)
+NEW: PDF Add option to print rounded corner frames (#31172)
+NEW: PDF Add shipping address in sales orders (#31293)
+NEW: PDF Add total discount if line discount exists
+NEW: PDF frame rounded corners
+NEW: Prelevement - Use structured payment data for Belgium (#31383)
+NEW: Preview product list when we choose model email layout Commerce (#30185)
+NEW: Can upload a file with drag and drop: Thirdparty (#30263) - Product/Service (#30250) - Project (#30276) - Propale (#30315)
+NEW: Public and private note options in thirdparty list (#31062)
+NEW: redirect to expedition card if global search has unique result (#30108)
+NEW: replenishment if the warehouse is set to the default selected user (#31229)
+NEW: retrieve Thirdparty by account (#31283)
+NEW: Share msg "not found" for widgets and add a button to add new record when none exists (#31309)
+NEW: shipment signed status update (#30928)
+NEW: Show detail of each multicurrency amount in popup of price
+NEW: show holidays at bottom of activity/permonth.php page (#31550)
+NEW: Show tooltip on number of qualified records
+NEW: Signature or proposal from the Web portal (#30062)
+NEW: Star Field Type for Extra Fields (#31348) and for for Module Builder (#31216)
+NEW: Support option PDF_ADD_POSITION on shipment espadon template
+NEW: Auto-suspend facture rec when nb gen max is reached (#31623)
+NEW: The margin section can now be shown/hidden
+NEW: Deal change in fiscal year period adjustments to shortened or extended periods (e.g., fiscal years of 9 or 15 months)
+NEW: (ticket, admin): More options entries (#30548)
+NEW: Update warehouse product list to add another sorting option (#30971)
+NEW: Can set blacklist of words into answer of AI (#30385)
+NEW: user list country filter (#30770)
+NEW: vat rate with department in dict (#31628) (#31627)
+NEW: When we export data of unlaterable log, we add an unalterable line in logs
+NEW Add option THEME_STICKY_TOPMENU = 'scrollleftmenu_after_mainpage' (or 'disabled')
+NEW value for FICHINTER_DISABLE_DETAILS. If FICHINTER_DISABLE_DETAILS is set to '2' details are disabled only on intervention list.
+
+PERF: Reduce nb of requests into num_public_holiday
+PERF: Reduce size for VCF files and virtualcard qrcode
+PERF: Reduce time to show the page of unalterable logs with high data
+
+For developers:
+---------------
+NEW: translation with action triggers API (#30595)
+NEW: more complete stock product API call (#30567)
+NEW: Projet - Add hook formconfirm (#31408)
+NEW: Can choose the zip handler to build ODT.
+NEW: Can force ip into log file name using a define('SYSLOG_FILE_ADDIP')
+NEW: Can force log file name using a define('SYSLOG_FILE_ADDSUFFIX')
+NEW: Can define the text on tooltip on a yesno check.
+NEW: Introduce value 'password' for mode of sanitization in GETPOST.
+NEW: Add getImageFromHtmlContent() method
+NEW: Add gitleaks into pre-commit
+NEW: Add hook after the line is processed in the sell journal page (#31439)
+NEW: add hook dolibarrDelConst (#30672)
+NEW: Add hook getLoginPageExtraContent, getPasswordResetPageExtraContent
+NEW: add hook in dolibarr_set_const admin.lib.php (#30605)
+NEW: Add hook on sell journal page for overwrite the processed journal data after the SQL request (#31033)
+NEW: force_install_noedit : add value 3 to block all technical parameters excepted main_url (#30080)
+NEW: Add a new hook on order list (#31315)
+NEW: Add ID of the line in the trigger context for addLine(), updateLine() and deleteLine() on contract (#30343)
+NEW: Add more log information
+NEW: Add pagination data to some api routes (#29895)
+NEW: Add test to forbidden NOW() SQL function.
+NEW: API call to re-generate a users password. (#30590)
+NEW: API close proposal now supports both private and public note (#30659)
+NEW: API_LOGINS_ALLOWED_FOR_GET_EXTRAFIELD (#30562)
+NEW: API /setup endpoint for getting action triggers (#30538)
+NEW: HOOK FORMCONFIRM IN TICKET (#31321)
+NEW: hook on expensereport added (#31380)
+QUAL line classes for various business object classes have been moved to individual files.
+QUAL: #30122 (#30131)
+QUAL: AccountancySystem: maintenance work to uniformize and clean up (#31391)
+QUAL: All $conf->global->module->enabled are replaced with isModEnabled()
+QUAL: bankline category table name (#30419)
+QUAL: Clean code
+QUAL: conformity PR for data structure of #29964 (#30014)
+QUAL: Edition of currency is shared in a common tpl file
+QUAL: Ergo btn and fix (#30947)
+QUAL: Move function csvClean into functions2.lib.php
+QUAL: Move the public css file into the public directory
+QUAL: Removed inclusion of the file json.lib.php
+QUAL: simplifying readability of sql
+QUAL: Standardize name of user cookies
+QUAL: Suffix table name to have them created on module install
+QUAL: The property ->domiciliation and ->propio on bank accounts has been
+QUAL: Update inc.php (#29822)
+QUAL: Use archiveOrBackupFile for MAIN_MAIL_DEBUG_LOG_WITH_DATE
+QUAL: Use table_element in sql queries (#31355)
+QUAL: rename const WORKFLOW_EXPEDITION_CLASSIFY_NEWD_INVOICE to WORKFLOW_RECEPTION_CLASSIFY_NEWD_INVOICE
+QUAL: This configuration change in phan will report NEW: array types in phpdoc
+
+
+WARNING:
+--------
+
+The following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
+* Prepare your module for deprecation of triggers code XXX_INSERT to support also XXX_CREATE.
+* More class properties (with old name in french) are now deprecated in favor of the property name in english.
+* The json emulator dol_json_encode/decode() is removed. The native json PHP module must be enabled/available (this is the case by default with most PHP installation).
+* The deprecated GET parameter "&sall=" has been removed, use now the "&search_all=".
+* The experimental and deprecated module WebserviceClient is completely removed (was never released and use deprecated architecture). It may be replaced with the stable module Webhook.
+* The dynamic properties ->no_button_delete, ->no_button_edit, ->no_button_copy for $object Product that could be set by an external module must no more be
+ set (not allowed by PHP 8.2). A module can already return an array with key 'no_button_delete', 'no_button_edit', 'no_button_copy' for the same purpose.
+* The old function dol_bc($var, $moreclass = '') has been removed. If you called it, just stop to call it (the function has no effect since a long time).
+* The trigger code CATEGORY_LINK and CATEGORY_UNLINK have been replaced with code CATEGORY_MODIFY. You can read ->context['linkto'] or ->context['unlinkoff'] to detect if we want to make a link or unlink.
+* The property ->domiciliation and ->propio on bank accounts has been deprecated and replaced with property ->address and ->owner_name everywhere.
+* If you were using the substitution key __MEMBER_CIVILITY__, you must now use __MEMBER_TITLE__
+
+
***** ChangeLog for 20.0.4 compared to 20.0.3 *****
FIX: $this->origin_object can not be instance of CommandeFournisseur if it is already an instanceof CommonObject
FIX: 17.0 API endpoints "PUT": prevent overwriting all extrafields if only some are supplied in the request cf. PR #29237
@@ -169,7 +385,7 @@ FIX: wrong trigger name (MODIFY instead UPDATE)
FIX: fatal when updating recurring supplier invoice line with php8 ($remise_percent is '' instead of 0) (#31713)
FIX: supplier invoice template card: buyer and seller swapped in VAT-related function calls (probably a copy-paste from customer invoice templates) (#31446)
FIX: #25853 Thirdparty Massaction (#25868)
-FIX: #28505 Blank page from thirparty to projects (#31637)
+FIX: #28505 Blank page from third party to projects (#31637)
FIX: #30432 make thirdparty code_client and code_compta modifiable via API (#31668)
FIX: #31015
FIX: #31360 delete contact when using pgsql.
@@ -273,7 +489,6 @@ FIX: when qty is not an integer, apply price() (#31138)
FIX: Wrong price for BOM with workstation (#31142)
FIX: determine multi-currency price on object line create tpl (#28021)
-
***** ChangeLog for 20.0.0 compared to 19.0 *****
For users:
@@ -411,7 +626,7 @@ NEW: Module Website: Can link/unlink translation between web pages
NEW: Move dir of cache for widgets
NEW: multiselect with checkbox in categories/tags search for thirdparty list (#28335)
NEW: new consts to redirect from massaction createbills (#29436)
-NEW: new global string to preselect yes for one bill per thirdparty in orderlist massaction (#29359)
+NEW: new global string to preselect yes for one bill per third party in orderlist massaction (#29359)
NEW: notification action triggers for cancelling orders and invoices
NEW: now button when editing an event
NEW: online signature of shipments (#29559)
@@ -527,7 +742,6 @@ QUAL: professional identifiers - remove TODO by adding profid.lib.php
QUAL: Properties ->date_update and ->date_modification were merged
QUAL: removed duplicate language file
QUAL: Remove the external js library jstimezonedetect
-QUAL: Remove use of customurl filter. Must use the USF syntax.
QUAL: Rename all input fields "tel" into "phone"
QUAL: Rename column fk_origin_line on shipment lines into fk_elementdet to match a generic use. (#28989)
QUAL: replace $conf->global with getDolGlobalString()
@@ -548,6 +762,7 @@ The following changes may create regressions for some external modules, but were
See https://wiki.dolibarr.org/index.php?title=Universal_Search_Filter_Syntax
* The parameter $filter of methods fetchAll() does not accept array of SQL commands but must be a string of an Universal Search Filter syntax.
See https://wiki.dolibarr.org/index.php?title=Universal_Search_Filter_Syntax
+* The use of 'customurl' into $filter has been removed. Must use the USF syntax.
* Some API HTTP return code were moved from 401 to 403 to better follow REST specification.
* More class properties (with old name in french) are now deprecated in favor of the property name in english.
* dolibarrtriggers class VERSION_XXX constants have been deprecated. Please use array dictionary VERSIONS['XXX'].
@@ -566,7 +781,7 @@ The following changes may create regressions for some external modules, but were
* Removed trigger BILLREC_CREATEBILL. This trigger was not a CRUD event. If you used it, you can already use the trigger BILL_CREATE and
test that ($object->fac_rec > 0) to know if creation trigger is from a recurring invoice or not. Also this old trigger was never enabled
into table llx_c_action_trigger.
-* Renamings in expedition line table and class, fk_origin_line is now fk_elementdet in table and class.
+* Renaming into expedition line table and class: fk_origin_line is now fk_elementdet in table and class.
* The signature of method fetch() of class CompanyBankAccount has been modified to match the signature of method Account->fetch()
@@ -2153,7 +2368,7 @@ NEW: Add link to create an element from the category page
NEW: add margin infos to takepos invoice lines
NEW: Add max size send for "backup and link to mail" option
NEW: Add method httponly_accessforbidden()
-NEW: Add more advices into the Setup security page
+NEW: Add more advice into the Setup security page
NEW: Add new global variable for keeping the previous signature information on proposal (case of reopening a proposal)
NEW: Add objectLink on shipment
NEW: Add option --force on CLI cron_run_jobs.php
@@ -3571,8 +3786,8 @@ NEW: add option in Workflow module to set a shipment as closed
for Admins
-NEW: Add a security center page with all information and advices related to the security of your instance
-NEW: Add a performance center page with all information and advices related to the performance of your instance
+NEW: Add a security center page with all information and advice related to the security of your instance
+NEW: Add a performance center page with all information and advice related to the performance of your instance
Modules
NEW: Module Recruitment is now stable
@@ -3734,7 +3949,7 @@ FIX: fix checkbox displayed according to module project setup parameters - work
FIX: inconsistency in margin recording with option "Force to sale price"
FIX: invoice PDF generation after payment
FIX: mask selector fournisseur if module not activate
-FIX: merge thirdparty also work for bank URL entry
+FIX: merge third party also works for bank URL entry
FIX: Missing extrafields into export of agenda record
FIX: missing parameter in select for POP
FIX: missing return edit if update error
@@ -7590,7 +7805,7 @@ NEW: Add index and constraints keys on supplier proposal detail table
NEW: Add phpunit to check the engine is defined into sql create files.
NEW: Add project and Hook to Loan
NEW: Add REST API to push a file.
-NEW: Allow extrafields list select to be dependands on other standard list and not only other extrafields list
+NEW: Allow extrafields list select to be dependent on other standard list and not only other extrafields list
NEW: Architecture to manage search criteria persistence (using save_lastsearch_values=1 on exit links and restore_lastsearch_values=1 in entry links)
NEW: data files are now also parsed by phpunit for sql syntax
NEW: Hook to allow inserting custom product head #6001
@@ -8614,7 +8829,7 @@ NEW: The clicktodial module is now able to provide link "tel:" on phone numbers.
NEW: The conditional IF into ODT templates works also on not defined var so we can show data only if defined. Close #3819
NEW: The free text in PDF footers can now be a HTML content. So the WYSIWYG editor is on by default to edit it into module setup.
NEW: The thirdparties tabs, the contacts tabs and the members tabs are now presented using a new "top banner", saving space and using a same way to show address, status and navigation arrows.
-NEW: Thumbs for statistics on main page are fully clicable (not only link inside the thumb)
+NEW: Thumbs for statistics on main page are fully clickable (not only link inside the thumb)
NEW: Translate extrafield's labels.
NEW: Use new select2 component for juridical status, country and state selection.
NEW: When creating order, proposal or invoice from thirdparty card, the project is asked during creation. A link to create project if it does not exists is also available.
@@ -9213,7 +9428,7 @@ NEW: [ task #851 ] Add a new field: Commercial name
NEW: [ task #977 ] New option to manage product unit Migrated code from GPCSolutions/dolibarr:3.2-units branch and adapted for 3.8 with some improvements
NEW: The line where mouse is over can be highlight with option THEME_ELDY_USE_HOVER (on by default)
NEW: The notification module accept keyword __SUPERVISOR__ to send notification to supervisor of user.
-NEW: Thumbs for statistics on main page are fully clicable (not only link inside the thumb)
+NEW: Thumbs for statistics on main page are fully clickable (not only link inside the thumb)
NEW: Title of page project contains project ref and label
NEW: update skeleton and class builder
NEW: Use new select2 component for juridical status, country and state selection.
@@ -10364,7 +10579,7 @@ For users:
prices, radio).
- New: [ task #798 ] Add range limit date on product/services as it is done on order
and invoice.
-- New: [ task #814 ] Add extrafield feature for projects ands tasks.
+- New: [ task #814 ] Add extrafield feature for projects and tasks.
- New: [ task #770 ] Add ODT document generation for Projects module.
- New: [ task #741 ] Add intervention box.
- New: [ task #826 ] Optional increase stock when deleting an invoice already validated.
diff --git a/README-FR.md b/README-FR.md
index 5cc91a5c3fa..34ca2f596f1 100644
--- a/README-FR.md
+++ b/README-FR.md
@@ -1,6 +1,7 @@
# DOLIBARR ERP & CRM

+
[](https://php.net/)
[](https://github.com/Dolibarr/dolibarr)
[](https://bestpractices.coreinfrastructure.org/projects/5521)
@@ -10,13 +11,15 @@ Il est simple d'utilisation et modulaire, vous permettant de n'activez que les f

+
## LICENCE
Dolibarr est distribué sous les termes de la licence GNU General Public License v3+ ou supérieure.
+
## INSTALLER DOLIBARR
-### Configuration simple
+### Installation simple
Si vous avez peu de compétences techniques et que vous souhaitez installer Dolibarr ERP/CRM en quelques clics, vous pouvez utiliser l'une des versions pré-packagées avec les prérequis:
@@ -26,7 +29,7 @@ Si vous avez peu de compétences techniques et que vous souhaitez installer Doli
Les packages peuvent être téléchargés à partir de [site web officiel](https://www.dolibarr.org/).
-### Configuration avancée
+### Installation recommandée/avancée
Vous pouvez aussi utiliser un serveur Web et une base de données prise en charge (MariaDB, MySQL ou PostgreSQL) pour installer la version standard.
@@ -54,6 +57,7 @@ Vous pouvez aussi utiliser un serveur Web et une base de données prise en charg
- Suivez les instructions de l'installateur
+
## METTRE A JOUR DOLIBARR
Pour mettre à jour Dolibarr depuis une vieille version vers celle ci:
@@ -70,10 +74,12 @@ Pour mettre à jour Dolibarr depuis une vieille version vers celle ci:
Note: *Le processus de migration peut être lancé manuellement et plusieurs fois, sans risque, en appelant la page /install/*
+
## CE QUI EST NOUVEAU
Voir le fichier [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog).
+
## CE QUE DOLIBARR PEUT FAIRE
### Modules principaux (tous optionnels)
@@ -143,6 +149,7 @@ Voir le fichier [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/Ch
Dolibarr peut aussi être étendu à volonté avec l'ajout de modules/applications externes développées par des développeurs tiers, disponible sur [DoliStore](https://www.dolistore.com).
+
## CE QUE DOLIBARR NE PEUT PAS (ENCORE) FAIRE
Voici un liste de fonctionnalités pas encore gérées par Dolibarr:
@@ -152,22 +159,26 @@ Voici un liste de fonctionnalités pas encore gérées par Dolibarr:
- Dolibarr n'embarque pas de Webmail intégré nativement.
- Dolibarr ne fait pas le café (pas encore).
+
## DOCUMENTATION
La documentation utilisateur, développeur et traducteur est disponible sous forme de ressources de la communauté via le site [Wiki](https://wiki.dolibarr.org).
+
## CONTRIBUER
Ce projet existe grâce à ses nombreux contributeurs [[Contribuer](https://github.com/Dolibarr/dolibarr/blob/develop/.github/CONTRIBUTING.md)].
[](https://github.com/Dolibarr/dolibarr/graphs/contributors)
+
## CREDITS
Dolibarr est le résultat du travail de nombreux contributeurs depuis des années et utilise des librairies d'autres contributeurs.
Voir le fichier [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT)
+
## ACTUALITES ET RESEAUX SOCIAUX
Suivez le projet Dolibarr sur les réseaux francophones
diff --git a/README.md b/README.md
index 253f46f0506..136f946a257 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,12 @@
# DOLIBARR ERP & CRM

+
[](https://php.net/)
[](https://github.com/Dolibarr/dolibarr)
[](https://bestpractices.coreinfrastructure.org/projects/5521)
-Dolibarr ERP & CRM is a modern software package that helps manage your organization's activities (contacts, suppliers, invoices, orders, stocks, agenda…).
+Dolibarr ERP & CRM is a modern software package that helps manage your organization's activities (contacts, quotes, invoices, orders, stocks, agenda, human resources, ecm, manufacturing…).
It's an Open-Source Software suite (written in PHP with JavaScript enhancements) designed for small, medium or large companies, foundations and freelancers.
@@ -17,6 +18,7 @@ Dolibarr has a large community ready to help you, free forums and [preferred par

+
## LICENSE
Dolibarr is released under the terms of the GNU General Public License as published by the Free Software Foundation; either Version 3 of the License, or (at your option) any later version (GPL-3+).
@@ -25,24 +27,25 @@ See the [COPYING](https://github.com/Dolibarr/dolibarr/blob/develop/COPYING) fil
Other licenses apply for some included dependencies. See [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT) for a full list.
+
## INSTALLING
-### Simple setup
+There is a lot of different solutions to install Dolibarr.
+
+### Using packages
If you have low technical skills and you're looking to install Dolibarr ERP/CRM with just a few clicks, you can use one of the packaged versions:
- [DoliWamp for Windows](https://wiki.dolibarr.org/index.php/Dolibarr_for_Windows_(DoliWamp))
- [DoliDeb for Debian](https://wiki.dolibarr.org/index.php/Dolibarr_for_Ubuntu_or_Debian)
- DoliRpm for Red Hat, Fedora, OpenSuse, Mandriva or Mageia
+- The Docker image (see next chapter)
Releases can be downloaded from [official website](https://www.dolibarr.org/).
-### Recommended setup
+### Using the generic step by step setup (recommended for IT users)
-You can use any web server supporting PHP (Apache, Nginx, ...) and a supported database (MariaDB, MySQL or PostgreSQL) to install the standard version.
-
-
-#### Generic install steps
+You can use any web server supporting PHP (Apache, Nginx, ...) and a supported database (MariaDB, MySQL or PostgreSQL) to install the standard version:
- Verify that your installed PHP version is supported [see PHP support](https://wiki.dolibarr.org/index.php/Releases).
@@ -70,10 +73,15 @@ You can use any web server supporting PHP (Apache, Nginx, ...) and a supported d
- Follow the installer instructions
-### SaaS/Cloud Setup
+### Using Docker images
+
+Dolibarr is also available as a [Docker image](https://hub.docker.com/r/dolibarr/dolibarr). Installation instructions are available [here](https://github.com/Dolibarr/dolibarr-docker).
+
+### Using ready to use SaaS/Cloud offers
If you lack the time to install it yourself, consider exploring commercial 'ready-to-use' Cloud offerings (refer to https://saas.dolibarr.org). Keep in mind that this third option comes with associated costs.
+
## UPGRADING
Dolibarr supports upgrading, usually without the need for any (commercial) support (depending on if you use any commercial extensions). It supports upgrading all the way from any version after 2.8 without breakage. This is unique in the ERP ecosystem and a benefit our users highly appreciate!
@@ -86,10 +94,12 @@ Follow these step-by-step instructions to seamlessly upgrade Dolibarr to the lat
- At your next access, Dolibarr will redirect you to the "install/" page to follow the upgrade process.
If an `install.lock` file exists to lock any other upgrade process, the application will ask you to remove the file manually (you should find the `install.lock` file in the directory used to store generated and uploaded documents, in most cases, it is the directory called "*documents*").
+
## WHAT'S NEW
See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog) file.
+
## FEATURES
### Main application/modules (all optional)
@@ -211,6 +221,7 @@ See exact requirements on the [Wiki](https://wiki.dolibarr.org/index.php/Prerequ
Dolibarr can be extended with a lot of other external applications or modules from third-party developers available at the [DoliStore](https://www.dolistore.com).
+
## WHAT DOLIBARR CAN'T DO YET
These are features that Dolibarr does **not** yet fully support:
@@ -220,10 +231,12 @@ These are features that Dolibarr does **not** yet fully support:
- Native embedded Webmail, but you can send email to contacts in Dolibarr with e.g. offers, invoices, etc.
- Dolibarr can't do coffee (yet)
+
## DOCUMENTATION
Administrator, user, developer and translator's documentation are available along with other community resources in the [Wiki](https://wiki.dolibarr.org).
+
## CONTRIBUTING
This project exists thanks to all the people who contribute.
@@ -233,12 +246,14 @@ A View on Contributors:
[](https://github.com/Dolibarr/dolibarr/graphs/contributors)
+
## CREDITS
Dolibarr is the work of many contributors over the years and uses some fine PHP libraries.
See [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT) file.
+
## NEWS AND SOCIAL NETWORKS
Follow Dolibarr project on:
@@ -250,6 +265,7 @@ Follow Dolibarr project on:
- [YouTube](https://www.youtube.com/user/DolibarrERPCRM)
- [GitHub](https://github.com/Dolibarr/dolibarr)
-### Sponsors
+
+## Sponsors
Support this project by becoming a sponsor. Your logo will show up here. 🙏 [[Become a sponsor/backer](https://opencollective.com/dolibarr#backer)]
diff --git a/SECURITY.md b/SECURITY.md
index b822f100b9c..062578e03b9 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -1,6 +1,6 @@
# Security Policy
-This file contains some policies about the security reports on Dolibarr ERP CRM project, one of the most popular Open Source ERP and CRM in the world.
+This file contains some policies about the security reports on Dolibarr ERP CRM project, a popular Open Source ERP and CRM used by millions of users.
## Supported Versions for security reports
@@ -12,8 +12,9 @@ Security report are valid only on current stable version (see https://dolibarr.o
To report a vulnerability, for a private report, you can:
-- Send your report on Vulnerability Disclosure Program (VDP) [https://app.yogosha.com/cvd/dolibarr/10VxeNx6Ui3rSEhAgX63US](https://app.yogosha.com/cvd/dolibarr/10VxeNx6Ui3rSEhAgX63US) (recommended for everybody)
+- Send your report on Vulnerability Disclosure Program (VDP): Link will be updated soon (recommended for everybody)
- Or send an email to security@dolibarr.org with clear textual description of the report along with steps to reproduce the issue, include attachments such as screenshots or proof of concept code as necessary.
diff --git a/build/docker-dev/README.md b/build/docker-dev/README.md
index 6daf6d6bd5c..66358bf2bbe 100644
--- a/build/docker-dev/README.md
+++ b/build/docker-dev/README.md
@@ -2,7 +2,7 @@
The docker-compose.yml file is a sample of a config file to use to build and run Dolibarr in the current workspace with Docker.
This docker image is intended for development usage.
-For production usage you should consider other contributor reference like https://hub.docker.com/r/tuxgasy/dolibarr
+For production usage you should consider other contributor reference like https://hub.docker.com/r/dolibarr/dolibarr
Before build/run, define the variable HOST_USER_ID as following:
diff --git a/build/docker/README.md b/build/docker/README.md
index 7dc8aac3bb0..8fe44662bf5 100644
--- a/build/docker/README.md
+++ b/build/docker/README.md
@@ -1,6 +1,23 @@
-# How to use it ?
+# How to use run Dolibarr with docker ?
+
+
+## For a fast run of a demo of the local version, you can build the docker image from this current repository by running
+
+
+sudo docker-compose build
+
+sudo -s
export HOST_USER_ID=$(id -u)
+export HOST_GROUP_ID=$(id -g)
export MYSQL_ROOT_PWD=$(tr -dc A-Za-z0-9 create volume directory /var/documents ..."
- mkdir -p /var/documents
+if [ ! -d /var/www/documents ]; then
+ echo "[docker-run] => create volume directory /var/www/documents ..."
+ mkdir -p /var/www/documents
fi
-echo "[docker-run] => Set Permission to www-data for /var/documents"
-chown -R www-data:www-data /var/documents
+echo "[docker-run] => Set Permission to www-data for /var/www/documents"
+chown -R www-data:www-data /var/www/documents
echo "[docker-run] => update '${PHP_INI_DIR}/conf.d/dolibarr-php.ini'"
cat < "${PHP_INI_DIR}/conf.d/dolibarr-php.ini"
diff --git a/build/exe/doliwamp/index.php.install b/build/exe/doliwamp/index.php.install
index 2ccd4a5ff66..ef0d7e899d7 100644
--- a/build/exe/doliwamp/index.php.install
+++ b/build/exe/doliwamp/index.php.install
@@ -562,12 +562,11 @@ a:hover {