Small fixes

This commit is contained in:
RainLoop Team 2016-12-15 00:56:17 +03:00
parent d3f8fa4308
commit 0e9cffd657
10 changed files with 150 additions and 89 deletions

View file

@ -819,11 +819,10 @@ class AppUser extends AbstractApp
/** /**
* @param {string} sFolderFullNameRaw * @param {string} sFolderFullNameRaw
* @param {string|bool} mUid
* @param {number} iSetAction * @param {number} iSetAction
* @param {Array=} messages = null * @param {Array=} messages = null
*/ */
messageListAction(sFolderFullNameRaw, mUid, iSetAction, messages) { messageListAction(sFolderFullNameRaw, iSetAction, messages) {
let let
folder = null, folder = null,

View file

@ -499,11 +499,13 @@ class RemoteUserAjax extends AbstractAjaxRemote
* @param {?Function} fCallback * @param {?Function} fCallback
* @param {string} sFolderFullNameRaw * @param {string} sFolderFullNameRaw
* @param {boolean} bSetSeen * @param {boolean} bSetSeen
* @param {Array} aThreadUids = null
*/ */
messageSetSeenToAll(fCallback, sFolderFullNameRaw, bSetSeen) { messageSetSeenToAll(fCallback, sFolderFullNameRaw, bSetSeen, aThreadUids = null) {
this.defaultRequest(fCallback, 'MessageSetSeenToAll', { this.defaultRequest(fCallback, 'MessageSetSeenToAll', {
'Folder': sFolderFullNameRaw, 'Folder': sFolderFullNameRaw,
'SetAction': bSetSeen ? '1' : '0' 'SetAction': bSetSeen ? '1' : '0',
'ThreadUids': aThreadUids ? aThreadUids.join(',') : ''
}); });
} }

View file

@ -149,8 +149,10 @@ class MessageUserStore
this.messageListCheckedOrSelected = ko.computed(() => { this.messageListCheckedOrSelected = ko.computed(() => {
const const
checked = this.messageListChecked(), checked = this.messageListChecked(),
selectedMessage = this.selectorMessageSelected(); selectedMessage = this.selectorMessageSelected(),
return _.union(checked, selectedMessage ? [selectedMessage] : []); focusedMessage = this.selectorMessageFocused();
return _.union(checked, selectedMessage ? [selectedMessage] : [], focusedMessage ? [focusedMessage] : []);
}); });
this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(() => { this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(() => {
@ -304,7 +306,7 @@ class MessageUserStore
* @param {string} fromFolderFullNameRaw * @param {string} fromFolderFullNameRaw
* @param {Array} uidForRemove * @param {Array} uidForRemove
* @param {string=} toFolderFullNameRaw = '' * @param {string=} toFolderFullNameRaw = ''
* @param {boolean=} bCocopypy = false * @param {boolean=} copy = false
*/ */
removeMessagesFromList(fromFolderFullNameRaw, uidForRemove, toFolderFullNameRaw = '', copy = false) { removeMessagesFromList(fromFolderFullNameRaw, uidForRemove, toFolderFullNameRaw = '', copy = false) {
@ -485,13 +487,14 @@ class MessageUserStore
} }
/** /**
* @param {Object} oMessageTextBody * @param {Object} messageTextBody
* @param {Object} message
*/ */
initOpenPgpControls(oMessageTextBody, oMessage) { initOpenPgpControls(messageTextBody, message) {
if (oMessageTextBody && oMessageTextBody.find) if (messageTextBody && messageTextBody.find)
{ {
oMessageTextBody.find('.b-plain-openpgp:not(.inited)').each(function() { messageTextBody.find('.b-plain-openpgp:not(.inited)').each(function() {
PgpStore.initMessageBodyControls($(this), oMessage); // eslint-disable-line no-invalid-this PgpStore.initMessageBodyControls($(this), message); // eslint-disable-line no-invalid-this
}); });
} }
} }
@ -665,7 +668,7 @@ class MessageUserStore
if (message.unseen() || message.hasUnseenSubMessage()) if (message.unseen() || message.hasUnseenSubMessage())
{ {
getApp().messageListAction( getApp().messageListAction(
message.folderFullNameRaw, message.uid, MessageSetAction.SetSeen, [message]); message.folderFullNameRaw, MessageSetAction.SetSeen, [message]);
} }
if (isNew) if (isNew)
@ -771,7 +774,7 @@ class MessageUserStore
} }
/** /**
* @param {Array} aList * @param {Array} list
* @returns {string} * @returns {string}
*/ */
calculateMessageListHash(list) { calculateMessageListHash(list) {

View file

@ -171,27 +171,31 @@ class LoginUserView extends AbstractViewNext
} }
} }
windowOpenFeatures(wh) {
return `left=200,top=100,width=${wh},height=${wh},menubar=no,status=no,resizable=yes,scrollbars=yes`;
}
@command((self) => !self.submitRequest() && self.facebookLoginEnabled()) @command((self) => !self.submitRequest() && self.facebookLoginEnabled())
facebookCommand() { facebookCommand() {
window.open(socialFacebook(), 'Facebook', 'left=200,top=100,width=500,height=500,menubar=no,status=no,resizable=yes,scrollbars=yes'); window.open(socialFacebook(), 'Facebook', this.windowOpenFeatures(500));
return true; return true;
} }
@command((self) => !self.submitRequest() && self.googleLoginEnabled()) @command((self) => !self.submitRequest() && self.googleLoginEnabled())
googleCommand() { googleCommand() {
window.open(socialGoogle(), 'Google', 'left=200,top=100,width=550,height=550,menubar=no,status=no,resizable=yes,scrollbars=yes'); window.open(socialGoogle(), 'Google', this.windowOpenFeatures(550));
return true; return true;
} }
@command((self) => !self.submitRequest() && self.googleFastLoginEnabled()) @command((self) => !self.submitRequest() && self.googleFastLoginEnabled())
googleFastCommand() { googleFastCommand() {
window.open(socialGoogle(true), 'Google', 'left=200,top=100,width=550,height=550,menubar=no,status=no,resizable=yes,scrollbars=yes'); window.open(socialGoogle(true), 'Google', this.windowOpenFeatures(550));
return true; return true;
} }
@command((self) => !self.submitRequest() && self.twitterLoginEnabled()) @command((self) => !self.submitRequest() && self.twitterLoginEnabled())
twitterCommand() { twitterCommand() {
window.open(socialTwitter(), 'Twitter', 'left=200,top=100,width=500,height=500,menubar=no,status=no,resizable=yes,scrollbars=yes'); window.open(socialTwitter(), 'Twitter', this.windowOpenFeatures(500));
return true; return true;
} }

View file

@ -513,23 +513,26 @@ class MessageListMailBoxUserView extends AbstractViewNext
/** /**
* @param {string} sFolderFullNameRaw * @param {string} sFolderFullNameRaw
* @param {string|bool} mUid
* @param {number} iSetAction * @param {number} iSetAction
* @param {Array=} aMessages = null * @param {Array=} aMessages = null
* @returns {void} * @returns {void}
*/ */
setAction(sFolderFullNameRaw, mUid, iSetAction, aMessages) { setAction(sFolderFullNameRaw, iSetAction, aMessages) {
getApp().messageListAction(sFolderFullNameRaw, mUid, iSetAction, aMessages); getApp().messageListAction(sFolderFullNameRaw, iSetAction, aMessages);
} }
/** /**
* @param {string} sFolderFullNameRaw * @param {string} sFolderFullNameRaw
* @param {number} iSetAction * @param {number} iSetAction
* @param {string} sThreadUid = ''
* @returns {void} * @returns {void}
*/ */
setActionForAll(sFolderFullNameRaw, iSetAction) { setActionForAll(sFolderFullNameRaw, iSetAction, sThreadUid = '') {
if ('' !== sFolderFullNameRaw) if ('' !== sFolderFullNameRaw)
{ {
let cnt = 0;
const uids = [];
let folder = getFolderFromCacheList(sFolderFullNameRaw); let folder = getFolderFromCacheList(sFolderFullNameRaw);
if (folder) if (folder)
{ {
@ -540,27 +543,64 @@ class MessageListMailBoxUserView extends AbstractViewNext
if (folder) if (folder)
{ {
_.each(MessageStore.messageList(), (message) => { _.each(MessageStore.messageList(), (message) => {
if (message.unseen())
{
cnt++;
}
message.unseen(false); message.unseen(false);
uids.push(message.uid);
}); });
folder.messageCountUnread(0); if (sThreadUid)
{
folder.messageCountUnread(folder.messageCountUnread() - cnt);
if (0 > folder.messageCountUnread())
{
folder.messageCountUnread(0);
}
}
else
{
folder.messageCountUnread(0);
}
clearMessageFlagsFromCacheByFolder(sFolderFullNameRaw); clearMessageFlagsFromCacheByFolder(sFolderFullNameRaw);
} }
Remote.messageSetSeenToAll(noop, sFolderFullNameRaw, true); Remote.messageSetSeenToAll(noop, sFolderFullNameRaw, true, sThreadUid ? uids : null);
break; break;
case MessageSetAction.UnsetSeen: case MessageSetAction.UnsetSeen:
folder = getFolderFromCacheList(sFolderFullNameRaw); folder = getFolderFromCacheList(sFolderFullNameRaw);
if (folder) if (folder)
{ {
_.each(MessageStore.messageList(), (message) => { _.each(MessageStore.messageList(), (message) => {
if (!message.unseen())
{
cnt++;
}
message.unseen(true); message.unseen(true);
uids.push(message.uid);
}); });
folder.messageCountUnread(folder.messageCountAll()); if (sThreadUid)
{
folder.messageCountUnread(folder.messageCountUnread() + cnt);
if (folder.messageCountAll() < folder.messageCountUnread())
{
folder.messageCountUnread(folder.messageCountAll());
}
}
else
{
folder.messageCountUnread(folder.messageCountAll());
}
clearMessageFlagsFromCacheByFolder(sFolderFullNameRaw); clearMessageFlagsFromCacheByFolder(sFolderFullNameRaw);
} }
Remote.messageSetSeenToAll(noop, sFolderFullNameRaw, false);
Remote.messageSetSeenToAll(noop, sFolderFullNameRaw, false, sThreadUid ? uids : null);
break; break;
// no default // no default
} }
@ -571,26 +611,26 @@ class MessageListMailBoxUserView extends AbstractViewNext
} }
listSetSeen() { listSetSeen() {
this.setAction(FolderStore.currentFolderFullNameRaw(), true, this.setAction(FolderStore.currentFolderFullNameRaw(),
MessageSetAction.SetSeen, MessageStore.messageListCheckedOrSelected()); MessageSetAction.SetSeen, MessageStore.messageListCheckedOrSelected());
} }
listSetAllSeen() { listSetAllSeen() {
this.setActionForAll(FolderStore.currentFolderFullNameRaw(), MessageSetAction.SetSeen); this.setActionForAll(FolderStore.currentFolderFullNameRaw(), MessageSetAction.SetSeen, this.messageListEndThreadUid());
} }
listUnsetSeen() { listUnsetSeen() {
this.setAction(FolderStore.currentFolderFullNameRaw(), true, this.setAction(FolderStore.currentFolderFullNameRaw(),
MessageSetAction.UnsetSeen, MessageStore.messageListCheckedOrSelected()); MessageSetAction.UnsetSeen, MessageStore.messageListCheckedOrSelected());
} }
listSetFlags() { listSetFlags() {
this.setAction(FolderStore.currentFolderFullNameRaw(), true, this.setAction(FolderStore.currentFolderFullNameRaw(),
MessageSetAction.SetFlag, MessageStore.messageListCheckedOrSelected()); MessageSetAction.SetFlag, MessageStore.messageListCheckedOrSelected());
} }
listUnsetFlags() { listUnsetFlags() {
this.setAction(FolderStore.currentFolderFullNameRaw(), true, this.setAction(FolderStore.currentFolderFullNameRaw(),
MessageSetAction.UnsetFlag, MessageStore.messageListCheckedOrSelected()); MessageSetAction.UnsetFlag, MessageStore.messageListCheckedOrSelected());
} }
@ -601,12 +641,12 @@ class MessageListMailBoxUserView extends AbstractViewNext
const checkedUids = _.map(checked, (message) => message.uid); const checkedUids = _.map(checked, (message) => message.uid);
if (0 < checkedUids.length && -1 < inArray(currentMessage.uid, checkedUids)) if (0 < checkedUids.length && -1 < inArray(currentMessage.uid, checkedUids))
{ {
this.setAction(currentMessage.folderFullNameRaw, true, currentMessage.flagged() ? this.setAction(currentMessage.folderFullNameRaw, currentMessage.flagged() ?
MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, checked); MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, checked);
} }
else else
{ {
this.setAction(currentMessage.folderFullNameRaw, true, currentMessage.flagged() ? this.setAction(currentMessage.folderFullNameRaw, currentMessage.flagged() ?
MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, [currentMessage]); MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, [currentMessage]);
} }
} }
@ -619,12 +659,12 @@ class MessageListMailBoxUserView extends AbstractViewNext
if (isUnd(bFlag)) if (isUnd(bFlag))
{ {
const flagged = _.filter(checked, (message) => message.flagged()); const flagged = _.filter(checked, (message) => message.flagged());
this.setAction(checked[0].folderFullNameRaw, true, this.setAction(checked[0].folderFullNameRaw,
checked.length === flagged.length ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, checked); checked.length === flagged.length ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, checked);
} }
else else
{ {
this.setAction(checked[0].folderFullNameRaw, true, this.setAction(checked[0].folderFullNameRaw,
!bFlag ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, checked); !bFlag ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, checked);
} }
} }
@ -637,12 +677,12 @@ class MessageListMailBoxUserView extends AbstractViewNext
if (isUnd(seen)) if (isUnd(seen))
{ {
const unseen = _.filter(checked, (message) => message.unseen()); const unseen = _.filter(checked, (message) => message.unseen());
this.setAction(checked[0].folderFullNameRaw, true, this.setAction(checked[0].folderFullNameRaw,
0 < unseen.length ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen, checked); 0 < unseen.length ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen, checked);
} }
else else
{ {
this.setAction(checked[0].folderFullNameRaw, true, this.setAction(checked[0].folderFullNameRaw,
seen ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen, checked); seen ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen, checked);
} }
} }
@ -676,7 +716,7 @@ class MessageListMailBoxUserView extends AbstractViewNext
clearListIsVisible() { clearListIsVisible() {
return '' === this.messageListSearchDesc() && '' === this.messageListError() && return '' === this.messageListSearchDesc() && '' === this.messageListError() &&
'' === MessageStore.messageListEndThreadUid() && '' === this.messageListEndThreadUid() &&
0 < this.messageList().length && (this.isSpamFolder() || this.isTrashFolder()); 0 < this.messageList().length && (this.isSpamFolder() || this.isTrashFolder());
} }

View file

@ -687,7 +687,7 @@ class MessageViewMailBoxUserView extends AbstractViewNext
const message = self.message(); const message = self.message();
if (message) if (message)
{ {
getApp().messageListAction(message.folderFullNameRaw, message.uid, getApp().messageListAction(message.folderFullNameRaw,
message.flagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, [message]); message.flagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, [message]);
} }
}) })
@ -695,8 +695,7 @@ class MessageViewMailBoxUserView extends AbstractViewNext
const message = ko.dataFor(this); // eslint-disable-line no-invalid-this const message = ko.dataFor(this); // eslint-disable-line no-invalid-this
if (message && message.folder && message.uid) if (message && message.folder && message.uid)
{ {
getApp().messageListAction( getApp().messageListAction(message.folder,
message.folder, message.uid,
message.flagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, [message]); message.flagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, [message]);
} }

View file

@ -225,13 +225,14 @@ class MailClient
* @param string $sMessageFlag * @param string $sMessageFlag
* @param bool $bSetAction = true * @param bool $bSetAction = true
* @param bool $sSkipUnsupportedFlag = false * @param bool $sSkipUnsupportedFlag = false
* @param array $aCustomUids = null
* *
* @throws \MailSo\Base\Exceptions\InvalidArgumentException * @throws \MailSo\Base\Exceptions\InvalidArgumentException
* @throws \MailSo\Net\Exceptions\Exception * @throws \MailSo\Net\Exceptions\Exception
* @throws \MailSo\Imap\Exceptions\Exception * @throws \MailSo\Imap\Exceptions\Exception
* @throws \MailSo\Mail\Exceptions\Exception * @throws \MailSo\Mail\Exceptions\Exception
*/ */
public function MessageSetFlagToAll($sFolderName, $sMessageFlag, $bSetAction = true, $sSkipUnsupportedFlag = false) public function MessageSetFlagToAll($sFolderName, $sMessageFlag, $bSetAction = true, $sSkipUnsupportedFlag = false, $aCustomUids = null)
{ {
$this->oImapClient->FolderSelect($sFolderName); $this->oImapClient->FolderSelect($sFolderName);
@ -251,7 +252,17 @@ class MailClient
: \MailSo\Imap\Enumerations\StoreAction::REMOVE_FLAGS_SILENT : \MailSo\Imap\Enumerations\StoreAction::REMOVE_FLAGS_SILENT
; ;
$this->oImapClient->MessageStoreFlag('1:*', false, array($sMessageFlag), $sStoreAction); if (is_array($aCustomUids))
{
if (0 < count($aCustomUids))
{
$this->oImapClient->MessageStoreFlag(implode(',', $aCustomUids), true, array($sMessageFlag), $sStoreAction);
}
}
else
{
$this->oImapClient->MessageStoreFlag('1:*', false, array($sMessageFlag), $sStoreAction);
}
} }
} }
@ -312,14 +323,15 @@ class MailClient
/** /**
* @param string $sFolderName * @param string $sFolderName
* @param bool $bSetAction = true * @param bool $bSetAction = true
* @param array $aCustomUids = null
* *
* @throws \MailSo\Base\Exceptions\InvalidArgumentException * @throws \MailSo\Base\Exceptions\InvalidArgumentException
* @throws \MailSo\Net\Exceptions\Exception * @throws \MailSo\Net\Exceptions\Exception
* @throws \MailSo\Imap\Exceptions\Exception * @throws \MailSo\Imap\Exceptions\Exception
*/ */
public function MessageSetSeenToAll($sFolderName, $bSetAction = true) public function MessageSetSeenToAll($sFolderName, $bSetAction = true, $aCustomUids = null)
{ {
$this->MessageSetFlagToAll($sFolderName, \MailSo\Imap\Enumerations\MessageFlag::SEEN, $bSetAction, true); $this->MessageSetFlagToAll($sFolderName, \MailSo\Imap\Enumerations\MessageFlag::SEEN, $bSetAction, true, $aCustomUids);
} }
/** /**

View file

@ -7211,10 +7211,12 @@ NewThemeLink IncludeCss LoadingDescriptionEsc TemplatesLink LangLink IncludeBack
$sFolder = $this->GetActionParam('Folder', ''); $sFolder = $this->GetActionParam('Folder', '');
$bSetAction = '1' === (string) $this->GetActionParam('SetAction', '0'); $bSetAction = '1' === (string) $this->GetActionParam('SetAction', '0');
$sThreadUids = \trim($this->GetActionParam('ThreadUids', ''));
try try
{ {
$this->MailClient()->MessageSetSeenToAll($sFolder, $bSetAction); $this->MailClient()->MessageSetSeenToAll($sFolder, $bSetAction,
!empty($sThreadUids) ? explode(',', $sThreadUids) : null);
} }
catch (\Exception $oException) catch (\Exception $oException)
{ {

View file

@ -23,7 +23,7 @@
<label class="i18n control-label" data-i18n="LOGIN/LABEL_EMAIL"></label> <label class="i18n control-label" data-i18n="LOGIN/LABEL_EMAIL"></label>
<div class="controls"> <div class="controls">
<label style="margin-top: 5px;" data-bind="visible: !isNew()"><strong data-bind="text: email"></strong></label> <label style="margin-top: 5px;" data-bind="visible: !isNew()"><strong data-bind="text: email"></strong></label>
<input type="email" class="inputEmail input-large" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="email" class="inputEmail input-xlarge" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="visible: isNew, textInput: email, onEnter: addAccountCommand, hasfocus: emailFocus" /> data-bind="visible: isNew, textInput: email, onEnter: addAccountCommand, hasfocus: emailFocus" />
</div> </div>
</div> </div>

View file

@ -14,10 +14,10 @@
'SPL' => function_exists('spl_autoload_register') 'SPL' => function_exists('spl_autoload_register')
); );
if (version_compare(PHP_VERSION, '5.3.0', '<')) if (version_compare(PHP_VERSION, '5.4.0', '<'))
{ {
echo '<p style="color: red">'; echo '<p style="color: red">';
echo '[301] Your PHP version ('.PHP_VERSION.') is lower than the minimal required 5.3.0!'; echo '[301] Your PHP version ('.PHP_VERSION.') is lower than the minimal required 5.4.0!';
echo '</p>'; echo '</p>';
exit(301); exit(301);
} }