266 lines
7.9 KiB
PHP
266 lines
7.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Container class for theme configuration.
|
|
*/
|
|
|
|
class alpha_theme_container {
|
|
var $theme;
|
|
var $settings;
|
|
var $css;
|
|
var $grid;
|
|
var $grids;
|
|
var $libraries;
|
|
var $sections;
|
|
var $zones;
|
|
var $regions;
|
|
var $page;
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function __construct($theme, $delta = NULL) {
|
|
$this->theme = $theme;
|
|
$this->delta = $delta;
|
|
|
|
if ($cache = alpha_cache_get($theme, $delta)) {
|
|
foreach ($cache->data as $key => $item) {
|
|
$this->$key = $item;
|
|
}
|
|
}
|
|
|
|
foreach ($this->cacheable() as $item => $required) {
|
|
if ($required && !isset($this->$item)) {
|
|
$this->init();
|
|
|
|
alpha_alter('alpha_pre_cache', $this, $theme, $delta);
|
|
alpha_cache_set($this);
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
alpha_alter('alpha', $this, $theme, $delta);
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function init() {
|
|
$this->settings();
|
|
$this->sections();
|
|
$this->zones();
|
|
$this->regions();
|
|
$this->grids();
|
|
$this->grid();
|
|
$this->css();
|
|
$this->libraries();
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function settings() {
|
|
if (!isset($this->settings)) {
|
|
$this->settings = array(
|
|
'grid' => alpha_theme_get_setting('alpha_grid', 'default', $this->theme),
|
|
'css' => alpha_theme_get_setting('alpha_css', array(), $this->theme),
|
|
'libraries' => alpha_theme_get_setting('alpha_libraries', array(), $this->theme),
|
|
'exclude' => alpha_theme_get_setting('alpha_exclude', array(), $this->theme),
|
|
'responsive' => alpha_theme_get_setting('alpha_responsive', FALSE, $this->theme),
|
|
'toggle' => array(),
|
|
'hidden' => array(),
|
|
'viewport' => array(
|
|
'enabled' => alpha_theme_get_setting('alpha_viewport', FALSE, $this->theme),
|
|
'initial' => alpha_theme_get_setting('alpha_viewport_initial_scale', 1, $this->theme),
|
|
'min' => alpha_theme_get_setting('alpha_viewport_min_scale', 1, $this->theme),
|
|
'max' => alpha_theme_get_setting('alpha_viewport_max_scale', 1, $this->theme),
|
|
'user' => alpha_theme_get_setting('alpha_viewport_user_scaleable', TRUE, $this->theme),
|
|
),
|
|
'debug' => array(
|
|
'block' => alpha_theme_get_setting('alpha_debug_block_toggle', FALSE, $this->theme),
|
|
'block_active' => alpha_theme_get_setting('alpha_debug_block_active', FALSE, $this->theme),
|
|
'grid' => alpha_theme_get_setting('alpha_debug_grid_toggle', FALSE, $this->theme),
|
|
'grid_active' => alpha_theme_get_setting('alpha_debug_grid_active', FALSE, $this->theme),
|
|
'roles' => array_keys(array_filter(alpha_theme_get_setting('alpha_debug_grid_roles', array(), $this->theme))),
|
|
),
|
|
);
|
|
|
|
foreach (alpha_toggle() as $item => $title) {
|
|
$this->settings['toggle'][$item] = alpha_theme_get_setting('alpha_toggle_' . $item, TRUE, $this->theme);
|
|
}
|
|
|
|
foreach (alpha_visibility() as $item => $title) {
|
|
$this->settings['hidden'][$item] = alpha_theme_get_setting('alpha_hidden_' . $item, FALSE, $this->theme);
|
|
}
|
|
|
|
alpha_alter('alpha_settings', $this->settings, $this->theme);
|
|
}
|
|
|
|
return $this->settings;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function grids() {
|
|
if (!isset($this->grids)) {
|
|
$this->settings();
|
|
$this->grids = alpha_retrieve_grids($this->theme);
|
|
}
|
|
|
|
return $this->grids;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function grid() {
|
|
if (!isset($this->grid)) {
|
|
$this->grids();
|
|
|
|
if (isset($this->grids[$this->settings['grid']])) {
|
|
$this->grid = alpha_grid_css($this->theme, $this->grids[$this->settings['grid']], $this->settings['responsive']);
|
|
}
|
|
else {
|
|
$this->grid = array();
|
|
}
|
|
}
|
|
|
|
return $this->grid;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function css() {
|
|
if (!isset($this->css)) {
|
|
$this->css = alpha_retrieve_css($this->theme);
|
|
}
|
|
|
|
return $this->css;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function libraries() {
|
|
if (!isset($this->libraries)) {
|
|
$this->libraries = alpha_retrieve_libraries($this->theme);
|
|
}
|
|
|
|
return $this->libraries;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function sections() {
|
|
if (!isset($this->sections)) {
|
|
$this->sections = array(
|
|
'header' => t('Header'),
|
|
'content' => t('Content'),
|
|
'footer' => t('Footer'),
|
|
);
|
|
}
|
|
|
|
return $this->sections;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function zones() {
|
|
if (!isset($this->zones)) {
|
|
$this->sections();
|
|
$this->zones = array();
|
|
|
|
if ($zones = alpha_info('zones', $this->theme)) {
|
|
foreach ($zones as $zone => $title) {
|
|
$section = alpha_zone_get_setting('section', $zone, NULL, $this->theme);
|
|
$section = isset($this->sections[$section]) ? $section : NULL;
|
|
|
|
$this->zones[$zone] = array(
|
|
'zone' => $zone,
|
|
'name' => $title,
|
|
'enabled' => isset($this->sections[$section]),
|
|
'force' => alpha_zone_get_setting('force', $zone, FALSE, $this->theme),
|
|
'columns' => alpha_zone_get_setting('columns', $zone, 0, $this->theme),
|
|
'section' => $section,
|
|
'weight' => alpha_zone_get_setting('weight', $zone, 0, $this->theme),
|
|
'wrapper' => alpha_zone_get_setting('wrapper', $zone, FALSE, $this->theme),
|
|
'wrapper_css' => alpha_zone_get_setting('wrapper_css', $zone, NULL, $this->theme),
|
|
'primary' => alpha_zone_get_setting('primary', $zone, NULL, $this->theme),
|
|
'order' => alpha_zone_get_setting('order', $zone, FALSE, $this->theme),
|
|
'css' => alpha_zone_get_setting('css', $zone, NULL, $this->theme),
|
|
);
|
|
}
|
|
}
|
|
|
|
uasort($this->zones, 'drupal_sort_weight');
|
|
alpha_alter('alpha_zones', $this->zones, $this->theme);
|
|
}
|
|
|
|
return $this->zones;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function regions() {
|
|
if (!isset($this->regions)) {
|
|
$this->zones();
|
|
$this->sections();
|
|
$this->regions = array();
|
|
$exclude = alpha_regions_exclude();
|
|
|
|
foreach (system_region_list($this->theme) as $region => $title) {
|
|
if (!in_array($region, $exclude)) {
|
|
$zone = alpha_region_get_setting('zone', $region, NULL, $this->theme);
|
|
$prefix = alpha_region_get_setting('prefix', $region, 0, $this->theme);
|
|
$columns = alpha_region_get_setting('columns', $region, 1, $this->theme);
|
|
$suffix = alpha_region_get_setting('suffix', $region, 0, $this->theme);
|
|
|
|
$zone = isset($zone) && isset($this->zones[$zone]) ? $zone : NULL;
|
|
$section = isset($zone) && isset($this->zones[$zone]['section']) ? $this->zones[$zone]['section'] : NULL;
|
|
|
|
$this->regions[$region] = array(
|
|
'region' => $region,
|
|
'name' => $title,
|
|
'zone' => $zone,
|
|
'section' => $section,
|
|
'enabled' => isset($zone),
|
|
'force' => alpha_region_get_setting('force', $region, FALSE, $this->theme),
|
|
'prefix' => $prefix,
|
|
'columns' => $columns,
|
|
'suffix' => $suffix,
|
|
'width' => $prefix + $columns + $suffix,
|
|
'push' => 0,
|
|
'pull' => 0,
|
|
'wrapper_css' => alpha_region_get_setting('css', $region, NULL, $this->theme),
|
|
'weight' => alpha_region_get_setting('weight', $region, 0, $this->theme),
|
|
'position' => alpha_region_get_setting('position', $region, 0, $this->theme),
|
|
'primary' => isset($zone) && $this->zones[$zone]['primary'] == $region,
|
|
);
|
|
}
|
|
}
|
|
|
|
uasort($this->regions, 'drupal_sort_weight');
|
|
alpha_alter('alpha_regions', $this->regions, $this->theme);
|
|
}
|
|
|
|
return $this->regions;
|
|
}
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function cacheable() {
|
|
$cacheable = array_fill_keys(array('settings', 'libraries', 'css', 'grids', 'grid', 'regions', 'zones', 'sections'), TRUE);
|
|
|
|
alpha_alter('alpha_cacheable', $cacheable, $this->theme);
|
|
|
|
return $cacheable;
|
|
}
|
|
} |