--- themeswitcher.module 2006-09-04 10:40:16.000000000 -0400
+++ themeswitcher.module 2006-09-04 14:38:09.000000000 -0400
@@ -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;
@@ -86,20 +101,25 @@ function themeswitcher_cron() {
}
function themeswitcher_block($op = 'list', $delta = 0) {
- if ($op == 'list') {
- $blocks[0]['info'] = t('Random theme');
- $blocks[1]['info'] = t('Theme browser');
- return $blocks;
- }
- elseif ($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;
+ 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;
}
}
@@ -116,43 +136,178 @@ function themeswitcher_display_random_bl
}
function themeswitcher_display_nextprev_block() {
- global $custom_theme;
+ global $custom_theme, $user;
$themes = list_themes();
- ksort($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
- 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 .= '
';
- }
- $output .= l($next->name . ' ›', $_GET['q'], NULL, 'theme='. $next->name);
- return $output;
- }
-
- while (list($key, $theme) = each($themes)) {
- if ($custom_theme == $theme->name) {
- prev($themes);
- $previous = prev($themes);
- if ($previous) {
- if (file_exists($previous->screenshot)) {
- $output = l("screenshot\" alt=\"preview of $previous->name\" width=\"75px\"/>", $_GET['q'], NULL, 'theme='. $previous->name, NULL, FALSE, TRUE);
- $output .= '
';
- }
- $output .= l('‹ '. $previous->name, $_GET['q'], NULL, 'theme='. $previous->name);
+ // 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'; } - next($themes); - $next = next($themes); - if ($next) { - $output .= ' | '; - 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 .= '' . 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 .= '
'; + if ($theme->name == $current_theme) { + $cells .= ''; + } + $cells .= '