forked from extern/egroupware
* Mail: Add custom html toolbar settings in mail site-configuration in order to be able to add/remove certain actions only for mail-compose dialog.
This commit is contained in:
parent
b88a8771b9
commit
bf3c833856
@ -268,9 +268,12 @@ var et2_htmlarea = /** @class */ (function (_super) {
|
||||
var rte_menubar = egw.preference('rte_menubar', 'common');
|
||||
var rte_toolbar = egw.preference('rte_toolbar', 'common');
|
||||
// we need to have rte_toolbar values as an array
|
||||
if (rte_toolbar && typeof rte_toolbar == "object") {
|
||||
if (rte_toolbar && typeof rte_toolbar == "object" && this.toolbar == '') {
|
||||
rte_toolbar = Object.keys(rte_toolbar).map(function (key) { return rte_toolbar[key]; });
|
||||
}
|
||||
else if (this.toolbar != '') {
|
||||
rte_toolbar = this.toolbar.split(',');
|
||||
}
|
||||
var settings = {
|
||||
fontsize_formats: et2_htmlarea.FONT_SIZE_FORMATS[egw.preference('rte_font_unit', 'common')],
|
||||
menubar: parseInt(rte_menubar) && this.menubar ? true : typeof rte_menubar != 'undefined' ? false : this.menubar
|
||||
@ -417,6 +420,12 @@ var et2_htmlarea = /** @class */ (function (_super) {
|
||||
description: "Enables to control what child tag is allowed or not allowed of the present tag. For instance: +body[style], makes style tag allowed inside body",
|
||||
type: "string",
|
||||
default: "+body[style]"
|
||||
},
|
||||
toolbar: {
|
||||
'name': 'Toolbar',
|
||||
'description': 'Comma separated string of toolbar actions. It will only be considered if no Mode is restricted.',
|
||||
'default': '',
|
||||
'type': 'string'
|
||||
}
|
||||
};
|
||||
/**
|
||||
@ -426,7 +435,7 @@ var et2_htmlarea = /** @class */ (function (_super) {
|
||||
et2_htmlarea.TOOLBAR_LIST = ['undo', 'redo', 'formatselect', 'fontselect', 'fontsizeselect',
|
||||
'bold', 'italic', 'strikethrough', 'forecolor', 'backcolor', 'link',
|
||||
'alignleft', 'aligncenter', 'alignright', 'alignjustify', 'numlist',
|
||||
'bullist', 'outdent', 'indent', 'ltr', 'rtl', 'removeformat', 'code', 'image', 'searchreplace'
|
||||
'bullist', 'outdent', 'indent', 'ltr', 'rtl', 'removeformat', 'code', 'image', 'searchreplace', 'fullscreen'
|
||||
];
|
||||
/**
|
||||
* arranged toolbars as simple mode
|
||||
@ -447,8 +456,8 @@ var et2_htmlarea = /** @class */ (function (_super) {
|
||||
* @constant
|
||||
*/
|
||||
et2_htmlarea.TOOLBAR_ADVANCED = "undo redo| formatselect | fontselect fontsizeselect | bold italic strikethrough forecolor backcolor | " +
|
||||
"link | alignleft aligncenter alignright alignjustify | numlist " +
|
||||
"bullist outdent indent ltr rtl | removeformat code| image | searchreplace | fullscreen";
|
||||
"alignleft aligncenter alignright alignjustify | numlist " +
|
||||
"bullist outdent indent ltr rtl | removeformat code| link image pastetext | searchreplace | fullscreen";
|
||||
/**
|
||||
* font size formats
|
||||
* @constant
|
||||
|
@ -83,6 +83,12 @@ class et2_htmlarea extends et2_editableWidget implements et2_IResizeable
|
||||
description: "Enables to control what child tag is allowed or not allowed of the present tag. For instance: +body[style], makes style tag allowed inside body",
|
||||
type: "string",
|
||||
default: "+body[style]"
|
||||
},
|
||||
toolbar: {
|
||||
'name': 'Toolbar',
|
||||
'description': 'Comma separated string of toolbar actions. It will only be considered if no Mode is restricted.',
|
||||
'default': '',
|
||||
'type': 'string'
|
||||
}
|
||||
};
|
||||
|
||||
@ -93,7 +99,7 @@ class et2_htmlarea extends et2_editableWidget implements et2_IResizeable
|
||||
public static readonly TOOLBAR_LIST : string[] = ['undo', 'redo', 'formatselect', 'fontselect', 'fontsizeselect',
|
||||
'bold', 'italic', 'strikethrough', 'forecolor', 'backcolor', 'link',
|
||||
'alignleft', 'aligncenter', 'alignright', 'alignjustify', 'numlist',
|
||||
'bullist', 'outdent', 'indent', 'ltr', 'rtl', 'removeformat', 'code', 'image', 'searchreplace'
|
||||
'bullist', 'outdent', 'indent', 'ltr', 'rtl', 'removeformat', 'code', 'image', 'searchreplace', 'fullscreen'
|
||||
];
|
||||
|
||||
/**
|
||||
@ -117,8 +123,8 @@ class et2_htmlarea extends et2_editableWidget implements et2_IResizeable
|
||||
* @constant
|
||||
*/
|
||||
public static readonly TOOLBAR_ADVANCED : string = "undo redo| formatselect | fontselect fontsizeselect | bold italic strikethrough forecolor backcolor | "+
|
||||
"link | alignleft aligncenter alignright alignjustify | numlist "+
|
||||
"bullist outdent indent ltr rtl | removeformat code| image | searchreplace | fullscreen";
|
||||
"alignleft aligncenter alignright alignjustify | numlist "+
|
||||
"bullist outdent indent ltr rtl | removeformat code| link image pastetext | searchreplace | fullscreen";
|
||||
|
||||
/**
|
||||
* font size formats
|
||||
@ -146,6 +152,7 @@ class et2_htmlarea extends et2_editableWidget implements et2_IResizeable
|
||||
supportedWidgetClasses : any;
|
||||
htmlNode : JQuery = null;
|
||||
mode : string;
|
||||
toolbar: string;
|
||||
tinymce : any;
|
||||
tinymce_container : HTMLElement;
|
||||
file_picker_callback : Function;
|
||||
@ -409,10 +416,14 @@ class et2_htmlarea extends et2_editableWidget implements et2_IResizeable
|
||||
let rte_menubar = <string>egw.preference('rte_menubar', 'common');
|
||||
let rte_toolbar = egw.preference('rte_toolbar', 'common');
|
||||
// we need to have rte_toolbar values as an array
|
||||
if (rte_toolbar && typeof rte_toolbar == "object")
|
||||
if (rte_toolbar && typeof rte_toolbar == "object" && this.toolbar == '')
|
||||
{
|
||||
rte_toolbar = Object.keys(rte_toolbar).map(function(key){return rte_toolbar[key]});
|
||||
}
|
||||
else if(this.toolbar != '')
|
||||
{
|
||||
rte_toolbar = this.toolbar.split(',');
|
||||
}
|
||||
let settings = {
|
||||
fontsize_formats: et2_htmlarea.FONT_SIZE_FORMATS[<string>egw.preference('rte_font_unit', 'common')],
|
||||
menubar: parseInt(rte_menubar) && this.menubar ? true : typeof rte_menubar != 'undefined' ? false : this.menubar
|
||||
|
@ -26,15 +26,24 @@ class HtmlArea extends Etemplate\Widget
|
||||
* @var type array
|
||||
*/
|
||||
public static $font_options = array(
|
||||
'andale mono,times' => 'Andale Mono',
|
||||
'arial, helvetica, sans-serif' => 'Arial',
|
||||
'arial black,avant garde' => 'Arial Black',
|
||||
'book antiqua,palatino' => 'Book Antiqua',
|
||||
'Comic Sans MS, cursive' => 'Comic Sans MS',
|
||||
'Courier New, Courier, monospace' => 'Courier New',
|
||||
'Georgia, serif' => 'Georgia',
|
||||
'helvetica' => 'Helvetica',
|
||||
'impact,chicago' => 'Impact',
|
||||
'Lucida Sans Unicode, Lucida Grande, sans-serif' => 'Lucida Sans Unicode',
|
||||
'symbol' => 'Symbol',
|
||||
'Tahoma, Geneva, sans-serif' => 'Tahoma',
|
||||
'terminal, "monaco' => 'Terminal',
|
||||
'times new roman, times, serif' => 'Times New Roman',
|
||||
'Trebuchet MS, Helvetica, sans-serif' => 'Trebuchet MS',
|
||||
'Verdana, Geneva, sans-serif' => 'Verdana'
|
||||
'Verdana, Geneva, sans-serif' => 'Verdana',
|
||||
'webdings' => 'Webdings',
|
||||
'wingdings,zapf dingbats' => 'Wingdings'
|
||||
);
|
||||
|
||||
/**
|
||||
@ -69,6 +78,56 @@ class HtmlArea extends Etemplate\Widget
|
||||
'px' => 'px: display pixels',
|
||||
);
|
||||
|
||||
/**
|
||||
* List of exisitng toolbar actions
|
||||
* @var type array
|
||||
*/
|
||||
public static $toolbar_list = [
|
||||
'undo', 'redo', 'bold', 'italic', 'strikethrough', 'forecolor', 'backcolor',
|
||||
'link', 'alignleft', 'aligncenter', 'alignright', 'alignjustify',
|
||||
'numlist', 'bullist', 'outdent', 'indent', 'ltr', 'rtl','pastetext',
|
||||
'removeformat', 'code', 'image', 'searchreplace','formatselect', 'fontselect', 'fontsizeselect', 'fullscreen'
|
||||
];
|
||||
|
||||
/**
|
||||
* Default list of toolbar actions
|
||||
* @var type array
|
||||
*/
|
||||
public static $toolbar_default_list = [
|
||||
'undo', 'redo','formatselect', 'fontselect', 'fontsizeselect',
|
||||
'bold' ,'italic', 'removeformat', 'forecolor', 'backcolor', 'alignleft',
|
||||
'aligncenter', 'alignright', 'alignjustify', 'numlist', 'bullist', 'outdent',
|
||||
'indent', 'link', 'image', 'pastetext'
|
||||
];
|
||||
|
||||
/**
|
||||
* Create an array of toolbar as sel options
|
||||
*
|
||||
* @return array
|
||||
* [
|
||||
* id => {string}
|
||||
* label => {string}
|
||||
* title => {string}
|
||||
* icon => {string}
|
||||
* app => {string}
|
||||
* ]
|
||||
*/
|
||||
public static function get_toolbar_as_selOptions ()
|
||||
{
|
||||
$toolbar_selOptions = array();
|
||||
foreach (self::$toolbar_list as $toolbar)
|
||||
{
|
||||
$toolbar_selOptions[$toolbar] = array (
|
||||
'id' => $toolbar,
|
||||
'label' => lang($toolbar),
|
||||
'title' => lang($toolbar),
|
||||
'icon' => Api\Framework::getUrl($GLOBALS['egw_info']['server']['webserver_url']).'/api/templates/default/images/htmlarea/'.$toolbar.'.svg',
|
||||
'app' => 'api'
|
||||
);
|
||||
}
|
||||
return $toolbar_selOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate input
|
||||
*
|
||||
|
@ -1394,6 +1394,8 @@ class mail_compose
|
||||
}
|
||||
|
||||
$content['to'] = self::resolveEmailAddressList($content['to']);
|
||||
$content['html_toolbar'] = empty(Mail::$mailConfig['html_toolbar']) ?
|
||||
join(',', Etemplate\Widget\HtmlArea::$toolbar_default_list) : join(',', Mail::$mailConfig['html_toolbar']);
|
||||
//error_log(__METHOD__.__LINE__.array2string($content));
|
||||
$etpl->exec('mail.mail_compose.compose',$content,$sel_options,array(),$preserv,2);
|
||||
}
|
||||
|
@ -732,4 +732,20 @@ class mail_hooks
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Called before displaying site configuration
|
||||
*
|
||||
* @param array $config
|
||||
* @return array with additional config to merge and "sel_options" values
|
||||
*/
|
||||
public static function config(array $config)
|
||||
{
|
||||
return [
|
||||
'html_toolbar' => empty($config['html_toolbar']) ? join(',', Api\Etemplate\Widget\HtmlArea::$toolbar_default_list) : $config['html_toolbar'],
|
||||
'sel_options' => [
|
||||
'html_toolbar' => Api\Etemplate\Widget\HtmlArea::get_toolbar_as_selOptions()
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ $setup_info['mail']['hooks']['clear_cache'] = 'EGroupware\\Api\\Mail::unsetCache
|
||||
$setup_info['mail']['hooks']['check_notify'] = 'mail_hooks::notification_check_mailbox';
|
||||
$setup_info['mail']['hooks']['emailadmin_edit'] = 'mail_hooks::emailadmin_edit';
|
||||
$setup_info['mail']['hooks']['status-get_actions'] = 'mail_hooks::get_status_actions';
|
||||
$setup_info['mail']['hooks']['config'] = 'mail_hooks::config';
|
||||
|
||||
/* Dependencies for this app to work */
|
||||
$setup_info['mail']['depends'][] = array(
|
||||
|
@ -87,7 +87,7 @@
|
||||
</vbox>
|
||||
<vbox class="mailComposeBodySection" width="100%">
|
||||
<hbox disabled="@is_plain" class="mailComposeBody mailComposeHtmlContainer">
|
||||
<htmlarea name="mail_htmltext" id="mail_htmltext" statusbar="false" menubar="false" mode="simple" imageUpload="link_to" expand_toolbar="true" height="478px" width="100%" resize_ratio="0"/>
|
||||
<htmlarea name="mail_htmltext" id="mail_htmltext" statusbar="false" menubar="false" toolbar="@html_toolbar" imageUpload="link_to" expand_toolbar="true" height="478px" width="100%" resize_ratio="0"/>
|
||||
</hbox>
|
||||
<hbox disabled="@is_html" class="mailComposeBody mailComposeTextContainer">
|
||||
<textbox multiline="true" rows="40" cols="120" width="100%" span="all" no_lang="1" name="mail_plaintext" id="mail_plaintext" resize_ratio="0"/>
|
||||
|
@ -83,6 +83,10 @@
|
||||
<description value="Miscellaneous" span="all" class="subHeader"/>
|
||||
</row>
|
||||
<row>
|
||||
<description value="Default toolbar actions shown in mail's HTML editor"/>
|
||||
<taglist id="newsettings[html_toolbar]" allowFreeEntries="false" autocomplete_url=' ' editModeEnabled="false"/>
|
||||
</row>
|
||||
<row>
|
||||
<vbox>
|
||||
<description value="examine namespace to retrieve folders in others and shared"/>
|
||||
<description value="only needed for some servers, that do not return all folders on root level queries to retrieve all folders for that level"/>
|
||||
|
@ -113,23 +113,6 @@ class preferences_hooks
|
||||
$GLOBALS['egw_info']['user']['preferences']['common']['rte_font_size'],
|
||||
$GLOBALS['egw_info']['user']['preferences']['common']['rte_font_unit']);
|
||||
}
|
||||
$rte_toolbar_list = array (
|
||||
'undo', 'redo', 'bold', 'italic', 'strikethrough', 'forecolor', 'backcolor',
|
||||
'link', 'alignleft', 'aligncenter', 'alignright', 'alignjustify',
|
||||
'numlist', 'bullist', 'outdent', 'indent', 'ltr', 'rtl',
|
||||
'removeformat', 'code', 'image', 'searchreplace','formatselect', 'fontselect', 'fontsizeselect', 'fullscreen'
|
||||
);
|
||||
$rte_toolbar_selOptions = array();
|
||||
foreach ($rte_toolbar_list as $toolbar)
|
||||
{
|
||||
$rte_toolbar_selOptions[$toolbar] = array (
|
||||
'id' => $toolbar,
|
||||
'label' => lang($toolbar),
|
||||
'title' => lang($toolbar),
|
||||
'icon' => Framework::getUrl($GLOBALS['egw_info']['server']['webserver_url']).'/api/templates/default/images/htmlarea/'.$toolbar.'.svg',
|
||||
'app' => 'api'
|
||||
);
|
||||
}
|
||||
|
||||
if (!$GLOBALS['egw_info']['user']['preferences']['common']['rte_toolbar'])
|
||||
{
|
||||
@ -475,7 +458,7 @@ class preferences_hooks
|
||||
//'multiple' => 'toggle',
|
||||
'editModeEnabled' => false,
|
||||
'autocomplete_url' => ' ',
|
||||
'select_options' => $rte_toolbar_selOptions
|
||||
'select_options' => Api\Etemplate\Widget\HtmlArea::get_toolbar_as_selOptions()
|
||||
)
|
||||
)
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user