"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 'Correct'; } else { return 'Incorrect'; } } 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.".'

'; foreach ($coverPageData["Scores"] as $Score) { $emailTemplate .= ' '; } $emailTemplate .= '
Subject Count Percentage
'.ucfirst($Score["subject"]).' '.$Score["total"].' '.$Score["percent"].'%

'; $subjectNow = ''; foreach ($questionsPageData["questions"] as $key => $questionSub) { foreach ($questionSub as $question) { if($subjectNow == '' || $subjectNow != $key) { $subjectNow = $key; $emailTemplate .= ' '; } $emailTemplate .= ' '; } } $emailTemplate .= '
Question Answered Correct?
'.ucfirst($subjectNow).'
'.$question["question"].' '.$question["userAnswer"].' '.$this->correctOrNot($question["correct"]).'
'; return $emailTemplate; } }