Repository navigation
dotPulse 3.2.0 — holiday calendars, dark theme, 25 languages
dotPulse 3.2.0 Release Notes
Release date: 2026-11-09
dotPulse 3.2.0 is about the interface and the people using it:
- the dotPulse theme is the default, with a redesigned System Admin, a layout for phones and laptops, vector icons and a dark variant;
- every one of the 25 languages covers the whole interface, and the 23 languages other than English and Spanish can now all be chosen;
- holiday calendars per workplace: each company, department or user can follow its own public holidays.
It needs PHP 8.2 or later (3.1 ran on 8.1). It upgrades 3.1.x in place: the installer applies a small database upgrade, and the holiday module has an upgrade of its own. Read Changes to know about first.
Changes to know about
- PHP 8.2 or later.
vendor/was updated for it (php-qrcode 6, used by two-step login). Check the PHP version of the server before upgrading. - The dotPulse theme becomes the default where the defaults that shipped were kept: the system theme (
host_style) if it wasdefault, and the default user preference if it wasdp-grey-theme. Choices made on purpose, and each user's own theme, are not touched. The login page shows the default user preference, else the system theme. - PostNuke login is removed. PostNuke ended in 2008. An installation that authenticated through it switches to dotPulse's own passwords (
auth_methodsql): users who logged in with a PostNuke password set a dotPulse one with Forgot your password?. - System Admin is redesigned: a start page with the state of the installation, and the settings by section with their help in view. Saving a section changes only the settings it shows, and a password field is never sent back to the browser.
- Translations:
- every language can be chosen in the preferences: 17 had no
lang.phpand were never offered (Catalan, Czech, Danish, Hungarian, Japanese, Korean, Latvian, Dutch, Polish, Portuguese and Brazilian Portuguese, Russian, Slovenian, Turkish, Vietnamese, Simplified and Traditional Chinese); - the strings a language was missing, about 3,000 in each of the 23 languages other than English and Spanish, are machine translated, and so are the entries that were the English text copied over. Each such entry ends in
// MTin the locale file until someone reviews it; see Translations below; - all locale files are UTF-8 now, and every language declares it. 161 files were in Latin-1, Latin-2, Windows-1250/1251/1257 or Big5. Swedish showed its accented letters as garbage, because its files were Latin-1 while it declared UTF-8;
- if you edited translations on the System Admin translation page, save a copy of
locales/andmodules/*/locales/before replacing the code, and merge your entries into the new files.
- every language can be chosen in the preferences: 17 had no
- Holiday module 0.3. Upgrade it in System Admin > Modules. Nothing changes until you create a calendar: the country and the days you had keep applying to everyone.
- Icons. The dotPulse themes show vector icons. The classic themes (default, amp, dp-grey-theme, material, wps-redmond) keep the original bitmaps.
- Small visual changes in the dotPulse theme: input borders and the focus ring are a little darker, and so are the coral and amber icons and the grey status dot. They were under the WCAG contrast minimum. The date picker button is a 16 px icon; it was a 24 x 12 picture.
New
- Holiday calendars per workplace (holiday module):
- a calendar has a name, a country whose national holidays it takes, its own days, and optionally a parent calendar it builds on (a regional calendar on a national one);
- calendars are given to companies, departments or users. Each person follows their own calendar, else their department's (up the department tree), else their company's, else the default one;
- task dates follow the calendar of the task owner. So do reminders, the allocated-hours report, the timecard (days and the hours expected in the week), informer and resource management;
- a calendar imports the days of an iCalendar file (
.ics), as regional and local governments publish them. Importing the same file again adds nothing.
- dotPulse dark, a dark variant of the theme (
dotpulse-darkin the preferences):- the brand's dark palette, with every text colour at 4.5:1 or more on its background and every icon and control edge at 3:1 or more (WCAG AA);
- colours that pages write into their markup (white cells, black text, status colours, project colours) are adapted, so older module pages read well too;
- the project Gantt chart and the add-on modules' tree tables and dialogs are dark too. Date pickers and tooltips stay as light pop-ups.
- Vector icons in both dotPulse themes:
- every module has a page icon in the colour of its area: planning blue, people teal, money and time coral, records and system slate;
- the action and state icons (edit, delete, priority, milestone, calendar events, task start and end) are coloured by what they do;
- they stay sharp on high-density screens.
- Phones and laptops (dotPulse theme): below 640 px wide, layout and form tables stack and lists scroll sideways within themselves. Below 1280 px the theme is more compact.
- A complete English catalogue and a complete Spanish translation. 1,137 strings the code shows were missing from the English catalogue, so the translation page never offered them. Tabs that a module adds to another module's pages now show that module's translations.
Security
tools/refuses HTTP requests, liketests/anddocker/. It had no.htaccess, so in an installation made from a git checkout,tools/locales/check.phpcould be requested. On nginx, addtoolsandscriptsto thedenyrule of the deployment guide.- Developer scripts removed from the web root:
benchmark_*.php,test_*.php,fix_locales.phpandinstall_timeplanning.php. They refused to run outside the command line, but they had no place on a server.
Fixes
- Calendar: the event icons and the task start and end marks covered the first or last letters of the title.
- Annotations: an annotation id that no longer exists sent the browser into a redirect loop.
- Default preferences: the page showed Bulgarian as the language, and saving it made Bulgarian the default.
- Roles: opening a role that does not exist was a fatal error.
- Informer and resource management: undefined variables were logged on every page.
- Translations: the dotproject_plus work package size options showed
Wp size option ..., and two of its messages were in Portuguese in the English catalogue.
Translations
The machine translations make every page usable in every language, but they need native speakers to review them.
php tools/locales/check.php statusgives the coverage of each language and how many entries are still marked// MT.- Review a language on the System Admin translation page: saving a file there writes it without the
// MTmarks. - Some old translations used wrong terms that the new entries do not follow, for example French Enregistré for Save or Swedish Kort for Ticket. A page can mix both until the old entries are reviewed. The list is in the roadmap.
For developers
- The repository root holds only what an installation needs:
- the release notes are in docs/release-notes/;
- the PHPStan configuration is in
tools/phpstan/; - the raw-input and inline-JavaScript checks are in
tools/checks/.
The Makefile targets are unchanged. A release archive (git archive) also leaves outMakefile,.gitattributes,.gitignoreanddocs/history/.
- New checks:
make locales(CI job Translations): every string the code translates has an English and a Spanish entry;make theme-contrast(CI job Theme colour contrast): the colours of both dotPulse themes reach WCAG AA;tools/icons/build.pyrefuses to write an icon under 3:1 on its theme.
- Icons:
tools/icons/build.pydraws them all from one glyph set. A theme opts into them by definingDP_VECTOR_ICONSin itsoverrides.php, and into the dark versions and the colour filter withDP_DARK_THEME. - dotPulse's colours are CSS variables (
style/dotpulse/main.css), and so are those of the dashboard, the project board and System Admin. A theme built on dotPulse redefines them;style/dotpulse-darkshows how. vendor/: Dependabot updates the lock file only. A Composer update needsvendor/committed with it, andmake vendor-checkchecks that they match on PHP 8.2.
Upgrading
- Check PHP: 8.2 or later.
- Back up the database, the
files/directory and, if you edited translations,locales/andmodules/*/locales/. - Replace the code. Keep
includes/config.phpandfiles/, and replacevendor/too. Delete the old tree rather than copying over it, so that removed files do not stay behind:- the developer files in the root:
benchmark_*.php,test_*.php,fix_locales.php,install_timeplanning.php,phpstan-bootstrap.php,phpstan.neon.dist,phpstan-baseline.neonandTESTING_PHASE1_2.md; RELEASE_NOTES_*.mdin the root, now indocs/release-notes/;scripts/check-*.shandscripts/*-baseline.txt, now intools/checks/;- locale files the loaders never read:
modules/dotproject_plus/locales/en_US.inc,es-es.inc,es_ES.incandes_es.inc,en_US.incinmodules/monitoringandcontrol/locales/andmodules/timeplanning/locales/, andmodules/mileagelog/locales/en/.
- the developer files in the root:
- Run the installer (
install/in a browser). It switches the default theme where the shipped default was kept, and it moves a PostNuke login to dotPulse's own passwords. Then removeinstall/again or deny access to it. - Upgrade the holiday module in System Admin > Modules (0.2 to 0.3).
- On nginx, add
toolsandscriptsto thedenyrule (see the deployment guide).
From a version older than 3.1.0, read the 3.1.0 release notes and, from dotProject, the 3.0.0 ones as well.
Requirements
- PHP 8.2 or later (8.3 is tested), MySQL or MariaDB.
- Apache (recommended) or nginx with the rules from the deployment guide.