function calendar_systems_profile_form in Calendar Systems 6.3
Same name and namespace in other branches
- 6 calendar_systems.admin.inc \calendar_systems_profile_form()
Form builder for Calendar systems profile form.
1 string reference to 'calendar_systems_profile_form'
- calendar_systems_menu in ./
calendar_systems.module - Implementation of hook_menu().
File
- ./
calendar_systems.admin.inc, line 11 - Integrate Calendar systems editors into Drupal.
Code
function calendar_systems_profile_form($form_state, $profile) {
// Merge in defaults.
$profile = (array) $profile;
$profile += array(
'format' => 0,
'editor' => '',
);
if (empty($profile['settings'])) {
$profile['settings'] = array();
}
$profile['settings'] += array(
'default' => TRUE,
'user_choose' => FALSE,
'show_toggle' => TRUE,
'theme' => 'advanced',
'language' => 'en',
'access' => 1,
'access_pages' => "node/*\nuser/*\ncomment/*",
'buttons' => array(),
'toolbar_loc' => 'top',
'toolbar_align' => 'left',
'path_loc' => 'bottom',
'resizing' => TRUE,
// Also available, but buggy in TinyMCE 2.x: blockquote,code,dt,dd,samp.
'block_formats' => 'p,address,pre,h2,h3,h4,h5,h6,div',
'verify_html' => TRUE,
'preformatted' => FALSE,
'convert_fonts_to_spans' => TRUE,
'remove_linebreaks' => TRUE,
'apply_source_formatting' => FALSE,
'paste_auto_cleanup_on_paste' => FALSE,
'css_setting' => 'theme',
'css_path' => NULL,
'css_classes' => NULL,
);
$profile = (object) $profile;
$formats = filter_formats();
$editor = wysiwyg_get_editor($profile->editor);
drupal_set_title(t('%editor profile for %format', array(
'%editor' => $editor['title'],
'%format' => $formats[$profile->format]->name,
)));
$form = array();
$form['format'] = array(
'#type' => 'value',
'#value' => $profile->format,
);
$form['input_format'] = array(
'#type' => 'value',
'#value' => $formats[$profile->format]->name,
);
$form['editor'] = array(
'#type' => 'value',
'#value' => $profile->editor,
);
$form['basic'] = array(
'#type' => 'fieldset',
'#title' => t('Basic setup'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['basic']['default'] = array(
'#type' => 'checkbox',
'#title' => t('Enabled by default'),
'#default_value' => $profile->settings['default'],
'#return_value' => 1,
'#description' => t('The default editor state for users having access to this profile. Users are able to override this state if the next option is enabled.'),
);
$form['basic']['user_choose'] = array(
'#type' => 'checkbox',
'#title' => t('Allow users to choose default'),
'#default_value' => $profile->settings['user_choose'],
'#return_value' => 1,
'#description' => t('If allowed, users will be able to choose their own editor default state in their user account settings.'),
);
$form['basic']['show_toggle'] = array(
'#type' => 'checkbox',
'#title' => t('Show <em>enable/disable rich text</em> toggle link'),
'#default_value' => $profile->settings['show_toggle'],
'#return_value' => 1,
'#description' => t('Whether or not to show the <em>enable/disable rich text</em> toggle link below a textarea. If disabled, the user setting or global default is used (see above).'),
);
$form['basic']['theme'] = array(
'#type' => 'hidden',
'#value' => $profile->settings['theme'],
);
$form['basic']['language'] = array(
'#type' => 'select',
'#title' => t('Language'),
'#default_value' => $profile->settings['language'],
'#options' => drupal_map_assoc(array(
'ar',
'ca',
'cs',
'cy',
'da',
'de',
'el',
'en',
'es',
'fa',
'fi',
'fr',
'fr_ca',
'he',
'hu',
'is',
'it',
'ja',
'ko',
'nb',
'nl',
'nn',
'pl',
'pt',
'pt_br',
'ru',
'ru_KOI8-R',
'ru_UTF-8',
'si',
'sk',
'sv',
'th',
'zh_cn',
'zh_tw',
'zh_tw_utf8',
)),
'#description' => t('The language to use for the editor interface. Language codes are based on the <a href="http://www.loc.gov/standards/iso639-2/englangn.html">ISO-639-2</a> format.'),
);
$form['buttons'] = array(
'#type' => 'fieldset',
'#title' => t('Buttons and plugins'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#tree' => TRUE,
'#theme' => 'calendar_systems_admin_button_table',
);
$plugins = wysiwyg_get_plugins($profile->editor);
// Generate the button list.
foreach ($plugins as $name => $meta) {
if (isset($meta['buttons']) && is_array($meta['buttons'])) {
foreach ($meta['buttons'] as $button => $title) {
$icon = '';
if (!empty($meta['path'])) {
// @todo Button icon locations are different in editors, editor versions,
// and contrib/custom plugins (like Image Assist, f.e.).
$img_src = $meta['path'] . "/images/{$name}.gif";
// Handle plugins that have more than one button.
if (!file_exists($img_src)) {
$img_src = $meta['path'] . "/images/{$button}.gif";
}
$icon = file_exists($img_src) ? '<img src="' . base_path() . $img_src . '" title="' . $button . '" style="border: 1px solid grey; vertical-align: middle;" />' : '';
}
$title = isset($meta['url']) ? l($title, $meta['url'], array(
'target' => '_blank',
)) : $title;
$title = !empty($icon) ? $icon . ' ' . $title : $title;
$form['buttons'][$name][$button] = array(
'#type' => 'checkbox',
'#title' => $title,
'#default_value' => !empty($profile->settings['buttons'][$name][$button]) ? $profile->settings['buttons'][$name][$button] : FALSE,
);
}
}
else {
if (isset($meta['extensions']) && is_array($meta['extensions'])) {
foreach ($meta['extensions'] as $extension => $title) {
$form['buttons'][$name][$extension] = array(
'#type' => 'checkbox',
'#title' => isset($meta['url']) ? l($title, $meta['url'], array(
'target' => '_blank',
)) : $title,
'#default_value' => !empty($profile->settings['buttons'][$name][$extension]) ? $profile->settings['buttons'][$name][$extension] : FALSE,
);
}
}
}
}
$form['appearance'] = array(
'#type' => 'fieldset',
'#title' => t('Editor appearance'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['appearance']['toolbar_loc'] = array(
'#type' => 'select',
'#title' => t('Toolbar location'),
'#default_value' => $profile->settings['toolbar_loc'],
'#options' => array(
'bottom' => t('Bottom'),
'top' => t('Top'),
),
'#description' => t('This option controls whether the editor toolbar is displayed above or below the editing area.'),
);
$form['appearance']['toolbar_align'] = array(
'#type' => 'select',
'#title' => t('Button alignment'),
'#default_value' => $profile->settings['toolbar_align'],
'#options' => array(
'center' => t('Center'),
'left' => t('Left'),
'right' => t('Right'),
),
'#description' => t('This option controls the alignment of icons in the editor toolbar.'),
);
$form['appearance']['path_loc'] = array(
'#type' => 'select',
'#title' => t('Path location'),
'#default_value' => $profile->settings['path_loc'],
'#options' => array(
'none' => t('Hide'),
'top' => t('Top'),
'bottom' => t('Bottom'),
),
'#description' => t('Where to display the path to HTML elements (i.e. <code>body > table > tr > td</code>).'),
);
$form['appearance']['resizing'] = array(
'#type' => 'checkbox',
'#title' => t('Enable resizing button'),
'#default_value' => $profile->settings['resizing'],
'#return_value' => 1,
'#description' => t('This option gives you the ability to enable/disable the resizing button. If enabled, the Path location toolbar must be set to "Top" or "Bottom" in order to display the resize icon.'),
);
$form['output'] = array(
'#type' => 'fieldset',
'#title' => t('Cleanup and output'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['output']['verify_html'] = array(
'#type' => 'checkbox',
'#title' => t('Verify HTML'),
'#default_value' => $profile->settings['verify_html'],
'#return_value' => 1,
'#description' => t('If enabled, potentially malicious code like <code><HEAD></code> tags will be removed from HTML contents.'),
);
$form['output']['preformatted'] = array(
'#type' => 'checkbox',
'#title' => t('Preformatted'),
'#default_value' => $profile->settings['preformatted'],
'#return_value' => 1,
'#description' => t('If enabled, the editor will insert TAB characters on tab and preserve other whitespace characters just like a PRE element in HTML does.'),
);
$form['output']['convert_fonts_to_spans'] = array(
'#type' => 'checkbox',
'#title' => t('Convert <font> tags to styles'),
'#default_value' => $profile->settings['convert_fonts_to_spans'],
'#return_value' => 1,
'#description' => t('If enabled, HTML tags declaring the font size, font family, font color and font background color will be replaced by inline CSS styles.'),
);
$form['output']['remove_linebreaks'] = array(
'#type' => 'checkbox',
'#title' => t('Remove linebreaks'),
'#default_value' => $profile->settings['remove_linebreaks'],
'#return_value' => 1,
'#description' => t('If enabled, the editor will remove most linebreaks from contents. Disabling this option could avoid conflicts with other input filters.'),
);
$form['output']['apply_source_formatting'] = array(
'#type' => 'checkbox',
'#title' => t('Apply source formatting'),
'#default_value' => $profile->settings['apply_source_formatting'],
'#return_value' => 1,
'#description' => t('If enabled, the editor will re-format the HTML source code. Disabling this option could avoid conflicts with other input filters.'),
);
$form['output']['paste_auto_cleanup_on_paste'] = array(
'#type' => 'checkbox',
'#title' => t('Force cleanup on standard paste'),
'#default_value' => $profile->settings['paste_auto_cleanup_on_paste'],
'#return_value' => 1,
'#description' => t('If enabled, the default paste function (CTRL-V or SHIFT-INS) behaves like the "paste from word" plugin function.'),
);
$form['css'] = array(
'#type' => 'fieldset',
'#title' => t('CSS'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['css']['block_formats'] = array(
'#type' => 'textfield',
'#title' => t('Block formats'),
'#default_value' => $profile->settings['block_formats'],
'#size' => 40,
'#maxlength' => 250,
'#description' => t('Comma separated list of HTML block formats. Possible values: <code>@format-list</code>.', array(
'@format-list' => 'p,h1,h2,h3,h4,h5,h6,div,blockquote,address,pre,code,dt,dd',
)),
);
$form['css']['css_setting'] = array(
'#type' => 'select',
'#title' => t('Editor CSS'),
'#default_value' => $profile->settings['css_setting'],
'#options' => array(
'theme' => t('Use theme CSS'),
'self' => t('Define CSS'),
'none' => t('Editor default CSS'),
),
'#description' => t('Defines the CSS to be used in the editor area.<br />Use theme CSS - loads stylesheets from current site theme.<br/>Define CSS - enter path for stylesheet files below.<br />Editor default CSS - uses default stylesheets from editor.'),
);
$form['css']['css_path'] = array(
'#type' => 'textfield',
'#title' => t('CSS path'),
'#default_value' => $profile->settings['css_path'],
'#size' => 40,
'#maxlength' => 255,
'#description' => t('If "Define CSS" was selected above, enter path to a CSS file or a list of CSS files separated by a comma.') . '<br />' . t('Available tokens: <code>%b</code> (base path, eg: <code>/</code>), <code>%t</code> (path to theme, eg: <code>themes/garland</code>)') . '<br />' . t('Example:') . ' css/editor.css,/themes/garland/style.css,%b%t/style.css,http://example.com/external.css',
);
$form['css']['css_classes'] = array(
'#type' => 'textarea',
'#title' => t('CSS classes'),
'#default_value' => $profile->settings['css_classes'],
'#description' => t('Optionally define CSS classes for the "Font style" dropdown list.<br />Enter one class on each line in the format: !format. Example: !example<br />If left blank, CSS classes are automatically imported from all loaded stylesheet(s).', array(
'!format' => '<code>[title]=[class]</code>',
'!example' => 'My heading=header1',
)),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
}