--- themeswitcher.module 2006-08-09 16:33:48.000000000 +0200
+++ themeswitcher_3.module 2006-09-08 17:03:19.000000000 +0200
@@ -17,6 +17,21 @@ function themeswitcher_help($section = '
return t($output);
}
+/**
+ * hook_menu
+ **/
+
+function themeswitcher_menu($may_cache) {
+ $items = array();
+ if ($may_cache) {
+ $items[] = array('path' => 'themes',
+ 'title' => t('theme previewer'),
+ 'callback' => 'themeswitcher_page',
+ 'access' => user_access('access content'));
+ }
+ return $items;
+}
+
function themeswitcher_init() {
global $custom_theme;
@@ -34,8 +49,8 @@ function themeswitcher_init() {
function themeswitcher_cron() {
$statistics_timestamp = variable_get('statistics_day_timestamp', '');
- if ((time() - $statistics_timestamp) >= 86400) {
- //if (1) { //debugging
+ //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);
@@ -86,20 +101,25 @@ function themeswitcher_cron() {
}
function themeswitcher_block($op = 'list', $delta = 0) {
- if ($op == 'list') {
+ switch ($op) {
+ case 'list':
$blocks[0]['info'] = t('Random theme');
$blocks[1]['info'] = t('Theme browser');
return $blocks;
- }
- elseif ($delta == 0) {
+ break;
+ case 'view':
+ if ($delta == 0) {
$block['subject'] = t('Random theme');
$block['content'] = themeswitcher_display_random_block();
- return $block;
}
elseif ($delta == 1) {
$block['subject'] = t('Browse themes');
$block['content'] = themeswitcher_display_nextprev_block();
+ }
return $block;
+ break;
+ case 'default':
+ break;
}
}
@@ -116,43 +136,179 @@ function themeswitcher_display_random_bl
}
function themeswitcher_display_nextprev_block() {
- global $custom_theme;
+ 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];
- if (!$custom_theme) {
- $next = current($themes);
- if (file_exists($next->screenshot)) {
- $output .= l("screenshot\" alt=\"preview of $next->name\" width=\"75px\"/>", $_GET['q'], NULL, 'theme='. $next->name, NULL, FALSE, TRUE);
- $output .= '
';
+ // 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']) - 1; + if ($page < 0) { + $page = 0; + } + $max = 24; + $cells = ''; + $count = count($themes) - 1; // offset for the zero + $current_theme = $current->name; + $start = $page * $max; + $end = ($page + 1) * $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 .= '