mirror of https://github.com/halo-dev/halo
Refactor controllers and HaloConst
parent
d717d72303
commit
d35b6e7da3
|
@ -1,10 +1,5 @@
|
|||
package run.halo.app.config;
|
||||
|
||||
import run.halo.app.config.properties.HaloProperties;
|
||||
import run.halo.app.factory.StringToEnumConverterFactory;
|
||||
import run.halo.app.model.support.HaloConst;
|
||||
import run.halo.app.security.resolver.AuthenticationArgumentResolver;
|
||||
import run.halo.app.web.controller.support.PageJacksonSerializer;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -25,8 +20,11 @@ import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
|
|||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
|
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
|
||||
import run.halo.app.config.properties.HaloProperties;
|
||||
import run.halo.app.factory.StringToEnumConverterFactory;
|
||||
import run.halo.app.model.support.HaloConst;
|
||||
import run.halo.app.security.resolver.AuthenticationArgumentResolver;
|
||||
import run.halo.app.web.controller.support.PageJacksonSerializer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -43,6 +41,8 @@ import java.util.List;
|
|||
@PropertySource(value = "classpath:application.yaml", ignoreResourceNotFound = true, encoding = "UTF-8")
|
||||
public class WebMvcAutoConfiguration implements WebMvcConfigurer {
|
||||
|
||||
private static final String FILE_PROTOCOL = "file:///";
|
||||
|
||||
@Autowired
|
||||
private HaloProperties haloProperties;
|
||||
|
||||
|
@ -76,13 +76,13 @@ public class WebMvcAutoConfiguration implements WebMvcConfigurer {
|
|||
.addResourceLocations("classpath:/static/");
|
||||
registry.addResourceHandler("/**")
|
||||
.addResourceLocations("classpath:/templates/themes/")
|
||||
.addResourceLocations("file:///" + System.getProperties().getProperty("user.home") + "/halo/templates/themes/");
|
||||
.addResourceLocations(FILE_PROTOCOL + haloProperties.getWorkDir() + "templates/themes/");
|
||||
registry.addResourceHandler("/upload/**")
|
||||
.addResourceLocations("file:///" + System.getProperties().getProperty("user.home") + "/halo/upload/");
|
||||
.addResourceLocations(FILE_PROTOCOL + haloProperties.getWorkDir() + "upload/");
|
||||
registry.addResourceHandler("/favicon.ico")
|
||||
.addResourceLocations("classpath:/static/halo-admin/images/favicon.ico");
|
||||
registry.addResourceHandler("/backup/**")
|
||||
.addResourceLocations("file:///" + System.getProperties().getProperty("user.home") + "/halo/backup/");
|
||||
.addResourceLocations(FILE_PROTOCOL + haloProperties.getWorkDir() + "backup/");
|
||||
registry.addResourceHandler("/admin/**")
|
||||
.addResourceLocations("classpath:/static/admin/");
|
||||
|
||||
|
@ -108,7 +108,7 @@ public class WebMvcAutoConfiguration implements WebMvcConfigurer {
|
|||
@Bean
|
||||
public FreeMarkerConfigurer freemarkerConfig() {
|
||||
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
|
||||
configurer.setTemplateLoaderPaths("file:///" + System.getProperties().getProperty("user.home") + "/halo/templates/", "classpath:/templates/");
|
||||
configurer.setTemplateLoaderPaths(FILE_PROTOCOL + haloProperties.getWorkDir() + "templates/", "classpath:/templates/");
|
||||
configurer.setDefaultEncoding("UTF-8");
|
||||
return configurer;
|
||||
}
|
||||
|
|
|
@ -1,16 +1,5 @@
|
|||
package run.halo.app.listener;
|
||||
|
||||
import run.halo.app.config.properties.HaloProperties;
|
||||
import run.halo.app.model.entity.User;
|
||||
import run.halo.app.model.params.UserParam;
|
||||
import run.halo.app.model.properties.BlogProperties;
|
||||
import run.halo.app.model.properties.PrimaryProperties;
|
||||
import run.halo.app.model.support.HaloConst;
|
||||
import run.halo.app.model.support.Theme;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.ThemeService;
|
||||
import run.halo.app.service.UserService;
|
||||
import run.halo.app.utils.HaloUtils;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
@ -22,12 +11,16 @@ import org.springframework.context.ApplicationContext;
|
|||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.util.ResourceUtils;
|
||||
import run.halo.app.config.properties.HaloProperties;
|
||||
import run.halo.app.model.entity.User;
|
||||
import run.halo.app.model.params.UserParam;
|
||||
import run.halo.app.model.properties.BlogProperties;
|
||||
import run.halo.app.model.properties.PrimaryProperties;
|
||||
import run.halo.app.model.support.HaloConst;
|
||||
import run.halo.app.model.support.Theme;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.ThemeService;
|
||||
import run.halo.app.service.UserService;
|
||||
import run.halo.app.utils.HaloUtils;
|
||||
|
||||
import java.io.File;
|
||||
|
@ -36,9 +29,6 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static run.halo.app.model.support.HaloConst.ACTIVATED_THEME_NAME;
|
||||
import static run.halo.app.model.support.HaloConst.DEFAULT_THEME_NAME;
|
||||
|
||||
/**
|
||||
* The method executed after the application is started.
|
||||
*
|
||||
|
@ -75,7 +65,7 @@ public class StartedListener implements ApplicationListener<ApplicationStartedEv
|
|||
// save halo version to database
|
||||
this.cacheThemes();
|
||||
this.cacheOwo();
|
||||
this.getActiveTheme();
|
||||
this.cacheActiveTheme();
|
||||
this.printStartInfo();
|
||||
this.initThemes();
|
||||
|
||||
|
@ -119,13 +109,11 @@ public class StartedListener implements ApplicationListener<ApplicationStartedEv
|
|||
/**
|
||||
* Get active theme
|
||||
*/
|
||||
private void getActiveTheme() {
|
||||
ACTIVATED_THEME_NAME = optionService.getByProperty(PrimaryProperties.THEME).orElse(DEFAULT_THEME_NAME);
|
||||
|
||||
private void cacheActiveTheme() {
|
||||
try {
|
||||
configuration.setSharedVariable("themeName", ACTIVATED_THEME_NAME);
|
||||
configuration.setSharedVariable("themeName", optionService.getTheme());
|
||||
} catch (TemplateModelException e) {
|
||||
e.printStackTrace();
|
||||
log.error("", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,11 +24,6 @@ public class HaloConst {
|
|||
*/
|
||||
public final static String DEFAULT_THEME_NAME = "anatole";
|
||||
|
||||
/**
|
||||
* Activated theme name.
|
||||
*/
|
||||
public static String ACTIVATED_THEME_NAME = "anatole";
|
||||
|
||||
/**
|
||||
* version constant
|
||||
*/
|
||||
|
|
|
@ -1,13 +1,5 @@
|
|||
package run.halo.app.service;
|
||||
|
||||
import run.halo.app.exception.MissingPropertyException;
|
||||
import run.halo.app.model.dto.OptionOutputDTO;
|
||||
import run.halo.app.model.entity.Option;
|
||||
import run.halo.app.model.enums.OptionSource;
|
||||
import run.halo.app.model.enums.ValueEnum;
|
||||
import run.halo.app.model.params.OptionParam;
|
||||
import run.halo.app.model.properties.PropertyEnum;
|
||||
import run.halo.app.service.base.CrudService;
|
||||
import com.qiniu.common.Zone;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
@ -16,6 +8,7 @@ import run.halo.app.exception.MissingPropertyException;
|
|||
import run.halo.app.model.dto.OptionOutputDTO;
|
||||
import run.halo.app.model.entity.Option;
|
||||
import run.halo.app.model.enums.OptionSource;
|
||||
import run.halo.app.model.enums.ValueEnum;
|
||||
import run.halo.app.model.params.OptionParam;
|
||||
import run.halo.app.model.properties.PropertyEnum;
|
||||
import run.halo.app.service.base.CrudService;
|
||||
|
@ -66,6 +59,16 @@ public interface OptionService extends CrudService<Option, Integer> {
|
|||
@Transactional
|
||||
void save(List<OptionParam> optionParams, @NonNull OptionSource source);
|
||||
|
||||
/**
|
||||
* Saves a property.
|
||||
*
|
||||
* @param property must not be null
|
||||
* @param value could be null
|
||||
* @param source must not be null
|
||||
*/
|
||||
@Transactional
|
||||
void saveProperty(@NonNull PropertyEnum property, String value, @NonNull OptionSource source);
|
||||
|
||||
/**
|
||||
* Saves blog properties.
|
||||
*
|
||||
|
@ -276,4 +279,13 @@ public interface OptionService extends CrudService<Option, Integer> {
|
|||
*/
|
||||
@NonNull
|
||||
Locale getLocale();
|
||||
|
||||
/**
|
||||
* Gets current active theme.
|
||||
*
|
||||
* @return current active theme
|
||||
*/
|
||||
@NonNull
|
||||
String getTheme();
|
||||
|
||||
}
|
||||
|
|
|
@ -124,6 +124,7 @@ public interface PostService extends CrudService<Post, Integer> {
|
|||
* @param url post url.
|
||||
* @return Post
|
||||
*/
|
||||
@NonNull
|
||||
Post getByUrl(@NonNull String url);
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package run.halo.app.service;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
import run.halo.app.model.dto.TagOutputDTO;
|
||||
import run.halo.app.model.entity.Tag;
|
||||
import run.halo.app.service.base.CrudService;
|
||||
import org.springframework.lang.NonNull;
|
||||
import run.halo.app.service.base.CrudService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
|
@ -119,4 +119,14 @@ public interface ThemeService {
|
|||
*/
|
||||
@Nullable
|
||||
Object fetchConfig(@NonNull String themeName);
|
||||
|
||||
/**
|
||||
* Render a theme page.
|
||||
*
|
||||
* @param pageName must not be blank
|
||||
* @return full path of the theme page
|
||||
*/
|
||||
@NonNull
|
||||
String render(@NonNull String pageName);
|
||||
|
||||
}
|
||||
|
|
|
@ -24,6 +24,8 @@ import java.util.Map;
|
|||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static run.halo.app.model.support.HaloConst.DEFAULT_THEME_NAME;
|
||||
|
||||
/**
|
||||
* OptionService implementation class
|
||||
*
|
||||
|
@ -102,6 +104,14 @@ public class OptionServiceImpl extends AbstractCrudService<Option, Integer> impl
|
|||
optionParams.forEach(optionParam -> save(optionParam.getOptionKey(), optionParam.getOptionValue(), source));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveProperty(PropertyEnum property, String value, OptionSource source) {
|
||||
Assert.notNull(property, "Property must not be null");
|
||||
Assert.notNull(source, "Option source must not be null");
|
||||
|
||||
save(property.getValue(), value, source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveProperties(Map<? extends PropertyEnum, String> properties, OptionSource source) {
|
||||
if (CollectionUtils.isEmpty(properties)) {
|
||||
|
@ -280,4 +290,9 @@ public class OptionServiceImpl extends AbstractCrudService<Option, Integer> impl
|
|||
}
|
||||
}).orElseGet(Locale::getDefault);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTheme() {
|
||||
return getByProperty(PrimaryProperties.THEME).orElse(DEFAULT_THEME_NAME);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import cn.hutool.setting.dialect.Props;
|
|||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
import run.halo.app.config.properties.HaloProperties;
|
||||
|
@ -17,6 +18,7 @@ import run.halo.app.model.support.HaloConst;
|
|||
import run.halo.app.model.support.Theme;
|
||||
import run.halo.app.model.support.ThemeFile;
|
||||
import run.halo.app.model.support.ThemeProperties;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.ThemeService;
|
||||
import run.halo.app.utils.FilenameUtils;
|
||||
|
||||
|
@ -47,15 +49,30 @@ public class ThemeServiceImpl implements ThemeService {
|
|||
*/
|
||||
private static String[] FILTER_FILES = {".git", ".DS_Store", "theme.properties"};
|
||||
|
||||
/**
|
||||
* Theme folder location.
|
||||
*/
|
||||
private final static String THEME_FOLDER = "templates/themes";
|
||||
|
||||
/**
|
||||
* Configuration file name.
|
||||
*/
|
||||
private final static String[] OPTIONS_NAMES = {"options.yaml", "options.yml"};
|
||||
|
||||
/**
|
||||
* Render template.
|
||||
*/
|
||||
private final static String RENDER_TEMPLATE = "themes/%s/%s";
|
||||
|
||||
private final Path workDir;
|
||||
|
||||
private final ObjectMapper yamlMapper;
|
||||
|
||||
public ThemeServiceImpl(HaloProperties haloProperties) {
|
||||
private final OptionService optionService;
|
||||
|
||||
public ThemeServiceImpl(HaloProperties haloProperties,
|
||||
OptionService optionService) {
|
||||
this.optionService = optionService;
|
||||
yamlMapper = new ObjectMapper(new YAMLFactory());
|
||||
workDir = Paths.get(haloProperties.getWorkDir(), THEME_FOLDER);
|
||||
}
|
||||
|
@ -181,7 +198,7 @@ public class ThemeServiceImpl implements ThemeService {
|
|||
*/
|
||||
@Override
|
||||
public boolean isTemplateExist(String template) {
|
||||
StrBuilder templatePath = new StrBuilder(HaloConst.ACTIVATED_THEME_NAME);
|
||||
StrBuilder templatePath = new StrBuilder(getThemeName());
|
||||
templatePath.append("/");
|
||||
templatePath.append(template);
|
||||
File file = new File(getThemeBasePath(), templatePath.toString());
|
||||
|
@ -304,4 +321,19 @@ public class ThemeServiceImpl implements ThemeService {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String render(String pageName) {
|
||||
return String.format(RENDER_TEMPLATE, optionService.getTheme(), pageName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets theme name.
|
||||
*
|
||||
* @return theme name.
|
||||
*/
|
||||
@NonNull
|
||||
private String getThemeName() {
|
||||
return optionService.getTheme();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package run.halo.app.utils;
|
||||
|
||||
import cn.hutool.core.text.StrBuilder;
|
||||
import io.github.biezhi.ome.OhMyEmail;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
@ -19,7 +18,6 @@ import java.nio.file.Files;
|
|||
import java.nio.file.Paths;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.Date;
|
||||
import java.util.Properties;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
|
@ -33,6 +31,12 @@ import java.util.UUID;
|
|||
@Slf4j
|
||||
public class HaloUtils {
|
||||
|
||||
/**
|
||||
* Time format.
|
||||
*
|
||||
* @param totalSeconds seconds
|
||||
* @return formatted time
|
||||
*/
|
||||
@NonNull
|
||||
public static String timeFormat(long totalSeconds) {
|
||||
if (totalSeconds <= 0) {
|
||||
|
|
|
@ -6,17 +6,13 @@ import io.swagger.annotations.ApiOperation;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
import run.halo.app.model.enums.OptionSource;
|
||||
import run.halo.app.model.properties.PrimaryProperties;
|
||||
import run.halo.app.model.properties.PropertyEnum;
|
||||
import run.halo.app.model.support.BaseResponse;
|
||||
import run.halo.app.model.support.HaloConst;
|
||||
import run.halo.app.model.support.Theme;
|
||||
import run.halo.app.model.support.ThemeFile;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.ThemeService;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Theme controller.
|
||||
|
@ -60,7 +56,7 @@ public class ThemeController {
|
|||
*/
|
||||
@GetMapping("files")
|
||||
public List<ThemeFile> listFiles() {
|
||||
return themeService.listThemeFolderBy(HaloConst.ACTIVATED_THEME_NAME);
|
||||
return themeService.listThemeFolderBy(optionService.getTheme());
|
||||
}
|
||||
|
||||
@GetMapping("files/content")
|
||||
|
@ -76,7 +72,7 @@ public class ThemeController {
|
|||
|
||||
@GetMapping("files/custom")
|
||||
public List<String> customTemplate() {
|
||||
return themeService.getCustomTpl(HaloConst.ACTIVATED_THEME_NAME);
|
||||
return themeService.getCustomTpl(optionService.getTheme());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -86,13 +82,10 @@ public class ThemeController {
|
|||
* @throws TemplateModelException TemplateModelException
|
||||
*/
|
||||
@GetMapping(value = "active")
|
||||
@ApiOperation("Active theme")
|
||||
public void active(@RequestParam(name = "theme", defaultValue = "anatole") String theme) throws TemplateModelException {
|
||||
Map<PropertyEnum, String> properties = new HashMap<>(1);
|
||||
properties.put(PrimaryProperties.THEME, theme);
|
||||
// TODO Refactor: saveProperties => saveProperty
|
||||
optionService.saveProperties(properties, OptionSource.SYSTEM);
|
||||
HaloConst.ACTIVATED_THEME_NAME = theme;
|
||||
@ApiOperation("Active a theme")
|
||||
public void active(String theme) throws TemplateModelException {
|
||||
// TODO Check existence of the theme
|
||||
optionService.saveProperty(PrimaryProperties.THEME, theme, OptionSource.SYSTEM);
|
||||
configuration.setSharedVariable("themeName", theme);
|
||||
configuration.setSharedVariable("options", optionService.listOptions());
|
||||
}
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
package run.halo.app.web.controller.content;
|
||||
|
||||
import run.halo.app.model.entity.Category;
|
||||
import run.halo.app.service.CategoryService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.web.SortDefault;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
@ -14,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||
import run.halo.app.model.entity.Category;
|
||||
import run.halo.app.service.CategoryService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import run.halo.app.service.ThemeService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -26,16 +22,20 @@ import static org.springframework.data.domain.Sort.Direction.DESC;
|
|||
*/
|
||||
@Controller
|
||||
@RequestMapping(value = "/categories")
|
||||
public class ContentCategoryController extends BaseContentController {
|
||||
public class ContentCategoryController {
|
||||
|
||||
private final CategoryService categoryService;
|
||||
|
||||
private final PostService postService;
|
||||
|
||||
private final ThemeService themeService;
|
||||
|
||||
public ContentCategoryController(CategoryService categoryService,
|
||||
PostService postService) {
|
||||
PostService postService,
|
||||
ThemeService themeService) {
|
||||
this.categoryService = categoryService;
|
||||
this.postService = postService;
|
||||
this.themeService = themeService;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ public class ContentCategoryController extends BaseContentController {
|
|||
public String categories(Model model) {
|
||||
final List<Category> categories = categoryService.listAll();
|
||||
model.addAttribute("categories", categories);
|
||||
return this.render("categories");
|
||||
return themeService.render("categories");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -77,6 +77,7 @@ public class ContentCategoryController extends BaseContentController {
|
|||
@PathVariable("slugName") String slugName,
|
||||
@PathVariable("page") Integer page,
|
||||
@SortDefault(sort = "postDate", direction = DESC) Sort sort) {
|
||||
// TODO Complete this api in the future
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,5 @@
|
|||
package run.halo.app.web.controller.content;
|
||||
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.enums.PostType;
|
||||
import run.halo.app.model.vo.PostListVO;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import cn.hutool.core.util.PageUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.domain.Page;
|
||||
|
@ -20,8 +14,9 @@ import org.springframework.web.bind.annotation.PathVariable;
|
|||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.vo.PostListVO;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import run.halo.app.service.ThemeService;
|
||||
|
||||
import static org.springframework.data.domain.Sort.Direction.DESC;
|
||||
|
||||
|
@ -34,16 +29,20 @@ import static org.springframework.data.domain.Sort.Direction.DESC;
|
|||
@Slf4j
|
||||
@Controller
|
||||
@RequestMapping
|
||||
public class ContentIndexController extends BaseContentController {
|
||||
public class ContentIndexController {
|
||||
|
||||
private final PostService postService;
|
||||
|
||||
private final OptionService optionService;
|
||||
|
||||
private final ThemeService themeService;
|
||||
|
||||
public ContentIndexController(PostService postService,
|
||||
OptionService optionService) {
|
||||
OptionService optionService,
|
||||
ThemeService themeService) {
|
||||
this.postService = postService;
|
||||
this.optionService = optionService;
|
||||
this.themeService = themeService;
|
||||
}
|
||||
|
||||
|
||||
|
@ -80,6 +79,6 @@ public class ContentIndexController extends BaseContentController {
|
|||
model.addAttribute("is_index", true);
|
||||
model.addAttribute("posts", posts);
|
||||
model.addAttribute("rainbow", rainbow);
|
||||
return this.render("index");
|
||||
return themeService.render("index");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,11 @@
|
|||
package run.halo.app.web.controller.content;
|
||||
|
||||
import run.halo.app.model.entity.Comment;
|
||||
import run.halo.app.model.entity.Gallery;
|
||||
import run.halo.app.model.entity.Post;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.enums.PostType;
|
||||
import run.halo.app.service.CommentService;
|
||||
import run.halo.app.service.GalleryService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import run.halo.app.exception.NotFoundException;
|
||||
import run.halo.app.model.entity.Comment;
|
||||
import run.halo.app.model.entity.Gallery;
|
||||
import run.halo.app.model.entity.Post;
|
||||
|
@ -21,7 +13,7 @@ import run.halo.app.model.enums.PostStatus;
|
|||
import run.halo.app.service.CommentService;
|
||||
import run.halo.app.service.GalleryService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import run.halo.app.service.ThemeService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -30,7 +22,7 @@ import java.util.List;
|
|||
* @date : 2019-03-21
|
||||
*/
|
||||
@Controller
|
||||
public class ContentPageController extends BaseContentController {
|
||||
public class ContentPageController {
|
||||
|
||||
private final GalleryService galleryService;
|
||||
|
||||
|
@ -38,10 +30,16 @@ public class ContentPageController extends BaseContentController {
|
|||
|
||||
private final CommentService commentService;
|
||||
|
||||
public ContentPageController(GalleryService galleryService, PostService postService, CommentService commentService) {
|
||||
private final ThemeService themeService;
|
||||
|
||||
public ContentPageController(GalleryService galleryService,
|
||||
PostService postService,
|
||||
CommentService commentService,
|
||||
ThemeService themeService) {
|
||||
this.galleryService = galleryService;
|
||||
this.postService = postService;
|
||||
this.commentService = commentService;
|
||||
this.themeService = themeService;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -53,7 +51,7 @@ public class ContentPageController extends BaseContentController {
|
|||
public String gallery(Model model) {
|
||||
final List<Gallery> galleries = galleryService.listAll();
|
||||
model.addAttribute("galleries", galleries);
|
||||
return this.render("gallery");
|
||||
return themeService.render("gallery");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -63,7 +61,7 @@ public class ContentPageController extends BaseContentController {
|
|||
*/
|
||||
@GetMapping(value = "/links")
|
||||
public String links() {
|
||||
return this.render("links");
|
||||
return themeService.render("links");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -78,10 +76,15 @@ public class ContentPageController extends BaseContentController {
|
|||
@RequestParam(value = "cp", defaultValue = "1") Integer cp,
|
||||
Model model) {
|
||||
final Post post = postService.getByUrl(url);
|
||||
if (null == post || !post.getStatus().equals(PostStatus.PUBLISHED)) {
|
||||
return this.renderNotFound();
|
||||
|
||||
if (!post.getStatus().equals(PostStatus.PUBLISHED)) {
|
||||
throw new NotFoundException("The post isn't published").setErrorData(url);
|
||||
}
|
||||
|
||||
List<Comment> comments;
|
||||
|
||||
// TODO Complete this api
|
||||
|
||||
// if (StrUtil.equals(OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getValue()), "true") || OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getValue()) == null) {
|
||||
// comments = commentService.findCommentsByPostAndCommentStatus(post, CommentStatus.PUBLISHED.getValue());
|
||||
// } else {
|
||||
|
@ -106,6 +109,6 @@ public class ContentPageController extends BaseContentController {
|
|||
// if (StrUtil.isNotEmpty(post.getCustomTpl())) {
|
||||
// return this.render(post.getCustomTpl());
|
||||
// }
|
||||
return this.render("page");
|
||||
return themeService.render("page");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,5 @@
|
|||
package run.halo.app.web.controller.content;
|
||||
|
||||
import run.halo.app.model.entity.Tag;
|
||||
import run.halo.app.model.vo.PostListVO;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.service.TagService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
@ -18,9 +12,10 @@ import org.springframework.web.bind.annotation.PathVariable;
|
|||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import run.halo.app.model.entity.Tag;
|
||||
import run.halo.app.model.vo.PostListVO;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.PostService;
|
||||
import run.halo.app.service.TagService;
|
||||
import run.halo.app.web.controller.content.base.BaseContentController;
|
||||
import run.halo.app.service.ThemeService;
|
||||
|
||||
import static org.springframework.data.domain.Sort.Direction.DESC;
|
||||
|
||||
|
@ -32,7 +27,7 @@ import static org.springframework.data.domain.Sort.Direction.DESC;
|
|||
*/
|
||||
@Controller
|
||||
@RequestMapping(value = "/tags")
|
||||
public class ContentTagController extends BaseContentController {
|
||||
public class ContentTagController {
|
||||
|
||||
private final TagService tagService;
|
||||
|
||||
|
@ -40,12 +35,16 @@ public class ContentTagController extends BaseContentController {
|
|||
|
||||
private final OptionService optionService;
|
||||
|
||||
private final ThemeService themeService;
|
||||
|
||||
public ContentTagController(TagService tagService,
|
||||
PostService postService,
|
||||
OptionService optionService) {
|
||||
OptionService optionService,
|
||||
ThemeService themeService) {
|
||||
this.tagService = tagService;
|
||||
this.postService = postService;
|
||||
this.optionService = optionService;
|
||||
this.themeService = themeService;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,7 +54,7 @@ public class ContentTagController extends BaseContentController {
|
|||
*/
|
||||
@GetMapping
|
||||
public String tags() {
|
||||
return this.render("tags");
|
||||
return themeService.render("tags");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -84,20 +83,18 @@ public class ContentTagController extends BaseContentController {
|
|||
@PathVariable("slugName") String slugName,
|
||||
@PathVariable("page") Integer page,
|
||||
@SortDefault(sort = "postDate", direction = DESC) Sort sort) {
|
||||
final Tag tag = tagService.getBySlugNameOfNonNull(slugName);
|
||||
if (null == tag) {
|
||||
return this.renderNotFound();
|
||||
}
|
||||
int size = optionService.getPostPageSize();
|
||||
final Pageable pageable = PageRequest.of(page - 1, size, sort);
|
||||
Tag tag = tagService.getBySlugNameOfNonNull(slugName);
|
||||
|
||||
int size = optionService.getPostPageSize();
|
||||
Pageable pageable = PageRequest.of(page - 1, size, sort);
|
||||
|
||||
Page<PostListVO> posts;
|
||||
// TODO get posts by tag
|
||||
final Page<PostListVO> posts;
|
||||
//final int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3);
|
||||
// model.addAttribute("is_tags", true);
|
||||
// model.addAttribute("posts", posts);
|
||||
// model.addAttribute("rainbow", rainbow);
|
||||
// model.addAttribute("tag", tag);
|
||||
return this.render("tag");
|
||||
return themeService.render("tag");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
package run.halo.app.web.controller.content.base;
|
||||
|
||||
import cn.hutool.core.text.StrBuilder;
|
||||
|
||||
import static run.halo.app.model.support.HaloConst.ACTIVATED_THEME_NAME;
|
||||
|
||||
/**
|
||||
* Content base Controller
|
||||
*
|
||||
|
@ -12,26 +8,4 @@ import static run.halo.app.model.support.HaloConst.ACTIVATED_THEME_NAME;
|
|||
*/
|
||||
public abstract class BaseContentController {
|
||||
|
||||
/**
|
||||
* Render page by template name
|
||||
*
|
||||
* @param pageName pageName
|
||||
* @return template path
|
||||
*/
|
||||
public String render(String pageName) {
|
||||
final StrBuilder themeStr = new StrBuilder("themes/");
|
||||
themeStr.append(ACTIVATED_THEME_NAME);
|
||||
themeStr.append("/");
|
||||
themeStr.append(pageName);
|
||||
return themeStr.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect to 404
|
||||
*
|
||||
* @return redirect:/404
|
||||
*/
|
||||
public String renderNotFound() {
|
||||
return "redirect:/404";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
package run.halo.app.web.controller.core;
|
||||
|
||||
import run.halo.app.model.entity.User;
|
||||
import run.halo.app.model.support.HaloConst;
|
||||
import run.halo.app.service.ThemeService;
|
||||
import cn.hutool.core.text.StrBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.web.servlet.error.ErrorController;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import run.halo.app.model.entity.User;
|
||||
import run.halo.app.model.support.HaloConst;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.ThemeService;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -35,8 +33,16 @@ public class CommonController implements ErrorController {
|
|||
|
||||
private static final String ADMIN_URL = "/admin";
|
||||
|
||||
@Autowired
|
||||
private ThemeService themeService;
|
||||
private final ThemeService themeService;
|
||||
|
||||
private final OptionService optionService;
|
||||
|
||||
public CommonController(ThemeService themeService,
|
||||
OptionService optionService) {
|
||||
this.themeService = themeService;
|
||||
this.optionService = optionService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handle error
|
||||
|
@ -108,7 +114,7 @@ public class CommonController implements ErrorController {
|
|||
return "common/error/404";
|
||||
}
|
||||
StrBuilder path = new StrBuilder("themes/");
|
||||
path.append(HaloConst.ACTIVATED_THEME_NAME);
|
||||
path.append(optionService.getTheme());
|
||||
path.append("/404");
|
||||
return path.toString();
|
||||
}
|
||||
|
@ -119,12 +125,12 @@ public class CommonController implements ErrorController {
|
|||
* @return template path:
|
||||
*/
|
||||
@GetMapping(value = "/500")
|
||||
public String contentInternalError() throws FileNotFoundException {
|
||||
public String contentInternalError() {
|
||||
if (!themeService.isTemplateExist(INTERNAL_ERROR_TEMPLATE)) {
|
||||
return "common/error/500";
|
||||
}
|
||||
StrBuilder path = new StrBuilder("themes/");
|
||||
path.append(HaloConst.ACTIVATED_THEME_NAME);
|
||||
path.append(optionService.getTheme());
|
||||
path.append("/500");
|
||||
return path.toString();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue