Skip to content
This repository was archived by the owner on Feb 20, 2026. It is now read-only.

Commit 67fe058

Browse files
committed
Merge branch 'next'
* next: (32 commits) 5.2.0 contributing: add more instructions for add lang contributing: update add lang instructions fix typo add addons page add link to safari issues Emphasize that compounds are always shared across the instance. (#44) fix typo add disable 2fa doc add gmp section add cypress run doc add compounds editor and opencloning add slo url in saml doc wip wip add changelog for 5.2.0-alpha grammar: add hyphen to real-world (#43) remove deprecated code add doc to migrate to s3 fix typo ...
2 parents 6a7cd4a + 268af47 commit 67fe058

25 files changed

+808
-262
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# This file is an example .container file for eLabFTW service. Also place the .network file and possible configure HAProxy accordingly.
2+
# Place it in /etc/containers/systemd so a quadlet is generated and the service can be managed by systemd.
3+
# Documentation: https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html
4+
5+
[Unit]
6+
Description=elabftw container service
7+
After=network.target
8+
9+
[Container]
10+
# Note: it is recommended to pin to a specific version instead of using the "stable" tag.
11+
Image=docker.io/elabftw/elabimg:stable
12+
ContainerName=elabftw
13+
14+
# CAPABILITIES
15+
DropCapability=ALL
16+
AddCapability=CHOWN
17+
AddCapability=SETGID
18+
AddCapability=SETUID
19+
AddCapability=FOWNER
20+
AddCapability=DAC_OVERRIDE
21+
AddCapability=NET_BIND_SERVICE
22+
23+
NoNewPrivileges=true
24+
25+
# HEALTHCHECK
26+
HealthCmd=curl http://localhost:443/healthcheck
27+
HealthInterval=5s
28+
HealthTimeout=5s
29+
HealthRetries=20
30+
31+
# ENVIRONMENT VARIABLES
32+
Environment=DB_HOST=10.X.Y.Z
33+
Environment=DB_NAME=elabftw
34+
Environment=DB_USER=elabftw
35+
Environment=DB_PORT=3306
36+
Secret=elabftw-db-password,type=env,target=DB_PASSWORD
37+
Environment=DB_CERT_PATH=/mysql-cert/mysql.pem
38+
Secret=elabftw-secret-key,type=env,target=SECRET_KEY
39+
Environment=SERVER_NAME=eln.example.org
40+
# in this example we run http server behind TLS terminating proxy
41+
Environment=DISABLE_HTTPS=true
42+
Environment=MAX_PHP_MEMORY=512M
43+
Environment=MAX_UPLOAD_SIZE=1G
44+
Environment=PHP_TIMEZONE=Europe/Paris
45+
Environment=TZ=Europe/Paris
46+
Environment=SET_REAL_IP=true
47+
Environment=SET_REAL_IP_FROM=10.X.Y.Z
48+
Environment=PHP_MAX_CHILDREN=50
49+
Environment=PHP_MAX_EXECUTION_TIME=90
50+
Environment=USE_REDIS=true
51+
Environment=REDIS_HOST=10.X.Y.Z
52+
Environment=REDIS_PORT=6379
53+
Environment=REDIS_USERNAME=elabftw_php_sessions
54+
Secret=redis-password,type=env,target=REDIS_PASSWORD
55+
Environment=ENABLE_IPV6=false
56+
Environment=SITE_URL=https://eln.example.org
57+
Environment=ELABFTW_USER=nobody
58+
Environment=ELABFTW_GROUP=nobody
59+
Environment=ELABFTW_USERID=65534
60+
Environment=ELABFTW_GROUPID=65534
61+
Environment=STATUS_PASSWORD=secr3t
62+
# if using S3 storage
63+
Secret=elabftw-s3-ak,type=env,target=ELAB_AWS_ACCESS_KEY
64+
Secret=elabftw-s3-sk,type=env,target=ELAB_AWS_SECRET_KEY
65+
66+
# VOLUMES
67+
# if not using s3, bind mount the uploads folder in the host
68+
# do NOT add :z here because NFS cause an issue #
69+
# host:container
70+
Volume=/mnt/data/elabftw_uploads:/elabftw/uploads
71+
# this is necessary if you encrypt mysql connection and thus want the container to have access to the mysql cert
72+
Volume=/deltablot/mysql:/mysql-cert:z
73+
74+
# NETWORKS
75+
Network=elabftw.network
76+
77+
[Service]
78+
# see: https://gist.github.com/ageis/f5595e59b1cddb1513d1b425a323db04
79+
LockPersonality=yes
80+
PrivateTmp=yes
81+
ProtectHome=yes
82+
ProtectKernelModules=yes
83+
Restart=unless-stopped
84+
RestrictAddressFamilies=AF_UNIX AF_INET AF_NETLINK
85+
RestrictRealtime=yes
86+
87+
# these ones break container execution
88+
#NoNewPrivileges=yes
89+
#PrivateDevices=yes
90+
#DevicePolicy=closed
91+
#ProtectSystem=strict
92+
#ProtectControlGroups=yes
93+
#ProtectKernelTunables=yes
94+
#RestrictNamespaces=yes
95+
#RestrictSUIDSGID=yes
96+
#MemoryDenyWriteExecute=yes
97+
98+
[Install]
99+
WantedBy=multi-user.target
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[Unit]
2+
Description=network for elabftw
3+
4+
[Network]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
[Unit]
2+
Description=HAProxy Service
3+
Wants=network.target
4+
After=network.target
5+
6+
[Container]
7+
Image=docker.io/haproxy:3.0
8+
ContainerName=haproxy
9+
ReadOnly=true
10+
NoNewPrivileges=true
11+
PidsLimit=12
12+
13+
# Port mapping
14+
PublishPort=80:8080
15+
ExposeHostPort=80
16+
PublishPort=443:4443
17+
ExposeHostPort=443
18+
19+
# Volume mounts
20+
Volume=/usr/local/etc/haproxy:/usr/local/etc/haproxy:ro,z
21+
22+
Network=elabftw.network
23+
24+
[Service]
25+
Restart=always
26+
27+
[Install]
28+
WantedBy=multi-user.target

doc/addons.rst

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
.. _addons:
2+
3+
******
4+
Addons
5+
******
6+
7+
What are addons?
8+
=================
9+
10+
Addons are services that can be deployed to provide extended functionality for eLabFTW. They are not a requirement but are definitely recommended.
11+
12+
Chem Plugin
13+
===========
14+
15+
Description
16+
-----------
17+
18+
The ``chem-plugin`` addon is necessary for two things:
19+
20+
- calculating fingerprint of chemical compounds (which subsequently allows for substructure search)
21+
- enabling all features of the chemical editor
22+
23+
How to install
24+
--------------
25+
26+
Deploy a ``chem-plugin`` container somewhere. It can be on the same server than eLabFTW or some other place. Adding a service to your ``docker-compose.yml`` file is the easiest. See the `example docker-compose.yml file <https://github.com/elabftw/elabimg/blob/e1e5a2da33db11ae8d54924c15a227d6abcd4e43/src/docker-compose.yml-EXAMPLE#L414-L419>`_.
27+
28+
The deployment is really straightforward, as there is nothing to configure. You just start the container and that's it.
29+
30+
.. code:: yaml
31+
32+
chem-plugin:
33+
image: elabftw/chem-plugin:latest
34+
container_name: chem-plugin
35+
restart: always
36+
networks:
37+
- elabftw-net
38+
39+
Next, configure eLabFTW to use that service by adding two environment variables:
40+
41+
.. code:: yaml
42+
43+
# This service is necessary for the Chemical structure editor (Ketcher)
44+
- USE_INDIGO=true
45+
- INDIGO_URL=http://chem-plugin/
46+
# The fingerprinter is necessary to create a fingerprint of chemical compounds so we can do sub-structure search
47+
- USE_FINGERPRINTER=true
48+
- FINGERPRINTER_URL=http://chem-plugin:8000/
49+
50+
In the example above, the container is on the same network as ``elabftw`` container, so we use its name as hostname.
51+
52+
Restart the ``elabftw`` container to take these changes into account.
53+
54+
OpenCloning addon
55+
=================
56+
57+
Description
58+
-----------
59+
60+
OpenCloning is an application useful to plan and document cloning. It allows loading DNA data from various sources and is tightly integrated with eLabFTW. This means that you can easily use your Resources in eLabFTW and their attached files to perform cloning operations.
61+
62+
How to install
63+
--------------
64+
65+
To enable OpenCloning in eLabFTW, deploy a container like shown in the `example docker-compose.yml <https://github.com/elabftw/elabimg/blob/e1e5a2da33db11ae8d54924c15a227d6abcd4e43/src/docker-compose.yml-EXAMPLE#L421-L432>`_.
66+
67+
Then enable it in ``elabftw`` container configuration:
68+
69+
.. code:: yaml
70+
71+
# This is for the integration of the DNA Cloning tool
72+
- USE_OPENCLONING=true
73+
- OPENCLONING_URL=http://opencloning-plugin:8000/

doc/admin-guide.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ You can also disable multifactor authentication for a particular User, if needed
4949

5050
From this page, you can also directly add a new User to your Team. The new User will need to activate the "Reset password" functionality to access their account.
5151

52+
Reinitializing 2FA
53+
------------------
54+
55+
In case a user lost their phone, they might need to re-initialize two factors authentication. This action can be done by an Admin or Sysadmin account.
56+
57+
.. image:: img/disable-2fa.png
58+
:align: center
59+
:alt: Disable 2FA
60+
5261
CATEGORIES tab
5362
==============
5463

doc/changelog.rst

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,78 @@
33
Changelog
44
=========
55

6+
Version 5.2.0
7+
-------------
8+
9+
Added
10+
`````
11+
* Chemical compounds database
12+
* Chemical compounds sketcher
13+
* Import from PubChem (CAS or CID)
14+
* Safety icons for compounds
15+
* Inventory management
16+
* OpenCloning embed
17+
* Add possibility to make permissions of an experiment/resource immutable after creating it from template specifying this property
18+
* Allow creating entry via API with all possible fields (instead of having to create first then patch)
19+
* feat/minor: qrcode: add options for qr code generation (#5445)
20+
* feat/medium: editing: enforce exclusive edit mode setting for user (#5427)
21+
* Preview button in text editor, useful for Mathjax, by @ForeverFloating (PR #5358, fix #5295)
22+
* Cache result of Config in memory (still WIP)
23+
* doc: add reporting dashboard link in README (#5443 by Nikki Parks)
24+
* feat/medium: manage extra fields groups in metadata (#5390 by Mouss)
25+
* feat: tinymce: add rust in list of highlighted languages for code snippet. fix #5440
26+
* feat: eln export: skip empty extra fields values
27+
* doc: security.md: add note about attestations
28+
* Uzbek language
29+
30+
31+
Fixed
32+
`````
33+
* bug/minor: team stats: count experiments per team, not user
34+
* bug/minor: policies: fix incorrect title on modal window. fix #5473
35+
* bug/minor: apidoc: fix issues reported in #5446
36+
* bug/minor: add orgid to the list of properties linked with identity
37+
* Full compliance with RGAA 4.1 accessibility rules
38+
* bug: eln export: add missing `@id` to PropertyValue nodes in .eln
39+
40+
41+
Removed
42+
```````
43+
* custom links for Admins (used to be Documentation by default)
44+
* removed flawed "Force permissions" admin section + code
45+
* all chemdoodle code
46+
47+
48+
Changed
49+
```````
50+
* Removed search page
51+
* Re-organized top menu bar
52+
* Updated api specification
53+
* Removed help modal
54+
* Removed Create button side dropdown
55+
* Ask for title in a proper modal window when creating a template
56+
* Improved the "Change password" UI when changing it from Sysconfig panel
57+
* Moved search input into page
58+
* Create dedicated Templates page to list templates -> they are no longer in Settings page
59+
* Remove separate section with pinned entities, instead, display them first
60+
* Use mastodon link in footer instead of X
61+
* ux: autocomplete: mention 3 chars are required to search. fix #5472
62+
* Add edit button for extra fields (PR #5476 by Mouss). fix #5160 #5331 #5375
63+
* Allow displaying archived uploaded files in view mode when no normal files exist (fix #5624)
64+
* Improve error message if timestamp has an error
65+
* Improve error handling during file upload
66+
* a11y: Make malleable content focusable and editable with keyboard
67+
68+
69+
Dev stuff
70+
`````````
71+
* Upgrade to PHP 8.4
72+
* Use Alpine 3.21
73+
* Remove pageTitle property of App, replaced by getPageTitle() in controllers
74+
* Remove Entity.class and Templates.class + all template specific html code
75+
* Upgrade twig and twig-trans
76+
77+
678
Version 5.1.15
779
--------------
880

doc/conf.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@
6060
# built documents.
6161
#
6262
# The short X.Y version.
63-
version = '5.1'
63+
version = '5.2'
6464
# The full version, including alpha/beta/rc tags.
65-
release = '5.1.15'
65+
release = '5.2.0'
6666

6767
# The language for content autogenerated by Sphinx. Refer to documentation
6868
# for a list of supported languages.
@@ -109,7 +109,6 @@
109109
# a list of builtin themes.
110110
#html_theme = 'alabaster'
111111
html_theme = 'sphinx_rtd_theme'
112-
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
113112

114113
# Theme options are theme-specific and customize the look and feel of a theme
115114
# further. For a list of options available for each theme, see the

doc/contributing.rst

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,14 +377,17 @@ Adding a lang
377377

378378
* Add lang on poeditor.com
379379
* Get .po
380+
* Save it in a new folder in `src/langs`
380381
* Open with poeditor and fix issues
381382
* Save the .mo
382383
* Upload .po fixed to poeditor
383-
* Add the files in src/langs
384-
* Edit Tools to add lang to menu
385-
* Get the tinymce translation
386-
* Rename file to 4 letters code
384+
* Add it to `Enums/Language.php`
385+
* Get the tinymce translation from `this repository <https://github.com/mklkj/tinymce-i18n/tree/master/langs6>`_
386+
* Rename file to 4 letters code in `src/js/tinymce-langs`
387387
* Edit first line of file to match code
388+
* Import it in `tinymce.ts`
389+
* Run `bin/console dev:i18n4js`
390+
* Import it in `ts/i18n.ts`
388391

389392

390393
Adding a new term for js i18n
@@ -488,3 +491,20 @@ It is a good idea to use a pre-commit hook to run linters before the commit is a
488491
fi
489492
490493
Now when you commit it should run this script and prevent the commit if there are errors.
494+
495+
Running cypress locally
496+
=======================
497+
498+
In docker: `yarn run cy` (where `yarn` is the local command, not the one in container, because this starts docker images)
499+
500+
Locally: current workaround:
501+
502+
.. code-block:: bash
503+
504+
cd /tmp
505+
git clone -b hypernext https://github.com/elabftw/elabftw
506+
cd elabftw
507+
npm i cypress
508+
./node_modules/.bin/cypress open
509+
510+
Not great, not terrible.

0 commit comments

Comments
 (0)