bootstrap.php 9.94 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
<?php
/**
 * gredu_labs.
 * 
 * @link https://github.com/eellak/gredu_labs for the canonical source repository
 *
 * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/)
 * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html
 */

11 12 13 14 15
use GrEduLabs\Schools\Action;
use GrEduLabs\Schools\InputFilter;
use GrEduLabs\Schools\Middleware;
use GrEduLabs\Schools\Service;

16 17 18
return function (Slim\App $app) {

    $container = $app->getContainer();
19
    $events    = $container['events'];
20

21
    $events('on', 'app.autoload', function ($autoloader) {
22 23
        $autoloader->addPsr4('GrEduLabs\\Schools\\', __DIR__ . '/src/');
    });
24

25
    $events('on', 'app.services', function ($container) {
26 27 28

        // actions

29 30
        $container[Action\Index::class] = function ($c) {
            return new Action\Index(
31 32 33 34
                $c->get('view'),
                $c->get(Service\StaffServiceInterface::class),
                $c->get(Service\LabServiceInterface::class),
                $c->get(Service\SchoolAssetsInterface::class)
35
            );
36
        };
37

38 39
        $container[Action\Staff\ListAll::class] = function ($c) {
            return new Action\Staff\ListAll(
40
                $c->get('view'),
41
                $c->get(Service\StaffServiceInterface::class)
42
            );
43
        };
44

45 46 47
        $container[Action\Staff\PersistTeacher::class] = function ($c) {
            return new Action\Staff\PersistTeacher(
                $c->get(Service\StaffServiceInterface::class)
48 49 50
            );
        };

51 52
        $container[Action\Staff\DeleteTeacher::class] = function ($c) {
            return new Action\Staff\DeleteTeacher(
53 54
                $c->get(Service\StaffServiceInterface::class),
                $c->get('logger')
55
            );
56
        };
57

58
        $container[Action\Lab\ListAll::class] = function ($c) {
59 60
            return new GrEduLabs\Schools\Action\Lab\ListAll(
                $c->get('view'),
61 62
                $c->get(Service\LabServiceInterface::class),
                $c->get(Service\StaffServiceInterface::class)
63
            );
64
        };
65

66
        $container[Action\Lab\PersistLab::class] = function ($c) {
67
            return new Action\Lab\PersistLab(
68
                 $c->get(Service\LabServiceInterface::class)
69
            );
70
        };
71

72 73 74 75 76 77
        $container[Action\Lab\DeleteLab::class] = function ($c) {
            return new Action\Lab\DeleteLab(
                $c->get(Service\LabServiceInterface::class)
            );
        };

kanellov's avatar
kanellov committed
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
        $container[Action\Lab\DownloadAttachment::class] = function ($c) {
            $settings = $c->get('settings');
            $uploadTargetPath = $settings['schools']['file_upload']['target_path'];

            return new Action\Lab\DownloadAttachment(
                $c->get(Service\LabServiceInterface::class),
                $uploadTargetPath
            );
        };

        $container[Action\Lab\RemoveAttachment::class] = function ($c) {
            return new Action\Lab\RemoveAttachment(
                $c->get(Service\LabServiceInterface::class)
            );
        };

94
        $container[Action\Assets\ListAssets::class] = function ($c) {
95 96
            $settings = $c->get('settings');
            $currentVersion = $settings['application_form']['itemcategory']['currentversion'];
97
            return new Action\Assets\ListAssets(
98
                $c->get('view'),
99 100
                $c->get(Service\AssetServiceInterface::class),
                $c->get(Service\SchoolAssetsInterface::class),
101 102
                $c->get(Service\LabServiceInterface::class),
                $currentVersion
103 104 105
            );
        };

106 107 108
        $container[Action\Assets\PersistAsset::class] = function ($c) {
            return new Action\Assets\PersistAsset(
                $c->get(Service\SchoolAssetsInterface::class)
109 110 111
            );
        };

112 113 114
        $container[Action\Assets\DeleteAsset::class] = function ($c) {
            return new Action\Assets\DeleteAsset(
                $c->get(Service\SchoolAssetsInterface::class)
115
            );
116
        };
117

Georgios Tsakalos's avatar
Georgios Tsakalos committed
118 119 120
        $container[Action\Software\ListAll::class] = function ($c) {
            return new Action\Software\ListAll(
                $c->get('view'),
121 122
                $c->get(Service\SoftwareServiceInterface::class),
                $c->get(Service\LabServiceInterface::class)
Georgios Tsakalos's avatar
Georgios Tsakalos committed
123 124 125
            );
        };

126 127 128 129 130 131
        $container[Action\Software\PersistSoftware::class] = function ($c) {
            return new Action\Software\PersistSoftware(
                $c->get(Service\SoftwareServiceInterface::class)
            );
        };

Georgios Tsakalos's avatar
Georgios Tsakalos committed
132
        $container[Action\Software\DeleteSoftware::class] = function ($c) {
133 134 135 136 137
            return new Action\Software\DeleteSoftware(
                $c->get(Service\SoftwareServiceInterface::class)
            );
        };

138 139
        // services

kanellov's avatar
kanellov committed
140
        $container['schoolservice'] = function ($c) {
141
            return $c->get(Service\SchoolServiceInterface::class);
142 143
        };

144
        $container['staffservice'] = function ($c) {
145
            return $c->get(Service\StaffServiceInterface::class);
146 147 148
        };

        $container['labservice'] = function ($c) {
149
            return $c->get(Service\LabServiceInterface::class);
150 151
        };

152 153
        $container[Service\SchoolServiceInterface::class] = function ($c) {
            return new Service\SchoolService();
154 155
        };

156 157
        $container[Service\StaffServiceInterface::class] = function ($c) {
            return new Service\StaffService();
158 159
        };

160
        $container[Service\LabServiceInterface::class] = function ($c) {
kanellov's avatar
kanellov committed
161 162 163 164
            $settings = $c->get('settings');
            $uploadTargetPath = $settings['schools']['file_upload']['target_path'];

            return new Service\LabService($uploadTargetPath);
165 166
        };

Georgios Tsakalos's avatar
Georgios Tsakalos committed
167 168 169 170
        $container[Service\SoftwareServiceInterface::class] = function ($c) {
            return new Service\SoftwareService();
        };

171 172
        $container[Service\AssetServiceInterface::class] = function ($c) {
            return new Service\AssetService();
173 174
        };

175 176
        $container[Service\SchoolAssetsInterface::class] = function ($c) {
            return $c->get(Service\AssetServiceInterface::class);
177 178 179 180
        };

        // middleware 

181 182 183
        $container[Middleware\InputFilterTeacher::class] = function ($c) {
            return new Middleware\InputFilterTeacher(
                $c->get(InputFilter\Teacher::class)
kanellov's avatar
kanellov committed
184
            );
185 186
        };

187 188 189 190 191 192
        $container[Middleware\InputFilterLab::class] = function ($c) {
            return new Middleware\InputFilterLab(
                $c->get(InputFilter\Lab::class)
            );
        };

193 194 195
        $container[Middleware\InputFilterSchoolAsset::class] = function ($c) {
            return new Middleware\InputFilterSchoolAsset(
                $c->get(InputFilter\SchoolAsset::class)
kanellov's avatar
kanellov committed
196 197 198
            );
        };

199 200 201 202 203 204
        $container[Middleware\InputFilterSoftware::class] = function ($c) {
            return new Middleware\InputFilterSoftware(
                $c->get(InputFilter\Software::class)
            );
        };

205 206
        $container[Middleware\FetchSchoolFromIdentity::class] = function ($c) {
            return new Middleware\FetchSchoolFromIdentity($c['authentication_service']);
207
        };
208

209 210
        // inputfilters

211 212 213 214 215 216 217 218 219
        $container[InputFilter\Teacher::class] = function ($c) {
            return new InputFilter\Teacher();
        };

        $container[InputFilter\SchoolAsset::class] = function ($c) {
            return new InputFilter\SchoolAsset(
                $c->get(Service\LabServiceInterface::class),
                $c->get(Service\AssetServiceInterface::class)
            );
220 221
        };

222 223 224
        $container[InputFilter\School::class] = function ($c) {
            return new InputFilter\School(
                $c->get(Service\SchoolServiceInterface::class)
225 226 227
            );
        };

228
        $container[InputFilter\Lab::class] = function ($c) {
229
            $settings = $c->get('settings');
kanellov's avatar
kanellov committed
230
            $uploadTmpPath = $settings['schools']['file_upload']['tmp_path'];
231
            $attachmentSize = $settings['schools']['file_upload']['max_size'];
kanellov's avatar
kanellov committed
232

233
            return new InputFilter\Lab(
kanellov's avatar
kanellov committed
234
                $uploadTmpPath,
235 236
                $c->get(Service\LabServiceInterface::class),
                $attachmentSize
237
            );
238 239
        };

240 241 242 243
        $container[InputFilter\Software::class] = function ($c) {
            return new InputFilter\Software();
        };

244
    });
245

246
    $events('on', 'app.bootstrap', function ($app, $container) {
247 248
        $container['view']->getEnvironment()->getLoader()->prependPath(__DIR__ . '/templates');

249
        $app->group('/school', function () {
250

251
            $this->get('', Action\Index::class)->setName('school');
252

253 254 255 256
            $this->get('/staff', Action\Staff\ListAll::class)->setName('school.staff');
            $this->post('/staff', Action\Staff\PersistTeacher::class)
                ->add(Middleware\InputFilterTeacher::class);
            $this->delete('/staff', Action\Staff\DeleteTeacher::class);
257

258
            $this->get('/labs', Action\Lab\ListAll::class)->setName('school.labs');
kanellov's avatar
kanellov committed
259
            $this->post('/labs', Action\Lab\PersistLab::class)
260
                ->add(Middleware\InputFilterLab::class);
261
            $this->delete('/labs', Action\Lab\DeleteLab::class);
kanellov's avatar
kanellov committed
262 263 264
            $this->get('/labs/attachment', Action\Lab\DownloadAttachment::class)
                ->setName('school.labs.attachment');
            $this->delete('/labs/attachment', Action\Lab\RemoveAttachment::class);
265

266 267 268 269
            $this->get('/assets', Action\Assets\ListAssets::class)->setName('school.assets');
            $this->post('/assets', Action\Assets\PersistAsset::class)
                ->add(Middleware\InputFilterSchoolAsset::class);
            $this->delete('/assets', Action\Assets\DeleteAsset::class);
270

Georgios Tsakalos's avatar
Georgios Tsakalos committed
271
            $this->get('/software', Action\Software\ListAll::class)->setName('school.software');
272 273
            $this->post('/software', Action\Software\PersistSoftware::class)
                ->add(Middleware\InputFilterSoftware::class);
274
            $this->delete('/software', Action\Software\DeleteSoftware::class);
Georgios Tsakalos's avatar
Georgios Tsakalos committed
275

276
        })->add(Middleware\FetchSchoolFromIdentity::class);
kanellov's avatar
kanellov committed
277
    });
278
};