annotate sites/all/modules/quicktabs/quicktabs.classes.inc @ 11:b0ee71395280

deleted .DS_Store files
author danieleb <danielebarchiesi@me.com>
date Mon, 28 Oct 2013 16:12:13 +0000
parents b74b41bb73f0
children 134d4b2e75f6
rev   line source
danielebarchiesi@2 1 <?php
danielebarchiesi@2 2
danielebarchiesi@2 3 /**
danielebarchiesi@2 4 * A QuickSet object is an unrendered Quicktabs instance, essentially just a
danielebarchiesi@2 5 * container of content items, as defined by its configuration settings and the
danielebarchiesi@2 6 * array of content items it contains.
danielebarchiesi@2 7 */
danielebarchiesi@2 8 class QuickSet {
danielebarchiesi@2 9
danielebarchiesi@2 10 /**
danielebarchiesi@2 11 * The unique name of the QuickSet object.
danielebarchiesi@2 12 * This corresponds to the machine name as stored in the database or as defined
danielebarchiesi@2 13 * in code.
danielebarchiesi@2 14 * @var string
danielebarchiesi@2 15 */
danielebarchiesi@2 16 protected $name;
danielebarchiesi@2 17
danielebarchiesi@2 18 /**
danielebarchiesi@2 19 * The contents array.
danielebarchiesi@2 20 * An array of objects that implement the QuickContentRenderable interface.
danielebarchiesi@2 21 * @var array
danielebarchiesi@2 22 */
danielebarchiesi@2 23 protected $contents;
danielebarchiesi@2 24
danielebarchiesi@2 25 /**
danielebarchiesi@2 26 * An array of settings controlling the behaviour of the QuickSet object. See
danielebarchiesi@2 27 * the getDefaultSettings() static function of this class for the full list of
danielebarchiesi@2 28 * settings.
danielebarchiesi@2 29 * @var array
danielebarchiesi@2 30 */
danielebarchiesi@2 31 protected $settings;
danielebarchiesi@2 32
danielebarchiesi@2 33
danielebarchiesi@2 34 /**
danielebarchiesi@2 35 * Accessors.
danielebarchiesi@2 36 */
danielebarchiesi@2 37
danielebarchiesi@2 38 public function getName() {
danielebarchiesi@2 39 return $this->name;
danielebarchiesi@2 40 }
danielebarchiesi@2 41
danielebarchiesi@2 42 public function getContents() {
danielebarchiesi@2 43 return $this->contents;
danielebarchiesi@2 44 }
danielebarchiesi@2 45
danielebarchiesi@2 46 public function getSettings() {
danielebarchiesi@2 47 return $this->settings;
danielebarchiesi@2 48 }
danielebarchiesi@2 49
danielebarchiesi@2 50 public function getTitle() {
danielebarchiesi@2 51 return isset($this->settings['title']) ? $this->translateString($this->settings['title'], 'title') : $this->name;
danielebarchiesi@2 52 }
danielebarchiesi@2 53
danielebarchiesi@2 54 /**
danielebarchiesi@2 55 * Instantiate, populate and return a QuickSet object wrapped in a renderer.
danielebarchiesi@2 56 *
danielebarchiesi@2 57 * @param $name
danielebarchiesi@2 58 * The unique name (machine name) of the QuickSet instance.
danielebarchiesi@2 59 *
danielebarchiesi@2 60 * @param $contents
danielebarchiesi@2 61 * The array of content items, each one itself an array with at least a 'type'
danielebarchiesi@2 62 * key, a 'title' key, and the other info necessary for that type.
danielebarchiesi@2 63 *
danielebarchiesi@2 64 * @param $renderer
danielebarchiesi@2 65 * The plugin key for this renderer plugin
danielebarchiesi@2 66 *
danielebarchiesi@2 67 * @param $settings
danielebarchiesi@2 68 * An array of settings determining the behaviour of this QuickSet instance.
danielebarchiesi@2 69 *
danielebarchiesi@2 70 */
danielebarchiesi@2 71 public static function QuickSetRendererFactory($name, $contents, $renderer, $settings) {
danielebarchiesi@2 72 ctools_include('plugins');
danielebarchiesi@2 73 if ($class = ctools_plugin_load_class('quicktabs', 'renderers', $renderer, 'handler')) {
danielebarchiesi@2 74 try {
danielebarchiesi@2 75 $qs = new self($name, $contents, $settings);
danielebarchiesi@2 76 }
danielebarchiesi@2 77 catch (InvalidQuickSetException $e) {
danielebarchiesi@2 78 watchdog('Quicktabs', $e->getMessage());
danielebarchiesi@2 79 return NULL;
danielebarchiesi@2 80 }
danielebarchiesi@2 81 return new $class($qs);
danielebarchiesi@2 82 }
danielebarchiesi@2 83 }
danielebarchiesi@2 84
danielebarchiesi@2 85 /**
danielebarchiesi@2 86 * Returns a reference to an object that implements the QuickContentRenderable
danielebarchiesi@2 87 * interface.
danielebarchiesi@2 88 */
danielebarchiesi@2 89 public static function getContentRenderer($tab) {
danielebarchiesi@2 90 if ($tab['type'] == 'prerendered') {
danielebarchiesi@2 91 return new QuickPreRenderedContent($tab);
danielebarchiesi@2 92 }
danielebarchiesi@2 93 if ($content = QuickContent::factory($tab['type'], $tab)) {
danielebarchiesi@2 94 return $content;
danielebarchiesi@2 95 }
danielebarchiesi@2 96 return NULL;
danielebarchiesi@2 97 }
danielebarchiesi@2 98
danielebarchiesi@2 99 /**
danielebarchiesi@2 100 * Static method to retrieve content from an ajax call. This is called by the
danielebarchiesi@2 101 * quicktabs_ajax() callback in quicktabs.module.
danielebarchiesi@2 102 */
danielebarchiesi@2 103 public static function ajaxRenderContent($type, $args) {
danielebarchiesi@2 104 if ($renderer = self::getContentRenderer(array('type' => $type))) {
danielebarchiesi@2 105 $output = $renderer->render(FALSE, $args);
danielebarchiesi@2 106 return !empty($output) ? drupal_render($output) : '';
danielebarchiesi@2 107 }
danielebarchiesi@2 108 return '';
danielebarchiesi@2 109 }
danielebarchiesi@2 110
danielebarchiesi@2 111 /**
danielebarchiesi@2 112 * Ensure sensible default settings for each QuickSet object.
danielebarchiesi@2 113 */
danielebarchiesi@2 114 private static function getDefaultSettings() {
danielebarchiesi@2 115 return array(
danielebarchiesi@2 116 'title' => '<none>',
danielebarchiesi@2 117 'style' => 'nostyle',
danielebarchiesi@2 118 'hide_empty_tabs' => 0,
danielebarchiesi@2 119 'ajax' => 0,
danielebarchiesi@2 120 'default_tab' => 0,
danielebarchiesi@2 121 'options' => array(),
danielebarchiesi@2 122 );
danielebarchiesi@2 123 }
danielebarchiesi@2 124
danielebarchiesi@2 125 /**
danielebarchiesi@2 126 * Constructor
danielebarchiesi@2 127 */
danielebarchiesi@2 128 public function __construct($name, $contents, $settings) {
danielebarchiesi@2 129 $this->name = $name;
danielebarchiesi@2 130 $this->contents = array();
danielebarchiesi@2 131 foreach ($contents as $key => $item) {
danielebarchiesi@2 132 // Instantiate a content renderer object and add it to the contents array.
danielebarchiesi@2 133 if ($renderer = self::getContentRenderer($item)) {
danielebarchiesi@2 134 $this->contents[$key] = $renderer;
danielebarchiesi@2 135 }
danielebarchiesi@2 136 }
danielebarchiesi@2 137 $default_settings = self::getDefaultSettings();
danielebarchiesi@2 138 $this->settings = array_merge($default_settings, $settings);
danielebarchiesi@2 139
danielebarchiesi@2 140 $this->prepareContents();
danielebarchiesi@2 141 // Set the default style if necessary.
danielebarchiesi@2 142 if ($this->settings['style'] == 'default') {
danielebarchiesi@2 143 $this->settings['style'] = variable_get('quicktabs_tabstyle', 'nostyle');
danielebarchiesi@2 144 }
danielebarchiesi@2 145 }
danielebarchiesi@2 146
danielebarchiesi@2 147 /**
danielebarchiesi@2 148 * Returns an ajax path to be used on ajax-enabled tab links.
danielebarchiesi@2 149 *
danielebarchiesi@2 150 * @param $index The index of the tab, i.e where it fits into the QuickSet
danielebarchiesi@2 151 * instance.
danielebarchiesi@2 152 *
danielebarchiesi@2 153 * @param $type The type of content we are providing an ajax path for.
danielebarchiesi@2 154 */
danielebarchiesi@2 155 public function getAjaxPath($index, $type) {
danielebarchiesi@2 156 return 'quicktabs/ajax/'. $this->name .'/'. $index . '/'. $type;
danielebarchiesi@2 157 }
danielebarchiesi@2 158
danielebarchiesi@2 159 /**
danielebarchiesi@2 160 * Translates Quicktabs user-defined strings if the i18n module is
danielebarchiesi@2 161 * enabled.
danielebarchiesi@2 162 */
danielebarchiesi@2 163 public function translateString($string, $type = 'tab', $index = 0) {
danielebarchiesi@2 164 switch ($type) {
danielebarchiesi@2 165 case 'tab':
danielebarchiesi@2 166 $name = "tab:{$this->name}-{$index}:title";
danielebarchiesi@2 167 break;
danielebarchiesi@2 168 case 'title':
danielebarchiesi@2 169 $name = "title:{$this->name}";
danielebarchiesi@2 170 break;
danielebarchiesi@2 171 }
danielebarchiesi@2 172 return quicktabs_translate($name, $string);
danielebarchiesi@2 173 }
danielebarchiesi@2 174
danielebarchiesi@2 175 /**
danielebarchiesi@2 176 * This method does some initial set-up of the tab contents, such as hiding
danielebarchiesi@2 177 * tabs with no content if the hide_empty_tabs option is set. It also makes sure
danielebarchiesi@2 178 * that prerendered contents are never attempted to be loaded via ajax.
danielebarchiesi@2 179 *
danielebarchiesi@2 180 * @throws InvalidQuickSetException if there are no contents to render.
danielebarchiesi@2 181 */
danielebarchiesi@2 182 protected function prepareContents() {
danielebarchiesi@2 183 if (!count($this->contents)) {
danielebarchiesi@2 184 throw new InvalidQuickSetException('There are no contents to render.');
danielebarchiesi@2 185 }
danielebarchiesi@2 186 if ($this->settings['hide_empty_tabs'] && !$this->settings['ajax']) {
danielebarchiesi@2 187 // Check if any tabs need to be hidden because of empty content.
danielebarchiesi@2 188 $renderable_contents = 0;
danielebarchiesi@2 189 foreach ($this->contents as $key => $tab) {
danielebarchiesi@2 190 $contents = $tab->render(TRUE);
danielebarchiesi@2 191 if (empty($contents)) {
danielebarchiesi@2 192 // Rather than removing the item, we set it to NULL. This way we retain
danielebarchiesi@2 193 // the same indices across tabs, so that permanent links to particular
danielebarchiesi@2 194 // tabs can be relied upon.
danielebarchiesi@2 195 $this->contents[$key] = NULL;
danielebarchiesi@2 196 // The default tab must not be a hidden tab.
danielebarchiesi@2 197 if ($this->settings['default_tab'] == $key) {
danielebarchiesi@2 198 $this->settings['default_tab'] = ($key + 1) % count($this->contents);
danielebarchiesi@2 199 }
danielebarchiesi@2 200 }
danielebarchiesi@2 201 else {
danielebarchiesi@2 202 $renderable_contents++;
danielebarchiesi@2 203 }
danielebarchiesi@2 204 }
danielebarchiesi@2 205 if (!$renderable_contents) {
danielebarchiesi@2 206 throw new InvalidQuickSetException('There are no contents to render.');
danielebarchiesi@2 207 }
danielebarchiesi@2 208 }
danielebarchiesi@2 209 elseif ($this->settings['ajax']) {
danielebarchiesi@2 210 // Make sure that there is at most 1 prerendered tab and it is the default tab.
danielebarchiesi@2 211 // Prerendered content cannot be rendered via ajax.
danielebarchiesi@2 212 $has_prerendered = FALSE; // keep track of whether we have found a prerendered tab.
danielebarchiesi@2 213 foreach ($this->contents as $key => $tab) {
danielebarchiesi@2 214 $type = $tab->getType();
danielebarchiesi@2 215 if ($type == 'prerendered') {
danielebarchiesi@2 216 if (!$has_prerendered) {
danielebarchiesi@2 217 $has_prerendered = TRUE;
danielebarchiesi@2 218 $this->settings['default_tab'] = $key;
danielebarchiesi@2 219 // In the case of a direct link to a different tab, the 'default_tab'
danielebarchiesi@2 220 // will be overridden, so we need to make sure it does not attempt
danielebarchiesi@2 221 // to load a pre-rendered tab via ajax. Turn ajax option off.
danielebarchiesi@2 222 if ($this->getActiveTab() !== $key) {
danielebarchiesi@2 223 $this->settings['ajax'] = 0;
danielebarchiesi@2 224 }
danielebarchiesi@2 225 }
danielebarchiesi@2 226 else {
danielebarchiesi@2 227 // We are on a second custom tab and the ajax option is set, we cannot
danielebarchiesi@2 228 // render custom tabs via ajax, so we skip out of the loop, set the
danielebarchiesi@2 229 // ajax option to off, and call the method again.
danielebarchiesi@2 230 $this->settings['ajax'] = 0;
danielebarchiesi@2 231 $this->prepareContents();
danielebarchiesi@2 232 return;
danielebarchiesi@2 233 }
danielebarchiesi@2 234 }
danielebarchiesi@2 235 }
danielebarchiesi@2 236 }
danielebarchiesi@2 237 }
danielebarchiesi@2 238
danielebarchiesi@2 239 /**
danielebarchiesi@2 240 * Returns the active tab for a given Quicktabs instance. This could be coming
danielebarchiesi@2 241 * from the URL or just from the settings for this instance. If neither, it
danielebarchiesi@2 242 * defaults to 0.
danielebarchiesi@2 243 */
danielebarchiesi@2 244 public function getActiveTab() {
danielebarchiesi@2 245 $active_tab = isset($this->settings['default_tab']) ? $this->settings['default_tab'] : key($this->contents);
danielebarchiesi@2 246 $active_tab = isset($_GET['qt-' . $this->name]) ? $_GET['qt-' . $this->name] : $active_tab;
danielebarchiesi@2 247 $active_tab = (isset($active_tab) && isset($this->contents[$active_tab])) ? $active_tab : 0;
danielebarchiesi@2 248 return $active_tab;
danielebarchiesi@2 249 }
danielebarchiesi@2 250 }
danielebarchiesi@2 251
danielebarchiesi@2 252 /**
danielebarchiesi@2 253 * Abstract base class for QuickSet Renderers.
danielebarchiesi@2 254 *
danielebarchiesi@2 255 * A renderer object contains a reference to a QuickSet object, which it can
danielebarchiesi@2 256 * then render.
danielebarchiesi@2 257 */
danielebarchiesi@2 258 abstract class QuickRenderer {
danielebarchiesi@2 259
danielebarchiesi@2 260 /**
danielebarchiesi@2 261 * @var QuickSet
danielebarchiesi@2 262 */
danielebarchiesi@2 263 protected $quickset;
danielebarchiesi@2 264
danielebarchiesi@2 265 /**
danielebarchiesi@2 266 * Constructor
danielebarchiesi@2 267 */
danielebarchiesi@2 268 public function __construct($quickset) {
danielebarchiesi@2 269 $this->quickset = $quickset;
danielebarchiesi@2 270 }
danielebarchiesi@2 271
danielebarchiesi@2 272 /**
danielebarchiesi@2 273 * Accessor method for the title.
danielebarchiesi@2 274 */
danielebarchiesi@2 275 public function getTitle() {
danielebarchiesi@2 276 return $this->quickset->getTitle();
danielebarchiesi@2 277 }
danielebarchiesi@2 278
danielebarchiesi@2 279 /**
danielebarchiesi@2 280 * The only method that renderer plugins must implement.
danielebarchiesi@2 281 *
danielebarchiesi@2 282 * @return A render array to be passed to drupal_render().
danielebarchiesi@2 283 */
danielebarchiesi@2 284 abstract public function render();
danielebarchiesi@2 285
danielebarchiesi@2 286
danielebarchiesi@2 287 /**
danielebarchiesi@2 288 * Method for returning the form elements to display for this renderer type on
danielebarchiesi@2 289 * the admin form.
danielebarchiesi@2 290
danielebarchiesi@2 291 * @param $qt An object representing the Quicktabs instance that the tabs are
danielebarchiesi@2 292 * being built for.
danielebarchiesi@2 293 */
danielebarchiesi@2 294 public static function optionsForm($qt) {
danielebarchiesi@2 295 return array();
danielebarchiesi@2 296 }
danielebarchiesi@2 297
danielebarchiesi@2 298 }
danielebarchiesi@2 299
danielebarchiesi@2 300 /*******************************************************
danielebarchiesi@2 301 * The classes below relate to individual tab content *
danielebarchiesi@2 302 *******************************************************/
danielebarchiesi@2 303
danielebarchiesi@2 304 /**
danielebarchiesi@2 305 * Each QuickSet object has a "contents" property which is an array of objects
danielebarchiesi@2 306 * that implement the QuickContentRenderable interface.
danielebarchiesi@2 307 */
danielebarchiesi@2 308 interface QuickContentRenderable {
danielebarchiesi@2 309
danielebarchiesi@2 310 /**
danielebarchiesi@2 311 * Returns the short type name of the content plugin, e.g. 'block', 'node',
danielebarchiesi@2 312 * 'prerendered'.
danielebarchiesi@2 313 */
danielebarchiesi@2 314 public static function getType();
danielebarchiesi@2 315
danielebarchiesi@2 316 /**
danielebarchiesi@2 317 * Returns the tab title.
danielebarchiesi@2 318 */
danielebarchiesi@2 319 public function getTitle();
danielebarchiesi@2 320
danielebarchiesi@2 321 /**
danielebarchiesi@2 322 * Returns an array of settings specific to the type of content.
danielebarchiesi@2 323 */
danielebarchiesi@2 324 public function getSettings();
danielebarchiesi@2 325
danielebarchiesi@2 326 /**
danielebarchiesi@2 327 * Renders the content.
danielebarchiesi@2 328 *
danielebarchiesi@2 329 * @param $hide_emtpy If set to true, then the renderer should return an empty
danielebarchiesi@2 330 * array if there is no content to display, for example if the user does not
danielebarchiesi@2 331 * have access to the requested content.
danielebarchiesi@2 332 *
danielebarchiesi@2 333 * @param $args Used during an ajax call to pass in the settings necessary to
danielebarchiesi@2 334 * render this type of content.
danielebarchiesi@2 335 */
danielebarchiesi@2 336 public function render($hide_empty = FALSE, $args = array());
danielebarchiesi@2 337
danielebarchiesi@2 338 /**
danielebarchiesi@2 339 * Returns an array of keys to use for constructing the correct arguments for
danielebarchiesi@2 340 * an ajax callback to retrieve content of this type. The order of the keys
danielebarchiesi@2 341 * returned affects the order of the args passed in to the render method when
danielebarchiesi@2 342 * called via ajax (see the render() method above).
danielebarchiesi@2 343 */
danielebarchiesi@2 344 public function getAjaxKeys();
danielebarchiesi@2 345
danielebarchiesi@2 346 }
danielebarchiesi@2 347
danielebarchiesi@2 348 /**
danielebarchiesi@2 349 * Abstract base class for content plugins.
danielebarchiesi@2 350 */
danielebarchiesi@2 351 abstract class QuickContent implements QuickContentRenderable {
danielebarchiesi@2 352
danielebarchiesi@2 353 /**
danielebarchiesi@2 354 * Used as the title of the tab.
danielebarchiesi@2 355 * @var string
danielebarchiesi@2 356 */
danielebarchiesi@2 357 protected $title;
danielebarchiesi@2 358
danielebarchiesi@2 359 /**
danielebarchiesi@2 360 * An array containing the information that defines the tab content, specific
danielebarchiesi@2 361 * to its type.
danielebarchiesi@2 362 * @var array
danielebarchiesi@2 363 */
danielebarchiesi@2 364 protected $settings;
danielebarchiesi@2 365
danielebarchiesi@2 366 /**
danielebarchiesi@2 367 * A render array of the contents.
danielebarchiesi@2 368 * @var array
danielebarchiesi@2 369 */
danielebarchiesi@2 370 protected $rendered_content;
danielebarchiesi@2 371
danielebarchiesi@2 372
danielebarchiesi@2 373 /**
danielebarchiesi@2 374 * Constructor
danielebarchiesi@2 375 */
danielebarchiesi@2 376 public function __construct($item) {
danielebarchiesi@2 377 $this->title = isset($item['title']) ? $item['title'] : '';
danielebarchiesi@2 378 // We do not need to store title, type or weight in the settings array, which
danielebarchiesi@2 379 // is for type-specific settings.
danielebarchiesi@2 380 unset($item['title'], $item['type'], $item['weight']);
danielebarchiesi@2 381 $this->settings = $item;
danielebarchiesi@2 382 }
danielebarchiesi@2 383
danielebarchiesi@2 384
danielebarchiesi@2 385 /**
danielebarchiesi@2 386 * Accessor for the tab title.
danielebarchiesi@2 387 */
danielebarchiesi@2 388 public function getTitle() {
danielebarchiesi@2 389 return $this->title;
danielebarchiesi@2 390 }
danielebarchiesi@2 391
danielebarchiesi@2 392 /**
danielebarchiesi@2 393 * Accessor for the tab settings.
danielebarchiesi@2 394 */
danielebarchiesi@2 395 public function getSettings() {
danielebarchiesi@2 396 return $this->settings;
danielebarchiesi@2 397 }
danielebarchiesi@2 398
danielebarchiesi@2 399 /**
danielebarchiesi@2 400 * Instantiate a content type object.
danielebarchiesi@2 401 *
danielebarchiesi@2 402 * @param $name
danielebarchiesi@2 403 * The type name of the plugin.
danielebarchiesi@2 404 *
danielebarchiesi@2 405 * @param $item
danielebarchiesi@2 406 * An array containing the item definition
danielebarchiesi@2 407 *
danielebarchiesi@2 408 */
danielebarchiesi@2 409 public static function factory($name, $item) {
danielebarchiesi@2 410 ctools_include('plugins');
danielebarchiesi@2 411 if ($class = ctools_plugin_load_class('quicktabs', 'contents', $name, 'handler')) {
danielebarchiesi@2 412 // We now need to check the plugin's dependencies, to make sure they're installed.
danielebarchiesi@2 413 // This info has already been statically cached at this point so there's no
danielebarchiesi@2 414 // harm in making a call to ctools_get_plugins().
danielebarchiesi@2 415 $plugin = ctools_get_plugins('quicktabs', 'contents', $name);
danielebarchiesi@2 416 if (isset($plugin['dependencies'])) {
danielebarchiesi@2 417 foreach ($plugin['dependencies'] as $dep) {
danielebarchiesi@2 418 // If any dependency is missing we cannot instantiate our class.
danielebarchiesi@2 419 if (!module_exists($dep)) return NULL;
danielebarchiesi@2 420 }
danielebarchiesi@2 421 }
danielebarchiesi@2 422 return new $class($item);
danielebarchiesi@2 423 }
danielebarchiesi@2 424 return NULL;
danielebarchiesi@2 425 }
danielebarchiesi@2 426
danielebarchiesi@2 427 /**
danielebarchiesi@2 428 * Method for returning the form elements to display for this tab type on
danielebarchiesi@2 429 * the admin form.
danielebarchiesi@2 430 *
danielebarchiesi@2 431 * @param $delta Integer representing this tab's position in the tabs array.
danielebarchiesi@2 432 *
danielebarchiesi@2 433 * @param $qt An object representing the Quicktabs instance that the tabs are
danielebarchiesi@2 434 * being built for.
danielebarchiesi@2 435 */
danielebarchiesi@2 436 abstract public function optionsForm($delta, $qt);
danielebarchiesi@2 437
danielebarchiesi@2 438 }
danielebarchiesi@2 439
danielebarchiesi@2 440 /**
danielebarchiesi@2 441 * This class implements the same interface that content plugins do but it is not
danielebarchiesi@2 442 * a content plugin. It is a special class for pre-rendered content which is used
danielebarchiesi@2 443 * when "custom" tabs are added to existing Quicktabs instances in a call to
danielebarchiesi@2 444 * quicktabs_build_quicktabs().
danielebarchiesi@2 445 */
danielebarchiesi@2 446 class QuickPreRenderedContent implements QuickContentRenderable {
danielebarchiesi@2 447
danielebarchiesi@2 448 public static function getType() {
danielebarchiesi@2 449 return 'prerendered';
danielebarchiesi@2 450 }
danielebarchiesi@2 451
danielebarchiesi@2 452 /**
danielebarchiesi@2 453 * Used as the title of the tab.
danielebarchiesi@2 454 * @var title
danielebarchiesi@2 455 */
danielebarchiesi@2 456 protected $title;
danielebarchiesi@2 457
danielebarchiesi@2 458 /**
danielebarchiesi@2 459 * A render array of the contents.
danielebarchiesi@2 460 * @var array
danielebarchiesi@2 461 */
danielebarchiesi@2 462 protected $rendered_content;
danielebarchiesi@2 463
danielebarchiesi@2 464
danielebarchiesi@2 465 /**
danielebarchiesi@2 466 * Constructor
danielebarchiesi@2 467 */
danielebarchiesi@2 468 public function __construct($item) {
danielebarchiesi@2 469
danielebarchiesi@2 470 $contents = isset($item['contents']) ? $item['contents'] : array();
danielebarchiesi@2 471 if (!is_array($contents)) {
danielebarchiesi@2 472 $contents = array('#markup' => $contents);
danielebarchiesi@2 473 }
danielebarchiesi@2 474 $this->rendered_content = $contents;
danielebarchiesi@2 475
danielebarchiesi@2 476 $this->title = isset($item['title']) ? $item['title'] : '';
danielebarchiesi@2 477 }
danielebarchiesi@2 478
danielebarchiesi@2 479 /**
danielebarchiesi@2 480 * Accessor for the tab title.
danielebarchiesi@2 481 */
danielebarchiesi@2 482 public function getTitle() {
danielebarchiesi@2 483 return $this->title;
danielebarchiesi@2 484 }
danielebarchiesi@2 485
danielebarchiesi@2 486 /**
danielebarchiesi@2 487 * Prerendered content doesn't need any extra settings.
danielebarchiesi@2 488 */
danielebarchiesi@2 489 public function getSettings() {
danielebarchiesi@2 490 return array();
danielebarchiesi@2 491 }
danielebarchiesi@2 492
danielebarchiesi@2 493
danielebarchiesi@2 494 /**
danielebarchiesi@2 495 * The render method simply returns the contents that were passed in and
danielebarchiesi@2 496 * stored during construction.
danielebarchiesi@2 497 */
danielebarchiesi@2 498 public function render($hide_empty = FALSE, $args = array()) {
danielebarchiesi@2 499 return $this->rendered_content;
danielebarchiesi@2 500 }
danielebarchiesi@2 501
danielebarchiesi@2 502 /**
danielebarchiesi@2 503 * This content cannot be rendered via ajax so we don't return any ajax keys.
danielebarchiesi@2 504 */
danielebarchiesi@2 505 public function getAjaxKeys() {
danielebarchiesi@2 506 return array();
danielebarchiesi@2 507 }
danielebarchiesi@2 508
danielebarchiesi@2 509 }
danielebarchiesi@2 510
danielebarchiesi@2 511 /**
danielebarchiesi@2 512 * Create our own exception class.
danielebarchiesi@2 513 */
danielebarchiesi@2 514 class InvalidQuickSetException extends Exception {
danielebarchiesi@2 515
danielebarchiesi@2 516 }