src/Settings/Pages/Report.php
<?php
namespace abrain\Einsatzverwaltung\Settings\Pages;
use abrain\Einsatzverwaltung\Utilities;
/**
* Report settings page
*
* @package abrain\Einsatzverwaltung\Settings\Pages
*/
class Report extends SubPage
{
private $useReportTemplateOptions = array(
'no' => array(
'label' => 'Nicht verwenden (zeigt die klassische Einzelansicht)'
),
'singular' => array(
'label' => 'In der Einzelansicht verwenden'
),
'loops' => array(
'label' => 'In der Einzelansicht und in Übersichten (Startseite, Archive, Suchergebnisse, ...) verwenden'
),
'everywhere' => array(
'label' => 'Überall verwenden'
),
);
public function __construct()
{
parent::__construct('report', __('Incident Reports', 'einsatzverwaltung'));
}
public function addSettingsFields()
{
add_settings_field(
'einsatzvw_einsatz_hideemptydetails',
'Einsatzdetails',
array($this, 'echoFieldEmptyDetails'),
$this->settingsApiPage,
'einsatzvw_settings_einsatzberichte'
);
add_settings_field(
'einsatzvw_settings_archivelinks',
'Gefilterte Einsatzübersicht verlinken',
array($this, 'echoFieldArchiveLinks'),
$this->settingsApiPage,
'einsatzvw_settings_einsatzberichte'
);
add_settings_field(
'einsatzvw_settings_ext_newwindow',
'Links zu externen Einsatzmitteln',
array($this, 'echoFieldExtNew'),
$this->settingsApiPage,
'einsatzvw_settings_einsatzberichte'
);
add_settings_field(
'einsatzvw_settings_reportcontent',
'Platzhalter für Berichtstext',
array($this, 'echoFieldReportContent'),
$this->settingsApiPage,
'einsatzvw_settings_einsatzberichte'
);
add_settings_field(
'einsatzvw_settings_reporttemplate',
'Template für Einsatzbericht',
array($this, 'echoFieldReportTemplate'),
$this->settingsApiPage,
'einsatzvw_settings_reporttemplates'
);
add_settings_field(
'einsatzvw_settings_excerpttemplate',
'Template für Auszug',
array($this, 'echoFieldExcerptTemplate'),
$this->settingsApiPage,
'einsatzvw_settings_reporttemplates'
);
}
public function addSettingsSections()
{
add_settings_section(
'einsatzvw_settings_einsatzberichte',
'',
function () {
echo '<p>Mit diesen Einstellungen kann das Aussehen der einzelnen Einsatzberichte beeinflusst werden.</p>';
},
$this->settingsApiPage
);
add_settings_section(
'einsatzvw_settings_reporttemplates',
'Templates',
function () {
echo '<p>Mit den beiden folgenden Templates kann das Aussehen der Einsatzberichte bzw. deren Auszüge individuell angepasst werden. Das ausgefüllte Template erscheint immer dort, wo normal der Beitragstext stehen würde. Wie die Templates funktionieren ist in der <a href="https://einsatzverwaltung.org/dokumentation/templates/">Dokumentation</a> beschrieben.</p>';
},
$this->settingsApiPage
);
}
/**
* Gibt die Einstellmöglichkeiten für nicht ausgefüllte Einsatzdetails aus
*/
public function echoFieldEmptyDetails()
{
echo '<fieldset>';
$this->echoSettingsCheckbox(
'einsatzvw_einsatz_hideemptydetails',
'Nicht ausgefüllte Details ausblenden',
true
);
echo '<p class="description">Ein Einsatzdetail gilt als nicht ausgefüllt, wenn das entsprechende Textfeld oder die entsprechende Liste leer ist. Diese Einstellung greift nur bei der klassischen Darstellung ohne Template.</p>';
echo '</fieldset>';
}
/**
* Gibt die Einstellmöglichkeiten für gefilterte Ansichten aus
*/
public function echoFieldArchiveLinks()
{
echo '<fieldset>';
$this->echoSettingsCheckbox(
'einsatzvw_show_einsatzart_archive',
__('Incident Category', 'einsatzverwaltung')
);
echo '<br>';
$this->echoSettingsCheckbox(
'einsatzvw_show_exteinsatzmittel_archive',
'Externe Einsatzkräfte'
);
echo '<br>';
$this->echoSettingsCheckbox(
'einsatzvw_show_fahrzeug_archive',
__('Vehicles', 'einsatzverwaltung')
);
echo '<p class="description">Für alle hier aktivierten Arten von Einsatzdetails werden im Kopfbereich des Einsatzberichts für alle auftretenden Werte Links zu einer gefilterten Einsatzübersicht angezeigt. Beispielsweise kann man damit alle Einsätze unter Beteiligung einer bestimmten externen Einsatzkraft auflisten lassen.</p>';
echo '</fieldset>';
}
/**
* Gibt die Einstellmöglichkeiten aus, ob Links zu externen Einsatzmitteln in einem neuen Fenster geöffnet werden
* sollen
*/
public function echoFieldExtNew()
{
echo '<fieldset>';
$this->echoSettingsCheckbox(
'einsatzvw_open_ext_in_new',
'Links zu externen Einsatzmitteln in einem neuen Fenster öffnen'
);
echo '</fieldset>';
}
/**
* Einstellungen für den Ersatztext bei leerem Berichtstext
*/
public function echoFieldReportContent()
{
echo '<fieldset>';
echo '<label for="einsatzverwaltung_report_contentifempty">Anzuzeigender Text, wenn kein Berichtstext vorliegt:</label> ';
$this->echoSettingsInput(
'einsatzverwaltung_report_contentifempty',
sanitize_text_field(get_option('einsatzverwaltung_report_contentifempty', '')),
60
);
echo '</fieldset>';
}
/**
* Einstellungen für die Gestaltung der Einsatzberichte per Template
*/
public function echoFieldReportTemplate()
{
echo '<fieldset>';
$this->echoRadioButtons('einsatzverwaltung_use_reporttemplate', $this->useReportTemplateOptions, 'no');
echo '<p class="description">';
printf('Die Option "%s" wird nicht empfohlen, ist aber bei manchen Themes die einzige Möglichkeit, das Template in Übersichten nutzen zu können.', $this->useReportTemplateOptions['everywhere']['label']);
echo '</p>';
$this->echoTextarea('einsatzverwaltung_reporttemplate');
echo '<p class="description">Es kann sein, dass das Theme in Übersichten nur den Auszug anzeigt. Dessen Aussehen kann mit einem eigenen Template festgelegt werden (siehe unten).</p>';
echo '</fieldset>';
}
/**
* Einstellungen für die Gestaltung des Auszugs von Einsatzberichten per Template
*/
public function echoFieldExcerptTemplate()
{
echo '<fieldset>';
$this->echoSettingsCheckbox('einsatzverwaltung_use_excerpttemplate', 'Template verwenden');
echo '<p class="description">Im Gegensatz zum von WordPress generierten Auszug wird dieser nicht auf eine bestimmte Länge begrenzt. Das Einfügen des Beitragstextes (<code>%content%</code>) ist also nicht zu empfehlen.</p>';
$this->echoTextarea('einsatzverwaltung_excerpttemplate');
echo '</fieldset>';
}
public function registerSettings()
{
register_setting(
'einsatzvw_settings_report',
'einsatzvw_einsatz_hideemptydetails',
array(Utilities::class, 'sanitizeCheckbox')
);
register_setting(
'einsatzvw_settings_report',
'einsatzvw_show_exteinsatzmittel_archive',
array(Utilities::class, 'sanitizeCheckbox')
);
register_setting(
'einsatzvw_settings_report',
'einsatzvw_show_einsatzart_archive',
array(Utilities::class, 'sanitizeCheckbox')
);
register_setting(
'einsatzvw_settings_report',
'einsatzvw_show_fahrzeug_archive',
array(Utilities::class, 'sanitizeCheckbox')
);
register_setting(
'einsatzvw_settings_report',
'einsatzvw_open_ext_in_new',
array(Utilities::class, 'sanitizeCheckbox')
);
register_setting(
'einsatzvw_settings_report',
'einsatzverwaltung_report_contentifempty',
'sanitize_text_field'
);
register_setting(
'einsatzvw_settings_report',
'einsatzverwaltung_use_reporttemplate',
array($this, 'sanitizeReportTemplateUsage')
);
register_setting(
'einsatzvw_settings_report',
'einsatzverwaltung_reporttemplate',
array($this, 'sanitizeTemplate')
);
register_setting(
'einsatzvw_settings_report',
'einsatzverwaltung_use_excerpttemplate',
array(Utilities::class, 'sanitizeCheckbox')
);
register_setting(
'einsatzvw_settings_report',
'einsatzverwaltung_excerpttemplate',
array($this, 'sanitizeTemplate')
);
}
/**
* @param string $input
* @return string
*/
public function sanitizeReportTemplateUsage($input): string
{
if (!in_array($input, array_keys($this->useReportTemplateOptions))) {
return 'no';
}
return $input;
}
/**
* @param string $input
* @return string
*/
public function sanitizeTemplate($input): string
{
return stripslashes(wp_filter_post_kses(addslashes($input)));
}
}