. /** * * @package local_treestudyplan * @copyright 2023 P.M. Kuipers * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace local_treestudyplan; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir.'/externallib.php'); class completion { public const FAILED = -1; public const INCOMPLETE = 0; public const PENDING = 1; public const PROGRESS = 2; public const COMPLETED = 3; public const GOOD = 4; public const EXCELLENT = 5; private const LABELS = [ self::FAILED => 'failed', self::INCOMPLETE => 'incomplete', self::PENDING => 'pending', self::PROGRESS => 'progress', self::COMPLETED => 'completed', self::GOOD => 'good', self::EXCELLENT => 'excellent', ]; public static function label($completion) { if (array_key_exists($completion, self::LABELS)) { return self::LABELS[$completion]; } else { return self::LABELS[self::INCOMPLETE]; } } public static function structure($value = VALUE_REQUIRED) { return new \external_value( PARAM_TEXT, 'completion state (failed|incomplete|pending|progress|completed|good|excellent)', $value); } public static function count_states(array $states) { // Initialize result array. $statecount = []; foreach (array_keys(self::LABELS) as $key) { $statecount[$key] = 0; } // Process all states in array and increment relevant counter for each one. foreach ($states as $c) { if (array_key_exists($c, $statecount)) { $statecount[$c] += 1; } } return $statecount; } }