package com.tale.init;
import com.blade.config.BConfig;
import com.blade.context.WebContextListener;
import com.blade.ioc.BeanProcessor;
import com.blade.ioc.Ioc;
import com.blade.ioc.annotation.Inject;
import com.blade.jdbc.ActiveRecord;
import com.blade.jdbc.ar.SampleActiveRecord;
import com.blade.kit.FileKit;
import com.blade.kit.StringKit;
import com.blade.mvc.view.ViewSettings;
import com.blade.mvc.view.template.JetbrickTemplateEngine;
import com.tale.controller.BaseController;
import com.tale.controller.admin.AttachController;
import com.tale.dto.Types;
import com.tale.ext.AdminCommons;
import com.tale.ext.Commons;
import com.tale.ext.JetTag;
import com.tale.ext.Theme;
import com.tale.model.ExtSql2o;
import com.tale.service.OptionsService;
import com.tale.service.SiteService;
import com.tale.utils.RewriteUtils;
import jetbrick.template.JetGlobalContext;
import jetbrick.template.resolver.GlobalResolver;
import javax.servlet.ServletContext;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Tale初始化进程
*
* @author biezhi
*/
public class WebContext implements BeanProcessor, WebContextListener {
@Inject
private OptionsService optionsService;
@Override
public void init(BConfig bConfig, ServletContext sec) {
JetbrickTemplateEngine templateEngine = new JetbrickTemplateEngine();
List<String> macros = new ArrayList<>(8);
macros.add("/comm/macros.html");
// 扫描主题下面的所有自定义宏
String themeDir = AttachController.CLASSPATH + "templates/themes";
try {
themeDir = new URI(themeDir).getPath();
} catch (URISyntaxException e) {
e.printStackTrace();
}
File[] dir = new File(themeDir).listFiles();
for (File f : dir) {
if (f.isDirectory() && FileKit.exist(f.getPath() + "/macros.html")) {
String macroName = "/themes/" + f.getName() + "/macros.html";
macros.add(macroName);
}
}
StringBuffer sbuf = new StringBuffer();
macros.forEach(s -> sbuf.append(',').append(s));
templateEngine.addConfig("jetx.import.macros", sbuf.substring(1));
GlobalResolver resolver = templateEngine.getGlobalResolver();
resolver.registerFunctions(Commons.class);
resolver.registerFunctions(Theme.class);
resolver.registerFunctions(AdminCommons.class);
resolver.registerTags(JetTag.class);
JetGlobalContext context = templateEngine.getGlobalContext();
context.set("version", bConfig.config().get("app.version", "v1.0"));
ViewSettings.$().templateEngine(templateEngine);
TaleConst.MAX_FILE_SIZE = bConfig.config().getInt("app.max-file-size", 20480);
TaleConst.AES_SALT = bConfig.config().get("app.salt", "012c456789abcdef");
TaleConst.OPTIONS.addAll(optionsService.getOptions());
String ips = TaleConst.OPTIONS.get(Types.BLOCK_IPS, "");
if (StringKit.isNotBlank(ips)) {
TaleConst.BLOCK_IPS.addAll(Arrays.asList(StringKit.split(ips, ",")));
}
if (FileKit.exist(AttachController.CLASSPATH + "install.lock")) {
TaleConst.INSTALL = Boolean.TRUE;
}
String db_rewrite = TaleConst.OPTIONS.get("rewrite_url", "");
if(db_rewrite.length() > 0){
RewriteUtils.rewrite(db_rewrite);
}
BaseController.THEME = "themes/" + Commons.site_option("site_theme");
TaleConst.BCONF = bConfig.config();
}
@Override
public void register(Ioc ioc) {
SqliteJdbc.importSql();
ExtSql2o sql2o = new ExtSql2o(SqliteJdbc.DB_SRC);
ActiveRecord activeRecord = new SampleActiveRecord(sql2o);
ioc.addBean(activeRecord);
Commons.setSiteService(ioc.getBean(SiteService.class));
}
}