github.com/kotovmak/go-admin@v1.1.1/plugins/admin/admin.go (about)

     1  package admin
     2  
     3  import (
     4  	"github.com/kotovmak/go-admin/context"
     5  	"github.com/kotovmak/go-admin/modules/config"
     6  	"github.com/kotovmak/go-admin/modules/service"
     7  	"github.com/kotovmak/go-admin/modules/system"
     8  	"github.com/kotovmak/go-admin/modules/utils"
     9  	"github.com/kotovmak/go-admin/plugins"
    10  	"github.com/kotovmak/go-admin/plugins/admin/controller"
    11  	"github.com/kotovmak/go-admin/plugins/admin/modules/guard"
    12  	"github.com/kotovmak/go-admin/plugins/admin/modules/table"
    13  	"github.com/kotovmak/go-admin/template/types"
    14  	"github.com/kotovmak/go-admin/template/types/action"
    15  	_ "github.com/kotovmak/go-admin/template/types/display"
    16  )
    17  
    18  // Admin is a GoAdmin plugin.
    19  type Admin struct {
    20  	*plugins.Base
    21  	tableList table.GeneratorList
    22  	guardian  *guard.Guard
    23  	handler   *controller.Handler
    24  }
    25  
    26  // InitPlugin implements Plugin.InitPlugin.
    27  // TODO: find a better way to manage the dependencies
    28  func (admin *Admin) InitPlugin(services service.List) {
    29  
    30  	// DO NOT DELETE
    31  	admin.InitBase(services, "")
    32  
    33  	c := config.GetService(services.Get("config"))
    34  	st := table.NewSystemTable(admin.Conn, c)
    35  	genList := table.GeneratorList{
    36  		"manager":        st.GetManagerTable,
    37  		"permission":     st.GetPermissionTable,
    38  		"roles":          st.GetRolesTable,
    39  		"op":             st.GetOpTable,
    40  		"menu":           st.GetMenuTable,
    41  		"normal_manager": st.GetNormalManagerTable,
    42  	}
    43  	if c.IsAllowConfigModification() {
    44  		genList.Add("site", st.GetSiteTable)
    45  	}
    46  	if c.IsNotProductionEnvironment() {
    47  		genList.Add("generate", st.GetGenerateForm)
    48  	}
    49  	admin.tableList.Combine(genList)
    50  	admin.guardian = guard.New(admin.Services, admin.Conn, admin.tableList, admin.UI.NavButtons)
    51  	handlerCfg := controller.Config{
    52  		Config:     c,
    53  		Services:   services,
    54  		Generators: admin.tableList,
    55  		Connection: admin.Conn,
    56  	}
    57  	admin.handler.UpdateCfg(handlerCfg)
    58  	admin.initRouter()
    59  	admin.handler.SetRoutes(admin.App.Routers)
    60  	admin.handler.AddNavButton(admin.UI.NavButtons)
    61  
    62  	table.SetServices(services)
    63  
    64  	action.InitOperationHandlerSetter(admin.GetAddOperationFn())
    65  }
    66  
    67  func (admin *Admin) GetIndexURL() string {
    68  	return config.GetIndexURL()
    69  }
    70  
    71  func (admin *Admin) GetInfo() plugins.Info {
    72  	return plugins.Info{
    73  		Title:       "Basic Admin",
    74  		Website:     "https://www.go-admin.cn",
    75  		Description: "A built-in plugins of GoAdmin which help you to build a crud manager platform quickly.",
    76  		Author:      "official",
    77  		Version:     system.Version(),
    78  		CreateDate:  utils.ParseTime("2018-07-08 00:00:00"),
    79  		UpdateDate:  utils.ParseTime("2020-06-28 00:00:00"),
    80  	}
    81  }
    82  
    83  func (admin *Admin) IsInstalled() bool {
    84  	return true
    85  }
    86  
    87  // NewAdmin return the global Admin plugin.
    88  func NewAdmin(tableCfg ...table.GeneratorList) *Admin {
    89  	return &Admin{
    90  		tableList: make(table.GeneratorList).CombineAll(tableCfg),
    91  		Base:      &plugins.Base{PlugName: "admin"},
    92  		handler:   controller.New(),
    93  	}
    94  }
    95  
    96  func (admin *Admin) GetAddOperationFn() context.NodeProcessor {
    97  	return admin.handler.AddOperation
    98  }
    99  
   100  // SetCaptcha set captcha driver.
   101  func (admin *Admin) SetCaptcha(captcha map[string]string) *Admin {
   102  	admin.handler.SetCaptcha(captcha)
   103  	return admin
   104  }
   105  
   106  // AddGenerator add table model generator.
   107  func (admin *Admin) AddGenerator(key string, g table.Generator) *Admin {
   108  	admin.tableList.Add(key, g)
   109  	return admin
   110  }
   111  
   112  // AddGenerators add table model generators.
   113  func (admin *Admin) AddGenerators(gen ...table.GeneratorList) *Admin {
   114  	admin.tableList.CombineAll(gen)
   115  	return admin
   116  }
   117  
   118  // AddGlobalDisplayProcessFn call types.AddGlobalDisplayProcessFn
   119  func (admin *Admin) AddGlobalDisplayProcessFn(f types.FieldFilterFn) *Admin {
   120  	types.AddGlobalDisplayProcessFn(f)
   121  	return admin
   122  }
   123  
   124  // AddDisplayFilterLimit call types.AddDisplayFilterLimit
   125  func (admin *Admin) AddDisplayFilterLimit(limit int) *Admin {
   126  	types.AddLimit(limit)
   127  	return admin
   128  }
   129  
   130  // AddDisplayFilterTrimSpace call types.AddDisplayFilterTrimSpace
   131  func (admin *Admin) AddDisplayFilterTrimSpace() *Admin {
   132  	types.AddTrimSpace()
   133  	return admin
   134  }
   135  
   136  // AddDisplayFilterSubstr call types.AddDisplayFilterSubstr
   137  func (admin *Admin) AddDisplayFilterSubstr(start int, end int) *Admin {
   138  	types.AddSubstr(start, end)
   139  	return admin
   140  }
   141  
   142  // AddDisplayFilterToTitle call types.AddDisplayFilterToTitle
   143  func (admin *Admin) AddDisplayFilterToTitle() *Admin {
   144  	types.AddToTitle()
   145  	return admin
   146  }
   147  
   148  // AddDisplayFilterToUpper call types.AddDisplayFilterToUpper
   149  func (admin *Admin) AddDisplayFilterToUpper() *Admin {
   150  	types.AddToUpper()
   151  	return admin
   152  }
   153  
   154  // AddDisplayFilterToLower call types.AddDisplayFilterToLower
   155  func (admin *Admin) AddDisplayFilterToLower() *Admin {
   156  	types.AddToUpper()
   157  	return admin
   158  }
   159  
   160  // AddDisplayFilterXssFilter call types.AddDisplayFilterXssFilter
   161  func (admin *Admin) AddDisplayFilterXssFilter() *Admin {
   162  	types.AddXssFilter()
   163  	return admin
   164  }
   165  
   166  // AddDisplayFilterXssJsFilter call types.AddDisplayFilterXssJsFilter
   167  func (admin *Admin) AddDisplayFilterXssJsFilter() *Admin {
   168  	types.AddXssJsFilter()
   169  	return admin
   170  }