"Send Reports", // Displayed in admin area. .
'function' => "sendReportsEmail", // Name of the function which is defined below.
'category' => 'mail', // Choose between: mail, user, content, notify, or backup
'description' => "Send Timekeeper reports out to receivers." // Displayed in admin area.
);
return $cron;
}
function sendReportsEmail() {
//$adminEmail = e107::getPref('siteadminemail');
//$adminName = e107::getPref('siteadmin');
require_once(e_HANDLER . "mail.php");
$mailContent = $this->generateEmail('elliot');
$eml = array(
'subject' => $mailContent['subject'],
'body' => $mailContent['message'],
'sender_email'=>'service@pfip.au'
);
foreach([$mailContent['recipients'],'elliot@pfip.au'] as $recipient)
{
e107::getEmail()->sendEmail($recipient, 'Gregory', $eml);
}
//sendemail($mailContent['recipients'], $mailContent['subject'], $mailContent['message']);
$mailContent = $this->generateEmail('silas');
$eml = array(
'subject' => $mailContent['subject'],
'body' => $mailContent['message'],
'sender_email'=>'service@pfip.au'
);
foreach([$mailContent['recipients'],'silas@pfip.au'] as $recipient)
{
e107::getEmail()->sendEmail($recipient, 'Gregory', $eml);
}
//sendemail($mailContent['recipients'], $mailContent['subject'], $mailContent['message']);
}
public function generateEmail($user) {
//
//Get recipients and users here
//
$returnArray['subject'] = 'TimeKeeper Report for '.$user;
//$returnArray['recipients'] = 'pigs.fly.in.packs@gmail.com';
$returnArray['recipients'] = 'gregory@pfip.au';
$sql = e107::getDb();
$coverPageData = $this->coverPage($sql, $user);
$questionsPageData = $this->questionsTable($sql, $user);
$returnArray['message'] = $this->template($coverPageData,$questionsPageData);
$sql->close();
return $returnArray;
}
private function coverPage($sql, $user) {
$sql->gen("SELECT `subject`, COUNT(`correct`) as total, CAST((SUM(correct)/COUNT(id)*100) as DECIMAL(5,2)) as percent
FROM e107.`e107_tkReport` WHERE FROM_UNIXTIME(`answereddatestamp`)>=DATE_ADD(CURDATE(), INTERVAL -1 DAY) AND `username` = '".$user."' GROUP BY (`subject`);");
$Scores = [];
$cntr = 0;
$percentTotal = 0;
while ($row = $sql->fetch()) {
$Scores[] = ['subject'=>$row['subject'],'total'=>$row['total'],'percent'=>$row['percent']];
$percentTotal = $percentTotal + $row['percent'];
$cntr++;
}
if(is_numeric($percentTotal) && is_numeric($cntr) && $percentTotal != 0 && $cntr != 0)
{
$returnPercentTotal = $percentTotal/$cntr;
}else{
$returnPercentTotal = 0;
}
return ['user'=>$user,'TotalPercent'=>$returnPercentTotal,'Scores'=>$Scores];
}
private function questionsTable($sql, $user) {
$sql->gen("SELECT `question`,`answereddatestamp`,`userAnswer`,`correct`,`subject` FROM e107.e107_tkReport WHERE username='$user'
AND FROM_UNIXTIME(`answereddatestamp`)>=DATE_ADD(CURDATE(), INTERVAL -1 DAY) ORDER BY subject;");
$questionsData['questions'] = [];
$startTime = 9999999999;
$endTime = 0;
while ($row = $sql->fetch()) {
if(!isset($questionsData['questions'][$row["subject"]])) {
$questionsData['questions'][$row["subject"]] = [];
}
$questionsData['questions'][$row["subject"]][] = ['question'=>$row["question"],'userAnswer'=>$row["userAnswer"],'correct'=>$row["correct"]];
if($row["answereddatestamp"]<=$startTime) {
$startTime = $row["answereddatestamp"];
}
if($row["answereddatestamp"]>=$endTime) {
$endTime = $row["answereddatestamp"];
}
}
$questionsData['startTime'] = $startTime;
$questionsData['endTime'] = $endTime;
return $questionsData;
}
private function correctOrNot($state) {
if ($state) {
return '
';
} else {
return '
';
}
}
private function template($coverPageData,$questionsPageData) {
$emailTemplate = '
'.ucfirst($coverPageData["user"]).'\'s overall score for yesterday is '.$coverPageData["TotalPercent"].'%.
'.round(abs($questionsPageData["endTime"] - $questionsPageData["startTime"]) / 60, 2)." minutes were spent studying today.".'
| Subject |
Count |
Percentage |
';
foreach ($coverPageData["Scores"] as $Score) {
$emailTemplate .= '
| '.ucfirst($Score["subject"]).' |
'.$Score["total"].' |
'.$Score["percent"].'% |
';
}
$emailTemplate .= '
| Question |
Answered |
Correct? |
';
$subjectNow = '';
foreach ($questionsPageData["questions"] as $key => $questionSub) {
foreach ($questionSub as $question) {
if($subjectNow == '' || $subjectNow != $key) {
$subjectNow = $key;
$emailTemplate .= '
| '.ucfirst($subjectNow).' |
';
}
$emailTemplate .= '
| '.$question["question"].' |
'.$question["userAnswer"].' |
'.$this->correctOrNot($question["correct"]).' |
';
}
}
$emailTemplate .= '
';
return $emailTemplate;
}
}