\Course::class, 'foreign_key' => 'course_id', ]; $config['has_many']['instances'] = [ 'class_name' => Instance::class, 'assoc_foreign_key' => 'definition_id', 'on_delete' => 'delete', 'on_store' => 'store', ]; parent::configure($config); } public static function getCategoriesByCourse(\Course $course) { $query = 'SELECT category FROM grading_definitions WHERE course_id = ? GROUP BY category ORDER BY category ASC'; $stmt = \DBManager::get()->prepare($query); $stmt->execute([$course->id]); $categories = $stmt->fetchAll(\PDO::FETCH_COLUMN); $customIndex = array_search(self::CUSTOM_DEFINITIONS_CATEGORY, $categories); if (false !== $customIndex) { unset($categories[$customIndex]); array_unshift($categories, self::CUSTOM_DEFINITIONS_CATEGORY); } return $categories; } public static function findByCourse(\Course $course) { return Definition::findBySQL('course_id = ? ORDER BY position ASC, name ASC', [$course->id]); } public function toLineItem() : LineItemInterface { $deployment_id = explode('-', $this->tool)[1] ?? ''; return new LineItem( PHP_FLOAT_MAX, //TODO $this->name, $this->id, $deployment_id ); } public static function createFromLineItem(LineItemInterface $line_item) : ?Definition { $definition = new Definition(); $definition->id = $line_item->getIdentifier(); $definition->name = $line_item->getLabel(); $definition->tool = 'lti-' . $line_item->getResourceIdentifier(); if ($definition->store()) { return $definition; } return null; } }