From 78132b3fd7859c2571085b8488a489570fe92469 Mon Sep 17 00:00:00 2001 From: WLTBAgent Date: Fri, 13 Feb 2026 20:25:52 +0000 Subject: [PATCH] Fix: Rename AdminController to PageController to match route MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Renamed AdminController to PageController - Route name is 'page#index' so controller must be 'PageController' - Fixes Could not resolve PageController error - Updated routes.php to use PageController - Updated info.xml navigation to point to PageController - Removed old AdminController.php - Improved HTML output with better styling and next steps This was the root cause: Controller class name must match route name. Route: page#index → Controller: PageController App routing should now work correctly! --- analyticshub.zip | Bin 0 -> 24104 bytes analyticshub/appinfo/info.xml | 19 ++---- analyticshub/appinfo/routes.php | 2 +- .../lib/Controller/AdminController.php | 52 -------------- .../lib/Controller/PageController.php | 64 ++++++++++++++++++ 5 files changed, 70 insertions(+), 67 deletions(-) create mode 100644 analyticshub.zip delete mode 100644 analyticshub/lib/Controller/AdminController.php create mode 100644 analyticshub/lib/Controller/PageController.php diff --git a/analyticshub.zip b/analyticshub.zip new file mode 100644 index 0000000000000000000000000000000000000000..54c0f3a0dc2fa95356fc7364a2ccb3eb4800b4db GIT binary patch literal 24104 zcmeFYQ*>qP)&&~dwr$&XQn78@wko!5R_vr=+jc4y+qqR|pa1Op@3YT;9`5U1t$k~) zr#@#J-#2?7qmMBaq=7-80DgbOTxGTY@#mjkumCs!2DS#)9?ljxGAD`=x;`V z004DB000F40nNzT!o=3uiO$l=&h}sT`8UWuUu5O`8DP3D)kHYqSH{>|bOa=_FxZ2M z=v~&s=_u=&)5t!!??>PrYeEl@xsWoXU{a6` z4$c;FWT0)g+TePU1>}&bSk8+BYTM?iB~~FXB#JTM*@O=(**fKzNScPmJ?PSD;F5Wx5y61=X5}7$&a# z-bPO4%92f@jLIXnIxVmw;k-9his!vkvWwIlxAq=>|9I(lhD07JS2a zFmd%A*VBQ%$7g^}q$Kg<-(13 zDbEj_KdJhWi0H^8Q22@$hDP7*LMRl{c9szdA z1oT1KS*~WC7_D2l;*)5tfkCA~28F&NP~iq0LMuv=vJSHq#X>sC=2leutQp`F;g^7< zV=JfHvBE1EK>w*Dr;-#G=WK_VwE`!u%ONAF`a@%?BEdr&@7&&`$eN59ZeqTfpZC4A zFq=nmLfB-CGAZuZ;W~2Mqr9Gaqvd4l9#pe=@YC3#l@GUAo}hzMEQ#VBbspf!jQ5_P z*_$P+YPwSTKl~Dx>-MDS+`P;{DJ;NnL%U^(4BloK&AqQn}g!-CMRtyU8`VVIbKWrvBX9Xc_- zh89ANCM=FizUooDKMZgCeL(3GU+U>0QG3x8g%C>NFnaTf7C&BpUTIo=8|$N$GR&mq zS2~KMnj*T(s4P@dve#EenxoA%NJDJx!tN}Ae^4w%ywT2%e7(pptR6;g#ih1~pEPw` ziT$xdm)6)VVtpEO^W;|F^Zp`RI^VQcyVXlGnnWgS3DC|Zq{E?|>~;)6>MHM(qGr;a73%iCMFu2r3NwHQ4K*{5VoA{dZIweOi zw4Fd}$ht#XNiBd9g18gXJzIm$1O?4_(eHshlXfWk(W_PjfTbmTDmn!NC=QL6VfE

EwW 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 literal 0 HcmV?d00001 diff --git a/analyticshub/appinfo/info.xml b/analyticshub/appinfo/info.xml index e6b209f..9ad369d 100644 --- a/analyticshub/appinfo/info.xml +++ b/analyticshub/appinfo/info.xml @@ -2,26 +2,17 @@ analyticshub Mini-CMO Analytics Hub -

AI-powered Google Analytics 4 reporting with automated daily reports - Nextcloud internal application for Google Analytics 4 monitoring with intelligent delta calculations and AI-generated client reports via Anthropic Claude API. - 1.0.0 + AI-powered Google Analytics 4 reporting with automated daily reports AGPL Shortcut Solutions + 1.0.0 AnalyticsHub - - - - - - - - - - - integration + + analyticshub.page.index + diff --git a/analyticshub/appinfo/routes.php b/analyticshub/appinfo/routes.php index 9102986..ba62553 100644 --- a/analyticshub/appinfo/routes.php +++ b/analyticshub/appinfo/routes.php @@ -10,7 +10,7 @@ namespace OCA\AnalyticsHub; return [ 'routes' => [ - // Admin route - use root path instead of /admin + // Admin route - use root path [ 'name' => 'page#index', 'url' => '/', diff --git a/analyticshub/lib/Controller/AdminController.php b/analyticshub/lib/Controller/AdminController.php deleted file mode 100644 index 0fcbbe3..0000000 --- a/analyticshub/lib/Controller/AdminController.php +++ /dev/null @@ -1,52 +0,0 @@ -appName = $appName; - $this->request = $request; - } - - /** - * Index page - simple render without TemplateResponse - * - * @NoAdminRequired - * @NoCSRFRequired - */ - public function index(): void { - echo ''; - echo ''; - echo ''; - echo 'Mini-CMO Analytics Hub'; - echo ''; - echo ''; - echo ''; - echo '

Mini-CMO Analytics Hub

'; - echo '

App Name: ' . htmlspecialchars($this->appName) . '

'; - echo '

Status: Controller is working!

'; - echo '

Route: ' . htmlspecialchars($this->request->getPathInfo()) . '

'; - echo '
'; - echo '

✅ Routing test successful!

'; - echo ''; - echo ''; - exit; - } -} diff --git a/analyticshub/lib/Controller/PageController.php b/analyticshub/lib/Controller/PageController.php new file mode 100644 index 0000000..cee3604 --- /dev/null +++ b/analyticshub/lib/Controller/PageController.php @@ -0,0 +1,64 @@ +appName = $appName; + $this->request = $request; + } + + /** + * Index page - simple render without TemplateResponse + * + * @NoAdminRequired + * @NoCSRFRequired + */ + public function index(): void { + echo ''; + echo ''; + echo ''; + echo ''; + echo 'Mini-CMO Analytics Hub'; + echo ''; + echo ''; + echo ''; + echo '

✅ Mini-CMO Analytics Hub

'; + echo '
Admin page is working!
'; + echo '

App Name: ' . htmlspecialchars($this->appName) . '

'; + echo '

Request Path: ' . htmlspecialchars($this->request->getPathInfo()) . '

'; + echo '

Status: Controller successfully resolved and executed.

'; + echo '
'; + echo '

The app routing is now working correctly. You can now build the full admin UI with TemplateResponse, forms, and all the features.

'; + echo '

Next steps:

'; + echo '
    '; + echo '
  • Replace this simple HTML with proper TemplateResponse
  • '; + echo '
  • Add configuration forms (Google Analytics, Claude API)
  • '; + echo '
  • Add save/load functionality
  • '; + echo '
  • Test end-to-end workflow
  • '; + echo '
'; + echo ''; + echo ''; + exit; + } +}