فهرست منبع

Cleaner query
and some template edits

Signed-off-by: Suki <[email protected]>

Suki 10 سال پیش
والد
کامیت
6caabf8121
4فایلهای تغییر یافته به همراه62 افزوده شده و 65 حذف شده
  1. 34 40
      Sources/Subs-Themes.php
  2. 4 21
      Sources/Themes.php
  3. 19 4
      Themes/default/Themes.template.php
  4. 5 0
      Themes/default/languages/Themes.english.php

+ 34 - 40
Sources/Subs-Themes.php

@@ -17,10 +17,9 @@
 if (!defined('SMF'))
 	die('No direct access...');
 
-
 function get_single_theme($id)
 {
-	global $smcFunc, $context;
+	global $smcFunc, $context, $modSettings;
 
 	// No data, no fun!
 	if (empty($id))
@@ -30,6 +29,10 @@ function get_single_theme($id)
 		'id' => $id,
 	);
 
+	// Make our known/enable themes a little easier to work with.
+	$knownThemes = !empty($modSettings['knownThemes']) ? explode(',',$modSettings['knownThemes']) : array();
+	$enableThemes = !empty($modSettings['enableThemes']) ? explode(',',$modSettings['enableThemes']) : array();
+
 	$request = $smcFunc['db_query']('', '
 		SELECT id_theme, variable, value
 		FROM {db_prefix}themes
@@ -39,16 +42,6 @@ function get_single_theme($id)
 		array(
 			'id_theme' => $id,
 			'no_member' => 0,
-			'theme_dir' => 'theme_dir',
-			'images_url' => 'images_url',
-			'theme_url' => 'theme_url',
-			'name' => 'name',
-			'theme_layers' => 'theme_layers',
-			'theme_templates' => 'theme_templates',
-			'version' => 'version',
-			'install_for' => 'install_for',
-			'based_on' => 'based_on',
-			'enable' => 'enable',
 		)
 	);
 
@@ -58,6 +51,8 @@ function get_single_theme($id)
 	// Fix the path and tell if its a valid one.
 	$single['theme_dir'] = realpath($single['theme_dir']);
 	$single['valid_path'] = file_exists($single['theme_dir']) && is_dir($single['theme_dir']);
+	$single['known'] = in_array($single['id'], $knownThemes);
+	$single['enable'] = in_array($single['id'], $enableThemes);
 
 	return $single;
 }
@@ -66,41 +61,38 @@ function get_all_themes($enable_only = false)
 {
 	global $modSettings, $context, $smcFunc;
 
-	// Make our known themes a little easier to work with.
+	// Make our known/enable themes a little easier to work with.
 	$knownThemes = !empty($modSettings['knownThemes']) ? explode(',',$modSettings['knownThemes']) : array();
+	$enableThemes = !empty($modSettings['enableThemes']) ? explode(',',$modSettings['enableThemes']) : array();
+
+	// List of all possible themes values.
+	$themeValues = array(
+		'theme_dir',
+		'images_url',
+		'theme_url',
+		'name',
+		'theme_layers',
+		'theme_templates',
+		'version',
+		'install_for',
+		'based_on',
+		'enable',
+	);
 
-	// All of them or just the enable ones? each will have a pretty different query.
-	if ($enable_only)
-		$query = '
-		SELECT th.id_theme, th.variable, th.value, th2.value AS enable
-		FROM {db_prefix}themes AS th
-			INNER JOIN {db_prefix}themes AS th2 ON (th2.id_theme = th.id_theme
-				AND th2.id_member = {int:no_member}
-				AND th2.variable = {string:enable})
-		WHERE th.variable IN ({string:theme_dir}, {string:theme_url}, {string:images_url}, {string:name}, {string:theme_layers}, {string:theme_templates}, {string:version}, {string:install_for}, {string:based_on}, {string:enable})
-			AND th.id_member = {int:no_member}';
+	// So, what is it going to be?
+	$query_where = $enable_only ? $enableThemes : $knownThemes;
 
-	else
-		$query = '
+	// Perform the query as requested.
+	$request = $smcFunc['db_query']('', '
 		SELECT id_theme, variable, value
 		FROM {db_prefix}themes
-		WHERE variable IN ({string:theme_dir}, {string:theme_url}, {string:images_url}, {string:name}, {string:theme_layers}, {string:theme_templates}, {string:version}, {string:install_for}, {string:based_on}, {string:enable})
-			AND id_member = {int:no_member}';
-
-	// Perform the query as requested.
-	$request = $smcFunc['db_query']('', $query,
+		WHERE variable IN ({array_string:theme_values})
+			AND id_theme IN ({array_string:query_where})
+			AND id_member = {int:no_member}',
 		array(
+			'query_where' => $query_where,
+			'theme_values' => $themeValues,
 			'no_member' => 0,
-			'theme_dir' => 'theme_dir',
-			'images_url' => 'images_url',
-			'theme_url' => 'theme_url',
-			'name' => 'name',
-			'theme_layers' => 'theme_layers',
-			'theme_templates' => 'theme_templates',
-			'version' => 'version',
-			'install_for' => 'install_for',
-			'based_on' => 'based_on',
-			'enable' => 'enable',
 		)
 	);
 
@@ -117,6 +109,8 @@ function get_all_themes($enable_only = false)
 			$context['themes'][$row['id_theme']]['valid_path'] = file_exists(realpath($row['value'])) && is_dir(realpath($row['value']));
 		}
 
+		$context['themes'][$row['id_theme']]['known'] = in_array($row['id_theme'], $knownThemes);
+		$context['themes'][$row['id_theme']]['enable'] = in_array($row['id_theme'], $enableThemes);
 		$context['themes'][$row['id_theme']][$row['variable']] = $row['value'];
 	}
 

+ 4 - 21
Sources/Themes.php

@@ -121,8 +121,8 @@ function ThemeAdmin()
 	isAllowedTo('admin_forum');
 	loadTemplate('Themes');
 
-	// List all installed themes.
-	get_all_themes();
+	// List all installed and enabled themes.
+	get_all_themes(true);
 
 	// Can we create a new theme?
 	$context['can_create_new'] = is_writable($boarddir . '/Themes');
@@ -188,25 +188,7 @@ function ThemeList()
 		checkSession();
 		validateToken('admin-tl');
 
-		$request = $smcFunc['db_query']('', '
-			SELECT id_theme, variable, value
-			FROM {db_prefix}themes
-			WHERE variable IN ({string:theme_dir}, {string:theme_url}, {string:images_url}, {string:base_theme_dir}, {string:base_theme_url}, {string:base_images_url})
-				AND id_member = {int:no_member}',
-			array(
-				'no_member' => 0,
-				'theme_dir' => 'theme_dir',
-				'theme_url' => 'theme_url',
-				'images_url' => 'images_url',
-				'base_theme_dir' => 'base_theme_dir',
-				'base_theme_url' => 'base_theme_url',
-				'base_images_url' => 'base_images_url',
-			)
-		);
-		$themes = array();
-		while ($row = $smcFunc['db_fetch_assoc']($request))
-			$themes[$row['id_theme']][$row['variable']] = $row['value'];
-		$smcFunc['db_free_result']($request);
+		$themes = get_all_themes();
 
 		$setValues = array();
 		foreach ($themes as $id => $theme)
@@ -252,6 +234,7 @@ function ThemeList()
 	$context['sub_template'] = 'list_themes';
 	createToken('admin-tl');
 	createToken('admin-tr', 'request');
+	createToken('admin-tre', 'request');
 }
 
 /**

+ 19 - 4
Themes/default/Themes.template.php

@@ -218,18 +218,33 @@ function template_list_themes()
 			</div>
 			<br />';
 
-	// Show each theme.... with X for delete and a link to settings.
+	// Show each theme.... with X for delete, an enable/disable link and a link to their own settings page.
 	foreach ($context['themes'] as $theme)
 	{
 		echo '
 			<div class="title_bar">
 				<h3 class="titlebg">
-					<span class="floatleft"><strong><a href="', $scripturl, '?action=admin;area=theme;th=', $theme['id'], ';', $context['session_var'], '=', $context['session_id'], ';sa=list">', $theme['name'], '</a></strong>', !empty($theme['version']) ? ' <em>(' . $theme['version'] . ')</em>' : '', '</span>';
+					<span class="floatleft">
+						<strong>', (!empty($theme['enable']) || $theme['id'] == 1 ? '<a href="'. $scripturl .'?action=admin;area=theme;th='. $theme['id'] .';'. $context['session_var'] .'='. $context['session_id'] .';sa=list">'. $theme['name'] .'</a>' : $theme['name'] ),'</strong>', (!empty($theme['version']) ? ' <em>(' . $theme['version'] . ')</em>' : ''), '
+					</span>';
 
-			// You *cannot* delete the default theme. It's important!
+			// You *cannot* disable/enable/delete the default theme. It's important!
 			if ($theme['id'] != 1)
+			{
 				echo '
-					<span class="floatright"><a href="', $scripturl, '?action=admin;area=theme;sa=remove;th=', $theme['id'], ';', $context['session_var'], '=', $context['session_id'], ';', $context['admin-tr_token_var'], '=', $context['admin-tr_token'], '" onclick="return confirm(\'', $txt['theme_remove_confirm'], '\');"><img src="', $settings['images_url'], '/icons/delete.png" alt="', $txt['theme_remove'], '" title="', $txt['theme_remove'], '" /></a></span>';
+					<span class="floatright">';
+
+				// Enable/Disable.
+				echo '
+					<a href="', $scripturl, '?action=admin;area=theme;sa=enable;th=', $theme['id'], ';', $context['session_var'], '=', $context['session_id'], ';', $context['admin-tre_token_var'], '=', $context['admin-tre_token'], '', (!empty($theme['enable']) ? ';disabled' : '') ,'" onclick="return confirm(\'', $txt['theme_'. (!empty($theme['enable']) ? 'disable' : 'enable') .'_confirm'], '\');">', $txt['theme_'. (!empty($theme['enable']) ? 'disable' : 'enable')] ,'</a>';
+
+				// Deleting.
+				echo '
+						<a href="', $scripturl, '?action=admin;area=theme;sa=remove;th=', $theme['id'], ';', $context['session_var'], '=', $context['session_id'], ';', $context['admin-tr_token_var'], '=', $context['admin-tr_token'], '" onclick="return confirm(\'', $txt['theme_remove_confirm'], '\');"><img src="', $settings['images_url'], '/icons/delete.png" alt="', $txt['theme_remove'], '" title="', $txt['theme_remove'], '" /></a>';
+
+				echo '
+					</span>';
+			}
 
 			echo '
 				</h3>

+ 5 - 0
Themes/default/languages/Themes.english.php

@@ -11,7 +11,12 @@ $txt['theme_nochange'] = 'No change';
 $txt['theme_forum_default'] = 'Forum Default';
 
 $txt['theme_remove'] = 'remove';
+$txt['theme_enable'] = 'enable';
+$txt['theme_disable'] = 'disable';
 $txt['theme_remove_confirm'] = 'Are you sure you want to permanently remove this theme?';
+$txt['theme_enable_confirm'] = 'Are you sure you want to enable this theme?';
+$txt['theme_disable_confirm'] = 'Are you sure you want to disablethis theme?';
+
 
 $txt['theme_install'] = 'Install a New Theme';
 $txt['theme_install_file'] = 'From an archive (e.g. .zip, .tar.gz)';