fix caching in browser, if iCal holiday url get set or changed

This commit is contained in:
ralf 2024-04-10 10:46:01 +02:00
parent 77d3ddb87e
commit 8d4134f683
5 changed files with 24 additions and 5 deletions

View File

@ -139,7 +139,7 @@ egw.extend('calendar', egw.MODULE_GLOBAL, function (_app, _wnd)
// one widget listening for the response by the time it gets back, // one widget listening for the response by the time it gets back,
// and we can't do that when it's queued. // and we can't do that when it's queued.
_holiday_cache[year] = window.fetch( _holiday_cache[year] = window.fetch(
egw.link('/calendar/holidays.php', {year: year}) egw.link('/calendar/holidays.php', {year: year, url: this.config('ical_holiday_url') || ''})
).then((response) => ).then((response) =>
{ {
return _holiday_cache[year] = response.json(); return _holiday_cache[year] = response.json();

View File

@ -257,7 +257,7 @@ class Config
'site_title','login_logo_file','login_logo_url','login_logo_title','favicon_file', 'site_title','login_logo_file','login_logo_url','login_logo_title','favicon_file',
'markuntranslated','link_list_thumbnail','enabled_spellcheck','debug_minify', 'markuntranslated','link_list_thumbnail','enabled_spellcheck','debug_minify',
'call_link','call_popup','fax_email','fax_email_regexp','geolocation_url', // addressbook 'call_link','call_popup','fax_email','fax_email_regexp','geolocation_url', // addressbook
'hide_birthdays','calview_no_consolidate','fw_mobile_app_list'), // calendar 'hide_birthdays','calview_no_consolidate','fw_mobile_app_list', 'ical_holiday_url'), // calendar
'projectmanager' => array('hours_per_workday', 'duration_units'), 'projectmanager' => array('hours_per_workday', 'duration_units'),
'manual' => array('manual_remote_egw_url'), 'manual' => array('manual_remote_egw_url'),
'infolog' => array('status'), 'infolog' => array('status'),

View File

@ -158,7 +158,7 @@ class calendar_holidays
* @param ?string $lang 2-digit iso language code or NULL * @param ?string $lang 2-digit iso language code or NULL
* @return array|Iterator parsed events * @return array|Iterator parsed events
*/ */
protected static function fetch($country, $lang=null) public static function fetch($country, $lang=null)
{ {
if (!($url = self::is_url($country) ? $country : self::ical_url($country, $lang))) if (!($url = self::is_url($country) ? $country : self::ical_url($country, $lang)))
{ {

View File

@ -840,7 +840,26 @@ END:VALARM';
public static function config_validate() public static function config_validate()
{ {
$GLOBALS['egw_info']['server']['found_validation_hook'] = array('calendar_purge_old'); $GLOBALS['egw_info']['server']['found_validation_hook'] = [
'calendar_purge_old',
'ical_holiday_url' => 'calendar_hooks::ical_holiday_url',
];
}
/**
* Validate the iCal URL
*
* @param string $url
* @param Api\Config $c
* @return string|null error message or null on success
*/
public static function ical_holiday_url(string $url, Api\Config $c) : ?string
{
if (!empty($url) && (!preg_match('#^(/|https?://[^/]+/[^/]+)#', $url) || !calendar_holidays::fetch($url)))
{
return "Invalid iCalendar URL: $url";
}
return null;
} }
/** /**

View File

@ -11,7 +11,7 @@
<row> <row>
<et2-vbox> <et2-vbox>
<et2-description value="Custom URL for iCal with holidays for all users" label="%s:"></et2-description> <et2-description value="Custom URL for iCal with holidays for all users" label="%s:"></et2-description>
<et2-description label="(Without a custom URL we use nation of user preference to load holidays from %s)" href="https://www.thuderbird.net/en-US/calendar/holidays/" value="Mozilla Holiday Calendars" extraLinkTarget="_blank"></et2-description> <et2-description label="(Without a custom URL we use nation of user preference to load holidays from %s)" href="https://www.thunderbird.net/en-US/calendar/holidays/" value="Mozilla Holiday Calendars" extraLinkTarget="_blank"></et2-description>
</et2-vbox> </et2-vbox>
<et2-url id="newsettings[ical_holiday_url]"></et2-url> <et2-url id="newsettings[ical_holiday_url]"></et2-url>
</row> </row>