From 5e1f775e25733b6c1ca7ae700fa8539befe9fe89 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 18 Jun 2025 14:35:35 -0400 Subject: [PATCH 1/5] Change _Examiner from String to Enum --- php/libraries/NDB_BVL_Instrument_LINST.class.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/libraries/NDB_BVL_Instrument_LINST.class.inc b/php/libraries/NDB_BVL_Instrument_LINST.class.inc index 5355a26a809..d8610479ead 100644 --- a/php/libraries/NDB_BVL_Instrument_LINST.class.inc +++ b/php/libraries/NDB_BVL_Instrument_LINST.class.inc @@ -519,7 +519,7 @@ class NDB_BVL_Instrument_LINST extends \NDB_BVL_Instrument // This should be an enum of examiners, but // getExaminerNames currently returns an empty // array if CommentID is not set. - new StringType(255), + new Enumeration(...$this->_getExaminerNames()), new Cardinality(Cardinality::SINGLE), 'Examiner', ), From eeb47584b5ceabc87e4473330910e48a2a36d08f Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 18 Jun 2025 19:07:27 -0400 Subject: [PATCH 2/5] Return all examiners for data dictionary --- php/libraries/NDB_BVL_Instrument.class.inc | 70 ++++++++++++------- .../NDB_BVL_Instrument_LINST.class.inc | 5 +- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/php/libraries/NDB_BVL_Instrument.class.inc b/php/libraries/NDB_BVL_Instrument.class.inc index 901a1a97c4a..f255c123269 100644 --- a/php/libraries/NDB_BVL_Instrument.class.inc +++ b/php/libraries/NDB_BVL_Instrument.class.inc @@ -988,12 +988,21 @@ abstract class NDB_BVL_Instrument extends NDB_Page */ function _getExaminerNames(): array { + $db = $this->loris->getDatabaseConnection(); + if (empty($this->getCommentID())) { - return []; + $results = $db->pselectWithIndexKey( + "SELECT DISTINCT e.examinerID, e.full_name, u.Email + FROM examiners e + JOIN users u ON u.ID=e.userID + WHERE u.Active = 'Y' + ORDER BY full_name", + [], + 'examinerID' + ); + return $this->_buildExaminers($results); } - $db = $this->loris->getDatabaseConnection(); - $centerID = $db->pselectOne( "SELECT session.CenterID FROM session, flag WHERE session.ID=flag.SessionID AND flag.CommentID=:cmnt_id", @@ -1068,30 +1077,7 @@ abstract class NDB_BVL_Instrument extends NDB_Page 'examinerID' ); } - $examiners = [ - '' => '' - ]; - if (is_array($results) && !empty($results)) { - foreach ($results AS $eid => $row) { - $name = $row['full_name']; - if (in_array($name, $examiners)) { - // If name already in examiners, set first case of name - // with email (if exists) - $duplicateID = array_search($name, $examiners); - $duplicateEmail = $results[$duplicateID]['Email']; - $emailString = empty($duplicateEmail) ? "" : - " ({$duplicateEmail})"; - $examiners[$duplicateID] = $name . $emailString; - // Set new case of name with email as well - $emailString = empty($row['Email']) ? "" : - " ({$row['Email']})"; - $examiners[$eid] = $name . $emailString; - } else { - $examiners[$eid] = $name; - } - } - } - return $examiners; + return $this->_buildExaminers($results); } @@ -3505,4 +3491,34 @@ abstract class NDB_BVL_Instrument extends NDB_Page { return $this->selectMultipleElements; } + + /** + * @param array $results + * @return string[] + */ + public function _buildExaminers(array $results): array + { + $examiners = []; + if (is_array($results) && !empty($results)) { + foreach ($results as $eid => $row) { + $name = $row['full_name']; + if (in_array($name, $examiners)) { + // If name already in examiners, set first case of name + // with email (if exists) + $duplicateID = array_search($name, $examiners); + $duplicateEmail = $results[$duplicateID]['Email']; + $emailString = empty($duplicateEmail) ? "" : + " ({$duplicateEmail})"; + $examiners[$duplicateID] = $name . $emailString; + // Set new case of name with email as well + $emailString = empty($row['Email']) ? "" : + " ({$row['Email']})"; + $examiners[$eid] = $name . $emailString; + } else { + $examiners[$eid] = $name; + } + } + } + return $examiners; + } } diff --git a/php/libraries/NDB_BVL_Instrument_LINST.class.inc b/php/libraries/NDB_BVL_Instrument_LINST.class.inc index d8610479ead..920056d1f34 100644 --- a/php/libraries/NDB_BVL_Instrument_LINST.class.inc +++ b/php/libraries/NDB_BVL_Instrument_LINST.class.inc @@ -516,10 +516,7 @@ class NDB_BVL_Instrument_LINST extends \NDB_BVL_Instrument $this->testName.'_Examiner', 'Examiner', $scope, - // This should be an enum of examiners, but - // getExaminerNames currently returns an empty - // array if CommentID is not set. - new Enumeration(...$this->_getExaminerNames()), + new Enumeration(...array_values($this->_getExaminerNames())), new Cardinality(Cardinality::SINGLE), 'Examiner', ), From aa94b7b3e084170a0ce985d1a90134b869077eca Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 18 Jun 2025 19:20:21 -0400 Subject: [PATCH 3/5] Satisfy linter + inject empty item --- php/libraries/NDB_BVL_Instrument.class.inc | 77 ++++++++++--------- .../NDB_BVL_Instrument_LINST.class.inc | 4 +- 2 files changed, 45 insertions(+), 36 deletions(-) diff --git a/php/libraries/NDB_BVL_Instrument.class.inc b/php/libraries/NDB_BVL_Instrument.class.inc index f255c123269..d5f446f2cd6 100644 --- a/php/libraries/NDB_BVL_Instrument.class.inc +++ b/php/libraries/NDB_BVL_Instrument.class.inc @@ -899,7 +899,11 @@ abstract class NDB_BVL_Instrument extends NDB_Page ); } $examiners = $this->_getExaminerNames(); - $this->addSelect('Examiner', 'Examiner', $examiners); + $this->addSelect( + 'Examiner', + 'Examiner', + array_merge(['' => ''], $examiners) + ); $this->addRule( 'Date_taken', @@ -991,16 +995,16 @@ abstract class NDB_BVL_Instrument extends NDB_Page $db = $this->loris->getDatabaseConnection(); if (empty($this->getCommentID())) { - $results = $db->pselectWithIndexKey( - "SELECT DISTINCT e.examinerID, e.full_name, u.Email + $results = $db->pselectWithIndexKey( + "SELECT DISTINCT e.examinerID, e.full_name, u.Email FROM examiners e JOIN users u ON u.ID=e.userID WHERE u.Active = 'Y' ORDER BY full_name", - [], - 'examinerID' - ); - return $this->_buildExaminers($results); + [], + 'examinerID' + ); + return $this->_buildExaminers($results); } $centerID = $db->pselectOne( @@ -1077,7 +1081,7 @@ abstract class NDB_BVL_Instrument extends NDB_Page 'examinerID' ); } - return $this->_buildExaminers($results); + return $this->_buildExaminers($results); } @@ -3492,33 +3496,36 @@ abstract class NDB_BVL_Instrument extends NDB_Page return $this->selectMultipleElements; } - /** - * @param array $results - * @return string[] - */ - public function _buildExaminers(array $results): array - { - $examiners = []; - if (is_array($results) && !empty($results)) { - foreach ($results as $eid => $row) { - $name = $row['full_name']; - if (in_array($name, $examiners)) { - // If name already in examiners, set first case of name - // with email (if exists) - $duplicateID = array_search($name, $examiners); - $duplicateEmail = $results[$duplicateID]['Email']; - $emailString = empty($duplicateEmail) ? "" : - " ({$duplicateEmail})"; - $examiners[$duplicateID] = $name . $emailString; - // Set new case of name with email as well - $emailString = empty($row['Email']) ? "" : - " ({$row['Email']})"; - $examiners[$eid] = $name . $emailString; - } else { - $examiners[$eid] = $name; + /** + * Builds examiner array from DB results + * + * @param array $results Results from DB + * + * @return string[] + */ + function _buildExaminers(array $results): array + { + $examiners = []; + if (is_array($results) && !empty($results)) { + foreach ($results as $eid => $row) { + $name = $row['full_name']; + if (in_array($name, $examiners)) { + // If name already in examiners, set first case of name + // with email (if exists) + $duplicateID = array_search($name, $examiners); + $duplicateEmail = $results[$duplicateID]['Email']; + $emailString = empty($duplicateEmail) ? "" : + " ({$duplicateEmail})"; + $examiners[$duplicateID] = $name . $emailString; + // Set new case of name with email as well + $emailString = empty($row['Email']) ? "" : + " ({$row['Email']})"; + $examiners[$eid] = $name . $emailString; + } else { + $examiners[$eid] = $name; + } + } } - } + return $examiners; } - return $examiners; - } } diff --git a/php/libraries/NDB_BVL_Instrument_LINST.class.inc b/php/libraries/NDB_BVL_Instrument_LINST.class.inc index 920056d1f34..55cdcc9918d 100644 --- a/php/libraries/NDB_BVL_Instrument_LINST.class.inc +++ b/php/libraries/NDB_BVL_Instrument_LINST.class.inc @@ -516,7 +516,9 @@ class NDB_BVL_Instrument_LINST extends \NDB_BVL_Instrument $this->testName.'_Examiner', 'Examiner', $scope, - new Enumeration(...array_values($this->_getExaminerNames())), + new Enumeration( + ...array_values($this->_getExaminerNames()) + ), new Cardinality(Cardinality::SINGLE), 'Examiner', ), From d36263a6de1068694de4880e6de53e264b77c329 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 18 Jun 2025 19:28:33 -0400 Subject: [PATCH 4/5] Satisfy linter --- php/libraries/NDB_BVL_Instrument.class.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/php/libraries/NDB_BVL_Instrument.class.inc b/php/libraries/NDB_BVL_Instrument.class.inc index d5f446f2cd6..03bdbdf6f57 100644 --- a/php/libraries/NDB_BVL_Instrument.class.inc +++ b/php/libraries/NDB_BVL_Instrument.class.inc @@ -900,9 +900,9 @@ abstract class NDB_BVL_Instrument extends NDB_Page } $examiners = $this->_getExaminerNames(); $this->addSelect( - 'Examiner', - 'Examiner', - array_merge(['' => ''], $examiners) + 'Examiner', + 'Examiner', + array_merge(['' => ''], $examiners) ); $this->addRule( From c11979dd3a70838769559706329645eae51f02b6 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 19 Jun 2025 10:12:02 -0400 Subject: [PATCH 5/5] Reference $db without $loris --- php/libraries/NDB_BVL_Instrument.class.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/libraries/NDB_BVL_Instrument.class.inc b/php/libraries/NDB_BVL_Instrument.class.inc index 03bdbdf6f57..ad4edaf31fe 100644 --- a/php/libraries/NDB_BVL_Instrument.class.inc +++ b/php/libraries/NDB_BVL_Instrument.class.inc @@ -992,7 +992,7 @@ abstract class NDB_BVL_Instrument extends NDB_Page */ function _getExaminerNames(): array { - $db = $this->loris->getDatabaseConnection(); + $db = \NDB_Factory::singleton()->database(); if (empty($this->getCommentID())) { $results = $db->pselectWithIndexKey(