Esempio n. 1
0
 /**
  * Whether or not the rule is matched.
  *
  * @param user_competency $usercompetency The user competency.
  * @return bool
  */
 public function matches(user_competency $usercompetency)
 {
     global $DB;
     $config = $this->get_config();
     $pointsrequired = $config->base->points;
     // Index by competency ID and extract required.
     $compsrules = array();
     $requiredids = array();
     foreach ($config->competencies as $comp) {
         $compsrules[$comp->id] = $comp;
         if ($comp->required) {
             $requiredids[$comp->id] = $comp->id;
         }
     }
     // Find all the user competency records.
     list($insql, $params) = $DB->get_in_or_equal(array_keys($compsrules), SQL_PARAMS_NAMED);
     $sql = "userid = :userid\n            AND proficiency = :proficiency\n            AND competencyid {$insql}";
     $params['userid'] = $usercompetency->get_userid();
     $params['proficiency'] = 1;
     $ucs = user_competency::get_records_select($sql, $params, '', 'competencyid');
     // Check that all the required are found.
     if (!empty($requiredids)) {
         $unmetrequired = array_diff_key($requiredids, $ucs);
         if (!empty($unmetrequired)) {
             return false;
         }
     }
     // Check that we have enough points.
     $points = 0;
     foreach ($compsrules as $compid => $comp) {
         if (array_key_exists($compid, $ucs)) {
             $points += $comp->points;
         }
     }
     return $points >= $pointsrequired;
 }