CSS_THEME, 'weight' => 100));
$theme = alpha_get_theme();
$form_state['theme'] = $theme->theme;
$form_state['regions'] = $theme->regions;
$form_state['zones'] = $theme->zones;
$form['alpha_settings'] = array(
'#type' => 'vertical_tabs',
'#weight' => -10,
'#prefix' => t('
Layout configuration
'),
);
alpha_theme_settings_general($form, $form_state);
alpha_theme_settings_structure($form, $form_state);
$form['#validate'][] = 'alpha_theme_settings_form_validate';
$form['#submit'][] = 'alpha_theme_settings_form_submit';
}
/**
* Form element validation handler for replacing the value "_none" with NULL.
*/
function alpha_theme_settings_validate_not_empty(&$element, &$form_state) {
if ($element['#value'] == '_none') {
form_set_value($element, NULL, $form_state);
}
}
/**
* Form element validation handler for validating the primary region setting for zones.
*/
function alpha_theme_settings_validate_primary(&$element, &$form_state) {
if ($element['#value'] != '_none') {
$values = $form_state['values'];
if ($values['alpha_region_' . $element['#value'] . '_zone'] != $element['#zone']) {
form_set_value($element, NULL, $form_state);
}
else {
$sum = 0;
foreach ($form_state['regions'] as $region => $item) {
if ($values['alpha_region_' . $region . '_zone'] == $element['#zone']) {
$sum += $values['alpha_region_' . $region . '_columns'];
$sum += $values['alpha_region_' . $region . '_prefix'];
$sum += $values['alpha_region_' . $region . '_suffix'];
}
}
if ($sum > $values['alpha_zone_' . $element['#zone'] . '_columns']) {
form_error($element, t('You have specified the %region region as the primary region for the %zone zone but the summed region width is greater than the number of available columns for that zone.', array('%region' => $form_state['regions'][$element['#value']]['name'], '%zone' => $form_state['zones'][$element['#zone']]['name'])));
}
}
}
}
/**
* Form element validation handler for validating the region order manipulation setting for zones.
*/
function alpha_theme_settings_validate_order(&$element, &$form_state) {
if ($element['#value']) {
$values = $form_state['values'];
$sum = 0;
foreach ($form_state['regions'] as $region => $item) {
if ($values['alpha_region_' . $region . '_zone'] == $element['#zone']) {
$sum += $values['alpha_region_' . $region . '_columns'];
$sum += $values['alpha_region_' . $region . '_prefix'];
$sum += $values['alpha_region_' . $region . '_suffix'];
}
}
if ($sum > $values['alpha_zone_' . $element['#zone'] . '_columns']) {
form_error($element, t('You have chosen to manipulate the region positioning of the %zone zone but the summed region width is greater than the number of available columns for that zone.', array('%zone' => $form_state['zones'][$element['#zone']]['name'])));
}
}
}
/**
* Removes the vertical tab active tab from the values. It really doesn't
* belong there!
*/
function alpha_theme_settings_form_validate($form, &$form_state) {
unset($form_state['values']['alpha_settings__active_tab']);
}
/**
* Clears the cache for the theme settings upon form submission.
*/
function alpha_theme_settings_form_submit($form, &$form_state) {
alpha_cache_clear($form_state['theme'], (isset($form_state['delta']) ? $form_state['delta'] : NULL));
}
/**
* A helper function to return a proper options array for a form.
*
* @param $start
* The number to start with.
*
* @param $end
* The number to end with.
*
* @param $step
* The size of a step.
*
* @return
* An array of scale options.
*/
function alpha_scale_options($start, $end, $step) {
$options = array();
foreach (range($start, $end, $step) as $number) {
// Format the value to display with one decimal.
$options[(string) $number] = number_format($number, 1);
}
return $options;
}
/**
* A helper function to return a proper options array for a form.
*
* @return
* An array of optional or responsive stylesheet options.
*/
function alpha_css_options($css) {
$output = array();
foreach ($css as $key => $info) {
$output[$key] = '' . check_plain($info['name']) . ' (' . (isset($info['options']['media']) ? $info['options']['media'] : 'all') . ') - ' . $info['file'] . '' . $info['description'] . '
';
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @param $theme
* The key (machin-readable name) of a theme.
*
* @see
* hook_css_alter().
*
* @return
* An array of stylesheets that can be disabled / excluded with
* hook_css_alter().
*/
function alpha_exclude_options($theme) {
$output = array();
foreach (alpha_retrieve_excludes($theme) as $key => $info) {
if ($info['type'] == 'exclude') {
$output[$key] = '' . basename($key) . ' - ' . t('Defined by') . ' ' . $info['name'] . '' . $info['description'] . '
';
}
else {
$output[$key] = '' . basename($key) . ' (' . $info['media'] . ') - ' . t('Belongs to') . ' ' . $info['name'] . '' . $info['description'] . '
';
}
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @return
* An array of available grids.
*/
function alpha_grid_options($grids) {
$output = array();
foreach ($grids as $key => $info) {
$output[$key] = check_plain($info['name']);
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @param $grid
* The name of a grid.
*
* @return
* An array of available layouts.
*/
function alpha_grid_layouts_options($grid) {
$output = array();
if (!empty($grid['layouts'])) {
foreach ($grid['layouts'] as $key => $info) {
$output[$key] = check_plain($info['name']);
}
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @return
* An array of available libraries.
*/
function alpha_library_options($libraries) {
$output = array();
foreach ($libraries as $key => $info) {
$output[$key] = check_plain($info['name']) . '' . $info['description'] . '
';
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @param $grid
* The grid that you want to fetch the available containers for.
*
* @return
* An array of available containers.
*/
function alpha_container_options($grid) {
$output = array();
if (!empty($grid['columns'])) {
foreach ($grid['columns'] as $count => $title) {
$output[$count] = t('@count Columns', array('@count' => $count));
}
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @param $max
* The maximum number of columns that you want to cover.
*
* @return
* An array of available columns counts.
*/
function alpha_column_options($max = NULL) {
$output = array();
if (isset($max)) {
foreach (range(0, $max) as $width) {
$output[$width] = t('@width Columns', array('@width' => $width));
}
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @return
* An array of available zones.
*/
function alpha_zone_options($zones) {
$output = array();
foreach ($zones as $key => $info) {
$output[$key] = check_plain($info['name']);
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @return
* An array of available regions.
*/
function alpha_region_options($regions) {
$output = array();
foreach ($regions as $region => $item) {
$output[$region] = $item['name'];
}
return $output;
}
/**
* A helper function to return a proper options array for a form.
*
* @return
* An array of available regions for a zone.
*/
function alpha_zone_regions($zone, $regions) {
$matches = array();
foreach ($regions as $region => $info) {
if ($zone == $info['zone']) {
$matches[$region] = $info;
}
}
return alpha_region_options($matches);
}