-
Notifications
You must be signed in to change notification settings - Fork 175
Instrument Scoring
If an instrument form should include a scoring algorithm, a scoring script can be coded manually to accompany the form. This scoring script will be executed by Loris automatically when a user saves data entered in the instrument form via their browser. The script should be stored as an executable file in the project/instruments/ directory, and the filename must be called Instrument_name.score. It can be coded in any scripting language, but we suggest using our PHP example below. CommentID is passed as the first argument, after which it selects from Instrument_table, performs calculations and updates using the CommentID. To test your scoring script, run it from the tools directory and provide CommentID. Below is a sample scoring script for BMI calculation - this file can be copied from the docs/instruments/ directory:
$CommentID); $result = $db->pselectRow($query, $WhereCriteria); $scores = array(); //check unit of measurement if ($result['unit_of_measurement'] == 'standard') { $query_std = "SELECT bmi_value FROM bmi_standard WHERE height_feet =:hgt_feet AND height_inches=:hgt_inches AND weight=:wgt_pounds"; $Where = array('hgt_feet'=>$result['height_feet'], 'hgt_inches'=>$result['height_inches'], 'wgt_pounds'=>$result['weight_pound']); $scores['bmi_value'] = $db->pselectOne($query_std, $Where); } else if ($result['unit_of_measurement'] == metric) {$query_metric = "SELECT bmi_value FROM bmi_metric WHERE height_cms=:hgt_cms'' AND weight_kgs=:wgt_kgs"; $Where = array('hgt_cms'=>$result['height_cms'], 'hgt_kgs'=>$result['weight_kgs']); $scores['bmi_value'] = $db->pselectOne($query_metric, $Where);} if ($bmi_value <= 18.5) { $scores['bmi_category'] = 'Underweight';} else if ($bmi_value > 18.5 && $bmi_value <= 24.9 ) {$scores['bmi_category'] = 'Normal weight';} else if ($bmi_value >= 25 && $bmi_value <= 29.9) {$scores['bmi_category’] = 'Overweight';} else if ($bmi_value >= 30) {$scores['bmi_category'] = 'Obesity';} //save scores $result = $db->update('test_name', $scores, $WhereCriteria); If your instrument was coded manually in PHP, then your scoring algorithm can be implemented within your instrument’s PHP file as a function. The function must be named score. Below is an example of what a scoring function typically looks like: /** * Example scoring function * * @return void */ function score() { if ($this->_determineDataEntryCompletionStatus() == "Incomplete") { return; } $db =& Database::singleton(); //Get raw questions point values $query = "SELECT * FROM " . $this->table . " WHERE CommentID='" . $this->getCommentID() . "'"; $record = $db->pselectRow($query, null); $score = array( 'score_1' => null, ); $score['score_1'] = true; if ($record['abc_1'] <> 'yes') { $score['score_1'] = false; } // save the scores $db->update( $this->table, $score, array('CommentID'=>$this->getCommentID()) ); }