| Current Path : /var/www/cesa.co.za/cesanet/ |
| Current File : /var/www/cesa.co.za/cesanet/inc_shared.php |
<?php
// error_reporting(E_ALL);
// ini_set('display_errors', 1);
// Include the CESA error handler
include_once($_SERVER['DOCUMENT_ROOT'] . '/php/includes/error_handling/bootstrap.php');
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/maill.php");
include_once($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php');
if (!function_exists('cesaLoadEnvFile')) {
/**
* Load key/value pairs from the project .env file into process env.
* Existing environment variables are not overwritten.
*/
function cesaLoadEnvFile($envFilePath)
{
if (!is_string($envFilePath) || !file_exists($envFilePath) || !is_readable($envFilePath)) {
return;
}
$lines = file($envFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!is_array($lines)) {
return;
}
foreach ($lines as $line) {
$line = trim($line);
if ($line === '' || strpos($line, '#') === 0) {
continue;
}
$splitPos = strpos($line, '=');
if ($splitPos === false) {
continue;
}
$name = trim(substr($line, 0, $splitPos));
$value = trim(substr($line, $splitPos + 1));
if ($name === '') {
continue;
}
// Strip wrapping quotes if present.
if (
strlen($value) >= 2 &&
(($value[0] === '"' && substr($value, -1) === '"') || ($value[0] === "'" && substr($value, -1) === "'"))
) {
$value = substr($value, 1, -1);
}
// Keep explicit process/webserver vars as source of truth.
$existing = getenv($name);
if ($existing !== false && $existing !== '') {
continue;
}
putenv($name . '=' . $value);
$_ENV[$name] = $value;
$_SERVER[$name] = $value;
}
}
}
cesaLoadEnvFile($_SERVER['DOCUMENT_ROOT'] . '/.env');
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/BaseTableClass.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADec_Contacts.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADecQuestionnaires.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADec_OfficeContacts.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADec_PIUnderwriters.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADec_tblMemberFirms.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADec_tblMemberFirmOffices.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADec_tblMemberFirmSkills.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADec_Transformation.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADQAnswers.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADQAudit.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ADQAuditAnswers.php");
include_once($_SERVER['DOCUMENT_ROOT'] . '/php/includes/AnonRespondees.php');
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/AwardsEntries.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/BatchJob.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEAssignment.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEAssignmentMarking.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEBooks.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCECourseSchedules.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEDocCategories.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEDocuments.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEExam.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEConvenorAuth.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEExamQuestion.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEFacilitatorUser.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEMessageLog.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEMessages.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEModules.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEResourceGroups.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEResources.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCESetup.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEStAssigExtension.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEStAssigExtensionRequest.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEStudentAssignment.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEStudentCourses.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEStudents.php");
include_once($_SERVER['DOCUMENT_ROOT'] . '/php/includes/CCEModuleMarksService.php');
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCETemplates.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CCEWeeklySessions.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/Certificates.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/Contact.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CPDServiceProvider.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CPDSPReview.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/CPDTrainingMaterial.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ErrorLog.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/EventSchedules.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/FileUploads.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/HTMLHelper.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/KeyValue.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/MarketingAttendees.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/MemberContact.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/MemberFirm.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/MemberFirmSkill.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/MemberFirmOffices.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/OfficeContact.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/Picklists.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/Questionnaires.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/SchoolAttendees.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/SchoolCourses.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/SchoolEvents.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/SchoolPresenters.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/TrainingProvider.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/TrainingProviderDoc.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/Transformation.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/UnempPractitioners.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/Utils.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/WeeklySessionsParser.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/cstUnreadMessages.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/cstWeeksCourses.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/mail/MailMessages.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/sqlFunctions.php");
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/contracts/fpdf184/fpdf.php')) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/contracts/fpdf184/fpdf.php');
}
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/contracts/FPDI-2.3.6/src/autoload.php')) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/contracts/FPDI-2.3.6/src/autoload.php');
}
$env = 'prod';
if (
strpos($_SERVER['HTTP_HOST'], 'devstage') !== false
|| strpos($_SERVER['DOCUMENT_ROOT'], 'clients/client') !== false
|| strpos($_SERVER['HTTP_HOST'], 'cesa.local') !== false
|| strpos($_SERVER['HTTP_HOST'], 'localhost') !== false
|| strpos($_SERVER['DOCUMENT_ROOT'], 'BitBucket') !== false
) {
$env = 'dev';
}
function GeneratePDF($sToFile, $content, $orientation = "portrait", $margin = 10)
{
if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/echasl23/downloads/")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/echasl23/downloads/");
}
$newfile = $_SERVER['DOCUMENT_ROOT'] . "/echasl23/downloads/" . str_replace(".html", "_html.pdf", $sToFile);
// echo $newfile;
// exit;
if (file_exists($newfile))
unlink($newfile);
$sHTMLfile = $_SERVER['DOCUMENT_ROOT'] . "/echasl23/downloads/" . $sToFile;
if (file_exists($sHTMLfile))
unlink($sHTMLfile);
file_put_contents($sHTMLfile, $content);
$process = $_SERVER['DOCUMENT_ROOT'] . '/wkhtmltopdf/wkhtmltox/bin/wkhtmltopdf';
if (
strpos($_SERVER['HTTP_HOST'], 'dev') !== false
|| strpos($_SERVER['HTTP_HOST'], 'cesa.local') !== false
|| strpos($_SERVER['HTTP_HOST'], 'localhost') !== false
) {
$process = 'wkhtmltopdf';
}
$process .= ' -B ' . $margin . ' -L ' . $margin . ' -R ' . $margin . ' -T ' . $margin . ' --print-media-type ';
if ($orientation == "landscape")
$process .= " -O landscape ";
$process .= '--load-error-handling abort "' . $sHTMLfile . '" "' . $newfile . '"';
exec($process, $error);
var_dump($error);
if (file_exists($newfile)) {
$f = fopen($newfile, "rb+");
fseek($f, 44);
fwrite($f, " ");
fseek($f, 95);
fwrite($f, " ");
fclose($f);
}
return str_replace(".html", "_html.pdf", $sToFile);
}
function CreateThumb($iDocID, $iDocFile, $sTable = "", $docData = array())
{
global $conni;
if (strlen($sTable) <= 0) {
$sTable = 'CCEDocuments';
}
if (isset($docData['DocumentCategory'])) {
$docthumb = '/cesanet/images/';
$moduleName = '';
switch ($docData['CCEModuleID']) {
case 1:
$moduleName .= 'cee';
break;
case 2:
$moduleName .= 'project-deliver';
break;
case 3:
$moduleName .= 'finance';
break;
default:
$moduleName .= 'law';
break;
}
switch ($docData['DocumentCategory']) {
case 1:
$docthumb .= 'pre-block-reading.jpg';
break;
case 2:
$docthumb .= 'timetable.png';
break;
case 3:
$docthumb .= 'reference-' . $moduleName . '.png';
break;
case 5:
$docthumb .= 'reading-resources.jpg';
break;
case 7:
$docthumb .= 'presentation-' . $moduleName . '.png';
break;
case 8:
$docthumb .= 'general.png';
break;
case 9:
$docthumb .= 'docs-hard-copy.png';
break;
default:
$docthumb .= 'general.png';
break;
}
} else {
$im = new imagick('../cceadmin/documents/' . $iDocFile . '[0]');
$im->setImageFormat("jpg");
$im->thumbnailImage(0, 60);
$im->borderImage(new ImagickPixel("black"), 1, 1);
$docthumb = 'docthumbs/' . "doc" . $iDocID . ".jpg";
$im->writeImage($_SERVER['DOCUMENT_ROOT'] . '/cesanet/' . $docthumb);
}
$sql = "UPDATE " . $sTable . " SET DocumentThumb='" . $docthumb . "' WHERE CCEDocumentID=" . $iDocID;
mysqli_query($conni, $sql);
return $docthumb;
}
function GetResubDate($iAssigID, $studentID = 0)
{
global $sqlf;
$studentAssignmentObj = new CCEStudentAssignment($sqlf);
return $studentAssignmentObj->getResubmitDate($iAssigID, $studentID);
/*
global $conni;
// When was the feedback sent?
$sql = "SELECT MIN(CCEMessages.SentDateTime) AS FeedbackSent, SA1.ResubmitDateOverride
FROM CCEStudentAssignments SA1
JOIN CCEAssignmentFeedback ON (SA1.CCEStudentAssigID=CCEAssignmentFeedback.CCEStudentAssigID)
JOIN CCEMessages USING (CCEMessageID)
WHERE SA1.CCEAssignmentID=" . $iAssigID . " AND SA1.Passed>0";
if ($studentID > 0) {
$sql .= ' AND SA1.CCEStudentID = ' . $studentID;
}
// echo '==========================<br />'
// . 'Please ignore debug information: ' . $sql . '<br />'
// . '==========================<br />';
$recR = mysqli_query($conni, $sql);
if ($rowR = mysqli_fetch_assoc($recR)) {
if (!empty($rowR["ResubmitDateOverride"]) && strlen($rowR["ResubmitDateOverride"]) > 0 && $studentID > 0) {
//Only take resubmit date into account for individual students
// echo $rowR["FeedbackSent"];
// exit;
return date("Y-m-d", strtotime($rowR["ResubmitDateOverride"]));
} elseif (!empty($rowR["FeedbackSent"]) && strlen($rowR['FeedbackSent']) > 0) {
// echo $rowR["FeedbackSent"];
// exit;
return date("Y-m-d", strtotime("+15 days", strtotime($rowR["FeedbackSent"])));
}
}
return "";
*/
}
function GetOverdue($iStudentID, $sModules)
{
global $conni;
if (empty($sModules))
$sModules = "1,2,3,4,5";
$sql = "SELECT DueDate, CCEAssignments.CCEAssignmentID, RefNum, AssignmentName, MAX(CCEExtensionDate) AS ExtDate, GROUP_CONCAT(CCEStudentAssignments.CCEStudentAssigID) AS CCEStudentAssigID,
GROUP_CONCAT(DISTINCT RulingCode) AS Rulings
FROM CCEAssignments LEFT JOIN CCEStudentAssignments
ON (CCEAssignments.CCEAssignmentID=CCEStudentAssignments.`CCEAssignmentID`
AND CCEStudentAssignments.`CCEStudentID`=" . $iStudentID . ")
LEFT JOIN CCEStAssigExtensionRequests ON (CCEAssignments.CCEAssignmentID=CCEStAssigExtensionRequests.`CCEAssignmentID`
AND CCEStAssigExtensionRequests.`CCEStudentID`=" . $iStudentID . "
AND CCEStAssigExtensionRequests.Status='A')
WHERE CCEAssignments.`Archived`=0
AND CCEAssignments.CCEModuleID IN (" . $sModules . ")
AND CCEAssignments.`DueDate`<CURDATE()
AND YEAR(CCEAssignments.DueDate)=YEAR(NOW())
GROUP BY DueDate, CCEAssignments.CCEAssignmentID, RefNum, AssignmentName
ORDER BY DueDate";
// echo '<!-- ' . $sql . ' -->';
$recOverdue = mysqli_query($conni, $sql);
$arrOverdue = array();
while ($recOverdue && $rowOverdue = mysqli_fetch_assoc($recOverdue)) {
if (empty($rowOverdue["CCEStudentAssigID"])) {
if (empty($rowOverdue["ExtDate"]) || (strtotime($rowOverdue["ExtDate"]) < mktime(0))) {
$arrOverdue[$rowOverdue["CCEAssignmentID"]] = date("d M", strtotime($rowOverdue["DueDate"])) . ": <a href='/cesanet/assignmentinfo.php?id=" . $rowOverdue["CCEAssignmentID"] . "'>" . $rowOverdue["RefNum"] . ": " . $rowOverdue["AssignmentName"] . "</a>";
}
} elseif ((strpos($rowOverdue["CCEStudentAssigID"], ",") === false) && ($rowOverdue["Rulings"] == "R")) {
$dtResub = GetResubDate($rowOverdue["CCEAssignmentID"]);
if (!empty($dtResub) && (strtotime($dtResub) < mktime(0))) {
$arrOverdue[$rowOverdue["CCEAssignmentID"]] = date("d M", strtotime($dtResub)) . ": <a href='/cesanet/assignmentinfo.php?id=" . $rowOverdue["CCEAssignmentID"] . "'>" . $rowOverdue["RefNum"] . ": " . $rowOverdue["AssignmentName"] . " (Resubmission)</a>";
}
}
}
if (!is_array($arrOverdue)) {
$arrOverdue = array();
}
return $arrOverdue;
}
function GetAverageAssigScore($iStudentID = 0, $bInterim = false, $moduleNum = 0, $year = 0)
{
global $conni;
$sModulesEnrolled = "1,2,3,4,5";
$sql = "SELECT ModulesEnrolled FROM CCEStudents WHERE CCEStudentID=" . $iStudentID;
$recAS = mysqli_query($conni, $sql);
if ($rowAS = mysqli_fetch_assoc($recAS)) {
$sModulesEnrolled = $rowAS["ModulesEnrolled"];
}
mysqli_free_result($recAS);
if ($bInterim) {
$sql = "SELECT AVG(CCEAssignmentMarking.Score) AS ScoreAvg
FROM CCEStudents INNER JOIN CCEStudentCourses USING (CCEStudentID)";
if ($year <= 0) {
$sql .= " INNER JOIN CCESetup ON (CCEStudentCourses.CCECourseScheduleID=CCESetup.CurrentScheduleID) ";
}
$sql .= " INNER JOIN CCEStudentAssignments on (CCEStudents.CCEStudentID=CCEStudentAssignments.CCEStudentID)
INNER JOIN CCEAssignmentMarking on (CCEAssignmentMarking.CCEStudentAssigID=CCEStudentAssignments.CCEStudentAssigID)
INNER JOIN CCEAssignments ON (CCEAssignments.CCEAssignmentID=CCEStudentAssignments.CCEAssignmentID)
WHERE ";
if ($iStudentID > 0) {
$sql .= "CCEStudentAssignments.CCEStudentID=" . $iStudentID . " AND ";
}
if ($year <= 0) {
$year = date('Y');
}
$sql .= "CCEAssignmentMarking.Ruling NOT IN ('R', '')
AND YEAR(CCEStudentAssignments.DateSubmitted)=" . $year . "
AND CCEAssignments.CCEModuleID IN (" . $sModulesEnrolled . ")";
} else {
$sql = "SELECT AVG(CCEStudentAssignments.AssignmentScore) AS ScoreAvg
FROM CCEStudents INNER JOIN CCEStudentCourses USING (CCEStudentID) ";
if ($year <= 0) {
$sql .= " INNER JOIN CCESetup ON (CCEStudentCourses.CCECourseScheduleID=CCESetup.CurrentScheduleID) ";
}
$sql .= " INNER JOIN CCEStudentAssignments on (CCEStudents.CCEStudentID=CCEStudentAssignments.CCEStudentID)
INNER JOIN CCEAssignments ON (CCEAssignments.CCEAssignmentID=CCEStudentAssignments.CCEAssignmentID)
WHERE ";
if ($iStudentID > 0) {
$sql .= " CCEStudentAssignments.CCEStudentID=" . $iStudentID . " AND ";
}
if ($year <= 0) {
$year = date('Y');
}
// $sql .= "CCEStudents.Archived=0 AND ";
$sql .= " YEAR(CCEStudentAssignments.DateSubmitted) = " . $year . " AND ";
$sql .= " CCEStudentAssignments.RulingCode NOT IN ('R', '') AND CCEAssignments.CCEModuleID IN (" . $sModulesEnrolled . ")";
}
// echo $sql;
if ($moduleNum > 0) {
$sql .= ' AND CCEAssignments.CCEModuleID = ' . $moduleNum;
}
// Omit scores for modules in ModulesExcluded (class aggregates and per-student averages).
if (class_exists('CCEStudents')) {
$sql .= CCEStudents::sqlClassAverageExclusionClause('CCEStudents', 'CCEAssignments.CCEModuleID');
}
$recAvg = mysqli_query($conni, $sql);
if ($rowAvg = mysqli_fetch_assoc($recAvg)) {
$iAvg = number_format($rowAvg["ScoreAvg"], 1);
} else
$iAvg = 0;
mysqli_free_result($recAvg);
return $iAvg;
}
function GetClassAssigAverage($iAssigID = 0, $moduleId = 0, $studentId = 0)
{
global $conni;
$sql = "SELECT AVG(CCEStudentAssignments.AssignmentScore) AS ScoreAvg
FROM CCEStudents INNER JOIN CCEStudentCourses USING (CCEStudentID)
INNER JOIN CCESetup ON (CCEStudentCourses.CCECourseScheduleID=CCESetup.CurrentScheduleID)
INNER JOIN CCEStudentAssignments on (CCEStudents.CCEStudentID=CCEStudentAssignments.CCEStudentID)
INNER JOIN CCEAssignments ON CCEStudentAssignments.CCEAssignmentID = CCEAssignments.CCEAssignmentID
WHERE CCEStudents.Archived=0 AND YEAR(CCEStudentAssignments.DateSubmitted)=" . date("Y") . "
AND CCEStudentAssignments.RulingCode NOT IN ('R', '')";
if (!empty($iAssigID)) {
$sql .= " AND CCEStudentAssignments.CCEAssignmentID=" . intval($iAssigID);
}
if ($moduleId > 0) {
$sql .= " AND CCEAssignments.CCEModuleID=" . intval($moduleId);
}
if ($studentId > 0) {
$sql .= " AND CCEStudentAssignments.CCEStudentID=" . intval($studentId);
}
if (class_exists('CCEStudents')) {
$sql .= CCEStudents::sqlClassAverageExclusionClause('CCEStudents', 'CCEAssignments.CCEModuleID');
}
// echo '< ! -- ' . $sql . ' -- >';
$rec = mysqli_query($conni, $sql);
if ($row = mysqli_fetch_assoc($rec)) {
$iClassAvg = number_format($row["ScoreAvg"], 1);
} else
$iClassAvg = 0;
mysqli_free_result($rec);
return $iClassAvg;
}
function SendStudentEmail($iStudentID, $iAssigID, $sStatus, $fullMessage = '', $subject = '')
{
global $conni;
$extensionDate = '';
$sql = "SELECT FacilitatorID, FullName FROM CCEFacilitatorUsers WHERE Username='" . $_SESSION[EW_SESSION_USER_PROFILE_USER_NAME] . "'";
// echo $sql;
// exit;
$SentByFacilitatorID = 0;
$recFrom = mysqli_query($conni, $sql);
if ($rowFrom = mysqli_fetch_assoc($recFrom)) {
$sFrom = $rowFrom["FullName"];
$SentByFacilitatorID = $rowFrom["FacilitatorID"] + 0;
}
mysqli_free_result($recFrom);
$sql = "SELECT CCEAssignments.CCEModuleID, CCEAssignments.RefNum, CCEAssignments.AssignmentName, "
. "CCEStAssigExtensionRequests.CCEExtensionDate, CCEStAssigExtensionRequests.StatusReason "
. "FROM CCEAssignments "
. "LEFT OUTER JOIN CCEStAssigExtensionRequests ON "
. "(CCEAssignments.CCEAssignmentID=CCEStAssigExtensionRequests.`CCEAssignmentID` "
. "AND CCEStAssigExtensionRequests.`CCEStudentID`=" . $iStudentID . ") "
. "WHERE CCEAssignments.CCEAssignmentID=" . $iAssigID . " "
. "ORDER BY CCEStAssigExtensionRequests.CCEStAssigExtensionID DESC";
// echo $sql;
$recAssig = mysqli_query($conni, $sql);
$statusReason = '';
if ($rowAssig = mysqli_fetch_assoc($recAssig)) {
$sRefNum = $rowAssig["RefNum"] . ' - ' . $rowAssig["AssignmentName"];
$sModuleID = $rowAssig["CCEModuleID"];
$extensionDate = $rowAssig["CCEExtensionDate"];
if (strlen($rowAssig['StatusReason']) > 0) {
$statusReason = "\r\n\r\n" . 'Convenors comments: ' . $rowAssig['StatusReason'] . "\r\n\r\n";
}
}
mysqli_free_result($recAssig);
$sSentTo = "";
$sql = "SELECT FirstName, Surname, EmailAddress, KnownAs FROM CCEStudents WHERE CCEStudentID=" . intval($iStudentID);
$recTo = mysqli_query($conni, $sql);
if ($rowTo = mysqli_fetch_assoc($recTo)) {
$sSentTo = $rowTo["KnownAs"] . " " . $rowTo["Surname"];
$sEmail = $rowTo["EmailAddress"];
}
if (
strpos($_SERVER['HTTP_HOST'], 'dev') !== false
|| strpos($_SERVER['HTTP_HOST'], 'cesa.local') !== false
|| strpos($_SERVER['HTTP_HOST'], 'localhost') !== false
) {
$sEmail = 'cesa-sce-student@igotafrica.com';
}
mysqli_free_result($recTo);
$sSubject = "BCE Assignment Extension Decision: " . $sRefNum;
if ($sStatus == "A") {
$sMessage = "Your request for an extension for assignment " . $sRefNum . " has been approved until " . $extensionDate . ". "
. "Please ensure you meet the extension deadline, otherwise late penalties will apply.";
} elseif ($sStatus == "P") {
$sMessage = "Your request for an extension for assignment " . $sRefNum . " has been approved with a penalty of -1 "
. "until " . $extensionDate . ". Please ensure you meet the extension deadline, otherwise late penalties will apply.";
} elseif ($sStatus == "D") {
$sMessage = "Your request for an extension was declined for assignment " . $sRefNum . ".";
}
$sMessage = "Dear " . $sSentTo . ",
" . $sMessage . $statusReason . ""
. "\r\n\r\n"
. "Should you wish to query this decision, please contact the module convenor via the CESAnet.";
$isHTML = false;
if ($sStatus == "Overdue" && strlen($fullMessage) > 0) {
$sMessage = $fullMessage;
$sSubject = $subject;
$isHTML = true;
}
maill($sEmail, $sSubject, $sMessage, null, array('bcc' => array('bce@igotafrica.com', 'isHTML' => $isHTML)));
$sMessage = sanitizeCceMessageHtml($sMessage);
$sql = "INSERT INTO CCEMessages (CCEModuleID, SentByName, SentTo, SentDateTime, MessageSubject, MessageText, SentByFacilitatorID, SystemMessage)
VALUES (" . $sModuleID . ", '" . $sFrom . "', '" . $sSentTo . "', '" . date("Y-m-d H:i:s") . "', '" . addslashes(stripslashes($sSubject)) . "', '" . addslashes(stripslashes($sMessage)) . "',
" . $SentByFacilitatorID . ", 1)";
// echo $sql;
// exit;
mysqli_query($conni, $sql);
$sql = "INSERT INTO CCEMessagesSentTo (CCEMessageID, SentType, SentID) VALUES (" . mysqli_insert_id($conni) . ", 'Student', '" . $iStudentID . "')";
mysqli_query($conni, $sql);
}
$numModules = 5;
if (!defined('CESA_TEST_STUDENT_IDS')) {
define('CESA_TEST_STUDENT_IDS', serialize([54, 3920]));
}
if (!function_exists('getTestStudentIDs')) {
function getTestStudentIDs()
{
return unserialize(CESA_TEST_STUDENT_IDS);
}
}
if (!function_exists('isTestStudent')) {
/**
* @param int $studentId CCEStudentID to check
* @return bool true when $studentId belongs to a known test/demo account
*/
function isTestStudent($studentId)
{
return in_array((int) $studentId, getTestStudentIDs());
}
}
if (!function_exists('hasActiveScheduledExam')) {
/**
* Check whether there is at least one CCEExam whose scheduled window
* (StartDate..CloseDate) covers the current moment.
*
* @param int $questionnaireId optional – limit check to a specific exam
* @return bool
*/
function hasActiveScheduledExam($questionnaireId = 0)
{
global $conni;
$sql = "SELECT 1 FROM CCEExams
WHERE StartDate IS NOT NULL
AND CloseDate IS NOT NULL
AND StartDate <= NOW()
AND CloseDate >= NOW()";
if ($questionnaireId > 0) {
$sql .= " AND Questionnaire_ID = " . (int) $questionnaireId;
}
$sql .= " LIMIT 1";
$rec = mysqli_query($conni, $sql);
$found = $rec && mysqli_fetch_assoc($rec);
if ($rec) {
mysqli_free_result($rec);
}
return (bool) $found;
}
}
// Function to clean HTML and line breaks from text
function cleanTextForCSV($text) {
if (empty($text)) {
return '';
}
// Strip HTML tags
$text = strip_tags($text);
// Replace line breaks and carriage returns with spaces
$text = str_replace(array("\r\n", "\r", "\n"), ' ', $text);
// Replace multiple spaces with single space
$text = preg_replace('/\s+/', ' ', $text);
// Trim whitespace
return trim($text);
}