r29717 2026-09-15 jhemsley NEW: Add external API usage logging and reporting [q13789]

M /trunk
M /trunk/api/index.php
A /trunk/batch/cron_jobs/016_api_log_truncate.php
M /trunk/css
A /trunk/dbstruct/help_api_log.txt
A /trunk/dbstruct/index_api_log.txt
A /trunk/dbstruct/table_api_log.txt
M /trunk/include/api_functions.php
M /trunk/include/boot.php
M /trunk/include/config.default.php
M /trunk/include/general_functions.php
M /trunk/include/search_functions.php
M /trunk/login.php
A /trunk/tests/test_list/001590_api_logging.php
r29716 2026-09-15 jhemsley CHG: Bring up to date with trunk [q13789]

M /branches/20260908_jhemsley_q13789
M /branches/20260908_jhemsley_q13789/api/iiif/handler2.php
M /branches/20260908_jhemsley_q13789/api/index.php
M /branches/20260908_jhemsley_q13789/css
M /branches/20260908_jhemsley_q13789/css/global.css
M /branches/20260908_jhemsley_q13789/css/light.css
A /branches/20260908_jhemsley_q13789/gfx/interface/circle-minus-solid.svg
A /branches/20260908_jhemsley_q13789/gfx/interface/circle-minus.svg
A /branches/20260908_jhemsley_q13789/gfx/interface/circle-plus-solid.svg
A /branches/20260908_jhemsley_q13789/gfx/interface/circle-plus.svg
M /branches/20260908_jhemsley_q13789/include/collections_functions.php
M /branches/20260908_jhemsley_q13789/include/config_functions.php
M /branches/20260908_jhemsley_q13789/include/do_search_filtering.php
M /branches/20260908_jhemsley_q13789/include/iiif_functions.php
M /branches/20260908_jhemsley_q13789/include/plugin_functions.php
M /branches/20260908_jhemsley_q13789/include/request_functions.php
M /branches/20260908_jhemsley_q13789/include/search_functions.php
M /branches/20260908_jhemsley_q13789/include/user_functions.php
M /branches/20260908_jhemsley_q13789/include/version.php
M /branches/20260908_jhemsley_q13789/login.php
M /branches/20260908_jhemsley_q13789/pages/ajax/category_tree_lazy_load.php
M /branches/20260908_jhemsley_q13789/pages/csv_export_results_metadata.php
M /branches/20260908_jhemsley_q13789/pages/search_views/thumbs.php
M /branches/20260908_jhemsley_q13789/pages/user_password.php
M /branches/20260908_jhemsley_q13789/pages/user_request.php
M /branches/20260908_jhemsley_q13789/plugins/clip/pages/setup.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/include/csv_functions.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ar.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/be.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/bg.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/bn.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ca.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/cs.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/cy.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/da.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/de.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/el.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/en.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/es-AR.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/es.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/fa.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/fi.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/fr.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/hi.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/hr.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/hu.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/id.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/it.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/jp.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ko.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ku.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ms.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/nl.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/no.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/pa.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/pl.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/pt-BR.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/pt.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ro.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ru.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/sk.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/sv.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/sw.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/th.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/tl.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/tr.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/uk.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/ur.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/vi.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/zh-CN.php
M /branches/20260908_jhemsley_q13789/plugins/csv_upload/languages/zh-TW.php
M /branches/20260908_jhemsley_q13789/plugins/totp/pages/totp.php
r29696 2026-09-10 jhemsley NEW: Add API logging integration tests [q13789]

M /branches/20260908_jhemsley_q13789/include/boot.php
A /branches/20260908_jhemsley_q13789/tests/test_list/001590_api_logging.php
r29691 2026-09-09 jhemsley CHG: Rename internal API logging helpers to prevent API test tool exposure [q13789]

M /branches/20260908_jhemsley_q13789/api/index.php
M /branches/20260908_jhemsley_q13789/batch/cron_jobs/016_api_log_truncate.php
M /branches/20260908_jhemsley_q13789/include/api_functions.php
r29689 2026-09-09 jhemsley NEW: Add API usage count to system status [q13789]

M /branches/20260908_jhemsley_q13789/include/general_functions.php
r29687 2026-09-09 jhemsley CHG: Leave API log excluded usernames empty by default [q13789]

M /branches/20260908_jhemsley_q13789/include/config.default.php
r29686 2026-09-09 jhemsley NEW: Add external API request logging [q13789]

M /branches/20260908_jhemsley_q13789/api/index.php
M /branches/20260908_jhemsley_q13789/include/api_functions.php
M /branches/20260908_jhemsley_q13789/include/config.default.php
r29685 2026-09-08 jhemsley NEW: Add API log retention housekeeping [q13789]

A /branches/20260908_jhemsley_q13789/batch/cron_jobs/016_api_log_truncate.php
M /branches/20260908_jhemsley_q13789/include/api_functions.php
M /branches/20260908_jhemsley_q13789/include/config.default.php
r29684 2026-09-08 jhemsley NEW: Add api_log database structure [q13789]

A /branches/20260908_jhemsley_q13789/dbstruct/help_api_log.txt
A /branches/20260908_jhemsley_q13789/dbstruct/index_api_log.txt
A /branches/20260908_jhemsley_q13789/dbstruct/table_api_log.txt
r29681 2026-09-08 jhemsley NEW: Creating branch [q13789]

A /branches/20260908_jhemsley_q13789