Tools Hub Reference Public

Module Research Notes

Evidence gathered from the current Tools Hub module files — controllers, models, configs, and migrations — before writing these user guide pages.

Guide version: r1 Module version: 1.2.0 Updated: 2026-07-22 Estimated time: 4 min 5 views
Reference

Module Research Notes

Evidence gathered from the current module files before writing the user guide pages.

Slug: toolsVersion: 1.2.0Category: ProductivityReviewed: 2026-07-11

Research Sources Inspected

Source path

modules/Tools

Feature flags marked true

  • Controllers
  • Models
  • Views
  • Language
  • Permissions
  • Left Menu
  • Routes
  • Migrations
  • Cron Jobs
  • Api Endpoints

Evidence Summary

Manifest

module.json defines slug tools, version 1.2.0, category Productivity, and the module capability flags used in this guide.

Runtime surface

6 controller file(s), 11 view file(s), and 25 route mapping(s) were found.

Data surface

10 model file(s), 8 declared table(s), and 9 migration file(s) were found.

Operations surface

5 permission key(s), 3 job(s), 0 seeder(s), and 2 test file(s) were found.

Detailed File Evidence

Controllers and methods

  • Tools - index, category, view, asset, track_view, like, comment, run, sitemap, result, og_image, result_og_image
  • Tools_admin - index, list_data, modal_form, save, sync, comments, comments_data, comment
  • Tools_api - index, categories, view
  • Tools_euapi - index, categories, view
  • Tools_sharelink - preview, save
  • Tools_shortlink - resolve, og_image, mint

Jobs and schedules

  • Purge expired short links (15 3 * * *) - Deletes expired short links (tool_shortlinks) minted by the URL Shortener / Pages share.
  • Purge expired Tools Hub results (0 3 * * *) - Deletes expired shareable result pages (tool_results) for the public Tools Hub.
  • Purge old Tools Hub usage logs (30 3 * * *) - Deletes Tools Hub usage logs (tool_logs) older than the retention window. Disabled by default.

Routes sampled

RouteTarget
toolsTools/index
tools/sitemap.xmlTools/sitemap
tools/category/(:any)Tools/category/$1
tools/likeTools/like
tools/commentTools/comment
tools/track-viewTools/track_view
tools/runTools/run
tools/url-shortener/mintTools_shortlink/mint
tools/sharable-link-generator/previewTools_sharelink/preview
tools/sharable-link-generator/saveTools_sharelink/save
s/(:any)/og-imageTools_shortlink/og_image/$1
s/(:any)Tools_shortlink/resolve/$1
tools/(:any)/result/(:any)/og-imageTools/result_og_image/$1/$2
tools/(:any)/result/(:any)Tools/result/$1/$2
tools/(:any)/og-imageTools/og_image/$1
tools/(:any)/asset/(:any)Tools/asset/$1/$2
tools/(:any)Tools/view/$1
admin/toolsTools_admin/index
admin/tools/list-dataTools_admin/list_data
admin/tools/modal-formTools_admin/modal_form
5 additional route(s) omitted for readability.

README topics

  • What it provides
  • Adding a new tool
  • Console commands
  • Database
  • Architecture notes

Operating Implications

  • Permission coverage is part of the module contract, so every workflow should be tested with a role-limited user and an administrator.
  • The module has migrations, so fresh installs and tenant databases need migration validation before go-live.
  • The module has API documentation or routes, so response examples and query filters should stay aligned with user-facing screens.
  • Scheduled jobs can change statuses, notifications, or summaries after users leave the screen; support should check cron status during troubleshooting.

Known Risks from the Manifest

  • The 8 tool_* tables are GLOBAL/public content and are pinned to the PRIMARY database by the Tool_* models (they explicitly open the 'default' connection). Module migrations still run per-tenant via migrate:modules, so empty copies may exist in tenant databases; they are unused - the canonical store is the primary DB.
  • Public POST endpoints (/tools/like, /tools/comment, /tools/run) require the native CodeIgniter CSRF token, which the public layout renders for AJAX. Anonymous likes/comments are deduped by a salted visitor hash and comments default to 'pending' for moderation.
  • tool_logs is a DELIBERATE usage audit trail and - unlike the privacy-safe analytics tables (tool_views/tool_likes store salted hashes only) - stores raw request context (session, IP, user, tenant) plus the submitted input and produced output. Treat its rows as sensitive. The input/output blobs are capped at 256 KB each (Tool_log_model::MAX_BLOB_BYTES). Growth is bounded by Tool_log_model::purge_older_than(); the PurgeOldToolLogsJob cron (DISABLED by default) enforces a 365-day retention when an operator opts in.
  • By design every GENUINE successful run is logged and counted (tools.run_count), so usage == runs with no per-visitor dedup - unlike the view counter (5-min throttle) and likes (toggle). A share/save re-run (POST /tools/run with save=1) is intentionally NOT recounted/relogged. This means run_count can in principle be inflated by repeated runs; the only ceilings are the global RateLimit middleware (60 req/min per IP) and the optional retention purge. 'Times used' is therefore an engagement metric, not an audited-unique count.
Was this guide helpful?

Report a content problem