diff --git a/Gruntfile.js b/Gruntfile.js index 6a8f74f3a67..25b3392f707 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -49,6 +49,7 @@ module.exports = function(grunt) { 'modules/candidate_parameters/js/familyInfo.js': 'modules/candidate_parameters/jsx/familyInfo.js', 'modules/candidate_parameters/js/participantStatus.js': 'modules/candidate_parameters/jsx/participantStatus.js', 'modules/candidate_parameters/js/probandInfo.js': 'modules/candidate_parameters/jsx/probandInfo.js' + 'modules/reliability/js/columnFormatter.js': 'modules/reliability/jsx/columnFormatter.js', } } }, diff --git a/modules/reliability/js/columnFormatter.js b/modules/reliability/js/columnFormatter.js new file mode 100644 index 00000000000..d4b5518384b --- /dev/null +++ b/modules/reliability/js/columnFormatter.js @@ -0,0 +1,105 @@ +/* exported formatColumn */ + +/** + * Modify behaviour of specified column cells in the Data Table component + * @param {string} column - column name + * @param {string} cell - cell content + * @param {arrray} rowData - array of cell contents for a specific row + * @param {arrray} rowHeaders - array of table headers (column names) + * @return {*} a formated table cell for a given column + */ +function formatColumn(column, cell, rowData, rowHeaders) { + // If a column if set as hidden, don't display it + if (loris.hiddenHeaders !== undefined && loris.hiddenHeaders.indexOf(column) > -1) { + return null; + } + + // Create the mapping between rowHeaders and rowData in a row object. + var row = {}; + rowHeaders.forEach(function (header, index) { + row[header] = rowData[index]; + }, this); + + if (column === "PSCID") { + if (row["Current Stage"] === "Recycling Bin") { + return React.createElement( + "td", + null, + cell, + " ", + React.createElement( + "span", + { className: "text-danger" }, + "(Recycling Bin)" + ) + ); + } + + if (row["Invalid"] === "yes") { + return React.createElement( + "td", + null, + cell, + " ", + React.createElement( + "span", + { className: "text-danger" }, + "(Invalid)" + ) + ); + } + + if (row["Manual Swap"] === "yes") { + return React.createElement( + "td", + null, + cell, + " ", + React.createElement( + "span", + { className: "text-danger" }, + "(Manual)" + ) + ); + } + + var testName = '/' + row["Instrument"] + '_reliability'; + var commentID = row['CommentID']; + var siteID = row['SiteID']; + var url = loris.BaseURL + testName + '?identifier=' + commentID + '&reliability_center_id=' + siteID; + + return React.createElement( + "td", + null, + React.createElement( + "a", + { href: url }, + cell + ) + ); + } + + if (column === 'Reliable') { + var reliable = row['Reliable']; + + if (reliable === "Yes") { + return React.createElement( + "td", + { className: "bg-success" }, + "Yes" + ); + } else if (reliable === "No") { + return React.createElement( + "td", + { className: "bg-danger" }, + "No" + ); + } + } + + return React.createElement( + "td", + null, + cell + ); +} \ No newline at end of file diff --git a/modules/reliability/jsx/columnFormatter.js b/modules/reliability/jsx/columnFormatter.js new file mode 100644 index 00000000000..6a30ffd8ff7 --- /dev/null +++ b/modules/reliability/jsx/columnFormatter.js @@ -0,0 +1,60 @@ +/* exported formatColumn */ + +/** + * Modify behaviour of specified column cells in the Data Table component + * @param {string} column - column name + * @param {string} cell - cell content + * @param {arrray} rowData - array of cell contents for a specific row + * @param {arrray} rowHeaders - array of table headers (column names) + * @return {*} a formated table cell for a given column + */ +function formatColumn(column, cell, rowData, rowHeaders) { + // If a column if set as hidden, don't display it + if (loris.hiddenHeaders !== undefined && loris.hiddenHeaders.indexOf(column) > -1) { + return null; + } + + // Create the mapping between rowHeaders and rowData in a row object. + var row = {}; + rowHeaders.forEach(function(header, index) { + row[header] = rowData[index]; + }, this); + + if (column === "PSCID") { + if (row["Current Stage"] === "Recycling Bin") { + return ({cell} (Recycling Bin)); + } + + if (row["Invalid"] === "yes") { + return ({cell} (Invalid)); + } + + if (row["Manual Swap"] === "yes") { + return ({cell} (Manual)); + } + + var testName = '/' + row["Instrument"] + '_reliability'; + var commentID = row['CommentID']; + var siteID = row['SiteID']; + var url = loris.BaseURL + testName + + '?identifier=' + commentID + '&reliability_center_id=' + siteID; + + return ( + + {cell} + + ); + } + + if (column === 'Reliable') { + var reliable = row['Reliable']; + + if (reliable === "Yes") { + return Yes; + } else if (reliable === "No") { + return No; + } + } + + return {cell}; +} diff --git a/modules/reliability/php/NDB_Menu_Filter_reliability.class.inc b/modules/reliability/php/NDB_Menu_Filter_reliability.class.inc index 5e67b8fc1ea..60fb169b6f8 100644 --- a/modules/reliability/php/NDB_Menu_Filter_reliability.class.inc +++ b/modules/reliability/php/NDB_Menu_Filter_reliability.class.inc @@ -32,10 +32,10 @@ function array_remove($item, $array){ return $array; }else{ unset($array[$index]); - return array_values($array); + return array_values($array); } } - + class NDB_Menu_Filter_reliability extends NDB_Menu_Filter { @@ -51,11 +51,11 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter static function getSiteID($site){ $siteList = Utility::getSiteList(); - foreach($siteList as $id=>$name){ + foreach($siteList as $id=>$name){ $site_id[$name] = $id; } $id = $site_id[$site]; - return $id; + return $id; } function _setupVariables() @@ -64,37 +64,49 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter // create the centerID map $db =& Database::singleton(); - $pscRows = array(); + $pscRows = $db->pselect("SELECT CenterID, Name FROM psc", array()); - foreach($pscRows AS $row) { + foreach ($pscRows as $row) { $this->centerIDMap[$row['CenterID']] = $row['Name']; } - + $this->_populate_reliability_table(); - $query = " FROM candidate, session, flag, reliability WHERE reliability.CommentID=flag.CommentID AND candidate.CandID=session.CandID AND session.ID=flag.SessionID"; + $query = " FROM reliability ". + "LEFT JOIN psc p ON (reliability.reliability_center_id=p.CenterID) ". + "LEFT JOIN flag ON (reliability.CommentID=flag.CommentID), ". + "candidate " . + "LEFT JOIN Project pr ON (candidate.ProjectID=pr.ProjectID) ". + "LEFT JOIN session ON (candidate.CandID=session.CandID) ". + "WHERE ". + "session.ID=flag.SessionID"; // only view their own profiles, unless they have permission to see all if (!($user->hasPermission('reliability_edit_all') || $user->hasPermission('access_all_profiles'))) { - $query .= " AND candidate.centerID = '" . $user->getData('CenterID') . "' "; + $query .= " AND candidate.centerID = '" . $user->getData('CenterID') . "' "; } $config=&NDB_Config::singleton(); $useProjects = $config->getSetting("useProjects"); // set the class variables - $this->columns = array('candidate.PSCID', 'reliability.reliability_center_id AS Site', 'session.SubprojectID as Cohort', 'session.CandID AS DCCID', 'candidate.Gender', 'session.Visit_label'); + $this->columns = array('candidate.PSCID', 'reliability.reliability_center_id', 'p.name as site', 'session.SubprojectID as Cohort', 'session.CandID AS DCCID', 'candidate.Gender', 'session.Visit_label'); if ($useProjects === "true") { - $this->columns[] = 'candidate.ProjectID as Project'; + $this->columns[] = 'pr.Name as Project'; } $this->columns=array_merge($this->columns, - array('reliability.CommentID','reliability.Instrument', 'reliability.Reliability_score', 'session.Current_stage', 'reliability.invalid', 'reliability.Manual_Swap' )); + array('reliability.CommentID','reliability.Instrument', 'reliability.Reliability_score', 'session.Current_stage', 'reliability.invalid', 'reliability.Manual_Swap')); $this->query = $query; $this->group_by = ''; $this->order_by = 'reliability.Instrument, session.CandID, session.Visit_label'; - $this->headers = array('PSCID', 'reliability_center_id','Cohort', 'DCCID', 'Gender', 'Visit_label'); + $this->headers = array('PSCID', 'SiteID', 'Site of Reliability Test','Cohort', 'DCCID', 'Gender', 'Visit_label'); if ($useProjects === "true") { $this->headers[] = 'Project'; } - $this->headers=array_merge($this->headers,array('Instrument', 'reliability_score', 'Reliable')); + $this->headers=array_merge($this->headers,array('CommentID', 'Instrument', 'reliability_score', 'Current Stage', 'Invalid', 'Manual Swap', 'Reliable')); + + // Set header as hidden from the data table + $this->tpl_data['hiddenHeaders'] = json_encode(['SiteID', 'CommentID', 'Current Stage', 'Invalid', 'Manual Swap']); + + $this->validFilters = array('reliability.CommentID','reliability.reliability_center_id', 'session.SubprojectID', 'candidate.CenterID', 'session.CandID', 'candidate.PSCID', 'candidate.Gender', 'session.Visit_label', 'candidate.ProjectID','reliability.Instrument', 'reliability.Reliability_score', 'session.Current_stage', 'reliability.invalid','candidate.CandID'); $this->formToFilter = array( @@ -121,11 +133,11 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter // create user object $user =& User::singleton(); - // allow to view all sites data through filter + // allow to view all sites data through filter if ($user->hasPermission('access_all_profiles') || $user->hasPermission('reliability_edit_all')) { // get the list of study sites - to be replaced by the Site object $list_of_sites = Utility::getSiteList(false); - if(is_array($list_of_sites)) + if(is_array($list_of_sites)) { $new_list = array('' => 'All'); foreach($list_of_sites as $key => $val) { @@ -140,7 +152,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter $list_of_sites = array($user->getData('CenterID') => $user->getData('Site')); //} } - + /// hack for Visit Labels... maybe get all the real visit labels from DB? $list_of_visit_labels = array(null=>'All'); $visitLabel = Utility::getVisitList(); @@ -153,7 +165,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter foreach($projects as $key=>$value){ $list_of_projects[$key]= $value; } - $subproject_options = Utility::getSubprojectList(); + $subproject_options = Utility::getSubprojectList(); $subproject_options = array(''=>'All') + $subproject_options; $gender_options = array(null=>'All', 'Male'=>'Male', 'Female'=>'Female'); @@ -162,8 +174,8 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter $reliabilityConfig = $config->getSetting("ReliabilityInstruments"); $reliabilityInstruments = $reliabilityConfig['Instrument']; foreach(Utility::toArray($reliabilityInstruments) AS $reliabilityInstrument){ - $list_of_instruments[$reliabilityInstrument['Testname']] = $reliabilityInstrument['Displayname']; - $list_of_instruments_only[$reliabilityInstrument['Testname']] = $reliabilityInstrument['Displayname']; + $list_of_instruments[$reliabilityInstrument['Testname']] = $reliabilityInstrument['Displayname']; + $list_of_instruments_only[$reliabilityInstrument['Testname']] = $reliabilityInstrument['Displayname']; } $lock_options = array(null=>'','Locked'=>'Locked','Unlocked'=>'Unlocked'); @@ -202,7 +214,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter $this->tpl_data['IBIS_Access'] = false; } - // Doing this here is a hack. Since this is a menu filter and not a Form, there's no + // Doing this here is a hack. Since this is a menu filter and not a Form, there's no // _process/_save functions automagically called. There should probably be something like // a Menu_Filter_Form base class for instances like this or the conflict resolver, but as // things stand you either need to work with the $_POST array/DB directly in a Menu_Filter, @@ -229,95 +241,27 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter // This is used both by setDataTableRows, and reliability statistics function getThreshholds() { - + $config =& NDB_Config::singleton(); $reliabilityConfig = $config->getSetting("ReliabilityInstruments"); $reliabilityInstruments = $reliabilityConfig['Instrument']; foreach(Utility::toArray($reliabilityInstruments) AS $reliabilityInstrument){ - $list_of_thresholds[$reliabilityInstrument['Testname']] = $reliabilityInstrument['Threshold']; - } + $list_of_thresholds[$reliabilityInstrument['Testname']] = $reliabilityInstrument['Threshold']; + } return $list_of_thresholds; } - function _setDataTableRows($count) - { - $projectlist=Utility::getProjectList(); - $threshold = $this->getThreshholds(); - // print out - $x = 0; - foreach ($this->list as $item) { - //count column - $this->tpl_data['items'][$x][0]['value'] = $x + $count; - - //print out data rows - $i = 1; - // $identifier = $item['Tracking_log_ID']; - $comment_id = $item['CommentID']; - $site_id = $item['Site']; - $current_stage = $item['Current_stage']; - $invalid = $item['invalid']; - $manual= $item['Manual_Swap']; - if($item['Manual_Swap'] == 'yes' && $item['invalid'] == 'yes') { - continue; - } - foreach ($item as $key => $val) { - - // Confused about this line - if ($key =='Tracking_log_ID') continue; - if ($key == 'CommentID') continue; - if ($key == 'Current_stage') continue; - if ($key == 'invalid') continue; - if ($key == 'Manual_Swap') continue; - // { - // $this->tpl_data['items'][$x][$i]['CommentID'] = $item['CommentID']; - // $this->tpl_data['items'][$x][$i]['Instrument'] = $item['Instrument']; - // } - $this->tpl_data['items'][$x][$i]['name'] = $key; - $this->tpl_data['items'][$x][$i]['value'] = $val; - if ($key == 'PSCID'){ - $this->tpl_data['items'][$x][$i]['CommentID'] = $comment_id; - $this->tpl_data['items'][$x][$i]['SiteID'] = $item['Site']; - $this->tpl_data['items'][$x][$i]['Instrument'] = $item['Instrument']; - $this->tpl_data['items'][$x][$i]['Current_stage'] = $current_stage; - $this->tpl_data['items'][$x][$i]['invalid'] = $invalid; - $this->tpl_data['items'][$x][$i]['manual'] = $manual; - } - elseif ($key == 'Site') - { - $this->tpl_data['items'][$x][$i]['value'] = $this->centerIDMap[$item['Site']]; - } - elseif ($key=='Project') { - $this->tpl_data['items'][$x][$i]['value'] = $projectlist[$val]; - } - elseif($key == 'Reliability_score'){ - $this->tpl_data['items'][$x][$i+1]['name'] = 'Reliability'; - if(is_null($val)) - $reliable = null; - else if($val >= $threshold[$item['Instrument']]) - $reliable = 'Yes'; - else - $reliable = 'No'; - $this->tpl_data['items'][$x][$i+1]['value'] = $reliable; - } - - $i++; - } - $x++; - } - return true; - } - function _populate_reliability_table() - { + { $db =& Database::singleton(); $this->reliability_table= $db->pselect("SELECT CommentID, reliability_center_id FROM reliability", array()); - - + + $this->reliability_table = map_cIDs($this->reliability_table); - + // WITHIN SITE $siteList = Utility::getSiteList(); - foreach($siteList as $name=>$id){ + foreach($siteList as $name=>$id){ $site_list[$name] = $id; } $config =& NDB_Config::singleton(); @@ -341,7 +285,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter function within_site_flagging($instrument, $ratio, $current_site, $db){ $params = array(); $params['currentSite'] = $current_site; - $params['instrument'] = $instrument; + $params['instrument'] = $instrument; $instrument_records = $db->pselect("SELECT f.CommentID FROM flag as f JOIN session as s ON (f.SessionID=s.ID) WHERE f.Test_name=:instrument AND s.Current_stage<>'Recycling Bin' AND f.Data_entry='Complete' AND f.CommentID LIKE CONCAT('%',:currentSite,'%') AND f.CommentID NOT LIKE 'DDE%' AND f.Administration <> 'None' ORDER BY RIGHT(f.CommentID, 6)", $params ); $total_records_count = count($instrument_records); $params['currentSite_id']= NDB_Menu_Filter_reliability::getSiteID($current_site); @@ -361,21 +305,21 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter )); $this->reliability_table[$instrument_records[$i]["CommentID"]] = $params['currentSite_id']; $current_count++; - } + } } } function cross_site_flagging($instrument, $current_site, $reliability_sites, $db){ $ratio = 0.1; - $reliability_site_index = 0; + $reliability_site_index = 0; // We want the site to be random, starting from 0 causes a bias towards the first entry // in $reliability_sites.. so shuffle the array to eliminate the bias shuffle($reliability_sites); - + $params = array(); $params['currentSite'] = $current_site; - $params['instrument'] = $instrument; - + $params['instrument'] = $instrument; + $instrument_records = $db->pselect("SELECT f.CommentID FROM flag as f JOIN session as s ON (f.sessionID=s.ID) WHERE s.Current_stage<>'Recycling Bin' AND f.Data_entry='Complete' AND f.CommentID NOT LIKE CONCAT('%', :currentSite,'%') AND f.Test_name=:instrument AND f.CommentID NOT LIKE 'DDE%' AND f.Administration <> 'None' ORDER BY RIGHT(f.CommentID, 6)", $params ); $total_records_count = count($instrument_records); $params['currentSite_id']= NDB_Menu_Filter_reliability::getSiteID($current_site); @@ -386,7 +330,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter } else { $max = floor($ratio * $total_records_count); } - + for($i = 0; $i < count($instrument_records) && $current_count + 1 <= $max; $i += 2) { $commentID = $instrument_records[$i]["CommentID"]; if(!find_cID($commentID, $this->reliability_table)) { @@ -397,15 +341,15 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter $this->reliability_table[$instrument_records[$i]["CommentID"]] = $params['currentSite_id']; $current_count++; } - $reliability_site_index = ($reliability_site_index + 1) % count($reliability_sites); + $reliability_site_index = ($reliability_site_index + 1) % count($reliability_sites); } } - + function get_current_index($instrument, $current_site, $reliability_sites, $db){ $site_name = array_flip($this->site_id); $params = array(); $params['currentSite'] = $current_site; - $params['instrument'] = $instrument; + $params['instrument'] = $instrument; $params['currentSite_id']= NDB_Menu_Filter_reliability::getSiteID($current_site); $last_site = $db->pselectOne("SELECT reliability_center_id FROM reliability where ID=(select max(ID) FROM reliability WHERE CommentID LIKE CONCAT('%',:currentSite,'%') AND Instrument=:instrument AND reliability_center_id<>:currentSite_id)",$params); if(empty($last_site)){ @@ -440,7 +384,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter $params_new['Instrument'] = $_POST['SwapInstrument']; $query="SELECT f.CommentID as NewID, c.CenterID as NewCenterID FROM session s join flag f ON (f.SessionID=s.ID) JOIN candidate c ON (c.CandID=s.CandID) WHERE f.Test_name=:Instrument and c.PSCID=:id_Replace AND s.Visit_label=:id_replaceV AND f.Data_entry IS NOT NULL and f.Data_entry <> 'None'"; $newCommentID = $DB->pselectRow($query, $params_new); - if(!$newCommentID) { + if(!$newCommentID) { $error_msg = $params_new['id_Replace']."/".$params_new['id_replaceV']." did not complete". $params_new['Instrument']." or data not entered. Cannot swap candidates."; return array('error' => $error_msg); } @@ -468,12 +412,12 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter return array( "error" => "Reliability score already exists for".$params['pid']."/".$params['id_V']."Can not swap candidate."); } $where_criteria = array ('CommentID'=>$CommentID['OldID'] , 'Instrument'=>$params['measure']); - $values = array('invalid'=>'yes', 'manual_swap'=>'yes'); + $values = array('invalid'=>'yes', 'manual_swap'=>'yes'); $DB->update('reliability', $values,$where_criteria); $DB->insert('reliability',array('CommentID'=>$newCommentID['NewID'], 'reliability_center_id'=>$CenterID, 'Instrument'=>$params['measure'], - 'Manual_Swap'=>'yes') + 'Manual_Swap'=>'yes') ); return array("message" => "Swapped candidate".$params['pid']." for".$params_new['id_Replace']); @@ -482,7 +426,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter function _addCandidate() { $user =& User::singleton(); $DB =& Database::singleton(); - $params = array(); + $params = array(); $params['Instrument'] = $_POST['AddInstrument']; $params['Visit_label']= $_POST['AddVisit_label']; $params['PSCID'] = $_POST['AddPSCID']; @@ -492,7 +436,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter if(!$params['Instrument']) { return array("error" => "You must specify an instrument"); - } + } if(!$params['CenterID']) { return array("error" => "You must specify a center for reliability testing"); } @@ -507,11 +451,47 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter $DB->insert('reliability',array('CommentID'=>$CommentID, 'reliability_center_id'=>$params['CenterID'], 'Instrument'=>$params['Instrument'], - 'Manual_Swap'=>'no') + 'Manual_Swap'=>'no') ); return array("message" => "Inserted new reliability candidate".$params['PSCID']."/".$params['Visit_label'] ); } - + + /** + * Override toJSON to append a calculated field to the default JSON object + * + * @return a json encoded string of the headers and data from this table + */ + function toJSON() + { + $tableData = $this->toArray(); + $threshold = $this->getThreshholds(); + $cohort = Utility::getSubprojectList(); + + foreach($tableData['Data'] as $key => $record) { + + // Calculate and set `Reliable` column + $instrumentThreshold = $threshold[$record[9]]; + $instrumentScore = $record[10]; + + // Map cohort id to a string value + $record[3] = $cohort[$record[3]]; + + if ($instrumentScore == null) { + $isReliable = ""; + } else if ($instrumentScore >= $instrumentThreshold) { + $isReliable = "Yes"; + } else { + $isReliable = "No"; + } + + $record[] = $isReliable; + + $tableData['Data'][$key] = $record; + } + + return json_encode($tableData); + } + /** * Include the column formatter required to display the feedback link colours * in the candidate_list menu @@ -527,6 +507,7 @@ class NDB_Menu_Filter_reliability extends NDB_Menu_Filter $deps, array( $baseURL . "/reliability/js/reliability_helper.js", + $baseURL . "/reliability/js/columnFormatter.js", ) ); } diff --git a/modules/reliability/templates/menu_reliability.tpl b/modules/reliability/templates/menu_reliability.tpl index a53ee5a5259..cea3c7a6f5a 100644 --- a/modules/reliability/templates/menu_reliability.tpl +++ b/modules/reliability/templates/menu_reliability.tpl @@ -1,96 +1,93 @@
-
-
-
- Selection Filter - - - -
-
-
- - {if $form.error} -
{$form.error.label}
- {/if} - {if $form.message} -
{$form.message.label}
- {/if} -
-
- {* Changin this to {$form.CommentID.label} changes the label *} -
{$form.SubprojectID.html}
-
-
- -
{$form.DCCID.html}
-
-
-
-
- - -
{$form.CenterID.html}
-
-
- -
{$form.PSCID.html}
-
-
-
-
- -
{$form.Instrument.html}
-
-
- -
{$form.reliability_center_id.html}
-
-
-
-
- -
{$form.Gender.html}
-
-
- -
{$form.Visit_label.html}
-
-
-
-
- -
{$form.Invalid.html}
-
-
- -
{$form.ProjectID.html}
-
-
- -
-
- -
- -
-
-
-
- -
- -
-
-
-
-
-
+
+
+
+ Selection Filter + + + +
+
+
+ + {if $form.error} +
{$form.error.label}
+ {/if} + {if $form.message} +
{$form.message.label}
+ {/if} +
+
+ {* Changin this to {$form.CommentID.label} changes the label *} +
{$form.SubprojectID.html}
+
+
+ +
{$form.DCCID.html}
+
+
+
+
+ + +
{$form.CenterID.html}
+
+
+ +
{$form.PSCID.html}
+
+
+
+
+ +
{$form.Instrument.html}
+
+
+ +
{$form.reliability_center_id.html}
+
+
+
+
+ +
{$form.Gender.html}
+
+
+ +
{$form.Visit_label.html}
+
+
+
+
+ +
{$form.Invalid.html}
+
+
+ +
{$form.ProjectID.html}
+
+
+
+
+ +
+
+
+
+
-{if $reliability_swap_candidates} +
+ +
+
+
+
+
+
+ {if $reliability_swap_candidates}
@@ -138,10 +135,10 @@
-
+
{/if} -{if $EARLI_Reliability} + {if $EARLI_Reliability}
@@ -172,100 +169,17 @@ - -
- - - - - - - -
List of candidates flagged for reliability
- - - - - - - - {section name=header loop=$headers} - - {/section} - - - {section name=item loop=$items} - - - {section name=piece loop=$items[item]} - - - {if $items[item][piece].name == "PSCID"} - - {elseif $items[item][piece].name == "Cohort"} - - {elseif $items[item][piece].name == "Reliability"} - {if $items[item][piece].value== "Yes"} - - {elseif $items[item][piece].value== "No"} - - {else} - - {/if} - {else} - - {/if} - - {/section} - - {sectionelse} - - {/section} - - -
No. - {if $headers[header].displayName != "Reliable"} - - {if $headers[header].displayName == "Reliability Center Id"} - Site of Reliability Test - {else} - {$headers[header].displayName} - {/if} - - {else} - {$headers[header].displayName} - {/if} -
- {if $items[item][piece].Current_stage == 'Recycling Bin'} - {$items[item][piece].value} (Recycling Bin) - {elseif $items[item][piece].invalid == "yes"} - {$items[item][piece].value} (Invalid) - {else} - {$items[item][piece].value} - {/if} - {if $items[item][piece].manual == "yes"} - (Manual) - {/if} - - {if $items[item][piece].value== "1"} - 6 month - {elseif $items[item][piece].value== "2"} - 12 month - {elseif $items[item][piece].value== "3"} - Control - {/if}{$items[item][piece].value}{$items[item][piece].value}{$items[item][piece].value}
No reliability entries found
+

List of candidates flagged for reliability

+
diff --git a/modules/reliability/test/reliabilityTest.php b/modules/reliability/test/reliabilityTest.php index dccbce29e37..de4dedde7e1 100644 --- a/modules/reliability/test/reliabilityTest.php +++ b/modules/reliability/test/reliabilityTest.php @@ -229,6 +229,7 @@ function testReliabilityShowDataButton() $this->webDriver->findElement(WebDriverBy::Name("PSCID"))->sendKeys ("8888"); $this->webDriver->findElement(WebDriverBy::Name("filter"))->click(); + $this->safeGet($this->url . "/reliability/?format=json"); $bodyText = $this->webDriver->getPageSource(); $this->assertContains("8888", $bodyText); @@ -237,6 +238,7 @@ function testReliabilityShowDataButton() $this->webDriver->findElement(WebDriverBy::Name("DCCID"))->sendKeys ("999888"); $this->webDriver->findElement(WebDriverBy::Name("filter"))->click(); + $this->safeGet($this->url . "/reliability/?format=json"); $bodyText = $this->webDriver->getPageSource(); $this->assertContains("8888", $bodyText); @@ -246,6 +248,7 @@ function testReliabilityShowDataButton() $gender = new WebDriverSelect($genderElement); $gender->selectByVisibleText("Male"); $this->webDriver->findElement(WebDriverBy::Name("filter"))->click(); + $this->safeGet($this->url . "/reliability/?format=json"); $bodyText = $this->webDriver->getPageSource(); $this->assertContains("8888", $bodyText); }