# Redmine UX Toolkit

Redmine UX Toolkit is a UX and productivity plugin for Redmine.

Version 4.4.9 targets Redmine 6.0 and newer and implements user-specific and global default landing pages after normal login, a configurable global login notice, configurable new issue notices, user-specific favorite projects, user-specific favorite issue filters, user-specific recently visited issues, user-specific recently visited projects, a personal configurable My Work dashboard with admin-defined default blocks, a team workload overview, a project health overview, optional issue quick actions, lightweight issue checklists, global checklist templates, global ticket templates with tracker default assignments and manual insertion into new issue descriptions, global comment text snippets with manual insertion into issue comments, issue quality checks for new tickets, SLA-Light response time hints, manual checklist template insertion into issues, tracker-based default checklist templates for new issues, optional blocking of issue closure while checklist items are open, optional blocking of parent issue closure while direct subtasks are open, optional automatic issue-author watcher assignment, optional automatic issue-commenter watcher assignment, overdue issue badges, due-today issue badges, stale issue badges, unassigned issue badges, issue hint boxes, image and PDF attachment previews, safe external link handling, admin-controlled global Custom CSS/JS, an admin log file viewer, configurable navigation link visibility, a central cron/rake entrypoint with optional email monitoring, recurring ticket rules, scheduled Redmine issue reminder emails, optional Helpdesk mail retrieval, a repository refresh scheduler, an admin Attachment storage manager with recoverable trash, and an optional Modern UI visual layer.

## Version 4.4.9

- Enables Cron monitoring by default and alerts after four hours without a central scheduler execution.
- Administrators can still select **No monitoring** in the Scheduler tab.

## Version 4.4.8

- Shows Cron monitoring configuration and operational health on the UX Toolkit settings Overview.
- Links both overview entries directly to the Scheduler tab.

## Version 4.2.10

- Restores issue-list rendering when another plugin uses legacy alias wrapping around Redmine query columns.
- Keeps UX Toolkit issue badges and compatible third-party column enhancements active together.

## Version 4.2.9

- Keeps project settings tabs compatible with legacy plugins that alias-wrap Redmine helper methods.

## Version 4.2.8

- Adds contextual group headings and concise explanations to consolidated settings tabs.
- Keeps related controls together while using stronger boundaries between unrelated feature areas.

## Version 4.2.7

- Removes the unused Modern UI JavaScript enhancements placeholder; implemented Modern UI behavior remains CSS-based.

## Version 4.2.6

- Consolidates landing, navigation, My Work and Modern UI settings into Appearance.
- Shortens the reusable-content tab to Templates & snippets and scheduled operations to Scheduler.
- Adds a Redmine sprite icon to the Scheduler tab.

## Version 4.2.5

- Presents issue quick actions as a dedicated, responsive action row that no longer overlaps issue hints.

## Version 4.2.4

- Restores issue quick actions and the issue hint box by registering all issue-details partials through one Redmine hook declaration.

## Version 4.2.3

- Shows unsaved settings feedback beside Redmine's normal Apply button instead of displaying a separate floating Save control.

## Version 4.2.2

- Fixes missing status translations in the settings Overview by normalizing boolean feature states.

## Version 4.2.1

- Corrects alignment in the settings overview and personal My Work ordering form.
- Keeps up to three configured workflow-valid status actions visible on issue pages; larger sets use a labeled compact selector.
- Makes ticket template previews explicit on new-issue forms and refreshes them after Redmine AJAX form changes.
- Shows checklist template previews inside the expanded checklist controls before insertion.

## Version 4.2.0

- Adds a searchable settings overview with feature state and operational health summaries.
- Shows unsaved settings feedback, dependent-control states and warnings for enabled but incomplete configuration.
- Lets each user order and collapse My Work blocks, shows total counts and provides View all links using normal Redmine lists.
- Keeps issue pages focused with one primary quick action and a compact menu for secondary actions.
- Improves checklist progress, editing, deletion safety and keyboard focus.
- Previews ticket and checklist template content before insertion.
- Stores personal dashboard ordering independently from visibility. Collapsed state remains local to the current browser.

## Version 4.1.7

Ticket reminder schedules now use an explicit timezone. Administrators select the timezone alongside the send time, and the status summary shows both values together. The selected timezone is used consistently for send-time, weekday and once-per-day checks. Existing installations without a saved selection fall back to Redmine's default user timezone, then the Rails timezone.

## Version 4.1.6

The ticket reminder status summary now labels its configured state explicitly as Scheduled reminders, with an Enabled or Disabled value.

## Version 4.1.5

- Combines attachment storage management and attachment preview options in one Attachments settings tab.
- Keeps both feature groups visually separated and preserves legacy tab aliases.

## Version 4.1.4

- Combines ticket templates with text snippets in one focused content-reuse settings tab.
- Combines landing pages, navigation links and My Work settings in one navigation-focused tab.
- Keeps legacy tab names as aliases for saved browser tab selections.

## Version 4.1.3

- Keeps the My Account contextual actions focused on favorite projects and favorite issue filters.
- Removes My Work, recently visited issue/project and recurring ticket links from that page without disabling those features elsewhere.

## Version 4.1.2

- Keeps lightbox toolbar controls readable when Modern UI or another theme applies generic link and button styles.
- Gives the lightbox download action a clear high-contrast primary appearance.

## Version 4.1.1

- Replaces unavailable or broken generated PDF thumbnail images with a compact PDF tile and filename.
- Keeps the original attachment link and lightbox behavior unchanged.

## Version 4.1.0

- Adds an enabled-by-default lightbox preview for JPG, JPEG, GIF, PNG, BMP and PDF attachments.
- Keeps explicit Redmine download links unchanged and uses Redmine's existing attachment permissions.
- Lets administrators independently disable the complete feature, image previews, PDF previews, gallery navigation, or the preview download action.
- Uses dependency-free JavaScript and CSS loaded only while attachment previews are enabled.

## Version 4.0.2

- Renames the custom code settings tab to **Custom CSS/JS**.
- Adds an admin-only JavaScript textarea below the existing Custom CSS field.
- Stores JavaScript beside the reused `plugin_redmine_custom_css` setting data, so no new database table is required.
- Renders saved JavaScript on Redmine pages for trusted admin-managed snippets such as tracking codes.

## Version 4.0.1

- Adds an admin-only Custom CSS settings tab.
- Reuses the same stored global CSS setting as `redmine_custom_css`: `plugin_redmine_custom_css['css']`.
- Does not add user-editable CSS pages; only administrators can edit global CSS through the UX Toolkit settings.
- Sanitizes CSS before rendering it on Redmine pages.

## Version 4.0.0

- Raises the supported Redmine baseline to Redmine 6.0 and newer.
- Removes the obsolete Modern UI Redmine 5 adapter stylesheet.
- Keeps Modern UI asset loading on the Redmine 6+ adapter path.

## Version 3.6.34 Fixes

- Fixes duplicate collapse indicators on the Attachment storage filter panel.

## Version 3.6.33 Fixes

- Makes the Attachment storage filter panel collapsible and keeps it expanded when filters are active.

## Version 3.6.32 Fixes

- Fixes the My Work dashboard desktop layout by using a controlled two-column grid and keeping a single-column layout for smaller screens.

## Version 3.6.31 Fixes

- Changes fresh-install ticket reminder defaults to weekdays, 7 days before due date, at 07:30.
- Enables the repository refresh scheduler by default on fresh installs and sets the default interval to daily.

## Version 3.6.30 Fixes

- Improves the My Work dashboard card layout.
- Makes mobile issue rows easier to read by showing localized field labels for project, status and date values.

## Version 3.6.29 Fixes

- Fixes Redmine 6 mobile flyout menu selectors so menu links, avatar links and icons stay readable with Modern UI enabled.

## Version 3.6.28 Fixes

- Fixes Modern UI mobile flyout menu readability on Redmine 6.1 and newer.
- Reduces the mobile header footprint so the page content has more usable space.

## Version 3.6.27 Fixes

- Improves Modern UI behavior on mobile devices for Redmine 6.1 and newer.
- Fixes mobile spacing below the Redmine header and improves forms, wiki toolbar, issue filters, issue detail and admin cards.

## Version 3.6.26 Fixes

- Combines related settings tabs to reduce tab count: Landing pages with Links, and scheduled jobs with ticket reminders and repository refresh.

## Version 3.6.25 Fixes

- Fixes Modern UI project overview card selectors affecting project navigation links such as Issues and News.

## Version 3.6.24 Fixes

- Fixes Modern UI project navigation overflow tabs visually appearing active when they are not selected.

## Version 3.6.23 Fixes

- Fixes Modern UI project navigation overflow tabs becoming unreadable when Redmine marks hidden tabs with inline white backgrounds.

## Version 3.6.22 Fixes

- Fixes calendar issue hover tooltips being clipped by inherited Modern UI issue card overflow styling.

## Version 3.6.21 Fixes

- Fixes Modern UI leaking issue detail card styling into calendar issue hover tooltips.

## Version 3.6.20 Fixes

- Fixes the Redmine UX Toolkit administration overview tile icon alignment in Redmine 6 and newer.

## Version 3.6.19 Fixes

- Applies the fixed centered Modern UI administration overview card layout to Redmine 6 and newer.

## Version 3.6.18 Fixes

- Uses Redmine image icons instead of FontAwesome glyphs for selected third-party administration tiles in Redmine 5.1 Modern UI.

## Version 3.6.17 Fixes

- Adds Redmine 5.1 Modern UI fallback icons for selected third-party administration tiles.
- Adds Redmine UX Toolkit as a settings tile in the administration overview.

## Version 3.6.16 Fixes

- Enlarges Redmine 5.1 administration overview card icons and removes the icon background/border chip.

## Version 3.6.15 Fixes

- Restores original Redmine icon images in Redmine 5.1 administration overview cards when an active theme disables icon background images.

## Version 3.6.14 Fixes

- Shows the original Redmine icon images above centered text in Redmine 5.1 administration overview cards.

## Version 3.6.13 Fixes

- Refines the Redmine 5.1 administration overview cards with centered top icons and fixed card dimensions.

## Version 3.6.12 Fixes

- Improves the Redmine 5.1 administration overview fallback with a denser responsive grid and stable visual markers.

## Version 3.6.11 Fixes

- Restores a usable Redmine 5.1 administration overview by using compact text tiles that do not depend on theme icon fonts.

## Version 3.6.10 Fixes

- Fixes Redmine 5.1 administration overview setting item icons disappearing on hover by avoiding `background` shorthand on admin overview links.

## Version 3.6.9 Fixes

- Defines Redmine 5.1 administration sidebar pseudo-icons explicitly in the Modern UI adapter so theme hover rules cannot hide them.

## Version 3.6.8 Fixes

- Uses a Redmine 5.1 theme-compatible pseudo-icon layout for administration sidebar links so hover states do not hide icons.

## Version 3.6.7 Fixes

- Narrows Modern UI form icon hover styling so Redmine 5.1 administration sidebar icons are not affected by generic form rules.
- Keeps Redmine 5.1 administration sidebar pseudo-icons visible during hover.

## Version 3.6.6 Fixes

- Keeps Redmine 5.1 administration sidebar pseudo-icons visible on hover when a theme renders icons with `:before`.
- Prevents theme row hover backgrounds from stretching across the sidebar under Modern UI.

## Version 3.6.5 Fixes

- Refines Redmine 5.1 administration sidebar Modern UI styling so hover and selected states do not stretch across the sidebar and icons remain visible.

## Version 3.6.4 Fixes

- Fixes Redmine 5.1 issue-list sidebar rendering when saved queries do not provide a description field.

## Version 3.6.3 Fixes

- Fixes Redmine 5.1 administration sidebar icon overlap when Modern UI admin styling is enabled.

## Version 3.6.2 Fixes

- Fixes Redmine 5.1 Modern UI loading by resolving the Modern UI service through a compatibility helper before rendering head assets or body classes.

## Version 3.6.1 Fixes

- Fixes the Modern UI issue-list action column so Redmine table cells named `buttons` are not treated as form button containers.

## Version 3.6.0 Stabilization

- Stabilizes the optional Modern UI layer without adding new Redmine business features.
- Cleans up shared Modern UI settings metadata and CSS variables for buttons, tables, badges, forms and admin polish.
- Keeps Modern UI disabled by default; no Modern UI assets or body classes are loaded unless the main switch is enabled.
- Keeps each visual area controlled by its own setting and scopes admin/sidebar polish to the `Admin pages` submodule.
- Uses shared common CSS plus small Redmine 5 and Redmine 6 adapter stylesheets. Redmine 6 and newer use the Redmine 6 adapter.
- Modern UI behavior is CSS-based; the former unused JavaScript enhancements placeholder has been removed.
- Another Redmine theme may affect final appearance. If a visual conflict appears, disable Modern UI or the affected submodule first.

## Version 3.5.7 Fixes

- Tightens Redmine UX Toolkit administration sidebar link spacing under Modern UI.

## Version 3.5.6 Fixes

- Aligns selected and inactive administration sidebar links consistently under Modern UI.

## Version 3.5.5 Fixes

- Aligns Redmine UX Toolkit administration sidebar icon links under Modern UI.

## Version 3.5.4 Fixes

- Keeps both Modern UI tab overflow scroll buttons visible on crowded settings pages.

## Version 3.5.3 Fixes

- Prevents hidden tab text and Redmine's internal arrow icons from bleeding into the Modern UI tab overflow control.

## Version 3.5.2 Fixes

- Refines Modern UI tab overflow navigation into a compact segmented control instead of prominent floating round buttons.

## Version 3.5.1 Fixes

- Makes Redmine tab overflow navigation buttons visible when many plugin settings tabs are shown.
- Restores Modern UI spacing for Redmine icon links and buttons so icons do not overlap their text labels.

## Version 3.5.0 Features

- Improves optional Modern UI styling for the Redmine login page, including the existing login form, messages and related links.
- Adds light optional Modern UI polish for admin and plugin settings pages.
- Adds responsive Modern UI improvements for smaller screens without changing Redmine navigation, forms, tables or permissions.
- Adds no authentication, administration, permission or business logic changes.

## Version 3.4.0 Features

- Improves optional Modern UI styling for existing project overview, roadmap, activity, wiki and repository pages.
- Keeps each project-related visual area controlled by its own Modern UI setting.
- Adds no new project, roadmap, activity, wiki or repository functionality; existing Redmine permissions, links, filters, modules and behavior remain unchanged.

## Version 3.3.2 Fixes

- Lets the issue notes textarea use the available update form width when Modern UI form styling is enabled.

## Version 3.3.1 Fixes

- Restores native dropdown arrows and Redmine wiki toolbar icons when Modern UI form styling is enabled.

## Version 3.3.0 Features

- Improves optional Modern UI styling for existing Redmine forms, issue create/edit pages, comment/update areas, settings forms, fieldsets, upload areas, buttons and action links.
- Keeps form styling controlled by the `Forms` Modern UI setting.
- Adds no form functionality; required fields, validation, workflows, permissions, uploads, submit actions and links remain unchanged.

## Version 3.2.4 Fixes

- Fixes unreadable project main menu plus-dropdown entries when Modern UI navigation styling is enabled.

## Version 3.2.3 Fixes

- Applies Modern UI styling to Redmine UX Toolkit issue heading badges.
- Fixes unreadable white text in Redmine action dropdown menus when Modern UI is enabled.

## Version 3.2.2 Fixes

- Fixes distorted Modern UI issue metadata rows by preserving Redmine's native split metadata layout and limiting badge styling to real status, priority and tracker attributes.

## Version 3.2.1 Fixes

- Fixes clipped Modern UI badges in the issue detail header by allowing status, priority and tracker badges to wrap inside Redmine metadata columns.

## Version 3.2.0 Features

- Improves optional Modern UI styling for Redmine issue detail pages with a clearer issue header, grouped metadata, readable description card, cleaner history entries, and refined attachments, subtasks and relations.
- Keeps issue detail styling controlled by the `Issue detail` Modern UI setting.
- Adds no new issue functionality; comments, journals, attachments, subtasks, relations, permissions, workflows and links remain unchanged.

## Version 3.1.0 Features

- Improves optional Modern UI styling for Redmine issue lists with clearer row separation, readable subjects, softer hover states, closed issue treatment and existing metadata badges.
- Improves optional Modern UI styling for issue filter forms and query option areas while preserving Redmine's existing query, sorting, grouping, permissions, links and context menus.
- Keeps issue list styling controlled by the `Issue list` Modern UI setting and filter styling controlled by the `Filters` setting.
- Adds no new issue functionality, no migrations and no Redmine core changes.

## Version 3.0.4 Fixes

- Darkens the Modern UI top navigation bar for Redmine global links such as Projects and Administration.
- Restores the project main menu closer to the previous lighter pill navigation.
- Fixes clipped text in Modern UI dropdown/select fields.

## Version 3.0.3 Fixes

- Darkens the Modern UI main navigation further for better readability.

## Version 3.0.2 Fixes

- Darkens the Modern UI main navigation background for better contrast.
- Keeps selected issue list row text readable, including links, status, tracker and priority cells.

## Version 3.0.1 Fixes

- Makes the Modern UI appearance more visible with stronger header, navigation, page, table, form and issue-detail styling.
- Applies the default Modern UI visual areas at runtime when an upgraded installation has not saved every new Modern UI setting yet.

## Version 3.0.0 Features

- Adds an optional Modern UI module for existing Redmine pages.
- The module is disabled by default and does not change any installation until an administrator enables it.
- Modern UI changes appearance only. It adds no new Redmine business features.
- Admins can activate visual areas individually: base layout, header, navigation, issue list, issue detail, forms, filters, project overview, roadmap, activity, wiki, repository, login page and admin pages.
- Supports comfortable and compact density settings plus Redmine modern, blue, neutral and dark-header color presets.
- Uses shared common CSS plus small Redmine 5 and Redmine 6 adapter CSS files.
- Loads Modern UI assets only when the main Modern UI switch is enabled.

## Version 2.12.3 Fixes

- Replaces visible ASC/DESC text in Attachment storage sorting with compact direction icons.

## Version 2.12.2 Fixes

- Keeps Attachment storage sorting after page reloads in the same browser session.
- Shows a clear ASC/DESC indicator on the active sorted column.

## Version 2.12.1 Fixes

- Uses Redmine 5.1-safe sidebar icons for Attachment storage and Log Files.
- Keeps the Move selected to trash action visible and explains when attachment trash must first be enabled.
- Clarifies that permanent delete actions apply only to files already in the plugin trash.

## Version 2.12 Features

- Adds an administrator-only Attachment storage manager for inspecting Redmine attachments.
- Provides filters, sortable columns, pagination and total filtered storage size.
- Moves selected physical attachment files to `Rails.root/files/redmine_ux_toolkit_trash` while keeping the Redmine attachment database record.
- Stores restore metadata in a plugin-owned trash table, including original path, trash path, filename, file size, content type, container reference, user and timestamps.
- Restores trashed files back to the original Redmine file path when that destination is still free.
- Permanently deletes selected trash files only after confirmation.
- Adds disabled-by-default settings for attachment trash, retention days and maximum expired trash files deleted per cleanup run.
- Adds a central cron cleanup job that deletes only expired trash files in small batches when the feature is enabled.

While a file is in trash, downloads and inline images that depend on that physical file may stop working. Restoring the file makes the original attachment work again.

## Version 2.11.11 Fixes

- Adds a per-repository "Use default" interval option for repository refresh rows.
- Keeps "Manual only" separate from inherited default intervals.

## Version 2.11.10 Fixes

- Grays out repository refresh rows for inactive projects.
- Skips scheduled and manual refreshes for inactive project repositories while preserving the saved admin enablement, so scanning resumes when the project becomes active again.

## Version 2.11.9 Fixes

- Removes the artificial upper Redmine version cap while keeping Redmine 5.1 as the minimum required version.
- Adds a short help text for repository refresh failure backoff.

## Version 2.11.8 Fixes

- Shows repository type and local/remote location in the Repository refresh settings table.

## Version 2.11.7 Fixes

- Normalizes administration sidebar links to plain Redmine icon classes to avoid mixed inline and CSS icons on Redmine 5.1.

## Version 2.11.6 Fixes

- Uses Redmine 5.1-compatible icon classes for Recurring tickets and Team workload sidebar links.
- Removes the redundant repository refresh disabled-by-default warning text from the settings tab.
- Adds repository refresh bulk controls to enable, disable and set intervals for all listed repositories before applying settings.

## Version 2.11.5 Fixes

- Adds a Redmine 5.1-safe fallback for `list_autofill_data_attributes` in plugin settings notice textareas.

## Version 2.11.4 Fixes

- Adds a Redmine 5.1-safe icon helper fallback and uses it in plugin hook views and helper patches.

## Version 2.11.3 Fixes

- Uses an explicit short MySQL-safe index name for checklist template items during migration.

## Version 2.11.2 Fixes

- Makes the checklist template migration tolerate already existing checklist template tables and indexes, which avoids install or update failures after a partially applied migration.

## Version 2.11 Features

- Adds a lightweight Repository refresh scheduler that uses the existing Redmine UX Toolkit cron runner.
- Keeps the scheduler globally disabled by default and performs no repository scans while disabled.
- Lets administrators explicitly enable individual repositories, choose simple refresh intervals and limit the batch size per cron run.
- Stores per-repository refresh status, next run, last run, lock, last message and consecutive failure count in plugin-owned metadata.
- Uses Redmine's native `repository.fetch_changesets` mechanism; it does not build shell commands or implement custom SCM protocols.
- Adds a compact status table and a manual Refresh now action that uses the same per-repository lock.

The central cron entrypoint may run every 10 minutes, but repository refreshes are only performed when the scheduler is enabled, a repository is explicitly enabled, and that repository is due. The feature intentionally avoids full repository scans, webhooks, mirroring, cloning, external queues and complex scheduling rules.

## Version 2.10 Features

- Adds a Redmine-native Project health overview for managers and administrators.
- Shows projects with counts for open, overdue, due today, unassigned, stale, open checklist item and open subtask work.
- Reuses the existing stale issue threshold setting for stale issue counts.
- Adds filters for active projects only and whether archived projects are included.
- Links non-zero issue counts to Redmine issue lists where practical.
- Adds the project permission View project health and a project menu entry when the module and permission are enabled.

The overview intentionally stays compact. It does not provide project scoring, risk automation, detailed reporting, forecasts, charts, notifications or SLA reports.

## Version 2.9 Features

- Adds a Redmine-native Team workload overview for managers and administrators.
- Shows assigned work grouped by user with counts for open, overdue, due today, stale and high-priority issues.
- Reuses the existing stale issue threshold setting for the stale workload count.
- Adds filters for project, active/all users and whether closed issues are included.
- Links non-zero counts to Redmine issue lists where practical.
- Adds the project permission View team workload and a project menu entry when the module and permission are enabled.

The overview intentionally stays simple. It does not provide capacity planning, forecasts, calendars, workload scores, automatic assignment suggestions or SLA reporting.

## Version 2.8 Features

- Adds SLA-Light, a lightweight issue-page hint system for response and resolution timing.
- Adds global settings to enable SLA-Light, configure first response and resolution hours, and choose statuses that pause SLA-Light.
- Shows compact issue hints for first response due, first response overdue, resolution due, resolution overdue, and SLA paused.
- Detects first response from the first issue comment by a user other than the issue author where possible.
- Version 2.8.1 shows SLA-Light hints in the issue sidebar for better visibility.
- Version 2.8.2 labels the issue sidebar block "Response time" / "Antwortzeit".
- Version 2.8.3 adds a compact "Response time" / "Antwortzeit" badge to issue overview tables when SLA-Light tracking is active.

SLA-Light uses simple timestamp-based calculations on the displayed issue and its journals. It does not implement customer contracts, project/tracker/priority-specific rules, business hours, holiday calendars, reports, escalation emails, or automatic status changes.

## Version 2.7 Features

- Adds configurable soft issue quality warnings for new tickets.
- Lets administrators enable or disable the feature globally.
- Lets administrators configure warnings for short subjects, empty or short descriptions, missing assignee, and missing priority.
- Adds configurable minimum subject and description lengths, defaulting to 8 and 30 characters.
- Shows clear inline warnings on the new issue form without blocking issue creation.

Issue quality checks help users notice incomplete ticket details before submitting. The feature is intentionally lightweight: it does not add hard validation, scoring, AI checks, tracker-specific rules, or project-specific rules.

## Version 2.6 Features

- Adds global text snippet management for reusable issue comment text.
- Adds a Text snippets settings tab with a compact list and links to create or manage snippets.
- Lets administrators create, edit, enable, disable and delete text snippets.
- Adds a compact snippet selector near the issue comment field.
- Inserts the selected snippet into an empty comment or appends it cleanly to existing comment text.

Text snippets are intended for recurring support replies and internal comments, for example asking for a screenshot, confirming completion, requesting missing information, or reporting a successful update. In this version snippets are global; project-specific, user-specific and workflow-specific snippets are not implemented.

## Version 2.5.4 Fixes

- Shows a specific message when the selected ticket template has no description text to insert.

## Version 2.5.3 Fixes

- Project-specific new issue notices are ignored when the Redmine UX Toolkit project module is disabled for that project.

## Version 2.5.2 Fixes

- Renders global and project new issue notices through the new issue page hook above the form.
- Keeps tracker-specific new issue notices in the form hook so changing the tracker can still refresh tracker instructions.

## Version 2.5.1 Fixes

- Restores global, project-specific and tracker-specific new issue notices on Redmine installations that expose the current issue as `@issue` instead of a hook local.
- Keeps ticket template insertion on the new issue form working in the same hook context.

## Compatibility

- Redmine 6.1.x remains the primary baseline.
- Redmine 6.0.x is supported with guarded Redmine API calls.
- Redmine 7.x and newer are not artificially blocked by plugin metadata and should work as long as the Redmine plugin APIs used by UX Toolkit remain compatible.
- Redmine 5.x is no longer supported from version 4.0.0 onward.

The plugin does not modify Redmine core files. Existing features degrade by hiding unavailable UI or skipping optional actions when an underlying Redmine API is not available.

## Requirements

- Redmine 6.0.x or newer
- Redmine 6.1.x is recommended as the baseline environment

## Installation

Copy or keep the plugin in:

```text
plugins/redmine_ux_toolkit
```

Run the plugin migration from the Redmine root:

```bash
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
```

Restart Redmine after installing or updating the plugin.

## Version 2.5 Features

- Adds a compact ticket template selector to the new issue form.
- Offers only enabled ticket templates for manual insertion into the issue description.
- Preselects the enabled default template configured for the selected tracker when available.
- Inserts the selected description template into an empty description directly.
- Asks for confirmation before appending a template to an existing description.
- Keeps insertion manual; templates are not forced into issues automatically.

Users can choose a ticket template while creating a new issue and click **Insert template** to fill or append the issue description. This helps standardize recurring structures such as bug reports, support requests and maintenance tickets while keeping the normal Redmine issue form unchanged.

## Version 2.4 Features

- Adds global tracker default assignments for ticket templates.
- Lets administrators select one enabled ticket template per tracker and enable or disable each assignment.
- Stores tracker, template, enabled state and timestamps in plugin-owned persistence.
- Keeps assignments global in this version and does not automatically insert templates into new issues yet.
- Keeps the data model ready for future project-specific tracker assignments.

Tracker default templates are configured in the existing Ticket templates settings tab. Disabled templates are not offered for new assignments; if a previously assigned template is disabled later, the settings tab shows that state and issue-creation features ignore the disabled template.

## Version 2.3 Features

- Adds global ticket template management for reusable issue text structures.
- Adds a dedicated Ticket templates settings tab with a compact list and links to create or manage templates.
- Lets administrators create, edit, enable, disable and delete ticket templates.
- Stores template name, optional subject prefix or default subject, description template text, enabled state, sort order and timestamps.
- Keeps templates global in this version and does not automatically insert them into new issues yet.

Ticket templates are intended for recurring structures such as bug reports, support requests and maintenance tickets. The description template field is a plain large textarea and can contain normal Redmine issue text.

## Version 2.2 Features

- Adds a dedicated Ticket reminders settings tab.
- Uses Redmine's built-in issue reminder email functionality for assigned open issues that are overdue or due soon.
- Lets administrators enable scheduled reminders, choose the send time, choose weekdays, and configure the number of days before the issue due date.
- Lets administrators select the timezone in which the configured send time and weekdays are interpreted.
- Sends scheduled reminders at most once per configured day.
- Stores last attempt, last successful send, status, message, and lock metadata.
- Adds a manual "Send reminders now" action that uses the configured days-before-due value and the same reminder lock.

Issue reminders are processed by the existing scheduled task entrypoint. Run it every 10 minutes from the Redmine root:

```bash
*/10 * * * * cd /path/to/redmine && bundle exec rake redmine_ux_toolkit:run RAILS_ENV=production
```

The plugin does not build shell commands for reminder sending. It calls Redmine's `Mailer.reminders` API with synchronized mail delivery behavior when that API is available.

## Version 2.1 Features

- Adds project-scoped recurring ticket rules.
- Lets administrators and users with the Manage recurring tickets permission create, edit, and delete recurring ticket rules.
- Supports one-time, daily, weekly, monthly, and yearly recurrence intervals.
- Creates normal Redmine issues from due recurring rules through the central Redmine UX Toolkit cron runner.
- Stores last run date, next run date, last status, and concise error messages per rule.
- Uses per-rule database locking in addition to the central cron lock to avoid duplicate ticket creation.
- One-time rules are automatically disabled after successful ticket creation.

Recurring tickets are processed by the existing scheduled task entrypoint. Run it every 10 minutes from the Redmine root:

```bash
*/10 * * * * cd /path/to/redmine && bundle exec rake redmine_ux_toolkit:run RAILS_ENV=production
```

Recurring ticket rules are available under `/ux_toolkit/recurring_issue_rules`. Enable the Redmine UX Toolkit project module and grant the Manage recurring tickets permission to project managers who should manage rules for their projects.

## Version 2.0 Features

- Updates plugin compatibility metadata for Redmine 5.1, 6.0, 6.1, and 7.0.
- Keeps Redmine 6.1 as the primary compatibility baseline.
- Changes plugin migrations to a Rails 6.1 migration superclass so they can be parsed by Redmine 5.1 while remaining usable on newer Rails versions.
- Adds small compatibility helpers for Redmine reload hooks, issue closed-status checks, user date handling, safe attribute checks, issue workflow status checks, assignability, and watcher insertion.
- Keeps Redmine 5.1 support best-effort where Redmine view or controller internals differ.
- Adds no new business features.

## Version 1.0 Features

- Adds a user-specific landing page preference to the account preferences page.
- Supports Redmine My Page (`/my/page`) as a landing target.
- Supports a validated custom internal Redmine URL as a landing target.
- Keeps Redmine's protected original URL behavior: direct links such as issue links from emails take priority after login.

No reminders, checklists, dashboards, quick actions, log viewer, project selector, saved query selector, or other planned future features are implemented in version 1.0.

## Version 1.1 Features

- Adds a global default landing page after login in the plugin settings page.
- Supports Redmine default, My Page, and custom internal Redmine URL as global targets.
- Uses the global landing page only when the user has no personal landing page configured.

Redirect priority after login:

1. Original protected URL
2. User-specific landing page
3. Global default landing page
4. Redmine default behavior

## Version 1.2 Features

- Adds an admin setting to allow or disallow user-specific landing page overrides.
- Keeps existing user preferences when overrides are disabled.
- Ignores user preferences while overrides are disabled.

Redirect priority when user override is enabled:

1. Original protected URL
2. User-specific landing page
3. Global default landing page
4. Redmine default behavior

Redirect priority when user override is disabled:

1. Original protected URL
2. Global default landing page
3. Redmine default behavior

## Version 1.3 Features

- Adds a global login notice that administrators can configure.
- Displays the notice on the login page before authentication.
- Supports Redmine markup with the standard markup toolbar.
- Sanitizes unsafe HTML before display.

The login notice is public because it is visible before authentication. Do not include passwords, tokens, or sensitive internal information.

## Version 1.4 Features

- Adds a global new issue notice that administrators can configure.
- Displays the notice on the new issue page to help users create better tickets.
- Supports Redmine markup with the standard markup toolbar.
- Sanitizes unsafe HTML before display.
- Keeps the feature global only; project-specific and tracker-specific notices are not implemented in version 1.4.

## Version 1.5 Features

- Adds project-specific new issue notices in project settings.
- Displays project-specific notices when creating a new issue in that project.
- Displays the global new issue notice and project-specific notice together when both are configured.
- Preserves line breaks and escapes HTML in project-specific notices.
- Keeps tracker-specific notices out of scope for version 1.5.

## Version 1.6 Features

- Adds tracker-specific new issue notices in the plugin settings page.
- Displays tracker notices when creating a new issue with the configured tracker.
- Displays applicable notices in this order:
  1. Global new issue notice
  2. Project-specific new issue notice
  3. Tracker-specific new issue notice
- Preserves line breaks and escapes HTML in tracker-specific notices.
- Tracker-specific notices update when Redmine refreshes the issue form after the tracker dropdown changes.

## Version 1.7 Features

- Adds user-specific favorite projects.
- Allows users to mark visible projects as favorites from the project overview page.
- Allows users to remove projects from their favorites.
- Stores favorite projects per user without changing Redmine project membership or permissions.
- Shows only favorite projects still visible to the current user.
- Adds a simple favorite projects list at `/my/favorite_projects`.
- Marks favorite projects with an icon in the projects overview.
- Keeps dashboard integration out of scope for this version; it is planned for a later version.

## Version 1.8 Features

- Adds user-specific favorite issue filters.
- Allows users to mark visible saved issue filters as favorites from a saved query issue list.
- Allows users to remove saved issue filters from their favorites.
- Stores favorite issue filters per user without changing Redmine issue query behavior.
- Shows only favorite issue filters still visible to the current user.
- Hides invisible or deleted queries from the favorites list.
- Adds a simple favorite issue filters list at `/my/favorite_queries`.
- Keeps dashboard integration out of scope for this version; it is planned for a later version.

## Version 1.9 Features

- Tracks recently visited issues per user when a logged-in user opens an issue detail page.
- Updates the visit time instead of creating duplicates when the same issue is opened again.
- Adds a simple recently visited issues list at `/my/recent_issues`.
- Shows recently visited issues in a collapsible sidebar block.
- Shows only issues the current user is still allowed to see.
- Ignores deleted or invisible issues safely.
- Lets administrators configure how many recently visited issues are kept per user: 5, 10, or 20.
- Keeps dashboard integration out of scope for this version; it is planned for a later version.

## Version 1.10 Features

- Tracks recently visited projects per user when a logged-in user opens a project overview page.
- Updates the visit time instead of creating duplicates when the same project is opened again.
- Adds a simple recently visited projects list at `/my/recent_projects`.
- Shows recently visited projects in a collapsible sidebar block.
- Shows only projects the current user is still allowed to see.
- Ignores deleted or invisible projects safely.
- Lets administrators configure how many recently visited projects are kept per user: 5, 10, or 20.
- Keeps dashboard integration out of scope for this version; it is planned for a later version.

## Version 1.11 Features

- Adds an "Assign to me" action on issue detail pages.
- Shows the button only when the action is allowed for the current user.
- Respects Redmine issue visibility, edit permissions, safe attributes, and assignability rules.
- Assigns the issue to the current user without accepting a user id from request parameters.
- Creates a normal Redmine issue journal entry through the standard issue save logic.
- Lets administrators enable or disable the feature in the plugin settings page.

## Version 1.12 Features

- Adds an "Assign to me and start" action on issue detail pages.
- Assigns the issue to the current user and sets a configured target status in one action.
- Lets administrators enable or disable the feature in the plugin settings page.
- Requires administrators to configure the target status before the button is shown.
- Shows the button only when Redmine workflow allows the configured status transition.
- Respects Redmine issue visibility, edit permissions, safe attributes, assignability, and workflow rules.
- Creates a normal Redmine issue journal entry through the standard issue save logic.
- Places the action near the existing "Assign to me" issue action.

## Version 1.13 Features

- Adds Quick Status Actions on issue detail pages.
- Lets administrators enable or disable Quick Status Actions in the plugin settings page.
- Lets administrators select which issue statuses are offered as quick actions.
- Shows users only configured statuses that are allowed by Redmine workflow for the current issue.
- Changes only the issue status; the assignee is not changed.
- Respects Redmine issue visibility, edit permissions, safe attributes, validations, and workflow rules.
- Creates a normal Redmine issue journal entry through the standard issue save logic.
- Places the status actions near the existing issue action controls.

## Version 1.14 Features

- Adds lightweight issue checklists on issue detail pages.
- Lets users with permission add, edit, complete, reopen, and delete checklist items.
- Lets administrators enable or disable the feature in the plugin settings page.
- Adds project permissions: View checklists and Edit checklists.
- Keeps checklist items flat and intentionally simple.
- Does not include checklist templates, sections, history, or notifications in version 1.14.

## Version 1.15 Features

- Adds global checklist template management.
- Lets administrators create, edit, activate, deactivate, and delete checklist templates.
- Lets administrators add, edit, delete, and reorder ordered template items.
- Adds the Manage checklist templates permission key for future use.
- Keeps template management administrator-only in version 1.15.
- Does not yet allow inserting templates into issues; manual insertion is planned for version 1.16.
- Does not include drag and drop, categories, sections, project-specific templates, or automatic tracker assignment.

## Version 1.16 Features

- Allows users with Edit checklists permission to manually insert active checklist templates into issue checklists.
- Copies template items into normal issue checklist items.
- Preserves existing issue checklist items.
- Appends inserted items at the end of the issue checklist.
- Keeps inserted items initially open.
- Keeps inserted items independent from later template changes.
- Offers only active templates that contain at least one item.

## Version 1.17 Features

- Lets administrators configure one default checklist template per tracker.
- Automatically copies the configured active template into the issue checklist when a new issue is created.
- Copies template items into normal issue checklist items that are independent from later template changes.
- Runs automatic insertion only on issue creation.
- Does not create issue journals or email notifications for automatically inserted checklist items.
- Does not include project-specific overrides or automatic insertion when an existing issue's tracker is changed.

## Version 1.18 Features

- Lets administrators enable blocking issue closure when checklist items are still open.
- Keeps the blocker global and disabled by default.
- Uses Redmine closed issue statuses to detect close attempts.
- Blocks only transitions from an open status to a closed status.
- Works through normal issue edits, Quick Status Actions, and "Assign to me and start" when that action targets a closed status.
- Shows only the number of open checklist items in the validation error.
- Does not create issue journals or email notifications.

## Version 1.19 Features

- Lets administrators enable blocking parent issue closure while direct subtasks are still open.
- Keeps the blocker global and disabled by default.
- Uses Redmine closed issue statuses to detect close attempts.
- Blocks only transitions from an open status to a closed status.
- Checks direct subtasks only in this version.
- Works through normal issue edits, Quick Status Actions, and "Assign to me and start" when that action targets a closed status.
- Shows only the number of open subtasks in the validation error.
- Does not change child issues automatically.

## Version 1.20 Features

- Lets administrators automatically add the issue author as watcher when a new issue is created.
- Keeps the feature global and disabled by default.
- Runs only on newly created issues and does not run on normal issue updates.
- Uses Redmine's watcher logic and avoids duplicate watchers.
- Does not implement commenter auto-watch in this version.

## Version 1.21 Features

- Lets administrators automatically add commenting users as watchers.
- Keeps the feature global and disabled by default.
- Runs only when a user adds a real issue comment.
- Ignores issue updates without comments and blank notes.
- Uses Redmine's watcher logic and avoids duplicate watchers.

## Version 1.22 Features

- Adds a personal My Work dashboard at `/my/work`.
- Shows compact blocks for assigned issues, issues due today, overdue issues, and issues due soon.
- Shows existing favorite projects, favorite issue filters, recently visited issues, and recently visited projects.
- Respects Redmine issue, project, and query visibility in every block.
- Ignores deleted or missing favorite and recent records safely.
- Adds a My Work link in the user's account area.
- Lets administrators optionally add My Work to the top navigation with a compact icon link.
- Adds My Work as a selectable landing page after login.
- Keeps dashboard block customization out of scope for this version.

## Version 1.23 Features

- Lets users configure which My Work dashboard blocks are visible.
- Stores dashboard block visibility settings per user.
- Shows all dashboard blocks by default until a user saves personal settings.
- Renders only enabled dashboard blocks on `/my/work`.
- Shows a clean empty state if a user disables all blocks.
- Adds a dashboard settings page at `/my/work/settings`.

## Version 1.24 Features

- Lets administrators define the default visible My Work dashboard blocks.
- Uses the admin default only for users without personal dashboard settings.
- Keeps personal user dashboard settings as the higher-priority override.
- Falls back to all dashboard blocks if no valid admin default exists.
- Does not create or overwrite user preferences automatically.

## Version 1.26 Features

- Shows an overdue badge for open issues with due dates in the past.
- Adds the badge to issue detail pages.
- Adds the badge to issue rows in the My Work dashboard.
- Does not show the badge for closed issues, issues without a due date, or issues due today.

## Version 1.27 Features

- Shows a due-today badge for open issues whose due date is today.
- Adds the badge to issue detail pages.
- Adds the badge to issue rows in the My Work dashboard.
- Keeps the overdue badge from version 1.26 separate from the due-today badge.

## Version 1.28 Features

- Shows a stale issue badge for open issues not updated for the configured number of days.
- Uses a default stale threshold of 14 days.
- Lets administrators configure the stale threshold from 1 to 365 days.
- Adds the badge to issue detail pages.
- Adds the badge to issue rows in the My Work dashboard.

## Version 1.29 Features

- Shows an unassigned badge for open issues without an assignee.
- Adds the badge to issue detail pages.
- Adds the badge to issue rows in the My Work dashboard.

## Version 1.30 Features

- Adds a compact issue hint box to issue detail pages.
- Summarizes important issue states such as overdue, due today, stale and unassigned.
- Shows open checklist item and direct subtask counts without exposing subjects.
- Shows the box only when at least one hint applies.

## Version 1.31 Features

- Opens external HTTP and HTTPS links safely in a new tab when enabled.
- Adds `target="_blank"` and `rel="noopener noreferrer"` to external links in rendered Redmine content.
- Leaves internal, same-host, relative, anchor, `mailto:`, `tel:`, and other non-HTTP links unchanged.
- Keeps the feature enabled by default and configurable in plugin settings.

## Version 1.32 Features

- Adds an administrator-only log file viewer at `/admin/ux_toolkit/logs`.
- Lists readable log files directly inside `Rails.root/log`.
- Shows the last 100, 250, or 500 lines of the selected log file.
- Displays log output as escaped plain text in a monospace viewer.
- Allows administrators to empty a selected log file in place after a confirmation prompt.
- Does not provide downloads, deletion, or editing.

## Version 1.33 Features

- Allows administrators to configure which standard navigation links are visible.
- Supports Home, My page, Projects, Help, Administration, My account, and My Work.
- Changes UI visibility only; it does not change permissions or route access.
- Keeps all supported navigation links visible by default.
- Allows recently visited issue and project sidebar blocks to be shown or hidden independently.

## Version 1.34 Features

- Adds a central scheduled-task entrypoint: `redmine_ux_toolkit:run`.
- Adds a lightweight cron runner with an internal job registry for future plugin jobs.
- Uses database-backed locking so only one cron run executes at a time.
- Uses a stale-lock timeout so crashed runs do not block future runs forever.
- Stores basic run metadata: last started, last finished, status, message, and locked-until time.
- Adds a compact scheduled-task status display in the plugin settings.
- Adds a manual "Run scheduled tasks now" action in the scheduled-task settings tab.
- Does not implement recurring tickets, SLA logic, escalation logic, cleanup logic, or background queues.

## Configuration

Each user can configure the setting under **My account** in the preferences section.

Administrators can configure the global default under **Administration > Plugins > Redmine UX Toolkit > Configure**. A generic settings link is also shown in the administration sidebar. The plugin settings page uses tabs so later feature settings can be added cleanly.

Administrators can also decide whether users may override the global landing page. Disabling this option does not delete existing user preferences; they are simply ignored while the setting is disabled.

Administrators can configure the global login notice on the plugin settings page. The notice supports Redmine markup with the standard markup toolbar; unsafe HTML is sanitized for security.

Administrators can configure the global new issue notice on the plugin settings page. The notice is shown on the new issue page and supports Redmine markup with the standard markup toolbar; unsafe HTML is sanitized for security. Do not include passwords, tokens, or sensitive internal information.

Project administrators or users allowed to edit project settings can configure a project-specific new issue notice under **Project settings > Redmine UX Toolkit**. The project notice is shown only when creating issues in that project. Project notices are plain text in version 1.5; line breaks are preserved and HTML is escaped.

Administrators can configure tracker-specific new issue notices on the plugin settings page. Tracker notices are plain text in version 1.6; line breaks are preserved and HTML is escaped. Do not include passwords, tokens, or sensitive internal information.

Logged-in users can add or remove favorite projects from a project overview page. Favorite projects are personal per user and are listed under `/my/favorite_projects`. Projects that are no longer visible to the user are hidden from the list. Favorite projects are marked with an icon in the projects overview.

Logged-in users can add or remove favorite issue filters when viewing an issue list with a visible saved `query_id`. Favorite issue filters are personal per user and are listed under `/my/favorite_queries`. Queries that are no longer visible to the user, or whose project is no longer visible, are hidden from the list. Unsaved ad-hoc issue filters do not show favorite controls.

Logged-in users automatically build a personal recently visited issue list when opening issue detail pages. Recent issues are listed under `/my/recent_issues`; issues that are no longer visible or no longer exist are hidden. Administrators can configure the retained recent issue count under the recently visited items settings tab.

Logged-in users automatically build a personal recently visited project list when opening project overview pages. Recent projects are listed under `/my/recent_projects`; projects that are no longer visible or no longer exist are hidden. Administrators can configure the retained recent project count under the recently visited items settings tab.

Administrators can independently show or hide the recently visited issues and recently visited projects sidebar blocks under the recently visited items settings tab. This only controls sidebar visibility; tracking, list pages, and My Work dashboard blocks are unchanged.

Administrators can enable or disable the "Assign to me" issue action under the issue quick actions settings tab. When enabled, eligible users see the action on issue detail pages if they can edit the issue and are valid assignees.

Administrators can enable or disable the "Assign to me and start" issue action under the same issue quick actions settings tab. The feature is disabled by default and requires a target status. Eligible users see the action only when they can edit the issue, are valid assignees, and Redmine workflow allows the configured status transition.

Administrators can enable Quick Status Actions under the same issue quick actions settings tab. The feature is disabled by default and requires one or more configured statuses. Eligible users see only configured status actions that Redmine workflow allows for the current issue. Quick Status Actions change only the issue status and never change the assignee.

Administrators can enable or disable issue checklists under the checklists settings tab. The feature is enabled by default. Projects must have the Redmine UX Toolkit project module enabled, and roles need the View checklists and Edit checklists permissions as appropriate. Checklist changes are stored separately from issues and do not create issue journals or email notifications in version 1.14.

Administrators can manage global checklist templates under the checklists settings tab or from the Redmine UX Toolkit administration sidebar link. Templates contain ordered items and can be active or inactive. Template management is administrator-only in version 1.15, although the Manage checklist templates permission key exists for future non-admin support.

Users with Edit checklists permission can insert active checklist templates directly from the issue checklist section. Template items are copied into the issue and appended after existing checklist items. Later template changes do not affect already inserted issue checklist items.

Administrators can configure tracker checklist defaults under the checklists settings tab, from the Redmine UX Toolkit administration sidebar link, or from the checklist templates page. Only active checklist templates with at least one item can be selected. The selected template is copied into newly created issues for that tracker.

Administrators can manage global ticket templates under the Ticket templates settings tab or from the Redmine UX Toolkit administration sidebar link. Templates can define a name, subject prefix or default subject, description template text, enabled state and sort order. Enabled templates can be inserted manually into new issue descriptions from the new issue form. The plugin does not support project-specific, user-specific or workflow-based ticket templates yet.

Administrators can manage global text snippets under the Text snippets settings tab or from the Redmine UX Toolkit administration sidebar link. Snippets define reusable issue comment text with a title, snippet text, enabled state and sort order. Enabled snippets can be inserted manually into issue comments and are appended to existing notes instead of replacing them.

Administrators can enable the checklist close blocker under the issue close guards settings tab. When enabled, issues cannot move from an open Redmine status to a closed Redmine status while open checklist items exist. The blocker is a normal issue validation and applies to issue edit forms and plugin quick actions.

Administrators can enable the subtask close blocker under the issue close guards settings tab. When enabled, parent issues cannot move from an open Redmine status to a closed Redmine status while direct subtasks are still open. The blocker shows only the number of open subtasks and never changes child issues automatically.

Administrators can enable automatic issue-author watching under the watchers settings tab. When enabled, the author of a newly created issue is added as watcher if Redmine allows that user to watch the issue. Existing issues and normal issue updates are not changed.

Administrators can enable automatic issue-commenter watching under the watchers settings tab. When enabled, a logged-in user who adds a real comment to an issue is added as watcher if Redmine allows that user to watch the issue. Issue updates without comments and blank notes are ignored.

Logged-in users can open the My Work dashboard at `/my/work`. The dashboard combines personal issue blocks, favorite projects, favorite issue filters, recently visited issues, and recently visited projects. It only shows records still visible to the current user. Administrators can enable an optional compact My Work top navigation link under the My Work settings tab. My Work can also be selected as a user-specific or global landing page after login. Administrators can define the default visible My Work dashboard blocks for users without personal settings. Users can configure their visible My Work dashboard blocks at `/my/work/settings`; personal settings override the admin default. If no valid admin default exists, all blocks are enabled.

Administrators can enable or disable safe external link handling under the links settings tab. When enabled, rendered external HTTP and HTTPS links to another host open in a new tab with `noopener noreferrer`; internal, relative, anchor, mail, telephone, and other non-HTTP links are not changed.

Administrators can view recent Redmine log file lines from the Redmine UX Toolkit administration sidebar link. The log viewer only allows files directly inside `Rails.root/log`, supports 100, 250, and 500 line views, and can empty a selected log file in place after confirmation. It does not allow downloads, deletion, or editing.

Administrators can manage attachment storage from the Redmine UX Toolkit administration sidebar link or the Attachment storage settings tab. The manager lists Redmine attachments with filters for filename, content type, file size, age, project, container type and file status. When enabled, selected attachment files can be moved to the recoverable trash directory under `Rails.root/files/redmine_ux_toolkit_trash`. The Redmine attachment record remains in the database, but downloads and inline images may stop working while the file is in trash. Restore moves the file back to its original Redmine file path and fails safely if that destination already exists. Permanent delete affects only files already in the plugin trash.

Administrators can configure attachment previews under the Attachment previews settings tab. The feature is enabled by default and previews supported image and PDF attachment links without leaving the current page. Image preview, PDF preview, gallery navigation and the preview download action can be switched independently. Explicit Redmine download icons continue to download files normally, and all preview requests remain protected by Redmine's existing attachment visibility permissions.

After moving from `redmine_lightbox2`, remove or disable that plugin so only one attachment preview implementation loads. During a transition, UX Toolkit leaves links already prepared by the active legacy Fancybox viewer untouched.

Administrators can configure visible navigation links under the Navigation settings tab. This can hide common UI links such as Help, Home, My page, Projects, Administration, My account, and My Work. This is only a visual navigation setting; direct route access and Redmine permissions are unchanged.

Administrators can schedule future Redmine UX Toolkit background tasks through the central Rake entrypoint. Recommended cron example:

```cron
*/10 * * * * cd /path/to/redmine && bundle exec rake redmine_ux_toolkit:run RAILS_ENV=production
```

The cron can safely run every 10 minutes because the runner uses database-backed locking and future jobs are expected to perform lightweight due checks. Administrators can also run the same entrypoint manually from the Scheduled tasks settings tab. Version 1.34 only adds the infrastructure and a no-op internal job; it does not scan issues or projects.

The bottom of the **Scheduler** tab provides optional cron monitoring. When configured to alert after four hours, normal HTML browser requests trigger a throttled health check. The check runs at most once every 10 minutes across the database, sends one email per stale or failed-run incident, and clears the incident after a healthy cron run. An explicitly configured notification address takes precedence. If that field is blank, UX Toolkit uses the sender configured under Redmine **Administration > Settings > Email notifications**. A valid `SERVER_ADMIN` email exposed through the Rack request or Passenger process environment remains the secondary fallback. The effective fallback is shown beside the field. Monitoring remains inactive when no valid recipient is available.

When the optional `redmine_contacts_helpdesk` plugin is installed, the **Scheduler** tab also provides Helpdesk mail retrieval. The retrieval interval can be every central cron run, every 30, 60, or 120 minutes, or every 4 or 8 hours; the default is 60 minutes. UX Toolkit launches the established `bundle exec rake redmine:email:helpdesk:receive RAILS_ENV=production` task with a fixed argument list, prevents overlapping retrievals, and stores the last successful completion in the existing cron-state table. Failed attempts are reported without replacing that successful heartbeat. The setting and job remain inactive and hidden when the Helpdesk plugin is not installed.

The attachment trash cleanup job uses the same central cron runner. It does almost no work while attachment trash is disabled. When enabled, it permanently deletes only expired trash files up to the configured cleanup limit per run.

Allowed target types:

- Redmine default / no custom landing page
- My page
- My Work
- Custom internal URL

Custom URLs must be internal Redmine paths such as `/my/page`, `/issues`, or `/projects/example-project`. External URLs, protocol-relative URLs, protocol-based URLs, and path traversal are rejected or ignored safely.

## Maintainer

- www.SaaS-Secure.com, S. Ruttloff
- https://www.saas-secure.com
- info@saas-secure.com

## License

Redmine UX Toolkit is released under the BSD 3-Clause License.

You may use, copy, modify and redistribute the plugin, including in commercial
environments, as long as the copyright and license notice naming
www.SaaS-Secure.com and S. Ruttloff is retained. See [LICENSE](LICENSE).
