replace_tracker(null, 'Test Tracker', '', [], 'n'); $fields = [[ 'name' => 'Name', 'type' => 't', 'isHidden' => 'n', 'isMandatory' => 'y', 'visibleBy' => null, 'permName' => 'test_name', ], [ 'name' => 'Admin info', 'type' => 't', 'isHidden' => 'y', 'isMandatory' => 'n', 'visibleBy' => null, 'permName' => 'test_admin', ], [ 'name' => 'Registered info', 'type' => 't', 'isHidden' => 'n', 'isMandatory' => 'n', 'visibleBy' => ['Registered'], 'permName' => 'test_registered', ], [ 'name' => 'Special info', 'type' => 't', 'isHidden' => 'n', 'isMandatory' => 'n', 'visibleBy' => ['SpecialGroup'], 'permName' => 'test_special', ]]; foreach ($fields as $i => $field) { self::$trklib->replace_tracker_field( self::$trackerId, 0, $field['name'], $field['type'], 'y', 'y', 'y', 'y', $field['isHidden'], $field['isMandatory'], ($i + 1) * 10, '', '', '', null, '', $field['visibleBy'], null, 'n', '', '', '', $field['permName'] ); } $definition = Tracker_Definition::get(self::$trackerId); $fields = $definition->getFields(); $fields[0]['value'] = 'Test item'; $fields[1]['value'] = 'Secret value'; $fields[2]['value'] = 'Secret value'; $fields[3]['value'] = 'Secret value'; self::$trklib->replace_item(self::$trackerId, 0, ['data' => $fields], 'o'); TikiDb::get()->query("INSERT INTO `users_grouppermissions` VALUES('Registered', 'tiki_p_view_trackers', '')"); $builder = new Perms_Builder(); Perms::set($builder->build()); self::$unifiedlib = TikiLib::lib('unifiedsearch'); self::$unifiedlib->rebuild(); } public static function tearDownAfterClass(): void { global $prefs, $tikilib; $prefs['feature_trackers'] = self::$old_pref; parent::tearDownAfterClass(); self::$trklib->remove_tracker(self::$trackerId); if (! empty($prefs['unified_mysql_index_current'])) { TikiDb::get()->query("DROP TABLE `{$prefs['unified_mysql_index_current']}`"); $tikilib->delete_preference('unified_mysql_index_current'); } self::$unifiedlib->invalidateIndicesCache(); TikiDb::get()->query("DELETE FROM `users_grouppermissions` WHERE `groupName` = 'Registered' AND `permName` = 'tiki_p_view_trackers'"); $builder = new Perms_Builder(); Perms::set($builder->build()); } public function testAdminCanSeeAllFields(): void { // impersonate admin new Perms_Context('admin'); $perms = Perms::getInstance(); $perms->setGroups(['Admins']); $query = self::$unifiedlib->buildQuery([ 'type' => 'trackeritem', 'tracker_id' => self::$trackerId, ]); $result = $query->search(self::$unifiedlib->getIndex()); $resultArray = $result->getArrayCopy(); $this->assertEquals('Test item', $resultArray[0]['tracker_field_test_name']); $this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_admin']); $this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_registered']); $this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_special']); } public function testRegisteredCanSeeSpecificFields(): void { // impersonate a regitered user new Perms_Context('someone'); $perms = Perms::getInstance(); $perms->setGroups(['Registered']); $query = self::$unifiedlib->buildQuery([ 'type' => 'trackeritem', 'tracker_id' => self::$trackerId, ]); $result = $query->search(self::$unifiedlib->getIndex()); $resultArray = $result->getArrayCopy(); $this->assertEquals('Test item', $resultArray[0]['tracker_field_test_name']); $this->assertEquals('', $resultArray[0]['tracker_field_test_admin']); $this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_registered']); $this->assertEquals('', $resultArray[0]['tracker_field_test_special']); } }