feat(horde): improve ActiveSync admin device table UI - #114
Merged
Merged
Conversation
Group and sort devices by username in the admin view, improve button layout and collections display, and add clearer remote-wipe labels (Wipe entire device / Wipe account). Update translations for all supported locales.
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates Horde’s ActiveSync device tables (admin + user prefs) to improve usability by introducing username grouping (admin-only), better action button layout, expandable collections display, clearer wipe wording, and a shared helper for sorting/grouping with unit tests.
Changes:
- Add
Horde_ActiveSync_DeviceTablehelper + unit tests to sort rows and build grouped “entries” for templates. - Update ActiveSync device table template to support grouped headers, stacked action buttons, and expandable collections list.
- Add CSS for the new table UI across themes, and add/adjust several locale strings for the new wipe labels + note text.
Reviewed changes
Copilot reviewed 54 out of 96 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| themes/default/settings.css | Adds ActiveSync device table styling for default theme (settings stylesheet). |
| themes/default/screen.css | Adds ActiveSync device table styling for default theme (screen stylesheet). |
| themes/default_red/screen.css | Adds ActiveSync device table styling for default_red theme. |
| themes/dark/screen.css | Adds ActiveSync device table styling for dark theme. |
| templates/activesync/device_table.html.php | Implements grouped “entries” rendering, new status/action labels, stacked buttons, and expandable collections. |
| templates/prefs/activesync.html.php | Replaces all-caps wipe warning with clearer, more specific note about wipe types. |
| lib/ActiveSync/DeviceTable.php | New helper to sort device rows and generate grouped/ungrouped template entries. |
| admin/activesync.php | Uses the new helper to sort/group admin device rows and updates wipe notifications. |
| lib/Prefs/Special/Activesync.php | Uses the new helper to sort (no grouping) on prefs page; updates account-wipe notifications. |
| test/Unit/ActiveSync/DeviceTableTest.php | New unit tests for sorting/grouping helper. |
| test/Unit/Prefs/Special/ActivesyncTest.php | Updates assertions/messages to match new wording. |
| locale/horde.pot | Adds new msgids for wipe labels + updated prefs note. |
| locale/ar/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/bg/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/bs/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/ca/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/cs/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/da/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/de/LC_MESSAGES/horde.po | Adds/updates translations for new strings used by the device table and notifications. |
| locale/el/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/es/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/et/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/eu/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/fa/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/fi/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/fr/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/gl/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/he/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/hr/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/hu/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/id/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/is/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/it/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/ja/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/km/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/ko/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/lt/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/lv/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/mk/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/nb/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/nl/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/nn/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/pl/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/pt/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/pt_BR/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/ro/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/ru/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/sk/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/sl/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/sv/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/tr/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/uk/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/zh_CN/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
| locale/zh_TW/LC_MESSAGES/horde.po | Adds translations for new wipe labels + updated prefs note. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+4015
to
+4025
| #: templates/activesync/device_table.html.php:103 | ||
| msgid "Wipe entire device" | ||
| msgstr "" | ||
|
|
||
| #: templates/activesync/device_table.html.php:105 | ||
| msgid "Wipe account" | ||
| msgstr "" | ||
|
|
||
| #: templates/prefs/activesync.html.php:37 | ||
| msgid "NOTE: \"Wipe entire device\" may reset the device to factory defaults. \"Wipe account\" deletes only the Exchange account on the device — not on the server." | ||
| msgstr "" |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot stopped work on behalf of
TDannhauer due to an error
June 20, 2026 13:10
ralflang
added a commit
that referenced
this pull request
Jun 30, 2026
Release version 6.0.0 test: add @coversNothing to coverage-neutral tests style: import classes instead of fully-qualified backslash references chore: update CI style(config): align Form test namespace and add strict_types fix(config): hide ActiveSync tab when horde/activesync is not installed fix(topbar): use h() helper for URL escaping in menubar template fix(topbar): HTML-escape URLs in legacy menubar template fix(services): cast Variables magic-property to string before substr() in download endpoint fix: regenerate session before redirect_on_logout refactor: rework PR120 to use format constants fix(prefs): restore locale-aware time format defaults via ICU styles #22 fix(registry): stop pre-declaring optional content/timeobjects apps feat(base): add SessionApiClient.js standalone session-API JS client feat(base): mount /api/v1/session/ping and /api/v1/session/csrf-token routes fix(icons): constrain category prefs action icons to 16px fix(icons): modernize delete-small autocompleter remove icon fix(icons): modernize delete-small autocompleter remove icon feat(horde): add ActiveSync sync maxresponsetime config feat(horde): add ActiveSync sync maxresponsetime config Merge pull request #115 from horde/fix/account-only-wipe-admin Merge remote-tracking branch 'origin/fix/account-only-wipe-admin' into fix/account-only-wipe-admin Require user for delete action in ActiveSync admin to prevent null-user state removal fix: add missing locale/horde.pot entry for "Unable to determine which account to wipe." test: add unit test for cancel-wipe clearing both RW statuses Potential fix for pull request finding fix(horde): account-only wipe admin and prefs reliability Merge pull request #114 from horde/feat/activesync-admin-ui Potential fix for pull request finding Restore missing msgid "unified" in de.po Update horde.pot for ActiveSync device table strings Potential fix for pull request finding feat(horde): improve ActiveSync admin device table UI Merge pull request #113 from horde/fix/portal-layout-save Potential fix for pull request finding fix(horde): persist classic portal layout saves reliably Merge pull request #112 from horde/feat/Initial_EAS16.1-support Modify EAS version 16.1 description in conf.xml Address Copilot review: NaN-safe parsing, localStorage try/catch, restore inline styles, keyboard + ARIA + touch support Expose sidebar width as CSS custom property and enable global resize feat(horde): add account-only remote wipe UI/actions with 16.1 gating
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
Horde_ActiveSync_DeviceTablehelper and unit testsTest plan
phpunit test/Unit/ActiveSync/DeviceTableTest.php test/Unit/Prefs/Special/ActivesyncTest.phpMade with Cursor