You are here

function cck_blocks_block in CCK Blocks 5

Same name and namespace in other branches
  1. 6 cck_blocks.module \cck_blocks_block()

File

./cck_blocks.module, line 3

Code

function cck_blocks_block($op = 'list', $delta = 0, $edit = array()) {
  $fields = module_invoke('content', 'fields');
  switch ($op) {
    case 'list':
      $blocks = array();
      if (count($fields)) {
        foreach ($fields as $field_name => $field_info) {
          $blocks[$field_name] = array(
            'info' => 'CCK: ' . ($field_info['widget']['label'] ? $field_info['widget']['label'] : $field_name),
          );
        }
      }
      return $blocks;
    case 'configure':
      $form = array();
      $options = array();
      $info = content_fields($delta);
      $type_info = _content_type_info();
      foreach ($type_info['field types'][$info['type']]['formatters'] as $name => $formatter) {
        $options[$name] = $formatter['label'];
      }
      $options['hidden'] = t('<Hidden>');
      $settings = variable_get('cck_blocks_' . $delta, array(
        'formatter' => 'default',
      ));
      $form['formatter'] = array(
        '#title' => t('Display'),
        '#type' => 'select',
        '#description' => t('Configure how this field should be displayed when it is viewed in a block.'),
        '#options' => $options,
        '#default_value' => $settings['formatter'],
      );
      return $form;
    case 'save':
      $settings = variable_get('cck_blocks_' . $delta, array(
        'formatter' => 'default',
      ));
      $settings['formatter'] = $edit['formatter'];
      variable_set('cck_blocks_' . $delta, $settings);
      return;
    case 'view':
    default:
      $block = array();
      if (arg(0) == 'node' && is_numeric(arg(1)) && !arg(2) && $fields[$delta]) {
        $node = node_load(arg(1));
        if ($items = $node->{$delta}) {
          $block['subject'] = $fields[$delta]['widget']['label'] ? $fields[$delta]['widget']['label'] : $delta;
          $block['content'] = '';
          $settings = variable_get('cck_blocks_' . $delta, array(
            'formatter' => 'default',
          ));
          foreach ($items as $item) {
            $block['content'] .= module_invoke('content', 'format', $fields[$delta], $item, $settings['formatter'], $node);
          }
        }
      }
      return $block;
  }
}