View source
<?php
function foundation_group_ctools_plugin_api($module, $api) {
if ($module == 'field_group' && $api == 'field_group') {
return array(
'version' => 1,
);
}
}
function foundation_group_theme() {
return array(
'foundation_tabs' => array(
'template' => 'templates/foundation-tabs',
'variables' => array(
'items' => array(),
'group' => NULL,
),
),
'foundation_accordion' => array(
'template' => 'templates/foundation-accordion',
'variables' => array(
'items' => array(),
'group' => NULL,
),
),
);
}
function foundation_group_field_group_formatter_info() {
$group_additions = array(
'foundation_group_tabs' => array(
'label' => t('Foundation Tabs container'),
'description' => t('This field group type renders the items of multiple fields in the group as single container.'),
'format_types' => array(
'open',
),
'instance_settings' => array(
'classes' => '',
),
'default_formatter' => 'open',
),
'foundation_group_tab' => array(
'label' => t('Foundation Tab item'),
'description' => t('This field group type renders the items of a tab within a Foundation container tab.'),
'format_types' => array(
'open',
),
'instance_settings' => array(
'classes' => '',
),
'default_formatter' => 'open',
),
'foundation_group_accordion' => array(
'label' => t('Foundation Accordion container'),
'description' => t('This field group type renders the items of multiple fields in the group as single container.'),
'format_types' => array(
'open',
),
'instance_settings' => array(
'classes' => '',
),
'default_formatter' => 'open',
),
'foundation_group_accordion_item' => array(
'label' => t('Foundation Accordion item'),
'description' => t('This field group type renders the items of an accordion within a Foundation Accordion tab.'),
'format_types' => array(
'open',
),
'instance_settings' => array(
'classes' => '',
),
'default_formatter' => 'open',
),
);
return array(
'display' => $group_additions,
);
}
function foundation_group_field_group_attach_groups_alter(&$groups) {
if (!count($groups)) {
return;
}
$types = _foundation_group_get_types();
$parents = array();
foreach ($groups as $key => $group) {
if (in_array($group->format_type, $types)) {
unset($groups[$key]);
$parents[$key] = $group;
}
}
if (count($parents)) {
$groups += $parents;
}
}
function foundation_group_field_group_pre_render(&$element, $group, &$form) {
field_group_pre_render_prepare($group);
$types = _foundation_group_get_types();
if (!in_array($group->format_type, $types)) {
return;
}
$fields = array();
foreach ($group->children as $field_name) {
$fields[$element[$field_name]['#weight']] = $element[$field_name];
}
ksort($fields);
$fields = array_values($fields);
$element['#items'] = $fields;
$element['#group'] = $group;
}
function field_group_pre_render_foundation_group_tabs(&$element, $group, &$form) {
$element += array(
'#type' => 'foundation_tabs',
'#theme' => 'foundation_tabs',
'#title' => check_plain(t($group->label)),
'#attributes' => array(
'class' => explode(' ', $group->classes),
'id' => _foundation_group_convert_label_to_tab_id($group->label),
),
'#description' => $group->description,
'#parents' => array(
$group->parent_name,
),
);
}
function field_group_pre_render_foundation_group_tab(&$element, $group, &$form) {
$element += array(
'#type' => 'foundation_tab',
'#group' => $group->parent_name,
'#title' => check_plain(t($group->label)),
'#attributes' => array(
'class' => explode(' ', $group->classes),
'id' => _foundation_group_convert_label_to_tab_id($group->label),
),
'#description' => $group->description,
'#parents' => array(
$group->parent_name,
),
);
}
function field_group_pre_render_foundation_group_accordion(&$element, &$group, &$form) {
$element += array(
'#type' => 'foundation_accordion',
'#theme' => 'foundation_accordion',
'#title' => check_plain(t($group->label)),
'#attributes' => array(
'class' => explode(' ', $group->classes),
'id' => _foundation_group_convert_label_to_tab_id($group->label),
),
'#description' => $group->description,
'#parents' => array(
$group->parent_name,
),
);
}
function field_group_pre_render_foundation_group_accordion_item(&$element, $group, &$form) {
$element += array(
'#type' => 'foundation_accordion_item',
'#title' => check_plain(t($group->label)),
'#attributes' => array(
'class' => explode(' ', $group->classes),
'id' => _foundation_group_convert_label_to_tab_id($group->label),
),
'#description' => $group->description,
'#parents' => array(
$group->parent_name,
),
);
}
function template_preprocess_foundation_tabs(&$variables) {
$variables['tab_row_classes'] = $variables['group']->classes;
if (preg_match('/contained/', $variables['group']->classes)) {
$variables['tab_content_classes'] = 'contained';
}
foreach ($variables['items'] as $key => $item) {
$variables['tab_parents'][] = array(
'title' => l(check_plain($item['#title']), NULL, array(
'fragment' => $item['#attributes']['id'],
'external' => TRUE,
)),
);
$variables['tab_children'][] = array(
'id' => _foundation_group_convert_label_to_tab_id($item['#title'], TRUE),
'content' => drupal_render($item),
'class' => implode(' ', $item['#attributes']['class']),
);
}
if (count($variables['tab_parents'])) {
$variables['tab_parents'][0]['class'] = 'active';
}
if (count($variables['tab_children'])) {
$variables['tab_children'][0]['class'] .= ' active';
}
if (count($variables['tab_parents']) && count($variables['tab_children'])) {
$variables['has_tabs'] = TRUE;
}
}
function template_preprocess_foundation_accordion(&$variables) {
$variables['extra_classes'] = $variables['group']->classes;
foreach ($variables['items'] as $key => $item) {
$variables['accordions'][] = array(
'title' => check_plain($item['#title']),
'content' => drupal_render($item),
);
}
if (count($variables['accordions'])) {
$variables['accordions'][0]['list_class'] = 'active';
$variables['has_content'] = TRUE;
}
}
function _foundation_group_convert_label_to_tab_id($title, $target = FALSE) {
$id = drupal_strtolower(check_plain(t($title)));
$id = preg_replace('/[^\\da-z]/i', '', $id);
return $target ? $id . 'Tab' : $id;
}
function _foundation_group_get_types() {
return array(
'foundation_group_tabs',
'foundation_group_accordion',
);
}