1a25f0a04SGreg Roach<?php 2a25f0a04SGreg Roach/** 3a25f0a04SGreg Roach * webtrees: online genealogy 41062a142SGreg Roach * Copyright (C) 2018 webtrees development team 5a25f0a04SGreg Roach * This program is free software: you can redistribute it and/or modify 6a25f0a04SGreg Roach * it under the terms of the GNU General Public License as published by 7a25f0a04SGreg Roach * the Free Software Foundation, either version 3 of the License, or 8a25f0a04SGreg Roach * (at your option) any later version. 9a25f0a04SGreg Roach * This program is distributed in the hope that it will be useful, 10a25f0a04SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 11a25f0a04SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12a25f0a04SGreg Roach * GNU General Public License for more details. 13a25f0a04SGreg Roach * You should have received a copy of the GNU General Public License 14a25f0a04SGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>. 15a25f0a04SGreg Roach */ 1676692c8bSGreg Roachnamespace Fisharebest\Webtrees; 17a25f0a04SGreg Roach 18a25f0a04SGreg Roach/** 1976692c8bSGreg Roach * A GEDCOM source (SOUR) object. 20a25f0a04SGreg Roach */ 21a25f0a04SGreg Roachclass Source extends GedcomRecord { 22a25f0a04SGreg Roach const RECORD_TYPE = 'SOUR'; 23*225e381fSGreg Roach const ROUTE_NAME = 'source'; 24a25f0a04SGreg Roach 2576692c8bSGreg Roach /** 2676692c8bSGreg Roach * Each object type may have its own special rules, and re-implement this function. 2776692c8bSGreg Roach * 2876692c8bSGreg Roach * @param int $access_level 2976692c8bSGreg Roach * 3076692c8bSGreg Roach * @return bool 3176692c8bSGreg Roach */ 32a25f0a04SGreg Roach protected function canShowByType($access_level) { 33a25f0a04SGreg Roach // Hide sources if they are attached to private repositories ... 34a25f0a04SGreg Roach preg_match_all('/\n1 REPO @(.+)@/', $this->gedcom, $matches); 35a25f0a04SGreg Roach foreach ($matches[1] as $match) { 3624ec66ceSGreg Roach $repo = Repository::getInstance($match, $this->tree); 37a25f0a04SGreg Roach if ($repo && !$repo->canShow($access_level)) { 38a25f0a04SGreg Roach return false; 39a25f0a04SGreg Roach } 40a25f0a04SGreg Roach } 41a25f0a04SGreg Roach 42a25f0a04SGreg Roach // ... otherwise apply default behaviour 43a25f0a04SGreg Roach return parent::canShowByType($access_level); 44a25f0a04SGreg Roach } 45a25f0a04SGreg Roach 4676692c8bSGreg Roach /** 4776692c8bSGreg Roach * Generate a private version of this record 4876692c8bSGreg Roach * 4976692c8bSGreg Roach * @param int $access_level 5076692c8bSGreg Roach * 5176692c8bSGreg Roach * @return string 5276692c8bSGreg Roach */ 53a25f0a04SGreg Roach protected function createPrivateGedcomRecord($access_level) { 54a25f0a04SGreg Roach return '0 @' . $this->xref . "@ SOUR\n1 TITL " . I18N::translate('Private'); 55a25f0a04SGreg Roach } 56a25f0a04SGreg Roach 5776692c8bSGreg Roach /** 5876692c8bSGreg Roach * Fetch data from the database 5976692c8bSGreg Roach * 6076692c8bSGreg Roach * @param string $xref 6176692c8bSGreg Roach * @param int $tree_id 6276692c8bSGreg Roach * 6376692c8bSGreg Roach * @return null|string 6476692c8bSGreg Roach */ 6564d9078aSGreg Roach protected static function fetchGedcomRecord($xref, $tree_id) { 6664d9078aSGreg Roach return Database::prepare( 6764d9078aSGreg Roach "SELECT s_gedcom FROM `##sources` WHERE s_id = :xref AND s_file = :tree_id" 6813abd6f3SGreg Roach )->execute([ 6964d9078aSGreg Roach 'xref' => $xref, 7064d9078aSGreg Roach 'tree_id' => $tree_id, 7113abd6f3SGreg Roach ])->fetchOne(); 72a25f0a04SGreg Roach } 73a25f0a04SGreg Roach 7476692c8bSGreg Roach /** 7576692c8bSGreg Roach * Extract names from the GEDCOM record. 7676692c8bSGreg Roach */ 77a25f0a04SGreg Roach public function extractNames() { 7836a0c51dSGreg Roach parent::extractNamesFromFacts(1, 'TITL', $this->getFacts('TITL')); 79a25f0a04SGreg Roach } 80a25f0a04SGreg Roach} 81