mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-27 00:49:28 +00:00
Merge branches 'feature-3716/Messaging_inbox_outbox_user', 'feature-5490/Cronjobs_Priorisierung' and 'master' of https://github.com/FH-Complete/FHC-Core
This commit is contained in:
@@ -1,20 +1,8 @@
|
||||
<?php
|
||||
/**
|
||||
* FH-Complete
|
||||
*
|
||||
* @package FHC-API
|
||||
* @author FHC-Team
|
||||
* @copyright Copyright (c) 2016, fhcomplete.org
|
||||
* @license GPLv3
|
||||
* @link http://fhcomplete.org
|
||||
* @since Version 1.0
|
||||
* @filesource
|
||||
*/
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class MailJob extends CLI_Controller
|
||||
class MailJob extends JOB_Controller
|
||||
{
|
||||
/**
|
||||
* API constructor
|
||||
@@ -28,11 +16,32 @@ class MailJob extends CLI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Send all not sent messages
|
||||
* Parameters are used to overrride messages and mail configuration
|
||||
* Send all the NOT sent notice emails for messaging system
|
||||
* The parameters are all not mandatory, they could be used to overrides the configs for testing, debug or one shot purposes
|
||||
*/
|
||||
public function sendMessages($numberToSent = null, $numberPerTimeRange = null, $emailTimeRange = null, $emailFromSystem = null)
|
||||
public function sendAllMessageEmailNotices($since = '1970-01-01', $numberToSent = null, $numberPerTimeRange = null, $emailTimeRange = null, $emailFromSystem = null)
|
||||
{
|
||||
$this->messagelib->sendAllNotices($numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem);
|
||||
$this->logInfo('Send all message email notices started');
|
||||
|
||||
// Send them all!
|
||||
$sendAllEmailNotices = $this->messagelib->sendAllEmailNotices($since, $numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem);
|
||||
|
||||
if (isError($sendAllEmailNotices))
|
||||
{
|
||||
$optionalParameters = new stdClass();
|
||||
$optionalParameters->$since = $since;
|
||||
$optionalParameters->$numberToSent = $numberToSent;
|
||||
$optionalParameters->$numberPerTimeRange = $numberPerTimeRange;
|
||||
$optionalParameters->$emailTimeRange = $emailTimeRange;
|
||||
$optionalParameters->$emailFromSystem = $emailFromSystem;
|
||||
|
||||
$this->logError($sendAllEmailNotices->retval, $optionalParameters);
|
||||
}
|
||||
elseif (!hasData($sendAllEmailNotices))
|
||||
{
|
||||
$this->logInfo('There were no unsent messages');
|
||||
}
|
||||
|
||||
$this->logInfo('Send all message email notices ended');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,787 @@
|
||||
<?php
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Priorisation extends CLI_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Load models
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
//$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
//$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
|
||||
// Load helpers
|
||||
//$this->load->helper('hlp_sancho_helper');
|
||||
}
|
||||
|
||||
/**
|
||||
* runReihungstestJob
|
||||
*/
|
||||
public function runReihungstestJob()
|
||||
{
|
||||
// Get study plans that have no assigned placement tests yet
|
||||
$result = $this->ReihungstestModel->checkMissingReihungstest();
|
||||
|
||||
$missing_rt_arr = array();
|
||||
if (hasData($result))
|
||||
{
|
||||
$missing_rt_arr = $result->retval;
|
||||
}
|
||||
elseif (isError($result))
|
||||
{
|
||||
show_error(getError($result));
|
||||
}
|
||||
|
||||
// Get free places
|
||||
$result = $this->ReihungstestModel->getFreePlaces();
|
||||
|
||||
$free_places_arr = array();
|
||||
if (hasData($result))
|
||||
{
|
||||
$free_places_arr = $result->retval;
|
||||
}
|
||||
elseif (isError($result))
|
||||
{
|
||||
show_error(getError($result));
|
||||
}
|
||||
|
||||
// Prepare data for mail template 'ReihungstestJob'
|
||||
$content_data_arr = $this->_getContentData($missing_rt_arr, $free_places_arr);
|
||||
|
||||
// Send email in Sancho design
|
||||
if (!empty($missing_rt_arr) || !empty($free_places_arr))
|
||||
{
|
||||
sendSanchoMail(
|
||||
'ReihungstestJob',
|
||||
$content_data_arr,
|
||||
MAIL_INFOCENTER,
|
||||
'Support für die Reihungstest-Verwaltung');
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Sends an email to all assistants of a placement test when an anmeldeschluss has been reached
|
||||
*
|
||||
* @param integer $degreeProgram. Kennzahl of Degree Program to check
|
||||
* @param string $bcc. Optional. BCC-Mailadress to send the Mails to
|
||||
* @param string $from. Optional. Sender-Mailadress shown to recipient
|
||||
*/
|
||||
public function runZentraleReihungstestAnmeldefristAssistenzJob($degreeProgram, $bcc = null, $from = null)
|
||||
{
|
||||
// Encode Params
|
||||
if ($bcc != '')
|
||||
{
|
||||
// $bcc can be given as null-string, so check that too
|
||||
if ($bcc == 'null')
|
||||
{
|
||||
$bcc = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$bcc = urldecode($bcc);
|
||||
}
|
||||
}
|
||||
if ($from != '')
|
||||
{
|
||||
$from = urldecode($from);
|
||||
}
|
||||
|
||||
// Get placement tests where registration date was yesterday
|
||||
$result = $this->ReihungstestModel->checkReachedRegistrationDate($degreeProgram);
|
||||
|
||||
$reachedRegistration_rt_arr = array();
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$reachedRegistration_rt_arr = $result->retval;
|
||||
}
|
||||
elseif (isError($result))
|
||||
{
|
||||
show_error(getError($result));
|
||||
}
|
||||
|
||||
$applicants_arr = array();
|
||||
|
||||
foreach ($reachedRegistration_rt_arr as $reihungstest)
|
||||
{
|
||||
$applicants = $this->ReihungstestModel->getApplicantsOfPlacementTestForCronjob($reihungstest->reihungstest_id);
|
||||
|
||||
if (hasData($applicants))
|
||||
{
|
||||
$applicants_arr = $applicants->retval;
|
||||
}
|
||||
elseif (isError($applicants))
|
||||
{
|
||||
show_error(getError($applicants));
|
||||
}
|
||||
|
||||
// Get all Bachelor-Degree-Programs with Mailadress
|
||||
$bachelorStudiengeange = $this->StudiengangModel->loadStudiengaengeFromTyp('b');
|
||||
$bachelorStudiengeange_arr = array();
|
||||
|
||||
if (hasData($bachelorStudiengeange))
|
||||
{
|
||||
$bachelorStudiengeange_arr = $bachelorStudiengeange->retval;
|
||||
}
|
||||
elseif (isError($bachelorStudiengeange))
|
||||
{
|
||||
show_error(getError($bachelorStudiengeange));
|
||||
}
|
||||
|
||||
// If a person ist an applicant of this degree-program send mail with application data
|
||||
// Otherwise inform assistant, that no applicant is registered in this test
|
||||
foreach ($bachelorStudiengeange_arr as $bachelorStudiengang)
|
||||
{
|
||||
$studiengang_kuerzel = strtoupper($bachelorStudiengang->typ.$bachelorStudiengang->kurzbz);
|
||||
$applicantCounter = 0;
|
||||
$mailcontent_data_arr = array();
|
||||
foreach ($applicants_arr as $applicant)
|
||||
{
|
||||
if ($bachelorStudiengang->studiengang_kz == $applicant->studiengang_kz)
|
||||
{
|
||||
$applicantCounter ++;
|
||||
}
|
||||
}
|
||||
if ($applicantCounter == 0)
|
||||
{
|
||||
$mailcontent = '<p style="font-family: verdana, sans-serif;">Der Anmeldeschluss für den zentralen Reihungstest am ' . date_format(date_create($reihungstest->datum), 'd.m.Y') . ' um ' . $reihungstest->uhrzeit . ' Uhr wurde gestern erreicht.</p>';
|
||||
$mailcontent .= '<p style="font-family: verdana, sans-serif;"><b>Für den Studiengang '.$studiengang_kuerzel.' nehmen keine InteressentInnen an diesem Reihungstest teil</b></p>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$mailcontent = '<p style="font-family: verdana, sans-serif;">Der Anmeldeschluss für den zentralen Reihungstest am ' . date_format(date_create($reihungstest->datum), 'd.m.Y') . ' um ' . $reihungstest->uhrzeit . ' Uhr wurde gestern erreicht.</p>';
|
||||
$mailcontent .= '
|
||||
<p style="font-family: verdana, sans-serif;"><b>' . $applicantCounter . '</b> InteressentIn(nen) des Studiengangs ' . $studiengang_kuerzel . ' nehmen daran teil:</p>
|
||||
<p style="font-family: verdana, sans-serif;">
|
||||
<a href="'.APP_ROOT.'vilesci/stammdaten/auswertung_fhtw.php?reihungstest='.$reihungstest->reihungstest_id.'&studiengang='.$bachelorStudiengang->studiengang_kz.'" target="_blank">
|
||||
Liste der Anmeldungen
|
||||
</a>
|
||||
</p>';
|
||||
}
|
||||
$mailcontent_data_arr['table'] = $mailcontent;
|
||||
|
||||
// Send email in Sancho design
|
||||
if (!isEmptyString($mailcontent))
|
||||
{
|
||||
sendSanchoMail(
|
||||
'Sancho_ReihungstestteilnehmerJob',
|
||||
$mailcontent_data_arr,
|
||||
$bachelorStudiengang->email,
|
||||
'Anmeldeschluss Reihungstest ' . date_format(date_create($reihungstest->datum), 'd.m.Y') . ' ' . $reihungstest->uhrzeit . ' Uhr',
|
||||
'sancho_header_min_bw.jpg',
|
||||
'sancho_footer_min_bw.jpg',
|
||||
$from,
|
||||
'',
|
||||
$bcc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks, if an applicant was assigned to a test after Anmeldefrist and sends an email to all responsible assistants
|
||||
*
|
||||
* @param integer $degreeProgram. Kennzahl of Degree Program to check
|
||||
* @param string $bcc. Optional. BCC-Mailadress to send the Mails to
|
||||
* @param string $from. Optional. Sender-Mailadress shown to recipient
|
||||
*/
|
||||
public function runZentraleReihungstestNachtraeglichHinzugefuegtJob($degreeProgram, $bcc = null, $from = null)
|
||||
{
|
||||
// Encode Params
|
||||
if ($bcc != '')
|
||||
{
|
||||
// $bcc can be given as null-string, so check that too
|
||||
if ($bcc == 'null')
|
||||
{
|
||||
$bcc = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$bcc = urldecode($bcc);
|
||||
}
|
||||
}
|
||||
if ($from != '')
|
||||
{
|
||||
$from = urldecode($from);
|
||||
}
|
||||
|
||||
// Get applicants that have been added to a test after Anmeldefrist
|
||||
$result = $this->ReihungstestModel->getApplicantAssignedAfterDate($degreeProgram);
|
||||
|
||||
$applicants_after_anmeldefrist_arr = array();
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$applicants_after_anmeldefrist_arr = $result->retval;
|
||||
}
|
||||
elseif (isError($result))
|
||||
{
|
||||
show_error(getError($result));
|
||||
}
|
||||
|
||||
$studiengang = '';
|
||||
$mailReceipients = ''; // String with all mailadresses
|
||||
$mailcontent_data_arr = array();
|
||||
$headerstyle = 'style="background: #DCE4EF; border: 1px solid #FFF; padding: 4px; text-align: left;"';
|
||||
$rowstyle = 'style="background-color: #EEEEEE; padding: 4px;"';
|
||||
$mailcontent = '';
|
||||
$applicants_list = '';
|
||||
|
||||
if (count($applicants_after_anmeldefrist_arr) > 0)
|
||||
{
|
||||
foreach ($applicants_after_anmeldefrist_arr as $applicant)
|
||||
{
|
||||
if ($studiengang != $applicant->studiengang_kz)
|
||||
{
|
||||
if ($studiengang != '' && $studiengang != $applicant->studiengang_kz)
|
||||
{
|
||||
$bachelorStudiengang = $this->StudiengangModel->load($studiengang);
|
||||
$mailcontent .= $applicants_list;
|
||||
$mailcontent .= '</tbody></table>';
|
||||
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
|
||||
<a href="'.APP_ROOT.'vilesci/stammdaten/auswertung_fhtw.php?reihungstest='.$applicant->reihungstest_id.'&studiengang='.$studiengang.'" target="_blank">
|
||||
Liste der Anmeldungen
|
||||
</a>
|
||||
</p>';
|
||||
$mailcontent_data_arr['table'] = $mailcontent;
|
||||
sendSanchoMail(
|
||||
'Sancho_ReihungstestteilnehmerJob',
|
||||
$mailcontent_data_arr,
|
||||
$bachelorStudiengang->retval[0]->email,
|
||||
'InteressentIn nach Reihungstest-Anmeldeschluss hinzugefügt',
|
||||
'sancho_header_min_bw.jpg',
|
||||
'sancho_footer_min_bw.jpg',
|
||||
$from,
|
||||
'',
|
||||
$bcc);
|
||||
$applicants_list = '';
|
||||
$mailcontent_data_arr = array();
|
||||
}
|
||||
|
||||
$mailcontent = '<p style="font-family: verdana, sans-serif;">Folgende InteressentInnen wurden <b>nach</b> der Anmeldefrist zu einem Reihungstest hinzugefügt.<br>Details siehe Link</p>';
|
||||
$mailcontent .= '
|
||||
<table width="100%" style="cellpadding: 3px; font-family: verdana, sans-serif; border: 1px solid #000000;">
|
||||
<thead>
|
||||
<th ' . $headerstyle . '>Datum des Tests</th>
|
||||
<th ' . $headerstyle . '>Uhrzeit des Tests</th>
|
||||
<th ' . $headerstyle . '>OrgForm</th>
|
||||
<th ' . $headerstyle . '>Semester</th>
|
||||
<th ' . $headerstyle . '>Nachname</th>
|
||||
<th ' . $headerstyle . '>Vorname</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
';
|
||||
}
|
||||
|
||||
$studiengang = $applicant->studiengang_kz;
|
||||
$mailReceipients .= $applicant->email . ';';
|
||||
$applicants_list .= '
|
||||
<tr ' . $rowstyle . '>
|
||||
<td>' . date_format(date_create($applicant->datum), 'd.m.Y') . '</td>
|
||||
<td>' . $applicant->uhrzeit . '</td>
|
||||
<td>' . $applicant->orgform_kurzbz . '</td>
|
||||
<td>' . $applicant->ausbildungssemester . '</td>
|
||||
<td>' . $applicant->nachname . '</td>
|
||||
<td>' . $applicant->vorname . '</td>
|
||||
</tr>
|
||||
';
|
||||
};
|
||||
$bachelorStudiengang = $this->StudiengangModel->load($studiengang);
|
||||
$mailcontent .= $applicants_list;
|
||||
$mailcontent .= '</tbody></table>';
|
||||
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
|
||||
<a href="'.APP_ROOT.'vilesci/stammdaten/auswertung_fhtw.php?reihungstest='.$applicant->reihungstest_id.'&studiengang='.$studiengang.'" target="_blank">
|
||||
Liste der Anmeldungen
|
||||
</a>
|
||||
</p>';
|
||||
$mailcontent_data_arr['table'] = $mailcontent;
|
||||
sendSanchoMail(
|
||||
'Sancho_ReihungstestteilnehmerJob',
|
||||
$mailcontent_data_arr,
|
||||
$bachelorStudiengang->retval[0]->email,
|
||||
'InteressentIn nach Reihungstest-Anmeldeschluss hinzugefügt',
|
||||
'sancho_header_min_bw.jpg',
|
||||
'sancho_footer_min_bw.jpg',
|
||||
$from,
|
||||
'',
|
||||
$bcc);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Sends an email to all applicants of a placement test to remind them 3 working days before
|
||||
*
|
||||
* @param integer $degreeProgram. Kennzahl of Degree Program to check
|
||||
* @param string $bcc. Optional. BCC-Mailadress to send the Mails to
|
||||
* @param string $from. Optional. Sender-Mailadress shown to recipient
|
||||
*/
|
||||
public function remindApplicantsOfPlacementTest($degreeProgram, $bcc = null, $from = null)
|
||||
{
|
||||
// Encode Params
|
||||
if ($bcc != '')
|
||||
{
|
||||
// $bcc can be given as null-string, so check that too
|
||||
if ($bcc == 'null')
|
||||
{
|
||||
$bcc = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$bcc = urldecode($bcc);
|
||||
}
|
||||
}
|
||||
if ($from != '')
|
||||
{
|
||||
$from = urldecode($from);
|
||||
}
|
||||
|
||||
// Get placement tests with testdate within the next 2 weeks
|
||||
$resultNextTestDates = $this->ReihungstestModel->getNextPlacementtests($degreeProgram, 14);
|
||||
if (hasData($resultNextTestDates))
|
||||
{
|
||||
$nextTestDates = $resultNextTestDates->retval;
|
||||
$enddate = '';
|
||||
// Loop through the dates
|
||||
foreach ($nextTestDates as $testDates)
|
||||
{
|
||||
$workingdays = 0;
|
||||
$testsOndate = array();
|
||||
|
||||
// Deduct days till 3 working days are reached
|
||||
for ($i = 1; ; $i++)
|
||||
{
|
||||
if (isDateWorkingDay($testDates->datum, $i) === true)
|
||||
{
|
||||
$workingdays++;
|
||||
}
|
||||
if ($workingdays == 3)
|
||||
{
|
||||
$enddate = date("Y-m-d", strtotime("$testDates->datum -" . $i . " days"));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// If $enddate is today -> load all tests of $testDates->datum
|
||||
if (date("Y-m-d", strtotime($enddate)) == date('Y-m-d'))
|
||||
{
|
||||
$resultTestsOnDate = $this->ReihungstestModel->getTestsOnDate($testDates->datum, $degreeProgram);
|
||||
|
||||
if (hasData($resultTestsOnDate))
|
||||
{
|
||||
$testsOndate = $resultTestsOnDate->retval;
|
||||
}
|
||||
elseif (isError($resultTestsOnDate))
|
||||
{
|
||||
show_error(getError($resultTestsOnDate));
|
||||
}
|
||||
}
|
||||
|
||||
if (!isEmptyArray($testsOndate))
|
||||
{
|
||||
foreach ($testsOndate as $reihungstest)
|
||||
{
|
||||
// Loads applicants of a test
|
||||
$applicants = $this->ReihungstestModel->getApplicantsOfPlacementTest($reihungstest->reihungstest_id);
|
||||
|
||||
if (hasData($applicants))
|
||||
{
|
||||
$applicants_arr = $applicants->retval;
|
||||
}
|
||||
elseif (isError($applicants))
|
||||
{
|
||||
show_error(getError($applicants));
|
||||
}
|
||||
|
||||
foreach ($applicants_arr as $applicant)
|
||||
{
|
||||
$mailcontent_data_arr = array();
|
||||
$mailcontent_data_arr['anrede'] = $applicant->anrede;
|
||||
$mailcontent_data_arr['nachname'] = $applicant->nachname;
|
||||
$mailcontent_data_arr['vorname'] = $applicant->vorname;
|
||||
$mailcontent_data_arr['rt_datum'] = date_format(date_create($reihungstest->datum), 'd.m.Y');
|
||||
$mailcontent_data_arr['rt_uhrzeit'] = date_format(date_create($reihungstest->uhrzeit), 'H:i');
|
||||
$mailcontent_data_arr['rt_raum'] = $applicant->planbezeichnung;
|
||||
if ($applicant->lageplan == '')
|
||||
{
|
||||
$mailcontent_data_arr['wegbeschreibung'] = 'Für diesen Raum liegt noch keine Wegbeschreibung vor.<br><br>No directions were found for this room';
|
||||
}
|
||||
else
|
||||
{
|
||||
$mailcontent_data_arr['wegbeschreibung'] = $applicant->lageplan;
|
||||
}
|
||||
|
||||
sendSanchoMail(
|
||||
'Sancho_RemindApplicantsOfTest',
|
||||
$mailcontent_data_arr,
|
||||
$applicant->email,
|
||||
'Ihre Anmeldung zum Reihungstest - Reminder / Your registration for the placement test - Reminder',
|
||||
DEFAULT_SANCHO_HEADER_IMG,
|
||||
DEFAULT_SANCHO_FOOTER_IMG,
|
||||
$from,
|
||||
'',
|
||||
$bcc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This job sends eMail(s) to the relevant stg assistance(s) informing about:
|
||||
* All applicants, who have sent new applications AFTER they had absolved a
|
||||
* placement test in the actual studiensemester
|
||||
* AND who have been confirmed yesterday.
|
||||
*/
|
||||
public function mailNewApplicants()
|
||||
{
|
||||
// Get yesterdays confirmed applicants for Bachelor-studies
|
||||
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||
$this->PrestudentstatusModel->addSelect('
|
||||
tbl_person.person_id,
|
||||
tbl_prestudentstatus.prestudent_id,
|
||||
tbl_prestudent.studiengang_kz,
|
||||
tbl_prestudentstatus.studiensemester_kurzbz,
|
||||
tbl_prestudentstatus.bestaetigtam,
|
||||
tbl_prestudentstatus.bewerbung_abgeschicktamum
|
||||
');
|
||||
$this->PrestudentstatusModel->addJoin('public.tbl_prestudent', 'prestudent_id');
|
||||
$this->PrestudentstatusModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
$this->PrestudentstatusModel->addJoin('public.tbl_studiengangstyp', 'typ');
|
||||
$this->PrestudentstatusModel->addJoin('public.tbl_person', 'person_id');
|
||||
|
||||
$yesterdays_applicants_arr = $this->PrestudentstatusModel->loadWhere('
|
||||
status_kurzbz = \'Interessent\' AND
|
||||
typ = \'b\' AND
|
||||
bestaetigtam = current_date - 1
|
||||
');
|
||||
|
||||
// Retrieve the person_ids of yesterdays confirmed applicants
|
||||
$person_id_arr = array();
|
||||
if (hasData($yesterdays_applicants_arr))
|
||||
{
|
||||
foreach ($yesterdays_applicants_arr->retval as $yesterdays_applicant)
|
||||
{
|
||||
if (isset($yesterdays_applicant->person_id)) {
|
||||
$person_id_arr[] = $yesterdays_applicant->person_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (isError($yesterdays_applicants_arr))
|
||||
{
|
||||
show_error(getError($yesterdays_applicants_arr));
|
||||
}
|
||||
|
||||
// Get all other prestudenten of the given persons.
|
||||
if (!isEmptyArray($person_id_arr))
|
||||
{
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
$this->PrestudentModel->addDistinct();
|
||||
$this->PrestudentModel->addSelect('
|
||||
person_id,
|
||||
tbl_reihungstest.studiensemester_kurzbz,
|
||||
tbl_reihungstest.reihungstest_id,
|
||||
(SELECT(tbl_reihungstest.datum::text || \' \' || tbl_reihungstest.uhrzeit::text)::timestamp) AS reihungstest_timestamp
|
||||
');
|
||||
$this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
$this->PrestudentModel->addJoin('public.tbl_studiengangstyp', 'typ');
|
||||
$this->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id');
|
||||
$this->PrestudentModel->addJoin('public.tbl_person', 'person_id');
|
||||
$this->PrestudentModel->addJoin('public.tbl_rt_person', 'person_id');
|
||||
$this->PrestudentModel->addJoin('public.tbl_reihungstest', 'tbl_reihungstest.reihungstest_id = tbl_rt_person.rt_id');
|
||||
|
||||
// Store them, if they have already absolved a placement test in the same study term they have applied for.
|
||||
$placement_absolvents_arr = $this->PrestudentModel->loadWhere('
|
||||
person_id IN (' . implode(', ', $person_id_arr) . ') AND
|
||||
typ = \'b\' AND
|
||||
teilgenommen = \'t\' AND
|
||||
tbl_reihungstest.studiensemester_kurzbz IN (
|
||||
SELECT
|
||||
studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
ende >= now()
|
||||
)
|
||||
');
|
||||
}
|
||||
|
||||
// Store data to be send in the email-link
|
||||
$result_arr = array();
|
||||
foreach($yesterdays_applicants_arr->retval as $yesterdays_applicant)
|
||||
{
|
||||
foreach ($placement_absolvents_arr->retval as $placement_absolvent)
|
||||
{
|
||||
if ($yesterdays_applicant->person_id == $placement_absolvent->person_id &&
|
||||
$yesterdays_applicant->studiensemester_kurzbz == $placement_absolvent->studiensemester_kurzbz &&
|
||||
$yesterdays_applicant->bewerbung_abgeschicktamum >= $placement_absolvent->reihungstest_timestamp)
|
||||
{
|
||||
$obj = new stdClass();
|
||||
$obj->prestudent_id = $yesterdays_applicant->prestudent_id; // prestudent_id of the yesterdays applicant
|
||||
$obj->studiengang_kz = $yesterdays_applicant->studiengang_kz; // study program of interest of the yesterdays applicant
|
||||
$obj->reihungstest_id = $placement_absolvent->reihungstest_id; // reihungstest_id of absolved reihungstest of that person
|
||||
|
||||
$result_arr[]= $obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort by STG. This is important to send the mails clustered by STG to the different STG assistances.
|
||||
usort($result_arr, function ($a, $b)
|
||||
{
|
||||
if ($a->studiengang_kz == $b->studiengang_kz) {
|
||||
return 0;
|
||||
}
|
||||
return ($a->studiengang_kz < $b->studiengang_kz) ? -1 : 1;
|
||||
});
|
||||
|
||||
$to = ''; // mail recipient (stg assistance)
|
||||
$content_arr = array(); // url paths to the new applicants
|
||||
$base_link = base_url('vilesci/stammdaten/auswertung_fhtw.php');
|
||||
|
||||
$i = 0; // loop counter
|
||||
$len = count($result_arr);
|
||||
|
||||
// Loop trough list of new applicants
|
||||
foreach($result_arr as $result)
|
||||
{
|
||||
$studiengang = $this->StudiengangModel->load($result->studiengang_kz);
|
||||
$mail_stg_assistance = $studiengang->retval[0]->email;
|
||||
|
||||
// If first loop
|
||||
if ($i == 0)
|
||||
{
|
||||
$to = $mail_stg_assistance; // set recipient initially
|
||||
}
|
||||
|
||||
// If new study is encountered but is not the first loop
|
||||
if ($to != $mail_stg_assistance && $i != 0)
|
||||
{
|
||||
// Prepare content for mail template
|
||||
$content_data_arr = $this->_getContentDataNewApplicant($content_arr);
|
||||
|
||||
// Send mail
|
||||
sendSanchoMail(
|
||||
'BewerberNachReihungstest',
|
||||
$content_data_arr,
|
||||
$to,
|
||||
'Neue Bewerbungen nach absolviertem Reihungstest',
|
||||
'sancho_header_min_bw.jpg',
|
||||
'sancho_footer_min_bw.jpg'
|
||||
);
|
||||
|
||||
// Reset content for new study applicants & reset recipient (new stg assistance)
|
||||
$content_arr = array($base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id);
|
||||
$to = $mail_stg_assistance;
|
||||
}
|
||||
// If same study
|
||||
else
|
||||
{
|
||||
// just add content
|
||||
$content_arr[]= $base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id; // add to content
|
||||
}
|
||||
|
||||
// If last loop
|
||||
if (($i == $len - 1))
|
||||
{
|
||||
// Prepare content for mail template
|
||||
$content_data_arr = $this->_getContentDataNewApplicant($content_arr);
|
||||
|
||||
// Send mail
|
||||
sendSanchoMail(
|
||||
'BewerberNachReihungstest',
|
||||
$content_data_arr,
|
||||
$to,
|
||||
'Neue Bewerbungen nach absolviertem Reihungstest',
|
||||
'sancho_header_min_bw.jpg',
|
||||
'sancho_footer_min_bw.jpg'
|
||||
);
|
||||
}
|
||||
$i++; // iterate counter
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Private methods
|
||||
/**
|
||||
* Returns associative array with data as needed in the reihungstest job template.
|
||||
* @param array $missing_rt_arr Array with studienpläne, which have no assigned placement tests.
|
||||
* @param array $free_places_arr Array with info and amount of free placement test places.
|
||||
* @return array
|
||||
*/
|
||||
private function _getContentData($missing_rt_arr, $free_places_arr)
|
||||
{
|
||||
$style_tbl1 = ' cellpadding="0" cellspacing="10" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" ';
|
||||
$style_tbl2 = ' cellpadding="0" cellspacing="20" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" ';
|
||||
|
||||
// Prepare HTML table with study plans that have no placement tests yet
|
||||
if (!empty($missing_rt_arr)) {
|
||||
$studienplan_list
|
||||
= '
|
||||
<table' . $style_tbl2 . '>
|
||||
';
|
||||
|
||||
foreach ($missing_rt_arr as $rt) {
|
||||
$studienplan_list .= '
|
||||
<tr><td>' . $rt->bezeichnung . '</td></tr>
|
||||
';
|
||||
}
|
||||
|
||||
$studienplan_list .= '
|
||||
</table>
|
||||
';
|
||||
} else {
|
||||
$studienplan_list = '
|
||||
<table' . $style_tbl1 . '>
|
||||
<tr><td>Alles okay! Alle Studienpläne haben zumindest einen Reihungstest.</td></tr>
|
||||
</table>
|
||||
';
|
||||
}
|
||||
|
||||
// Prepare HTML table with information and amount of free places
|
||||
if (!empty($free_places_arr)) {
|
||||
$freie_plaetze_list = '
|
||||
<table' . $style_tbl2 . '>
|
||||
<tr>
|
||||
<th>Fakultät</th>
|
||||
<th>Reihungstesttermine</th>
|
||||
<th>Freie Plätze</th>
|
||||
</tr>
|
||||
';
|
||||
|
||||
foreach ($free_places_arr as $free_place) {
|
||||
$datum = new DateTime($free_place->datum);
|
||||
$style_alarm = ($free_place->freie_plaetze <= 5) ? ' style=" color: red; font-weight: bold" ' : ''; // mark if <=5 free places
|
||||
|
||||
$freie_plaetze_list .= '
|
||||
<tr>
|
||||
<td width="350">' . $free_place->fakultaet . '</td>
|
||||
<td align="center">' . $datum->format('d.m.Y') . '</td>
|
||||
<td align="center"' . $style_alarm . '>' . $free_place->freie_plaetze . '</td>
|
||||
</tr>
|
||||
';
|
||||
}
|
||||
|
||||
$freie_plaetze_list .= '
|
||||
</table>
|
||||
';
|
||||
} else {
|
||||
$freie_plaetze_list = '
|
||||
<table' . $style_tbl1 . '>
|
||||
<tr><td>Es gibt heute keine Ergebnisse zu freien Reihungstestplätze.</td></tr>
|
||||
</table>
|
||||
';
|
||||
}
|
||||
|
||||
// Set associative array with the prepared HTML tables and URL be used by the template's variables
|
||||
$content_data_arr['studienplan_list'] = $studienplan_list;
|
||||
$content_data_arr['freie_plaetze_list'] = $freie_plaetze_list;
|
||||
$content_data_arr['link'] = site_url('/organisation/Reihungstest');
|
||||
|
||||
return $content_data_arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns associative array with data as needed in the BewerberNachReihungstest-template.
|
||||
* @param array $content_arr Array with links to the testtool evaluation page of the new applicants.
|
||||
* @return array
|
||||
*/
|
||||
private function _getContentDataNewApplicant($content_arr)
|
||||
{
|
||||
$content = '';
|
||||
$counter = 1;
|
||||
foreach ($content_arr as $row)
|
||||
{
|
||||
$content .= '<br>Link zu: <a href="'. $row. '">Bewerber '. $counter. '</a>';
|
||||
$counter++;
|
||||
}
|
||||
|
||||
$content_data_arr['link'] = $content;
|
||||
return $content_data_arr;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks the upcoming placement tests if there are correct studyplans assigned
|
||||
* If there are invalid studyplans assigned (outdated because there exists a new version),
|
||||
* it tries to find a better one and assigns it additionaly
|
||||
*/
|
||||
public function correctStudienplan()
|
||||
{
|
||||
// get all placement tests with incorrect studyplan
|
||||
$qry = "
|
||||
SELECT
|
||||
tbl_reihungstest.reihungstest_id,
|
||||
tbl_studienplan.studienplan_id,
|
||||
tbl_reihungstest.studiensemester_kurzbz,
|
||||
tbl_studienordnung.studiengang_kz
|
||||
FROM
|
||||
public.tbl_reihungstest
|
||||
JOIN public.tbl_rt_studienplan ON(tbl_rt_studienplan.reihungstest_id=tbl_reihungstest.reihungstest_id)
|
||||
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
|
||||
WHERE
|
||||
NOT EXISTS(
|
||||
SELECT 1 FROM lehre.tbl_studienplan_semester
|
||||
WHERE studienplan_id=tbl_rt_studienplan.studienplan_id
|
||||
AND tbl_studienplan_semester.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz
|
||||
)
|
||||
AND tbl_reihungstest.datum >= now()
|
||||
AND NOT EXISTS(
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
public.tbl_rt_studienplan rtstp
|
||||
JOIN lehre.tbl_studienplan stp USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung sto USING(studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester stpsem USING(studienplan_id)
|
||||
WHERE
|
||||
sto.studiengang_kz=tbl_studienordnung.studiengang_kz
|
||||
AND rtstp.reihungstest_id=tbl_reihungstest.reihungstest_id
|
||||
AND stpsem.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz
|
||||
)
|
||||
";
|
||||
|
||||
$db = new DB_Model();
|
||||
$result_rt = $db->execReadOnlyQuery($qry);
|
||||
|
||||
if (hasdata($result_rt)) {
|
||||
foreach ($result_rt->retval as $row_rt) {
|
||||
// find an active studyplan for the same degree program with is valid in this semester
|
||||
$result_stpl = $this->StudienplanModel->getStudienplaeneBySemester(
|
||||
$row_rt->studiengang_kz,
|
||||
$row_rt->studiensemester_kurzbz
|
||||
);
|
||||
|
||||
if (hasData($result_stpl)) {
|
||||
foreach ($result_stpl->retval as $row_stpl) {
|
||||
// Add new Studyplan to RtStudienplan if missing
|
||||
$rt_studienplan = $this->RtStudienplanModel->loadWhere(array(
|
||||
"reihungstest_id" => $row_rt->reihungstest_id,
|
||||
"studienplan_id" => $row_stpl->studienplan_id
|
||||
));
|
||||
|
||||
if (!hasData($rt_studienplan)) {
|
||||
echo "\nAdding StudienplanId: $row_stpl->studienplan_id";
|
||||
echo " to ReihungstestId: $row_rt->reihungstest_id";
|
||||
|
||||
$this->RtStudienplanModel->insert(array(
|
||||
"reihungstest_id" => $row_rt->reihungstest_id,
|
||||
"studienplan_id" => $row_stpl->studienplan_id
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -26,8 +26,6 @@ class MessageLib
|
||||
const EMAIL_KONTAKT_TYPE = 'email'; // Email kontakt type
|
||||
const SENT_INFO_NEWLINE = '\n'; // tbl_msg_recipient->sentInfo separator
|
||||
|
||||
const ALT_OE = 'infocenter'; // alternative organisation unit when no one is found for a presetudent
|
||||
|
||||
private $_ci;
|
||||
|
||||
/**
|
||||
@@ -139,27 +137,31 @@ class MessageLib
|
||||
// Public methods called by a job
|
||||
|
||||
/**
|
||||
* Gets all NOT sent messages from DB and sends for each of them the notice email
|
||||
* Does not return anything, it logs info and errors on CI logs and in tbl_msg_recipient table
|
||||
* Gets all messages for which notice emails are still not sent from DB and sends for each of them the notice email
|
||||
* Wrapper for _sendNoticeEmail.
|
||||
*/
|
||||
public function sendAllEmailNotices($numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem)
|
||||
public function sendAllEmailNotices($since, $numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem)
|
||||
{
|
||||
// Overrides MailLib configs with the given parameters
|
||||
$this->_ci->maillib->overrideConfigs($numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem);
|
||||
|
||||
// Retrieves a certain amount of NOT sent messages, the amount is given by maillib->email_number_to_sent
|
||||
$messagesResult = $this->_ci->RecipientModel->getMessages(
|
||||
self::EMAIL_KONTAKT_TYPE,
|
||||
null,
|
||||
$this->_ci->maillib->getEmailNumberToSent()
|
||||
// Retrieves a certain amount of NOT sent messages
|
||||
$messagesResult = $this->_ci->RecipientModel->getNotSentMessages(
|
||||
$this->_ci->maillib->getEmailNumberToSent(),
|
||||
$since
|
||||
);
|
||||
|
||||
if (isError($messagesResult)) terminateWithError(getData($messagesResult)); // If an error occurred then log it and terminate
|
||||
if (isError($messagesResult) || !hasData($messagesResult)) return $messagesResult;
|
||||
|
||||
$sendNotice = $this->_sendNoticeEmails(getData($messagesResult));
|
||||
// Collects all the message ids in an array
|
||||
$messageIds = array();
|
||||
foreach (getData($messagesResult) as $message)
|
||||
{
|
||||
$messageIds[] = $message->message_id;
|
||||
}
|
||||
|
||||
if (isError($sendNotice)) terminateWithError(getData($sendNotice)); // If an error occurred then log it and terminate
|
||||
// Send'em all
|
||||
return $this->_sendNoticeEmails($messageIds);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
@@ -221,7 +223,7 @@ class MessageLib
|
||||
$this->_ci->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
|
||||
// Retrieves organisation units for a user from database
|
||||
$benutzer = $this->_ci->BenutzerfunktionModel->getByPersonId($sender_id);
|
||||
$benutzer = $this->_ci->BenutzerfunktionModel->getActiveFunctionsByPersonId($sender_id);
|
||||
if (isSuccess($benutzer)) // if everything is ok
|
||||
{
|
||||
$ouArray = array();
|
||||
@@ -494,7 +496,7 @@ class MessageLib
|
||||
* Stores the type of error in 'sentinfo' column keeping en eventual previous error
|
||||
* sent column is set to null
|
||||
*/
|
||||
private function _setSentError($message_id, $receiver_id, $sentInfo, $prevSentInfo)
|
||||
private function _updatedRecipientNoticeEmailInfo($message_id, $receiver_id, $sentInfo, $prevSentInfo)
|
||||
{
|
||||
if (!isEmptyString($prevSentInfo))
|
||||
{
|
||||
@@ -759,15 +761,15 @@ class MessageLib
|
||||
if (!$sent)
|
||||
{
|
||||
// Set in database why this email is NOT going to be send
|
||||
$sse = $this->_setSentError(
|
||||
$sse = $this->_updatedRecipientNoticeEmailInfo(
|
||||
$messageData->message_id,
|
||||
$messageData->receiver_id,
|
||||
'An error occurred while sending the notice email',
|
||||
$messageData->sentinfo
|
||||
'An error occurred while sending the notice email', // current info
|
||||
$messageData->sentinfo // previous info
|
||||
);
|
||||
|
||||
// If database error occurred then return it, otherwise return a logic error
|
||||
return isError($sse) ? $sse : error('An error occurred while sending the notice email');
|
||||
return isError($sse) ? $sse : error('An error occurred while updating the recipient notice email info');
|
||||
}
|
||||
else // success!
|
||||
{
|
||||
@@ -776,6 +778,27 @@ class MessageLib
|
||||
if (isError($sss)) return $sss; // If database error occurred then return it
|
||||
}
|
||||
}
|
||||
else // Because was not possible to find a valid contact
|
||||
{
|
||||
$reason = 'Was not possible to find a valid contact for this user'; // default reason
|
||||
|
||||
// In case that the organisation unit does not receive any email notices
|
||||
if (!isEmptyString($messageData->receiver_ou)) $reason = 'This organization unit does not receive email notices';
|
||||
|
||||
// In case that a degree program sent a message to a user without a valid contact or UID
|
||||
if (!isEmptyString($messageData->sender_ou)) $reason = 'Sent from a degree program to a user that does not have a valid UID or a valid contact';
|
||||
|
||||
// Set in database why this email is NOT going to be send
|
||||
$sse = $this->_updatedRecipientNoticeEmailInfo(
|
||||
$messageData->message_id,
|
||||
$messageData->receiver_id,
|
||||
$reason, // current info
|
||||
$messageData->sentinfo // previous info
|
||||
);
|
||||
|
||||
// If database error occurred then return it
|
||||
if (isError($sse)) return $sse;
|
||||
}
|
||||
}
|
||||
|
||||
return success('Notice emails sent successfully');
|
||||
|
||||
@@ -26,6 +26,8 @@ class Messages_model extends CI_Model
|
||||
const TYPE_PERSONS = 'persons';
|
||||
const TYPE_PRESTUDENTS = 'prestudents';
|
||||
|
||||
const ALT_OE = 'infocenter'; // alternative organisation unit when no one is found for a presetudent
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@@ -106,7 +108,7 @@ class Messages_model extends CI_Model
|
||||
{
|
||||
$ouOptions .= sprintf(
|
||||
"\n".'<option value="%s">%s</option>',
|
||||
is_numeric($ou->prestudent_id) ? $ou->oe_kurzbz : MessageLib::ALT_OE,
|
||||
is_numeric($ou->prestudent_id) ? $ou->oe_kurzbz : self::ALT_OE,
|
||||
$ou->bezeichnung . (is_numeric($ou->prestudent_id) ? '' : ' *')
|
||||
);
|
||||
}
|
||||
@@ -509,7 +511,8 @@ class Messages_model extends CI_Model
|
||||
if (!hasData($message)) return error('No messages were saved in database');
|
||||
|
||||
// Write log entry
|
||||
$personLog = $this->_personLog($sender_id, $receiver_id, getData($message)[0]);
|
||||
// NOTE: $receiver_id and $sender_id are switched!!! Currently this is a workaround
|
||||
$personLog = $this->_personLog($receiver_id, $sender_id, getData($message)[0]);
|
||||
if (isError($personLog)) return $personLog;
|
||||
|
||||
return success('Messages sent successfully');
|
||||
|
||||
@@ -11,16 +11,20 @@ class Benutzerfunktion_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_benutzerfunktion';
|
||||
$this->pk = 'benutzerfunktion_id';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the Benutzerfunktion using the person_id
|
||||
*/
|
||||
public function getByPersonId($person_id)
|
||||
public function getActiveFunctionsByPersonId($person_id)
|
||||
{
|
||||
// Join with the table
|
||||
$this->addJoin('public.tbl_benutzer', 'uid');
|
||||
|
||||
return $this->loadWhere(array('person_id' => $person_id));
|
||||
$query = 'SELECT bf.*
|
||||
FROM public.tbl_benutzerfunktion bf
|
||||
JOIN public.tbl_benutzer b USING (uid)
|
||||
WHERE b.person_id = ?
|
||||
AND (bf.datum_von IS NULL OR bf.datum_von <= now())
|
||||
AND (bf.datum_bis IS NULL OR bf.datum_bis >= now())';
|
||||
|
||||
return $this->execQuery($query, array($person_id));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -199,66 +199,24 @@ class Recipient_model extends DB_Model
|
||||
}
|
||||
|
||||
/**
|
||||
* getMessages
|
||||
* Gets all messages for which notice emails are still not sent
|
||||
*
|
||||
* Gets all the messages to be sent
|
||||
*
|
||||
* @param kontaktType specifies the type of the kontakt to get
|
||||
* @param sent specifies the status of the messages to get (NULL never sent, otherwise the shipping date)
|
||||
* @param limit specifies the number of messages to get
|
||||
* @param message_id specifies a single message
|
||||
* @param kontaktType specifies the type of the kontakt to get (email,...)
|
||||
* @param limit specifies the max number of messages to get
|
||||
* @param since specifies from which date messages have to be retrieved
|
||||
*/
|
||||
public function getMessages($kontaktType, $message_id = null, $limit = 1)
|
||||
public function getNotSentMessages($limit, $since)
|
||||
{
|
||||
$query = 'SELECT mm.message_id,
|
||||
ks.kontakt as sender,
|
||||
kr.kontakt as receiver,
|
||||
mu.mitarbeiter_uid as employeeContact,
|
||||
ms.mitarbeiter_uid as senderemployeeContact,
|
||||
mr.person_id as receiver_id,
|
||||
mr.token,
|
||||
mm.subject,
|
||||
mm.body,
|
||||
mr.sentinfo,
|
||||
mr.oe_kurzbz
|
||||
FROM public.tbl_msg_recipient mr INNER JOIN public.tbl_msg_message mm USING (message_id)
|
||||
LEFT JOIN (
|
||||
SELECT person_id, kontakt FROM public.tbl_kontakt WHERE zustellung = true AND kontakttyp = ?
|
||||
) ks ON (ks.person_id = mm.person_id)
|
||||
LEFT JOIN (
|
||||
SELECT person_id, kontakt FROM public.tbl_kontakt WHERE zustellung = true AND kontakttyp = ?
|
||||
) kr ON (kr.person_id = mr.person_id)
|
||||
LEFT JOIN (
|
||||
SELECT b.person_id,
|
||||
m.mitarbeiter_uid
|
||||
FROM public.tbl_benutzer b INNER JOIN public.tbl_mitarbeiter m ON(b.uid = m.mitarbeiter_uid)
|
||||
WHERE b.aktiv = TRUE
|
||||
) mu ON (mu.person_id = mr.person_id)
|
||||
LEFT JOIN (
|
||||
SELECT b.person_id,
|
||||
m.mitarbeiter_uid
|
||||
FROM public.tbl_benutzer b INNER JOIN public.tbl_mitarbeiter m ON(b.uid = m.mitarbeiter_uid)
|
||||
WHERE b.aktiv = TRUE
|
||||
) ms ON (ms.person_id = mm.person_id)
|
||||
WHERE mr.sent IS NULL';
|
||||
$query = 'SELECT mm.message_id
|
||||
FROM public.tbl_msg_recipient mr
|
||||
JOIN public.tbl_msg_message mm USING (message_id)
|
||||
WHERE mr.sent IS NULL
|
||||
AND mr.sentinfo IS NULL
|
||||
AND mm.insertamum > ?
|
||||
ORDER BY mr.insertamum ASC
|
||||
LIMIT ?';
|
||||
|
||||
$parametersArray = array($kontaktType, $kontaktType);
|
||||
|
||||
if (is_numeric($message_id))
|
||||
{
|
||||
array_push($parametersArray, $message_id);
|
||||
$query .= ' AND mm.message_id = ?';
|
||||
}
|
||||
|
||||
$query .= ' ORDER BY mr.insertamum ASC';
|
||||
|
||||
if (is_numeric($limit))
|
||||
{
|
||||
$query .= ' LIMIT ?';
|
||||
array_push($parametersArray, $limit);
|
||||
}
|
||||
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
return $this->execQuery($query, array($since, $limit));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -129,34 +129,29 @@
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="well">
|
||||
<div class="well" id="templatePreviewDiv">
|
||||
<div class="row">
|
||||
<div class="col-lg-3">
|
||||
<div class="form-grop form-inline">
|
||||
|
||||
<div class="col-sm-12" style="display: inline">
|
||||
<div class="form-group form-inline">
|
||||
<div class="input-group">
|
||||
<?php
|
||||
echo $this->widgetlib->widget(
|
||||
'Dropdown_widget',
|
||||
array('elements' => success($recipientsArray), 'emptyElement' => 'Select...'),
|
||||
array('elements' => success($recipientsArray), 'emptyElement' => ucfirst($this->p->t('global', 'empfaenger')).'...'),
|
||||
array(
|
||||
'title' => ucfirst($this->p->t('global', 'empfaenger')).': ',
|
||||
'name' => 'recipients[]',
|
||||
'id' => 'recipients'
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<span class="input-group-btn">
|
||||
<a class="btn btn-default" href="#templatePreviewDiv" id="refresh">
|
||||
<?php echo ucfirst($this->p->t('ui', 'refresh')); ?>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-1 valign-middle">
|
||||
<strong>
|
||||
<a href="#" id="refresh">
|
||||
|
||||
<?php echo ucfirst($this->p->t('ui', 'refresh')); ?>
|
||||
|
||||
</a>
|
||||
</strong>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<textarea id="tinymcePreview"></textarea>
|
||||
|
||||
@@ -63,7 +63,7 @@ class Vorlage_widget extends DropdownWidget
|
||||
FROM tbl_vorlagestudiengang vs INNER JOIN tbl_vorlage v USING(vorlage_kurzbz)
|
||||
) templates';
|
||||
$alias = 'templates';
|
||||
$fields = array("templates.vorlage_kurzbz AS id", "UPPER(templates.oe_kurzbz) || ' - ' || templates.bezeichnung || ' - V' || templates.version AS description");
|
||||
$fields = array("templates.vorlage_kurzbz AS id", "templates.bezeichnung AS description");
|
||||
$where = 'templates.aktiv = TRUE
|
||||
AND templates.subject IS NOT NULL
|
||||
AND templates.text IS NOT NULL
|
||||
|
||||
Reference in New Issue
Block a user