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; } }