/**
 * 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 {
            $theme = $form_state['build_info']['args'][0];
            $regions = alpha_regions(NULL, $theme);
            $zones = alpha_zones(NULL, $theme);
            $element['#sum'] = 0;
            foreach ($regions as $region => $item) {
                if ($values['alpha_region_' . $region . '_zone'] == $element['#zone']) {
                    $element['#sum'] += $values['alpha_region_' . $region . '_columns'];
                    $element['#sum'] += $values['alpha_region_' . $region . '_prefix'];
                    $element['#sum'] += $values['alpha_region_' . $region . '_suffix'];
                }
            }
            if ($element['#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' => $regions[$element['#value']]['name'], '%zone' => $zones[$element['#zone']]['name'])));
            }
        }
    }
}
Example #2
0
/**
 * Implements hook_page_alter().
 */
function alpha_page_alter(&$vars)
{
    $settings = alpha_settings();
    $regions = $columns = array();
    $reference =& drupal_static('alpha_regions');
    if ($settings['debug']['access']) {
        if ($settings['debug']['block']) {
            foreach (alpha_regions() as $region => $item) {
                if ($item['enabled']) {
                    $block = new stdClass();
                    $block->delta = 'debug-' . $region;
                    $block->region = $region;
                    $block->module = 'alpha-debug';
                    $block->subject = $item['name'];
                    $vars[$region]['#sorted'] = FALSE;
                    $vars[$region]['alpha_debug_' . $region] = array('#block' => $block, '#weight' => -999, '#markup' => t('This is a debugging block'), '#theme_wrappers' => array('block'));
                }
            }
        }
        if ($settings['debug']['grid']) {
            $class = 'alpha-grid-toggle alpha-grid-toggle-' . ($settings['debug']['active'] ? 'active' : 'inactive');
            if (empty($vars['page_bottom'])) {
                $vars['page_bottom']['#region'] = 'page_bottom';
                $vars['page_bottom']['#theme_wrappers'] = array('region');
            }
            if ($settings['responsive']) {
                $vars['page_bottom']['alpha_resize_indicator'] = array('#type' => 'markup', '#markup' => '<div class="alpha-resize-indicator"></div>');
            }
            $vars['page_bottom']['alpha_grid_toggle'] = array('#type' => 'markup', '#markup' => '<a class="' . $class . '" href="#"></a>');
        }
    }
    foreach (alpha_regions() as $region => $item) {
        if ($item['enabled'] && ($item['force'] || !empty($vars[$region]))) {
            $zone = $item['zone'];
            $regions[$zone][$region] = isset($vars[$region]) ? $vars[$region] : array();
            $regions[$zone][$region]['#region'] = $region;
            $regions[$zone][$region]['#theme_wrappers'] = array('region');
            $regions[$zone][$region]['#data'] = $item;
            $regions[$zone][$region]['#weight'] = (int) $item['weight'];
            if ($children = element_children($regions[$zone][$region])) {
                $last = count($children) - 1;
                foreach ($children as $element) {
                    $regions[$zone][$region][$element]['#first'] = $element == $children[0];
                    $regions[$zone][$region][$element]['#last'] = $element == $children[$last];
                }
            }
        }
        unset($vars[$region]);
    }
    foreach (alpha_zones() as $zone => $item) {
        if ($item['enabled'] && ($item['force'] || !empty($regions[$zone]))) {
            $section = $item['section'];
            $columns[$item['columns']] = $item['columns'];
            if (!empty($item['primary']) && !empty($regions[$zone][$item['primary']])) {
                $children = element_children($regions[$zone]);
                $theme = $GLOBALS['theme_key'];
                $primary =& $regions[$zone][$item['primary']];
                $primary['#weight'] = -999;
                $primary['#data']['columns'] = $item['columns'] - $primary['#data']['prefix'] - $primary['#data']['suffix'];
                $primary['#data']['width'] = $item['columns'];
                foreach ($children as $region) {
                    if (!$regions[$zone][$region]['#data']['primary']) {
                        $primary['#data']['columns'] -= $regions[$zone][$region]['#data']['width'];
                        $primary['#data']['width'] -= $regions[$zone][$region]['#data']['width'];
                        if ($primary['#data']['weight'] > $regions[$zone][$region]['#data']['weight']) {
                            $primary['#data']['push'] += $regions[$zone][$region]['#data']['width'];
                        }
                    }
                }
                $reference[$theme][$item['primary']]['columns'] = $primary['#data']['columns'];
                $reference[$theme][$item['primary']]['width'] = $primary['#data']['width'];
                $reference[$theme][$item['primary']]['push'] = $primary['#data']['push'];
                foreach ($children as $region) {
                    if (!$regions[$zone][$region]['#data']['primary'] && $primary['#data']['weight'] > $regions[$zone][$region]['#data']['weight']) {
                        $regions[$zone][$region]['#data']['pull'] = $primary['#data']['width'];
                        $reference[$theme][$region]['pull'] = $primary['#data']['width'];
                    }
                }
            }
            $vars[$section][$zone] = !empty($regions[$zone]) ? $regions[$zone] : array();
            $vars[$section][$zone]['#theme_wrappers'] = array('zone');
            $vars[$section][$zone]['#zone'] = $zone;
            $vars[$section][$zone]['#weight'] = (int) $item['weight'];
            $vars[$section][$zone]['#sorted'] = FALSE;
            $vars[$section][$zone]['#data'] = $item;
            $vars[$section][$zone]['#data']['type'] = !empty($item['primary']) && !empty($vars[$section][$zone][$item['primary']]) ? 'dynamic' : 'static';
        }
    }
    foreach (alpha_sections() as $section => $item) {
        if (isset($vars[$section])) {
            $vars[$section]['#theme_wrappers'] = array('section');
            $vars[$section]['#section'] = $section;
        }
    }
    alpha_include_grid($settings['grid'], $columns);
}