Skip to content

feat(horde): improve ActiveSync admin device table UI - #114

Merged
TDannhauer merged 5 commits into
FRAMEWORK_6_0from
feat/activesync-admin-ui
Jun 20, 2026
Merged

TDannhauer merged 5 commits into
FRAMEWORK_6_0from
feat/activesync-admin-ui

Conversation

@TDannhauer

@TDannhauer TDannhauer commented Jun 20, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Group and sort ActiveSync devices by username in the admin view; user prefs keep sort without grouping
  • Improve device table layout: stacked action buttons, expandable collections list, and theme styling
  • Rename remote-wipe actions to clearer labels (Wipe entire device / Wipe account) and update all locale translations
  • Add Horde_ActiveSync_DeviceTable helper and unit tests

Test plan

  • Open Administration → ActiveSync Devices; verify devices are grouped by username with section headers
  • Verify action buttons stack vertically with equal width
  • Expand collections on a device row; confirm scroll area is usable
  • Confirm wipe button labels in EN and DE (and spot-check another locale)
  • Open user Preferences → ActiveSync; verify sorted device list without group headers
  • Run phpunit test/Unit/ActiveSync/DeviceTableTest.php test/Unit/Prefs/Special/ActivesyncTest.php

Made with Cursor

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_DeviceTable helper + 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 thread themes/dark/screen.css
Comment thread themes/dark/screen.css
Comment thread locale/de/LC_MESSAGES/horde.po
Comment thread locale/horde.pot
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>
@TDannhauer
TDannhauer merged commit eb02bb3 into FRAMEWORK_6_0 Jun 20, 2026
2 of 3 checks passed
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
@TDannhauer
TDannhauer deleted the feat/activesync-admin-ui branch July 10, 2026 11:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants