seven.theme 6.56 KB
Newer Older
1 2
<?php

3
/**
4 5 6 7
 * @file
 * Functions to support theming in the Seven theme.
 */

8 9
use Drupal\Core\Template\RenderWrapper;

10 11 12 13 14 15 16
/**
 * Implements hook_library_info().
 */
function seven_library_info() {
  $path = drupal_get_path('theme', 'seven');

  $libraries['install-page'] = array(
17
    'version' => \Drupal::VERSION,
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
    'js' => array(
      $path . '/js/mobile.install.js' => array(
        'group' => JS_THEME,
      ),
    ),
    'css' => array(
      $path . '/install-page.css' => array(
        'group' => CSS_AGGREGATE_THEME,
      ),
    ),
  );

  return $libraries;
}

33 34 35 36 37 38 39 40 41 42 43 44 45 46
/**
 * Implements hook_preprocess_HOOK() for HTML document templates.
 */
function seven_preprocess_html(&$variables) {
  // Add information about the number of sidebars.
  if (!empty($variables['page']['sidebar_first'])) {
    $variables['attributes']['class'][] = 'one-sidebar';
    $variables['attributes']['class'][] = 'sidebar-first';
  }
  else {
    $variables['attributes']['class'][] = 'no-sidebars';
  }
}

47
/**
48
 * Implements hook_preprocess_HOOK() for page templates.
49
 */
50 51 52 53
function seven_preprocess_page(&$variables) {
  $variables['primary_local_tasks'] = $variables['tabs'];
  unset($variables['primary_local_tasks']['#secondary']);
  $variables['secondary_local_tasks'] = array(
54
    '#theme' => 'menu_local_tasks',
55
    '#secondary' => isset($variables['tabs']['#secondary']) ? $variables['tabs']['#secondary'] : '',
56
  );
57 58 59
}

/**
60
 * Displays the list of available node types for node creation.
61
 */
62 63
function seven_node_add_list($variables) {
  $content = $variables['content'];
64
  if ($content) {
65
    $output = '<ul class="admin-list">';
66
    foreach ($content as $type) {
67
      $output .= '<li class="clearfix">';
68 69 70 71
      $content = '<span class="label">' . check_plain($type->name) . '</span>';
      $content .= '<div class="description">' . filter_xss_admin($type->description) . '</div>';
      $options['html'] = TRUE;
      $output .= l($content, 'node/add/' . $type->type, $options);
72 73 74 75
      $output .= '</li>';
    }
    $output .= '</ul>';
  }
76 77 78
  else {
    $output = '<p>' . t('You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.', array('@create-content' => url('admin/structure/types/add'))) . '</p>';
  }
79 80 81
  return $output;
}

82 83 84 85 86 87 88
/**
 * Overrides theme_custom_block_add_list().
 *
 * Displays the list of available custom block types for creation.
 */
function seven_custom_block_add_list($variables) {
  $output = '';
89
  if (!empty($variables['types'])) {
90
    $output = '<ul class="admin-list">';
91
    foreach ($variables['types'] as $id => $type) {
92
      $output .= '<li class="clearfix">';
93 94 95
      $content = '<span class="label">' . check_plain($type['title']) . '</span>';
      $content .= '<div class="description">' . filter_xss_admin($type['description']) . '</div>';
      $options = $type['localized_options'];
96
      $options['html'] = TRUE;
97
      $output .= \Drupal::l($content, 'custom_block.add_form', array('custom_block_type' => $id), $options);
98 99 100 101 102 103 104
      $output .= '</li>';
    }
    $output .= '</ul>';
  }
  return $output;
}

105
/**
106
 * Overrides theme_admin_block_content().
107
 *
108
 * Uses an unordered list markup in both compact and extended mode.
109
 */
110 111
function seven_admin_block_content($variables) {
  $content = $variables['content'];
112 113 114 115
  $output = '';
  if (!empty($content)) {
    $output = system_admin_compact_mode() ? '<ul class="admin-list compact">' : '<ul class="admin-list">';
    foreach ($content as $item) {
116 117 118 119
      $output .= '<li>';
      $content = '<span class="label">' . filter_xss_admin($item['title']) . '</span>';
      $options = $item['localized_options'];
      $options['html'] = TRUE;
120
      if (isset($item['description']) && !system_admin_compact_mode()) {
121
        $content .= '<div class="description">' . filter_xss_admin($item['description']) . '</div>';
122
      }
123
      $output .= l($content, $item['href'], $options);
124 125 126 127 128 129 130 131
      $output .= '</li>';
    }
    $output .= '</ul>';
  }
  return $output;
}

/**
132
 * Overrides theme_tablesort_indicator().
133
 *
134 135
 * Uses Seven's image versions, so the arrows show up as black and not gray on
 * gray.
136
 */
137
function seven_tablesort_indicator($variables) {
138
  $theme_path = drupal_get_path('theme', 'seven');
139 140 141

  if($variables['style'] == 'asc') {
    $image_uri = $theme_path . '/images/arrow-asc.png';
142
    $text = t('Sort ascending');
143 144
  }
  else {
145
    $image_uri = $theme_path . '/images/arrow-desc.png';
146
    $text = t('Sort descending');
147
  }
148 149 150 151 152

  $image = array(
    '#theme' => 'image',
    '#uri' => $image_uri,
    '#alt' => $text,
153 154
    '#width' => 9,
    '#height' => 5,
155 156 157
    '#title' => $text,
  );
  return drupal_render($image);
158
}
159

160 161 162 163
/**
 * Implements hook_preprocess_install_page().
 */
function seven_preprocess_install_page(&$variables) {
164 165
  $variables['styles'] = new RenderWrapper('drupal_get_css');
  $variables['scripts'] = new RenderWrapper('drupal_get_js');
166 167 168 169 170 171 172 173 174 175 176

  // Normally we could attach libraries via hook_page_alter(), but when the
  // database is inactive it's not called so we add them here.
  $libraries = array(
    '#attached' => array(
      'library' => array(
        array('seven', 'install-page'),
      ),
    ),
  );
  drupal_render($libraries);
177
}
178 179 180 181 182 183 184

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 *
 * Changes vertical tabs to container and adds meta information.
 */
function seven_form_node_form_alter(&$form, &$form_state) {
185
  $node = $form_state['controller']->getEntity();
186

187 188
  $form['#theme'] = array('node_edit_form');
  $form['#attached'] = array(
189
    'css' => array(drupal_get_path('module', 'node') . '/css/node.module.css'),
190 191
  );

192 193 194 195 196 197 198 199 200 201
  $form['advanced']['#type'] = 'container';
  $form['meta'] = array (
    '#type' => 'fieldset',
    '#attributes' => array('class' => array('entity-meta-header')),
    '#type' => 'container',
    '#group' => 'advanced',
    '#weight' => -100,
    'published' => array(
      '#type' => 'item',
      '#wrapper_attributes' => array('class' => array('published')),
202
      '#markup' => $node->isPublished() ? t('Published') : t('Not published'),
203
      '#access' => !$node->isNew(),
204 205 206 207 208
    ),
    'changed' => array(
      '#type' => 'item',
      '#wrapper_attributes' => array('class' => array('changed', 'container-inline')),
      '#title' => t('Last saved'),
209
      '#markup' => !$node->isNew() ? format_date($node->getChangedTime(), 'short') : t('Not saved yet'),
210 211 212 213 214
    ),
    'author' => array(
      '#type' => 'item',
      '#wrapper_attributes' => array('class' => array('author', 'container-inline')),
      '#title' => t('Author'),
215
      '#markup' => $node->getAuthor()->getUsername(),
216 217 218 219 220
    ),
  );
  $form['revision_information']['#type'] = 'container';
  $form['revision_information']['#group'] = 'meta';
}