feat(nag): ActiveSync recurring task instance completion#31
Merged
TDannhauer merged 1 commit intoJun 25, 2026
Merged
Conversation
Task::process() calls Nag::isTaskViewFilter() when building the complete-link return URL, but the method was never implemented. Add a validator for Nag::VIEW_* filter values so smart-search tab names are not mistaken for VIEW_INCOMPLETE.
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.
Summary
getNextDue()null dereferences in the task detail view and portal Summary blockNag::isTaskViewFilter()helper used when building complete-link return URLsMotivation
ActiveSync clients complete individual recurrence instances differently from the web UI. Nag previously created duplicate task rows or failed to persist per-instance completion state. The follow-up fixes address runtime errors introduced while wiring list-return URLs and next-due display for recurring tasks.
Changes
Nag_Task::fromASTask(): route dead-occurrence Adds and master Modifies to dedicated recurrence handlers; trackcompletions[]instead of toggling series completionNag_Api::replace()/import(): resolve the series master for instance messages and merge dead-occurrence Adds into the master UIDNag_Driver::modifyFromHash(): persist recurrence/completion state withouttoggleComplete()side effectsgetNextDue()intemplates/view/task.incandlib/Block/Summary.phpNag::isTaskViewFilter()forNag::VIEW_*tab/filter validation inNag_Task::process()Test plan
vendor/bin/phpunit --bootstrap vendor/autoload.php vendor/horde/nag/test/Nag/Unit/Task/ActiveSyncRecurrenceTest.php(29 tests)