diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java
index 553b0e2..a8735c2 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java
@@ -1,14 +1,18 @@
package vip.fuck.sm.plugins.cms.config;
+import cn.hutool.extra.template.engine.enjoy.EnjoyEngine;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.DbKit;
import com.jfinal.plugin.activerecord.solon.annotation.Db;
+import com.jfinal.template.ext.spring.JFinalView;
import com.zaxxer.hikari.HikariDataSource;
import org.noear.solon.Solon;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;
+import org.noear.solon.view.enjoy.EnjoyRender;
import vip.fuck.sm.plugins.cms.entity._MappingKit;
+import vip.fuck.sm.plugins.cms.util.JFinal;
import javax.sql.DataSource;
@@ -29,7 +33,13 @@ public class Configxv {
//启用开发或调试模式(可以打印sql)
if (Solon.cfg().isDebugMode() || Solon.cfg().isFilesMode()) {
arp.setDevMode(true);
+ arp.setShowSql(true);
}
}
+ @Bean
+ public void putbase(@Inject EnjoyRender enjoyRender){
+ enjoyRender.putVariable("base", JFinal.getContextPath());
+ }
+
}
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/AdminController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/AdminController.java
index 09dde81..d1496dd 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/AdminController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/AdminController.java
@@ -31,7 +31,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/admin")
+@Mapping("/cms/admin/admin")
public class AdminController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java
index 13411b4..76e49e8 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java
@@ -231,7 +231,19 @@ public class BaseController {
}
return null;
}
-
+
+ protected String fixedSubfix(String view){
+ if(view!=null){
+ view = view
+ .replaceAll("\\.html\\.shtm$",CommonAttribute.VIEW_EXTENSION)
+ .replaceAll("\\.html$",CommonAttribute.VIEW_EXTENSION);
+ if(!view.endsWith(CommonAttribute.VIEW_EXTENSION)){
+ view+=CommonAttribute.VIEW_EXTENSION;
+ }
+ }
+ return view;
+ }
+
/**
* 获取页面
*
@@ -239,12 +251,13 @@ public class BaseController {
*/
// @NotAction
public ModelAndView getView(String view){
+ view = fixedSubfix(view);
Site currSite = getCurrentSite();
if (ObjectUtil.isEmpty(currSite)) {
Site currentSite = new Site().dao().findById(1);
getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite);
}
- return new ModelAndView(CommonAttribute.ADMIN_PATH+view+CommonAttribute.VIEW_EXTENSION);
+ return new ModelAndView(CommonAttribute.ADMIN_PATH+view);
}
public void render(String view){
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CacheController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CacheController.java
index d310104..7690b2f 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CacheController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CacheController.java
@@ -21,7 +21,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/cache")
+@Mapping("/cms/admin/cache")
public class CacheController extends BaseController {
@Inject
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CategoryController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CategoryController.java
index c4b2d9c..0fc95b3 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CategoryController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CategoryController.java
@@ -31,7 +31,7 @@ import java.util.*;
*
*/
@Controller
-@Mapping("/admin/category")
+@Mapping("/cms/admin/category")
public class CategoryController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CompanyController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CompanyController.java
index 92bf578..471b676 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CompanyController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/CompanyController.java
@@ -23,7 +23,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/company")
+@Mapping("/cms/admin/company")
public class CompanyController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ContentController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ContentController.java
index 679fdc6..e5acc24 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ContentController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ContentController.java
@@ -26,7 +26,7 @@ import java.util.*;
*
*/
@Controller
-@Mapping("/admin/content")
+@Mapping("/cms/admin/content")
public class ContentController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DatabaseController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DatabaseController.java
index 8d50ed4..c23e259 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DatabaseController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DatabaseController.java
@@ -18,7 +18,7 @@ import java.util.List;
*
*/
@Controller
-@Mapping("/admin/database")
+@Mapping("/cms/admin/database")
public class DatabaseController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivController.java
index 29c59c4..5c5de38 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivController.java
@@ -20,7 +20,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/div")
+@Mapping("/cms/admin/div")
public class DivController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivDataController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivDataController.java
index ae1e271..97ca982 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivDataController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/DivDataController.java
@@ -26,7 +26,7 @@ import java.util.List;
*
*/
@Controller
-@Mapping("/admin/div_data")
+@Mapping("/cms/admin/div_data")
public class DivDataController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ErrorController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ErrorController.java
index a4439c9..f410e90 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ErrorController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ErrorController.java
@@ -13,7 +13,7 @@ import vip.fuck.sm.plugins.cms.CommonAttribute;
*
*/
@Controller
-@Mapping("/admin/error")
+@Mapping("/cms/admin/error")
public class ErrorController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FileController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FileController.java
index b152a7a..f32dcdb 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FileController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FileController.java
@@ -33,7 +33,7 @@ import java.util.UUID;
*
*/
@Controller
-@Mapping("/admin/file")
+@Mapping("/cms/admin/file")
public class FileController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FriendLinkController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FriendLinkController.java
index dd10c40..062baae 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FriendLinkController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/FriendLinkController.java
@@ -21,7 +21,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/friend_link")
+@Mapping("/cms/admin/friend_link")
public class FriendLinkController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/GuestbookController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/GuestbookController.java
index e073677..eeb4497 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/GuestbookController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/GuestbookController.java
@@ -20,7 +20,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/guestbook")
+@Mapping("/cms/admin/guestbook")
public class GuestbookController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/HtmlController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/HtmlController.java
index 46f8ab9..8a76bec 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/HtmlController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/HtmlController.java
@@ -28,7 +28,7 @@ import java.util.*;
*
*/
@Controller
-@Mapping("/admin/html")
+@Mapping("/cms/admin/html")
public class HtmlController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java
index 68d885c..4f8b78a 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java
@@ -6,10 +6,12 @@
package vip.fuck.sm.plugins.cms.controller.admin;
+import cn.hutool.core.util.ObjectUtil;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.BooleanUtils;
+import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
@@ -27,7 +29,7 @@ import java.util.Date;
*
*
*/
-@Mapping("/admin/index")
+@Mapping("/cms/admin/index")
@Controller
public class IndexController extends BaseController {
@@ -41,8 +43,8 @@ public class IndexController extends BaseController {
Integer siteId = getParaToInt("siteId");
if(siteId == null){
Admin currentAdmin = getCurrentAdmin();
- if(BooleanUtils.isFalse(currentAdmin.getRole().getIsSystem())
- && CollectionUtils.isEmpty(currentAdmin.getRole().getSiteIds())){
+ if(ObjectUtil.isEmpty(currentAdmin) || ObjectUtil.isEmpty(currentAdmin.getRole()) || BooleanUtils.isFalse(currentAdmin.getRole().getIsSystem())
+ || CollectionUtils.isEmpty(currentAdmin.getRole().getSiteIds())){
renderHtml("");
return;
}
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java
index a21e336..dea7e8a 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java
@@ -37,7 +37,7 @@ import java.util.Set;
*
*/
@Controller
-@Mapping("/admin/login")
+@Mapping("/cms/admin/login")
public class LoginController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LogoutController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LogoutController.java
index 7981618..845c10b 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LogoutController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LogoutController.java
@@ -14,7 +14,7 @@ import vip.fuck.sm.plugins.cms.entity.Site;
*
*/
@Controller
-@Mapping("/admin/logout")
+@Mapping("/cms/admin/logout")
public class LogoutController extends BaseController{
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/MenuController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/MenuController.java
index 20220d2..84acd08 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/MenuController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/MenuController.java
@@ -20,7 +20,7 @@ import java.util.List;
*
*/
@Controller
-@Mapping("/admin/menu")
+@Mapping("/cms/admin/menu")
public class MenuController extends BaseController{
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ModelController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ModelController.java
index a3364cf..c45fd80 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ModelController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ModelController.java
@@ -24,7 +24,7 @@ import java.util.HashMap;
*
*
*/
-@Mapping("/admin/model")
+@Mapping("/cms/admin/model")
@Controller
public class ModelController extends BaseController {
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/NavController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/NavController.java
index bef6f03..83fe261 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/NavController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/NavController.java
@@ -25,7 +25,7 @@ import java.util.List;
*
*
*/
-@Mapping("/admin/nav")
+@Mapping("/cms/admin/nav")
@Controller
public class NavController extends BaseController {
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ProfileController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ProfileController.java
index 19b9415..ade8c4d 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ProfileController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/ProfileController.java
@@ -20,7 +20,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/profile")
+@Mapping("/cms/admin/profile")
public class ProfileController extends BaseController {
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/RoleController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/RoleController.java
index de11131..799487b 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/RoleController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/RoleController.java
@@ -23,7 +23,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/role")
+@Mapping("/cms/admin/role")
public class RoleController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SetupController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SetupController.java
index 50032ea..33d6bae 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SetupController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SetupController.java
@@ -28,7 +28,7 @@ import java.util.Set;
*
*
*/
-@Mapping("/admin/setup")
+@Mapping("/cms/admin/setup")
@Controller
public class SetupController extends BaseController {
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SiteController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SiteController.java
index 87834e0..21c48fc 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SiteController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SiteController.java
@@ -24,7 +24,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/site")
+@Mapping("/cms/admin/site")
public class SiteController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SlideController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SlideController.java
index 94d2204..e080841 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SlideController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/SlideController.java
@@ -21,7 +21,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/slide")
+@Mapping("/cms/admin/slide")
public class SlideController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TagController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TagController.java
index c3ab5a2..241409e 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TagController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TagController.java
@@ -19,7 +19,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/tag")
+@Mapping("/cms/admin/tag")
public class TagController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TemplateController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TemplateController.java
index e526b94..248544d 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TemplateController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/TemplateController.java
@@ -24,7 +24,7 @@ import java.io.IOException;
*
*
*/
-@Mapping("/admin/template")
+@Mapping("/cms/admin/template")
@Controller
public class TemplateController extends BaseController {
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WebController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WebController.java
index 25ddd96..feb0397 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WebController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WebController.java
@@ -23,7 +23,7 @@ import java.util.HashMap;
*
*/
@Controller
-@Mapping("/admin/web")
+@Mapping("/cms/admin/web")
public class WebController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WechatMenuController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WechatMenuController.java
index abb21f9..9348e92 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WechatMenuController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/WechatMenuController.java
@@ -19,7 +19,7 @@ import java.util.*;
*
*/
@Controller
-@Mapping("/admin/wechat_menu")
+@Mapping("/cms/admin/wechat_menu")
public class WechatMenuController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/div/DivFieldController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/div/DivFieldController.java
index 6cb1fc8..d17ec78 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/div/DivFieldController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/div/DivFieldController.java
@@ -26,7 +26,7 @@ import java.util.List;
*
*/
@Controller
-@Mapping("/admin/div/div_field")
+@Mapping("/cms/admin/div/div_field")
public class DivFieldController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/model/ModelFieldController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/model/ModelFieldController.java
index c6b5f45..00269e3 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/model/ModelFieldController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/model/ModelFieldController.java
@@ -25,7 +25,7 @@ import java.util.List;
*
*
*/
-@Mapping("/admin/model/model_field")
+@Mapping("/cms/admin/model/model_field")
@Controller
public class ModelFieldController extends BaseController {
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/CaptchaController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/CaptchaController.java
index 526ff07..029d527 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/CaptchaController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/CaptchaController.java
@@ -5,7 +5,7 @@ import org.noear.solon.annotation.Mapping;
import vip.fuck.sm.plugins.cms.controller.admin.BaseController;
@Controller
-@Mapping("/common/captcha")
+@Mapping("/cms/common/captcha")
public class CaptchaController extends BaseController {
@Mapping("image")
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/DownController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/DownController.java
index b91da7e..6b133a5 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/DownController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/common/DownController.java
@@ -10,7 +10,7 @@ import vip.fuck.sm.plugins.cms.controller.admin.BaseController;
import java.io.File;
@Controller
-@Mapping("/common/down")
+@Mapping("/cms/common/down")
public class DownController extends BaseController {
@Mapping("file")
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java
index 785e865..ca97d4e 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java
@@ -42,6 +42,7 @@ public class BaseController extends vip.fuck.sm.plugins.cms.controller.admin.Ba
}
public ModelAndView getView(String view){
+ view = fixedSubfix(view);
Site currSite = getCurrentSite();
if (ObjectUtil.isEmpty(currSite)) {
Site currentSite = new Site().dao().findById(1);
@@ -55,12 +56,12 @@ public class BaseController extends vip.fuck.sm.plugins.cms.controller.admin.Ba
if(ObjectUtil.isEmpty(mobileTemplate)){
currSite.setMobileTemplate("");
}
- ModelAndView modelAndView = new ModelAndView(CommonAttribute.FRONT_PATH + view + CommonAttribute.VIEW_EXTENSION);
+ ModelAndView modelAndView = new ModelAndView(CommonAttribute.FRONT_PATH + view );
modelAndView.put("base", JFinal.getContextPath());
modelAndView.put("currentSite",currSite);
- modelAndView.put("currentCategory", JSONUtil.createObj());
modelAndView.put(Web.CURRENT_WEB, new Web().dao().findBySiteId(currSite.getId()));
modelAndView.put(Company.CURRENT_COMPANY, new Company().dao().findBySiteId(currSite.getId()));
+// System.out.println("goto_page:"+modelAndView.view());
return modelAndView;
}
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/CategoryController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/CategoryController.java
index 0f8c46b..5e189b1 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/CategoryController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/CategoryController.java
@@ -3,6 +3,7 @@ package vip.fuck.sm.plugins.cms.controller.front;
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
+import org.noear.solon.core.handle.ModelAndView;
import vip.fuck.sm.plugins.cms.entity.Category;
import vip.fuck.sm.plugins.cms.entity.Model;
@@ -32,9 +33,9 @@ public class CategoryController extends BaseController {
setAttr("pageNumber", pageNumber);
Model model = category.getModel();
if(model.getType() == Model.Type.PAGE.ordinal()){
- render("/templates/"+getCurrentTemplate()+"/"+category.getDetailTemplate());
+ render(getView("/templates/"+getCurrentTemplate()+"/"+category.getDetailTemplate()));
}else{
- render("/templates/"+getCurrentTemplate()+"/"+category.getListTemplate());
+ render(getView("/templates/"+getCurrentTemplate()+"/"+category.getListTemplate()));
}
}
}
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/ContentController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/ContentController.java
index cf2c800..b216feb 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/ContentController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/ContentController.java
@@ -32,7 +32,7 @@ public class ContentController extends BaseController {
setAttr("currentContent", content);
Category category = content.getCategory();
setAttr("currentCategory", category);
- render("/templates/"+getCurrentTemplate()+"/"+category.getDetailTemplate());
+ render( getView("/templates/"+getCurrentTemplate()+"/"+category.getDetailTemplate()));
}
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/GuestbookController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/GuestbookController.java
index 815f480..d4d6b2d 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/GuestbookController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/GuestbookController.java
@@ -22,10 +22,6 @@ import java.util.HashMap;
@Mapping("/cms/guestbook")
public class GuestbookController extends BaseController {
- @Mapping()
- public void index() {
- render(getView("/templates/"+getCurrentTemplate()+"/guestbook"));
- }
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/IndexController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/IndexController.java
index 7311eea..888aaf8 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/IndexController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/IndexController.java
@@ -14,7 +14,7 @@ import org.noear.solon.core.handle.ModelAndView;
*
*/
@Controller
-@Mapping("/cms/")
+@Mapping("/cms")
public class IndexController extends BaseController {
/**
@@ -25,9 +25,9 @@ public class IndexController extends BaseController {
render(getView("/templates/"+getCurrentTemplate()+"/index"));
}
- @Mapping("/{pn}")
- public void about(@Path("pn") String pn) {
- render(getView("/templates/"+getCurrentTemplate()+"/"+pn));
+ @Mapping("/")
+ public void index2() {
+ this.index();
}
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/CategoryController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/CategoryController.java
index fbb40fb..e0c0f3c 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/CategoryController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/CategoryController.java
@@ -19,7 +19,7 @@ import java.util.Map;
*
*
*/
-@Mapping("/xcx/category")
+@Mapping("/cms/xcx/category")
public class CategoryController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/ContentController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/ContentController.java
index c85a20a..936fdfb 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/ContentController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/ContentController.java
@@ -18,7 +18,7 @@ import java.util.Map;
*
*
*/
-@Mapping("/xcx/content")
+@Mapping("/cms/xcx/content")
public class ContentController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/IndexController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/IndexController.java
index 634c3fb..052fe9f 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/IndexController.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/xcx/IndexController.java
@@ -20,7 +20,7 @@ import java.util.Map;
*
*
*/
-@Mapping("/xcx")
+@Mapping("/cms/xcx")
public class IndexController extends BaseController {
/**
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java
index 8983b9a..bd98b0b 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java
@@ -2,37 +2,50 @@ package vip.fuck.sm.plugins.cms.handler;
import com.jfinal.plugin.activerecord.Db;
+import org.noear.solon.annotation.Component;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Filter;
+import org.noear.solon.core.handle.FilterChain;
+import org.noear.solon.core.route.PathRule;
import org.smartboot.http.server.HttpRequest;
-import org.smartboot.http.server.HttpResponse;
-import vip.fuck.sm.plugins.cms.UrlRewriteWrappedRequest;
import vip.fuck.sm.plugins.cms.entity.Company;
import vip.fuck.sm.plugins.cms.entity.Site;
import vip.fuck.sm.plugins.cms.entity.Web;
import vip.fuck.sm.plugins.cms.util.SiteUtils;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+import static vip.fuck.sm.plugins.cms.handler.UrlHandler.MAIN_APP_PASS;
+import static vip.fuck.sm.plugins.cms.handler.UrlHandler.NORM_PASS;
/**
* 站点控制器
*/
+@Component
public class SiteHandler
-// extends Handler
+ implements Filter
{
/** 不包含 */
- private List urlExcludes = new ArrayList(){{
- add("/category");
- add("/content");
- add("/div");
- add("/guestbook");
- add("/search");
- }};
-
- public void handle(String target, HttpRequest request, HttpResponse response, boolean[] isHandled) {
- if(target.startsWith("/admin/")){
-// next.handle(target, request, response, isHandled);
+ static PathRule SITE_URLS = new PathRule().include(
+ "/cms/category",
+ "/cms/content",
+ "/cms/div",
+ "/cms/guestbook",
+ "/cms/search"
+ );
+
+ static PathRule excl_paths = new PathRule().include("/cms/admin**");
+
+ @Override
+ public void doFilter(Context ctx, FilterChain chain) throws Throwable {
+ String pathNew = ctx.pathNew();
+ HttpRequest request = (HttpRequest) ctx.request();
+ String target = pathNew.replaceAll("/+","/");
+ if(!MAIN_APP_PASS.test(target)){
+ chain.doFilter(ctx);
+ return;
+ }
+ if(excl_paths.test(pathNew) || NORM_PASS.test(target)){
+ chain.doFilter(ctx);
return;
}
String domain = SiteUtils.getDomain(request);
@@ -42,38 +55,38 @@ public class SiteHandler
if(urls.length<1){
//默认站点
Site site = new Site().dao().findDefault();
- wrappedRequest(site, target, request, response, isHandled);
+ wrappedRequest(site,ctx,chain, target);
return;
}
//无域名带URL目录
- String cat = urls[1];
- if(!urlExcludes.contains("/"+cat)){
+ String cat = urls[2];
+ if(!SITE_URLS.test("/cms/"+cat)){
Site site = new Site().dao().findFirst("select * from cms_site where type=? and cat = ?",Site.Type.CAT.ordinal(),cat);
if(site != null){
- target = target.substring(("/"+cat).length());
- wrappedRequest(site, target, request, response, isHandled);
+ target = target.substring(("/cms/"+cat).length());
+ wrappedRequest(site,ctx,chain, target);
return;
}
}
}else{
//有域名
Site site = new Site().dao().findFirst("select * from cms_site where type=? and domain=?",Site.Type.DOMAIN.ordinal(),domain);
- wrappedRequest(site, target, request, response, isHandled);
+ wrappedRequest(site,ctx,chain, target);
return;
}
//默认站点
Site site = new Site().dao().findDefault();
- wrappedRequest(site, target, request, response, isHandled);
+ wrappedRequest(site, ctx,chain, target);
return;
}
//包装request
- public void wrappedRequest(Site site,String target, HttpRequest request, HttpResponse response, boolean[] isHandled){
-// request.setAttribute(Site.CURRENT_SITE, site);
-// request.setAttribute(Web.CURRENT_WEB, new Web().dao().findBySiteId(site.getId()));
-// request.setAttribute(Company.CURRENT_COMPANY, new Company().dao().findBySiteId(site.getId()));
- HashMap overridenParameters = new HashMap();
-// UrlRewriteWrappedRequest urlRewriteWrappedRequest = new UrlRewriteWrappedRequest(request,overridenParameters);
-// next.handle(target, urlRewriteWrappedRequest, response, isHandled);
+ public void wrappedRequest(Site site,Context ctx,FilterChain chain, String target) throws Throwable {
+ ctx.attrSet(Site.CURRENT_SITE, site);
+ ctx.attrSet(Web.CURRENT_WEB, new Web().dao().findBySiteId(site.getId()));
+ ctx.attrSet(Company.CURRENT_COMPANY, new Company().dao().findBySiteId(site.getId()));
+ chain.doFilter(ctx);
}
+
+
}
diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java
index 62a945d..1d83f69 100644
--- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java
+++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java
@@ -3,90 +3,126 @@ package vip.fuck.sm.plugins.cms.handler;
//import com.jfinal.handler.Handler;
import org.apache.commons.lang.StringUtils;
-import org.smartboot.http.server.HttpRequest;
-import org.smartboot.http.server.HttpResponse;
+import org.noear.solon.annotation.Component;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Filter;
+import org.noear.solon.core.handle.FilterChain;
+import org.noear.solon.core.route.PathRule;
import vip.fuck.sm.plugins.cms.Config;
-import vip.fuck.sm.plugins.cms.UrlRewriteWrappedRequest;
+import vip.fuck.sm.plugins.cms.entity.Category;
import vip.fuck.sm.plugins.cms.entity.Site;
+import vip.fuck.sm.plugins.cms.entity.Tag;
import vip.fuck.sm.plugins.cms.util.SystemUtils;
-import java.util.HashMap;
-
/**
* UrlHandler.
*/
-public class UrlHandler
-// extends Handler
-{
-
-// public void handle(String target, HttpRequest request, HttpResponse response, boolean[] isHandled) {
-// if ("/".equals(target)
-// || target.startsWith("/admin/")
-// || target.startsWith("/category/")
-// || target.startsWith("/content/")
-// || target.startsWith("/div/")
-// || target.startsWith("/guestbook/")
-// || target.startsWith("/search/")
-// || target.startsWith("/ajax/")
-// || target.startsWith("/page/")
-// ) {
-// next.handle(target, request, response, isHandled);
-// return;
-// }
-// Site currentSite = (Site) request.getAttribute(Site.CURRENT_SITE);
-// HashMap overridenParameters = new HashMap();
-// //模式
-// Config config = SystemUtils.getConfig();
-// if(config.getSiteModel()== Config.SiteModel.REWRITE.ordinal()){
-// target = target.replace(".html","");
-// }else if(config.getSiteModel()==Config.SiteModel.HTML.ordinal()){
-// if(target.endsWith(".html")){
-// next.handle(target, request, response, isHandled);
-// return;
-// }
-// }
-// //tag start
-// if(target.startsWith("/tag/")){
-// String tagCat = target.split("/")[2];
-// Tag tag = new Tag().dao().findByCat(tagCat);
-// String newTarget = "";
-// if(tag!=null){
-// newTarget = "/tag";
-// overridenParameters.put("id", new String[]{tag.getId()+""});
-// }
-// if(StringUtils.isNotBlank(newTarget)){
-// target = newTarget;
-// }
-// UrlRewriteWrappedRequest urlRewriteWrappedRequest = new UrlRewriteWrappedRequest(request,overridenParameters);
-// next.handle(target, urlRewriteWrappedRequest, response, isHandled);
-// return;
-// }
-// //tag end
-// //URL目录: /product /product/{id}
-// String[] urls = target.split("/");
-// request.setAttribute("target", "/"+urls[1]);
-// int urlsLength = urls.length;
-// String newTarget = "";
-// if(urlsLength==2){
-// String categoryCat = urls[1];
-// Category category = new Category().dao().findByCat(categoryCat,currentSite.getId());
-// if(category!=null){
-// newTarget = "/category";
-// overridenParameters.put("id", new String[]{category.getId()+""});
-// }
-// }else if(urlsLength==3){
-// String categoryCat = urls[1];
-// String contentId = urls[2];
-// Category category = new Category().dao().findByCat(categoryCat,currentSite.getId());
-// if(category!=null){
-// newTarget = "/content";
-// overridenParameters.put("id", new String[]{contentId+""});
-// }
-// }
-// if(StringUtils.isNotBlank(newTarget)){
-// target = newTarget;
-// }
-// UrlRewriteWrappedRequest urlRewriteWrappedRequest = new UrlRewriteWrappedRequest(request,overridenParameters);
-// next.handle(target, urlRewriteWrappedRequest, response, isHandled);
-// }
+@Component()
+public class UrlHandler implements Filter {
+
+ static PathRule MAIN_APP_PASS = new PathRule().include(
+ "/cms*",
+ "/cms",
+ "/cms/**"
+ );
+
+ static PathRule NORM_PASS = new PathRule().include(
+ "/index/404",
+ "/index/403",
+ "/index/500",
+ "/static**",
+ "/cms/static**",
+ "/cms/templates/*/static**",
+ "/**.ico");
+
+ static PathRule PASS_URLS = new PathRule()
+ .include(
+ "/cms/admin/**",
+ "/cms/category/**",
+ "/cms/content/**",
+ "/cms/div/**",
+ "/cms/guestbook/**",
+ "/cms/search/**",
+ "/cms/ajax/**",
+ "/cms/page/**"
+ );
+
+ static PathRule TAG_URLS = new PathRule()
+ .include("/cms/tag/**" );
+
+ static PathRule CATE_URLS = new PathRule()
+ .include("/cms/*","/cms/*/**" );
+
+
+
+ @Override
+ public void doFilter(Context ctx, FilterChain chain) throws Throwable {
+ String target = ctx.pathNew();
+ target = target.replaceAll("/$","");
+ if(!MAIN_APP_PASS.test(target)){
+ chain.doFilter(ctx);
+ return;
+ }
+ if(PASS_URLS.test(target) || NORM_PASS.test(target)){
+ chain.doFilter(ctx);
+ return ;
+ }
+ Site currentSite = ctx.attr(Site.CURRENT_SITE);
+ if(currentSite == null){
+ currentSite = new Site().findDefault();
+ ctx.attrSet(Site.CURRENT_SITE,currentSite);
+ }
+ Config config = SystemUtils.getConfig();
+ if(config.getSiteModel()==Config.SiteModel.REWRITE.ordinal()){
+ target = target
+ .replace(".html","")
+ .replace(".shtm","")
+ ;
+ }else if(config.getSiteModel()==Config.SiteModel.HTML.ordinal()){
+ if(target.endsWith(".html") || target.endsWith(".shtm") ){
+ chain.doFilter(ctx);
+ return;
+ }
+ }
+
+ String newTarget = "";
+ //tag start
+ if(TAG_URLS.test(target)){
+ String tagCat = target.split("/")[3];
+ Tag tag = new Tag().dao().findByCat(tagCat);
+ if(tag!=null){
+ ctx.paramMap().put("id",tag.getId()+"");
+ ctx.forward("/cms/tag");
+ }
+ return;
+ }
+ if(CATE_URLS.test(target)){
+ //URL目录: /product /product/{id}
+ String[] urls = target.split("/");
+ int urlsLength = urls.length;
+ if(urlsLength==3){
+ String categoryCat = urls[2];
+ Category category = new Category().dao().findByCat(categoryCat,currentSite.getId());
+ if(category!=null){
+ newTarget = "/cms/category";
+ ctx.paramMap().put("id",category.getId()+"");
+ }
+ }else if(urlsLength==4){
+ String categoryCat = urls[2];
+ String contentId = urls[3];
+ Category category = new Category().dao().findByCat(categoryCat,currentSite.getId());
+ if(category!=null){
+ newTarget = "/cms/content";
+ ctx.paramMap().put("id",contentId+"");
+ }
+ }
+ }
+
+
+ if(StringUtils.isNotBlank(newTarget)){
+ target = newTarget;
+ }
+ ctx.forward(target);
+ }
+
}
diff --git a/plugins/cms/src/main/resources/templates/cms/admin/view/include/common.shtm b/plugins/cms/src/main/resources/templates/cms/admin/view/include/common.shtm
index a97934b..ed28215 100644
--- a/plugins/cms/src/main/resources/templates/cms/admin/view/include/common.shtm
+++ b/plugins/cms/src/main/resources/templates/cms/admin/view/include/common.shtm
@@ -14,92 +14,92 @@ var base = "#(base)";
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+