Merge branch 'application_form' into 'develop'

Locking implementation. Other fixes enhancements, mainly for application process

See merge request !151
parents 3881f9c4 b60b9255
# Ηλεκτρονική υπηρεσία για εγγραφές και μετεγγραφές μαθητών στην Επαγγελματική Εκπαίδευση # # Ηλεκτρονική υπηρεσία δηλώσεων προτίμησης ΕΠΑΛ για το νέο σχολικό έτος #
# Περιγραφή # # Περιγραφή #
Η Ηλεκτρονική Υπηρεσία για τις εγγραφές και μετεγγραφές μαθητών στα Επαγγελματικά Λύκεια (ΕΠΑΛ) που θα αναπτυχθεί έχει ως κύριο σκοπό να παρέχει τη δυνατότητα ηλεκτρονικής δήλωσης προτίμησης των μαθητών για φοίτηση σε κάποιο από τα ΕΠΑΛ της χώρας μας, καθώς και την κατανομή τους σε αυτά με βάση συγκεκριμένα κριτήρια και λαμβάνοντας υπόψη τις προτιμήσεις τους. Η δημιουργία της υπηρεσίας θα υλοποιηθεί από την ομάδα Ανοικτού Λογισμικού του Υπουργείου Παιδείας, η οποία είναι αρμόδια για τον Σχεδιασμό, Ανάπτυξη και Συντήρηση Εφαρμογών Ανοικτού Λογισμικού του ΥΠΠΕΘ και υπάγεται στη Γενική Διεύθυνση Στρατηγικού Σχεδιασμού, Προγραμματισμού και Ηλεκτρονικής Διακυβέρνησης. Η Ηλεκτρονική Υπηρεσία δηλώσεων προτίμησης Επαγγελματικών Λυκείων (ΕΠΑΛ) για το νέο σχολικό έτος που αναπτύσσεται έχει ως κύριο σκοπό να παρέχει τη δυνατότητα ηλεκτρονικής δήλωσης προτίμησης των μαθητών για φοίτηση σε κάποιο από τα ΕΠΑΛ της χώρας μας, καθώς και την κατανομή τους σε αυτά με βάση συγκεκριμένα κριτήρια και λαμβάνοντας υπόψη τις προτιμήσεις τους. Η δημιουργία της υπηρεσίας θα υλοποιηθεί από την ομάδα Ανοικτού Λογισμικού του Υπουργείου Παιδείας, η οποία είναι αρμόδια για τον Σχεδιασμό, Ανάπτυξη και Συντήρηση Εφαρμογών Ανοικτού Λογισμικού του ΥΠΠΕΘ και υπάγεται στη Γενική Διεύθυνση Στρατηγικού Σχεδιασμού, Προγραμματισμού και Ηλεκτρονικής Διακυβέρνησης.
Οι διαδικασίες υλοποίησης του έργου θα ακολουθήσουν τη μεθοδολογία ευέλικτης ανάπτυξης λογισμικού Agile σε πρότυπα Scrum, που υπόσχεται ανταπόκριση στις αλλαγές, παραγωγικότερες πρακτικές και λιγότερη γραφειοκρατία. Η ανταπόκριση στις αλλαγές αναφέρεται κυρίως στην συνολική ικανότητα της διαδικασίας ανάπτυξης να προσαρμόζεται ανάλογα όταν προκύπτουν αλλαγές στην πορεία του έργου, καθώς και στην ανάγκη για συνεργασία μεταξύ όλων των συμμετεχόντων. Η μέθοδος αυτή είναι μια επαναληπτική και αυξητική προσέγγιση για την ανάπτυξη έργων που επιτρέπει την προσαρμογή στις αλλαγές που προκύπτουν. Οι διαδικασίες υλοποίησης του έργου θα ακολουθήσουν τη μεθοδολογία ευέλικτης ανάπτυξης λογισμικού Agile σε πρότυπα Scrum, που υπόσχεται ανταπόκριση στις αλλαγές, παραγωγικότερες πρακτικές και λιγότερη γραφειοκρατία. Η ανταπόκριση στις αλλαγές αναφέρεται κυρίως στην συνολική ικανότητα της διαδικασίας ανάπτυξης να προσαρμόζεται ανάλογα όταν προκύπτουν αλλαγές στην πορεία του έργου, καθώς και στην ανάγκη για συνεργασία μεταξύ όλων των συμμετεχόντων. Η μέθοδος αυτή είναι μια επαναληπτική και αυξητική προσέγγιση για την ανάπτυξη έργων που επιτρέπει την προσαρμογή στις αλλαγές που προκύπτουν.
Στην διαδικασία αυτή παρουσιάζονται οι εξής τρείς βασικοί ρόλοι: ο ιδιοκτήτης του προϊόντος (The Product Owner) είναι η Διεύθυνση Επαγγελματικής Εκπαίδευσης και υπεύθυνος ο Δ/ντης κ. Μουστάκας Γ. όπου κατέχει καθοριστικό ρόλο στην ανάπτυξη του συστήματος, εντοπίζοντας τα χαρακτηριστικά της υπηρεσίας και μεταφράζοντας τα σε μια λίστα απαιτήσεων, η ομάδα (team) που χτίζει το προιόν (μέλη της ομάδας του Ανοικτού Λογισμικού) και τέλος η ομάδα εποπτείας (Advisor Board) που αποτελείται από έμπειρα άτομα του χώρου της επαγγελματικής εκπαίδευσης με βασικό σκοπό την σύνταξη απαιτήσεων και την ιεράρχηση τους (Product Backlog). Στην διαδικασία αυτή παρουσιάζονται οι εξής τρείς βασικοί ρόλοι: ο ιδιοκτήτης του προϊόντος (The Product Owner) είναι η Διεύθυνση Επαγγελματικής Εκπαίδευσης και υπεύθυνος ο Δ/ντης κ. Μουστάκας Γ. όπου κατέχει καθοριστικό ρόλο στην ανάπτυξη του συστήματος, εντοπίζοντας τα χαρακτηριστικά της υπηρεσίας και μεταφράζοντας τα σε μια λίστα απαιτήσεων, η ομάδα (team) που χτίζει το προιόν (μέλη της ομάδας του Ανοικτού Λογισμικού) και τέλος η ομάδα εποπτείας (Advisor Board) που αποτελείται από έμπειρα άτομα του χώρου της επαγγελματικής εκπαίδευσης με βασικό σκοπό την σύνταξη απαιτήσεων και την ιεράρχηση τους (Product Backlog).
# Περιβάλλον Ανάπτυξης# # Περιβάλλον Ανάπτυξης#
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
Μπορείτε να δείτε τις προδιαγραφές του έργου σύμφωνα με τα πρότυπα της μεθοδολογίας Agile / Scrum στο https://git.minedu.gov.gr/itminedu/e-epal/wikis/scrum Μπορείτε να δείτε τις προδιαγραφές του έργου σύμφωνα με τα πρότυπα της μεθοδολογίας 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 @@ ...@@ -22,4 +22,4 @@
# License # 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/) 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
...@@ -43,17 +43,17 @@ function epal_mail($key, &$message, $params) { ...@@ -43,17 +43,17 @@ function epal_mail($key, &$message, $params) {
switch ($key) { switch ($key) {
case 'send_verification_code': case 'send_verification_code':
$message['from'] = \Drupal::config('system.site')->get('mail'); $message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('Σύστημα υποβολής αιτήσεων εγγραφής σε ΕΠΑΛ: Επιβεβαίωση e-mail', $options); $message['subject'] = t('Σύστημα υποβολής ηλεκτρονικών δηλώσεων προτίμησης ΕΠΑΛ για το νέο σχολικό έτος: Επιβεβαίωση e-mail', $options);
$message['body'][] = $params['message']; $message['body'][] = $params['message'];
break; break;
case 'massive_mail_unallocated': case 'massive_mail_unallocated':
$message['from'] = \Drupal::config('system.site')->get('mail'); $message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('Μη ικανοποίηση ηλεκτρονικής αίτησης για εγγραφή σε ΕΠΑΛ', $options); $message['subject'] = t('Μη ικανοποίηση ηλεκτρονικής δήλωσης προτίμησης ΕΠΑΛ', $options);
$message['body'][] = $params['message']; $message['body'][] = $params['message'];
break; break;
case 'massive_mail_located': case 'massive_mail_located':
$message['from'] = \Drupal::config('system.site')->get('mail'); $message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('Ικανοποίηση ηλεκτρονικής αίτησης για εγγραφή σε ΕΠΑΛ', $options); $message['subject'] = t('Ικανοποίηση ηλεκτρονικής δήλωσης προτίμησης ΕΠΑΛ', $options);
$message['body'][] = $params['message']; $message['body'][] = $params['message'];
break; break;
} }
......
...@@ -79,6 +79,19 @@ class ApplicationSubmit extends ControllerBase ...@@ -79,6 +79,19 @@ class ApplicationSubmit extends ControllerBase
], Response::HTTP_BAD_REQUEST); ], 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(); $crypt = new Crypt();
try { try {
$name_encoded = $crypt->encrypt($applicationForm[0]['name']); $name_encoded = $crypt->encrypt($applicationForm[0]['name']);
...@@ -273,7 +286,7 @@ class ApplicationSubmit extends ControllerBase ...@@ -273,7 +286,7 @@ class ApplicationSubmit extends ControllerBase
// - check certification if last passed class is gym // - check certification if last passed class is gym
// - check promotion if last passed class is not gym // - check promotion if last passed class is not gym
$check_certification = true; /* $check_certification = true;
$check_promotion = true; $check_promotion = true;
if (intval($student['lastschool_unittypeid']) == self::UNIT_TYPE_GYM) { if (intval($student['lastschool_unittypeid']) == self::UNIT_TYPE_GYM) {
$check_promotion = false; $check_promotion = false;
...@@ -322,7 +335,7 @@ class ApplicationSubmit extends ControllerBase ...@@ -322,7 +335,7 @@ class ApplicationSubmit extends ControllerBase
$pass = false; $pass = false;
$error_code = 8000; $error_code = 8000;
} }
} } */
return $error_code; return $error_code;
} }
......
...@@ -22,7 +22,7 @@ class DirectorView extends ControllerBase ...@@ -22,7 +22,7 @@ class DirectorView extends ControllerBase
EntityTypeManagerInterface $entityTypeManager, EntityTypeManagerInterface $entityTypeManager,
LoggerChannelFactoryInterface $loggerChannel LoggerChannelFactoryInterface $loggerChannel
) { ) {
$this->entityTypeManager = $entityTypeManager; $this->entityTypeManager = $entityTypeManager;
$this->logger = $loggerChannel->get('epal-school'); $this->logger = $loggerChannel->get('epal-school');
} }
...@@ -164,6 +164,19 @@ class DirectorView extends ControllerBase ...@@ -164,6 +164,19 @@ class DirectorView extends ControllerBase
try { try {
$authToken = $request->headers->get('PHP_AUTH_USER'); $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_students->value) {
return $this->respondWithStatus([
"error_code" => 3002
], Response::HTTP_FORBIDDEN);
}
$users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken)); $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
$user = reset($users); $user = reset($users);
if ($user) { if ($user) {
...@@ -420,6 +433,19 @@ class DirectorView extends ControllerBase ...@@ -420,6 +433,19 @@ class DirectorView extends ControllerBase
} }
$authToken = $request->headers->get('PHP_AUTH_USER'); $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)); $users = $this->entityTypeManager->getStorage('user')->loadByProperties(array('name' => $authToken));
$user = reset($users); $user = reset($users);
if ($user) { if ($user) {
......
...@@ -157,7 +157,7 @@ class Distribution extends ControllerBase { ...@@ -157,7 +157,7 @@ class Distribution extends ControllerBase {
while ($this->choice_id <= $numDistributions) { while ($this->choice_id <= $numDistributions) {
//υπολογισμός πλήθους non-finalized αιτήσεων για να καθοριστεί ο αριθμός των fetches που θα κάνουμε με συγκεκριμένο sizeOfBlock //υπολογισμός πλήθους non-finalized δηλώσεων για να καθοριστεί ο αριθμός των fetches που θα κάνουμε με συγκεκριμένο sizeOfBlock
if ($this->choice_id === 1) { if ($this->choice_id === 1) {
$sCon = $this->connection->select('epal_student', 'eStudent') $sCon = $this->connection->select('epal_student', 'eStudent')
->fields('eStudent', array('id')); ->fields('eStudent', array('id'));
......
...@@ -267,31 +267,20 @@ class InformUnlocatedStudents extends ControllerBase { ...@@ -267,31 +267,20 @@ class InformUnlocatedStudents extends ControllerBase {
. " δεν ικανοποιήθηκε. Παρακαλώ επικοινωνήστε άμεσα τηλεφωνικά με τη Διεύθυνση Δευτεροβάθμιας Εκπαίδευσης / Τμήμα Επαγγελματικής Εκπαίδευσης." . " δεν ικανοποιήθηκε. Παρακαλώ επικοινωνήστε άμεσα τηλεφωνικά με τη Διεύθυνση Δευτεροβάθμιας Εκπαίδευσης / Τμήμα Επαγγελματικής Εκπαίδευσης."
. "\r\n\r\n Ομάδα Διαχείρισης της εφαρμογής e-epal." . "\r\n\r\n Ομάδα Διαχείρισης της εφαρμογής e-epal."
. "\r\n Προσοχή: το μήνυμα που διαβάζετε είναι αυτοματοποιημένο. Παρακαλώ μην απαντάτε σε αυτό το μήνυμα.." ;//e-mail body" ;//e-mail body . "\r\n Προσοχή: το μήνυμα που διαβάζετε είναι αυτοματοποιημένο. Παρακαλώ μην απαντάτε σε αυτό το μήνυμα.." ;//e-mail body" ;//e-mail body
//add new lines with SENDER name - check it
//$params['subject'] = t('Μη ικανοποίηση ηλεκτρονικής αίτησης για εγγραφή σε ΕΠΑΛ');
//$this->logger->warning($params['message']);
//$langcode = $user->getPreferredLangcode();
$send = true; $send = true;
$mail_sent = $mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send); $mail_sent = $mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send);
//$mail_sent = 1;
if ($mail_sent) { if ($mail_sent) {
//$this->logger->info("Το mail στάλθηκε με επιτυχία");
return 1; return 1;
} }
else { else {
//$this->logger->info("Αποτυχία αποστολής mail.");
return 0; return 0;
} }
} }
public function sendMailToLocatedStudents(Request $request) { public function sendMailToLocatedStudents(Request $request) {
//$msg = "test";
try { try {
if (!$request->isMethod('GET')) { if (!$request->isMethod('GET')) {
return $this->respondWithStatus([ return $this->respondWithStatus([
......
...@@ -174,9 +174,9 @@ class PDFCreator extends ControllerBase { ...@@ -174,9 +174,9 @@ class PDFCreator extends ControllerBase {
private function createHeader($student) { private function createHeader($student) {
$this->pdf->SetFont($this->fontBold, '', 16); $this->pdf->SetFont($this->fontBold, '', 16);
$this->pdf->MultiCell(0, 8, $this->prepareString('Ηλεκτρονική Αίτηση Εγγραφής Μαθητή σε ΕΠΑΛ'), 0, 'C'); $this->pdf->MultiCell(0, 8, $this->prepareString('Ηλεκτρονική Δήλωση Προτίμησης ΕΠΑΛ'), 0, 'C');
$this->pdf->SetFont($this->fontBold, '', $this->fontSizeHeader); $this->pdf->SetFont($this->fontBold, '', $this->fontSizeHeader);
$this->pdf->MultiCell(0, 8, $this->prepareString('με αριθμό αίτησης: ' . $student->id->value . ' / ' . date('d-m-y (ώρα: H:i:s)', $student->created->value)), 0, 'C'); $this->pdf->MultiCell(0, 8, $this->prepareString('με αριθμό δήλωσης: ' . $student->id->value . ' / ' . date('d-m-y (ώρα: H:i:s)', $student->created->value)), 0, 'C');
$this->pdf->Ln(); $this->pdf->Ln();
} }
...@@ -391,7 +391,7 @@ class PDFCreator extends ControllerBase { ...@@ -391,7 +391,7 @@ class PDFCreator extends ControllerBase {
$this->pdf->Ln(); $this->pdf->Ln();
$this->pdf->SetFont($this->fontLight, '', $this->fontSizeRegular); $this->pdf->SetFont($this->fontLight, '', $this->fontSizeRegular);
$this->pdf->Cell($width+15, $height, $this->prepareString('Αίτηση από:'), 0, 'L'); $this->pdf->Cell($width+15, $height, $this->prepareString('Δήλωση από:'), 0, 'L');
$this->pdf->SetFont($this->fontBold, '', $this->fontSizeRegular); $this->pdf->SetFont($this->fontBold, '', $this->fontSizeRegular);
//$this->pdf->Cell($width, $height, $this->prepareString($student->relationtostudent->value), 0, 'L'); //$this->pdf->Cell($width, $height, $this->prepareString($student->relationtostudent->value), 0, 'L');
$this->pdf->Cell($width, $height, $this->prepareString($relationtostudent_decoded), 0, 'L'); $this->pdf->Cell($width, $height, $this->prepareString($relationtostudent_decoded), 0, 'L');
......
...@@ -94,12 +94,12 @@ class ReportsCreator extends ControllerBase { ...@@ -94,12 +94,12 @@ class ReportsCreator extends ControllerBase {
], Response::HTTP_FORBIDDEN); ], Response::HTTP_FORBIDDEN);
} }
//υπολογισμός αριθμού αιτήσεων //υπολογισμός αριθμού δηλώσεων
$sCon = $this->connection->select('epal_student', 'eStudent') $sCon = $this->connection->select('epal_student', 'eStudent')
->fields('eStudent', array('id')); ->fields('eStudent', array('id'));
$numTotal = $sCon->countQuery()->execute()->fetchField(); $numTotal = $sCon->countQuery()->execute()->fetchField();
//υπολογισμός αριθμού αιτήσεων που ικανοποιήθηκαν στην i προτίμηση //υπολογισμός αριθμού δηλώσεων που ικανοποιήθηκαν στην i προτίμηση
$numData = array(); $numData = array();
for ($i=0; $i < 3; $i++) { for ($i=0; $i < 3; $i++) {
$sCon = $this->connection->select('epal_student_class', 'eStudent') $sCon = $this->connection->select('epal_student_class', 'eStudent')
...@@ -109,7 +109,7 @@ class ReportsCreator extends ControllerBase { ...@@ -109,7 +109,7 @@ class ReportsCreator extends ControllerBase {
array_push($numData, $sCon->countQuery()->execute()->fetchField()); array_push($numData, $sCon->countQuery()->execute()->fetchField());
} }
// υπολογισμός αριθμού αιτήσεων που ΔΕΝ ικανοποιήθηκαν // υπολογισμός αριθμού δηλώσεων που ΔΕΝ ικανοποιήθηκαν
//Σημείωση: υπολογισμός με queries στη βάση //Σημείωση: υπολογισμός με queries στη βάση
$sCon = $this->connection->select('epal_student_class', 'eStudent') $sCon = $this->connection->select('epal_student_class', 'eStudent')
->fields('eStudent', array('student_id')); ->fields('eStudent', array('student_id'));
...@@ -122,7 +122,7 @@ class ReportsCreator extends ControllerBase { ...@@ -122,7 +122,7 @@ class ReportsCreator extends ControllerBase {
->condition('eStudent.id', $studentIds, 'NOT IN'); ->condition('eStudent.id', $studentIds, 'NOT IN');
$numNoAllocated = $sCon->countQuery()->execute()->fetchField(); $numNoAllocated = $sCon->countQuery()->execute()->fetchField();
//υπολογισμός αριθμού αιτήσεων που τοποθετήθηκαν προσωρινά σε ολιγομελή τμήματα //υπολογισμός αριθμού δηλώσεων που τοποθετήθηκαν προσωρινά σε ολιγομελή τμήματα
$numInSmallClasses = 0; $numInSmallClasses = 0;
$sCon = $this->connection->select('epal_student_class', 'eStudent') $sCon = $this->connection->select('epal_student_class', 'eStudent')
->fields('eStudent', array('id')) ->fields('eStudent', array('id'))
...@@ -132,7 +132,7 @@ class ReportsCreator extends ControllerBase { ...@@ -132,7 +132,7 @@ class ReportsCreator extends ControllerBase {
$list = array(); $list = array();
array_push($list,(object) array('name' => "Αριθμός Αιτήσεων", 'numStudents' => $numTotal)); array_push($list,(object) array('name' => "Αριθμός Δηλώσεων Προτίμησης", 'numStudents' => $numTotal));
array_push($list,(object) array('name' => "Αριθμός μαθητών που τοποθετήθηκαν στην πρώτη τους προτίμηση", 'numStudents' => $numData[0])); array_push($list,(object) array('name' => "Αριθμός μαθητών που τοποθετήθηκαν στην πρώτη τους προτίμηση", 'numStudents' => $numData[0]));
array_push($list,(object) array('name' => "Αριθμός μαθητών που τοποθετήθηκαν στην δεύτερή τους προτίμηση", 'numStudents' => $numData[1])); array_push($list,(object) array('name' => "Αριθμός μαθητών που τοποθετήθηκαν στην δεύτερή τους προτίμηση", 'numStudents' => $numData[1]));
array_push($list,(object) array('name' => "Αριθμός μαθητών που τοποθετήθηκαν στην τρίτη τους προτίμηση", 'numStudents' => $numData[2])); array_push($list,(object) array('name' => "Αριθμός μαθητών που τοποθετήθηκαν στην τρίτη τους προτίμηση", 'numStudents' => $numData[2]));
......
...@@ -8,16 +8,15 @@ use Symfony\Component\HttpFoundation\JsonResponse; ...@@ -8,16 +8,15 @@ use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Drupal\Core\Database\Connection;
use Drupal\Core\Logger\LoggerChannelFactoryInterface; use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\epal\Crypt; use Drupal\epal\Crypt;
class SubmitedApplications extends ControllerBase class SubmitedApplications extends ControllerBase
{ {
protected $entityTypeManager; protected $entityTypeManager;
protected $logger; protected $logger;
protected $connection;
/* /*
public function __construct(EntityTypeManagerInterface $entityTypeManager) public function __construct(EntityTypeManagerInterface $entityTypeManager)
{ {
...@@ -27,51 +26,50 @@ class SubmitedApplications extends ControllerBase ...@@ -27,51 +26,50 @@ class SubmitedApplications extends ControllerBase
*/ */
public function __construct( public function __construct(
EntityTypeManagerInterface $entityTypeManager, EntityTypeManagerInterface $entityTypeManager,
LoggerChannelFactoryInterface $loggerChannel) Connection $connection,
{ LoggerChannelFactoryInterface $loggerChannel)
$this->entityTypeManager = $entityTypeManager; {
$this->logger = $loggerChannel->get('epal'); $this->entityTypeManager = $entityTypeManager;
} $this->connection = $connection;
$this->logger = $loggerChannel->get('epal');
}
public static function create(ContainerInterface $container) public static function create(ContainerInterface $container)
{ {
return new static( return new static(
$container->get('entity_type.manager'), $container->get('entity_type.manager'),
$container->get('database'),
$container->get('logger.factory') $container->get('logger.factory')
); );
} }
public function getSubmittedApplications(Request $request) public function getSubmittedApplications(Request $request)
{ {
$authToken = $request->headers->get('PHP_AUTH_USER'); $authToken = $request->headers->get('PHP_AUTH_USER');
$epalUsers = $this->entityTypeManager->getStorage('epal_users')->loadByProperties(array('authtoken' => $authToken)); $epalUsers = $this->entityTypeManager->getStorage('epal_users')->loadByProperties(array('authtoken' => $authToken));
$epalUser = reset($epalUsers); $epalUser = reset($epalUsers);
if ($epalUser) { if ($epalUser) {
$userid = $epalUser -> id(); $userid = $epalUser->id();
$epalStudents = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('epaluser_id' => $userid)); $epalStudents = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('epaluser_id' => $userid));
$i = 0; $i = 0;
if ($epalStudents) { if ($epalStudents) {
$crypt = new Crypt(); $crypt = new Crypt();
$list = array(); $list = array();
foreach ($epalStudents as $object) { foreach ($epalStudents as $object) {
$indexid = intval($object->id()) - 1;
$indexid = intval($object -> id())-1; try {
$name_decoded = $crypt->decrypt($object->name->value);
try { $studentsurname_decoded = $crypt->decrypt($object->studentsurname->value);
$name_decoded = $crypt->decrypt($object->name->value); } catch (\Exception $e) {
$studentsurname_decoded = $crypt->decrypt($object->studentsurname->value);
}
catch (\Exception $e) {
unset($crypt); unset($crypt);
$this->logger->warning($e->getMessage()); $this->logger->warning($e->getMessage());
return $this->respondWithStatus([ return $this->respondWithStatus([
"message" => t("An unexpected error occured during DECODING data in getSubmittedApplications Method ") 'message' => t('An unexpected error occured during DECODING data in getSubmittedApplications Method '),
], Response::HTTP_INTERNAL_SERVER_ERROR); ], Response::HTTP_INTERNAL_SERVER_ERROR);
} }
...@@ -80,52 +78,39 @@ class SubmitedApplications extends ControllerBase ...@@ -80,52 +78,39 @@ class SubmitedApplications extends ControllerBase
//'name' => $object -> name ->value, //'name' => $object -> name ->value,
'name' => $name_decoded, 'name' => $name_decoded,
//'studentsurname' => $object -> studentsurname ->value); //'studentsurname' => $object -> studentsurname ->value);
'studentsurname' => $studentsurname_decoded ); 'studentsurname' => $studentsurname_decoded, );
$i++; ++$i;
} }
unset($crypt); unset($crypt);
return $this->respondWithStatus( return $this->respondWithStatus(
$list $list, Response::HTTP_OK);
, Response::HTTP_OK); } else {
} return $this->respondWithStatus([
else { 'message' => t('EPAL user not found'),
return $this->respondWithStatus([
'message' => t("EPAL user not found"),
], Response::HTTP_FORBIDDEN); ], Response::HTTP_FORBIDDEN);
} }
} else { } else {
return $this->respondWithStatus([ return $this->respondWithStatus([
'message' => t("User not found"), 'message' => t('User not found'),
], Response::HTTP_FORBIDDEN); ], Response::HTTP_FORBIDDEN);
} }
} }
public function getStudentApplications(Request $request, $studentId)
public function getStudentApplications(Request $request, $studentId)
{ {
$authToken = $request->headers->get('PHP_AUTH_USER'); $authToken = $request->headers->get('PHP_AUTH_USER');
$epalUsers = $this->entityTypeManager->getStorage('epal_users')->loadByProperties(array('authtoken' => $authToken)); $epalUsers = $this->entityTypeManager->getStorage('epal_users')->loadByProperties(array('authtoken' => $authToken));
$epalUser = reset($epalUsers); $epalUser = reset($epalUsers);
if ($epalUser) { if ($epalUser) {
$userid = $epalUser -> id(); $userid = $epalUser->id();
$studentIdNew = intval($studentId) ; $studentIdNew = intval($studentId);
$epalStudents = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('epaluser_id' => $userid, 'id'=> $studentIdNew)); $epalStudents = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('epaluser_id' => $userid, 'id' => $studentIdNew));
$i = 0; $i = 0;
if ($epalStudents) {
$list = array(); if ($epalStudents) {
$list = array();
foreach ($epalStudents as $object) { foreach ($epalStudents as $object) {
$sectorName = ''; $sectorName = '';
...@@ -133,41 +118,41 @@ class SubmitedApplications extends ControllerBase ...@@ -133,41 +118,41 @@ class SubmitedApplications extends ControllerBase
if ($object->currentclass->value === '2') { if ($object->currentclass->value === '2') {
$sectors = $this->entityTypeManager->getStorage('epal_student_sector_field')->loadByProperties(array('student_id' => $object->id())); $sectors = $this->entityTypeManager->getStorage('epal_student_sector_field')->loadByProperties(array('student_id' => $object->id()));
$sector = reset($sectors); $sector = reset($sectors);
if ($sector) if ($sector) {
$sectorName = $this->entityTypeManager->getStorage('eepal_sectors')->load($sector->sectorfield_id->target_id)->name->value; $sectorName = $this->entityTypeManager->getStorage('eepal_sectors')->load($sector->sectorfield_id->target_id)->name->value;
} }
else if ($object->currentclass->value === '3' || $object->currentclass->value === '4') { } elseif ($object->currentclass->value === '3' || $object->currentclass->value === '4') {
$courses = $this->entityTypeManager->getStorage('epal_student_course_field')->loadByProperties(array('student_id' => $object->id())); $courses = $this->entityTypeManager->getStorage('epal_student_course_field')->loadByProperties(array('student_id' => $object->id()));
$course = reset($courses); $course = reset($courses);
if ($course) if ($course) {
$courseName = $this->entityTypeManager->getStorage('eepal_specialty')->load($course->coursefield_id->target_id)->name->value; $courseName = $this->entityTypeManager->getStorage('eepal_specialty')->load($course->coursefield_id->target_id)->name->value;
}
} }
$crypt = new Crypt(); $crypt = new Crypt();
try { try {
$name_decoded = $crypt->decrypt($object->name->value); $name_decoded = $crypt->decrypt($object->name->value);
$studentsurname_decoded = $crypt->decrypt($object->studentsurname->value); $studentsurname_decoded = $crypt->decrypt($object->studentsurname->value);
$fatherfirstname_decoded = $crypt->decrypt($object->fatherfirstname->value); $fatherfirstname_decoded = $crypt->decrypt($object->fatherfirstname->value);
$motherfirstname_decoded = $crypt->decrypt($object->motherfirstname->value); $motherfirstname_decoded = $crypt->decrypt($object->motherfirstname->value);
$regionaddress_decoded = $crypt->decrypt($object->regionaddress->value); $regionaddress_decoded = $crypt->decrypt($object->regionaddress->value);
$regiontk_decoded = $crypt->decrypt($object->regiontk->value); $regiontk_decoded = $crypt->decrypt($object->regiontk->value);
$regionarea_decoded = $crypt->decrypt($object->regionarea->value); $regionarea_decoded = $crypt->decrypt($object->regionarea->value);
$certificatetype_decoded = $crypt->decrypt($object->certificatetype->value); $certificatetype_decoded = $crypt->decrypt($object->certificatetype->value);
$relationtostudent_decoded = $crypt->decrypt($object->relationtostudent->value); $relationtostudent_decoded = $crypt->decrypt($object->relationtostudent->value);
$telnum_decoded = $crypt->decrypt($object->telnum->value); $telnum_decoded = $crypt->decrypt($object->telnum->value);
$guardian_name_decoded = $crypt->decrypt($object->guardian_name->value); $guardian_name_decoded = $crypt->decrypt($object->guardian_name->value);
$guardian_surname_decoded = $crypt->decrypt($object->guardian_surname->value); $guardian_surname_decoded = $crypt->decrypt($object->guardian_surname->value);
$guardian_fathername_decoded = $crypt->decrypt($object->guardian_fathername->value); $guardian_fathername_decoded = $crypt->decrypt($object->guardian_fathername->value);
$guardian_mothername_decoded = $crypt->decrypt($object->guardian_mothername->value); $guardian_mothername_decoded = $crypt->decrypt($object->guardian_mothername->value);
} } catch (\Exception $e) {
catch (\Exception $e) {
//print_r($e->getMessage()); //print_r($e->getMessage());
unset($crypt); unset($crypt);
$this->logger->warning($e->getMessage()); $this->logger->warning($e->getMessage());
return $this->respondWithStatus([
"message" => t("An unexpected error occured during DECODING data in getStudentApplications Method ") return $this->respondWithStatus([
], Response::HTTP_INTERNAL_SERVER_ERROR); 'message' => t('An unexpected error occured during DECODING data in getStudentApplications Method '),
], Response::HTTP_INTERNAL_SERVER_ERROR);
} }
unset($crypt); unset($crypt);
...@@ -179,182 +164,156 @@ class SubmitedApplications extends ControllerBase ...@@ -179,182 +164,156 @@ class SubmitedApplications extends ControllerBase
'studentsurname' => $studentsurname_decoded, 'studentsurname' => $studentsurname_decoded,
//'fatherfirstname' => $object -> fatherfirstname ->value, //'fatherfirstname' => $object -> fatherfirstname ->value,
'fatherfirstname' => $fatherfirstname_decoded, 'fatherfirstname' => $fatherfirstname_decoded,
'fathersurname' =>$object -> fathersurname ->value, 'fathersurname' => $object->fathersurname->value,
//'motherfirstname' => $object -> motherfirstname ->value, //'motherfirstname' => $object -> motherfirstname ->value,
'motherfirstname' => $motherfirstname_decoded, 'motherfirstname' => $motherfirstname_decoded,
'mothersurname' =>$object -> mothersurname ->value, 'mothersurname' => $object->mothersurname->value,
//'guardian_name' =>$object -> guardian_name ->value, //'guardian_name' =>$object -> guardian_name ->value,
'guardian_name' =>$guardian_name_decoded, 'guardian_name' => $guardian_name_decoded,
//'guardian_surname' =>$object -> guardian_surname ->value, //'guardian_surname' =>$object -> guardian_surname ->value,
'guardian_surname' => $guardian_surname_decoded, 'guardian_surname' => $guardian_surname_decoded,
//'guardian_fathername' =>$object -> guardian_fathername ->value, //'guardian_fathername' =>$object -> guardian_fathername ->value,
'guardian_fathername' =>$guardian_fathername_decoded, 'guardian_fathername' => $guardian_fathername_decoded,
//'guardian_mothername' =>$object -> guardian_mothername ->value,