You are here

function theme_widgets_set_view in Widgets 7

Returns HTML for a preview of an widget set.

Parameters

$variables: An associative array containing:

  • set: The widget set array being viewed.

Return value

string

1 call to theme_widgets_set_view()
widgets_set_form_data_fields in ./widgets.admin.inc
5 theme calls to theme_widgets_set_view()
theme_widgets_element_view in ./widgets.module
widgets_block_view in ./widgets.module
Implements hook_block_view().
widgets_node_view in ./widgets.module
Implements hook_node_view().
widgets_set_form in ./widgets.admin.inc
Form builder; Edit an widget set name and elements order.
widgets_tokens in ./widgets.tokens.inc
Implements hook_tokens().

File

./widgets.module, line 1093
Exposes global functionality for creating widget sets.

Code

function theme_widgets_set_view($variables) {
  drupal_add_css(drupal_get_path('module', 'widgets') . '/widgets.css');
  $set = $variables['set'];
  $is_preview = widgets_is_preview();
  $cid = FALSE;
  $process_tokens = TRUE;
  $token_data = array(
    'set' => $set,
  );
  if (isset($variables['process_tokens']) && !$variables['process_tokens']) {
    $process_tokens = FALSE;
  }
  else {
    if (isset($variables['token_data'])) {
      $token_data += $variables['token_data'];
    }
  }
  $is_preview = widgets_is_preview();
  if (!$is_preview && isset($set['data']['cache']['scope']) && ($cid = widgets_build_cache_cid($set['name'], $set['data']['cache']['scope'], $token_data))) {
    $cache = cache_get($cid, 'cache_widgets');
    if ($cache) {
      return $cache->data['output'];
    }
  }
  $style = isset($set['data']['style']) ? $set['data']['style'] : '';
  $output = '';
  $set_pre = '';
  $set_post = '';
  $set_pre_elements = array();
  $set_post_elements = array();
  if (is_array($set['elements']) && count($set['elements']) > 0) {
    $count = 0;
    foreach ($set['elements'] as $weight => $element) {
      $template = $element['template'];
      $data = isset($element['data']) ? $element['data'] : array();
      $token_data['widgets']['element'] = $element;

      // replace literal tokens found in template
      if ($process_tokens) {
        $template = widgets_token_replace($template, $token_data);
      }
      $template = widgets_replace_fields($template, $data);
      if (isset($element['view callback']) && $element['view callback']) {
        $template = call_user_func($element['view callback'], $element);
      }

      // replace tokens from template variables
      if ($process_tokens) {
        $template = widgets_token_replace($template, $token_data);
      }

      // if error with tokens, skip widget
      if (widgets_get_error($set['name'] . ':' . $element['name']) && !widgets_is_preview()) {
        continue;
      }
      $pre = isset($element['prefix']) ? $element['prefix'] : '';
      $post = isset($element['postfix']) ? $element['postfix'] : '';
      if ($style) {
        $a = explode('-', $style);
        if ($a[0] == 'plain') {
          if ($a[1] == 'linebreaks' && $count > 0) {
            $pre = "\n";
          }
          else {
            if ($a[1] == 'spaces' && $count > 0) {
              $pre = " ";
            }
          }
        }
        else {
          $pre = '<div id="widgets-element-' . $element['name'] . '" class="widgets widgets-element widgets-element-' . $style . ' widgets-style-' . $style . '">';
          $post = '</div>';
        }
      }
      $output .= $pre . $template . $post;
      if (isset($element['add_js']) && $element['add_js']['data']) {
        $element['add_js']['data'] = widgets_replace_fields($element['add_js']['data'], $data);
        $scope = $element['add_js']['options']['scope'];
        if ($scope == 'header' || $scope == 'footer') {
          widgets_add_js_singleton($element['add_js']);
        }
        elseif ($scope == 'set_pre') {

          // check if already added, if not add
          if (!isset($set_pre_elements[$element['add_js']['data']])) {
            if ($process_tokens) {
              $set_pre .= token_replace($element['add_js']['data'], $token_data);
            }
            $set_pre_elements[$element['add_js']['data']] = 1;
          }
        }
        elseif ($scope == 'set_post') {

          // check if already added, if not add
          if (!isset($set_post_elements[$element['add_js']['data']])) {
            if ($process_tokens) {
              $set_post .= token_replace($element['add_js']['data'], $token_data);
            }
            $set_post_elements[$element['add_js']['data']] = 1;
          }
        }
      }
    }
  }

  //$set_pre = token_replace($set_pre, $token_data);

  // $set_post = token_replace($set_post, $token_data);
  $pre = '';
  $post = '';
  if ($style) {
    $a = explode('-', $style);
    if ($a[0] == 'plain') {
    }
    else {
      $pre = '<div id="widgets-element-' . $set['name'] . '" class="widgets widgets-set widgets-set-' . $style . ' widgets-style-' . $style . '">';
      $post = '</div>';
      if ($style == 'horizontal') {
        $post = '<div class="widgets-clear"></div>' . $post;
      }
    }
  }
  $output = $set_pre . $pre . $output . $post . $set_post;
  $data = array(
    'output' => $output,
  );
  if (!$is_preview && $cid) {
    cache_set($cid, $data, 'cache_widgets');
  }
  return $output;
}