Cachebuster for category CSS

This commit is contained in:
Nathan Gray 2015-10-19 22:26:09 +00:00
parent 2ce94499c0
commit d3530c4899
4 changed files with 60 additions and 14 deletions

View File

@ -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(

View File

@ -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

View File

@ -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
* *

View File

@ -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);
} }