diff --git a/panels.api.php b/panels.api.php new file mode 100644 index 0000000..6b45407 --- /dev/null +++ b/panels.api.php @@ -0,0 +1,238 @@ +mini_panels_display_cache = $cache; + $handler->edit_cache_set_key($item, $argument); +} + +/** + * Allow modules to provide their own caching mechanism for the display editor. + * + * @param string $argument + * The second half of the cache key. Full key module:TASK_NAME:HANDLER_NAME + * passed part: TASK_NAME:HANDLER_NAME + * + * @return stdClass|NULL + * The cached display or NULL if the cache wasn't hit. + */ +function hook_panels_cache_get($argument) { + ctools_include('common', 'panels'); + list($handler, $item) = _panels_mini_panels_cache_get($argument); + if (isset($item->mini_panels_display_cache)) { + return $item->mini_panels_display_cache; + } + + $cache = new stdClass(); + $cache->display = $item->display; + $cache->display->context = ctools_context_load_contexts($item); + $cache->display->cache_key = 'panels_mini:' . $argument; + $cache->content_types = panels_common_get_allowed_types('panels_mini', $cache->display->context); + $cache->display_title = TRUE; + + // @TODO support locking. + $cache->locked = FALSE; + + return $cache; +} + +/** + * Allow modules to provide their own caching mechanism for the display editor. + * + * @param string $argument + * The second half of the cache key. Full key module:TASK_NAME:HANDLER_NAME + * passed part: TASK_NAME:HANDLER_NAME + * @param stdClass $cache + * The display to cache. + * + * @return stdClass + * The cached display. + */ +function hook_panels_cache_save($argument, $cache) { + list($handler, $item) = _panels_mini_panels_cache_get($argument); + $item->display = $cache->display; + panels_mini_save($item); + + $handler->edit_cache_clear($item); + + return $item; +} + +/** + * Allow modules to provide their own caching mechanism for the display editor. + * + * @param string $argument + * The second half of the cache key. Full key module:TASK_NAME:HANDLER_NAME + * passed part: TASK_NAME:HANDLER_NAME + * @param stdClass $cache + * The cached display. + */ +function hook_panels_cache_clear($argument, $cache) { + list($handler, $item) = _panels_mini_panels_cache_get($argument); + $handler->edit_cache_clear($item); +} + +/** + * Allow modules to adjust the rendering array of the panels dashboard. + * + * @param array $vars + * The output variables. + */ +function hook_panels_dashboard_blocks(&$vars) { + $vars['links']['panels_node'] = array( + 'title' => l(t('Panel node'), 'node/add/panel'), + 'description' => t('Panel nodes are node content and appear in your searches, but are more limited than panel pages.'), + 'weight' => -1, + ); +} + +/** + * Allow to alter the pane content to render. + * + * This happens after the keyword substitution. + * + * @param stdClass $content + * The content block to render. + * @param stdClass $pane + * The pane object. + * @param array $args + * The display arguments. + * @param array $contexts + * Array with the used contexts. + */ +function hook_panels_pane_content_alter($content, $pane, $args, $contexts) { + // Don't display titles. + unset($content->title); +} + +/** + * Allow modules to provide a mechanism to break locks. + * + * @param string $argument + * The second half of the cache key. Full key module:TASK_NAME:HANDLER_NAME + * passed part: TASK_NAME:HANDLER_NAME + * @param stdClass $cache + * The cached display. + */ +function hook_panels_edit_cache_break_lock($argument, $cache) { + $cache->locked = FALSE; +} + +/** + * Fired before a panels display is rendered. + * + * Last chance to modify the panels display or add output before the keyword + * substitution runs and the panels display is rendered. + * + * @param panels_display $panels_display + * The panels display that will be rendered. + * @param stdClass $renderer + * The renderer object that will be used to render. + * + * @return string + * Additional output to add before the panels display. + */ +function hook_panels_pre_render($panels_display, $renderer) { + $translation = i18n_string_object_translate('panels_display_configuration', $panels_display); + $panels_display->title = $translation->title; +} + +/** + * Fired after a panels display is rendered. + * + * Allow to add additional output after the output of the panels display. + * + * @param panels_display $panels_display + * The rendered panels display. + * @param stdClass $renderer + * The used renderer object. + * + * @return string + * Additional output to add after the panels display. + */ +function hook_panels_post_render($panels_display, $renderer) { + return t('Output proudly sponsored by panels.'); +} + +/** + * Fired before a new pane is inserted in the storage. + * + * @param stdClass $pane + * Pane that will be rendered. + */ +function hook_panels_pane_insert($pane) { + // Check if this pane has a custom title enabled. + if (!empty($pane->configuration['override_title'])) { + $translation_object = (object) array( + 'pid' => $pane->pid, + 'title' => $pane->configuration['override_title_text'], + ); + $status = i18n_string_object_update('panels_pane_configuration', $translation_object); + } +} + +/** + * Fired before a changed pane is updated in the storage. + * + * @param stdClass $pane + * Pane that will be rendered. + */ +function hook_panels_pane_update($pane) { + // Check if this pane has a custom title enabled. + if (!empty($pane->configuration['override_title'])) { + $translation_object = (object) array( + 'pid' => $pane->pid, + 'title' => $pane->configuration['override_title_text'], + ); + $status = i18n_string_object_update('panels_pane_configuration', $translation_object); + } +} + +/** + * Fired before a panel is rendered. + * + * Last chance to modify the pane before the keyword substitution runs and the + * pane is rendered. + * + * @param stdClass $pane + * Pane that will be rendered. + */ +function hook_panels_pane_prerender($pane) { + // Check if this pane has a custom title enabled. + if (!empty($pane->configuration['override_title'])) { + $translation_object = (object) array( + 'pid' => $pane->pid, + 'title' => $pane->configuration['override_title_text'], + ); + $translation_object = i18n_string_object_translate('panels_pane_configuration', $translation_object); + $pane->configuration['override_title_text'] = $translation_object->title; + } +} + +/** + * Fired before panes are deleted. + * + * @param array $pids + * Array with the panel id's to delete. + */ +function hook_panels_pane_delete($pids) { + foreach ($pids as $pid) { + // Create dummy pane with pid as property. + $pane = (object) array('pid' => $pid); + i18n_string_object_remove('panels_pane_configuration', $pane); + } +}