From e3257eef25bf1d00972700249b6ac85e2288d6b6 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 30 Mar 2020 22:44:03 +0200 Subject: [PATCH 1/3] - CL/Messages_model->sendExplicitTemplate now gets the sender id from the configuration if the user is not logged (ex. job) - Added new job application/controllers/jobs/OneTimeMessages.php --- .../controllers/jobs/OneTimeMessages.php | 117 ++++++++++++++++++ application/models/CL/Messages_model.php | 16 +-- 2 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 application/controllers/jobs/OneTimeMessages.php diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php new file mode 100644 index 000000000..5d00611fd --- /dev/null +++ b/application/controllers/jobs/OneTimeMessages.php @@ -0,0 +1,117 @@ +load->model('CL/Messages_model', 'CLMessagesModel'); + } + + /** + * Sends the same message to all the applicants whith: + * - Status set as "Wartender" + * - The given study course type (b = bachelor, m = master) + * - The given semester (ex WS2020) + * - How long since applicant (months) + * - The given template id to be used as message subject and body (vorlage_kurzbz) + */ + public function sendMessageToApplicantsStillWaiting($studyCourseType, $semester, $months, $messageTemplate) + { + $this->logInfo('Send message to applicants still waiting start'); + + $queryParams = array( + $semester, + $studyCourseType, + $studyCourseType, + $semester, + $studyCourseType + ); + + $dbModel = new DB_Model(); + + $dbPrestudents = $dbModel->execReadOnlyQuery( + 'SELECT p.prestudent_id + FROM public.tbl_prestudent p + JOIN public.tbl_prestudentstatus ps USING (prestudent_id) + JOIN public.tbl_studiengang s USING (studiengang_kz) + WHERE ps.status_kurzbz = \'Interessent\' + AND ps.studiensemester_kurzbz = ? + AND ps.datum >= NOW() - \''.$months.' months\'::interval + AND s.typ = ? + AND p.prestudent_id NOT IN ( + SELECT pp.prestudent_id + FROM public.tbl_prestudent pp + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang ss USING (studiengang_kz) + WHERE pss.status_kurzbz = \'Aufgenommener\' + AND ss.typ = ? + AND pp.prestudent_id = p.prestudent_id + ) + AND p.prestudent_id NOT IN ( + SELECT pp.prestudent_id + FROM public.tbl_prestudent pp + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang ss USING (studiengang_kz) + WHERE pss.status_kurzbz = \'Bewerber\' + AND pss.studiensemester_kurzbz = ? + AND ss.typ = ? + AND pp.prestudent_id = p.prestudent_id + )', + $queryParams + ); + + if (isError($dbPrestudents)) + { + $this->logError(getError($dbPrestudents), $queryParams); + } + elseif (!hasData($dbPrestudents)) + { + $this->logInfo('There were no users to send message'); + } + else + { + $prestudentIdsArray = array(); + + foreach (getData($dbPrestudents) as $dbPrestudent) + { + $prestudentIdsArray[] = $dbPrestudent->prestudent_id; + } + + $sendMessage = $this->CLMessagesModel->sendExplicitTemplate( + $prestudentIdsArray, // prestudents id + null, // organization unit + $messageTemplate, // template id + null // extra variables + ); + + if (isError($sendMessage)) + { + $this->logError( + getError($sendMessage), + array( + 'prestudents' => $prestudentIdsArray, + 'template' => $messageTemplate + ) + ); + } + } + + $this->logInfo('Send message to applicants still waiting end'); + } +} + diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index cbb42543f..a162d6639 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -430,8 +430,8 @@ class Messages_model extends CI_Model public function sendExplicitTemplate($prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars) { // Retrieves the sender id - $sender_id = getAuthPersonId(); - if (!is_numeric($sender_id)) show_error('The current logged user person_id is not defined'); + $sender_id = isLogged() ? getAuthPersonId() : null; + if (!is_numeric($sender_id)) $sender_id = $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID); // Retrieves message vars data for the given user/s $msgVarsData = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents); @@ -454,12 +454,12 @@ class Messages_model extends CI_Model if (is_array($msgVars)) $msgVarsDataArray = array_merge($msgVarsDataArray, $msgVars); $message = $this->messagelib->sendMessageUserTemplate( - $msgVarsDataArray['person_id'], // receiversPersonId - $vorlage_kurzbz, // vorlage - $msgVarsDataArray, // parseData - null, // orgform - $sender_id, // sender_id - $oe_kurzbz // senderOU + $msgVarsDataArray['person_id'], // receiversPersonId + $vorlage_kurzbz, // vorlage + $msgVarsDataArray, // parseData + null, // orgform + $sender_id, // sender_id + $oe_kurzbz // senderOU ); if (isError($message)) return $message; From 1376509a370d4d49e406d5e39b213b6785026316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 31 Mar 2020 10:48:06 +0200 Subject: [PATCH 2/3] Adapted SQL for MessageJob --- .../controllers/jobs/OneTimeMessages.php | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php index 5d00611fd..66efe3da5 100644 --- a/application/controllers/jobs/OneTimeMessages.php +++ b/application/controllers/jobs/OneTimeMessages.php @@ -37,6 +37,7 @@ class OneTimeMessages extends JOB_Controller $queryParams = array( $semester, $studyCourseType, + $semester, $studyCourseType, $semester, $studyCourseType @@ -49,28 +50,29 @@ class OneTimeMessages extends JOB_Controller FROM public.tbl_prestudent p JOIN public.tbl_prestudentstatus ps USING (prestudent_id) JOIN public.tbl_studiengang s USING (studiengang_kz) - WHERE ps.status_kurzbz = \'Interessent\' + WHERE ps.status_kurzbz = \'Wartender\' AND ps.studiensemester_kurzbz = ? - AND ps.datum >= NOW() - \''.$months.' months\'::interval + AND ps.datum <= NOW() - \''.$months.' months\'::interval AND s.typ = ? - AND p.prestudent_id NOT IN ( - SELECT pp.prestudent_id + AND NOT EXISTS ( + SELECT pp.person_id FROM public.tbl_prestudent pp JOIN public.tbl_prestudentstatus pss USING (prestudent_id) JOIN public.tbl_studiengang ss USING (studiengang_kz) WHERE pss.status_kurzbz = \'Aufgenommener\' + AND pss.studiensemester_kurzbz = ? AND ss.typ = ? - AND pp.prestudent_id = p.prestudent_id + AND pp.person_id = p.person_id ) - AND p.prestudent_id NOT IN ( - SELECT pp.prestudent_id + AND NOT EXISTS ( + SELECT pp.person_id FROM public.tbl_prestudent pp JOIN public.tbl_prestudentstatus pss USING (prestudent_id) JOIN public.tbl_studiengang ss USING (studiengang_kz) - WHERE pss.status_kurzbz = \'Bewerber\' + WHERE pss.status_kurzbz = \'Student\' AND pss.studiensemester_kurzbz = ? AND ss.typ = ? - AND pp.prestudent_id = p.prestudent_id + AND pp.person_id = p.person_id )', $queryParams ); @@ -114,4 +116,3 @@ class OneTimeMessages extends JOB_Controller $this->logInfo('Send message to applicants still waiting end'); } } - From 625b0f1167b222941df0e318fc74dee86aa74f7d Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 31 Mar 2020 20:21:18 +0200 Subject: [PATCH 3/3] - jobs/OneTimeMessages->sendMessageToApplicantsStillWaiting now accept new message senderId to specify the sender for all the messages - jobs/OneTimeMessages->sendMessageToApplicantsStillWaiting adapted code to make use of the new method CLMessagesModel->sendExplicitTemplateSenderId - jobs/OneTimeMessages->sendMessageToApplicantsStillWaiting now logs the number of prestudents retrieved from database - Renamed CLMessagesModel->sendExplicitTemplate as CLMessagesModel->sendExplicitTemplateSenderId - Added new parameter sender_id to CLMessagesModel->sendExplicitTemplateSenderId to specify the sender person id - Added new public method sendExplicitTemplate to CLMessagesModel as wrapper method for sendExplicitTemplateSenderId - CLMessagesModel->sendExplicitTemplate tries to retrieve the sender id from the authentication session --- .../controllers/jobs/OneTimeMessages.php | 16 ++++++++++------ application/models/CL/Messages_model.php | 19 ++++++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php index 66efe3da5..39e0a946c 100644 --- a/application/controllers/jobs/OneTimeMessages.php +++ b/application/controllers/jobs/OneTimeMessages.php @@ -29,8 +29,9 @@ class OneTimeMessages extends JOB_Controller * - The given semester (ex WS2020) * - How long since applicant (months) * - The given template id to be used as message subject and body (vorlage_kurzbz) + * The sender of all the messages is specified by the parameter senderId (sender person_id) */ - public function sendMessageToApplicantsStillWaiting($studyCourseType, $semester, $months, $messageTemplate) + public function sendMessageToApplicantsStillWaiting($senderId, $studyCourseType, $semester, $months, $messageTemplate) { $this->logInfo('Send message to applicants still waiting start'); @@ -94,11 +95,12 @@ class OneTimeMessages extends JOB_Controller $prestudentIdsArray[] = $dbPrestudent->prestudent_id; } - $sendMessage = $this->CLMessagesModel->sendExplicitTemplate( - $prestudentIdsArray, // prestudents id - null, // organization unit - $messageTemplate, // template id - null // extra variables + $sendMessage = $this->CLMessagesModel->sendExplicitTemplateSenderId( + $senderId, // sender person id + $prestudentIdsArray, // prestudents id + null, // organization unit + $messageTemplate, // template id + null // extra variables ); if (isError($sendMessage)) @@ -111,6 +113,8 @@ class OneTimeMessages extends JOB_Controller ) ); } + + $this->logInfo('Total amount of prestudents: '.count($prestudentIdsArray)); } $this->logInfo('Send message to applicants still waiting end'); diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index a162d6639..119f9b37c 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -422,17 +422,26 @@ class Messages_model extends CI_Model return success('Messages sent successfully'); } - + /** - * Sends a new message using the given template and information present in parameter prestudents - * Extra variables can be added using parameter $msgVars + * Wrapper method for sendExplicitTemplateSenderId + * The sender id is retrieved from the authentication session, if not present an error would be raised */ public function sendExplicitTemplate($prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars) { // Retrieves the sender id - $sender_id = isLogged() ? getAuthPersonId() : null; - if (!is_numeric($sender_id)) $sender_id = $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID); + $sender_id = getAuthPersonId(); + if (!is_numeric($sender_id)) show_error('The current logged user person_id is not defined'); + return $this->sendExplicitTemplateSenderId($sender_id, $prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars); + } + + /** + * Sends a new message using the given template and information present in parameter prestudents + * Extra variables can be added using parameter $msgVars + */ + public function sendExplicitTemplateSenderId($sender_id, $prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars) + { // Retrieves message vars data for the given user/s $msgVarsData = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents); if (isError($msgVarsData)) show_error(getError($msgVarsData));