Exemplo n.º 1
0
/**
 * Hook into the task scheduler to run the rules against new records on the system.
 */
function data_cleaner_scheduled_task($timestamp, $db, $endtime)
{
    $rules = data_cleaner::get_rules();
    data_cleaner_cleanout_old_messages($rules, $db);
    data_cleaner_run_rules($rules, $db);
    data_cleaner_update_occurrence_metadata($db, $endtime);
    data_cleaner_set_cache_fields($db);
}
Exemplo n.º 2
0
 /**
  * Retrieve the definition of a single rule.
  * @param string $type Rule type name
  * @return array Rule definition
  */
 public static function get_rule($type)
 {
     $rules = data_cleaner::get_rules();
     foreach ($rules as $rule) {
         if (strcasecmp($rule['testType'], $type) === 0) {
             if (!array_key_exists('required', $rule)) {
                 $rule['required'] = array();
             }
             if (!array_key_exists('optional', $rule)) {
                 $rule['optional'] = array();
             }
             return $rule;
         }
     }
     // If we got this far then the rule type is not found.
     throw new exception("Test type {$type} not found");
 }
Exemplo n.º 3
0
/**
 * Hook into the task scheduler to run the rules against new records on the system.
 */
function data_cleaner_scheduled_task()
{
    $db = new Database();
    $rules = data_cleaner::get_rules();
    $count = data_cleaner_get_occurrence_list($db);
    try {
        if ($count > 0) {
            data_cleaner_cleanout_old_messages($rules, $db);
            data_cleaner_run_rules($rules, $db);
            data_cleaner_update_occurrence_metadata($db);
            data_cleaner_set_cache_fields($db);
        }
        $db->query('drop table occlist');
    } catch (Exception $e) {
        $db->query('drop table occlist');
        throw $e;
    }
}
Exemplo n.º 4
0
 /**
  * Performs the task of running the rules against the temporary
  */
 private function runRules($db)
 {
     $rules = data_cleaner::get_rules();
     if (!empty($_REQUEST['rule_types'])) {
         $ruleTypes = json_decode(strtoupper($_REQUEST['rule_types']), true);
     }
     $r = array();
     foreach ($rules as $rule) {
         // skip rule types if only running certain ones
         if (isset($ruleTypes) && !in_array(strtoupper($rule['testType']), $ruleTypes)) {
             continue;
         }
         if (isset($rule['errorMsgField'])) {
             // rules are able to specify a different field (e.g. from the verification rule data) to provide the error message.
             $errorField = $rule['errorMsgField'];
         } else {
             $errorField = 'error_message';
         }
         foreach ($rule['queries'] as $query) {
             // queries can override the error message field.
             $ruleErrorField = isset($query['errorMsgField']) ? $query['errorMsgField'] : $errorField;
             $errorMsgSuffix = isset($rule['errorMsgSuffix']) ? $rule['errorMsgSuffix'] : '';
             $sql = 'select distinct co.taxa_taxon_list_id, ' . $ruleErrorField . $errorMsgSuffix . ' as message from occdelta co';
             if (isset($query['joins'])) {
                 $sql .= "\n" . $query['joins'];
             }
             $sql .= "\nwhere co.verification_checks_enabled=true";
             if (isset($query['where'])) {
                 $sql .= "\nand " . $query['where'];
             }
             // we now have the query ready to run which will return a list of the occurrence ids that fail the check.
             $messages = $db->query($sql)->result_array(false);
             $r = $r + $messages;
         }
     }
     return $r;
 }
 /**
  * Overrides the postSubmit function to add in additional metadata and data values. 
  */
 protected function postSubmit($isInsert)
 {
     require_once DOCROOT . 'client_helpers/helper_base.php';
     $result = true;
     if (isset($this->submission['metaFields'])) {
         $currentRule = data_cleaner::get_rule($this->test_type);
         if (isset($this->submission['metaFields']['metadata']['value'])) {
             $metadata = helper_base::explode_lines_key_value_pairs($this->submission['metaFields']['metadata']['value']);
             $this->save_verification_rule_metadata($currentRule, $metadata);
             $data = data_cleaner::parse_test_file($this->submission['metaFields']['data']['value']);
             $this->save_verification_rule_data($currentRule, $data);
             $this->postProcessRule($currentRule);
         }
     }
     return true;
 }
 /**
  * Process the content of a verification rule file.
  */
 private function read_rule_content($rulesettings, $filename, $source_url)
 {
     if (!isset($rulesettings['metadata'])) {
         throw new exception("Missing Metadata section in {$filename}");
     }
     if (!isset($rulesettings['metadata']['testtype'])) {
         throw new exception("Missing Metadata TestType value in {$filename}");
     }
     require_once MODPATH . 'data_cleaner/plugins/data_cleaner.php';
     $currentRule = data_cleaner::get_rule($rulesettings['metadata']['testtype']);
     // Ensure that the required key/value pairs for this rule type are all present.
     foreach ($currentRule['required'] as $category => $keys) {
         $category = strtolower($category);
         foreach ($keys as $key) {
             // every key must exist. A * key means that anything is accepted.
             if ($key = '*') {
                 if (!isset($rulesettings[$category])) {
                     throw new exception("Missing content for {$category} section in {$filename}. " . print_r($rulesettings, true));
                 }
             } elseif (!isset($rulesettings[$category][$key])) {
                 throw new exception("Missing {$category} {$key} value in {$filename}");
             }
         }
     }
     $this->model->save_verification_rule($source_url, $filename, $rulesettings['metadata']);
     $this->model->save_verification_rule_metadata($currentRule, $rulesettings['metadata']);
     unset($rulesettings['metadata']);
     if (!empty($rulesettings)) {
         $this->model->save_verification_rule_data($currentRule, $rulesettings);
     }
     $this->model->postProcessRule($currentRule);
 }