![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/html/webtrees/app/Http/RequestHandlers/ |
Upload File : |
<?php /** * webtrees: online genealogy * Copyright (C) 2023 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 <https://www.gnu.org/licenses/>. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Date; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\CalendarService; use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; /** * Show anniversaries for events in a given day/month/year. */ class CalendarPage implements RequestHandlerInterface { use ViewResponseTrait; private CalendarService $calendar_service; /** * @param CalendarService $calendar_service */ public function __construct(CalendarService $calendar_service) { $this->calendar_service = $calendar_service; } /** * A form to request the page parameters. * * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); $view = Validator::attributes($request)->isInArray(['day', 'month', 'year'])->string('view'); $cal = Validator::queryParams($request)->string('cal', ''); $day = Validator::queryParams($request)->string('day', ''); $month = Validator::queryParams($request)->string('month', ''); $year = Validator::queryParams($request)->string('year', ''); $filterev = Validator::queryParams($request)->string('filterev', 'BIRT-MARR-DEAT'); $filterof = Validator::queryParams($request)->string('filterof', 'all'); $filtersx = Validator::queryParams($request)->string('filtersx', ''); if ($cal . $day . $month . $year === '') { // No date specified? Use the most likely calendar $cal = I18N::language()->calendar()->gedcomCalendarEscape(); } // need BC to parse date if (str_starts_with($year, '-')) { $year = substr($year, 1) . ' B.C.'; } $ged_date = new Date($cal . ' ' . $day . ' ' . $month . ' ' . $year); // need negative year for year entry field. $year = $ged_date->minimumDate()->year; $cal_date = $ged_date->minimumDate(); // Fill in any missing bits with todays date $today = $cal_date->today(); if ($cal_date->day === 0) { $cal_date->day = $today->day; } if ($cal_date->month === 0) { $cal_date->month = $today->month; } if ($cal_date->year === 0) { $cal_date->year = $today->year; } $cal_date->setJdFromYmd(); if ($year === 0) { $year = $cal_date->year; } // Extract values from date $days_in_month = $cal_date->daysInMonth(); $cal_month = $cal_date->format('%O'); $today_month = $today->format('%O'); // Invalid dates? Go to monthly view, where they'll be found. if ($cal_date->day > $days_in_month && $view === 'day') { $view = 'month'; } $title = I18N::translate('Anniversary calendar'); switch ($view) { case 'day': $title = I18N::translate('On this day…') . ' ' . $ged_date->display($tree); break; case 'month': $title = I18N::translate('In this month…') . ' ' . $ged_date->display($tree, '%F %Y'); break; case 'year': $title = I18N::translate('In this year…') . ' ' . $ged_date->display($tree, '%Y'); break; } return $this->viewResponse('calendar-page', [ 'cal' => $cal, 'cal_date' => $cal_date, 'cal_month' => $cal_month, 'day' => $day, 'days_in_month' => $days_in_month, 'filterev' => $filterev, 'filterof' => $filterof, 'filtersx' => $filtersx, 'month' => $month, 'months' => $this->calendar_service->calendarMonthsInYear($cal, $year), 'title' => $title, 'today' => $today, 'today_month' => $today_month, 'tree' => $tree, 'view' => $view, 'year' => $year, ]); } }