You are here

function ddblock_content in Dynamic display block 7

Same name and namespace in other branches
  1. 6 ddblock.module \ddblock_content()

Get contents of dynamic display block block.

1 call to ddblock_content()
ddblock_block_view in ./ddblock.module
Implements hook_block_view().

File

./ddblock.module, line 1716
Enables your site to display dynamic content in a block.

Code

function ddblock_content($origin, $delta, $content = NULL, $teaser = NULL) {

  // get configuration settings
  foreach (ddblock_get_configuration_settings('ddblock', $delta)
    ->settings() as $key => $value) {
    ${$key} = $value;
  }

  // get configuration settings
  foreach (ddblock_get_cycle_configuration_settings('ddblock_cycle', $delta)
    ->settings() as $key => $value) {
    ${$key} = $value;
  }
  if (!empty($overflow)) {
    $overflow = 'hidden';
  }
  else {
    $overflow = 'visible';
  }
  $container = $container_advanced;
  if ($template == 'none') {
    $container = $container_basic;

    // set imagecontainer height and width with jQuery
    $settings['ddblockImageContainer'][$delta] = array(
      'block' => $delta,
      'contentContainer' => $container,
      'imageContainerHeight' => $height,
      'imageContainerWidth' => $width,
      'setDimensions' => $template,
    );

    // set image heigth and width with jQuery
    $settings['ddblockImages'][$delta] = array(
      'block' => $delta,
      'contentContainer' => $container,
      'imageHeight' => $image_height,
      'imageWidth' => $image_width,
      'setDimensions' => $template,
    );
  }

  // get module path to dynamic display block module
  $ddblock_path = drupal_get_path('module', 'ddblock');

  // get original block settings.
  $ddblock = ddblock_get_blocks($delta);
  $delta_original = $ddblock->delta_original;
  $module_original = $ddblock->module;
  $ddblock_enabled = $ddblock->enabled;
  $view_name = '';
  $display_id = '';
  if ($ddblock_enabled) {

    // get content from other blocks.
    $block = module_invoke($module_original, 'block_view', $delta_original);
    if ($widget == 'default') {
      return $block['content'];
    }
    else {
      if ($module_original == 'views') {
        if ($output == 'view_fields') {
          foreach (ddblock_get_cycle_mapping_settings('ddblock_cycle', $delta)
            ->settings() as $key => $value) {
            ${$key} = $value;
            $mappings[$key]['target'] = $value['target'];
            $mappings[$key]['source'] = $value['source'];
          }
          $output_type = 'view_fields';

          // block.module has a delta length limit of 32, but deltas in the views module can
          // be longer because view names can be 32 and display IDs can also be 32.
          // So for very long deltas, md5 hashes are used.
          if (strlen($delta_original) == 32) {
            $hashes = variable_get('views_block_hashes', array());
            if (!empty($hashes[$delta_original])) {
              $delta_original = $hashes[$delta_original];
            }
          }
          list($view_name, $display_id) = explode('-', $delta_original);

          // Load the view
          if ($view = views_get_view($view_name)) {
            if ($view
              ->access($display_id)) {
              $view
                ->preview($display_id);
              $content = $view->result;

              // Remove empty mappings
              foreach ($mappings as $key => $value) {
                if (empty($value['target'])) {
                  unset($mappings[$key]);
                }
              }

              // create result array
              foreach ($content as $row_num => $result) {
                foreach ($view->field as $id => $field) {
                  $field_output = $view->style_plugin
                    ->get_field($row_num, $id);
                  foreach ($mappings as $mapping_key => $mapping_value) {
                    if ($mapping_value['source'] == $id) {
                      $mapping_target = $mapping_value['target'];
                      $result_rows[$row_num][$mapping_target] = $field_output;
                    }
                  }
                }
              }
              $content = array();
              if (!empty($result_rows)) {
                $content = $result_rows;
                switch ($order) {
                  case 'random':
                    shuffle($content);
                    break;
                  case 'asc':
                    asort($content);
                    break;
                  case 'desc':
                    rsort($content);
                    break;
                  case 'none':
                    break;
                }
              }
            }
            $view
              ->destroy();
          }
        }
        else {
          $output_type = 'view_content';
          $content = $block['content'];

          //return $block['content'];
        }
      }
      else {
        $output_type = 'view_content';
        $content = $block['content'];
      }
      $nr_of_items = count($content);
    }
  }
  else {
    if ($input_type != 'images') {
      $output_type = 'content_array';
      $content = _ddblock_get_content_array($content_type, $nodes, $node_body_teaser);
      $nr_of_items = 2;
    }
    else {

      // get content from image folderimages.
      $output_type = 'images';
      $imagepath = check_plain(file_default_scheme() . ':/' . '/' . $folder, file_default_scheme() . ':/');
      $content = _ddblock_get_image_array($imagepath, $order, $max_image, $ignore_files, $image_style_slide, $image_style_pager_item);
      $nr_of_items = count($content);
    }
  }

  // set jquery cycle settings
  $settings['ddblockContent'][$delta] = array(
    'block' => $delta,
    'nrOfItems' => $nr_of_items,
    'setDimensions' => $template,
    'contentContainer' => $container,
    'custom' => $custom_jquery,
    'fx' => $fx,
    'easeOut' => $easing_out,
    'easeIn' => $easing_in,
    'speed' => $speed,
    'timeOut' => $timeout,
    'pause' => $pause,
    'next' => $next,
    'overflow' => $overflow,
    'pager' => $pager,
    'pagerPosition' => $pager_position,
    'pagerPrevNextLoop' => $pager_prev_next_loop,
    'pagerScrollableLoop' => $pager_scrollable_loop,
    'nrOfPagerItems' => $nr_of_pager_items,
    'pagerContainer' => $pager_container,
    'pagerEvent' => $pager_event,
    'pagerDisableClick' => $pager_disable_click,
    'pagerFast' => $pager_fast,
    'pagerPause' => $pager_pause,
    'pager2' => $pager2,
    'pager2Event' => $pager2_event,
    'pager2SlideHide' => $pager2_slide_hide,
    'slideText' => $slide_text,
    'slideTextjQuery' => $slide_text_jquery,
    'slideTextPosition' => $slide_text_position,
    'slideTextContainer' => $slide_text_container,
    'slideTextEffectBefore' => $slide_text_before_effect,
    'slideTextEffectBeforeSpeed' => $slide_text_before_speed,
    'slideTextEffectBeforeEasing' => $slide_text_before_easing,
    'slideTextEffectAfter' => $slide_text_after_effect,
    'slideTextEffectAfterSpeed' => $slide_text_after_speed,
    'slideTextEffectAfterEasing' => $slide_text_after_easing,
    'height' => $height,
    'width' => $width,
  );
  ddblock_init_js_css();
  drupal_add_js($settings, array(
    'type' => 'setting',
    'scope' => JS_DEFAULT,
  ));
  if (!empty($content)) {

    //use a settings array for template arguments which is more flexible
    $settings = array(
      'delta' => $delta,
      'image_style_pager_item' => $image_style_pager_item,
      'image_style_toggle' => $image_style_toggle,
      'image_style_slide' => $image_style_slide,
      'nr_of_items' => $nr_of_items,
      'nr_of_pager_items' => $nr_of_pager_items,
      'output_type' => $output_type,
      'pager_toggle' => $pager_toggle,
      'pager' => $pager,
      'pager_container' => $pager_container,
      'pager_event' => $pager_event,
      'pager_height' => $pager_height,
      'pager_position' => $pager_position,
      'pager_width' => $pager_width,
      'pager_scrollable_loop' => $pager_scrollable_loop,
      'pager2' => $pager2,
      'pager2_event' => $pager2_event,
      'pager2_slide_prev' => $pager2_slide_prev,
      'pager2_slide_next' => $pager2_slide_next,
      'pager2_slide_hide' => $pager2_slide_hide,
      'slide_text' => $slide_text,
      'slide_text_position' => $slide_text_position,
      'template' => $template,
      'template_size' => $template_size,
      'view_name' => $view_name,
      'view_display_id' => $display_id,
      'image_height' => $image_height,
      'image_width' => $image_width,
    );
    $block_content = theme('ddblock_cycle_block_content', array(
      'settings' => $settings,
      'content' => $content,
    ));
    return $block_content;
  }
  else {
    return FALSE;
  }
}