Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
12.31% covered (danger)
12.31%
8 / 65
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
WorkbookPageController
12.31% covered (danger)
12.31%
8 / 65
0.00% covered (danger)
0.00%
0 / 2
30.28
0.00% covered (danger)
0.00%
0 / 1
 pageWorkbook
10.00% covered (danger)
10.00%
4 / 40
0.00% covered (danger)
0.00%
0 / 1
9.56
 pageWorkspace
16.00% covered (danger)
16.00%
4 / 25
0.00% covered (danger)
0.00%
0 / 1
8.33
1<?php
2/**
3 * WorkbookPageController
4 *
5 * Handles rendering of the Workbook page and workspace views.
6 * This controller provides the main entry points for the Workbook dashboard.
7 */
8
9namespace BuyerKiosk\Workbook\Controllers;
10
11use BuyerKiosk\Core\Controllers\BaseController;
12
13class WorkbookPageController extends BaseController
14{
15    /**
16     * Render the main Workbook page
17     *
18     * GET /:typeNum/workbook/
19     *
20     * Uses the combined workspace template with activePage='workbook'
21     * to enable SPA-style navigation between Queue and Workbook.
22     *
23     * @param string $typeNum Store type number
24     */
25    public function pageWorkbook($typeNum)
26    {
27        $app = $this->_app;
28
29        // Check user has store access
30        if (!$app->user->checkStoreGroup($typeNum)) {
31            $app->notAuthorized();
32            return;
33        }
34
35        // Get store
36        $storeController = new \BuyerKiosk\StoreController($typeNum);
37        $store = $storeController->getStore();
38
39        if (!$store) {
40            $app->notFound();
41            return;
42        }
43
44        // Get store directory for CSS/asset paths (e.g., "PlatosCloset", "OnceUpon")
45        $storeDir = \getStoreDirectory($store);
46
47        // Get database connection for queue data
48        $db = \dbConnectByName($store->getDbName());
49
50        // Get queue data (needed for the combined template)
51        $BuyQueue = new \BuyQueue();
52        $BuyQueue->createStore($typeNum);
53        $queueItemArray = $BuyQueue->getAllCurrentQueueItems($db);
54
55        // Get completed buys data (needed for SPA navigation)
56        $completedBuysArray = \getCompletedBuysArray($store);
57
58        // Get breadcrumb data
59        $minutesPerContainer = $store->getMinutesPerContainer();
60
61        // Use combined workspace template with workbook active
62        $app->render('workspace/workspace.html', [
63            'page' => [
64                'title' => 'Workbook',
65                'typeNum' => $typeNum,
66                'storeType' => $storeDir,
67                'timeZone' => $store->getTimezone()
68            ],
69            'store' => $store,
70            'typeNum' => $typeNum,
71            'token' => $app->csrf_token,
72            'activePage' => 'workbook',  // This makes workbook view active
73            'user' => $app->user,
74            'ably_key' => $_ENV['ABLY_KEY'] ?? '',
75            'breadcrumb' => [
76                'storeType' => $store->getStoreType(),
77                'storeCity' => $store->getCity(),
78                'waitTime' => $minutesPerContainer
79            ],
80            'queue' => $queueItemArray,
81            'completedBuys' => $completedBuysArray,
82            'workbookEnabled' => true,
83            'activeTab' => 'workbook',
84            'enableQueueSignIn' => $store->getEnableQueueSignIn()
85        ]);
86    }
87
88    /**
89     * Render the combined workspace view (Queue + Workbook tabs)
90     *
91     * GET /:typeNum/workspace/
92     *
93     * @param string $typeNum Store type number
94     */
95    public function pageWorkspace($typeNum)
96    {
97        $app = $this->_app;
98
99        // Check user has store access
100        if (!$app->user->checkStoreGroup($typeNum)) {
101            $app->notAuthorized();
102            return;
103        }
104
105        // Get store
106        $storeController = new \BuyerKiosk\StoreController($typeNum);
107        $store = $storeController->getStore();
108
109        if (!$store) {
110            $app->notFound();
111            return;
112        }
113
114        // Get store directory for CSS/asset paths (e.g., "PlatosCloset", "OnceUpon")
115        $storeDir = \getStoreDirectory($store);
116
117        // Set page variables for workspace view
118        $app->render('workspace/workspace.html', [
119            'page' => [
120                'title' => 'Workspace',
121                'typeNum' => $typeNum,
122                'storeType' => $storeDir,
123                'timeZone' => $store->getTimezone()
124            ],
125            'store' => $store,
126            'typeNum' => $typeNum,
127            'token' => $app->csrf_token,
128            'activePage' => 'queue',  // Default view is queue when accessing workspace
129            'workbookEnabled' => true,  // TODO: Add isWorkbookEnabled() method to Store when feature flag is added
130            'user' => $app->user,
131            'ably_key' => $_ENV['ABLY_KEY'] ?? ''
132        ]);
133    }
134}