Allow comma-separated Event IDs when querying tags, e.g.:
/api/tags/index/Events.Id:123,456,789.json
This converts the comma-separated string to an integer array,
enabling a SQL IN clause for efficient multi-event tag retrieval.
Fixes#4567
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Center-align QR code as focal point
- Add subtle box shadow and border radius to QR container
- Use compact inline form for optional password field
- Auto-generate QR code on page load, regenerate on password input
- Remove collapsed section, always show QR code
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add QR code generation feature to the user edit page that allows
administrators to quickly set up users in the zmNg mobile app.
- Add qrcode.min.js library for client-side QR code generation
- Add collapsible QR code section to user.php view
- Generate QR codes with zmNg-compatible JSON format containing
profile name, portal URL, username, and password
- Profile name uses ZM_WEB_TITLE or ZM_HOME_URL if customized,
otherwise defaults to 'ZoneMinder'
- Only visible when API is enabled and user has API access
- Add translation strings for new UI elements
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When hovering over thumbnails, the enlarged view now intelligently positions itself
below the table header instead of at the thumbnail's original location. This:
- Makes better use of available vertical space
- Provides a more consistent viewing experience across all rows
- Ensures enlarged thumbnails start from the same vertical position (below header)
- Still respects viewport boundaries and adjusts if needed
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
Change from position:sticky to position:fixed for console view thumbnails.
This prevents parent containers with overflow:hidden from clipping the enlarged thumbnails.
Store original position and dimensions, then apply them with fixed positioning
so the thumbnail stays in the same visual location but breaks free of container boundaries.
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Use viewport-relative percentage-based sizing (60% of viewport width)
- Calculate scale dynamically based on available space to the right
- Limit height to 90% of viewport height to prevent overflow
- Keep thumbnail under cursor by anchoring to top-left corner
- Adjust transform origin if thumbnail would go off bottom of screen
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
It's not entirely clear why it was necessary to change the "this.controlMute" function in the commit.f796fa913f
After this change, the "volumeSlider" and "iconMute" styling sometimes doesn't work correctly.
The old code was 99.9% debugged and worked without any issues.
It's also unclear why "this.muted" was added? After all, we already had "audioStream.muted." Now we're probably getting duplicates.
- Added "Any Tag" entry with value -1 to availableTags in Filter.php (widget and simple_widget methods)
- Added "Any Tag" entry to filter.php view
- Added translation for "Any Tag" in en_gb.php language file
- Implemented SQL logic in FilterTerm.php to handle "Any Tag" (value -1) using EXISTS query
- Implemented SQL logic in Filter.pm (Perl) to handle "Any Tag" (value -1) using EXISTS query
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>