\n") {
$vars['help'] = '';
}
// Classes for body element. Allows advanced theming based on context
// (home page, node of certain type, etc.)
$body_classes = array($vars['body_classes']);
if (user_access('administer blocks')) {
$body_classes[] = 'admin';
}
if (theme_get_setting('basic_wireframe')) {
$body_classes[] = 'with-wireframes'; // Optionally add the wireframes style.
}
if (!$vars['is_front']) {
// Add unique classes for each page and website section
$path = drupal_get_path_alias($_GET['q']);
list($section, ) = explode('/', $path, 2);
$body_classes[] = basic_id_safe('page-'. $path);
$body_classes[] = basic_id_safe('section-'. $section);
if (arg(0) == 'node') {
if (arg(1) == 'add') {
if ($section == 'node') {
array_pop($body_classes); // Remove 'section-node'
}
$body_classes[] = 'section-node-add'; // Add 'section-node-add'
}
elseif (is_numeric(arg(1)) && (arg(2) == 'edit' || arg(2) == 'delete')) {
if ($section == 'node') {
array_pop($body_classes); // Remove 'section-node'
}
$body_classes[] = 'section-node-'. arg(2); // Add 'section-node-edit' or 'section-node-delete'
}
}
}
//// Check what the user's browser is and add it as a body class
//// DEACTIVATED - Only works if page cache is deactivated
//$user_agent = $_SERVER['HTTP_USER_AGENT'];
//if($user_agent) {
// if (strpos($user_agent, 'MSIE')) {
// $body_classes[] = 'browser-ie';
// } else if (strpos($user_agent, 'MSIE 6.0')) {
// $body_classes[] = 'browser-ie6';
// } else if (strpos($user_agent, 'MSIE 7.0')) {
// $body_classes[] = 'browser-ie7';
// } else if (strpos($user_agent, 'MSIE 8.0')) {
// $body_classes[] = 'browser-ie8';
// } else if (strpos($user_agent, 'Firefox/2')) {
// $body_classes[] = 'browser-firefox2';
// } else if (strpos($user_agent, 'Firefox/3')) {
// $body_classes[] = 'browser-firefox3';
// }else if (strpos($user_agent, 'Safari')) {
// $body_classes[] = 'browser-safari';
// } else if (strpos($user_agent, 'Opera')) {
// $body_classes[] = 'browser-opera';
// }
//}
// Add template suggestions based on content type
// You can use a different page template depending on the
// content type or the node ID
// For example, if you wish to have a different page template
// for the story content type, just create a page template called
// page-type-story.tpl.php
// For a specific node, use the node ID in the name of the page template
// like this : page-node-22.tpl.php (if the node ID is 22)
if ($vars['node']->type != "") {
$vars['template_files'][] = "page-type-" . $vars['node']->type;
}
if ($vars['node']->nid != "") {
$vars['template_files'][] = "page-node-" . $vars['node']->nid;
}
$vars['body_classes'] = implode(' ', $body_classes); // Concatenate with spaces
}
//
// from ZEN // Override or insert PHPTemplate variables into the node templates.
//
// This function creates the NODES classes, like 'node-unpublished' for nodes
// that are not published, or 'node-mine' for node posted by the connected user...
//
// @param $vars
// A sequential array of variables to pass to the theme template.
// @param $hook
// The name of the theme function being called ("node" in this case.)
//
function basic_preprocess_node(&$vars, $hook) {
// Special classes for nodes
$classes = array('node');
if ($vars['sticky']) {
$classes[] = 'sticky';
}
if (!$vars['status']) {
$classes[] = 'node-unpublished';
$vars['unpublished'] = TRUE;
}
else {
$vars['unpublished'] = FALSE;
}
if ($vars['uid'] && $vars['uid'] == $GLOBALS['user']->uid) {
$classes[] = 'node-mine'; // Node is authored by current user.
}
if ($vars['teaser']) {
$classes[] = 'node-teaser'; // Node is displayed as teaser.
}
// Class for node type: "node-type-page", "node-type-story", "node-type-my-custom-type", etc.
$classes[] = basic_id_safe('node-type-' . $vars['type']);
$vars['classes'] = implode(' ', $classes); // Concatenate with spaces
}
//
// from ZEN // Override or insert PHPTemplate variables into the block templates.
//
// This function create the EDIT LINKS for blocks and menus blocks.
// When overing a block (except in IE6), some links appear to edit
// or configure the block. You can then edit the block, and once you are
// done, brought back to the first page.
//
// @param $vars
// A sequential array of variables to pass to the theme template.
// @param $hook
// The name of the theme function being called ("block" in this case.)
//
function basic_preprocess_block(&$vars, $hook) {
$block = $vars['block'];
if (theme_get_setting('basic_block_editing') && user_access('administer blocks')) {
// Display 'edit block' for custom blocks.
if ($block->module == 'block') {
$edit_links[] = l('' . t('edit block') . '', 'admin/build/block/configure/' . $block->module . '/' . $block->delta,
array(
'attributes' => array(
'title' => t('edit the content of this block'),
'class' => 'block-edit',
),
'query' => drupal_get_destination(),
'html' => TRUE,
)
);
}
// Display 'configure' for other blocks.
else {
$edit_links[] = l('' . t('configure') . '', 'admin/build/block/configure/' . $block->module . '/' . $block->delta,
array(
'attributes' => array(
'title' => t('configure this block'),
'class' => 'block-config',
),
'query' => drupal_get_destination(),
'html' => TRUE,
)
);
}
// Display 'edit view' for Views blocks.
if ($block->module == 'views' && user_access('administer views')) {
list($view_name, $view_block) = explode('-block', $block->delta);
$edit_links[] = l('' . t('edit view') . '', 'admin/build/views/edit/' . $view_name,
array(
'attributes' => array(
'title' => t('edit the view that defines this block'),
'class' => 'block-edit-view',
),
'query' => drupal_get_destination(),
'fragment' => 'views-tab-block' . $view_block,
'html' => TRUE,
)
);
}
// Display 'edit menu' for Menu blocks.
elseif (($block->module == 'menu' || ($block->module == 'user' && $block->delta == 1)) && user_access('administer menu')) {
$menu_name = ($block->module == 'user') ? 'navigation' : $block->delta;
$edit_links[] = l('' . t('edit menu') . '', 'admin/build/menu-customize/' . $menu_name,
array(
'attributes' => array(
'title' => t('edit the menu that defines this block'),
'class' => 'block-edit-menu',
),
'query' => drupal_get_destination(),
'html' => TRUE,
)
);
}
// Display 'edit menu' for Menu block blocks.
elseif ($block->module == 'menu_block' && user_access('administer menu')) {
list($menu_name, ) = split(':', variable_get("menu_block_{$block->delta}_parent", 'navigation:0'));
$edit_links[] = l('' . t('edit menu') . '', 'admin/build/menu-customize/' . $menu_name,
array(
'attributes' => array(
'title' => t('edit the menu that defines this block'),
'class' => 'block-edit-menu',
),
'query' => drupal_get_destination(),
'html' => TRUE,
)
);
}
$vars['edit_links_array'] = $edit_links;
$vars['edit_links'] = '' . implode(' ', $edit_links) . '
';
}
}
// from ZEN // Override or insert PHPTemplate variables into the block templates.
//
// @param $vars
// An array of variables to pass to the theme template.
// @param $hook
// The name of the template being rendered ("comment" in this case.)
//
function basic_preprocess_comment(&$vars, $hook) {
// Add an "unpublished" flag.
$vars['unpublished'] = ($vars['comment']->status == COMMENT_NOT_PUBLISHED);
// If comment subjects are disabled, don't display them.
if (variable_get('comment_subject_field_' . $vars['node']->type, 1) == 0) {
$vars['title'] = '';
}
// Special classes for comments.
$classes = array('comment');
if ($vars['comment']->new) {
$classes[] = 'comment-new';
}
$classes[] = $vars['status'];
$classes[] = $vars['zebra'];
if ($vars['id'] == 1) {
$classes[] = 'first';
}
if ($vars['id'] == $vars['node']->comment_count) {
$classes[] = 'last';
}
if ($vars['comment']->uid == 0) {
// Comment is by an anonymous user.
$classes[] = 'comment-by-anon';
}
else {
if ($vars['comment']->uid == $vars['node']->uid) {
// Comment is by the node author.
$classes[] = 'comment-by-author';
}
if ($vars['comment']->uid == $GLOBALS['user']->uid) {
// Comment was posted by current user.
$classes[] = 'comment-mine';
}
}
$vars['classes'] = implode(' ', $classes);
}
//
// Customize the PRIMARY and SECONDARY LINKS, to allow the admin tabs to work on all browsers
// An implementation of theme_menu_item_link()
//
// @param $link
// array The menu item to render.
// @return
// string The rendered menu item.
//
function basic_menu_item_link($link) {
if (empty($link['options'])) {
$link['options'] = array();
}
// If an item is a LOCAL TASK, render it as a tab
if ($link['type'] & MENU_IS_LOCAL_TASK) {
$link['title'] = ''. check_plain($link['title']) .'';
$link['options']['html'] = TRUE;
}
if (empty($link['type'])) {
$true = TRUE;
}
return l($link['title'], $link['href'], $link['options']);
}
/**
* Duplicate of theme_menu_local_tasks() but adds clear-block to tabs.
*/
function basic_menu_local_tasks() {
$output = '';
if ($primary = menu_primary_local_tasks()) {
$output .= "\n";
}
if ($secondary = menu_secondary_local_tasks()) {
$output .= "\n";
}
return $output;
}
//
// Add custom classes to menu item
//
function basic_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
$class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
if (!empty($extra_class)) {
$class .= ' '. $extra_class;
}
if ($in_active_trail) {
$class .= ' active-trail';
}
#New line added to get unique classes for each menu item
$css_class = basic_id_safe(str_replace(' ', '_', strip_tags($link)));
return '' . $link . $menu ."\n";
}
//
// Converts a string to a suitable html ID attribute.
//
// http://www.w3.org/TR/html4/struct/global.html#h-7.5.2 specifies what makes a
// valid ID attribute in HTML. This function:
//
// - Ensure an ID starts with an alpha character by optionally adding an 'n'.
// - Replaces any character except A-Z, numbers, and underscores with dashes.
// - Converts entire string to lowercase.
//
// @param $string
// The string
// @return
// The converted string
//
function basic_id_safe($string) {
// Replace with dashes anything that isn't A-Z, numbers, dashes, or underscores.
$string = strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $string));
// If the first character is not a-z, add 'n' in front.
if (!ctype_lower($string{0})) { // Don't use ctype_alpha since its locale aware.
$string = 'id'. $string;
}
return $string;
}
//
// Return a themed breadcrumb trail.
// Alow you to customize the breadcrumb markup
//
function basic_breadcrumb($breadcrumb) {
if (!empty($breadcrumb)) {
return ''. implode(' ยป ', $breadcrumb) .'
';
}
}