Mercurial > hg > rr-repo
diff sites/all/modules/quicktabs/plugins/QuickCallbackContent.inc @ 2:b74b41bb73f0
-- Google analytics module
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 22 Aug 2013 17:22:54 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/quicktabs/plugins/QuickCallbackContent.inc Thu Aug 22 17:22:54 2013 +0100 @@ -0,0 +1,92 @@ +<?php + +/** + * Class for tab content of type "callback" - this is for rendering the contents + * of some menu callback function as tab content. + */ +class QuickCallbackContent extends QuickContent { + + public static function getType() { + return 'callback'; + } + + public function __construct($item) { + parent::__construct($item); + + if (isset($item['path'])) { + $url_args = arg(); + $path = $item['path']; + + foreach ($url_args as $id => $arg) { + $path = str_replace("%$id", $arg, $path); + } + $path = preg_replace(',/?(%\d),', '', $path); + if (!empty($path)) { + $this->settings['ajax_path'] = rawurlencode($path); + } + else { + $this->settings['ajax_path'] = ''; + } + $this->settings['actual_path'] = $path; + } + } + + public function optionsForm($delta, $qt) { + $tab = $this->settings; + $form = array(); + $form['callback']['path'] = array( + '#type' => 'textfield', + '#default_value' => isset($tab['path']) ? $tab['path'] : '', + '#title' => t('Path'), + '#element_validate' => array('quicktabs_callback_element_validate'), + ); + return $form; + } + + public function render($hide_empty = FALSE, $args = array()) { + if ($this->rendered_content) { + return $this->rendered_content; + } + $item = $this->settings; + if (!empty($args)) { + // The args have been passed in from an ajax request. + // The first element of the args array is the qt_name, which we don't need + // for this content type. + array_shift($args); + $item['actual_path'] = rawurldecode($args[0]); + $_GET['q'] = $item['actual_path']; + } + + $output = array(); + if (isset($item['actual_path'])) { + // Retain the current page title as we'll need to set it back after + // calling menu_execute_active_handler(). + $page_title = drupal_get_title(); + $response = menu_execute_active_handler($item['actual_path'], FALSE); + // Revert the page title. + drupal_set_title($page_title); + + if (!is_array($response)) { + if (is_int($response)) { + if (MENU_ACCESS_DENIED == $response && !$hide_empty) { + $output['#markup'] = theme('quicktabs_tab_access_denied', array('tab' => $item)); + } + // For any other integer response form the menu callback, we'll just + // return an empty array. + } + else { + $output = array('#markup' => $response); + } + } + else { + $output = $response; + } + } + $this->rendered_content = $output; + return $output; + } + + public function getAjaxKeys() { + return array('ajax_path'); + } +} \ No newline at end of file