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@2
|
290 * Exports the specified Quicktabs instance with translatable strings.
|
danielebarchiesi@2
|
291 */
|
danielebarchiesi@2
|
292 function quicktabs_export($qt, $indent = '') {
|
danielebarchiesi@2
|
293 $output = ctools_export_object('quicktabs', $qt, $indent);
|
danielebarchiesi@2
|
294 $translatables = array();
|
danielebarchiesi@2
|
295 if (!empty($qt->title)) {
|
danielebarchiesi@2
|
296 $translatables[] = $qt->title;
|
danielebarchiesi@2
|
297 }
|
danielebarchiesi@2
|
298 foreach ($qt->tabs as $tab) {
|
danielebarchiesi@2
|
299 $translatables[] = $tab['title'];
|
danielebarchiesi@2
|
300 }
|
danielebarchiesi@2
|
301 $translatables = array_filter(array_unique($translatables));
|
danielebarchiesi@2
|
302 if (!empty($translatables)) {
|
danielebarchiesi@2
|
303 $output .= "\n";
|
danielebarchiesi@2
|
304 $output .= "{$indent}// Translatables\n";
|
danielebarchiesi@2
|
305 $output .= "{$indent}// Included for use with string extractors like potx.\n";
|
danielebarchiesi@2
|
306 sort($translatables);
|
danielebarchiesi@2
|
307 foreach ($translatables as $string) {
|
danielebarchiesi@2
|
308 $output .= "{$indent}t(" . ctools_var_export($string) . ");\n";
|
danielebarchiesi@2
|
309 }
|
danielebarchiesi@2
|
310 $output .= "\n";
|
danielebarchiesi@2
|
311 }
|
danielebarchiesi@2
|
312 return $output;
|
danielebarchiesi@2
|
313 }
|
danielebarchiesi@2
|
314
|
danielebarchiesi@2
|
315 /**
|
danielebarchiesi@2
|
316 * Implements hook_i18n_string_info()
|
danielebarchiesi@2
|
317 */
|
danielebarchiesi@2
|
318 function quicktabs_i18n_string_info() {
|
danielebarchiesi@2
|
319 $groups['quicktabs'] = array(
|
danielebarchiesi@2
|
320 'title' => t('Quicktabs'),
|
danielebarchiesi@2
|
321 'description' => t('Vocabulary titles and term names for localizable quicktabs.'),
|
danielebarchiesi@2
|
322 'format' => FALSE, // This group doesn't have strings with format
|
danielebarchiesi@2
|
323 'list' => TRUE, // This group can list all strings
|
danielebarchiesi@2
|
324 );
|
danielebarchiesi@2
|
325 return $groups;
|
danielebarchiesi@2
|
326 }
|
danielebarchiesi@2
|
327
|
danielebarchiesi@2
|
328 function quicktabs_translate($name, $string, $langcode = NULL, $textgroup = 'quicktabs') {
|
danielebarchiesi@2
|
329 return function_exists('i18n_string') ? i18n_string($textgroup . ':' . $name, $string, array('langcode' => $langcode)) : $string;
|
danielebarchiesi@2
|
330 }
|
danielebarchiesi@2
|
331
|
danielebarchiesi@2
|
332 /**
|
danielebarchiesi@2
|
333 * Update translatable strings.
|
danielebarchiesi@2
|
334 */
|
danielebarchiesi@2
|
335 function quicktabs_i18n_update_strings($names = array()) {
|
danielebarchiesi@2
|
336 if (!function_exists('i18n_string_update')) return;
|
danielebarchiesi@2
|
337 $qts = quicktabs_load_multiple($names);
|
danielebarchiesi@2
|
338 foreach ($qts as $name => $quicktabs) {
|
danielebarchiesi@2
|
339 i18n_string_update("quicktabs:title:$name", $quicktabs->title);
|
danielebarchiesi@2
|
340 foreach ($quicktabs->tabs as $tabkey => $tab) {
|
danielebarchiesi@2
|
341 i18n_string_update("quicktabs:tab:$name-$tabkey:title", $tab['title']);
|
danielebarchiesi@2
|
342 }
|
danielebarchiesi@2
|
343 }
|
danielebarchiesi@2
|
344 }
|
danielebarchiesi@2
|
345
|
danielebarchiesi@2
|
346 /**
|
danielebarchiesi@2
|
347 * Implements hook_i18n_string_refresh().
|
danielebarchiesi@2
|
348 *
|
danielebarchiesi@2
|
349 * Refresh translations for all user-generated strings managed by quicktabs.
|
danielebarchiesi@2
|
350 * This will load all strings inputted via the quicktabs user interface and
|
danielebarchiesi@2
|
351 * register them (and their translations, if there are any) with the
|
danielebarchiesi@2
|
352 * i18n_strings system.
|
danielebarchiesi@2
|
353 */
|
danielebarchiesi@2
|
354 function quicktabs_i18n_string_refresh($group) {
|
danielebarchiesi@2
|
355 if ($group === 'quicktabs') {
|
danielebarchiesi@2
|
356 quicktabs_i18n_update_strings();
|
danielebarchiesi@2
|
357 }
|
danielebarchiesi@2
|
358 return TRUE;
|
danielebarchiesi@2
|
359 }
|
danielebarchiesi@2
|
360
|
danielebarchiesi@2
|
361 /**
|
danielebarchiesi@2
|
362 * Implements hook_ctools_plugin_type().
|
danielebarchiesi@2
|
363 */
|
danielebarchiesi@2
|
364 function quicktabs_ctools_plugin_type() {
|
danielebarchiesi@2
|
365 return array(
|
danielebarchiesi@2
|
366 // Renderer plugins control the display of sets of items, e.g. as tabs.
|
danielebarchiesi@2
|
367 'renderers' => array(
|
danielebarchiesi@2
|
368 'cache' => TRUE,
|
danielebarchiesi@2
|
369 'use hooks' => TRUE,
|
danielebarchiesi@2
|
370 'classes' => array('handler'),
|
danielebarchiesi@2
|
371 ),
|
danielebarchiesi@2
|
372 // Content plugins control the display of individual items.
|
danielebarchiesi@2
|
373 'contents' => array(
|
danielebarchiesi@2
|
374 'cache' => TRUE,
|
danielebarchiesi@2
|
375 'use hooks' => TRUE,
|
danielebarchiesi@2
|
376 'classes' => array('handler'),
|
danielebarchiesi@2
|
377 )
|
danielebarchiesi@2
|
378 );
|
danielebarchiesi@2
|
379 }
|
danielebarchiesi@2
|
380
|
danielebarchiesi@2
|
381 /**
|
danielebarchiesi@2
|
382 * Implements hook_quicktabs_renderers().
|
danielebarchiesi@2
|
383 */
|
danielebarchiesi@2
|
384 function quicktabs_quicktabs_renderers() {
|
danielebarchiesi@2
|
385 $info = array();
|
danielebarchiesi@2
|
386 $path = drupal_get_path('module', 'quicktabs') . '/plugins';
|
danielebarchiesi@2
|
387 $info['quicktabs'] = array(
|
danielebarchiesi@2
|
388 'path' => $path,
|
danielebarchiesi@2
|
389 'handler' => array(
|
danielebarchiesi@2
|
390 'file' => 'QuickQuicktabs.inc',
|
danielebarchiesi@2
|
391 'class' => 'QuickQuicktabs',
|
danielebarchiesi@2
|
392 ),
|
danielebarchiesi@2
|
393 );
|
danielebarchiesi@2
|
394 $info['ui_tabs'] = array(
|
danielebarchiesi@2
|
395 'path' => $path,
|
danielebarchiesi@2
|
396 'handler' => array(
|
danielebarchiesi@2
|
397 'file' => 'QuickUiTabs.inc',
|
danielebarchiesi@2
|
398 'class' => 'QuickUitabs',
|
danielebarchiesi@2
|
399 ),
|
danielebarchiesi@2
|
400 );
|
danielebarchiesi@2
|
401 $info['accordion'] = array(
|
danielebarchiesi@2
|
402 'path' => $path,
|
danielebarchiesi@2
|
403 'handler' => array(
|
danielebarchiesi@2
|
404 'file' => 'QuickAccordion.inc',
|
danielebarchiesi@2
|
405 'class' => 'QuickAccordion',
|
danielebarchiesi@2
|
406 ),
|
danielebarchiesi@2
|
407 );
|
danielebarchiesi@2
|
408 return $info;
|
danielebarchiesi@2
|
409 }
|
danielebarchiesi@2
|
410
|
danielebarchiesi@2
|
411 /**
|
danielebarchiesi@2
|
412 * Implements hook_quicktabs_contents().
|
danielebarchiesi@2
|
413 */
|
danielebarchiesi@2
|
414 function quicktabs_quicktabs_contents() {
|
danielebarchiesi@2
|
415 $info = array();
|
danielebarchiesi@2
|
416 $path = drupal_get_path('module', 'quicktabs') . '/plugins';
|
danielebarchiesi@2
|
417 $info['block'] = array(
|
danielebarchiesi@2
|
418 'path' => $path,
|
danielebarchiesi@2
|
419 'handler' => array(
|
danielebarchiesi@2
|
420 'file' => 'QuickBlockContent.inc',
|
danielebarchiesi@2
|
421 'class' => 'QuickBlockContent',
|
danielebarchiesi@2
|
422 ),
|
danielebarchiesi@2
|
423 'dependencies' => array('block'),
|
danielebarchiesi@2
|
424 );
|
danielebarchiesi@2
|
425 $info['view'] = array(
|
danielebarchiesi@2
|
426 'path' => $path,
|
danielebarchiesi@2
|
427 'handler' => array(
|
danielebarchiesi@2
|
428 'file' => 'QuickViewContent.inc',
|
danielebarchiesi@2
|
429 'class' => 'QuickViewContent',
|
danielebarchiesi@2
|
430 ),
|
danielebarchiesi@2
|
431 'dependencies' => array('views'),
|
danielebarchiesi@2
|
432 );
|
danielebarchiesi@2
|
433 $info['node'] = array(
|
danielebarchiesi@2
|
434 'path' => $path,
|
danielebarchiesi@2
|
435 'handler' => array(
|
danielebarchiesi@2
|
436 'file' => 'QuickNodeContent.inc',
|
danielebarchiesi@2
|
437 'class' => 'QuickNodeContent',
|
danielebarchiesi@2
|
438 ),
|
danielebarchiesi@2
|
439 );
|
danielebarchiesi@2
|
440 $info['qtabs'] = array(
|
danielebarchiesi@2
|
441 'path' => $path,
|
danielebarchiesi@2
|
442 'handler' => array(
|
danielebarchiesi@2
|
443 'file' => 'QuickQtabsContent.inc',
|
danielebarchiesi@2
|
444 'class' => 'QuickQtabsContent',
|
danielebarchiesi@2
|
445 ),
|
danielebarchiesi@2
|
446 );
|
danielebarchiesi@2
|
447 $info['callback'] = array(
|
danielebarchiesi@2
|
448 'path' => $path,
|
danielebarchiesi@2
|
449 'handler' => array(
|
danielebarchiesi@2
|
450 'file' => 'QuickCallbackContent.inc',
|
danielebarchiesi@2
|
451 'class' => 'QuickCallbackContent',
|
danielebarchiesi@2
|
452 ),
|
danielebarchiesi@2
|
453 );
|
danielebarchiesi@2
|
454 return $info;
|
danielebarchiesi@2
|
455 }
|
danielebarchiesi@2
|
456
|
danielebarchiesi@2
|
457 /**
|
danielebarchiesi@2
|
458 * Returns a renderered QuickSet.
|
danielebarchiesi@2
|
459 */
|
danielebarchiesi@2
|
460 function quickset_renderer_factory($name, $contents, $renderer, $settings) {
|
danielebarchiesi@2
|
461 return QuickSet::QuickSetRendererFactory($name, $contents, $renderer, $settings);
|
danielebarchiesi@2
|
462 }
|
danielebarchiesi@2
|
463
|
danielebarchiesi@2
|
464 /**
|
danielebarchiesi@2
|
465 * Returns an object that implements the QuickContent interface.
|
danielebarchiesi@2
|
466 */
|
danielebarchiesi@2
|
467 function quick_content_factory($name, $item) {
|
danielebarchiesi@2
|
468 return QuickContent::factory($name, $item);
|
danielebarchiesi@2
|
469 }
|
danielebarchiesi@2
|
470
|
danielebarchiesi@2
|
471 /**
|
danielebarchiesi@2
|
472 * Determine if the machine name is in use.
|
danielebarchiesi@2
|
473 */
|
danielebarchiesi@2
|
474 function quicktabs_machine_name_exists($machine_name) {
|
danielebarchiesi@2
|
475 $qt_exists = db_query_range('SELECT 1 FROM {quicktabs} WHERE machine_name = :name', 0, 1, array(':name' => $machine_name))->fetchField();
|
danielebarchiesi@2
|
476 return $qt_exists;
|
danielebarchiesi@2
|
477 }
|
danielebarchiesi@2
|
478
|
danielebarchiesi@2
|
479 /**
|
danielebarchiesi@2
|
480 * Implementation of hook_views_api().
|
danielebarchiesi@2
|
481 */
|
danielebarchiesi@2
|
482 function quicktabs_views_api() {
|
danielebarchiesi@2
|
483 return array(
|
danielebarchiesi@2
|
484 'api' => 3,
|
danielebarchiesi@2
|
485 );
|
danielebarchiesi@2
|
486 }
|
danielebarchiesi@2
|
487
|
danielebarchiesi@2
|
488 /**
|
danielebarchiesi@2
|
489 * Theme function to display the access denied tab.
|
danielebarchiesi@2
|
490 *
|
danielebarchiesi@2
|
491 * @ingroup themeable
|
danielebarchiesi@2
|
492 */
|
danielebarchiesi@2
|
493 function theme_quicktabs_tab_access_denied($variables) {
|
danielebarchiesi@2
|
494 return t('You are not authorized to access this content.');
|
danielebarchiesi@2
|
495 }
|
danielebarchiesi@2
|
496
|
danielebarchiesi@2
|
497
|
danielebarchiesi@2
|
498 /**
|
danielebarchiesi@2
|
499 * Fetch the necessary CSS files for the tab style.
|
danielebarchiesi@2
|
500 */
|
danielebarchiesi@2
|
501 function quicktabs_get_css($style) {
|
danielebarchiesi@2
|
502 if ($style == 'default') {
|
danielebarchiesi@2
|
503 // Get the default style.
|
danielebarchiesi@2
|
504 $style = variable_get('quicktabs_tabstyle', 'nostyle');
|
danielebarchiesi@2
|
505 }
|
danielebarchiesi@2
|
506 if ($style == 'nostyle') return array();
|
danielebarchiesi@2
|
507 $style_css = _quicktabs_get_style_css($style);
|
danielebarchiesi@2
|
508 return $style_css;
|
danielebarchiesi@2
|
509 }
|
danielebarchiesi@2
|
510
|
danielebarchiesi@2
|
511 /**
|
danielebarchiesi@2
|
512 * Helper function to get the css file for given style.
|
danielebarchiesi@2
|
513 */
|
danielebarchiesi@2
|
514 function _quicktabs_get_style_css($style) {
|
danielebarchiesi@2
|
515 $tabstyles = &drupal_static(__FUNCTION__);
|
danielebarchiesi@2
|
516 if (empty($tabstyles)) {
|
danielebarchiesi@2
|
517 $cid = 'quicktabs_tabstyles';
|
danielebarchiesi@2
|
518 $cache = cache_get($cid);
|
danielebarchiesi@2
|
519 if (!$cache) {
|
danielebarchiesi@2
|
520 $tabstyles = module_invoke_all('quicktabs_tabstyles');
|
danielebarchiesi@2
|
521 cache_set($cid, $tabstyles);
|
danielebarchiesi@2
|
522 }
|
danielebarchiesi@2
|
523 else {
|
danielebarchiesi@2
|
524 $tabstyles = $cache->data;
|
danielebarchiesi@2
|
525 }
|
danielebarchiesi@2
|
526 }
|
danielebarchiesi@2
|
527 if ($css_file = array_search($style, $tabstyles)) {
|
danielebarchiesi@2
|
528 return array('data' => $css_file);
|
danielebarchiesi@2
|
529 }
|
danielebarchiesi@2
|
530 return array();
|
danielebarchiesi@2
|
531 }
|
danielebarchiesi@2
|
532
|
danielebarchiesi@2
|
533 /**
|
danielebarchiesi@2
|
534 * Theme function to output tablinks for jQuery UI style tabs.
|
danielebarchiesi@2
|
535 *
|
danielebarchiesi@2
|
536 * @ingroup themeable
|
danielebarchiesi@2
|
537 */
|
danielebarchiesi@2
|
538 function theme_qt_ui_tabs_tabset($vars) {
|
danielebarchiesi@2
|
539
|
danielebarchiesi@2
|
540 $output = '<ul>';
|
danielebarchiesi@2
|
541 foreach ($vars['tabset']['tablinks'] as $i => $tab) {
|
danielebarchiesi@2
|
542 if (is_array($tab)) {
|
danielebarchiesi@2
|
543 $output .= '<li>'. drupal_render($tab) .'</li>';
|
danielebarchiesi@2
|
544 }
|
danielebarchiesi@2
|
545 }
|
danielebarchiesi@2
|
546 $output .= '</ul>';
|
danielebarchiesi@2
|
547 return $output;
|
danielebarchiesi@2
|
548 }
|
danielebarchiesi@2
|
549
|
danielebarchiesi@2
|
550 /**
|
danielebarchiesi@2
|
551 * Theme function to output content for jQuery UI style tabs.
|
danielebarchiesi@2
|
552 *
|
danielebarchiesi@2
|
553 * @ingroup themeable
|
danielebarchiesi@2
|
554 */
|
danielebarchiesi@2
|
555 function theme_qt_ui_tabs($variables) {
|
danielebarchiesi@2
|
556 $element = $variables['element'];
|
danielebarchiesi@2
|
557 $output = '<div '. drupal_attributes($element['#options']['attributes']) .'>';
|
danielebarchiesi@2
|
558 $output .= drupal_render($element['tabs']);
|
danielebarchiesi@2
|
559
|
danielebarchiesi@2
|
560 if (isset($element['active'])) {
|
danielebarchiesi@2
|
561 $output .= drupal_render($element['active']);
|
danielebarchiesi@2
|
562 }
|
danielebarchiesi@2
|
563 else {
|
danielebarchiesi@2
|
564 foreach ($element['divs'] as $div) {
|
danielebarchiesi@2
|
565 $output .= drupal_render($div);
|
danielebarchiesi@2
|
566 }
|
danielebarchiesi@2
|
567 }
|
danielebarchiesi@2
|
568
|
danielebarchiesi@2
|
569 $output .= '</div>';
|
danielebarchiesi@2
|
570 return $output;
|
danielebarchiesi@2
|
571 }
|
danielebarchiesi@2
|
572
|
danielebarchiesi@2
|
573 /**
|
danielebarchiesi@2
|
574 * Theme function to output tablinks for classic Quicktabs style tabs.
|
danielebarchiesi@2
|
575 *
|
danielebarchiesi@2
|
576 * @ingroup themeable
|
danielebarchiesi@2
|
577 */
|
danielebarchiesi@2
|
578 function theme_qt_quicktabs_tabset($vars) {
|
danielebarchiesi@2
|
579 $variables = array(
|
danielebarchiesi@2
|
580 'attributes' => array(
|
danielebarchiesi@2
|
581 'class' => 'quicktabs-tabs quicktabs-style-' . $vars['tabset']['#options']['style'],
|
danielebarchiesi@2
|
582 ),
|
danielebarchiesi@2
|
583 'items' => array(),
|
danielebarchiesi@2
|
584 );
|
danielebarchiesi@2
|
585 foreach (element_children($vars['tabset']['tablinks']) as $key) {
|
danielebarchiesi@2
|
586 $item = array();
|
danielebarchiesi@2
|
587 if (is_array($vars['tabset']['tablinks'][$key])) {
|
danielebarchiesi@2
|
588 $tab = $vars['tabset']['tablinks'][$key];
|
danielebarchiesi@2
|
589 if ($key == $vars['tabset']['#options']['active']) {
|
danielebarchiesi@2
|
590 $item['class'] = array('active');
|
danielebarchiesi@2
|
591 }
|
danielebarchiesi@2
|
592 $item['data'] = drupal_render($tab);
|
danielebarchiesi@2
|
593 $variables['items'][] = $item;
|
danielebarchiesi@2
|
594 }
|
danielebarchiesi@2
|
595 }
|
danielebarchiesi@2
|
596 return theme('item_list', $variables);
|
danielebarchiesi@2
|
597 }
|
danielebarchiesi@2
|
598
|
danielebarchiesi@2
|
599 /**
|
danielebarchiesi@2
|
600 * Theme function to output content for classic Quicktabs style tabs.
|
danielebarchiesi@2
|
601 *
|
danielebarchiesi@2
|
602 * @ingroup themeable
|
danielebarchiesi@2
|
603 */
|
danielebarchiesi@2
|
604 function theme_qt_quicktabs($variables) {
|
danielebarchiesi@2
|
605 $element = $variables['element'];
|
danielebarchiesi@2
|
606 $output = '<div '. drupal_attributes($element['#options']['attributes']) .'>';
|
danielebarchiesi@2
|
607 $output .= drupal_render($element['tabs']);
|
danielebarchiesi@2
|
608
|
danielebarchiesi@2
|
609 $output .= drupal_render($element['container']);
|
danielebarchiesi@2
|
610
|
danielebarchiesi@2
|
611 $output .= '</div>';
|
danielebarchiesi@2
|
612 return $output;
|
danielebarchiesi@2
|
613 }
|
danielebarchiesi@2
|
614
|
danielebarchiesi@2
|
615
|
danielebarchiesi@2
|
616 /**
|
danielebarchiesi@2
|
617 * Theme function to output markup for the accordion style.
|
danielebarchiesi@2
|
618 *
|
danielebarchiesi@2
|
619 * @ingroup themeable
|
danielebarchiesi@2
|
620 */
|
danielebarchiesi@2
|
621 function theme_qt_accordion($variables) {
|
danielebarchiesi@2
|
622 $element = $variables['element'];
|
danielebarchiesi@2
|
623 $output = '<div '. drupal_attributes($element['#options']['attributes']) .'>';
|
danielebarchiesi@2
|
624 foreach ($element['divs'] as $div) {
|
danielebarchiesi@2
|
625 $output .= drupal_render($div);
|
danielebarchiesi@2
|
626 }
|
danielebarchiesi@2
|
627
|
danielebarchiesi@2
|
628 $output .= '</div>';
|
danielebarchiesi@2
|
629 return $output;
|
danielebarchiesi@2
|
630 }
|