/** * Creates a dataset that contains information about participant numbers over time within a * single area. * * @param Area $area * @return StatDateDataset */ public function fetchAreaParticipantsOverTime(Area $area) { $data = $this->conn->fetchAll('SELECT * FROM `' . EdkTables::STAT_AREA_PARTICIPANT_TIME_TBL . '` ' . 'WHERE `projectId` = :projectId AND `areaId` = :areaId ' . 'ORDER BY `datePoint`', [':projectId' => $area->getProject()->getId(), ':areaId' => $area->getId()]); $engine = new StatDateDataset(StatDateDataset::TYPE_PACKED); return $engine->dataset('participantNum')->process($data); }
public function findTotalIndividualResultsForArea(Area $area) { $items = $this->conn->fetchAll('SELECT c.`id` AS `courseId`, c.`name` AS `courseName`, u.`id` AS `userId`, u.`name` AS `userName`, u.`avatar`, ' . 'ur.`result`, ur.`totalQuestions`, ur.`passedQuestions`, ur.`completedAt`, ur.`trialNumber` ' . 'FROM `' . CourseTables::COURSE_TBL . '` c ' . 'INNER JOIN `' . CoreTables::AREA_MEMBER_TBL . '` m ON m.`areaId` = :areaId ' . 'INNER JOIN `' . CoreTables::USER_TBL . '` u ON u.`id` = m.`userId` ' . 'LEFT JOIN `' . CourseTables::COURSE_RESULT_TBL . '` ur ON ur.`userId` = u.`id` AND c.`id` = ur.`courseId` ' . 'WHERE c.`isPublished` = 1 AND u.`active` = 1 AND c.`projectId` = :projectId ' . 'ORDER BY c.`displayOrder`, u.`name`', [':areaId' => $area->getId(), ':projectId' => $area->getProject()->getId()]); foreach ($items as &$item) { TestResult::processResults($item); } return $items; }
private function spawnActivationEvent(Area $area, $output) { if ($output instanceof CourseProgress) { $this->eventDispatcher->dispatch(MilestoneEvents::ACTIVATION_EVENT, new ActivationEvent($area->getProject(), $area->getEntity(), 'course.completed', function () use($output) { if ($output->getMandatoryCourseNum() == 0) { return NewMilestoneStatus::create(100); } else { return NewMilestoneStatus::create((int) ($output->getPassedCourseNum() / $output->getMandatoryCourseNum() * 100)); } })); } }