forked from extern/egroupware
Fix holidays in calendar sitemgr modules by adding access via holidays.php.
This lets the anonymous user get the holiday list without triggering a permission error.
This commit is contained in:
parent
656d195494
commit
fffa937f39
53
calendar/inc/holidays.php
Normal file
53
calendar/inc/holidays.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Load holidays from server
|
||||||
|
*
|
||||||
|
* Called from calendar_view widget to get cachable holiday list.
|
||||||
|
* It's broken out into a separate file to get around anonymous user not having
|
||||||
|
* calendar run rights in sitemgr.
|
||||||
|
*
|
||||||
|
* @link www.egroupware.org
|
||||||
|
* @author Nathan Gray
|
||||||
|
* @package calendar
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
use EGroupware\Api;
|
||||||
|
|
||||||
|
// switch evtl. set output-compression off, as we cant calculate a Content-Length header with transparent compression
|
||||||
|
ini_set('zlib.output_compression', 0);
|
||||||
|
|
||||||
|
$GLOBALS['egw_info'] = array(
|
||||||
|
'flags' => array(
|
||||||
|
'currentapp' => 'api',
|
||||||
|
'noheader' => true,
|
||||||
|
'nocachecontrol' => true,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
include '../../header.inc.php';
|
||||||
|
|
||||||
|
$GLOBALS['egw_info']['flags']['currentapp'] = 'calendar';
|
||||||
|
|
||||||
|
$cal_bo = new calendar_bo();
|
||||||
|
$holidays = json_encode($cal_bo->read_holidays((int)$_GET['year']));
|
||||||
|
|
||||||
|
// use an etag over holidays
|
||||||
|
$etag = '"'.md5($holidays).'"';
|
||||||
|
|
||||||
|
// headers to allow caching, egw_framework specifies etag on url to force reload, even with Expires header
|
||||||
|
Api\Session::cache_control(86400); // cache for one day
|
||||||
|
Header('Content-Type: application/json; charset=utf-8');
|
||||||
|
Header('ETag: '.$etag);
|
||||||
|
|
||||||
|
// if servers send a If-None-Match header, response with 304 Not Modified, if etag matches
|
||||||
|
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
|
||||||
|
{
|
||||||
|
header("HTTP/1.1 304 Not Modified");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Content-Lenght header is important, otherwise browsers dont cache!
|
||||||
|
Header('Content-Length: '.bytes($holidays));
|
||||||
|
echo $holidays;
|
@ -619,25 +619,25 @@ jQuery.extend(et2_calendar_view,
|
|||||||
get_holidays: function(widget,year)
|
get_holidays: function(widget,year)
|
||||||
{
|
{
|
||||||
// Loaded in an iframe or something
|
// Loaded in an iframe or something
|
||||||
if(!egw.window.et2_calendar_view) return {};
|
var view = egw.window.et2_calendar_view ? egw.window.et2_calendar_view : this;
|
||||||
|
if(!view) return {};
|
||||||
|
|
||||||
var cache = egw.window.et2_calendar_view.holiday_cache[year];
|
var cache = view.holiday_cache[year];
|
||||||
if (typeof cache == 'undefined')
|
if (typeof cache == 'undefined')
|
||||||
{
|
{
|
||||||
// Fetch with json instead of jsonq because there may be more than
|
// Fetch with json instead of jsonq because there may be more than
|
||||||
// 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.
|
||||||
egw.window.et2_calendar_view.holiday_cache[year] = egw.json(
|
view.holiday_cache[year] = jQuery.getJSON(
|
||||||
'calendar_timegrid_etemplate_widget::ajax_get_holidays',
|
egw.link('/calendar/inc/holidays.php', {year: year})
|
||||||
[year]
|
);
|
||||||
).sendRequest(true);
|
|
||||||
}
|
}
|
||||||
cache = egw.window.et2_calendar_view.holiday_cache[year];
|
cache = view.holiday_cache[year];
|
||||||
if(typeof cache.done == 'function')
|
if(typeof cache.done == 'function')
|
||||||
{
|
{
|
||||||
// pending, wait for it
|
// pending, wait for it
|
||||||
cache.done(jQuery.proxy(function(response) {
|
cache.done(jQuery.proxy(function(response) {
|
||||||
egw.window.et2_calendar_view.holiday_cache[this.year] = response.response[0].data||undefined;
|
view.holiday_cache[this.year] = response||undefined;
|
||||||
|
|
||||||
egw.window.setTimeout(jQuery.proxy(function() {
|
egw.window.setTimeout(jQuery.proxy(function() {
|
||||||
// Make sure widget hasn't been destroyed while we wait
|
// Make sure widget hasn't been destroyed while we wait
|
||||||
|
Loading…
Reference in New Issue
Block a user