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|bool} mUid
* @param {number} iSetAction
* @param {Array=} messages = null
*/
messageListAction(sFolderFullNameRaw, mUid, iSetAction, messages) {
messageListAction(sFolderFullNameRaw, iSetAction, messages) {
let
folder = null,

View file

@ -499,11 +499,13 @@ class RemoteUserAjax extends AbstractAjaxRemote
* @param {?Function} fCallback
* @param {string} sFolderFullNameRaw
* @param {boolean} bSetSeen
* @param {Array} aThreadUids = null
*/
messageSetSeenToAll(fCallback, sFolderFullNameRaw, bSetSeen) {
messageSetSeenToAll(fCallback, sFolderFullNameRaw, bSetSeen, aThreadUids = null) {
this.defaultRequest(fCallback, 'MessageSetSeenToAll', {
'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(() => {
const
checked = this.messageListChecked(),
selectedMessage = this.selectorMessageSelected();
return _.union(checked, selectedMessage ? [selectedMessage] : []);
selectedMessage = this.selectorMessageSelected(),
focusedMessage = this.selectorMessageFocused();
return _.union(checked, selectedMessage ? [selectedMessage] : [], focusedMessage ? [focusedMessage] : []);
});
this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(() => {
@ -304,7 +306,7 @@ class MessageUserStore
* @param {string} fromFolderFullNameRaw
* @param {Array} uidForRemove
* @param {string=} toFolderFullNameRaw = ''
* @param {boolean=} bCocopypy = false
* @param {boolean=} 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) {
if (oMessageTextBody && oMessageTextBody.find)
initOpenPgpControls(messageTextBody, message) {
if (messageTextBody && messageTextBody.find)
{
oMessageTextBody.find('.b-plain-openpgp:not(.inited)').each(function() {
PgpStore.initMessageBodyControls($(this), oMessage); // eslint-disable-line no-invalid-this
messageTextBody.find('.b-plain-openpgp:not(.inited)').each(function() {
PgpStore.initMessageBodyControls($(this), message); // eslint-disable-line no-invalid-this
});
}
}
@ -665,7 +668,7 @@ class MessageUserStore
if (message.unseen() || message.hasUnseenSubMessage())
{
getApp().messageListAction(
message.folderFullNameRaw, message.uid, MessageSetAction.SetSeen, [message]);
message.folderFullNameRaw, MessageSetAction.SetSeen, [message]);
}
if (isNew)
@ -771,7 +774,7 @@ class MessageUserStore
}
/**
* @param {Array} aList
* @param {Array} list
* @returns {string}
*/
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())
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;
}
@command((self) => !self.submitRequest() && self.googleLoginEnabled())
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;
}
@command((self) => !self.submitRequest() && self.googleFastLoginEnabled())
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;
}
@command((self) => !self.submitRequest() && self.twitterLoginEnabled())
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;
}

View file

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

View file

@ -687,7 +687,7 @@ class MessageViewMailBoxUserView extends AbstractViewNext
const message = self.message();
if (message)
{
getApp().messageListAction(message.folderFullNameRaw, message.uid,
getApp().messageListAction(message.folderFullNameRaw,
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
if (message && message.folder && message.uid)
{
getApp().messageListAction(
message.folder, message.uid,
getApp().messageListAction(message.folder,
message.flagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, [message]);
}

View file

@ -225,13 +225,14 @@ class MailClient
* @param string $sMessageFlag
* @param bool $bSetAction = true
* @param bool $sSkipUnsupportedFlag = false
* @param array $aCustomUids = null
*
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
* @throws \MailSo\Net\Exceptions\Exception
* @throws \MailSo\Imap\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);
@ -251,7 +252,17 @@ class MailClient
: \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 bool $bSetAction = true
* @param array $aCustomUids = null
*
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
* @throws \MailSo\Net\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', '');
$bSetAction = '1' === (string) $this->GetActionParam('SetAction', '0');
$sThreadUids = \trim($this->GetActionParam('ThreadUids', ''));
try
{
$this->MailClient()->MessageSetSeenToAll($sFolder, $bSetAction);
$this->MailClient()->MessageSetSeenToAll($sFolder, $bSetAction,
!empty($sThreadUids) ? explode(',', $sThreadUids) : null);
}
catch (\Exception $oException)
{

View file

@ -23,7 +23,7 @@
<label class="i18n control-label" data-i18n="LOGIN/LABEL_EMAIL"></label>
<div class="controls">
<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" />
</div>
</div>

View file

@ -1,42 +1,42 @@
<?php
if (defined('APP_VERSION'))
{
$aRequirements = array(
'cURL' => function_exists('curl_init'),
'iconv' => function_exists('iconv'),
'json' => function_exists('json_decode'),
'DateTime' => class_exists('DateTime') && class_exists('DateTimeZone'),
'libxml' => function_exists('libxml_use_internal_errors'),
'dom' => class_exists('DOMDocument'),
'Zlib' => function_exists('gzopen') || function_exists('gzopen64'),
'PCRE' => function_exists('preg_replace'),
'SPL' => function_exists('spl_autoload_register')
);
if (version_compare(PHP_VERSION, '5.3.0', '<'))
{
echo '<p style="color: red">';
echo '[301] Your PHP version ('.PHP_VERSION.') is lower than the minimal required 5.3.0!';
echo '</p>';
exit(301);
}
if (in_array(false, $aRequirements))
{
echo '<p>';
echo '[302] The following PHP extensions are not available in your PHP configuration!';
echo '</p><ul>';
foreach ($aRequirements as $sKey => $bValue)
{
if (!$bValue)
{
echo '<li>'.$sKey.'</li>';
}
}
echo '</ul>';
exit(302);
}
}
<?php
if (defined('APP_VERSION'))
{
$aRequirements = array(
'cURL' => function_exists('curl_init'),
'iconv' => function_exists('iconv'),
'json' => function_exists('json_decode'),
'DateTime' => class_exists('DateTime') && class_exists('DateTimeZone'),
'libxml' => function_exists('libxml_use_internal_errors'),
'dom' => class_exists('DOMDocument'),
'Zlib' => function_exists('gzopen') || function_exists('gzopen64'),
'PCRE' => function_exists('preg_replace'),
'SPL' => function_exists('spl_autoload_register')
);
if (version_compare(PHP_VERSION, '5.4.0', '<'))
{
echo '<p style="color: red">';
echo '[301] Your PHP version ('.PHP_VERSION.') is lower than the minimal required 5.4.0!';
echo '</p>';
exit(301);
}
if (in_array(false, $aRequirements))
{
echo '<p>';
echo '[302] The following PHP extensions are not available in your PHP configuration!';
echo '</p><ul>';
foreach ($aRequirements as $sKey => $bValue)
{
if (!$bValue)
{
echo '<li>'.$sKey.'</li>';
}
}
echo '</ul>';
exit(302);
}
}