summaryrefslogtreecommitdiff
path: root/app/Module/SourcesTabModule.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@gmail.com>2015-03-02 08:02:00 +0000
committerGreg Roach <fisharebest@gmail.com>2015-03-02 15:55:40 +0000
commit8c2e82270a639a3acf607b432e54721116dae723 (patch)
tree6e9829818d82ad365229bbcad744b9b4999bb0fb /app/Module/SourcesTabModule.php
parent7126668f8fb92b0cac155adc02efde34bbd890ce (diff)
downloadwebtrees-8c2e82270a639a3acf607b432e54721116dae723.tar.gz
webtrees-8c2e82270a639a3acf607b432e54721116dae723.tar.bz2
webtrees-8c2e82270a639a3acf607b432e54721116dae723.zip
Module API
Diffstat (limited to 'app/Module/SourcesTabModule.php')
-rw-r--r--app/Module/SourcesTabModule.php139
1 files changed, 139 insertions, 0 deletions
diff --git a/app/Module/SourcesTabModule.php b/app/Module/SourcesTabModule.php
new file mode 100644
index 0000000000..fa02dd799a
--- /dev/null
+++ b/app/Module/SourcesTabModule.php
@@ -0,0 +1,139 @@
+<?php
+namespace Fisharebest\Webtrees;
+
+/**
+ * webtrees: online genealogy
+ * Copyright (C) 2015 webtrees development team
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Class SourcesTabModule
+ */
+class SourcesTabModule extends Module implements ModuleTabInterface {
+ private $facts;
+
+ /** {@inheritdoc} */
+ public function getTitle() {
+ return /* I18N: Name of a module */ I18N::translate('Sources');
+ }
+
+ /** {@inheritdoc} */
+ public function getDescription() {
+ return /* I18N: Description of the “Sources” module */ I18N::translate('A tab showing the sources linked to an individual.');
+ }
+
+ /** {@inheritdoc} */
+ public function defaultTabOrder() {
+ return 30;
+ }
+
+ /** {@inheritdoc} */
+ public function hasTabContent() {
+ return WT_USER_CAN_EDIT || $this->getFactsWithSources();
+ }
+
+ /** {@inheritdoc} */
+ public function isGrayedOut() {
+ return !$this->getFactsWithSources();
+ }
+
+ /** {@inheritdoc} */
+ public function getTabContent() {
+ global $controller, $WT_TREE;
+
+ ob_start();
+ ?>
+ <table class="facts_table">
+ <tr>
+ <td colspan="2" class="descriptionbox rela">
+ <input id="checkbox_sour2" type="checkbox" <?php echo $WT_TREE->getPreference('SHOW_LEVEL2_NOTES') ? 'checked' : ''; ?> onclick="jQuery('tr.row_sour2').toggle();">
+ <label for="checkbox_sour2"><?php echo I18N::translate('Show all sources'), help_link('show_fact_sources'); ?></label>
+ </td>
+ </tr>
+ <?php
+ foreach ($this->getFactsWithSources() as $fact) {
+ if ($fact->getTag() == 'SOUR') {
+ print_main_sources($fact, 1);
+ } else {
+ print_main_sources($fact, 2);
+ }
+ }
+ if (!$this->getFactsWithSources()) {
+ echo '<tr><td id="no_tab4" colspan="2" class="facts_value">', I18N::translate('There are no source citations for this individual.'), '</td></tr>';
+ }
+
+ // New Source Link
+ if ($controller->record->canEdit()) {
+ ?>
+ <tr>
+ <td class="facts_label">
+ <?php echo WT_Gedcom_Tag::getLabel('SOUR'); ?>
+ </td>
+ <td class="facts_value">
+ <a href="#" onclick="add_new_record('<?php echo $controller->record->getXref(); ?>','SOUR'); return false;">
+ <?php echo I18N::translate('Add a new source citation'); ?>
+ </a>
+ <?php echo help_link('add_source'); ?>
+ </td>
+ </tr>
+ <?php
+ }
+ ?>
+ </table>
+ <?php
+ if (!$WT_TREE->getPreference('SHOW_LEVEL2_NOTES')) {
+ echo '<script>jQuery("tr.row_sour2").toggle();</script>';
+ }
+
+ return '<div id="' . $this->getName() . '_content">' . ob_get_clean() . '</div>';
+ }
+
+ /**
+ * Get all the facts for an individual which contain sources.
+ *
+ * @return Fact[]
+ */
+ private function getFactsWithSources() {
+ global $controller;
+
+ if ($this->facts === null) {
+ $facts = $controller->record->getFacts();
+ foreach ($controller->record->getSpouseFamilies() as $family) {
+ if ($family->canShow()) {
+ foreach ($family->getFacts() as $fact) {
+ $facts[] = $fact;
+ }
+ }
+ }
+ $this->facts = array();
+ foreach ($facts as $fact) {
+ if (preg_match('/(?:^1|\n\d) SOUR/', $fact->getGedcom())) {
+ $this->facts[] = $fact;
+ }
+ }
+ sort_facts($this->facts);
+ }
+
+ return $this->facts;
+ }
+
+ /** {@inheritdoc} */
+ public function canLoadAjax() {
+ return !Auth::isSearchEngine(); // Search engines cannot use AJAX
+ }
+
+ /** {@inheritdoc} */
+ public function getPreLoadContent() {
+ return '';
+ }
+}