'themes',
'title' => t('theme previewer'),
'callback' => 'themeswitcher_page',
'access' => user_access('access content'));
}
return $items;
}
function themeswitcher_init() {
global $custom_theme;
if ($_GET['theme']) {
$custom_theme = $_SESSION['theme_session'] = $_GET['theme'];
}
elseif ($_POST['edit']['theme_session']) {
$path = pathinfo($_POST['edit']['theme_session']);
$custom_theme = str_replace(array('themes/'), '', $path['dirname']);
}
else {
$custom_theme = $_SESSION['theme_session'];
}
}
function themeswitcher_cron() {
$statistics_timestamp = variable_get('statistics_day_timestamp', '');
//if ((time() - $statistics_timestamp) >= 86400) {
if (1) { //debugging
$theme_default= variable_get('theme_default', 'bluemarine');
$res = db_query('SELECT * FROM {blocks} WHERE theme LIKE \'%s\'', $theme_default);
db_query('DELETE FROM {blocks}');
while ($block = db_fetch_object($res)) {
$defaults[$block->module .'-'. $block->delta] = $block;
}
foreach (list_themes() as $key => $theme) {
foreach ($defaults as $block) {
db_query("INSERT INTO {blocks} (
module,
delta,
theme,
status,
weight,
region,
custom,
throttle,
visibility,
pages
) VALUES (
'%s',
'%s',
'%s',
%d,
%d,
'%s',
%d,
%d,
%d,
'%s')",
$block->module,
$block->delta,
$key,
$block->status,
$block->weight,
$block->region,
$block->custom,
$block->throttle,
$block->visibility,
$block->pages
);
}
}
variable_set('statistics_day_timestamp', time());
}
}
function themeswitcher_block($op = 'list', $delta = 0) {
switch ($op) {
case 'list':
$blocks[0]['info'] = t('Random theme');
$blocks[1]['info'] = t('Theme browser');
return $blocks;
break;
case 'view':
if ($delta == 0) {
$block['subject'] = t('Random theme');
$block['content'] = themeswitcher_display_random_block();
}
elseif ($delta == 1) {
$block['subject'] = t('Browse themes');
$block['content'] = themeswitcher_display_nextprev_block();
}
return $block;
break;
case 'default':
break;
}
}
function themeswitcher_display_random_block() {
$themes = list_themes();
shuffle($themes);
foreach ($themes as $key => $theme) {
$theme->screenshot = dirname($theme->filename) . '/screenshot.png';
if (file_exists($theme->screenshot)) { //return the first one with a screenie
$output = l("screenshot\" alt=\"preview of $theme->name\"/>", $_GET['q'], NULL, 'theme='.$theme->name, NULL, FALSE, TRUE);
return $output;
}
}
}
function themeswitcher_display_nextprev_block() {
global $custom_theme, $user;
$themes = list_themes();
if (count($themes) > 1) {
ksort($themes);
$i = 0;
foreach ($themes as $key => $theme) {
$themes[$key]->screenshot = dirname($theme->filename) . '/screenshot.png';
// I need both a numerical and an associative array
$sort[$i] = $themes[$key];
$themes[$key]->order = $i;
$i++;
}
$count = count($themes) - 1; // offest for starting at zero
// assign the current theme as value of $custom_theme
$current = themeswitcher_get_current($themes);
// derive the next and previous from the order of $current
$pos = $current->order;
$next = $pos + 1;
$prev = $pos - 1;
if ($pos == $count) {
$next = 0;
$prev = $pos - 1;
}
elseif ($pos == 0) {
$next = $pos + 1;
$prev = $count;
}
$next_theme = $sort[$next];
$prev_theme = $sort[$prev];
// add the themes to the output
if (file_exists($prev_theme->screenshot)) {
$output = '
' . t('Previous theme') . '
';
$output .= l("screenshot\" alt=\"preview of $prev_theme->name\" />", $_GET['q'], NULL, 'theme='. $prev_theme->name, NULL, FALSE, TRUE);
}
$output .= '
' . l('‹ '. $prev_theme->name, $_GET['q'], NULL, 'theme='. $prev_theme->name) . '
' . t('Next theme') . '
';
if (file_exists($next_theme->screenshot)) {
$output .= l("screenshot\" alt=\"preview of $next_theme->name\" />", $_GET['q'], NULL, 'theme='. $next_theme->name, NULL, FALSE, TRUE);
}
$output .= '
' . l($next_theme->name . ' ›', $_GET['q'], NULL, 'theme='. $next_theme->name) . '
Select a theme below to see how it looks for this site.
'); $themes = list_themes(); if (count($themes) > 1) { ksort($themes); $current = themeswitcher_get_current($themes); $i = 0; foreach ($themes as $key => $theme) { $theme->picture = dirname($theme->filename) . '/screenshot.png'; if (file_exists(dirname($theme->filename) . '/screenshot.png')) { $themes[$key]->screenshot = dirname($theme->filename) . '/screenshot.png'; } // easier to handle as a numerical array $sort[$i] = $themes[$key]; $i++; } // this might all be rethemed, but it works this way. $page = floor($_GET['page']); $max = 24; $cells = ''; $count = count($themes) - 1; // offset for the zero $current_theme = $current->name; $start = ($page - 1) * $max; $end = $page * $max - 1; $pages = floor($count / $max) + 1; for ($i = $start; $i <= $end; $i++) { $key = $i; $theme = $sort[$i]; $row_open = 0; if (!empty($theme)) { if ($key == $start) { $cells .= '| ' . theme('themeswitcher', $theme, $current_theme) . ' | '; if (fmod($key+1, 3) == 0) { $cells .= '
' . l($theme->name, $_GET['q'], NULL, 'page='.$_GET['page'] . 'theme='. $theme->name); $cells .= '
';
$cells .= l("screenshot\" alt=\"preview of $theme->name\" />", $_GET['q'], NULL, 'page='.$_GET['page'] .'&theme='. $theme->name, NULL, FALSE, TRUE);
$cells .= '