annotate sites/all/modules/wysiwyg/wysiwyg.dialog.inc @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Wysiwyg dialog page handling functions.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Page callback; Outputs a dialog page for a wysiwyg plugin.
danielebarchiesi@0 10 *
danielebarchiesi@0 11 * A Wysiwyg dialog is a bare minimum, simple HTML page; presented in a
danielebarchiesi@0 12 * modal/popup window, triggered via JavaScript.
danielebarchiesi@0 13 *
danielebarchiesi@0 14 * However, Drupal core does not support such a concept, at all.
danielebarchiesi@0 15 * Insanity happens on two separate layers:
danielebarchiesi@0 16 * - All HTML pages go through the default delivery callback of
danielebarchiesi@0 17 * drupal_deliver_html_page(), which calls into drupal_render_page(), which
danielebarchiesi@0 18 * in turn *unconditionally* invokes hook_page_build() implementations. Thus,
danielebarchiesi@0 19 * block_page_build() and similar implementations add the entirety of their
danielebarchiesi@0 20 * page regions and blocks to our simple dialog page.
danielebarchiesi@0 21 * Obviously, we don't want that.
danielebarchiesi@0 22 * - There is a nice default 'page' theme template implementation, which
danielebarchiesi@0 23 * performs all the heavy-lifting that is required for outputting a sane HTML
danielebarchiesi@0 24 * page through preprocess and process functions. The theme system does not
danielebarchiesi@0 25 * support to "inherit" preprocess and process hooks to alternative
danielebarchiesi@0 26 * implementations. Even a very basic HTML page requires almost all of that.
danielebarchiesi@0 27 * However, the default page template (normally overridden by a theme)
danielebarchiesi@0 28 * contains too many regions and usually also huge a header and footer.
danielebarchiesi@0 29 * Obviously, we don't want that.
danielebarchiesi@0 30 *
danielebarchiesi@0 31 * The poor workaround would be to follow the Overlay module's implementation in
danielebarchiesi@0 32 * core: override the theme, build everything, and after doing all of that,
danielebarchiesi@0 33 * strip away what isn't needed. Obviously, we don't want that.
danielebarchiesi@0 34 *
danielebarchiesi@0 35 * Instead, we bend Drupal to sane rules:
danielebarchiesi@0 36 * - This page callback returns the actual main content.
danielebarchiesi@0 37 * - wysiwyg_menu() defines a custom delivery callback that replaces
danielebarchiesi@0 38 * drupal_deliver_html_page(), just because we need to replace
danielebarchiesi@0 39 * drupal_render_page().
danielebarchiesi@0 40 * - Our replacement for drupal_render_page() builds a $page that does not use
danielebarchiesi@0 41 * #type 'page' but #type 'wysiwyg_dialog_page' instead.
danielebarchiesi@0 42 * - #type 'wysiwyg_dialog_page' is defined like #type 'page' in
danielebarchiesi@0 43 * system_element_info(), but is required, because there's no way to inherit
danielebarchiesi@0 44 * a theme definition but override the page template file to be used.
danielebarchiesi@0 45 * - As a consequence, #type 'wysiwyg_dialog_page' uses
danielebarchiesi@0 46 * #theme 'wysiwyg_dialog_page', for which we have to implement stub
danielebarchiesi@0 47 * preprocess and process callbacks in order to call into the ones for
danielebarchiesi@0 48 * #theme 'page'.
danielebarchiesi@0 49 *
danielebarchiesi@0 50 * As a result we get:
danielebarchiesi@0 51 * - A HTML response.
danielebarchiesi@0 52 * - A HTML page wrapped into html.tpl.php.
danielebarchiesi@0 53 * - A page title, title prefix/suffix, messages, help, etc.pp.
danielebarchiesi@0 54 * - A simple page without regions and blocks (neither built nor rendered).
danielebarchiesi@0 55 *
danielebarchiesi@0 56 * @see wysiwyg_menu()
danielebarchiesi@0 57 * @see wysiwyg_deliver_dialog_page
danielebarchiesi@0 58 * @see wysiwyg_render_dialog_page()
danielebarchiesi@0 59 * @see wysiwyg_element_info()
danielebarchiesi@0 60 * @see wysiwyg_theme()
danielebarchiesi@0 61 * @see template_preprocess_wysiwyg_dialog_page()
danielebarchiesi@0 62 * @see template_process_wysiwyg_dialog_page()
danielebarchiesi@0 63 *
danielebarchiesi@0 64 * @see drupal_deliver_page()
danielebarchiesi@0 65 * @see drupal_deliver_html_page()
danielebarchiesi@0 66 * @see drupal_render_page()
danielebarchiesi@0 67 * @see system_element_info()
danielebarchiesi@0 68 * @see drupal_common_theme()
danielebarchiesi@0 69 * @see template_preprocess_page()
danielebarchiesi@0 70 * @see template_process_page()
danielebarchiesi@0 71 */
danielebarchiesi@0 72 function wysiwyg_dialog($plugin, $instance) {
danielebarchiesi@0 73 $plugins = wysiwyg_get_all_plugins();
danielebarchiesi@0 74 if (!isset($plugins[$plugin])) {
danielebarchiesi@0 75 return drupal_access_denied();
danielebarchiesi@0 76 }
danielebarchiesi@0 77 $callback = $plugin . '_wysiwyg_dialog';
danielebarchiesi@0 78 if (!function_exists($callback)) {
danielebarchiesi@0 79 return drupal_not_found();
danielebarchiesi@0 80 }
danielebarchiesi@0 81
danielebarchiesi@0 82 // Suppress admin menu.
danielebarchiesi@0 83 module_invoke('admin_menu', 'suppress');
danielebarchiesi@0 84 // Add editor instance id to Drupal.settings.
danielebarchiesi@0 85 $settings = array(
danielebarchiesi@0 86 'plugin' => $plugin,
danielebarchiesi@0 87 'instance' => $instance,
danielebarchiesi@0 88 );
danielebarchiesi@0 89 drupal_add_js(array('wysiwyg' => $settings), 'setting');
danielebarchiesi@0 90
danielebarchiesi@0 91 $build = $callback($instance);
danielebarchiesi@0 92 if (!is_array($build)) {
danielebarchiesi@0 93 $build = array('#markup' => $build);
danielebarchiesi@0 94 }
danielebarchiesi@0 95 $build += array(
danielebarchiesi@0 96 '#instance' => $instance,
danielebarchiesi@0 97 '#plugin' => $plugin,
danielebarchiesi@0 98 );
danielebarchiesi@0 99 return $build;
danielebarchiesi@0 100 }
danielebarchiesi@0 101
danielebarchiesi@0 102 /**
danielebarchiesi@0 103 * @see drupal_deliver_html_page()
danielebarchiesi@0 104 */
danielebarchiesi@0 105 function wysiwyg_deliver_dialog_page($page_callback_result) {
danielebarchiesi@0 106 // Menu status constants are integers; page content is a string or array.
danielebarchiesi@0 107 if (is_int($page_callback_result)) {
danielebarchiesi@0 108 return drupal_deliver_html_page($page_callback_result);
danielebarchiesi@0 109 }
danielebarchiesi@0 110
danielebarchiesi@0 111 // Emit the correct charset HTTP header, but not if the page callback
danielebarchiesi@0 112 // result is NULL, since that likely indicates that it printed something
danielebarchiesi@0 113 // in which case, no further headers may be sent, and not if code running
danielebarchiesi@0 114 // for this page request has already set the content type header.
danielebarchiesi@0 115 if (isset($page_callback_result) && is_null(drupal_get_http_header('Content-Type'))) {
danielebarchiesi@0 116 drupal_add_http_header('Content-Type', 'text/html; charset=utf-8');
danielebarchiesi@0 117 }
danielebarchiesi@0 118
danielebarchiesi@0 119 // Send appropriate HTTP-Header for browsers and search engines.
danielebarchiesi@0 120 global $language;
danielebarchiesi@0 121 drupal_add_http_header('Content-Language', $language->language);
danielebarchiesi@0 122
danielebarchiesi@0 123 if (isset($page_callback_result)) {
danielebarchiesi@0 124 // Print anything besides a menu constant, assuming it's not NULL or
danielebarchiesi@0 125 // undefined.
danielebarchiesi@0 126 print wysiwyg_render_dialog_page($page_callback_result);
danielebarchiesi@0 127 }
danielebarchiesi@0 128
danielebarchiesi@0 129 // Perform end-of-request tasks.
danielebarchiesi@0 130 drupal_page_footer();
danielebarchiesi@0 131 }
danielebarchiesi@0 132
danielebarchiesi@0 133 /**
danielebarchiesi@0 134 * @see drupal_render_page()
danielebarchiesi@0 135 */
danielebarchiesi@0 136 function wysiwyg_render_dialog_page($page) {
danielebarchiesi@0 137 $main_content_display = &drupal_static('system_main_content_added', FALSE);
danielebarchiesi@0 138
danielebarchiesi@0 139 // Allow menu callbacks to return strings or arbitrary arrays to render.
danielebarchiesi@0 140 // If the array returned is not of #type page directly, we need to fill
danielebarchiesi@0 141 // in the page with defaults.
danielebarchiesi@0 142 if (is_string($page) || (is_array($page) && (!isset($page['#type']) || ($page['#type'] != 'page')))) {
danielebarchiesi@0 143 drupal_set_page_content($page);
danielebarchiesi@0 144 $page = element_info('wysiwyg_dialog_page');
danielebarchiesi@0 145 }
danielebarchiesi@0 146
danielebarchiesi@0 147 // Modules alter the $page as needed. Blocks are populated into regions like
danielebarchiesi@0 148 // 'sidebar_first', 'footer', etc.
danielebarchiesi@0 149 drupal_alter(array('wysiwyg_dialog_page', 'page'), $page);
danielebarchiesi@0 150
danielebarchiesi@0 151 // If no module has taken care of the main content, add it to the page now.
danielebarchiesi@0 152 // This allows the site to still be usable even if no modules that
danielebarchiesi@0 153 // control page regions (for example, the Block module) are enabled.
danielebarchiesi@0 154 if (!$main_content_display) {
danielebarchiesi@0 155 $page['content']['system_main'] = drupal_set_page_content();
danielebarchiesi@0 156 }
danielebarchiesi@0 157
danielebarchiesi@0 158 return drupal_render($page);
danielebarchiesi@0 159 }
danielebarchiesi@0 160
danielebarchiesi@0 161 /**
danielebarchiesi@0 162 * Template preprocess function for theme_wysiwyg_dialog_page().
danielebarchiesi@0 163 *
danielebarchiesi@0 164 * @see wysiwyg_dialog()
danielebarchiesi@0 165 * @see wysiwyg-dialog-page.tpl.php
danielebarchiesi@0 166 * @see template_preprocess_page()
danielebarchiesi@0 167 */
danielebarchiesi@0 168 function template_preprocess_wysiwyg_dialog_page(&$variables) {
danielebarchiesi@0 169 template_preprocess_page($variables);
danielebarchiesi@0 170 }
danielebarchiesi@0 171
danielebarchiesi@0 172
danielebarchiesi@0 173 /**
danielebarchiesi@0 174 * Template process function for theme_wysiwyg_dialog_page().
danielebarchiesi@0 175 *
danielebarchiesi@0 176 * @see wysiwyg_dialog()
danielebarchiesi@0 177 * @see wysiwyg-dialog-page.tpl.php
danielebarchiesi@0 178 * @see template_process_page()
danielebarchiesi@0 179 */
danielebarchiesi@0 180 function template_process_wysiwyg_dialog_page(&$variables) {
danielebarchiesi@0 181 template_process_page($variables);
danielebarchiesi@0 182 }
danielebarchiesi@0 183