forked from extern/egroupware
Cachebuster for category CSS
This commit is contained in:
parent
2ce94499c0
commit
d3530c4899
@ -153,7 +153,39 @@ class admin_categories
|
|||||||
// to reload the whole nextmatch instead of just the row
|
// to reload the whole nextmatch instead of just the row
|
||||||
$data = $cats->id2name($content['id'],'data');
|
$data = $cats->id2name($content['id'],'data');
|
||||||
$change_color = ($data['color'] != $content['data']['color']);
|
$change_color = ($data['color'] != $content['data']['color']);
|
||||||
|
// Nicely reload just the category window / iframe
|
||||||
|
if($change_color)
|
||||||
|
{
|
||||||
|
if(egw_json_response::isJSONResponse())
|
||||||
|
{
|
||||||
|
// Update category styles
|
||||||
|
egw_json_response::get()->apply('opener.egw.includeCSS',array(categories::css($refresh_app == 'admin' ? categories::GLOBAL_APPNAME : $refresh_app)));
|
||||||
|
if($this->appname != 'admin')
|
||||||
|
{
|
||||||
|
egw_json_response::get()->apply('opener.egw.show_preferences',array(
|
||||||
|
'cats',
|
||||||
|
$this->appname == 'admin' ? categories::GLOBAL_APPNAME : array($refresh_app)
|
||||||
|
));
|
||||||
|
$change_color = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
categories::css($refresh_app == 'admin' ? categories::GLOBAL_APPNAME : $refresh_app);
|
||||||
|
egw_json_response::get()->apply('opener.app.admin.load',array(
|
||||||
|
egw_framework::link('/index.php', array(
|
||||||
|
'menuaction' => $this->list_link,
|
||||||
|
'appname' => $appname
|
||||||
|
)
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
categories::css($refresh_app == 'admin' ? categories::GLOBAL_APPNAME : $refresh_app);
|
||||||
|
egw_framework::refresh_opener('', null, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
$cats->edit($content);
|
$cats->edit($content);
|
||||||
$msg = lang('Category saved.');
|
$msg = lang('Category saved.');
|
||||||
@ -177,7 +209,7 @@ class admin_categories
|
|||||||
}
|
}
|
||||||
if ($button == 'save')
|
if ($button == 'save')
|
||||||
{
|
{
|
||||||
egw_framework::refresh_opener($msg, $refresh_app, $content['id'], $change_color ? 'edit' : 'update', $this->appname);
|
egw_framework::refresh_opener($msg, $change_color ? null : $refresh_app, $change_color ? null : $content['id'], $change_color ? null : 'update', $this->appname);
|
||||||
egw_framework::window_close();
|
egw_framework::window_close();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -199,8 +231,7 @@ class admin_categories
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
egw_framework::refresh_opener($msg, $change_color ? null : $refresh_app, $content['id'], $change_color ? null : 'update', $this->appname);
|
||||||
egw_framework::refresh_opener($msg, $refresh_app, $content['id'], $change_color ? 'edit' : 'update', $this->appname);
|
|
||||||
}
|
}
|
||||||
$content['msg'] = $msg;
|
$content['msg'] = $msg;
|
||||||
if(!$content['appname']) $content['appname'] = $appname;
|
if(!$content['appname']) $content['appname'] = $appname;
|
||||||
@ -396,11 +427,6 @@ class admin_categories
|
|||||||
$rows['appname'] = $query['appname'];
|
$rows['appname'] = $query['appname'];
|
||||||
$rows['edit_link'] = $this->edit_link;
|
$rows['edit_link'] = $this->edit_link;
|
||||||
|
|
||||||
// Send categories to make sure row colors stay up to date
|
|
||||||
// We use update types to prevent nm from doing unneeded calls to get_rows()
|
|
||||||
// TODO: figure out how to only send this if a category color has changed
|
|
||||||
$rows['sel_options']['cat_id'] = etemplate_widget_menupopup::typeOptions('select-cat', ',,,'.$query['appname'].',0');
|
|
||||||
|
|
||||||
// disable access column for global categories
|
// disable access column for global categories
|
||||||
if ($GLOBALS['egw_info']['flags']['currentapp'] == 'admin') $rows['no_access'] = true;
|
if ($GLOBALS['egw_info']['flags']['currentapp'] == 'admin') $rows['no_access'] = true;
|
||||||
|
|
||||||
@ -574,7 +600,7 @@ class admin_categories
|
|||||||
if($tmpl instanceof etemplate_widget_template)
|
if($tmpl instanceof etemplate_widget_template)
|
||||||
{
|
{
|
||||||
// Category styles
|
// Category styles
|
||||||
egw_framework::includeCSS('/phpgwapi/categories.php?app='.$appname);
|
categories::css($appname);
|
||||||
}
|
}
|
||||||
|
|
||||||
$tmpl->exec($this->list_link,$content,$sel_options,$readonlys,array(
|
$tmpl->exec($this->list_link,$content,$sel_options,$readonlys,array(
|
||||||
|
@ -222,7 +222,7 @@ class etemplate_new extends etemplate_widget_template
|
|||||||
egw_framework::validate_file('.','app',$app,false);
|
egw_framework::validate_file('.','app',$app,false);
|
||||||
}
|
}
|
||||||
// Category styles
|
// Category styles
|
||||||
egw_framework::includeCSS('/phpgwapi/categories.php?app='.$app);
|
categories::css($app);
|
||||||
|
|
||||||
// set action attribute for autocomplete form tag
|
// set action attribute for autocomplete form tag
|
||||||
// as firefox complains on about:balnk action, thus we have to literaly submit the form to a blank html
|
// as firefox complains on about:balnk action, thus we have to literaly submit the form to a blank html
|
||||||
|
@ -1022,6 +1022,27 @@ class categories
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Have the framework include the CSS file
|
||||||
|
*
|
||||||
|
* We calculate the cachebuster timestamp from the last modified category in
|
||||||
|
* the application.
|
||||||
|
*
|
||||||
|
* @param string appname
|
||||||
|
*
|
||||||
|
* @return Returns the URL, but you do not need to do anything with it.
|
||||||
|
*/
|
||||||
|
public static function css($appname)
|
||||||
|
{
|
||||||
|
$cats = new categories('',$appname);
|
||||||
|
$last_mod = $cats->return_array('all',0,1,'','DESC','last_mod', $appname == self::GLOBAL_APPNAME);
|
||||||
|
$time = count($last_mod) ? $last_mod[0]['last_mod'] : time();
|
||||||
|
$path = '/phpgwapi/categories.php?app='.$appname.'&'.$time;
|
||||||
|
egw_framework::includeCSS($path);
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete categories belonging to a given account, when account got deleted
|
* Delete categories belonging to a given account, when account got deleted
|
||||||
*
|
*
|
||||||
|
@ -302,7 +302,6 @@ abstract class egw_framework
|
|||||||
|
|
||||||
// allways load jquery (not -ui) and egw_json first
|
// allways load jquery (not -ui) and egw_json first
|
||||||
'/phpgwapi/js/jquery/jquery.js',
|
'/phpgwapi/js/jquery/jquery.js',
|
||||||
'/phpgwapi/js/./egw_json.js',
|
|
||||||
// always include javascript helper functions
|
// always include javascript helper functions
|
||||||
'/phpgwapi/js/jsapi/jsapi.js',
|
'/phpgwapi/js/jsapi/jsapi.js',
|
||||||
'/phpgwapi/js/jsapi/egw.js',
|
'/phpgwapi/js/jsapi/egw.js',
|
||||||
@ -1390,7 +1389,7 @@ abstract class egw_framework
|
|||||||
self::includeCSS('/etemplate/templates/default/etemplate2.css');
|
self::includeCSS('/etemplate/templates/default/etemplate2.css');
|
||||||
|
|
||||||
// Category styles
|
// Category styles
|
||||||
self::includeCSS('/phpgwapi/categories.php');
|
categories::css(categories::GLOBAL_APPNAME);
|
||||||
|
|
||||||
// For mobile user-agent we prefer mobile theme over selected one with a final fallback to theme named as template
|
// For mobile user-agent we prefer mobile theme over selected one with a final fallback to theme named as template
|
||||||
$themes_to_check = array();
|
$themes_to_check = array();
|
||||||
@ -2296,7 +2295,7 @@ abstract class egw_framework
|
|||||||
{
|
{
|
||||||
unset($query);
|
unset($query);
|
||||||
list($path,$query) = explode('?',$path,2);
|
list($path,$query) = explode('?',$path,2);
|
||||||
$path .= '?'. filemtime(EGW_SERVER_ROOT.$path).($query ? '&'.$query : '');
|
$path .= '?'. ($query ? $query : filemtime(EGW_SERVER_ROOT.$path));
|
||||||
$response->includeCSS($GLOBALS['egw_info']['server']['webserver_url'].$path);
|
$response->includeCSS($GLOBALS['egw_info']['server']['webserver_url'].$path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user