Interface optimization

Mark as important (compose)
This commit is contained in:
RainLoop Team 2014-12-31 16:21:43 +04:00
parent 821991a263
commit d5eacb6a4d
43 changed files with 1069 additions and 780 deletions

View file

@ -82,6 +82,10 @@ LANG_KO_KR = "한국어"
LANG_BG = "Български"
LANG_BG_BG = "Български"
LANG_VI = "Tiếng Việt"
LANG_VI_VI = "Tiếng Việt"
LANG_VI_VN = "Tiếng Việt"
[LANGS_NAMES_EN]
LANG_EN = "English"
LANG_EN_US = "English (US)"
@ -166,3 +170,7 @@ LANG_KO_KR = "Korean"
LANG_BG = "Bulgarian"
LANG_BG_BG = "Bulgarian"
LANG_VI = "Vietnamese"
LANG_VI_VI = "Vietnamese"
LANG_VI_VN = "Vietnamese"

View file

@ -2751,12 +2751,12 @@ class Actions
*/
public function licenseHelper($sForce = false, $bLongCache = false, $iFastCacheTimeInMin = 10, $iLongCacheTimeInDays = 3)
{
$sDomain = APP_SITE;
$sDomain = \trim(APP_SITE);
$oCacher = $this->Cacher();
$oHttp = \MailSo\Base\Http::SingletonInstance();
if ($oHttp->CheckLocalhost($sDomain) || !$oCacher)
if (0 === \strlen($sDomain) || $oHttp->CheckLocalhost($sDomain) || !$oCacher)
{
return 'NO';
}
@ -4761,6 +4761,7 @@ class Actions
$sSubject = $this->GetActionParam('Subject', '');
$bTextIsHtml = '1' === $this->GetActionParam('TextIsHtml', '0');
$bReadReceiptRequest = '1' === $this->GetActionParam('ReadReceiptRequest', '0');
$bMarkAsImportant = '1' === $this->GetActionParam('MarkAsImportant', '0');
$sText = $this->GetActionParam('Text', '');
$aAttachments = $this->GetActionParam('Attachments', null);
@ -4801,6 +4802,11 @@ class Actions
$oMessage->SetReadReceipt($oAccount->Email());
}
if ($bMarkAsImportant)
{
$oMessage->SetPriority(\MailSo\Mime\Enumerations\MessagePriority::HIGH);
}
$oMessage->SetSubject($sSubject);
$oToEmails = \MailSo\Mime\EmailCollection::NewInstance($sTo);

View file

@ -150,7 +150,22 @@ class Filter
*/
public function FromJSON($aFilter)
{
//
if (\is_array($aFilter))
{
$this->sID = isset($aFilter['ID']) ? $aFilter['ID'] : '';
$this->sName = isset($aFilter['Name']) ? $aFilter['Name'] : '';
$this->sFilterRulesType = isset($aFilter['FilterRulesType']) ? $aFilter['FilterRulesType'] :
\RainLoop\Providers\Filters\Enumerations\FilterRulesType::ALL;
$this->sActionType = isset($aFilter['ActionType']) ? $aFilter['ActionType'] :
\RainLoop\Providers\Filters\Enumerations\ActionType::MOVE_TO;
$this->sActionValue = isset($aFilter['ActionValue']) ? $aFilter['ActionValue'] : '';
$this->bMarkAsRead = isset($aFilter['MarkAsRead']) ? $aFilter['MarkAsRead'] : false;
$this->bSkipOthers = isset($aFilter['SkipOthers']) ? $aFilter['SkipOthers'] : false;
}
}
/**
@ -160,7 +175,15 @@ class Filter
*/
public function ToSimpleJSON($bAjax = false)
{
$aConditions = $this->Conditions();
$aConditions = array();
foreach ($this->Conditions() as $oItem)
{
if ($oItem)
{
$aConditions[] = $oItem->ToSimpleJSON($bAjax);
}
}
return array(
'ID' => $this->ID(),
'Name' => $this->Name(),

View file

@ -0,0 +1,90 @@
<?php
namespace RainLoop\Providers\Filters\Classes;
class FilterCondition
{
/**
* @var string
*/
private $sField;
/**
* @var string
*/
private $sType;
/**
* @var string
*/
private $sValue;
public function __construct()
{
$this->Clear();
}
public function Clear()
{
$this->sField = \RainLoop\Providers\Filters\Enumerations\ConditionField::FROM;
$this->sType = \RainLoop\Providers\Filters\Enumerations\ConditionType::EQUAL_TO;
$this->sValue = '';
}
/**
* @return string
*/
public function Field()
{
return $this->sField;
}
/**
* @return string
*/
public function Type()
{
return $this->sType;
}
/**
* @return string
*/
public function Value()
{
return $this->sValue;
}
/**
* @param array $aFilter
*
* @return array
*/
public function FromJSON($aFilter)
{
if (\is_array($aFilter))
{
$this->sField = isset($aFilter['Field']) ? $aFilter['Field'] :
\RainLoop\Providers\Filters\Enumerations\ConditionField::FROM;
$this->sType = isset($aFilter['Type']) ? $aFilter['Type'] :
\RainLoop\Providers\Filters\Enumerations\ConditionType::EQUAL_TO;
$this->sValue = isset($aFilter['Value']) ? $aFilter['Value'] : '';
}
}
/**
* @param bool $bAjax = false
*
* @return array
*/
public function ToSimpleJSON($bAjax = false)
{
return array(
'Field' => $this->Field(),
'Type' => $this->Type(),
'Value' => $this->Value()
);
}
}

View file

@ -8,4 +8,4 @@ class ConditionType
const NOT_EQUAL_TO = 'NotEqualTo';
const CONTAINS = 'Contains';
const NOT_CONTAINS = 'NotContains';
}
}

View file

@ -37,8 +37,8 @@
</span>
</div>
<div class="subjectParent actionHandle dragHandle">
<b style="color:red;margin-right:5px" data-bind="visible: isImportant">!</b>
<span class="subject emptySubjectText" data-bind="text: $root.emptySubjectValue"></span>
<!--<span class="subject" data-bind="text: subject"></span>-->
<span class="subject-prefix" data-bind="text: subjectPrefix"></span><span class="subject-suffix" data-bind="text: subjectSuffix"></span>
</div>
</div>

View file

@ -37,8 +37,8 @@
</span>
</div>
<div class="subjectParent actionHandle dragHandle">
<b style="color:red;margin-right:5px" data-bind="visible: isImportant">!</b>
<span class="subject emptySubjectText" data-bind="text: $root.emptySubjectValue"></span>
<!--<span class="subject" data-bind="text: subject"></span>-->
<span class="subject-prefix" data-bind="text: subjectPrefix"></span><span class="subject-suffix" data-bind="text: subjectSuffix"></span>
</div>
<div class="clearfix"></div>

View file

@ -195,6 +195,7 @@
<img class="fromPic" data-bind="visible: viewUserPicVisible, attr: {'src': viewUserPic() }">
<div style="overflow: hidden;">
<div class="subjectParent" data-bind="event: { 'dblclick': toggleFullScreen }">
<b style="color:red;margin-right:5px" data-bind="visible: viewIsImportant">!</b>
<span class="subject" data-bind="text: viewSubject, title: viewSubject"></span>
<span class="i18n emptySubjectText" data-i18n-text="MESSAGE/EMPTY_SUBJECT_TEXT"></span>
</div>

View file

@ -50,6 +50,42 @@
</ul>
<!-- /ko -->
</div>
<div class="btn-group dropdown colored-toggle pull-right">
<a class="btn dropdown-toggle buttonMore" data-toggle="dropdown">
<i class="icon-list"></i>
</a>
<ul class="dropdown-menu g-ui-menu" role="menu">
<li class="e-item" data-bind="click: function () { requestReadReceipt(!requestReadReceipt()); }">
<a class="e-link">
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': requestReadReceipt(), 'icon-checkbox-unchecked': !requestReadReceipt() }"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="COMPOSE/BUTTON_REQUEST_READ_RECEIPT"></span>
</a>
</li>
<li class="e-item" data-bind="click: function () { markAsImportant(!markAsImportant()); }">
<a class="e-link">
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': markAsImportant(), 'icon-checkbox-unchecked': !markAsImportant() }"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="COMPOSE/BUTTON_MARK_AS_IMPORTANT"></span>
</a>
</li>
<li class="divider" data-bind="visible: capaOpenPGP"></li>
<li class="e-item" data-bind="visible: capaOpenPGP, click: openOpenPgpPopup, css: {'disabled': isHtml()}">
<a class="e-link">
<i class="icon-key"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="COMPOSE/BUTTON_OPEN_PGP"></span>
</a>
</li>
</ul>
</div>
<div class="btn-group pull-right">&nbsp;</div>
<div class="btn-group pull-right">
<a class="btn" data-tooltip-placement="bottom" data-bind="visible: allowContacts, command: contactsCommand, tooltip: 'FOLDER_LIST/BUTTON_CONTACTS'">
<i class="icon-address-book"></i>
</a>
</div>
<div class="btn-group pull-right">&nbsp;</div>
<span class="pull-right" data-bind="visible: !showCcAndBcc()">
<span class="i18n g-ui-link" data-i18n-text="COMPOSE/LINK_SHOW_INPUTS" data-bind="click: function () { showCcAndBcc(true); }"></span>
</span>
@ -115,29 +151,6 @@
<span class="i18n" data-i18n-text="COMPOSE/ATTACH_DROP_FILES_DESC"></span>
</div>
<div class="pull-right">
<div class="btn-group dropdown colored-toggle pull-right">
<a class="btn dropdown-toggle buttonMore" data-toggle="dropdown">
<i class="icon-list"></i>
</a>
<ul class="dropdown-menu g-ui-menu" role="menu">
<li class="e-item" data-bind="click: function () { requestReadReceipt(!requestReadReceipt()); }">
<a class="e-link">
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': requestReadReceipt(), 'icon-checkbox-unchecked': !requestReadReceipt() }"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="COMPOSE/BUTTON_REQUEST_READ_RECEIPT"></span>
</a>
</li>
<li class="divider" data-bind="visible: capaOpenPGP"></li>
<li class="e-item" data-bind="visible: capaOpenPGP, click: openOpenPgpPopup, css: {'disabled': isHtml()}">
<a class="e-link">
<i class="icon-key"></i>
&nbsp;&nbsp;
OpenPGP (Plain Text Only)
</a>
</li>
</ul>
</div>
<div class="btn-group pull-right">&nbsp;</div>
<div class="btn-group pull-right">
<a class="btn" data-tooltip-placement="top" data-bind="visible: addAttachmentEnabled(), initDom: composeUploaderButton, tooltip: 'COMPOSE/ATTACH_FILES'">
<i class="icon-attachment"></i>