DirectorView.php 44.4 KB
Newer Older
Open Source Developer's avatar
transf  
Open Source Developer committed
1 2 3 4 5 6 7 8 9 10
<?php

namespace Drupal\epal\Controller;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
Open Source Developer's avatar
trans  
Open Source Developer committed
11
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
12
use Drupal\Core\Database\Connection;
Open Source Developer's avatar
transf  
Open Source Developer committed
13

14 15
use Drupal\epal\Crypt;

Open Source Developer's avatar
transf  
Open Source Developer committed
16 17 18
class DirectorView extends ControllerBase
{
    protected $entityTypeManager;
19
    protected $logger;
20
    protected $connection;
Open Source Developer's avatar
transf  
Open Source Developer committed
21

22 23
    public function __construct(
        EntityTypeManagerInterface $entityTypeManager,
24
        Connection $connection,
25 26
        LoggerChannelFactoryInterface $loggerChannel
    ) {
Open Source Developer's avatar
transf  
Open Source Developer committed
27
        $this->entityTypeManager = $entityTypeManager;
28
        $this->connection = $connection;
29
        $this->logger = $loggerChannel->get('epal-school');
Open Source Developer's avatar
transf  
Open Source Developer committed
30 31 32 33 34
    }

    public static function create(ContainerInterface $container)
    {
        return new static(
35
            $container->get('entity_type.manager'),
36
            $container->get('database'),
37
            $container->get('logger.factory')
Open Source Developer's avatar
transf  
Open Source Developer committed
38
        );
39
    }
Open Source Developer's avatar
transf  
Open Source Developer committed
40

Open Source Developer's avatar
Open Source Developer committed
41
    public function getStudentPerSchool(Request $request, $classId, $sector, $specialit)
Open Source Developer's avatar
trans  
Open Source Developer committed
42
    {
43
        try {
44
            $authToken = $request->headers->get('PHP_AUTH_USER');
Open Source Developer's avatar
Open Source Developer committed
45

46 47 48 49 50 51 52 53 54 55 56
            $epalConfigs = $this->entityTypeManager->getStorage('epal_config')->loadByProperties(array('name' => 'epal_config'));
            $epalConfig = reset($epalConfigs);
            if (!$epalConfig) {
                return $this->respondWithStatus([
                        "error_code" => 3001
                    ], Response::HTTP_FORBIDDEN);
            }
            if ($epalConfig->lock_students->value) {
                return $this->respondWithStatus([
                        "error_code" => 3002
                    ], Response::HTTP_FORBIDDEN);
Open Source Developer's avatar
Open Source Developer committed
57 58
            }

59 60 61 62 63 64 65 66 67 68 69
            $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
            $user = reset($users);
            if ($user) {
                $epalId = $user->init->value;
                $schools = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $epalId));
                $school = reset($schools);
                if (!$school) {
                    $this->logger->warning('no access to this school='.$user->id());
                    return $this->respondWithStatus([
                        "message" => "No access to this school"
                    ], Response::HTTP_FORBIDDEN);
Open Source Developer's avatar
Open Source Developer committed
70
                }
71

72 73 74 75 76 77
                $userRoles = $user->getRoles();
                $userRole = '';
                foreach ($userRoles as $tmpRole) {
                    if ($tmpRole === 'epal') {
                        $userRole = $tmpRole;
                    }
78
                }
79 80
                if ($userRole === '') {
                    return $this->respondWithStatus([
Open Source Developer's avatar
Open Source Developer committed
81 82
                             'error_code' => 4003,
                         ], Response::HTTP_FORBIDDEN);
83 84
                } elseif ($userRole === 'epal') {
                    if ($classId == 1) {
Open Source Developer's avatar
Open Source Developer committed
85
                        $selectIdNew = -1;
86
                    } elseif ($classId == 2) {
Open Source Developer's avatar
Open Source Developer committed
87
                        $selectIdNew = $sector;
88
                    } else {
Open Source Developer's avatar
Open Source Developer committed
89
                        $selectIdNew = $specialit;
90
                    }
Open Source Developer's avatar
bug  
Open Source Developer committed
91
                    $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $epalId, 'specialization_id' => $selectIdNew, 'currentclass' => $classId));
92 93 94 95
                }
                if ($studentPerSchool) {
                    $list = array();
                    foreach ($studentPerSchool as $object) {
96
                        $studentId = $object->student_id->target_id;
97 98
                        $epalStudents = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('id' => $studentId));
                        $epalStudent = reset($epalStudents);
99 100 101 102 103 104 105 106 107 108 109
                        if ($epalStudents) {
                            $studentIdNew = $epalStudent->id();
                            $checkstatus = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('student_id' => $studentIdNew));
                            $checkstudentstatus = reset($checkstatus);
                            $sectorName = '';
                            $courseName = '';
                            if ($epalStudent->currentclass->value === '2') {
                                $sectors = $this->entityTypeManager->getStorage('epal_student_sector_field')->loadByProperties(array('student_id' => $studentIdNew));
                                $sector = reset($sectors);
                                if ($sector) {
                                    $sectorName = $this->entityTypeManager->getStorage('eepal_sectors')->load($sector->sectorfield_id->target_id)->name->value;
Open Source Developer's avatar
Open Source Developer committed
110
                                }
111 112 113 114 115
                            } elseif ($epalStudent->currentclass->value === '3' || $epalStudent->currentclass->value === '4') {
                                $courses = $this->entityTypeManager->getStorage('epal_student_course_field')->loadByProperties(array('student_id' => $studentIdNew));
                                $course = reset($courses);
                                if ($course) {
                                    $courseName = $this->entityTypeManager->getStorage('eepal_specialty')->load($course->coursefield_id->target_id)->name->value;
Open Source Developer's avatar
Open Source Developer committed
116
                                }
117 118
                            }

119
                            $crypt = new Crypt();
120 121 122 123 124 125 126 127
                            try {
                                $name_decoded = $crypt->decrypt($epalStudent->name->value);
                                $studentsurname_decoded = $crypt->decrypt($epalStudent->studentsurname->value);
                                $fatherfirstname_decoded = $crypt->decrypt($epalStudent->fatherfirstname->value);
                                $motherfirstname_decoded = $crypt->decrypt($epalStudent->motherfirstname->value);
                                $regionaddress_decoded = $crypt->decrypt($epalStudent->regionaddress->value);
                                $regiontk_decoded = $crypt->decrypt($epalStudent->regiontk->value);
                                $regionarea_decoded = $crypt->decrypt($epalStudent->regionarea->value);
128
                                // $certificatetype_decoded = $crypt->decrypt($epalStudent->certificatetype->value); // obsolete
129 130 131 132 133 134 135 136 137 138 139 140 141
                                $relationtostudent_decoded = $crypt->decrypt($epalStudent->relationtostudent->value);
                                $telnum_decoded = $crypt->decrypt($epalStudent->telnum->value);
                                $guardian_name_decoded = $crypt->decrypt($epalStudent->guardian_name->value);
                                $guardian_surname_decoded = $crypt->decrypt($epalStudent->guardian_surname->value);
                                $guardian_fathername_decoded = $crypt->decrypt($epalStudent->guardian_fathername->value);
                                $guardian_mothername_decoded = $crypt->decrypt($epalStudent->guardian_mothername->value);
                            } catch (\Exception $e) {
                                $this->logger->warning(__METHOD__ . ' Decrypt error: ' . $e->getMessage());
                                return $this->respondWithStatus([
                                "message" => t("An unexpected error occured during DECODING data in getStudentPerSchool Method ")
                                ], Response::HTTP_INTERNAL_SERVER_ERROR);
                            }

142
                            $list[] = array(
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
                                'id' => $epalStudent->id(),
                                'name' => $name_decoded,
                                'studentsurname' => $studentsurname_decoded,
                                'fatherfirstname' => $fatherfirstname_decoded,
                                'motherfirstname' => $motherfirstname_decoded,
                                'guardian_name' => $guardian_name_decoded,
                                'guardian_surname' => $guardian_surname_decoded,
                                'guardian_fathername' => $guardian_fathername_decoded,
                                'guardian_mothername' => $guardian_mothername_decoded,
                                'lastschool_schoolname' => $epalStudent->lastschool_schoolname->value,
                                'lastschool_schoolyear' => $epalStudent->lastschool_schoolyear->value,
                                'lastschool_class' => $epalStudent->lastschool_class->value,
                                'currentclass' =>$epalStudent -> currentclass ->value,
                                'currentsector' =>$sectorName,
                                'currentcourse' =>$courseName,
                                'regionaddress' => $regionaddress_decoded,
                                'regiontk' => $regiontk_decoded,
                                'regionarea' => $regionarea_decoded,
161
                                'certificatetype' => '', // $certificatetype_decoded, // obsolete
162 163 164 165 166 167 168 169 170 171 172 173
                                'graduation_year' => $epalStudent->graduation_year->value,
                                'telnum' => $telnum_decoded,
                                'relationtostudent' => $relationtostudent_decoded,
                                //'birthdate' => substr($epalStudent->birthdate->value, 8, 10) . '/' . substr($epalStudent->birthdate->value, 6, 8) . '/' . substr($epalStudent->birthdate->value, 0, 4),
                                'birthdate' => date("d-m-Y", strtotime($epalStudent->birthdate->value)),
                                'checkstatus' => $checkstudentstatus -> directorconfirm ->value,
                                'created' => date('d/m/Y H:i', $epalStudent -> created ->value),

                            );
                        }
                    }
                    return $this->respondWithStatus(
Open Source Developer's avatar
Open Source Developer committed
174
                     $list, Response::HTTP_OK);
175 176
                } else {
                       return $this->respondWithStatus([
Open Source Developer's avatar
Open Source Developer committed
177
                    'message' => t('Students not found!'),
178 179 180 181 182
                        ], Response::HTTP_FORBIDDEN);
                }
            } else {
                return $this->respondWithStatus([
                'message' => t('User not found!'),
Open Source Developer's avatar
trans  
Open Source Developer committed
183
                ], Response::HTTP_FORBIDDEN);
184
            }
185 186
        } catch (\Exception $e) {
            $this->logger->warning($e->getMessage());
187
            return $this->respondWithStatus([
188
            'message' => t('Unexpected Error'),
189
            ], Response::HTTP_FORBIDDEN);
190
        }
Open Source Developer's avatar
Open Source Developer committed
191
    }
Open Source Developer's avatar
changes  
Open Source Developer committed
192

Open Source Developer's avatar
trans  
Open Source Developer committed
193 194 195
    public function ConfirmStudents(Request $request)
    {
        if (!$request->isMethod('POST')) {
196
            return $this->respondWithStatus(['message' => t('Method Not Allowed')], Response::HTTP_METHOD_NOT_ALLOWED);
Open Source Developer's avatar
trans  
Open Source Developer committed
197 198
        }

199
        $authToken = $request->headers->get('PHP_AUTH_USER');
200
        $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
201 202 203 204 205 206 207
        $user = reset($users);
        if ($user) {
            $userRoles = $user->getRoles();
            $userRole = '';
            foreach ($userRoles as $tmpRole) {
                if ($tmpRole === 'epal') {
                    $userRole = $tmpRole;
Open Source Developer's avatar
Open Source Developer committed
208
                }
209
            }
210
            if ($userRole === 'epal') {
211 212 213 214
                if ($content = $request->getContent()) {
                    $postData = json_decode($content);
                    $arr = $postData->students;
                    $type = $postData->type;
Open Source Developer's avatar
Open Source Developer committed
215 216
                    $valnew = intval($arr);
                    $typen = intval($type);
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
                    $studentForConfirm = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(['student_id' => $valnew]);
                    $studentConfirm = reset($studentForConfirm);
                    if ($studentConfirm) {
                        if ($typen === 1) {
                            $studentConfirm->set('directorconfirm', 1);
                            $studentConfirm->save();
                            return $this->respondWithStatus(['message' => t('saved')], Response::HTTP_OK);
                        } elseif ($typen === 2) {
                            $studentConfirm->set('directorconfirm', 0);
                            $studentConfirm->save();
                            return $this->respondWithStatus(['message' => t('saved')], Response::HTTP_OK);
                        } elseif ($typen === 3) {
                            unset($studentConfirm->{directorconfirm});
                            $studentConfirm->save();
                            return $this->respondWithStatus(['message' => t('saved')], Response::HTTP_OK);
                        } else {
                            return $this->respondWithStatus(['message' => t('Bad request')], Response::HTTP_FORBIDDEN);
Open Source Developer's avatar
Open Source Developer committed
234
                        }
235 236 237 238 239
                    } else {
                        return $this->respondWithStatus(['message' => t('Student not found')], Response::HTTP_FORBIDDEN);
                    }
                } else {
                    return $this->respondWithStatus(['message' => t('post with no data')], Response::HTTP_BAD_REQUEST);
Open Source Developer's avatar
trans  
Open Source Developer committed
240 241
                }
            } else {
242
                return $this->respondWithStatus(['error_code' => 4003], Response::HTTP_FORBIDDEN);
243 244
            }
        } else {
245
            return $this->respondWithStatus(['message' => t('EPAL user not found')], Response::HTTP_FORBIDDEN);
Open Source Developer's avatar
trans  
Open Source Developer committed
246 247 248
        }
    }

249
    public function SaveCapacity(Request $request, $taxi, $tomeas, $specialit)
Open Source Developer's avatar
Open Source Developer committed
250 251
    {
        if (!$request->isMethod('POST')) {
252
            return $this->respondWithStatus([
253
                    'message' => t('Method Not Allowed'),
Open Source Developer's avatar
Open Source Developer committed
254 255 256 257
                ], Response::HTTP_METHOD_NOT_ALLOWED);
        }
        $authToken = $request->headers->get('PHP_AUTH_USER');

258 259 260 261 262 263 264 265 266 267 268 269 270
        $epalConfigs = $this->entityTypeManager->getStorage('epal_config')->loadByProperties(array('name' => 'epal_config'));
        $epalConfig = reset($epalConfigs);
        if (!$epalConfig) {
            return $this->respondWithStatus([
                    "error_code" => 3001
                ], Response::HTTP_FORBIDDEN);
        }
        if ($epalConfig->lock_capacity->value) {
            return $this->respondWithStatus([
                    "error_code" => 3002
                ], Response::HTTP_FORBIDDEN);
        }

271
        $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
        $user = reset($users);
        if ($user) {
            $schoolid = $user->init->value;
            $schools = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid));
            $school = reset($schools);
            if (!$school) {
                $this->logger->warning('no access to this school='.$user->id());
                $response = new Response();
                $response->setContent('No access to this school');
                $response->setStatusCode(Response::HTTP_FORBIDDEN);
                $response->headers->set('Content-Type', 'application/json');

                return $response;
            }
            $userRoles = $user->getRoles();
            $userRole = '';
            foreach ($userRoles as $tmpRole) {
                if ($tmpRole === 'epal') {
                    $userRole = $tmpRole;
Open Source Developer's avatar
Open Source Developer committed
291
                }
292 293 294
            }
            if ($userRole === '') {
                return $this->respondWithStatus([
Open Source Developer's avatar
Open Source Developer committed
295 296
                             'error_code' => 4003,
                         ], Response::HTTP_FORBIDDEN);
297 298
            } elseif ($userRole === 'epal') {
                $postData = null;
Open Source Developer's avatar
Open Source Developer committed
299

300 301 302 303 304 305
                if ($content = $request->getContent()) {
                    $postData = json_decode($content);
                    $cap = $postData->capacity;
                    if ($cap <= 0 || $cap > 99) {
                        return $this->respondWithStatus([
                            'message' => t('Number out of limits!'),
Open Source Developer's avatar
Open Source Developer committed
306
                        ], Response::HTTP_BAD_REQUEST);
307
                    }
Open Source Developer's avatar
Open Source Developer committed
308

309 310 311 312 313 314
                    if (($tomeas == 0) && ($specialit == 0)) {
                        $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid));
                        $classcapacity = reset($CapacityPerClass);
                        if ($classcapacity) {
                            $classcapacity->set('capacity_class_a', $cap);
                            $classcapacity->save();
Open Source Developer's avatar
Open Source Developer committed
315
                        }
316
                    }
Open Source Developer's avatar
Open Source Developer committed
317

318 319 320 321 322 323
                    if (($tomeas != 0) && ($specialit == 0)) {
                        $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')->loadByProperties(array('epal_id' => $schoolid, 'sector_id' => $tomeas));
                        $classcapacity = reset($CapacityPerClass);
                        if ($classcapacity) {
                            $classcapacity->set('capacity_class_sector', $cap);
                            $classcapacity->save();
Open Source Developer's avatar
Open Source Developer committed
324
                        }
325
                    }
Open Source Developer's avatar
Open Source Developer committed
326

327 328 329 330 331 332
                    if (($specialit != 0) && ($taxi == 3)) {
                        $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid, 'specialty_id' => $specialit));
                        $classcapacity = reset($CapacityPerClass);
                        if ($classcapacity) {
                            $classcapacity->set('capacity_class_specialty', $cap);
                            $classcapacity->save();
Open Source Developer's avatar
Open Source Developer committed
333
                        }
334
                    }
Open Source Developer's avatar
Open Source Developer committed
335

336 337 338 339 340 341 342 343
                    if (($specialit != 0) && ($taxi == 4)) {
                        $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid, 'specialty_id' => $specialit));
                        $classcapacity = reset($CapacityPerClass);
                        if ($classcapacity) {
                            $classcapacity->set('capacity_class_specialty_d', $cap);
                            $classcapacity->save();
                        }
                    }
Open Source Developer's avatar
Open Source Developer committed
344

345 346
                    return $this->respondWithStatus([
                            'message' => t('saved'),
Open Source Developer's avatar
Open Source Developer committed
347
                        ], Response::HTTP_OK);
Open Source Developer's avatar
Open Source Developer committed
348 349
                }
            } else {
350 351 352 353 354
                return $this->respondWithStatus([
                    'message' => t('post with no data'),
                ], Response::HTTP_BAD_REQUEST);
            }
        } else {
Open Source Developer's avatar
Open Source Developer committed
355
            return $this->respondWithStatus([
356
                    'message' => t('EPAL user not found'),
Open Source Developer's avatar
Open Source Developer committed
357 358 359 360
                ], Response::HTTP_FORBIDDEN);
        }
    }

361
    public function getSchools(Request $request)
Open Source Developer's avatar
trans  
Open Source Developer committed
362 363 364 365 366
    {
        $authToken = $request->headers->get('PHP_AUTH_USER');

        $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
        $user = reset($users);
367 368 369 370 371 372 373
        if ($user) {
            $selectionId = $user->init->value;
            $userRoles = $user->getRoles();
            $userRole = '';
            foreach ($userRoles as $tmpRole) {
                if (($tmpRole === 'epal') || ($tmpRole === 'regioneduadmin') || ($tmpRole === 'eduadmin')) {
                    $userRole = $tmpRole;
374
                }
375 376 377
            }
            if ($userRole === '') {
                return $this->respondWithStatus([
378
                    'error_code' => 4003,
Open Source Developer's avatar
ch  
Open Source Developer committed
379
                    "message" => t("1")
380
                ], Response::HTTP_FORBIDDEN);
381
            } elseif ($userRole === 'regioneduadmin') {
382 383 384
                $schools = $this->entityTypeManager
                    ->getStorage('eepal_school')
                    ->loadByProperties(array('region_edu_admin_id' => $selectionId));
385
            } elseif ($userRole === 'eduadmin') {
386 387 388 389 390
                $schools = $this->entityTypeManager
                    ->getStorage('eepal_school')
                    ->loadByProperties(array('edu_admin_id' => $selectionId));
            } else {
                $schools = [];
391 392 393
            }
            if ($schools) {
                $list = array();
Open Source Developer's avatar
Open Source Developer committed
394

395 396 397
                foreach ($schools as $object) {
                    $status = $this->returnstatus($object->id());
                    $list[] = array(
398 399 400 401
                        'id' => $object->id(),
                        'name' => $object->name->value,
                        'status' => $status,
                    );
Open Source Developer's avatar
trans  
Open Source Developer committed
402 403
                }

404
                return $this->respondWithStatus($list, Response::HTTP_OK);
405 406
            } else {
                return $this->respondWithStatus([
407 408
                    'message' => t('No schools found!'),
                ], Response::HTTP_FORBIDDEN);
Open Source Developer's avatar
trans  
Open Source Developer committed
409
            }
410 411
        } else {
            return $this->respondWithStatus([
412 413
                'message' => t('User not found!'),
            ], Response::HTTP_FORBIDDEN);
414
        }
Open Source Developer's avatar
trans  
Open Source Developer committed
415 416
    }

Open Source Developer's avatar
trans  
Open Source Developer committed
417 418
    public function getCoursesPerSchool(Request $request, $schoolid)
    {
419
        $authToken = $request->headers->get('PHP_AUTH_USER');
Open Source Developer's avatar
trans  
Open Source Developer committed
420 421 422

        $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
        $user = reset($users);
423 424 425 426 427 428 429
        if ($user) {
            $newid = $user->init->value;
            $userRoles = $user->getRoles();
            $userRole = '';
            foreach ($userRoles as $tmpRole) {
                if (($tmpRole === 'regioneduadmin') || ($tmpRole === 'eduadmin')) {
                    $userRole = $tmpRole;
Open Source Developer's avatar
Open Source Developer committed
430
                }
431 432 433
            }
            if ($userRole === '') {
                return $this->respondWithStatus([
434 435
                    'error_code' => 4003,
                ], Response::HTTP_FORBIDDEN);
436
            } elseif ($userRole === 'regioneduadmin') {
437 438
                $SchoolCats = $this->entityTypeManager->getStorage('eepal_school')
                    ->loadByProperties(array('id' => $schoolid, 'region_edu_admin_id' => $newid));
439
            } elseif ($userRole === 'eduadmin') {
440 441
                $SchoolCats = $this->entityTypeManager->getStorage('eepal_school')
                    ->loadByProperties(array('id' => $schoolid, 'edu_admin_id' => $newid));
442
            }
Open Source Developer's avatar
Open Source Developer committed
443

444 445 446
            $SchoolCat = reset($SchoolCats);
            if ($SchoolCat) {
                $categ = $SchoolCat->metathesis_region->value;
447
                $operation_shift = $SchoolCat->operation_shift->value;
Open Source Developer's avatar
Open Source Developer committed
448
                $capacity_class_a = ($SchoolCat -> capacity_class_a ->value) *25;
449 450 451 452
            } else {
                return $this->respondWithStatus([
                    'message' => t('No school located'),
                ], Response::HTTP_FORBIDDEN);
453
            }
Open Source Developer's avatar
bugs  
Open Source Developer committed
454

455 456 457 458
            $list = array();
            $limit = -1;
            $CourseA = $this->entityTypeManager->getStorage('eepal_school')
                ->loadByProperties(array('id' => $schoolid));
459
            if ($CourseA) {
460 461
                $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')
                    ->loadByProperties(array('name' => 1, 'category' => $categ));
462 463 464
                $limitdown = reset($limit_down);
                if ($limitdown) {
                    $limit = $limitdown->limit_down->value;
465 466
                } else {
                    $limit = -1;
Open Source Developer's avatar
trans  
Open Source Developer committed
467
                }
468 469
                $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')
                    ->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => -1, 'currentclass' => 1));
470 471 472
                $list = array();
                foreach ($CourseA as $object) {
                    $list[] = array(
473 474 475 476 477 478
                        'id' => '1',
                        'name' => 'Α Λυκείου',
                        'size' => sizeof($studentPerSchool),
                        'categ' => $categ,
                        'classes' => 1,
                        'limitdown' => $limit,
Open Source Developer's avatar
Open Source Developer committed
479 480
                         'capc' => $capacity_class_a,

481
                    );
482 483
                }
            }
484

485 486
            $CourseB = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')
                ->loadByProperties(array('epal_id' => $schoolid));
487
            if ($CourseB) {
488 489
                $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')
                    ->loadByProperties(array('name' => 2, 'category' => $categ));
490 491 492
                $limitdown = reset($limit_down);
                if ($limitdown) {
                    $limit = $limitdown->limit_down->value;
493 494
                } else {
                    $limit = -1;
495
                }
Open Source Developer's avatar
Open Source Developer committed
496

497 498
                foreach ($CourseB as $object) {
                    $sectorid = $object->sector_id->entity->id();
Open Source Developer's avatar
Open Source Developer committed
499
                    $capacity_class_b = ($object -> capacity_class_sector ->value) *25;
500 501
                    $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')
                        ->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $sectorid, 'currentclass' => 2));
502
                    $list[] = array(
503 504 505 506 507 508
                        'id' => $object->sector_id->entity->id(),
                        'name' => 'Β Λυκείου  '.$object->sector_id->entity->get('name')->value,
                        'size' => sizeof($studentPerSchool),
                        'categ' => $categ,
                        'classes' => 2,
                        'limitdown' => $limit,
Open Source Developer's avatar
Open Source Developer committed
509 510
                        'capc' => $capacity_class_b,

511
                    );
Open Source Developer's avatar
trans  
Open Source Developer committed
512
                }
513
            }
514 515
            $CourseC = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')
                ->loadByProperties(array('epal_id' => $schoolid));
516
            if ($CourseC) {
517 518
                $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')
                    ->loadByProperties(array('name' => 3, 'category' => $categ));
519 520 521
                $limitdown = reset($limit_down);
                if ($limitdown) {
                    $limit = $limitdown->limit_down->value;
522 523
                } else {
                    $limit = -1;
524
                }
Open Source Developer's avatar
Open Source Developer committed
525

526 527
                foreach ($CourseC as $object) {
                    $specialityid = $object->specialty_id->entity->id();
Open Source Developer's avatar
Open Source Developer committed
528
                    $capacity_class_c = ($object -> capacity_class_specialty ->value) *25;
529 530
                    $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')
                        ->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $specialityid, 'currentclass' => 3));
531
                    $list[] = array(
532 533 534 535 536 537
                        'id' => $object->specialty_id->entity->id(),
                        'name' => 'Γ Λυκείου  '.$object->specialty_id->entity->get('name')->value,
                        'size' => sizeof($studentPerSchool),
                        'categ' => $categ,
                        'classes' => 3,
                        'limitdown' => $limit,
Open Source Developer's avatar
Open Source Developer committed
538 539
                        'capc' => $capacity_class_c,

540
                    );
Open Source Developer's avatar
trans  
Open Source Developer committed
541
                }
542
            }
543
            if ($CourseC && $operation_shift != 'ΗΜΕΡΗΣΙΟ') {
544 545
                $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')
                    ->loadByProperties(array('name' => 4, 'category' => $categ));
Open Source Developer's avatar
trans  
Open Source Developer committed
546 547 548
                $limitdown = reset($limit_down);
                if ($limitdown) {
                    $limit = $limitdown->limit_down->value;
549 550
                } else {
                    $limit = -1;
Open Source Developer's avatar
trans  
Open Source Developer committed
551 552 553 554
                }

                foreach ($CourseC as $object) {
                    $specialityid = $object->specialty_id->entity->id();
555 556
                    $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')
                        ->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $specialityid, 'currentclass' => 4));
557
                      $capacity_class_d = ($object -> capacity_class_specialty_d ->value) *25;
Open Source Developer's avatar
trans  
Open Source Developer committed
558
                    $list[] = array(
559 560 561 562 563 564
                        'id' => $object->specialty_id->entity->id(),
                        'name' => 'Δ Λυκείου  '.$object->specialty_id->entity->get('name')->value,
                        'size' => sizeof($studentPerSchool),
                        'categ' => $categ,
                        'classes' => 4,
                        'limitdown' => $limit,
Open Source Developer's avatar
Open Source Developer committed
565
                        'capc' => $capacity_class_d,
566
                    );
Open Source Developer's avatar
trans  
Open Source Developer committed
567 568 569
                }
            }

570
            if ($CourseA || $CourseB || $CourseC) {
571
                return $this->respondWithStatus($list, Response::HTTP_OK);
572 573
            } else {
                return $this->respondWithStatus([
574 575
                    'message' => t('No courses found!'),
                ], Response::HTTP_FORBIDDEN);
Open Source Developer's avatar
trans  
Open Source Developer committed
576
            }
577 578
        } else {
            return $this->respondWithStatus([
579 580
                'message' => t('User not found!'),
            ], Response::HTTP_FORBIDDEN);
581
        }
Open Source Developer's avatar
trans  
Open Source Developer committed
582
    }
Open Source Developer's avatar
trans  
Open Source Developer committed
583

584 585 586 587 588 589 590
    public function returnstatus($id)
    {
        $schoolid = $id;
        $SchoolCats = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid));
        $SchoolCat = reset($SchoolCats);
        if ($SchoolCat) {
            $categ = $SchoolCat->metathesis_region->value;
591 592
        } else {
            $categ = '-';
593
        }
Open Source Developer's avatar
trans  
Open Source Developer committed
594

595
        $CourseA = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('id' => $schoolid));
596 597 598 599 600
        if ($CourseA) {
            $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 1, 'category' => $categ));
            $limitdown = reset($limit_down);
            if ($limitdown) {
                $limit = $limitdown->limit_down->value;
601 602
            } else {
                $limit = -1;
603
            }
604

Open Source Developer's avatar
bug  
Open Source Developer committed
605
            $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => -1, 'currentclass' => 1));
606

607 608 609
            if (sizeof($studentPerSchool) < $limit) {
                return false;
            }
610
        }
611

612
        $CourseB = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')->loadByProperties(array('epal_id' => $schoolid));
613 614 615 616 617
        if ($CourseB) {
            $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 2, 'category' => $categ));
            $limitdown = reset($limit_down);
            if ($limitdown) {
                $limit = $limitdown->limit_down->value;
618 619
            } else {
                $limit = -1;
620
            }
621

622 623
            foreach ($CourseB as $object) {
                $sectorid = $object->sector_id->entity->id();
Open Source Developer's avatar
bug  
Open Source Developer committed
624
                $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $sectorid, 'currentclass' => 2));
625 626
                if (sizeof($studentPerSchool) < $limit) {
                    return false;
Open Source Developer's avatar
Open Source Developer committed
627
                }
628 629
            }
        }
630

631 632 633 634 635 636
        $CourseC = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid));
        if ($CourseC) {
            $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 3, 'category' => $categ));
            $limitdown = reset($limit_down);
            if ($limitdown) {
                $limit = $limitdown->limit_down->value;
637 638
            } else {
                $limit = -1;
639
            }
Open Source Developer's avatar
Open Source Developer committed
640

641 642
            foreach ($CourseC as $object) {
                $specialityid = $object->specialty_id->entity->id();
Open Source Developer's avatar
bug  
Open Source Developer committed
643
                $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $specialityid, 'currentclass' => 3));
Open Source Developer's avatar
Open Source Developer committed
644

645 646
                if (sizeof($studentPerSchool) < $limit) {
                    return false;
Open Source Developer's avatar
Open Source Developer committed
647
                }
648 649
            }
        }
Open Source Developer's avatar
trans  
Open Source Developer committed
650

651 652
        return true;
    }
Open Source Developer's avatar
trans  
Open Source Developer committed
653

654

Open Source Developer's avatar
changes  
Open Source Developer committed
655
    public function FindCapacityPerSchool(Request $request)
Open Source Developer's avatar
trans  
Open Source Developer committed
656
    {
Open Source Developer's avatar
changes  
Open Source Developer committed
657
        $i = 0;
658
        $authToken = $request->headers->get('PHP_AUTH_USER');
Open Source Developer's avatar
trans  
Open Source Developer committed
659 660

        $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
661 662 663 664 665 666 667
        $user = reset($users);
        if ($user) {
            $schoolid = $user->init->value;
            $schools = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid));
            $school = reset($schools);
            if (!$school) {
                $this->logger->warning('no access to this school='.$user->id());
668
                return $this->respondWithStatus(['message' => 'No access to this school'], Response::HTTP_FORBIDDEN);
669
            }
670 671

            $operation_shift = $school->operation_shift->value;
672 673 674 675 676
            $userRoles = $user->getRoles();
            $userRole = '';
            foreach ($userRoles as $tmpRole) {
                if ($tmpRole === 'epal') {
                    $userRole = $tmpRole;
Open Source Developer's avatar
trans  
Open Source Developer committed
677
                }
678 679
            }
            if ($userRole === '') {
680
                return $this->respondWithStatus(['error_code' => 4003], Response::HTTP_FORBIDDEN);
681
            } elseif ($userRole === 'epal') {
Open Source Developer's avatar
changes  
Open Source Developer committed
682
                $categ = $school->metathesis_region->value;
683
                $list = array();
684

Open Source Developer's avatar
changes  
Open Source Developer committed
685 686 687 688 689 690 691 692 693 694
                $CourseA = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid));
                $classcapacity = reset($CourseA);
                if ($classcapacity) {
                    $list[] = array(
                        'class' => 1,
                        'newsector' => 0,
                        'newspecialit' => 0,
                        'taxi' => 'Ά Λυκείου',
                        'capacity' => $classcapacity->capacity_class_a->value,
                        'globalindex' => $i,
695
                    );
696
                }
Open Source Developer's avatar
changes  
Open Source Developer committed
697
                ++$i;
698

Open Source Developer's avatar
changes  
Open Source Developer committed
699 700 701 702
                $CourseB = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')->loadByProperties(array('epal_id' => $schoolid));
                if ($CourseB) {
                    foreach ($CourseB as $object) {
                        $sectorid = $object->sector_id->entity->id();
703

Open Source Developer's avatar
changes  
Open Source Developer committed
704 705 706 707 708 709 710 711
                        $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')->loadByProperties(array('epal_id' => $schoolid, 'sector_id' => $sectorid));
                        $classcapacity = reset($CapacityPerClass);
                        if ($classcapacity) {
                            $list[] = array(
                                'class' => 2,
                                'newsector' => $object->sector_id->entity->id(),
                                'newspecialit' => 0,
                                'taxi' => 'Β Λυκείου  '.$object->sector_id->entity->get('name')->value,
712
                                'capacity' => $classcapacity->capacity_class_sector->value,
Open Source Developer's avatar
changes  
Open Source Developer committed
713
                                'globalindex' => $i,
714
                            );
Open Source Developer's avatar
changes  
Open Source Developer committed
715 716
                        }
                        ++$i;
717 718
                    }
                }
719

Open Source Developer's avatar
changes  
Open Source Developer committed
720 721
                $CourseC = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid));
                if ($CourseC) {
722
                    foreach ($CourseC as $object) {
Open Source Developer's avatar
changes  
Open Source Developer committed
723 724 725 726 727 728
                        $specialityid = $object->specialty_id->entity->id();
                        $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid, 'specialty_id' => $specialityid));
                        $classcapacity = reset($CapacityPerClass);
                        if ($classcapacity) {
                            $list[] = array(
                                'class' => 3,
729 730 731 732 733
                                'newsector' => 0,
                                'newspecialit' => $object->specialty_id->entity->id(),
                                'taxi' => 'Γ Λυκείου  '.$object->specialty_id->entity->get('name')->value,
                                'capacity' => $classcapacity->capacity_class_specialty->value,
                                'globalindex' => $i,
Open Source Developer's avatar
changes  
Open Source Developer committed
734 735 736
                            );
                        }
                        ++$i;
737 738
                    }
                }
Open Source Developer's avatar
trans  
Open Source Developer committed
739

Open Source Developer's avatar
changes  
Open Source Developer committed
740 741 742
                if ($CourseC && $operation_shift != 'ΗΜΕΡΗΣΙΟ') {
                    foreach ($CourseC as $object) {
                        $specialityid = $object->specialty_id->entity->id();
743

Open Source Developer's avatar
changes  
Open Source Developer committed
744 745 746 747
                        $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid, 'specialty_id' => $specialityid));
                        $classcapacity = reset($CapacityPerClass);
                        if ($classcapacity) {
                            $list[] = array(
748 749 750 751 752 753 754
                                'class' => 4,
                                'newsector' => 0,
                                'newspecialit' => $object->specialty_id->entity->id(),
                                'taxi' => 'Δ Λυκείου  '.$object->specialty_id->entity->get('name')->value,
                                'capacity' => $classcapacity->capacity_class_specialty_d->value,
                                'globalindex' => $i,
                            );
Open Source Developer's avatar
changes  
Open Source Developer committed
755 756
                        }
                        ++$i;
757 758
                    }
                }
Open Source Developer's avatar
Open Source Developer committed
759

760
                return $this->respondWithStatus($list, Response::HTTP_OK);
Open Source Developer's avatar
Open Source Developer committed
761
            }
762
        } else {
763
            return $this->respondWithStatus(['message' => t('EPAL user not found')], Response::HTTP_FORBIDDEN);
Open Source Developer's avatar
trans  
Open Source Developer committed
764 765
        }
    }
766

Open Source Developer's avatar
changes  
Open Source Developer committed
767
    public function FindCoursesPerSchool(Request $request)
Open Source Developer's avatar
Open Source Developer committed
768
    {
Open Source Developer's avatar
Open Source Developer committed
769
        $i = 0;
770
        $authToken = $request->headers->get('PHP_AUTH_USER');
Open Source Developer's avatar
Open Source Developer committed
771 772

        $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
773 774 775 776 777 778 779 780 781 782 783 784 785 786
        $user = reset($users);
        if ($user) {
            $schoolid = $user->init->value;
            $schools = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid));
            $school = reset($schools);
            if (!$school) {
                $this->logger->warning('no access to this school='.$user->id());
                $response = new Response();
                $response->setContent('No access to this school');
                $response->setStatusCode(Response::HTTP_FORBIDDEN);
                $response->headers->set('Content-Type', 'application/json');

                return $response;
            }
Open Source Developer's avatar
Open Source Developer committed
787
            $operation_shift = $school -> operation_shift -> value;
788 789 790 791 792
            $userRoles = $user->getRoles();
            $userRole = '';
            foreach ($userRoles as $tmpRole) {
                if ($tmpRole === 'epal') {
                    $userRole = $tmpRole;
Open Source Developer's avatar
Open Source Developer committed
793
                }
794 795 796
            }
            if ($userRole === '') {
                return $this->respondWithStatus([
Open Source Developer's avatar
Open Source Developer committed
797 798
                             'error_code' => 4003,
                         ], Response::HTTP_FORBIDDEN);
799
            } elseif ($userRole === 'epal') {
Open Source Developer's avatar
Open Source Developer committed
800
                $categ = $school->metathesis_region->value;
801
                $list = array();
802

803
                $CourseA = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid));
Open Source Developer's avatar
changes  
Open Source Developer committed
804
                if ($CourseA) {
805 806 807 808 809 810
                    $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 1, 'category' => $categ));
                    $limitdown = reset($limit_down);
                    if ($limitdown) {
                        $limit = $limitdown->limit_down->value;
                    }
                    $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => -1, 'currentclass' => 1));
Open Source Developer's avatar
Open Source Developer committed
811

Open Source Developer's avatar
Open Source Developer committed
812 813
                    $list[] = array(
                        'class' => 1,
Open Source Developer's avatar
Open Source Developer committed
814 815
                        'newsector' => 0,
                        'newspecialit' => 0,
Open Source Developer's avatar
Open Source Developer committed
816
                        'taxi' => 'Ά Λυκείου',
817
                        'globalindex' => $i,
Open Source Developer's avatar
Open Source Developer committed
818 819
                        'limitdown' => $limit,
                        'size' => sizeof($studentPerSchool),
Open Source Developer's avatar
Open Source Developer committed
820
                       );
821 822
                }
                ++$i;
823

824 825
                $CourseB = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')->loadByProperties(array('epal_id' => $schoolid));
                if ($CourseB) {
Open Source Developer's avatar
Open Source Developer committed
826 827 828 829 830 831
                    $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 2, 'category' => $categ));
                    $limitdown = reset($limit_down);
                    if ($limitdown) {
                        $limit = $limitdown->limit_down->value;
                    }

832 833
                    foreach ($CourseB as $object) {
                        $sectorid = $object->sector_id->entity->id();
Open Source Developer's avatar
bug  
Open Source Developer committed
834
                        $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $sectorid, 'currentclass' => 2));
835 836 837 838 839 840 841 842 843
                        $list[] = array(
                            'class' => 2,
                            'newsector' => $object->sector_id->entity->id(),
                            'newspecialit' => 0,
                            'taxi' => 'Β Λυκείου  '.$object->sector_id->entity->get('name')->value,
                            'globalindex' => $i,
                            'limitdown' => $limit,
                            'size' => sizeof($studentPerSchool),
                            );
844

845
                        ++$i;
Open Source Developer's avatar
Open Source Developer committed
846
                    }
847
                }
848

849 850
                $CourseC = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid));
                if ($CourseC) {
Open Source Developer's avatar
Open Source Developer committed
851 852
                    $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 3, 'category' => $categ));
                        $limitdown = reset($limit_down);
853 854 855 856
                    if ($limitdown) {
                        $limit = $limitdown->limit_down->value;
                    }
                    foreach ($CourseC as $object) {
857
                        $specialityid = $object->specialty_id->entity->id();
Open Source Developer's avatar
bug  
Open Source Developer committed
858
                        $studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $specialityid, 'currentclass' => 3));
859
                        $list[] = array(
860
                            'class' => 3,
861 862 863 864 865 866 867
                            'newsector' => 0,
                            'newspecialit' => $object->specialty_id->entity->id(),
                            'taxi' => 'Γ Λυκείου  '.$object->specialty_id->entity->get('name')->value,
                            'globalindex' => $i,
                            'limitdown' => $limit,
                            'size' => sizeof($studentPerSchool),
                        );
868
                        ++$i;
Open Source Developer's avatar
Open Source Developer committed
869
                    }
870
                }
871

Open Source Developer's avatar
Open Source Developer committed
872 873 874
                if ($CourseC && $operation_shift != 'ΗΜΕΡΗΣΙΟ') {
                        $limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 4, 'category' => $categ));
                        $limitdown = reset($limit_down);
875 876 877
                    if ($limitdown) {
                        $limit = $limitdown->limit_down->value;
                    }