annotate sites/all/modules/quicktabs/quicktabs.module @ 11:b0ee71395280

deleted .DS_Store files
author danieleb <danielebarchiesi@me.com>
date Mon, 28 Oct 2013 16:12:13 +0000
parents a75ead649730
children 134d4b2e75f6
rev   line source
danielebarchiesi@2 1 <?php
danielebarchiesi@2 2
danielebarchiesi@2 3 /**
danielebarchiesi@2 4 * Implements hook_help().
danielebarchiesi@2 5 */
danielebarchiesi@2 6 function quicktabs_help($path, $arg) {
danielebarchiesi@2 7 switch ($path) {
danielebarchiesi@2 8 case 'admin/help#quicktabs':
danielebarchiesi@2 9 $output = '<p>' . t('The Quicktabs module allows you to create blocks of tabbed content. Clicking on the tabs makes the corresponding content display instantly (it uses jQuery). The content for each tabbed section can be a node, view, block or another Quicktabs instance. You can create an unlimited number of Quicktabs instances, each of which will automatically have an associated block.') . '</p>';
danielebarchiesi@2 10 $output .= '<p>' . t('The <a href="@quicktabs">quicktabs page</a> displays all quicktabs currently available on your site. Create new quicktabs using the <a href="@add-quicktab">add quicktab page</a> (the block containing a new quicktab must also be enabled on the <a href="@blocks">blocks administration page</a>).', array('@quicktabs' => url('admin/structure/quicktabs'), '@add-quicktab' => url('admin/structure/quicktab/add'), '@blocks' => url('admin/structure/block'))) . '</p>';
danielebarchiesi@2 11 return $output;
danielebarchiesi@2 12 }
danielebarchiesi@2 13 if ($path == 'admin/structure/quicktabs' && module_exists('block')) {
danielebarchiesi@2 14 return '<p>' . t('Each Quicktabs instance has a corresponding block that is managed on the <a href="@blocks">blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</p>';
danielebarchiesi@2 15 }
danielebarchiesi@2 16 }
danielebarchiesi@2 17
danielebarchiesi@2 18 /**
danielebarchiesi@2 19 * Implements hook_menu().
danielebarchiesi@2 20 */
danielebarchiesi@2 21 function quicktabs_menu() {
danielebarchiesi@2 22 $items['admin/structure/quicktabs'] = array(
danielebarchiesi@2 23 'title' => 'Quicktabs',
danielebarchiesi@2 24 'description' => 'Create blocks of tabbed content.',
danielebarchiesi@2 25 'page callback' => 'quicktabs_list',
danielebarchiesi@2 26 'access callback' => 'user_access',
danielebarchiesi@2 27 'access arguments' => array('administer quicktabs'),
danielebarchiesi@2 28 'type' => MENU_NORMAL_ITEM,
danielebarchiesi@2 29 'file' => 'quicktabs.admin.inc',
danielebarchiesi@2 30 );
danielebarchiesi@2 31 $items['admin/structure/quicktabs/list'] = array(
danielebarchiesi@2 32 'title' => 'List quicktabs',
danielebarchiesi@2 33 'type' => MENU_DEFAULT_LOCAL_TASK,
danielebarchiesi@2 34 );
danielebarchiesi@2 35 $items['admin/structure/quicktabs/add'] = array(
danielebarchiesi@2 36 'title' => 'Add Quicktabs Instance',
danielebarchiesi@2 37 'page callback' => 'drupal_get_form',
danielebarchiesi@2 38 'page arguments' => array('quicktabs_form', 'add'),
danielebarchiesi@2 39 'access arguments' => array('administer quicktabs'),
danielebarchiesi@2 40 'type' => MENU_LOCAL_ACTION,
danielebarchiesi@2 41 'file' => 'quicktabs.admin.inc',
danielebarchiesi@2 42 );
danielebarchiesi@2 43 $items['admin/structure/quicktabs/manage/%quicktabs'] = array(
danielebarchiesi@2 44 'title' => 'Edit quicktab',
danielebarchiesi@2 45 'page callback' => 'drupal_get_form',
danielebarchiesi@2 46 'page arguments' => array('quicktabs_form', 'edit', 4),
danielebarchiesi@2 47 'access arguments' => array('administer quicktabs'),
danielebarchiesi@2 48 'file' => 'quicktabs.admin.inc',
danielebarchiesi@2 49 );
danielebarchiesi@2 50 $items['admin/structure/quicktabs/manage/%quicktabs/edit'] = array(
danielebarchiesi@2 51 'title' => 'Edit quicktab',
danielebarchiesi@2 52 'type' => MENU_DEFAULT_LOCAL_TASK,
danielebarchiesi@2 53 'context' => MENU_CONTEXT_INLINE,
danielebarchiesi@2 54 );
danielebarchiesi@2 55 $items['admin/structure/quicktabs/manage/%quicktabs/delete'] = array(
danielebarchiesi@2 56 'title' => 'Delete quicktab',
danielebarchiesi@2 57 'page callback' => 'drupal_get_form',
danielebarchiesi@2 58 'page arguments' => array('quicktabs_block_delete', 4),
danielebarchiesi@2 59 'access arguments' => array('administer quicktabs'),
danielebarchiesi@2 60 'type' => MENU_LOCAL_TASK,
danielebarchiesi@2 61 'file' => 'quicktabs.admin.inc',
danielebarchiesi@2 62 );
danielebarchiesi@2 63 $items['admin/structure/quicktabs/manage/%quicktabs/clone'] = array(
danielebarchiesi@2 64 'title' => 'Clone quicktab',
danielebarchiesi@2 65 'page callback' => 'quicktabs_clone',
danielebarchiesi@2 66 'page arguments' => array(4),
danielebarchiesi@2 67 'access arguments' => array('administer quicktabs'),
danielebarchiesi@2 68 'type' => MENU_LOCAL_TASK,
danielebarchiesi@2 69 'file' => 'quicktabs.admin.inc',
danielebarchiesi@2 70 );
danielebarchiesi@2 71 $items['admin/structure/quicktabs/manage/%quicktabs/export'] = array(
danielebarchiesi@2 72 'title' => 'Export',
danielebarchiesi@2 73 'page callback' => 'drupal_get_form',
danielebarchiesi@2 74 'page arguments' => array('quicktabs_export_form', 4),
danielebarchiesi@2 75 'access arguments' => array('administer quicktabs'),
danielebarchiesi@2 76 'type' => MENU_LOCAL_TASK,
danielebarchiesi@2 77 'file' => 'quicktabs.admin.inc',
danielebarchiesi@2 78 );
danielebarchiesi@2 79 $items['quicktabs/ajax'] = array(
danielebarchiesi@2 80 'page callback' => 'quicktabs_ajax',
danielebarchiesi@2 81 'access callback' => 'user_access',
danielebarchiesi@2 82 'access arguments' => array('access content'),
danielebarchiesi@2 83 'type' => MENU_CALLBACK,
danielebarchiesi@2 84 );
danielebarchiesi@2 85 return $items;
danielebarchiesi@2 86 }
danielebarchiesi@2 87
danielebarchiesi@2 88
danielebarchiesi@2 89 /**
danielebarchiesi@2 90 * Implements hook_permission().
danielebarchiesi@2 91 */
danielebarchiesi@2 92 function quicktabs_permission() {
danielebarchiesi@2 93 return array(
danielebarchiesi@2 94 'administer quicktabs' => array(
danielebarchiesi@2 95 'title' => t('Administer Quicktabs'),
danielebarchiesi@2 96 ),
danielebarchiesi@2 97 );
danielebarchiesi@2 98 }
danielebarchiesi@2 99
danielebarchiesi@2 100 /**
danielebarchiesi@2 101 * Implements hook_theme().
danielebarchiesi@2 102 */
danielebarchiesi@2 103 function quicktabs_theme() {
danielebarchiesi@2 104 return array(
danielebarchiesi@2 105 'quicktabs_admin_form_tabs' => array(
danielebarchiesi@2 106 'render element' => 'tabs',
danielebarchiesi@2 107 'file' => 'quicktabs.admin.inc',
danielebarchiesi@2 108 ),
danielebarchiesi@2 109 'qt_ui_tabs' => array(
danielebarchiesi@2 110 'render element' => 'element',
danielebarchiesi@2 111 ),
danielebarchiesi@2 112 'qt_ui_tabs_tabset' => array(
danielebarchiesi@2 113 'render element' => 'tabset',
danielebarchiesi@2 114 ),
danielebarchiesi@2 115 'qt_quicktabs' => array(
danielebarchiesi@2 116 'render element' => 'element',
danielebarchiesi@2 117 ),
danielebarchiesi@2 118 'qt_quicktabs_tabset' => array(
danielebarchiesi@2 119 'render element' => 'tabset',
danielebarchiesi@2 120 ),
danielebarchiesi@2 121 'qt_accordion' => array(
danielebarchiesi@2 122 'render element' => 'element',
danielebarchiesi@2 123 ),
danielebarchiesi@2 124 'quicktabs_tab_access_denied' => array(
danielebarchiesi@2 125 'variables' => array('tab'),
danielebarchiesi@2 126 ),
danielebarchiesi@2 127 );
danielebarchiesi@2 128 }
danielebarchiesi@2 129
danielebarchiesi@2 130 /**
danielebarchiesi@2 131 * Implements hook_block_info().
danielebarchiesi@2 132 */
danielebarchiesi@2 133 function quicktabs_block_info() {
danielebarchiesi@2 134 $blocks = array();
danielebarchiesi@2 135 foreach (quicktabs_load_multiple() as $qt_name => $quicktabs) {
danielebarchiesi@2 136 $blocks[$qt_name]['info'] = $quicktabs->title;
danielebarchiesi@2 137 }
danielebarchiesi@2 138 return $blocks;
danielebarchiesi@2 139 }
danielebarchiesi@2 140
danielebarchiesi@2 141 /**
danielebarchiesi@2 142 * Implements hook_block_view().
danielebarchiesi@2 143 */
danielebarchiesi@2 144 function quicktabs_block_view($delta = '') {
danielebarchiesi@2 145 $block = array();
danielebarchiesi@2 146 if ($qt = quicktabs_build_quicktabs($delta)) {
danielebarchiesi@2 147 if (isset($qt['content']) && !empty($qt['content'])) {
danielebarchiesi@2 148 $block['content'] = $qt['content'];
danielebarchiesi@2 149 $block['content']['#contextual_links']['quicktabs'] = array('admin/structure/quicktabs/manage', array($delta));
danielebarchiesi@2 150 $block['subject'] = check_plain($qt['#title']);
danielebarchiesi@2 151 }
danielebarchiesi@2 152 }
danielebarchiesi@2 153 return $block;
danielebarchiesi@2 154 }
danielebarchiesi@2 155
danielebarchiesi@2 156 /**
danielebarchiesi@2 157 * Constructs a Quicktabs instance.
danielebarchiesi@2 158 *
danielebarchiesi@2 159 * This function can be called by other modules to programmatically build a
danielebarchiesi@2 160 * quicktabs instance.
danielebarchiesi@2 161 *
danielebarchiesi@2 162 * @param name. The machine name of the Quicktabs instance to build - if a name
danielebarchiesi@2 163 * is passed that does not correspond to an existing instance, then it is taken
danielebarchiesi@2 164 * to be a completely custom instance and is built from only the custom tabs
danielebarchiesi@2 165 * that are passed in.
danielebarchiesi@2 166 *
danielebarchiesi@2 167 * @param settings. An array of settings that will override the options of the Quicktabs
danielebarchiesi@2 168 * instance from the database, or if no existing instance is being used, these
danielebarchiesi@2 169 * will override the default settings. Possible keys are 'style', 'hide_empty_tabs',
danielebarchiesi@2 170 * ajax', 'default_tab', 'renderer', 'title' and 'options'.
danielebarchiesi@2 171 *
danielebarchiesi@2 172 * @param custom_tabs. An array representing custom tab contents, which will be
danielebarchiesi@2 173 * appended to the Quicktabs instance from the database, or if no existing instance
danielebarchiesi@2 174 * is being used, the custom tabs will be the entire contents. An example custom_tabs
danielebarchiesi@2 175 * array would be array(array('title' => 'custom', 'contents' => array('#markup' =>
danielebarchiesi@2 176 * t('Some markup'), 'weight' => 5));
danielebarchiesi@2 177 *
danielebarchiesi@2 178 * @return A render array that can be used as block content in hook_block_view
danielebarchiesi@2 179 * (see quicktabs_block_view()), but can also just be added to the page array
danielebarchiesi@2 180 * during hook_page_alter, or output anywhere else where it's sure to get
danielebarchiesi@2 181 * passed through drupal_render().
danielebarchiesi@2 182 */
danielebarchiesi@2 183 function quicktabs_build_quicktabs($name, $settings = array(), $custom_tabs = array()) {
danielebarchiesi@2 184 if ($info = quicktabs_load($name)) {
danielebarchiesi@2 185 // Allow other modules to alter the Quicktabs instance before it gets output.
danielebarchiesi@2 186 drupal_alter('quicktabs', $info);
danielebarchiesi@2 187 $info = (array) $info;
danielebarchiesi@2 188 $settings = array_merge($info, $settings);
danielebarchiesi@2 189 $contents = $settings['tabs'];
danielebarchiesi@2 190 unset($settings['tabs'], $settings['machine_name']);
danielebarchiesi@2 191 }
danielebarchiesi@2 192 elseif (!empty($custom_tabs)) {
danielebarchiesi@2 193 // We'll be creating a custom Quicktabs instance. Make sure we're using an
danielebarchiesi@2 194 // alphanumeric name.
danielebarchiesi@2 195 $name = preg_replace('/[^[a-zA-Z]_]/', '_', $name);
danielebarchiesi@2 196 $contents = array();
danielebarchiesi@2 197 }
danielebarchiesi@2 198 else {
danielebarchiesi@2 199 // If $name doesn't correspond to an existing Quicktabs instance, and there
danielebarchiesi@2 200 // are no custom tabs to render, then we have nothing to do.
danielebarchiesi@2 201 return array();
danielebarchiesi@2 202 }
danielebarchiesi@2 203 $renderer = isset($settings['renderer']) ? $settings['renderer'] : 'quicktabs';
danielebarchiesi@2 204 unset($settings['renderer']);
danielebarchiesi@2 205 foreach ($custom_tabs as &$tab) {
danielebarchiesi@2 206 $tab += array(
danielebarchiesi@2 207 'type' => 'prerendered',
danielebarchiesi@2 208 'weight' => 0,
danielebarchiesi@2 209 );
danielebarchiesi@2 210 }
danielebarchiesi@2 211 $contents = array_merge($custom_tabs, $contents);
danielebarchiesi@2 212 $weight = array();
danielebarchiesi@2 213 foreach ($contents as $key => $item) {
danielebarchiesi@2 214 // Load the plugin responsible for rendering this item, if it is not a
danielebarchiesi@2 215 // prerendered tab.
danielebarchiesi@2 216 if ($item['type'] != 'prerendered') {
danielebarchiesi@2 217 ctools_plugin_load_class('quicktabs', 'contents', $item['type'], 'handler');
danielebarchiesi@2 218 }
danielebarchiesi@2 219
danielebarchiesi@2 220 // Add item's weight to our weights array so that we can then sort by weight.
danielebarchiesi@2 221 $weight[$key] = $item['weight'];
danielebarchiesi@2 222
danielebarchiesi@2 223 // Make sure we're not going to try to load the same QuickSet instance
danielebarchiesi@2 224 // inside itself.
danielebarchiesi@2 225 if ($item['type'] == 'qtabs' && $item['machine_name'] == $name) {
danielebarchiesi@2 226 unset($contents[$key]);
danielebarchiesi@2 227 unset($weight[$key]);
danielebarchiesi@2 228 }
danielebarchiesi@2 229 }
danielebarchiesi@2 230 // Only sort by weight if the tabs haven't already been sorted by some other
danielebarchiesi@2 231 // mechanism, e.g. Views in the case of the Views style plugin.
danielebarchiesi@2 232 if (!isset($settings['sorted']) || !$settings['sorted']) {
danielebarchiesi@2 233 array_multisort($weight, SORT_ASC, $contents);
danielebarchiesi@2 234 }
danielebarchiesi@2 235 else {
danielebarchiesi@2 236 unset($settings['sorted']);
danielebarchiesi@2 237 }
danielebarchiesi@2 238 if ($qt = quickset_renderer_factory($name, $contents, $renderer, $settings)) {
danielebarchiesi@2 239 $renderable_qt = array('#title' => $qt->getTitle(), 'content' => $qt->render());
danielebarchiesi@2 240 return $renderable_qt;
danielebarchiesi@2 241 }
danielebarchiesi@2 242 return array();
danielebarchiesi@2 243 }
danielebarchiesi@2 244
danielebarchiesi@2 245 /**
danielebarchiesi@2 246 * Ajax callback for tab content.
danielebarchiesi@2 247 *
danielebarchiesi@2 248 * @param name The machine name of the quicktabs instance.
danielebarchiesi@2 249 *
danielebarchiesi@2 250 * @param index The tab index we're returning content for.
danielebarchiesi@2 251 *
danielebarchiesi@2 252 * @param type The type of content we're rendering.
danielebarchiesi@2 253 *
danielebarchiesi@2 254 * @return a json-formatted ajax commands array.
danielebarchiesi@2 255 */
danielebarchiesi@2 256 function quicktabs_ajax($name, $index, $type) {
danielebarchiesi@2 257
danielebarchiesi@2 258 $args = func_get_args();
danielebarchiesi@2 259 $variable_args = array_slice($args, 3);
danielebarchiesi@2 260 // Add the Quicktabs machine name to the args we pass to the content renderer
danielebarchiesi@2 261 array_unshift($variable_args, $name);
danielebarchiesi@2 262
danielebarchiesi@2 263 $data = QuickSet::ajaxRenderContent($type, $variable_args);
danielebarchiesi@2 264
danielebarchiesi@2 265 $commands = array();
danielebarchiesi@2 266 $tabpage_id = 'quicktabs-tabpage-'. $name .'-' . $index;
danielebarchiesi@2 267 $commands[] = ajax_command_append('#quicktabs-container-'. $name, '<div id="' . $tabpage_id .'" class="quicktabs-tabpage">'. $data .'</div>');
danielebarchiesi@2 268 $page = array('#type' => 'ajax', '#commands' => $commands);
danielebarchiesi@2 269 ajax_deliver($page);
danielebarchiesi@2 270 }
danielebarchiesi@2 271
danielebarchiesi@2 272 /**
danielebarchiesi@2 273 * Load the quicktabs data for a particular instance.
danielebarchiesi@2 274 */
danielebarchiesi@2 275 function quicktabs_load($name) {
danielebarchiesi@2 276 $qts = quicktabs_load_multiple(array($name));
danielebarchiesi@2 277 return isset($qts[$name]) ? $qts[$name] : NULL;
danielebarchiesi@2 278 }
danielebarchiesi@2 279
danielebarchiesi@2 280 /**
danielebarchiesi@2 281 * Load the quicktabs data.
danielebarchiesi@2 282 */
danielebarchiesi@2 283 function quicktabs_load_multiple($names = array()) {
danielebarchiesi@2 284 ctools_include('export');
danielebarchiesi@2 285 $defaults = empty($names) ? ctools_export_load_object('quicktabs', 'all') : ctools_export_load_object('quicktabs', 'names', $names);
danielebarchiesi@2 286 return $defaults;
danielebarchiesi@2 287 }
danielebarchiesi@2 288
danielebarchiesi@2 289 /**
danielebarchiesi@6 290 * Creates a new quicktab instance.
danielebarchiesi@6 291 */
danielebarchiesi@6 292 function quicktabs_save($quicktab) {
danielebarchiesi@6 293 module_invoke_all('quicktabs_presave', $quicktab);
danielebarchiesi@6 294
danielebarchiesi@6 295 $exists = quicktabs_load($quicktab->machine_name);
danielebarchiesi@6 296 if ($exists && empty($exists->in_code_only)) {
danielebarchiesi@6 297 $ret = drupal_write_record('quicktabs', $quicktab, 'machine_name');
danielebarchiesi@6 298 if ($ret == SAVED_UPDATED) {
danielebarchiesi@6 299 quicktabs_i18n_update_strings(array($quicktab->machine_name));
danielebarchiesi@6 300 }
danielebarchiesi@6 301 else {
danielebarchiesi@6 302 return FALSE;
danielebarchiesi@6 303 }
danielebarchiesi@6 304 }
danielebarchiesi@6 305 else {
danielebarchiesi@6 306 $ret = drupal_write_record('quicktabs', $quicktab);
danielebarchiesi@6 307 if ($ret == SAVED_NEW) {
danielebarchiesi@6 308 quicktabs_i18n_update_strings(array($quicktab->machine_name));
danielebarchiesi@6 309 module_invoke_all('quicktabs_insert', $quicktab);
danielebarchiesi@6 310 }
danielebarchiesi@6 311 else {
danielebarchiesi@6 312 return FALSE;
danielebarchiesi@6 313 }
danielebarchiesi@6 314 }
danielebarchiesi@6 315 module_invoke_all('quicktabs_save', $quicktab);
danielebarchiesi@6 316 return $quicktab;
danielebarchiesi@6 317 }
danielebarchiesi@6 318
danielebarchiesi@6 319 /**
danielebarchiesi@6 320 * Updates an existing quicktab instance.
danielebarchiesi@6 321 */
danielebarchiesi@6 322 function quicktabs_update($quicktab) {
danielebarchiesi@6 323 quicktabs_save($quicktab);
danielebarchiesi@6 324 module_invoke_all('quicktabs_update', $quicktab);
danielebarchiesi@6 325 return $quicktab;
danielebarchiesi@6 326 }
danielebarchiesi@6 327
danielebarchiesi@6 328 /**
danielebarchiesi@6 329 * Deletes a quicktab instance.
danielebarchiesi@6 330 */
danielebarchiesi@6 331 function quicktabs_delete($machine_name) {
danielebarchiesi@6 332 db_query('DELETE FROM {quicktabs} WHERE machine_name = :machine_name', array(':machine_name' => $machine_name));
danielebarchiesi@6 333 module_invoke_all('quicktabs_delete', $machine_name);
danielebarchiesi@6 334 }
danielebarchiesi@6 335
danielebarchiesi@6 336 /**
danielebarchiesi@2 337 * Exports the specified Quicktabs instance with translatable strings.
danielebarchiesi@2 338 */
danielebarchiesi@2 339 function quicktabs_export($qt, $indent = '') {
danielebarchiesi@2 340 $output = ctools_export_object('quicktabs', $qt, $indent);
danielebarchiesi@2 341 $translatables = array();
danielebarchiesi@2 342 if (!empty($qt->title)) {
danielebarchiesi@2 343 $translatables[] = $qt->title;
danielebarchiesi@2 344 }
danielebarchiesi@2 345 foreach ($qt->tabs as $tab) {
danielebarchiesi@2 346 $translatables[] = $tab['title'];
danielebarchiesi@2 347 }
danielebarchiesi@2 348 $translatables = array_filter(array_unique($translatables));
danielebarchiesi@2 349 if (!empty($translatables)) {
danielebarchiesi@2 350 $output .= "\n";
danielebarchiesi@2 351 $output .= "{$indent}// Translatables\n";
danielebarchiesi@2 352 $output .= "{$indent}// Included for use with string extractors like potx.\n";
danielebarchiesi@2 353 sort($translatables);
danielebarchiesi@2 354 foreach ($translatables as $string) {
danielebarchiesi@2 355 $output .= "{$indent}t(" . ctools_var_export($string) . ");\n";
danielebarchiesi@2 356 }
danielebarchiesi@2 357 $output .= "\n";
danielebarchiesi@2 358 }
danielebarchiesi@2 359 return $output;
danielebarchiesi@2 360 }
danielebarchiesi@2 361
danielebarchiesi@2 362 /**
danielebarchiesi@2 363 * Implements hook_i18n_string_info()
danielebarchiesi@2 364 */
danielebarchiesi@2 365 function quicktabs_i18n_string_info() {
danielebarchiesi@2 366 $groups['quicktabs'] = array(
danielebarchiesi@2 367 'title' => t('Quicktabs'),
danielebarchiesi@2 368 'description' => t('Vocabulary titles and term names for localizable quicktabs.'),
danielebarchiesi@2 369 'format' => FALSE, // This group doesn't have strings with format
danielebarchiesi@2 370 'list' => TRUE, // This group can list all strings
danielebarchiesi@2 371 );
danielebarchiesi@2 372 return $groups;
danielebarchiesi@2 373 }
danielebarchiesi@2 374
danielebarchiesi@2 375 function quicktabs_translate($name, $string, $langcode = NULL, $textgroup = 'quicktabs') {
danielebarchiesi@2 376 return function_exists('i18n_string') ? i18n_string($textgroup . ':' . $name, $string, array('langcode' => $langcode)) : $string;
danielebarchiesi@2 377 }
danielebarchiesi@2 378
danielebarchiesi@2 379 /**
danielebarchiesi@2 380 * Update translatable strings.
danielebarchiesi@2 381 */
danielebarchiesi@2 382 function quicktabs_i18n_update_strings($names = array()) {
danielebarchiesi@2 383 if (!function_exists('i18n_string_update')) return;
danielebarchiesi@2 384 $qts = quicktabs_load_multiple($names);
danielebarchiesi@2 385 foreach ($qts as $name => $quicktabs) {
danielebarchiesi@2 386 i18n_string_update("quicktabs:title:$name", $quicktabs->title);
danielebarchiesi@2 387 foreach ($quicktabs->tabs as $tabkey => $tab) {
danielebarchiesi@2 388 i18n_string_update("quicktabs:tab:$name-$tabkey:title", $tab['title']);
danielebarchiesi@2 389 }
danielebarchiesi@2 390 }
danielebarchiesi@2 391 }
danielebarchiesi@2 392
danielebarchiesi@2 393 /**
danielebarchiesi@2 394 * Implements hook_i18n_string_refresh().
danielebarchiesi@2 395 *
danielebarchiesi@2 396 * Refresh translations for all user-generated strings managed by quicktabs.
danielebarchiesi@2 397 * This will load all strings inputted via the quicktabs user interface and
danielebarchiesi@2 398 * register them (and their translations, if there are any) with the
danielebarchiesi@2 399 * i18n_strings system.
danielebarchiesi@2 400 */
danielebarchiesi@2 401 function quicktabs_i18n_string_refresh($group) {
danielebarchiesi@2 402 if ($group === 'quicktabs') {
danielebarchiesi@2 403 quicktabs_i18n_update_strings();
danielebarchiesi@2 404 }
danielebarchiesi@2 405 return TRUE;
danielebarchiesi@2 406 }
danielebarchiesi@2 407
danielebarchiesi@2 408 /**
danielebarchiesi@2 409 * Implements hook_ctools_plugin_type().
danielebarchiesi@2 410 */
danielebarchiesi@2 411 function quicktabs_ctools_plugin_type() {
danielebarchiesi@2 412 return array(
danielebarchiesi@2 413 // Renderer plugins control the display of sets of items, e.g. as tabs.
danielebarchiesi@2 414 'renderers' => array(
danielebarchiesi@2 415 'cache' => TRUE,
danielebarchiesi@2 416 'use hooks' => TRUE,
danielebarchiesi@2 417 'classes' => array('handler'),
danielebarchiesi@2 418 ),
danielebarchiesi@2 419 // Content plugins control the display of individual items.
danielebarchiesi@2 420 'contents' => array(
danielebarchiesi@2 421 'cache' => TRUE,
danielebarchiesi@2 422 'use hooks' => TRUE,
danielebarchiesi@2 423 'classes' => array('handler'),
danielebarchiesi@2 424 )
danielebarchiesi@2 425 );
danielebarchiesi@2 426 }
danielebarchiesi@2 427
danielebarchiesi@2 428 /**
danielebarchiesi@2 429 * Implements hook_quicktabs_renderers().
danielebarchiesi@2 430 */
danielebarchiesi@2 431 function quicktabs_quicktabs_renderers() {
danielebarchiesi@2 432 $info = array();
danielebarchiesi@2 433 $path = drupal_get_path('module', 'quicktabs') . '/plugins';
danielebarchiesi@2 434 $info['quicktabs'] = array(
danielebarchiesi@2 435 'path' => $path,
danielebarchiesi@2 436 'handler' => array(
danielebarchiesi@2 437 'file' => 'QuickQuicktabs.inc',
danielebarchiesi@2 438 'class' => 'QuickQuicktabs',
danielebarchiesi@2 439 ),
danielebarchiesi@2 440 );
danielebarchiesi@2 441 $info['ui_tabs'] = array(
danielebarchiesi@2 442 'path' => $path,
danielebarchiesi@2 443 'handler' => array(
danielebarchiesi@2 444 'file' => 'QuickUiTabs.inc',
danielebarchiesi@2 445 'class' => 'QuickUitabs',
danielebarchiesi@2 446 ),
danielebarchiesi@2 447 );
danielebarchiesi@2 448 $info['accordion'] = array(
danielebarchiesi@2 449 'path' => $path,
danielebarchiesi@2 450 'handler' => array(
danielebarchiesi@2 451 'file' => 'QuickAccordion.inc',
danielebarchiesi@2 452 'class' => 'QuickAccordion',
danielebarchiesi@2 453 ),
danielebarchiesi@2 454 );
danielebarchiesi@2 455 return $info;
danielebarchiesi@2 456 }
danielebarchiesi@2 457
danielebarchiesi@2 458 /**
danielebarchiesi@2 459 * Implements hook_quicktabs_contents().
danielebarchiesi@2 460 */
danielebarchiesi@2 461 function quicktabs_quicktabs_contents() {
danielebarchiesi@2 462 $info = array();
danielebarchiesi@2 463 $path = drupal_get_path('module', 'quicktabs') . '/plugins';
danielebarchiesi@2 464 $info['block'] = array(
danielebarchiesi@2 465 'path' => $path,
danielebarchiesi@2 466 'handler' => array(
danielebarchiesi@2 467 'file' => 'QuickBlockContent.inc',
danielebarchiesi@2 468 'class' => 'QuickBlockContent',
danielebarchiesi@2 469 ),
danielebarchiesi@2 470 'dependencies' => array('block'),
danielebarchiesi@2 471 );
danielebarchiesi@2 472 $info['view'] = array(
danielebarchiesi@2 473 'path' => $path,
danielebarchiesi@2 474 'handler' => array(
danielebarchiesi@2 475 'file' => 'QuickViewContent.inc',
danielebarchiesi@2 476 'class' => 'QuickViewContent',
danielebarchiesi@2 477 ),
danielebarchiesi@2 478 'dependencies' => array('views'),
danielebarchiesi@2 479 );
danielebarchiesi@2 480 $info['node'] = array(
danielebarchiesi@2 481 'path' => $path,
danielebarchiesi@2 482 'handler' => array(
danielebarchiesi@2 483 'file' => 'QuickNodeContent.inc',
danielebarchiesi@2 484 'class' => 'QuickNodeContent',
danielebarchiesi@2 485 ),
danielebarchiesi@2 486 );
danielebarchiesi@2 487 $info['qtabs'] = array(
danielebarchiesi@2 488 'path' => $path,
danielebarchiesi@2 489 'handler' => array(
danielebarchiesi@2 490 'file' => 'QuickQtabsContent.inc',
danielebarchiesi@2 491 'class' => 'QuickQtabsContent',
danielebarchiesi@2 492 ),
danielebarchiesi@2 493 );
danielebarchiesi@2 494 $info['callback'] = array(
danielebarchiesi@2 495 'path' => $path,
danielebarchiesi@2 496 'handler' => array(
danielebarchiesi@2 497 'file' => 'QuickCallbackContent.inc',
danielebarchiesi@2 498 'class' => 'QuickCallbackContent',
danielebarchiesi@2 499 ),
danielebarchiesi@2 500 );
danielebarchiesi@2 501 return $info;
danielebarchiesi@2 502 }
danielebarchiesi@2 503
danielebarchiesi@2 504 /**
danielebarchiesi@2 505 * Returns a renderered QuickSet.
danielebarchiesi@2 506 */
danielebarchiesi@2 507 function quickset_renderer_factory($name, $contents, $renderer, $settings) {
danielebarchiesi@2 508 return QuickSet::QuickSetRendererFactory($name, $contents, $renderer, $settings);
danielebarchiesi@2 509 }
danielebarchiesi@2 510
danielebarchiesi@2 511 /**
danielebarchiesi@2 512 * Returns an object that implements the QuickContent interface.
danielebarchiesi@2 513 */
danielebarchiesi@2 514 function quick_content_factory($name, $item) {
danielebarchiesi@2 515 return QuickContent::factory($name, $item);
danielebarchiesi@2 516 }
danielebarchiesi@2 517
danielebarchiesi@2 518 /**
danielebarchiesi@2 519 * Determine if the machine name is in use.
danielebarchiesi@2 520 */
danielebarchiesi@2 521 function quicktabs_machine_name_exists($machine_name) {
danielebarchiesi@2 522 $qt_exists = db_query_range('SELECT 1 FROM {quicktabs} WHERE machine_name = :name', 0, 1, array(':name' => $machine_name))->fetchField();
danielebarchiesi@2 523 return $qt_exists;
danielebarchiesi@2 524 }
danielebarchiesi@2 525
danielebarchiesi@2 526 /**
danielebarchiesi@2 527 * Implementation of hook_views_api().
danielebarchiesi@2 528 */
danielebarchiesi@2 529 function quicktabs_views_api() {
danielebarchiesi@2 530 return array(
danielebarchiesi@2 531 'api' => 3,
danielebarchiesi@2 532 );
danielebarchiesi@2 533 }
danielebarchiesi@2 534
danielebarchiesi@2 535 /**
danielebarchiesi@2 536 * Theme function to display the access denied tab.
danielebarchiesi@2 537 *
danielebarchiesi@2 538 * @ingroup themeable
danielebarchiesi@2 539 */
danielebarchiesi@2 540 function theme_quicktabs_tab_access_denied($variables) {
danielebarchiesi@2 541 return t('You are not authorized to access this content.');
danielebarchiesi@2 542 }
danielebarchiesi@2 543
danielebarchiesi@2 544
danielebarchiesi@2 545 /**
danielebarchiesi@2 546 * Fetch the necessary CSS files for the tab style.
danielebarchiesi@2 547 */
danielebarchiesi@2 548 function quicktabs_get_css($style) {
danielebarchiesi@2 549 if ($style == 'default') {
danielebarchiesi@2 550 // Get the default style.
danielebarchiesi@2 551 $style = variable_get('quicktabs_tabstyle', 'nostyle');
danielebarchiesi@2 552 }
danielebarchiesi@2 553 if ($style == 'nostyle') return array();
danielebarchiesi@2 554 $style_css = _quicktabs_get_style_css($style);
danielebarchiesi@2 555 return $style_css;
danielebarchiesi@2 556 }
danielebarchiesi@2 557
danielebarchiesi@2 558 /**
danielebarchiesi@2 559 * Helper function to get the css file for given style.
danielebarchiesi@2 560 */
danielebarchiesi@2 561 function _quicktabs_get_style_css($style) {
danielebarchiesi@2 562 $tabstyles = &drupal_static(__FUNCTION__);
danielebarchiesi@2 563 if (empty($tabstyles)) {
danielebarchiesi@2 564 $cid = 'quicktabs_tabstyles';
danielebarchiesi@2 565 $cache = cache_get($cid);
danielebarchiesi@2 566 if (!$cache) {
danielebarchiesi@2 567 $tabstyles = module_invoke_all('quicktabs_tabstyles');
danielebarchiesi@2 568 cache_set($cid, $tabstyles);
danielebarchiesi@2 569 }
danielebarchiesi@2 570 else {
danielebarchiesi@2 571 $tabstyles = $cache->data;
danielebarchiesi@2 572 }
danielebarchiesi@2 573 }
danielebarchiesi@2 574 if ($css_file = array_search($style, $tabstyles)) {
danielebarchiesi@2 575 return array('data' => $css_file);
danielebarchiesi@2 576 }
danielebarchiesi@2 577 return array();
danielebarchiesi@2 578 }
danielebarchiesi@2 579
danielebarchiesi@2 580 /**
danielebarchiesi@2 581 * Theme function to output tablinks for jQuery UI style tabs.
danielebarchiesi@2 582 *
danielebarchiesi@2 583 * @ingroup themeable
danielebarchiesi@2 584 */
danielebarchiesi@2 585 function theme_qt_ui_tabs_tabset($vars) {
danielebarchiesi@2 586
danielebarchiesi@2 587 $output = '<ul>';
danielebarchiesi@2 588 foreach ($vars['tabset']['tablinks'] as $i => $tab) {
danielebarchiesi@2 589 if (is_array($tab)) {
danielebarchiesi@2 590 $output .= '<li>'. drupal_render($tab) .'</li>';
danielebarchiesi@2 591 }
danielebarchiesi@2 592 }
danielebarchiesi@2 593 $output .= '</ul>';
danielebarchiesi@2 594 return $output;
danielebarchiesi@2 595 }
danielebarchiesi@2 596
danielebarchiesi@2 597 /**
danielebarchiesi@2 598 * Theme function to output content for jQuery UI style tabs.
danielebarchiesi@2 599 *
danielebarchiesi@2 600 * @ingroup themeable
danielebarchiesi@2 601 */
danielebarchiesi@2 602 function theme_qt_ui_tabs($variables) {
danielebarchiesi@2 603 $element = $variables['element'];
danielebarchiesi@2 604 $output = '<div '. drupal_attributes($element['#options']['attributes']) .'>';
danielebarchiesi@2 605 $output .= drupal_render($element['tabs']);
danielebarchiesi@2 606
danielebarchiesi@2 607 if (isset($element['active'])) {
danielebarchiesi@2 608 $output .= drupal_render($element['active']);
danielebarchiesi@2 609 }
danielebarchiesi@2 610 else {
danielebarchiesi@2 611 foreach ($element['divs'] as $div) {
danielebarchiesi@2 612 $output .= drupal_render($div);
danielebarchiesi@2 613 }
danielebarchiesi@2 614 }
danielebarchiesi@2 615
danielebarchiesi@2 616 $output .= '</div>';
danielebarchiesi@2 617 return $output;
danielebarchiesi@2 618 }
danielebarchiesi@2 619
danielebarchiesi@2 620 /**
danielebarchiesi@2 621 * Theme function to output tablinks for classic Quicktabs style tabs.
danielebarchiesi@2 622 *
danielebarchiesi@2 623 * @ingroup themeable
danielebarchiesi@2 624 */
danielebarchiesi@2 625 function theme_qt_quicktabs_tabset($vars) {
danielebarchiesi@2 626 $variables = array(
danielebarchiesi@2 627 'attributes' => array(
danielebarchiesi@2 628 'class' => 'quicktabs-tabs quicktabs-style-' . $vars['tabset']['#options']['style'],
danielebarchiesi@2 629 ),
danielebarchiesi@2 630 'items' => array(),
danielebarchiesi@2 631 );
danielebarchiesi@2 632 foreach (element_children($vars['tabset']['tablinks']) as $key) {
danielebarchiesi@2 633 $item = array();
danielebarchiesi@2 634 if (is_array($vars['tabset']['tablinks'][$key])) {
danielebarchiesi@2 635 $tab = $vars['tabset']['tablinks'][$key];
danielebarchiesi@2 636 if ($key == $vars['tabset']['#options']['active']) {
danielebarchiesi@2 637 $item['class'] = array('active');
danielebarchiesi@2 638 }
danielebarchiesi@2 639 $item['data'] = drupal_render($tab);
danielebarchiesi@2 640 $variables['items'][] = $item;
danielebarchiesi@2 641 }
danielebarchiesi@2 642 }
danielebarchiesi@2 643 return theme('item_list', $variables);
danielebarchiesi@2 644 }
danielebarchiesi@2 645
danielebarchiesi@2 646 /**
danielebarchiesi@2 647 * Theme function to output content for classic Quicktabs style tabs.
danielebarchiesi@2 648 *
danielebarchiesi@2 649 * @ingroup themeable
danielebarchiesi@2 650 */
danielebarchiesi@2 651 function theme_qt_quicktabs($variables) {
danielebarchiesi@2 652 $element = $variables['element'];
danielebarchiesi@2 653 $output = '<div '. drupal_attributes($element['#options']['attributes']) .'>';
danielebarchiesi@2 654 $output .= drupal_render($element['tabs']);
danielebarchiesi@2 655
danielebarchiesi@2 656 $output .= drupal_render($element['container']);
danielebarchiesi@2 657
danielebarchiesi@2 658 $output .= '</div>';
danielebarchiesi@2 659 return $output;
danielebarchiesi@2 660 }
danielebarchiesi@2 661
danielebarchiesi@2 662
danielebarchiesi@2 663 /**
danielebarchiesi@2 664 * Theme function to output markup for the accordion style.
danielebarchiesi@2 665 *
danielebarchiesi@2 666 * @ingroup themeable
danielebarchiesi@2 667 */
danielebarchiesi@2 668 function theme_qt_accordion($variables) {
danielebarchiesi@2 669 $element = $variables['element'];
danielebarchiesi@2 670 $output = '<div '. drupal_attributes($element['#options']['attributes']) .'>';
danielebarchiesi@2 671 foreach ($element['divs'] as $div) {
danielebarchiesi@2 672 $output .= drupal_render($div);
danielebarchiesi@2 673 }
danielebarchiesi@2 674
danielebarchiesi@2 675 $output .= '</div>';
danielebarchiesi@2 676 return $output;
danielebarchiesi@2 677 }