fix(nag): parse ICU date formats when saving tasks#21
Merged
Conversation
ralflang
approved these changes
May 22, 2026
| $timeFormat = $GLOBALS['prefs']->getValue('twentyFour') ? 'HH:mm' : 'h:mm a'; | ||
| $timePart = $formatter->parse($parts[2], $timeFormat, $locale); | ||
|
|
||
| return new Horde_Date( |
Member
There was a problem hiding this comment.
Maybe use Horde\Date\Date instead?
Member
|
This is still a stop-gap - If we know the formatted date and the format string, horde/date should be able to identify which formatter it is and create a Horde\Date\Date or Horde_Date compatible value from it. |
This was referenced May 22, 2026
ralflang
added a commit
that referenced
this pull request
May 28, 2026
Release version 5.0.0-RC3 Refactor tasklist cache and sync list handling Refactor task retrieval logic in Sql.php fix(security): restrict unserialize allowed_classes (ZDI-20-1051) refactor: Transition to unified screen.css Remove persistPrefs() calls from tasklist methods Refactor ActiveSync task list cache handling Update Nag.php Refactor tasklist creation to include sync options Enhance addTasklist with synchronization and persistence Enhance tasklist management with sync functionality Refactor ActiveSync error handling and notifications Sync tasklist after adding it Refactor synchronization of tasklist addition Refactor sync_lists handling in task management chore: Update workflow dependency Merge pull request #23 from horde/refactor/adopt-format-parse refactor(nag): delegate parseDate() to Format::parse() Update addTasklist method documentation Merge pull request #22 from horde/fix/array_offset_access Merge pull request #21 from horde/fix/date_format Enhance validation checks in NagMethod Refactor getInfo and isValid methods for NagAlarm Add ICU date formatting support in parseDate method Merge pull request #20 from horde/refactor/multi_tasklist_usage_2 refactor: Use controllers rather than globals. Addresses #19 refactor: Replace strftime with IntlDateFormatter refactor(injector): Widen type hints from Horde_Injector to Horde_Injector|Injector style: constrain tag list icon size to 16px
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Parse ICU date formats when saving NAG tasks
Summary
Fixes saving tasks when date_format_mini uses ICU patterns (including the default short), which display correctly but were not parsed on submit.
The due-date form shows values via Format::formatDate() (e.g. 23.05.26 08:34 in de_DE), while Nag::parseDate() still called strptime() with the same preference. strptime() only accepts strftime specifiers, so parsing failed and fell back to new Horde_Date($date), which PHP DateTime also rejects for locale-specific strings.
For non-strftime formats, parseDate() now uses IcuFormatter with the user locale. Date and time are parsed separately when both are present, because ICU shortcuts like short cannot be combined with a custom time pattern in one IntlDateFormatter.
Legacy strftime date_format_mini values continue to use the existing strptime() path unchanged.
Test plan
Set Horde language to German and date_format_mini to abbreviated / short; create or edit a task with due date 23.05.26 and time 08:34; save — no Zeitformat … nicht erkannt error and due date persists correctly.
Repeat with 12-hour time (twentyFour off) and a due time like 8:34 AM.
Save a task with due date only (no time) and with “No due date” selected.
If an account still has a legacy strftime date_format_mini (e.g. %d.%m.%Y), confirm saving still works.
Edit recurrence end date (NagRecurrence, withtime = false) with a locale-formatted date string.