Commit 512d5de2 authored by Νίκος Κατσαούνος's avatar Νίκος Κατσαούνος

Merge branch 'develop' of https://git.minedu.gov.gr/itminedu/e-epal into component_updates

parents 9f99a8df 569c2ae6
# Ηλεκτρονική υπηρεσία για εγγραφές και μετεγγραφές μαθητών στην Επαγγελματική Εκπαίδευση #
# Ηλεκτρονική υπηρεσία δηλώσεων προτίμησης ΕΠΑΛ για το νέο σχολικό έτος #
# Περιγραφή #
Η Ηλεκτρονική Υπηρεσία για τις εγγραφές και μετεγγραφές μαθητών στα Επαγγελματικά Λύκεια (ΕΠΑΛ) που θα αναπτυχθεί έχει ως κύριο σκοπό να παρέχει τη δυνατότητα ηλεκτρονικής δήλωσης προτίμησης των μαθητών για φοίτηση σε κάποιο από τα ΕΠΑΛ της χώρας μας, καθώς και την κατανομή τους σε αυτά με βάση συγκεκριμένα κριτήρια και λαμβάνοντας υπόψη τις προτιμήσεις τους. Η δημιουργία της υπηρεσίας θα υλοποιηθεί από την ομάδα Ανοικτού Λογισμικού του Υπουργείου Παιδείας, η οποία είναι αρμόδια για τον Σχεδιασμό, Ανάπτυξη και Συντήρηση Εφαρμογών Ανοικτού Λογισμικού του ΥΠΠΕΘ και υπάγεται στη Γενική Διεύθυνση Στρατηγικού Σχεδιασμού, Προγραμματισμού και Ηλεκτρονικής Διακυβέρνησης.
Η Ηλεκτρονική Υπηρεσία δηλώσεων προτίμησης Επαγγελματικών Λυκείων (ΕΠΑΛ) για το νέο σχολικό έτος που αναπτύσσεται έχει ως κύριο σκοπό να παρέχει τη δυνατότητα ηλεκτρονικής δήλωσης προτίμησης των μαθητών για φοίτηση σε κάποιο από τα ΕΠΑΛ της χώρας μας, καθώς και την κατανομή τους σε αυτά με βάση συγκεκριμένα κριτήρια και λαμβάνοντας υπόψη τις προτιμήσεις τους. Η δημιουργία της υπηρεσίας θα υλοποιηθεί από την ομάδα Ανοικτού Λογισμικού του Υπουργείου Παιδείας, η οποία είναι αρμόδια για τον Σχεδιασμό, Ανάπτυξη και Συντήρηση Εφαρμογών Ανοικτού Λογισμικού του ΥΠΠΕΘ και υπάγεται στη Γενική Διεύθυνση Στρατηγικού Σχεδιασμού, Προγραμματισμού και Ηλεκτρονικής Διακυβέρνησης.
Οι διαδικασίες υλοποίησης του έργου θα ακολουθήσουν τη μεθοδολογία ευέλικτης ανάπτυξης λογισμικού Agile σε πρότυπα Scrum, που υπόσχεται ανταπόκριση στις αλλαγές, παραγωγικότερες πρακτικές και λιγότερη γραφειοκρατία. Η ανταπόκριση στις αλλαγές αναφέρεται κυρίως στην συνολική ικανότητα της διαδικασίας ανάπτυξης να προσαρμόζεται ανάλογα όταν προκύπτουν αλλαγές στην πορεία του έργου, καθώς και στην ανάγκη για συνεργασία μεταξύ όλων των συμμετεχόντων. Η μέθοδος αυτή είναι μια επαναληπτική και αυξητική προσέγγιση για την ανάπτυξη έργων που επιτρέπει την προσαρμογή στις αλλαγές που προκύπτουν.
Οι διαδικασίες υλοποίησης του έργου θα ακολουθήσουν τη μεθοδολογία ευέλικτης ανάπτυξης λογισμικού Agile σε πρότυπα Scrum, που υπόσχεται ανταπόκριση στις αλλαγές, παραγωγικότερες πρακτικές και λιγότερη γραφειοκρατία. Η ανταπόκριση στις αλλαγές αναφέρεται κυρίως στην συνολική ικανότητα της διαδικασίας ανάπτυξης να προσαρμόζεται ανάλογα όταν προκύπτουν αλλαγές στην πορεία του έργου, καθώς και στην ανάγκη για συνεργασία μεταξύ όλων των συμμετεχόντων. Η μέθοδος αυτή είναι μια επαναληπτική και αυξητική προσέγγιση για την ανάπτυξη έργων που επιτρέπει την προσαρμογή στις αλλαγές που προκύπτουν.
Στην διαδικασία αυτή παρουσιάζονται οι εξής τρείς βασικοί ρόλοι: ο ιδιοκτήτης του προϊόντος (The Product Owner) είναι η Διεύθυνση Επαγγελματικής Εκπαίδευσης και υπεύθυνος ο Δ/ντης κ. Μουστάκας Γ. όπου κατέχει καθοριστικό ρόλο στην ανάπτυξη του συστήματος, εντοπίζοντας τα χαρακτηριστικά της υπηρεσίας και μεταφράζοντας τα σε μια λίστα απαιτήσεων, η ομάδα (team) που χτίζει το προιόν (μέλη της ομάδας του Ανοικτού Λογισμικού) και τέλος η ομάδα εποπτείας (Advisor Board) που αποτελείται από έμπειρα άτομα του χώρου της επαγγελματικής εκπαίδευσης με βασικό σκοπό την σύνταξη απαιτήσεων και την ιεράρχηση τους (Product Backlog).
Στην διαδικασία αυτή παρουσιάζονται οι εξής τρείς βασικοί ρόλοι: ο ιδιοκτήτης του προϊόντος (The Product Owner) είναι η Διεύθυνση Επαγγελματικής Εκπαίδευσης και υπεύθυνος ο Δ/ντης κ. Μουστάκας Γ. όπου κατέχει καθοριστικό ρόλο στην ανάπτυξη του συστήματος, εντοπίζοντας τα χαρακτηριστικά της υπηρεσίας και μεταφράζοντας τα σε μια λίστα απαιτήσεων, η ομάδα (team) που χτίζει το προιόν (μέλη της ομάδας του Ανοικτού Λογισμικού) και τέλος η ομάδα εποπτείας (Advisor Board) που αποτελείται από έμπειρα άτομα του χώρου της επαγγελματικής εκπαίδευσης με βασικό σκοπό την σύνταξη απαιτήσεων και την ιεράρχηση τους (Product Backlog).
# Περιβάλλον Ανάπτυξης#
......@@ -14,7 +14,7 @@
Μπορείτε να δείτε τις προδιαγραφές του έργου σύμφωνα με τα πρότυπα της μεθοδολογίας Agile / Scrum στο https://git.minedu.gov.gr/itminedu/e-epal/wikis/scrum
Η αναλυτική τεκμηρίωση των λειτουργικών απαιτήσεων συντηρείται στο https://git.minedu.gov.gr/itminedu/e-epal/wikis/analysis
Η αναλυτική τεκμηρίωση των λειτουργικών απαιτήσεων συντηρείται στο https://git.minedu.gov.gr/itminedu/e-epal/wikis/analysis
# Παρατηρήσεις - Σχόλια #
......@@ -22,4 +22,4 @@
# License
Code licence: [EUPL v1.1](http://ec.europa.eu/idabc/eupl.html) Content licence: [CC-BY-SA 4.0.](https://creativecommons.ellak.gr/2015/08/21/%CE%B5%CE%BD%CE%B1%CF%82-%CE%B1%CF%80%CE%BB%CF%8C%CF%82-%CE%BF%CE%B4%CE%B7%CE%B3%CF%8C%CF%82-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B9%CF%82-%CE%AC%CE%B4%CE%B5%CE%B9%CE%B5%CF%82-creative-commons-4-0/)
\ No newline at end of file
Code licence: [EUPL v1.1](http://ec.europa.eu/idabc/eupl.html) Content licence: [CC-BY-SA 4.0.](https://creativecommons.ellak.gr/2015/08/21/%CE%B5%CE%BD%CE%B1%CF%82-%CE%B1%CF%80%CE%BB%CF%8C%CF%82-%CE%BF%CE%B4%CE%B7%CE%B3%CF%8C%CF%82-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B9%CF%82-%CE%AC%CE%B4%CE%B5%CE%B9%CE%B5%CF%82-creative-commons-4-0/)
......@@ -43,17 +43,17 @@ function epal_mail($key, &$message, $params) {
switch ($key) {
case 'send_verification_code':
$message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('Σύστημα υποβολής αιτήσεων εγγραφής σε ΕΠΑΛ: Επιβεβαίωση e-mail', $options);
$message['subject'] = t('Σύστημα υποβολής ηλεκτρονικών δηλώσεων προτίμησης ΕΠΑΛ για το νέο σχολικό έτος: Επιβεβαίωση e-mail', $options);
$message['body'][] = $params['message'];
break;
case 'massive_mail_unallocated':
$message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('Μη ικανοποίηση ηλεκτρονικής αίτησης για εγγραφή σε ΕΠΑΛ', $options);
$message['subject'] = t('Μη ικανοποίηση ηλεκτρονικής δήλωσης προτίμησης ΕΠΑΛ', $options);
$message['body'][] = $params['message'];
break;
case 'massive_mail_located':
$message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('Ικανοποίηση ηλεκτρονικής αίτησης για εγγραφή σε ΕΠΑΛ', $options);
$message['subject'] = t('Ικανοποίηση ηλεκτρονικής δήλωσης προτίμησης ΕΠΑΛ', $options);
$message['body'][] = $params['message'];
break;
}
......
......@@ -5,6 +5,8 @@ namespace Drupal\epal;
use Symfony\Component\HttpFoundation\Response;
use Exception;
use Drupal\epal\Crypt;
/**
* Description of Client
*
......@@ -171,30 +173,32 @@ class Client
}, '');
$result = $this->get($endpoint, [], $headers); // data as path params...
try {
$crypt = new Crypt();
$val = 'call:' . print_r($endpoint, true) . ':rcv:' . print_r($result, true);
$val_enc = $crypt->encrypt($val);
$this->log(__METHOD__ . $val_enc, 'info');
} catch (\Exception $e) {
$this->log(__METHOD__ . " cannot log encrypted", 'info');
}
if ($result['success'] === false) {
$this->log(__METHOD__ . " Error while calling ws. Diagnostic: {$result['response']}. Response code: {$result['http_status']}", "error");
throw new Exception("Προέκυψε λάθος κατά την άντληση των στοιχείων.");
}
// now return true/false/null ?
return $result['response'];
// if (($response = json_decode($result['response'], true)) !== null) {
// return $response;
// } else {
// throw new Exception("Προέκυψε λάθος κατά την λήψη των στοιχείων. Αδυναμία άντλησης στοιχείων από το response {$result['response']}");
// }
}
public function getStudentEpalPromotion($didactic_year_id, $lastname, $firstname, $father_firstname, $mother_firstname, $birthdate, $registry_no, $level_name)
{
$this->log(__METHOD__); // " $didactic_year_id, $lastname, $firstname, $father_firstname, $mother_firstname, $birthdate, $registry_no, $level_name");
$this->log(__METHOD__);
return $this->getStudentEpalPromotionOrCertification($this->_settings['ws_endpoint_studentepalpromotion'], $didactic_year_id, $lastname, $firstname, $father_firstname, $mother_firstname, $birthdate, $registry_no, $level_name);
}
public function getStudentEpalCertification($didactic_year_id, $lastname, $firstname, $father_firstname, $mother_firstname, $birthdate, $registry_no, $level_name)
{
$this->log(__METHOD__); // " $didactic_year_id, $lastname, $firstname, $father_firstname, $mother_firstname, $birthdate, $registry_no, $level_name");
$this->log(__METHOD__);
return $this->getStudentEpalPromotionOrCertification($this->_settings['ws_endpoint_studentepalcertification'], $didactic_year_id, $lastname, $firstname, $father_firstname, $mother_firstname, $birthdate, $registry_no, $level_name);
}
......@@ -228,6 +232,14 @@ class Client
$result = curl_exec($ch);
// log url as appropriate
try {
$crypt = new Crypt();
$uri = $crypt->encrypt($uri);
} catch (\Exception $e) {
$uri = '-cannot encrypt-';
}
if (curl_errno($ch)) {
$this->log(__METHOD__ . " Error calling {$uri}. Curl error: " . curl_error($ch) . " Curl info: " . var_export(curl_getinfo($ch), true), "error");
throw new Exception("Λάθος κατά την κλήση της υπηρεσίας.");
......@@ -263,6 +275,14 @@ class Client
$result = curl_exec($ch);
// log url as appropriate
try {
$crypt = new Crypt();
$uri = $crypt->encrypt($uri);
} catch (\Exception $e) {
$uri = '-cannot encrypt-';
}
if (curl_errno($ch)) {
$this->log(__METHOD__ . " Error calling {$uri}. Curl error: " . curl_error($ch) . " Curl info: " . var_export(curl_getinfo($ch), true), "error");
throw new Exception("Λάθος κατά την κλήση της υπηρεσίας.");
......
......@@ -79,6 +79,19 @@ class ApplicationSubmit extends ControllerBase
], Response::HTTP_BAD_REQUEST);
}
$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_application->value) {
return $this->respondWithStatus([
"error_code" => 3002
], Response::HTTP_FORBIDDEN);
}
$crypt = new Crypt();
try {
$name_encoded = $crypt->encrypt($applicationForm[0]['name']);
......@@ -266,14 +279,14 @@ class ApplicationSubmit extends ControllerBase
(checkdate($date_parts[1], $date_parts[2], $date_parts[0]) !== true)) {
return 1003;
}
/* $birthdate = "{$date_parts[2]}-{$date_parts[1]}-{$date_parts[0]}";
$birthdate = "{$date_parts[2]}-{$date_parts[1]}-{$date_parts[0]}";
// check as per specs:
// - can't check certification prior to 2014, pass through
// - check certification if last passed class is gym
// - check promotion if last passed class is not gym
$check_certification = true;
/* $check_certification = true;
$check_promotion = true;
if (intval($student['lastschool_unittypeid']) == self::UNIT_TYPE_GYM) {
$check_promotion = false;
......@@ -307,12 +320,12 @@ class ApplicationSubmit extends ControllerBase
$student['lastschool_registrynumber'],
$level_name
);
$pass = ($service_rv === true);
if ($service_rv === true) {
$pass = ($service_rv == 'true');
if ($service_rv == 'true') {
$error_code = 0;
} elseif ($service_rv === false) {
} elseif ($service_rv == 'false') {
$error_code = 8002;
} elseif ($service_rv === null) {
} elseif ($service_rv == 'null') {
$error_code = 8003;
} else {
// -1 is an exception and data is already validated
......@@ -322,25 +335,8 @@ class ApplicationSubmit extends ControllerBase
$pass = false;
$error_code = 8000;
}
}
// TODO REMOVE
$this->logger->info(
'check certification: [' . var_export($check_certification, true) . '] ' .
'check promotion: [' . var_export($check_promotion, true) . '] ' .
'pass: [' . var_export($pass, true) . '] ' .
'check: ' . print_r([
$didactic_year_id,
$student['studentsurname'],
$student['name'],
$student['fatherfirstname'],
$student['motherfirstname'],
$birthdate,
$student['lastschool_registrynumber'],
$level_name
], true));
// return 1000; // TODO stop here until all checks are finished
} */
return $error_code; */
return $error_code;
}
}
......@@ -18,9 +18,11 @@ class DirectorView extends ControllerBase
protected $logger;
// protected $testSchoolId='0640050';
public function __construct(EntityTypeManagerInterface $entityTypeManager,
LoggerChannelFactoryInterface $loggerChannel)
{
public function __construct(
EntityTypeManagerInterface $entityTypeManager,
LoggerChannelFactoryInterface $loggerChannel
) {
$this->entityTypeManager = $entityTypeManager;
$this->logger = $loggerChannel->get('epal-school');
}
......@@ -160,170 +162,201 @@ class DirectorView extends ControllerBase
public function getStudentPerSchool(Request $request, $selectId, $classId, $limitdown, $limitup)
{
try {
$authToken = $request->headers->get('PHP_AUTH_USER');
$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());
$response = new Response();
$response->setContent('No access to this school');
$response->setStatusCode(Response::HTTP_FORBIDDEN);
$response->headers->set('Content-Type', 'application/json');
$authToken = $request->headers->get('PHP_AUTH_USER');
return $response;
}
$userRoles = $user->getRoles();
$userRole = '';
foreach ($userRoles as $tmpRole) {
if ($tmpRole === 'epal') {
$userRole = $tmpRole;
}
$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 ($userRole === '') {
if ($epalConfig->lock_students->value) {
return $this->respondWithStatus([
'error_code' => 4003,
], Response::HTTP_FORBIDDEN);
} elseif ($userRole === 'epal') {
$selectIdNew = $selectId;
if ($classId == 1) {
$selectIdNew = -1;
$studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $epalId, 'specialization_id' => $selectIdNew, 'currentclass' => $classId));
} else {
$studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $epalId, 'specialization_id' => $selectIdNew, 'currentclass' => $classId));
"error_code" => 3002
], Response::HTTP_FORBIDDEN);
}
$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);
}
$i = 0;
if ($studentPerSchool) {
$list = array();
$i = 0;
if ($limitdown == $limitup && $limitup == 0) {
$list = array(
'id' => sizeof($studentPerSchool),
'up' => $limitup,
'down' => $limitdown,
);
} else {
foreach ($studentPerSchool as $object) {
$studentId = $object->id();
$epalStudents = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('id' => $studentId));
$epalStudent = reset($epalStudents);
if ($epalStudents) {
$studentIdNew = $epalStudent->id();
$checkstatus = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('student_id' => $studentIdNew));
$checkstudentstatus = reset($checkstatus);
if ($i >= $limitdown && $i < $limitup) {
$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;
}
else if ($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;
}
$newstatus = $checkstudentstatus->directorconfirm->value;
$crypt = new Crypt();
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);
$certificatetype_decoded = $crypt->decrypt($epalStudent->certificatetype->value);
$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) {
//print_r($e->getMessage());
unset($crypt);
$this->logger->warning($e->getMessage());
return $this->respondWithStatus([
"message" => t("An unexpected error occured during DECODING data in getStudentPerSchool Method ")
], Response::HTTP_INTERNAL_SERVER_ERROR);
$userRoles = $user->getRoles();
$userRole = '';
foreach ($userRoles as $tmpRole) {
if ($tmpRole === 'epal') {
$userRole = $tmpRole;
}
}
if ($userRole === '') {
return $this->respondWithStatus([
'error_code' => 4003,
], Response::HTTP_FORBIDDEN);
} elseif ($userRole === 'epal') {
if ($classId == 1) {
$selectId = -1;
}
$studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $epalId, 'specialization_id' => $selectId, 'currentclass' => $classId));
if ($studentPerSchool) {
$list = array();
if ($limitdown == $limitup && $limitup == 0) {
$list = array(
'id' => sizeof($studentPerSchool),
'up' => $limitup,
'down' => $limitdown,
);
} else {
$i = 0;
foreach ($studentPerSchool as $object) {
$studentId = $object->id();
$epalStudents = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('id' => $studentId));
$epalStudent = reset($epalStudents);
if ($epalStudent) {
$studentIdNew = $epalStudent->id();
$checkstatus = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('student_id' => $studentIdNew));
$checkstudentstatus = reset($checkstatus);
if ($i >= $limitdown && $i < $limitup) {
$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;
}
} 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;
}
}
$newstatus = $checkstudentstatus->directorconfirm->value;
$crypt = new Crypt();
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);
$certificatetype_decoded = $crypt->decrypt($epalStudent->certificatetype->value);
$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);
// $name_decoded = $epalStudent->name->value;
// $studentsurname_decoded = $epalStudent->studentsurname->value;
// $fatherfirstname_decoded = $epalStudent->fatherfirstname->value;
// $motherfirstname_decoded = $epalStudent->motherfirstname->value;
// $regionaddress_decoded = $epalStudent->regionaddress->value;
// $regiontk_decoded = $epalStudent->regiontk->value;
// $regionarea_decoded = $epalStudent->regionarea->value;
// $certificatetype_decoded = $epalStudent->certificatetype->value;
// $relationtostudent_decoded = $epalStudent->relationtostudent->value;
// $telnum_decoded = $epalStudent->telnum->value;
// $guardian_name_decoded = $epalStudent->guardian_name->value;
// $guardian_surname_decoded = $epalStudent->guardian_surname->value;
// $guardian_fathername_decoded = $epalStudent->guardian_fathername->value;
// $guardian_mothername_decoded = $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);
}
$list[] = array(
'i' => $i,
'id' => $epalStudent->id(),
'name' => $name_decoded,
'studentsurname' => $studentsurname_decoded,
'fatherfirstname' => $fatherfirstname_decoded,
'fathersurname' => $epalStudent->fathersurname->value,
'motherfirstname' => $motherfirstname_decoded,
'mothersurname' => $epalStudent->mothersurname->value,
'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->currentclass->value,
'currentclass' => $epalStudent->currentclass->value,
'currentsector' => $sectorName,
'currentcourse' => $courseName,
'regionaddress' => $regionaddress_decoded,
'regiontk' => $regiontk_decoded,
'regionarea' => $regionarea_decoded,
'certificatetype' => $certificatetype_decoded,
'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' => $newstatus[0][value],
'created' => date('d/m/Y H:i', $epalStudent->created->value)
);
}
unset($crypt);
$list[] = array(
'i' => $i,
'id' => $epalStudent->id(),
'name' => $name_decoded,
'studentsurname' => $studentsurname_decoded,
'fatherfirstname' => $fatherfirstname_decoded,
'fathersurname' => $epalStudent->fathersurname->value,
'motherfirstname' => $motherfirstname_decoded,
'mothersurname' => $epalStudent->mothersurname->value,
'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->currentclass->value,
'currentclass' =>$epalStudent -> currentclass ->value,
'currentsector' =>$sectorName,
'currentcourse' =>$courseName,
'regionaddress' =>$regionaddress_decoded,
'regiontk' =>$regiontk_decoded,
'regionarea' =>$regionarea_decoded,
'certificatetype' => $certificatetype_decoded,
'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' => $newstatus[0][value],
'created' => date('d/m/Y H:i', $epalStudent -> created ->value),
);
++$i;
}
++$i;
}
}
return $this->respondWithStatus(
$list, Response::HTTP_OK);
} else {
if ($limitdown == $limitup && $limitup == 0) {
$list = [
'id' => sizeof($studentPerSchool),
'up' => $limitup,
'down' => $limitdown,
];
} else {
$list = [];
}
return $this->respondWithStatus($list, Response::HTTP_OK);
}
} else {
if ($limitdown == $limitup && $limitup == 0) {
$list = [
'id' => sizeof($studentPerSchool),
'up' => $limitup,
'down' => $limitdown,
];
} else {
$list = [];
}
return $this->respondWithStatus(
$list, Response::HTTP_OK);
return $this->respondWithStatus($list, Response::HTTP_OK);
}
} else {
$list = array();
return $this->respondWithStatus($list, Response::HTTP_OK);
}
} else {
return $this->respondWithStatus([
return $this->respondWithStatus([
'message' => t('User not found!'),
], Response::HTTP_FORBIDDEN);
}
} catch (\Exception $e) {
$this->logger->warning($e->getMessage());
return $this->respondWithStatus([
}
} catch (\Exception $e) {
$this->logger->warning($e->getMessage());
return $this->respondWithStatus([
'message' => t('Unexpected Error'),
], Response::HTTP_FORBIDDEN);
}
}
}
public function ConfirmStudents(Request $request)
......@@ -377,7 +410,7 @@ class DirectorView extends ControllerBase
return $this->respondWithStatus([
'message' => t('saved'),
], Response::HTTP_OK);
], Response::HTTP_OK);
}
} else {
return $this->respondWithStatus([
......@@ -400,6 +433,19 @@ class DirectorView extends ControllerBase
}
$authToken = $request->headers->get('PHP_AUTH_USER');
$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);
}
$users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
$user = reset($users);
if ($user) {
......@@ -673,10 +719,10 @@ class DirectorView extends ControllerBase
$studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('currentepal' => $schoolid, 'specialization_id' => -1, 'currentclass' => 1));
//foreach ($CourseA as $object) {
if (sizeof($studentPerSchool) < $limit) {
return false;
if (sizeof($studentPerSchool) < $limit) {
return false;
// exit;
}
}
} // }
$CourseB = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')->loadByProperties(array('epal_id' => $schoolid));
......@@ -902,12 +948,9 @@ class DirectorView extends ControllerBase
$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;
return $this->respondWithStatus([
'message' => "No access to this school"
], Response::HTTP_FORBIDDEN);
}
$userRoles = $user->getRoles();
$userRole = '';
......@@ -918,8 +961,8 @@ class DirectorView extends ControllerBase
}
if ($userRole === '') {
return $this->respondWithStatus([
'error_code' => 4003,
], Response::HTTP_FORBIDDEN);
'error_code' => 4003,
], Response::HTTP_FORBIDDEN);
} elseif ($userRole === 'epal') {
$list = array();
......@@ -937,12 +980,12 @@ class DirectorView extends ControllerBase
}
$list[] = array(
'id' => '1',
'name' => 'Α Λυκείου',
'categ' => $categ,
'classes' => 1,
'limitdown' => $limit,
);
'id' => '1',
'name' => 'Α Λυκείου',
'categ' => $categ,
'classes' => 1,
'limitdown' => $limit,
);
}
if ($classid == 2) {
......@@ -953,9 +996,7 @@ class DirectorView extends ControllerBase
}
$list[] = array(