| 
					
				 | 
			
			
				@@ -1,13 +1,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package modules 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//"html" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"database/sql" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"html" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"strings" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"golang-fave/assets" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"golang-fave/consts" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"golang-fave/engine/builder" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"golang-fave/engine/wrapper" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//"golang-fave/utils" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"golang-fave/utils" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (this *Modules) RegisterModule_Blog() *Module { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -17,7 +19,7 @@ func (this *Modules) RegisterModule_Blog() *Module { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Name:   "Blog", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Order:  1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		System: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Icon:   assets.SysSvgIconPage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Icon:   assets.SysSvgIconList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Sub: &[]MISub{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			{Mount: "default", Name: "List of posts", Show: true, Icon: assets.SysSvgIconList}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			{Mount: "add", Name: "Add new post", Show: true, Icon: assets.SysSvgIconPlus}, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -43,25 +45,81 @@ func (this *Modules) RegisterModule_Blog() *Module { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				wrap, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				"blog_cats", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				"id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"DESC", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"ASC", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				&[]builder.DataTableRow{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						DBField:     "id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						NameInTable: "Id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						DBField: "id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						// NameInTable: "id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						DBField: "user", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						// NameInTable: "user", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						DBField:     "name", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						NameInTable: "Name", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						CallBack: func(values *[]string) string { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							sub := strings.Repeat("— ", utils.StrToInt((*values)[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							name := `<a href="/cp/` + wrap.CurrModule + `/categories-modify/` + (*values)[0] + `/">` + sub + html.EscapeString((*values)[2]) + `</a>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							// alias := html.EscapeString((*values)[3]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							// return `<div>` + name + `</div><div><small>` + alias + `</small></div>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							return `<div>` + name + `</div>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						DBField: "alias", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						// NameInTable: "Alias", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						DBField:     "alias", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						NameInTable: "Alias", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						DBField: "depth", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						// NameInTable: "depth", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				nil, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				func(values *[]string) string { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return builder.DataTableAction(&[]builder.DataTableActionRow{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Icon: assets.SysSvgIconEdit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Href: "/cp/" + wrap.CurrModule + "/categories-modify/" + (*values)[0] + "/", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Hint: "Edit", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Icon: assets.SysSvgIconRemove, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Href: "javascript:fave.ActionDataTableDelete(this,'blog-categories-delete','" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								(*values)[0] + "','Are you sure want to delete category?');", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Hint:    "Delete", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Classes: "delete", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				"/cp/"+wrap.CurrModule+"/"+wrap.CurrSubModule+"/", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				nil, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				nil, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				func() (int, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var num int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var err error 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					err = wrap.DB.QueryRow("SELECT COUNT(*) FROM `blog_cats`;").Scan(&num) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return num, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				func(limit_offset int, pear_page int) (*sql.Rows, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return wrap.DB.Query( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						`SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							node.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							node.user, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							node.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							node.alias, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							(COUNT(parent.id) - 1) AS depth 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							blog_cats AS node, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							blog_cats AS parent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						WHERE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							node.lft BETWEEN parent.lft AND parent.rgt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						GROUP BY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							node.id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						ORDER BY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							node.lft ASC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						LIMIT ?, ?;`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						limit_offset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						pear_page, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} else if wrap.CurrSubModule == "add" || wrap.CurrSubModule == "modify" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if wrap.CurrSubModule == "add" { 
			 |