Fix mail actions update for nm context menu, preview and display toolbar

This commit is contained in:
Hadi Nategh 2015-09-21 15:47:09 +00:00
parent 9cf5fc20db
commit eb41061212
2 changed files with 134 additions and 120 deletions

View File

@ -4337,7 +4337,11 @@ class mail_ui
if ($_sendJsonResponse) if ($_sendJsonResponse)
{ {
$response = egw_json_response::get(); $response = egw_json_response::get();
if ((isset($_messageList['all']) && $_messageList['all']) || ($query['filter'] && ($flag2check==$query['filter'] || stripos($query['filter'],$flag2check)!==false))) if (isset($_messageList['msg']) && $_messageList['popup'])
{
$response->call('egw.refresh',lang('flagged %1 message as %2 in %3',$_messageList['msg'],lang($_flag),$folder),'mail', $_messageList['msg'], 'update');
}
else if ((isset($_messageList['all']) && $_messageList['all']) || ($query['filter'] && ($flag2check==$query['filter'] || stripos($query['filter'],$flag2check)!==false)))
{ {
$response->call('egw.refresh',lang('flagged %1 messages as %2 in %3',(isset($_messageList['all']) && $_messageList['all']?lang('all'):count($_messageList['msg'])),lang($_flag),$folder),'mail'); $response->call('egw.refresh',lang('flagged %1 messages as %2 in %3',(isset($_messageList['all']) && $_messageList['all']?lang('all'):count($_messageList['msg'])),lang($_flag),$folder),'mail');
} }

View File

@ -1963,70 +1963,89 @@ app.classes.mail = AppJS.extend(
*/ */
mail_callFlagMessages: function(_action, _elems, _allMessagesChecked) mail_callFlagMessages: function(_action, _elems, _allMessagesChecked)
{ {
var do_nmactions = true; /**
var msg; * vars
var ftree; */
var _folder; var folder = '',
if (typeof _allMessagesChecked=='undefined') _allMessagesChecked=false; tree = {},
if (_action.id=='read') formData = {},
{ data = {
ftree = this.et2.getWidgetById(this.nm_index+'[foldertree]'); msg: [this.et2.getArrayMgr("content").getEntry('mail_id')] || '',
var _foldernode = ftree.getSelectedNode(); all: _allMessagesChecked || false,
_folder = _foldernode.id; popup: egw(window).is_popup() || false,
} activeFilters: _action.id == 'readall'? false : this.mail_getActiveFilters(_action)
if (typeof _elems == 'undefined'|| _elems.length==0) },
{ rowClass = _action.id;
do_nmactions = false;//indicates that this action is probably a popup?
if (this.et2.getArrayMgr("content").getEntry('mail_id'))
{
msg = {};
msg['msg'] = [this.et2.getArrayMgr('content').getEntry('mail_id') || ''];
}
if ((typeof _elems == 'undefined'|| _elems.length==0) && this.mail_isMainWindow)
{
if (this.mail_currentlyFocussed)
{
msg = {};
msg['msg'] = [this.mail_currentlyFocussed];
_elems = msg;
do_nmactions = true;// is triggered from preview
}
}
}
var classToProcess = _action.id; if (typeof _elems === 'undefined' || _elems.length == 0)
if (_action.id=='read') classToProcess='seen';
else if (_action.id=='readall') classToProcess='seen';
else if (_action.id=='label1') classToProcess='labelone';
else if (_action.id=='label2') classToProcess='labeltwo';
else if (_action.id=='label3') classToProcess='labelthree';
else if (_action.id=='label4') classToProcess='labelfour';
else if (_action.id=='label5') classToProcess='labelfive';
if (do_nmactions)
{ {
msg = this.mail_getFormData(_elems); if (this.mail_isMainWindow && this.mail_currentlyFocussed)
msg['all'] = _allMessagesChecked; {
if (msg['all']=='cancel') return false; data.msg = [this.mail_currentlyFocussed];
msg['activeFilters'] = (_action.id=='readall'?false:this.mail_getActiveFilters(_action)); _elems = data;
data.msg = this.mail_getFormData(_elems).msg;
}
}
else // action called by contextmenu
{
data.msg = this.mail_getFormData(_elems).msg;
}
switch (_action.id)
{
case 'read':
rowClass = 'seen';
if (data.popup)
{
tree = opener.etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
}
else
{
tree = this.et2.getWidgetById(this.nm_index+'[foldertree]');
}
folder = tree.getSelectedNode().id;
break;
case 'readall':
rowClass = 'seen';
break;
case 'label1':
rowClass = 'labelone';
break;
case 'label2':
rowClass = 'labeltwo';
break;
case 'label3':
rowClass = 'labelthree';
break;
case 'label4':
rowClass = 'labelfour';
break;
case 'label5':
rowClass = 'labelfive';
break;
default:
break;
}
jQuery(data).extend({},data, formData);
if (data['all']=='cancel') return false;
if (_action.id.substring(0,2)=='un') { if (_action.id.substring(0,2)=='un') {
//old style, only available for undelete and unlabel (no toggle) //old style, only available for undelete and unlabel (no toggle)
if ( _action.id=='unlabel') // this means all labels should be removed if ( _action.id=='unlabel') // this means all labels should be removed
{ {
var labels = ['labelone','labeltwo','labelthree','labelfour','labelfive']; var labels = ['labelone','labeltwo','labelthree','labelfour','labelfive'];
for (var i=0; i<labels.length; i++) this.mail_removeRowClass(_elems,labels[i]); for (var i=0; i<labels.length; i++) this.mail_removeRowClass(_elems,labels[i]);
this.mail_flagMessages(_action.id,msg,(do_nmactions?false:true)); this.mail_flagMessages(_action.id,data);
} }
else else
{ {
this.mail_removeRowClass(_elems,_action.id.substring(2)); this.mail_removeRowClass(_elems,_action.id.substring(2));
this.mail_setRowClass(_elems,_action.id); this.mail_setRowClass(_elems,_action.id);
this.mail_flagMessages(_action.id,msg,(do_nmactions?false:true)); this.mail_flagMessages(_action.id,data);
} }
} }
else if (_action.id=='readall') else if (_action.id=='readall')
{ {
this.mail_flagMessages('read',msg,(do_nmactions?false:true)); this.mail_flagMessages('read',data);
} }
else else
{ {
@ -2035,9 +2054,9 @@ app.classes.mail = AppJS.extend(
var dataElem; var dataElem;
var flags; var flags;
var classes = ''; var classes = '';
for (var i=0; i<msg.msg.length; i++) for (var i=0; i<data.msg.length; i++)
{ {
dataElem = egw.dataGetUIDdata(msg.msg[i]); dataElem = egw.dataGetUIDdata(data.msg[i]);
if(typeof dataElem.data.flags == 'undefined') if(typeof dataElem.data.flags == 'undefined')
{ {
dataElem.data.flags = {}; dataElem.data.flags = {};
@ -2048,59 +2067,50 @@ app.classes.mail = AppJS.extend(
// since we toggle we need to unset the ones already set, and set the ones not set // since we toggle we need to unset the ones already set, and set the ones not set
// flags is data, UI is done by class, so update both // flags is data, UI is done by class, so update both
// Flags are there or not, class names are flag or 'un'+flag // Flags are there or not, class names are flag or 'un'+flag
if(classes.indexOf(classToProcess) >= 0) if(classes.indexOf(rowClass) >= 0)
{ {
classes.splice(classes.indexOf(classToProcess),1); classes.splice(classes.indexOf(rowClass),1);
} }
if(classes.indexOf('un' + classToProcess) >= 0) if(classes.indexOf('un' + rowClass) >= 0)
{ {
classes.splice(classes.indexOf('un' + classToProcess),1); classes.splice(classes.indexOf('un' + rowClass),1);
} }
if (flags[_action.id]) if (flags[_action.id])
{ {
msg_unset['msg'].push(msg.msg[i]); msg_unset['msg'].push(data.msg[i]);
classes.push('un'+classToProcess); classes.push('un'+rowClass);
delete flags[_action.id]; delete flags[_action.id];
} }
else else
{ {
msg_set['msg'].push(msg.msg[i]); msg_set['msg'].push(data.msg[i]);
flags[_action.id] = _action.id; flags[_action.id] = _action.id;
classes.push(classToProcess); classes.push(rowClass);
} }
// Update cache & call callbacks - updates list // Update cache & call callbacks - updates list
dataElem.data['class'] = classes.join(' '); dataElem.data['class'] = classes.join(' ');
egw.dataStoreUID(msg.msg[i],dataElem.data); egw.dataStoreUID(data.msg[i],dataElem.data);
//Refresh the nm rows after we told dataComponent about all changes, since the dataComponent doesn't talk to nm, we need to do it manually //Refresh the nm rows after we told dataComponent about all changes, since the dataComponent doesn't talk to nm, we need to do it manually
this.updateFilter_data(msg.msg[i], _action.id, msg.activeFilters); this.updateFilter_data(data.msg[i], _action.id, data.activeFilters);
} }
// Notify server of changes // Notify server of changes
if (msg_unset['msg'] && msg_unset['msg'].length) if (msg_unset['msg'] && msg_unset['msg'].length)
{ {
if (!msg['all']) this.mail_flagMessages('un'+_action.id,msg_unset); if (!data['all']) this.mail_flagMessages('un'+_action.id,msg_unset);
} }
if (msg_set['msg'] && msg_set['msg'].length) if (msg_set['msg'] && msg_set['msg'].length)
{ {
if (!msg['all']) this.mail_flagMessages(_action.id,msg_set); if (!data['all']) this.mail_flagMessages(_action.id,msg_set);
} }
//server must do the toggle, as we apply to ALL, not only the visible //server must do the toggle, as we apply to ALL, not only the visible
if (msg['all']) this.mail_flagMessages(_action.id,msg); if (data['all']) this.mail_flagMessages(_action.id,data);
// No further update needed, only in case of read, the counters should be refreshed // No further update needed, only in case of read, the counters should be refreshed
if (_action.id=='read') this.mail_refreshFolderStatus(_folder,'thisfolderonly',false,true); if (_action.id=='read') this.mail_refreshFolderStatus(folder,'thisfolderonly',false,true);
return; return;
} }
}
else
{
this.mail_flagMessages(_action.id,msg,(do_nmactions?false:true));
}
// only refresh counter. not grid as the ajaxmethod is called asyncronously
// on flagging, only seen/unseen has effect on counterdisplay
if (_action.id=='read' || _action.id=='readall') this.mail_refreshFolderStatus(_folder,'thisfolderonly',false,true);
//this.mail_refreshFolderStatus();
}, },
/** /**