System

Activity Log

Unified timeline of data changes (saves, imports, deletes) and backend errors. Filter by type, area, severity, or search.

Data changes (total)1,738
Errors (total)1,004,565
Today · changes1
Today · errors5,042
Reset

1,006,304 results · Page 20116 of 20127

bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":201,"severity_code":8192}
bank_service.php
2026-04-28 17:55:08 · cli · tmp\import_bank_transactions_xlsx.php
php_error
fgetcsv(): the $escape parameter must be provided as its default value will change
Script: tmp\import_bank_transactions_xlsx.php
IP: cli
Context
{"file":"C:\\code\\customerdb\\backend\\bank_service.php","line":187,"severity_code":8192}
customer_data.php
2026-04-26 19:54:58 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:54:28 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:53:58 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:53:45 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:53:35 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:51:48 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:51:39 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:51:28 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
sysadmin.php
2026-04-26 19:44:44 · anonymous · /backend/api/sysadmin.php?action=scripts_save
php_error
file_put_contents(/mnt/drive1/scripts/cleanup_customerdb_branches.sh): Failed to open stream: Permission denied
Script: /mnt/drive3/customerdb/webui/backend/api/sysadmin.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/backend/api/sysadmin.php","line":478,"severity_code":2}
customer_data.php
2026-04-26 19:43:12 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:42:42 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:42:11 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:41:41 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:41:11 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:40:41 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:40:11 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:39:41 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
customer_data.php
2026-04-26 19:39:11 · admin@ellasalterations.com · /api/visit_save.php
fatal
Cannot redeclare app_send_json() (previously declared in /mnt/drive3/customerdb/backend/bootstrap.php:54)
Script: /mnt/drive3/customerdb/frontend/api/visit_save.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/frontend/api/customer_data.php","line":3,"type":1}
sysadmin.php
2026-04-26 19:09:07 · anonymous · /backend/api/sysadmin.php?action=scripts_save
php_error
file_put_contents(/mnt/drive1/scripts/cleanup_customerdb_branches.sh): Failed to open stream: Permission denied
Script: /mnt/drive3/customerdb/webui/backend/api/sysadmin.php
IP: 192.168.7.42
Context
{"file":"/mnt/drive3/customerdb/backend/api/sysadmin.php","line":438,"severity_code":2}
live_table_manager · update
2026-04-26 12:39:28 · anonymous · /backend/live_table_manager.php?table=customer_payment_transactions&edit=4324&q=Pamela+Tripp
change
customer_payment_transactions #4324
Context
[]
Before
{"customer_payment_transaction_id":"4324","payment_id":null,"order_id":null,"visit_id":null,"customer_id":null,"customer_name":"Pamela Tripp","transaction_date":"2026-03-23 12:00:00","payment_method":"credit","payment_type":"Drop Off","bucket":"credit","amount":"40.00","tip_amount":"0.00","is_new_customer":"1","source":"legacy_customer_totals","created_at":"2026-04-12 11:52:48","updated_at":"2026-04-12 11:52:48"}
After
{"customer_payment_transaction_id":"4324","payment_id":null,"order_id":null,"visit_id":null,"customer_id":null,"customer_name":"Pamela Tripp","transaction_date":"2026-03-23 12:00:00","payment_method":"credit","payment_type":"Drop Off","bucket":"credit","amount":"0.00","tip_amount":"0.00","is_new_customer":"1","source":"legacy_customer_totals","created_at":"2026-04-12 11:52:00","updated_at":"2026-04-12 11:52:00"}
schedule · create
2026-04-25 21:06:27 · admin@ellasalterations.com · /api/appointment_workflow.php
change
appointment_workflow #visit:129432
Context
{"workflow_status":"no_show","visit_id":129432,"order_id":106568}
Before
[]
After
{"workflow_id":"11","source":"visit","source_key":"129432","appointment_date":"2026-04-25","customer_id":"495253","visit_id":"129432","order_id":null,"workflow_status":"no_show","payment_state":null,"payment_method":null,"payment_amount":"0.00","paid_in_advance":"0","report_required":"0","report_attached":"0","report_checked_at":"2026-04-25 21:06:27","provider_notes_text":null,"operator_notes":"{\"Project Details\":\"Formal wear dress hem and tighten bust \",\"When Needed?\":\"May 7th\"}","no_show_email_key":"none","created_at":"2026-04-25 21:06:27","updated_at":"2026-04-25 21:06:27"}
schedule · create
2026-04-25 20:33:39 · admin@ellasalterations.com · /api/appointment_workflow.php
change
appointment_workflow #visit:129431
Context
{"workflow_status":"no_show","visit_id":129431,"order_id":106567}
Before
[]
After
{"workflow_id":"10","source":"visit","source_key":"129431","appointment_date":"2026-04-25","customer_id":"495252","visit_id":"129431","order_id":null,"workflow_status":"no_show","payment_state":null,"payment_method":null,"payment_amount":"0.00","paid_in_advance":"0","report_required":"0","report_attached":"0","report_checked_at":"2026-04-25 20:33:39","provider_notes_text":null,"operator_notes":"{\"Project Details\":\"Replace or fix zipper on dress\",\"When Needed?\":\"1 week?\"}","no_show_email_key":"none","created_at":"2026-04-25 20:33:39","updated_at":"2026-04-25 20:33:39"}
documents · upload
2026-04-25 18:29:57 · anonymous · /backend/documents.php?backend_document_id=24
change
backend_document #25
Context
{"file_name":"2026-04-25-codex-changes.md","mime_type":"application/octet-stream"}
Before
[]
After
{"backend_document_id":"25","document_type":"upload","title":"Codex - Documentation 04-25-2026","slug":"codex-documentation-04-25-2026","summary_text":"2026-04-25-codex-changes.md\r\nIt includes:\r\n\r\neverything created/updated/removed\r\ndatabase schema objects added\r\nDB data changes performed\r\nAPI endpoints/actions touched\r\nprocedures/functions and scripts added/changed\r\ncron/notification behavior\r\nvalidation performed today","content_markdown":null,"content_html":null,"file_name":"2026-04-25-codex-changes.md","stored_name":"20260425-182957-0b251cd7.md","mime_type":"application/octet-stream","file_size_bytes":"6092","storage_path":"/mnt/drive3/customerdb/backend/documents_storage/20260425-182957-0b251cd7.md","is_deleted":"0","created_at":"2026-04-25 18:29:57","updated_at":"2026-04-25 18:29:57","editor_content":"# CustomerDB Changes Log\nDate: 2026-04-25\nAuthor: Codex\n\n## Scope\nThis document summarizes all work completed today in this session, including created/updated/removed files, database schema objects introduced by code, API behaviors touched, and operational procedures/scripts added.\n\n## 1) Files Created\n- `backend/search_data_service.php`\n- `backend/search_data.php`\n- `webui/backend/search_data.php` (compatibility loader)\n- `webui/backend/search_data_service.php` (compatibility loader)\n- `/mnt/drive1/scripts/cleanup_customerdb_branches.sh` (runtime ops script; outside repo tree)\n\n## 2) Files Updated\n- `backend/module_service.php`\n- `backend/index.php`\n- `backend/page_helpers.php`\n- `webui/settings.html`\n- `backend/api/sysadmin.php`\n- `backend/sysadmin.php`\n- `backend/jobs/cron_runtime_service.php`\n- `backend/cron_manager.php`\n- `backend/search_data.php` (restyling updates for spreadsheet-like sections)\n- `backend/search_data_service.php` (provider detection/compat fixes)\n\n## 3) Files Removed\n- None.\n\n## 4) Database Schema Objects Added (by code)\nImplemented in `backend/search_data_service.php` via `app_install_search_data_schema(...)`:\n\n### Tables\n1. `backend_search_dataset`\n2. `backend_search_import_batch`\n3. `backend_search_dataset_field`\n4. `backend_search_data_row`\n\n### Indexes / Constraints (high level)\n- Unique dataset key by provider (`provider_name`, `dataset_key`)\n- Import batch indexes by dataset/status\n- Unique field key per dataset\n- Unique row identity hash per dataset\n- Analytical indexes on date/clicks/impressions\n\n## 5) Database Data Changes Performed Today\n- A cron job row was inserted in `cron_job`:\n  - Label: `Cleanup Repo Branch Folders`\n  - Schedule: `20 3 * * *`\n  - Command: `bash /mnt/drive1/scripts/cleanup_customerdb_branches.sh`\n  - Enabled: `1`\n- Search data smoke import was executed once in this environment for validation, which inserted dataset/import/data rows in the new search tables.\n\n## 6) New/Updated Backend Module\n### Module: Search Data Imports (`Bing / Google CSV + AI`)\n- New page: `backend/search_data.php`\n- New service: `backend/search_data_service.php`\n- Registered in backend module overview and dashboard card.\n- Added to module jump links and settings module visibility list.\n\n### Functional capabilities added\n- Adaptive CSV import for Google/Bing (and unknown/future providers).\n- Header evolution tracking (new columns are cataloged without code changes).\n- Batch import auditing (rows seen/inserted/updated/skipped).\n- Query context construction from imported tables.\n- Ollama-based AI question answering over imported data using existing settings:\n  - `ollama_url`\n  - `ollama_default_model`\n\n## 7) API Surface and Call Behavior Changes\n## Updated endpoint\n- `backend/api/sysadmin.php`\n\n### Updated actions\n1. `action=backups_list`\n   - Added new `dir` key support:\n     - `repo-branches` => `/mnt/drive3/customerdb_repo/branches`\n2. `action=backups_delete`\n   - Previously file-only delete.\n   - Now supports both file and folder delete.\n   - Added safe recursive folder deletion with path-boundary checks.\n   - Response now includes:\n     - `deleted_type` (`file` or `folder`)\n\n### Existing actions used by UI (not newly created today, but part of touched API flow)\n- `logs_list`, `logs_read`, `logs_clear`\n- `scripts_list`, `scripts_read`, `scripts_save`, `scripts_run`, `scripts_notify_save`\n- `backups_list`, `backups_delete`\n\n## 8) Sysadmin UI Changes\nUpdated `backend/sysadmin.php`:\n- Backups tab now includes:\n  - `customerdb_repo/branches/` source (`data-backupdir=\"repo-branches\"`)\n- Directory rows now include a `Delete Folder` button.\n- Delete handler updated to support file vs folder confirmation text.\n\n## 9) Cron / Ops Procedure Changes\n## Updated cron runtime service\nUpdated `backend/jobs/cron_runtime_service.php`:\n- Added constants:\n  - `APP_BRANCH_CLEANUP_SCRIPT_PATH`\n  - `APP_BRANCH_CLEANUP_TARGET_PATH`\n- Added helper:\n  - `app_cron_ensure_branch_cleanup_script()`\n- `app_cron_migrate_command_paths(...)` now:\n  - Ensures command normalization for `Cleanup Repo Branch Folders`\n  - Ensures cleanup script exists on disk\n\n## Updated cron manager seeding\nUpdated `backend/cron_manager.php`:\n- Added seeded/ensured job:\n  - `Cleanup Repo Branch Folders`\n  - `20 3 * * *`\n  - `bash /mnt/drive1/scripts/cleanup_customerdb_branches.sh`\n\n## Script created\n`/mnt/drive1/scripts/cleanup_customerdb_branches.sh`\n- Deletes first-level folders older than 5 days under:\n  - `/mnt/drive3/customerdb_repo/branches`\n- Emits clear stdout status suitable for cron logs/notifications.\n\n## Notifications\nNo new notification channels were added.\nThe new cron job uses existing cron execution + notification flow:\n- Telegram (depending on settings)\n- Email (depending on settings)\n\n## 10) Jump-To-Module Improvements\nUpdated `backend/page_helpers.php`:\n- Jump dropdown list now sorted A-Z by label.\n- List expanded to include missing backend destinations.\n- Corrected invalid links for queue pages to existing routes:\n  - `/upcoming.html`\n  - `/workload.html`\n\n## 11) Styling/UI Updates Requested\nUpdated `backend/search_data.php`:\n- For sections:\n  - `CSV Files`\n  - `Dataset Totals`\n  - `Recent Imports`\n- Removed rounded corners and applied spreadsheet-like flat table style (Excel-like grid presentation).\n\n## 12) Compatibility / Robustness Fixes Applied\nIn `backend/search_data_service.php`:\n- Added CSV parsing compatibility for `fgetcsv` escape parameter.\n- Replaced `mb_substr` with `substr` in one path to avoid missing extension errors in this environment.\n- Improved provider detection rules for Google export naming patterns:\n  - `KeywordReport`\n  - `PageTrafficReport`\n  - `SearchPerformanceOverview`\n\n## 13) Validation Performed\n- PHP syntax checks (`php -l`) passed for all modified PHP files.\n- Search data smoke import executed successfully in this environment.\n- Verified script path existence after direct creation:\n  - `/mnt/drive1/scripts/cleanup_customerdb_branches.sh`\n\n## 14) Notes\n- Existing unrelated local repo changes were not reverted.\n- No destructive git operations were used.\n","is_text_editable":1,"can_edit_inline":1}
← Prev 1 20114 20115 20116 20117 20118 20127 Next →