mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-01-13 17:38:28 +01:00
Change admin column selection to allow setting / clearing / forcing column selection
This commit is contained in:
parent
08850841b6
commit
5e84ddd935
@ -118,10 +118,11 @@ class etemplate_widget_nextmatch extends etemplate_widget
|
|||||||
|
|
||||||
$send_value = $value;
|
$send_value = $value;
|
||||||
|
|
||||||
|
list($app) = explode('.',$value['get_rows']);
|
||||||
|
|
||||||
// Check for a favorite in URL
|
// Check for a favorite in URL
|
||||||
if($_GET['favorite'] && $value['favorites'])
|
if($_GET['favorite'] && $value['favorites'])
|
||||||
{
|
{
|
||||||
list($app) = explode('.',$value['get_rows']);
|
|
||||||
$safe_name = preg_replace('/[^A-Za-z0-9-_]/','_',strip_tags($_GET['favorite']));
|
$safe_name = preg_replace('/[^A-Za-z0-9-_]/','_',strip_tags($_GET['favorite']));
|
||||||
$pref_name = "favorite_" .$safe_name;
|
$pref_name = "favorite_" .$safe_name;
|
||||||
|
|
||||||
@ -209,6 +210,14 @@ class etemplate_widget_nextmatch extends etemplate_widget
|
|||||||
unset($value['rows']['sel_options']);
|
unset($value['rows']['sel_options']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If column selection preference is forced, set a flag to turn off UI
|
||||||
|
$pref_name = 'nextmatch-' . (isset($value['columnselection_pref']) ? $value['columnselection_pref'] : $this->attrs['template']);
|
||||||
|
$value['no_columnselection'] = $value['no_columnselection'] || (
|
||||||
|
$GLOBALS['egw']->preferences->forced[$app][$pref_name] &&
|
||||||
|
// Need to check admin too, or it will be impossible to turn off
|
||||||
|
!$GLOBALS['egw_info']['user']['apps']['admin']
|
||||||
|
);
|
||||||
|
|
||||||
// todo: no need to store rows in request, it's enought to send them to client
|
// todo: no need to store rows in request, it's enought to send them to client
|
||||||
|
|
||||||
//error_log(__METHOD__."() $this: total=$value[total]");
|
//error_log(__METHOD__."() $this: total=$value[total]");
|
||||||
@ -809,26 +818,43 @@ class etemplate_widget_nextmatch extends etemplate_widget
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Save current column settings as default (admins only)
|
// Save current column settings as default, clear, or force (admins only)
|
||||||
if($value['as_default'])
|
|
||||||
{
|
|
||||||
unset($value['as_default']);
|
|
||||||
if($GLOBALS['egw_info']['user']['apps']['admin'] && $app)
|
if($GLOBALS['egw_info']['user']['apps']['admin'] && $app)
|
||||||
{
|
{
|
||||||
$pref_name = 'nextmatch-' . (isset($value['columnselection_pref']) ? $value['columnselection_pref'] : $this->attrs['template']);
|
$pref_name = 'nextmatch-' . (isset($value['columnselection_pref']) ? $value['columnselection_pref'] : $this->attrs['template']);
|
||||||
// Columns already saved to user's preferences, use from there
|
$refresh_pref_name = $pref_name.'-autorefresh';
|
||||||
|
$pref_level = $value['nm_col_preference'] == 'force' ? 'forced' : 'default';
|
||||||
|
|
||||||
|
// Clear forced pref before setting default
|
||||||
|
if($pref_level != 'forced')
|
||||||
|
{
|
||||||
|
$GLOBALS['egw']->preferences->delete($app,$pref_name,'forced');
|
||||||
|
$GLOBALS['egw']->preferences->delete($app,$refresh_pref_name,'forced');
|
||||||
|
$GLOBALS['egw']->preferences->save_repository(false,'forced');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set columns + refresh as default for all users
|
||||||
|
|
||||||
|
// Columns already saved to current user's preferences, use from there
|
||||||
$prefs = $GLOBALS['egw']->preferences->read();
|
$prefs = $GLOBALS['egw']->preferences->read();
|
||||||
$cols = $prefs[$app][$pref_name];
|
$cols = $prefs[$app][$pref_name];
|
||||||
$GLOBALS['egw']->preferences->add($app,$pref_name,is_array($cols) ? implode(',',$cols) : $cols,'default');
|
$GLOBALS['egw']->preferences->add($app,$pref_name,is_array($cols) ? implode(',',$cols) : $cols, $pref_level);
|
||||||
|
|
||||||
// Autorefresh
|
// Autorefresh
|
||||||
$refresh = $prefs[$app][$pref_name."-autorefresh"];
|
$refresh = $prefs[$app][$refresh_pref_name];
|
||||||
$GLOBALS['egw']->preferences->add($app,$pref_name."-autorefresh",(int)$refresh,'default');
|
$GLOBALS['egw']->preferences->add($app,$refresh_pref_name,(int)$refresh,$pref_level);
|
||||||
|
|
||||||
$GLOBALS['egw']->preferences->save_repository(false,'default');
|
$GLOBALS['egw']->preferences->save_repository(false,$pref_level);
|
||||||
$prefs = $GLOBALS['egw']->preferences->read();
|
$prefs = $GLOBALS['egw']->preferences->read();
|
||||||
|
|
||||||
|
if($value['nm_col_preference'] == 'reset')
|
||||||
|
{
|
||||||
|
// Clear column + refresh preference so users go back to default
|
||||||
|
$GLOBALS['egw']->preferences->delete_preference($app,$pref_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
unset($value['nm_col_preference']);
|
||||||
|
|
||||||
$validated[$form_name] = $value;
|
$validated[$form_name] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,10 +731,19 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput],
|
|||||||
self.iterateOver(function(widget) {widget.resize();}, self, et2_IResizeable);
|
self.iterateOver(function(widget) {widget.resize();}, self, et2_IResizeable);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Register handler for column selection popup
|
// Register handler for column selection popup, or disable
|
||||||
|
if(this.options.settings.no_columnselection)
|
||||||
|
{
|
||||||
|
this.dataview.selectColumnsClick = function() {return false;};
|
||||||
|
$j('span.selectcols',this.dataview.headTr).hide();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$j('span.selectcols',this.dataview.headTr).show();
|
||||||
this.dataview.selectColumnsClick = function(event) {
|
this.dataview.selectColumnsClick = function(event) {
|
||||||
self._selectColumnsClick(event);
|
self._selectColumnsClick(event);
|
||||||
};
|
};
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_parseDataRow: function(_row, _rowData, _colData) {
|
_parseDataRow: function(_row, _rowData, _colData) {
|
||||||
@ -920,9 +929,13 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput],
|
|||||||
});
|
});
|
||||||
autoRefresh.set_value(this._get_autorefresh());
|
autoRefresh.set_value(this._get_autorefresh());
|
||||||
|
|
||||||
var defaultCheck = et2_createWidget("checkbox", {}, this);
|
var defaultCheck = et2_createWidget("select", {"empty_label":"Preference"}, this);
|
||||||
defaultCheck.set_id('as_default');
|
defaultCheck.set_id('nm_col_preference');
|
||||||
defaultCheck.set_label(this.egw().lang("As default"));
|
defaultCheck.set_select_options({
|
||||||
|
'default': {label: 'Default',title:'Set these columns as the default'},
|
||||||
|
'reset': {label: 'Reset', title:"Reset all user's column preferences"},
|
||||||
|
'force': {label: 'Force', title:'Force column preference so users cannot change it'}
|
||||||
|
});
|
||||||
|
|
||||||
var okButton = et2_createWidget("buttononly", {}, this);
|
var okButton = et2_createWidget("buttononly", {}, this);
|
||||||
okButton.set_label(this.egw().lang("ok"));
|
okButton.set_label(this.egw().lang("ok"));
|
||||||
@ -971,6 +984,8 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
columnMgr.setColumnVisibilitySet(visibility);
|
columnMgr.setColumnVisibilitySet(visibility);
|
||||||
|
|
||||||
|
// Hide popup
|
||||||
self.selectPopup.toggle();
|
self.selectPopup.toggle();
|
||||||
|
|
||||||
self.dataview.updateColumns();
|
self.dataview.updateColumns();
|
||||||
@ -979,7 +994,7 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput],
|
|||||||
self._set_autorefresh(autoRefresh.get_value());
|
self._set_autorefresh(autoRefresh.get_value());
|
||||||
|
|
||||||
// Set default?
|
// Set default?
|
||||||
if(defaultCheck.get_value() == "true")
|
if(defaultCheck.get_value())
|
||||||
{
|
{
|
||||||
self.getInstanceManager().submit();
|
self.getInstanceManager().submit();
|
||||||
}
|
}
|
||||||
|
@ -188,10 +188,6 @@ class preferences
|
|||||||
return $prefs;
|
return $prefs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************\
|
|
||||||
* These are the standard $this->account_id specific functions *
|
|
||||||
\**************************************************************************/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parses a notify and replaces the substitutes
|
* parses a notify and replaces the substitutes
|
||||||
*
|
*
|
||||||
@ -658,6 +654,55 @@ class preferences
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Completely delete the specified preference name from all users
|
||||||
|
*
|
||||||
|
* @param string $app Application name
|
||||||
|
* @param string $name Preference name
|
||||||
|
* @param string $type='user' of preference to set: forced, default, user
|
||||||
|
*/
|
||||||
|
public function delete_preference($app, $name, $type='user')
|
||||||
|
{
|
||||||
|
$GLOBALS['egw']->db->transaction_begin();
|
||||||
|
$where = array(
|
||||||
|
'preference_app' => $app,
|
||||||
|
'preference_value ' . $this->db->capabilities[egw_db::CAPABILITY_CASE_INSENSITIV_LIKE].' ' .
|
||||||
|
$this->db->quote("%$name%")
|
||||||
|
);
|
||||||
|
switch($type)
|
||||||
|
{
|
||||||
|
case 'forced':
|
||||||
|
$where['preference_owner'] = self::FORCED_ID;
|
||||||
|
break;
|
||||||
|
case 'default':
|
||||||
|
$where['preference_owner'] = self::DEFAULT_ID;
|
||||||
|
break;
|
||||||
|
case 'user':
|
||||||
|
$where[] = 'preference_owner > 0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach($this->db->select($this->table,'*',$where,__LINE__,__FILE__) as $row)
|
||||||
|
{
|
||||||
|
$value = unserialize($row['preference_value']);
|
||||||
|
if($value[$name])
|
||||||
|
{
|
||||||
|
unset($value[$name]);
|
||||||
|
$this->quote($value); // this quote-ing is for serialize, not for the db
|
||||||
|
$GLOBALS['egw']->db->insert($this->table,array(
|
||||||
|
'preference_value' => serialize($value),
|
||||||
|
),array(
|
||||||
|
'preference_owner' => $row['preference_owner'],
|
||||||
|
'preference_app' => $row['preference_app'],
|
||||||
|
),__LINE__,__FILE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$GLOBALS['egw']->db->transaction_commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************\
|
||||||
|
* These are the standard $this->account_id specific functions *
|
||||||
|
\**************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add complex array data preference to $app_name a particular app
|
* add complex array data preference to $app_name a particular app
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user