You are here

function panels_mini_block in Panels 6.3

Same name and namespace in other branches
  1. 5.2 panels_mini/panels_mini.module \panels_mini_block()
  2. 6.2 panels_mini/panels_mini.module \panels_mini_block()

Implementation of hook_block().

Expose qualifying mini panels to Drupal's block system.

File

panels_mini/panels_mini.module, line 37
panels_mini.module

Code

function panels_mini_block($op = 'list', $delta = 0, $edit = array()) {

  // Safety: go away if CTools is not at an appropriate version.
  if (!defined('PANELS_REQUIRED_CTOOLS_API') || !module_invoke('ctools', 'api_version', PANELS_REQUIRED_CTOOLS_API)) {
    return array();
  }
  if ($op == 'list') {
    $blocks = array();
    $minis = panels_mini_load_all();
    foreach ($minis as $panel_mini) {
      if (empty($mini->disabled) && empty($mini->requiredcontext)) {
        $blocks[$panel_mini->name] = array(
          'info' => t('Mini panel: "@title"', array(
            '@title' => $panel_mini->admin_title,
          )),
          'cache' => BLOCK_NO_CACHE,
        );
      }
    }
    return $blocks;
  }
  elseif ($op == 'view') {

    // static recursion protection.
    static $viewing = array();
    if (!empty($viewing[$delta])) {
      return;
    }
    $viewing[$delta] = TRUE;
    $panel_mini = panels_mini_load($delta);
    if (empty($panel_mini)) {

      // Bail out early if the specified mini panel doesn't exist.
      return;
    }
    ctools_include('context');
    $panel_mini->context = $panel_mini->display->context = ctools_context_load_contexts($panel_mini);
    $panel_mini->display->css_id = panels_mini_get_id($panel_mini->name);
    $block = array();
    $block['content'] = panels_render_display($panel_mini->display);
    $block['subject'] = $panel_mini->display
      ->get_title();
    unset($viewing[$delta]);
    return $block;
  }
  elseif ($op = 'configure') {
    return array(
      'admin-shortcut' => array(
        '#value' => l(t('Manage this mini-panel'), "admin/build/mini-panels/list/{$delta}/edit"),
      ),
    );
  }
}