Commit c8d3140e authored by Liang Ding's avatar Liang Ding

#12726

parent 715c42eb
...@@ -255,25 +255,23 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -255,25 +255,23 @@ public final class SoloServletListener extends AbstractServletListener {
private void resolveSkinDir(final HttpServletRequest httpServletRequest) { private void resolveSkinDir(final HttpServletRequest httpServletRequest) {
String skin = Skins.getSkinDirNameFromCookie(httpServletRequest); String skin = Skins.getSkinDirNameFromCookie(httpServletRequest);
if (StringUtils.isBlank(skin)) { if (StringUtils.isBlank(skin)) {
try { final OptionQueryService optionQueryService = beanManager.getReference(OptionQueryService.class);
final InitService initService = beanManager.getReference(InitService.class); final JSONObject preference = optionQueryService.getPreference();
if (initService.isInited()) {
final OptionQueryService optionQueryService = beanManager.getReference(OptionQueryService.class); if (Solos.isMobile(httpServletRequest)) {
final JSONObject preference = optionQueryService.getPreference(); if (null != preference) {
if (null != preference) { skin = preference.optString(Option.ID_C_MOBILE_SKIN_DIR_NAME);
skin = preference.getString(Skin.SKIN_DIR_NAME); } else {
} skin = Option.DefaultPreference.DEFAULT_MOBILE_SKIN_DIR_NAME;
}
} else {
if (null != preference) {
skin = preference.optString(Option.ID_C_SKIN_DIR_NAME);
} else {
skin = Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME;
} }
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Resolves skin failed", e);
} }
} }
if (StringUtils.isBlank(skin)) {
skin = Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME;
}
if (Solos.isMobile(httpServletRequest)) {
skin = Solos.MOBILE_SKIN;
}
httpServletRequest.setAttribute(Keys.TEMAPLTE_DIR_NAME, skin); httpServletRequest.setAttribute(Keys.TEMAPLTE_DIR_NAME, skin);
} }
......
...@@ -26,7 +26,7 @@ import org.json.JSONObject; ...@@ -26,7 +26,7 @@ import org.json.JSONObject;
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="https://github.com/hzchendou">hzchendou</a> * @author <a href="https://github.com/hzchendou">hzchendou</a>
* @version 1.5.0.6, Mar 20, 2019 * @version 1.6.0.0, Mar 29, 2019
* @since 0.6.0 * @since 0.6.0
*/ */
public final class Option { public final class Option {
...@@ -228,9 +228,9 @@ public final class Option { ...@@ -228,9 +228,9 @@ public final class Option {
public static final String ID_C_SKIN_DIR_NAME = "skinDirName"; public static final String ID_C_SKIN_DIR_NAME = "skinDirName";
/** /**
* Key of skin name. * Key of mobile skin dir name.
*/ */
public static final String ID_C_SKIN_NAME = "skinName"; public static final String ID_C_MOBILE_SKIN_DIR_NAME = "mobileSkinDirName";
/** /**
* Key of footer content. * Key of footer content.
...@@ -359,6 +359,11 @@ public final class Option { ...@@ -359,6 +359,11 @@ public final class Option {
*/ */
public static final String DEFAULT_SKIN_DIR_NAME = "Pinghsu"; public static final String DEFAULT_SKIN_DIR_NAME = "Pinghsu";
/**
* Default mobile skin directory name.
*/
public static final String DEFAULT_MOBILE_SKIN_DIR_NAME = "Pinghsu";
/** /**
* Default language. * Default language.
*/ */
......
...@@ -21,7 +21,7 @@ package org.b3log.solo.model; ...@@ -21,7 +21,7 @@ package org.b3log.solo.model;
* This class defines all skin model relevant keys. * This class defines all skin model relevant keys.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.1, Aug 22, 2010 * @version 1.1.0.0, Mar 29, 2019
*/ */
public final class Skin { public final class Skin {
...@@ -35,11 +35,6 @@ public final class Skin { ...@@ -35,11 +35,6 @@ public final class Skin {
*/ */
public static final String SKINS = "skins"; public static final String SKINS = "skins";
/**
* Key of skin name, current selected skin name.
*/
public static final String SKIN_NAME = "skinName";
/** /**
* Key of skin directory name. * Key of skin directory name.
*/ */
......
...@@ -117,7 +117,9 @@ public class IndexProcessor { ...@@ -117,7 +117,9 @@ public class IndexProcessor {
// 前台皮肤切换 https://github.com/b3log/solo/issues/12060 // 前台皮肤切换 https://github.com/b3log/solo/issues/12060
String specifiedSkin = Skins.getSkinDirName(context); String specifiedSkin = Skins.getSkinDirName(context);
if (StringUtils.isBlank(specifiedSkin)) { if (StringUtils.isBlank(specifiedSkin)) {
specifiedSkin = preference.optString(Option.ID_C_SKIN_DIR_NAME); specifiedSkin = Solos.isMobile(request) ?
preference.optString(Option.ID_C_MOBILE_SKIN_DIR_NAME) :
preference.optString(Option.ID_C_SKIN_DIR_NAME);
} }
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, specifiedSkin); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, specifiedSkin);
......
...@@ -55,7 +55,7 @@ import java.util.Set; ...@@ -55,7 +55,7 @@ import java.util.Set;
* Solo initialization service. * Solo initialization service.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.5.2.31, Mar 23, 2019 * @version 1.5.2.32, Mar 29, 2019
* @since 0.4.0 * @since 0.4.0
*/ */
@Service @Service
...@@ -660,28 +660,23 @@ public class InitService { ...@@ -660,28 +660,23 @@ public class InitService {
footerContentOpt.put(Option.OPTION_VALUE, DefaultPreference.DEFAULT_FOOTER_CONTENT); footerContentOpt.put(Option.OPTION_VALUE, DefaultPreference.DEFAULT_FOOTER_CONTENT);
optionRepository.add(footerContentOpt); optionRepository.add(footerContentOpt);
final String skinDirName = DefaultPreference.DEFAULT_SKIN_DIR_NAME;
final JSONObject skinDirNameOpt = new JSONObject(); final JSONObject skinDirNameOpt = new JSONObject();
skinDirNameOpt.put(Keys.OBJECT_ID, Option.ID_C_SKIN_DIR_NAME); skinDirNameOpt.put(Keys.OBJECT_ID, Option.ID_C_SKIN_DIR_NAME);
skinDirNameOpt.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_PREFERENCE); skinDirNameOpt.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_PREFERENCE);
skinDirNameOpt.put(Option.OPTION_VALUE, skinDirName); skinDirNameOpt.put(Option.OPTION_VALUE, DefaultPreference.DEFAULT_SKIN_DIR_NAME);
optionRepository.add(skinDirNameOpt); optionRepository.add(skinDirNameOpt);
final String skinName = Latkes.getSkinName(skinDirName); final JSONObject mobileSkinDirNameOpt = new JSONObject();
final JSONObject skinNameOpt = new JSONObject(); mobileSkinDirNameOpt.put(Keys.OBJECT_ID, Option.ID_C_MOBILE_SKIN_DIR_NAME);
skinNameOpt.put(Keys.OBJECT_ID, Option.ID_C_SKIN_NAME); mobileSkinDirNameOpt.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_PREFERENCE);
skinNameOpt.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_PREFERENCE); mobileSkinDirNameOpt.put(Option.OPTION_VALUE, DefaultPreference.DEFAULT_MOBILE_SKIN_DIR_NAME);
skinNameOpt.put(Option.OPTION_VALUE, skinName); optionRepository.add(mobileSkinDirNameOpt);
optionRepository.add(skinNameOpt);
final Set<String> skinDirNames = Skins.getSkinDirNames(); final Set<String> skinDirNames = Skins.getSkinDirNames();
final JSONArray skinArray = new JSONArray(); final JSONArray skinArray = new JSONArray();
for (final String dirName : skinDirNames) { for (final String dirName : skinDirNames) {
final JSONObject skin = new JSONObject(); final JSONObject skin = new JSONObject();
skinArray.put(skin); skinArray.put(skin);
final String name = Latkes.getSkinName(dirName);
skin.put(Skin.SKIN_NAME, name);
skin.put(Skin.SKIN_DIR_NAME, dirName); skin.put(Skin.SKIN_DIR_NAME, dirName);
} }
......
...@@ -103,17 +103,11 @@ public class PreferenceMgmtService { ...@@ -103,17 +103,11 @@ public class PreferenceMgmtService {
continue; continue;
} }
skin.put(SKIN_NAME, name);
skin.put(SKIN_DIR_NAME, dirName); skin.put(SKIN_DIR_NAME, dirName);
skinArray.put(skin); skinArray.put(skin);
} }
final String currentSkinDirName = preference.optString(SKIN_DIR_NAME); final String currentSkinDirName = preference.optString(SKIN_DIR_NAME);
final String skinName = preference.optString(SKIN_NAME);
LOGGER.log(Level.DEBUG, "Current skin[name={0}]", skinName);
if (!skinDirNames.contains(currentSkinDirName)) { if (!skinDirNames.contains(currentSkinDirName)) {
LOGGER.log(Level.WARN, "Configured skin [dirName={0}] can not find, try to use " + "default skin [dirName=" LOGGER.log(Level.WARN, "Configured skin [dirName={0}] can not find, try to use " + "default skin [dirName="
+ Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME + "] instead.", currentSkinDirName); + Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME + "] instead.", currentSkinDirName);
...@@ -124,8 +118,6 @@ public class PreferenceMgmtService { ...@@ -124,8 +118,6 @@ public class PreferenceMgmtService {
} }
preference.put(SKIN_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); preference.put(SKIN_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
preference.put(SKIN_NAME, Latkes.getSkinName(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME));
updatePreference(preference); updatePreference(preference);
} }
...@@ -160,22 +152,13 @@ public class PreferenceMgmtService { ...@@ -160,22 +152,13 @@ public class PreferenceMgmtService {
final Transaction transaction = optionRepository.beginTransaction(); final Transaction transaction = optionRepository.beginTransaction();
try { try {
final String skinDirName = preference.getString(Skin.SKIN_DIR_NAME);
final String skinName = Latkes.getSkinName(skinDirName);
preference.put(Skin.SKIN_NAME, skinName);
final Set<String> skinDirNames = Skins.getSkinDirNames(); final Set<String> skinDirNames = Skins.getSkinDirNames();
final JSONArray skinArray = new JSONArray(); final JSONArray skinArray = new JSONArray();
for (final String dirName : skinDirNames) { for (final String dirName : skinDirNames) {
final JSONObject skin = new JSONObject(); final JSONObject skin = new JSONObject();
skinArray.put(skin); skinArray.put(skin);
final String name = Latkes.getSkinName(dirName);
skin.put(Skin.SKIN_NAME, name);
skin.put(Skin.SKIN_DIR_NAME, dirName); skin.put(Skin.SKIN_DIR_NAME, dirName);
} }
preference.put(Skin.SKINS, skinArray.toString()); preference.put(Skin.SKINS, skinArray.toString());
preference.put(Option.ID_C_SIGNS, preference.get(Option.ID_C_SIGNS).toString()); preference.put(Option.ID_C_SIGNS, preference.get(Option.ID_C_SIGNS).toString());
...@@ -292,9 +275,18 @@ public class PreferenceMgmtService { ...@@ -292,9 +275,18 @@ public class PreferenceMgmtService {
skinDirNameOpt.put(Option.OPTION_VALUE, preference.optString(Option.ID_C_SKIN_DIR_NAME)); skinDirNameOpt.put(Option.OPTION_VALUE, preference.optString(Option.ID_C_SKIN_DIR_NAME));
optionRepository.update(Option.ID_C_SKIN_DIR_NAME, skinDirNameOpt); optionRepository.update(Option.ID_C_SKIN_DIR_NAME, skinDirNameOpt);
final JSONObject skinNameOpt = optionRepository.get(Option.ID_C_SKIN_NAME); JSONObject mobileSkinDirNameOpt = optionRepository.get(Option.ID_C_MOBILE_SKIN_DIR_NAME);
skinNameOpt.put(Option.OPTION_VALUE, preference.optString(Option.ID_C_SKIN_NAME)); // TODO: 在 v3.5.0 发布后可移除判空
optionRepository.update(Option.ID_C_SKIN_NAME, skinNameOpt); if (null == mobileSkinDirNameOpt) {
mobileSkinDirNameOpt = new JSONObject();
mobileSkinDirNameOpt.put(Keys.OBJECT_ID, Option.ID_C_MOBILE_SKIN_DIR_NAME);
mobileSkinDirNameOpt.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_PREFERENCE);
mobileSkinDirNameOpt.put(Option.OPTION_VALUE, Option.DefaultPreference.DEFAULT_MOBILE_SKIN_DIR_NAME);
optionRepository.add(mobileSkinDirNameOpt);
} else {
mobileSkinDirNameOpt.put(Option.OPTION_VALUE, preference.optString(Option.ID_C_MOBILE_SKIN_DIR_NAME));
optionRepository.update(Option.ID_C_MOBILE_SKIN_DIR_NAME, mobileSkinDirNameOpt);
}
final JSONObject skinsOpt = optionRepository.get(Option.ID_C_SKINS); final JSONObject skinsOpt = optionRepository.get(Option.ID_C_SKINS);
skinsOpt.put(Option.OPTION_VALUE, preference.optString(Option.ID_C_SKINS)); skinsOpt.put(Option.OPTION_VALUE, preference.optString(Option.ID_C_SKINS));
......
...@@ -57,6 +57,8 @@ public final class V340_350 { ...@@ -57,6 +57,8 @@ public final class V340_350 {
try { try {
final Transaction transaction = optionRepository.beginTransaction(); final Transaction transaction = optionRepository.beginTransaction();
optionRepository.remove("skinName");
JSONObject hljsThemeOpt = optionRepository.get(Option.ID_C_HLJS_THEME); JSONObject hljsThemeOpt = optionRepository.get(Option.ID_C_HLJS_THEME);
if (null == hljsThemeOpt) { if (null == hljsThemeOpt) {
hljsThemeOpt = new JSONObject(); hljsThemeOpt = new JSONObject();
......
...@@ -48,7 +48,7 @@ import java.util.*; ...@@ -48,7 +48,7 @@ import java.util.*;
* Skin utilities. * Skin utilities.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.6.5, Feb 26, 2019 * @version 1.1.6.6, Mar 29, 2019
* @since 0.3.1 * @since 0.3.1
*/ */
public final class Skins { public final class Skins {
...@@ -218,10 +218,6 @@ public final class Skins { ...@@ -218,10 +218,6 @@ public final class Skins {
* @return directory name, or {@code null} if not found * @return directory name, or {@code null} if not found
*/ */
public static String getSkinDirName(final RequestContext context) { public static String getSkinDirName(final RequestContext context) {
if (Solos.isMobile(context.getRequest())) {
return Solos.MOBILE_SKIN;
}
// 1. Get skin from query // 1. Get skin from query
final String specifiedSkin = context.param(Skin.SKIN); final String specifiedSkin = context.param(Skin.SKIN);
if (StringUtils.isNotBlank(specifiedSkin)) { if (StringUtils.isNotBlank(specifiedSkin)) {
......
...@@ -36,7 +36,6 @@ import org.b3log.latke.util.Strings; ...@@ -36,7 +36,6 @@ import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option;
import org.b3log.solo.model.UserExt; import org.b3log.solo.model.UserExt;
import org.b3log.solo.repository.UserRepository; import org.b3log.solo.repository.UserRepository;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -54,7 +53,7 @@ import java.util.ResourceBundle; ...@@ -54,7 +53,7 @@ import java.util.ResourceBundle;
* Solo utilities. * Solo utilities.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.8.0.0, Mar 20, 2019 * @version 1.8.0.1, Mar 29, 2019
* @since 2.8.0 * @since 2.8.0
*/ */
public final class Solos { public final class Solos {
...@@ -74,11 +73,6 @@ public final class Solos { ...@@ -74,11 +73,6 @@ public final class Solos {
*/ */
public static final String GRAVATAR; public static final String GRAVATAR;
/**
* Mobile skin.
*/
public static final String MOBILE_SKIN;
/** /**
* Solo User-Agent. * Solo User-Agent.
*/ */
...@@ -114,13 +108,6 @@ public final class Solos { ...@@ -114,13 +108,6 @@ public final class Solos {
FAVICON_API = solo.getString("faviconAPI"); FAVICON_API = solo.getString("faviconAPI");
GRAVATAR = solo.getString("gravatar"); GRAVATAR = solo.getString("gravatar");
String mobileSkin = Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME;
try {
mobileSkin = solo.getString("mobile.skin");
} catch (final Exception e) {
LOGGER.log(Level.WARN, "Loads [mobile.skin] in solo.props failed [" + e.getMessage() + "], using [" + mobileSkin + "] as the default mobile skin");
}
MOBILE_SKIN = mobileSkin;
} }
static { static {
......
...@@ -18,11 +18,9 @@ ...@@ -18,11 +18,9 @@
# #
# Description: Solo configurations. # Description: Solo configurations.
# Version: 2.4.0.5, Feb 28, 2019 # Version: 2.5.0.0, Mar 29, 2019
# Author: Liang Ding # Author: Liang Ding
# #
mobile.skin=Pinghsu
gravatar=https://secure.gravatar.com/avatar/ gravatar=https://secure.gravatar.com/avatar/
faviconAPI=https://api.byi.pw/favicon?url= faviconAPI=https://api.byi.pw/favicon?url=
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment