function wysiwyg_ckeditor_settings in Wysiwyg 7.2
Same name and namespace in other branches
- 5.2 editors/ckeditor.inc \wysiwyg_ckeditor_settings()
- 6.2 editors/ckeditor.inc \wysiwyg_ckeditor_settings()
Return runtime editor settings for a given wysiwyg profile.
Parameters
$editor: A processed hook_editor() array of editor properties.
$config: An array containing wysiwyg editor profile settings.
$theme: The name of a theme/GUI/skin to use.
Return value
A settings array to be populated in Drupal.settings.wysiwyg.configs.{editor}
2 string references to 'wysiwyg_ckeditor_settings'
- hook_INCLUDE_editor in ./
wysiwyg.api.php - Define a Wysiwyg editor library.
- wysiwyg_ckeditor_editor in editors/
ckeditor.inc - Plugin implementation of hook_editor().
File
- editors/
ckeditor.inc, line 478 - Editor integration functions for CKEditor.
Code
function wysiwyg_ckeditor_settings($editor, $config, $theme) {
$default_skin = version_compare($editor['installed version'], '4.0.0', '<') ? 'kama' : (version_compare($editor['installed version'], '4.6.0', '<') ? 'moono' : 'moono-lisa');
$settings = array(
// Needed to make relative paths work in the editor.
'baseHref' => $GLOBALS['base_url'] . '/',
'width' => 'auto',
// For better compatibility with smaller textareas.
'resize_minWidth' => 450,
// @todo Do not use skins as themes and add separate skin handling.
'theme' => 'default',
'skin' => !empty($theme) ? $theme : $default_skin,
// By default, CKEditor converts most characters into HTML entities. Since
// it does not support a custom definition, but Drupal supports Unicode, we
// disable at least the additional character sets. CKEditor always converts
// XML default characters '&', '<', '>'.
// @todo Check whether completely disabling ProcessHTMLEntities is an option.
'entities_latin' => FALSE,
'entities_greek' => FALSE,
);
// Add HTML block format settings; common block formats are already predefined
// by CKEditor.
if (isset($config['block_formats'])) {
$block_formats = explode(',', drupal_strtolower(preg_replace('@\\s+@', '', $config['block_formats'])));
$predefined_formats = array(
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'p',
'pre',
'address',
'div',
);
foreach (array_diff($block_formats, $predefined_formats) as $tag) {
$tag = trim($tag);
$settings["format_{$tag}"] = array(
'element' => $tag,
'name' => strtoupper(substr($tag, 0, 1)) . substr($tag, 1),
);
}
$settings['format_tags'] = implode(';', $block_formats);
}
// Advanced Content Filter
// @see http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter
if (!isset($config['acf_mode']) || WYSIWYG_CKEDITOR_ACF_DISABLED == $config['acf_mode']) {
$settings['allowedContent'] = TRUE;
}
else {
if (_wysiwyg_ckeditor_settings_acf_is_obj($config['acf_allowed_content'])) {
$acf_content = json_decode($config['acf_allowed_content']);
}
else {
$acf_content = $config['acf_allowed_content'];
}
if (WYSIWYG_CKEDITOR_ACF_CUSTOM == $config['acf_mode']) {
$settings['allowedContent'] = $acf_content;
}
elseif (WYSIWYG_CKEDITOR_ACF_AUTOMATIC == $config['acf_mode']) {
$settings['extraAllowedContent'] = $acf_content;
}
}
if (isset($config['css_setting'])) {
// Versions below 3.0.1 could only handle one stylesheet.
if (version_compare($editor['installed version'], '3.0.1.4391', '<')) {
if ($config['css_setting'] == 'theme') {
$css = wysiwyg_get_css(isset($config['css_theme']) ? $config['css_theme'] : '');
$settings['contentsCss'] = reset($css);
}
elseif ($config['css_setting'] == 'self' && isset($config['css_path'])) {
$settings['contentsCss'] = strtr($config['css_path'], array(
'%b' => base_path(),
'%t' => drupal_get_path('theme', variable_get('theme_default', NULL)),
'%q' => variable_get('css_js_query_string', ''),
));
}
}
else {
if ($config['css_setting'] == 'theme') {
$settings['contentsCss'] = wysiwyg_get_css(isset($config['css_theme']) ? $config['css_theme'] : '');
}
elseif ($config['css_setting'] == 'self' && isset($config['css_path'])) {
$settings['contentsCss'] = explode(',', strtr($config['css_path'], array(
'%b' => base_path(),
'%t' => drupal_get_path('theme', variable_get('theme_default', NULL)),
'%q' => variable_get('css_js_query_string', ''),
)));
}
}
}
// Parse and define the styles set for the Styles plugin (3.2.1+).
// @todo This should be a plugin setting, but Wysiwyg does not support
// plugin-specific settings yet.
if (!empty($config['buttons']['default']['Styles']) && version_compare($editor['installed version'], '3.2.1', '>=') && !empty($config['stylesSet'])) {
if ($styles = wysiwyg_ckeditor_settings_parse_styles($config['stylesSet'])) {
$settings['stylesSet'] = $styles;
}
}
$check_if_set = array(
'forcePasteAsPlainText',
'language',
'pasteFromWordNumberedHeadingToList',
'pasteFromWordPromptCleanup',
'pasteFromWordRemoveFontStyles',
'pasteFromWordRemoveStyles',
'simple_source_formatting',
'toolbarLocation',
);
foreach ($check_if_set as $setting_name) {
if (isset($config[$setting_name])) {
$settings[$setting_name] = $config[$setting_name];
}
}
if (isset($config['resize_enabled'])) {
// CKEditor performs a type-agnostic comparison on this particular setting.
$settings['resize_enabled'] = (bool) $config['resize_enabled'];
}
$settings['toolbar'] = array();
$supports_groups = version_compare($editor['installed version'], '3.6.0', '>=');
$use_default_groups = $supports_groups && !empty($config['default_toolbar_grouping']);
if (!empty($config['buttons'])) {
$extra_plugins = array();
$plugins = wysiwyg_get_plugins($editor['name']);
foreach ($config['buttons'] as $plugin => $buttons) {
foreach ($buttons as $button => $enabled) {
// Iterate separately over buttons and extensions properties.
foreach (array(
'buttons',
'extensions',
) as $type) {
// Skip unavailable plugins.
if (!isset($plugins[$plugin][$type][$button])) {
continue;
}
// Add buttons.
if ($type == 'buttons') {
if ($use_default_groups) {
$settings['toolbar'][_wysiwyg_ckeditor_group($button)][] = $button;
}
else {
// Use one button row for backwards compatibility.
$settings['toolbar'][] = $button;
}
}
// Add external Drupal plugins to the list of extensions.
if ($type == 'buttons' && !empty($plugins[$plugin]['proxy'])) {
$extra_plugins[] = $button;
}
elseif ($type == 'buttons' && empty($plugins[$plugin]['internal'])) {
$extra_plugins[] = $plugin;
}
elseif ($type == 'buttons' && !empty($plugins[$plugin]['load'])) {
$extra_plugins[] = $plugin;
}
elseif ($type == 'extensions' && !empty($plugins[$plugin]['load'])) {
$extra_plugins[] = $plugin;
}
// Allow plugins to add or override global configuration settings.
if (!empty($plugins[$plugin]['options'])) {
$settings = array_merge($settings, $plugins[$plugin]['options']);
}
}
}
}
if (!empty($extra_plugins)) {
$settings['extraPlugins'] = implode(',', $extra_plugins);
}
}
if ($use_default_groups) {
// Organize groups to use lables to improves accessibility.
// http://docs.ckeditor.com/#!/guide/dev_toolbar-section-3.
$groups_toolbar = array();
foreach ($settings['toolbar'] as $group => $items) {
$groups_toolbar[] = array(
'name' => $group,
'items' => $items,
);
$settings['toolbar'] = $groups_toolbar;
}
}
else {
// For now, all buttons are placed into one row.
$settings['toolbar'] = array(
$settings['toolbar'],
);
}
return $settings;
}