mirror of
https://github.com/spurtcms/spurtcms.git
synced 2026-09-21 10:32:06 +00:00
community-version 1.4.0
This commit is contained in:
@@ -105,3 +105,5 @@ MASTER_BLOCKS_ENDPOINTURL ="https://superadmin.spurtcms.com/defaultblocklist/"
|
||||
MASTER_CTA_ENDPOINTURL ="https://superadmin.spurtcms.com/defaultctalist/"
|
||||
|
||||
MASTER_CHANNELS_ENDPOINTURL ="https://superadmin.spurtcms.com/admin/channels/"
|
||||
|
||||
MASTER_INTEGRATION_ENDPOINTURL ="https://superadmin.spurtcms.com/integration/"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# Secret file
|
||||
|
||||
storage/*
|
||||
logs
|
||||
.idea
|
||||
tailwindcss-linux-x64
|
||||
tailwindcss-v4
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"liveServer.settings.port": 5501
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
run:
|
||||
go run main.go
|
||||
|
||||
buildwithview:
|
||||
mkdir build
|
||||
cp -r lang build
|
||||
cp -r locales build
|
||||
cp -r public build
|
||||
cp -r view build
|
||||
cp -r cms.sql build
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o build/spurtcms-admin
|
||||
|
||||
build:
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o build/spurtcms-admin
|
||||
|
||||
permission:
|
||||
chmod -R 777 spurtcms-admin
|
||||
|
||||
start:
|
||||
sudo systemctl start spurtcms-admin
|
||||
@@ -104,7 +104,7 @@ AWS_BUCKET_NAME=your-bucket-name
|
||||
Open the terminal within the project or cloned folder “spurtcms-admin”, and execute the following command:
|
||||
|
||||
```
|
||||
go run main.go
|
||||
./spurt-cms
|
||||
```
|
||||
Once the project runs successfully, a default website template will open automatically in your browser.
|
||||
To access the Admin Panel, navigate to the following route in your browser:
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"Blogmaster": {
|
||||
"Topic": "Topic",
|
||||
"Kewords": "Kewords"
|
||||
},
|
||||
"Blogchild": {
|
||||
"Title": "Title",
|
||||
"Keword": "Kewords",
|
||||
"Articlelength": "Article length",
|
||||
"Tone": "Tone"
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func SetupDB() *gorm.DB {
|
||||
|
||||
er := godotenv.Load()
|
||||
|
||||
if er != nil {
|
||||
log.Fatalf("Error loading .env file")
|
||||
}
|
||||
|
||||
HOST := os.Getenv("DB_HOST")
|
||||
PORT := os.Getenv("DB_PORT")
|
||||
USERNAME := os.Getenv("DB_USERNAME")
|
||||
PASSWORD := os.Getenv("DB_PASSWORD")
|
||||
DBNAME := os.Getenv("DB_NAME")
|
||||
|
||||
var (
|
||||
db *gorm.DB
|
||||
err error
|
||||
)
|
||||
|
||||
DataBaseType := os.Getenv("DATABASE_TYPE")
|
||||
|
||||
switch DataBaseType {
|
||||
|
||||
case "postgres":
|
||||
dbUri := fmt.Sprintf("host=%s user=%s dbname=%s sslmode=disable password=%s", os.Getenv("DB_HOST"), os.Getenv("DB_USERNAME"), os.Getenv("DB_NAME"), os.Getenv("DB_PASSWORD")) //Build connection string
|
||||
db, err = gorm.Open(postgres.Open(dbUri), &gorm.Config{})
|
||||
|
||||
case "mysql":
|
||||
dsn := USERNAME + ":" + PASSWORD + "@tcp(" + HOST + ":" + PORT + ")/" + DBNAME + "?charset=utf8mb4&parseTime=True&loc=UTC"
|
||||
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
||||
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
return db
|
||||
}
|
||||
@@ -1,292 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"spurt-cms/logger"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/sessions"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var Store = sessions.NewCookieStore([]byte("!@#$%"))
|
||||
|
||||
var Store1 = sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY1")))
|
||||
|
||||
func init() {
|
||||
|
||||
ErrorLog = logger.ErrorLog()
|
||||
|
||||
WarnLog = logger.WarnLog()
|
||||
|
||||
// SetInitialGeneralValues()
|
||||
}
|
||||
|
||||
/*login page view*/
|
||||
func Login(c *gin.Context) {
|
||||
|
||||
session, _ := Store.Get(c.Request, os.Getenv("SESSION_KEY"))
|
||||
tkn := session.Values["token"]
|
||||
|
||||
if tkn != "" && tkn != nil {
|
||||
|
||||
tkn := session.Values["token"].(string)
|
||||
claims := jwt.MapClaims{}
|
||||
token, err := jwt.ParseWithClaims(tkn, claims, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(os.Getenv("JWT_SECRET")), nil
|
||||
})
|
||||
if err != nil || !token.Valid {
|
||||
c.Redirect(http.StatusFound, "/")
|
||||
return
|
||||
}
|
||||
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
|
||||
c.Redirect(301, "/admin/dashboard")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.HTML(200, "login.html", gin.H{"csrf": csrf.GetToken(c)})
|
||||
}
|
||||
|
||||
/*forgetpassword page view*/
|
||||
func ForgetPassword(c *gin.Context) {
|
||||
c.HTML(200, "forgotpassword.html", gin.H{"csrf": csrf.GetToken(c)})
|
||||
}
|
||||
|
||||
func NewPassword(c *gin.Context) {
|
||||
|
||||
token := c.Query("token")
|
||||
|
||||
Claims := jwt.MapClaims{}
|
||||
_, err := jwt.ParseWithClaims(token, Claims, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(os.Getenv("JWT_SECRET")), nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
if err == jwt.ErrSignatureInvalid {
|
||||
ErrorLog.Printf("Invalid token change password error: %s", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
userid := Claims["user_id"]
|
||||
|
||||
c.HTML(200, "change_password.html", gin.H{"csrf": csrf.GetToken(c), "userid": userid})
|
||||
|
||||
}
|
||||
|
||||
func SendLinkForForgotPass(c *gin.Context) {
|
||||
|
||||
email := c.PostForm("emailid")
|
||||
|
||||
user, _, err := NewTeam.CheckEmail(email, 0, TenantId)
|
||||
|
||||
id := user.Id
|
||||
token, _ := CreateTokenWithExpireTime(id)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Send Link forget password error: %s", err)
|
||||
c.SetCookie("log-toast", "You are not registered with us", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/forgot")
|
||||
return
|
||||
}
|
||||
|
||||
var url_prefix = os.Getenv("BASE_URL")
|
||||
linkedin := os.Getenv("LINKEDIN")
|
||||
facebook := os.Getenv("FACEBOOK")
|
||||
twitter := os.Getenv("TWITTER")
|
||||
youtube := os.Getenv("YOUTUBE")
|
||||
insta := os.Getenv("INSTAGRAM")
|
||||
|
||||
data := map[string]interface{}{
|
||||
"fname": user.Username,
|
||||
"resetpassword": url_prefix + "admin/change-password?token=" + token,
|
||||
"restpassurl": url_prefix + "admin/change-password",
|
||||
"admin_logo": url_prefix + "public/img/SpurtCMSlogo.png",
|
||||
"fb_logo": url_prefix + "public/img/email-icons/facebook.png",
|
||||
"linkedin_logo": url_prefix + "public/img/email-icons/linkedin.png",
|
||||
"twitter_logo": url_prefix + "public/img/email-icons/x.png",
|
||||
"youtube_logo": url_prefix + "public/img/email-icons/youtube.png",
|
||||
"insta_log": url_prefix + "public/img/email-icons/instagram.png",
|
||||
"facebook": facebook,
|
||||
"instagram": insta,
|
||||
"youtube": youtube,
|
||||
"linkedin": linkedin,
|
||||
"twitter": twitter,
|
||||
}
|
||||
|
||||
fmt.Println(user.Username, "isernameee")
|
||||
var wg sync.WaitGroup
|
||||
|
||||
wg.Add(1)
|
||||
|
||||
Chan := make(chan string, 1)
|
||||
|
||||
go ForgetPasswordEmail(Chan, &wg, data, email, "Forgot Password", "1")
|
||||
|
||||
close(Chan)
|
||||
|
||||
c.SetCookie("success", "Reset password email send successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/forgot")
|
||||
|
||||
}
|
||||
|
||||
func SetNewPassword(c *gin.Context) {
|
||||
|
||||
newPassword := c.PostForm("pass")
|
||||
confirmPassword := c.PostForm("cpass")
|
||||
|
||||
userid, _ := strconv.Atoi(c.PostForm("userId"))
|
||||
|
||||
if newPassword == confirmPassword {
|
||||
|
||||
_, err := NewTeamWP.ChangeYourPassword(newPassword, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("set new password error: %s", err)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Password Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin")
|
||||
}
|
||||
}
|
||||
|
||||
/*checklogin*/
|
||||
func CheckLogin(c *gin.Context) {
|
||||
|
||||
//get values from html
|
||||
uname := c.PostForm("username")
|
||||
remember := c.PostForm("rememberme")
|
||||
|
||||
token, userid, err := NewAuth.Checklogin(uname, c.Request.PostFormValue("pass"), TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("CheckLogin error: %s", err)
|
||||
c.Redirect(301, "/admin")
|
||||
// return
|
||||
}
|
||||
|
||||
if err != nil && err.Error() == "user disabled please contact admin" {
|
||||
c.SetCookie("log-toast", "This account is inactive please contact the admin", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin")
|
||||
return
|
||||
}
|
||||
|
||||
userdata, _, _ := NewTeam.GetUserById(userid, []int{})
|
||||
|
||||
if !userdata.LastLogin.IsZero() {
|
||||
Lastactive := userdata.LastLogin.In(TZONE).Format(Datelayout)
|
||||
Lastlogin[userdata.Id] = Lastactive
|
||||
} else {
|
||||
Lastlogin[userdata.Id] = "--"
|
||||
}
|
||||
|
||||
if c.Request.PostFormValue("username") == "" || c.Request.PostFormValue("pass") == "" {
|
||||
c.Redirect(301, "/admin")
|
||||
return
|
||||
}
|
||||
|
||||
if gorm.ErrRecordNotFound == err {
|
||||
c.SetCookie("log-toast", "You are not registered with us", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin")
|
||||
return
|
||||
}
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "invalid password") {
|
||||
c.SetCookie("username", uname, 3600, "", "", false, false)
|
||||
c.SetCookie("pass-toast", "Invalid Password", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/")
|
||||
return
|
||||
}
|
||||
|
||||
if remember == "1" {
|
||||
Session1, _ := Store.Get(c.Request, "REMEMBER_ME")
|
||||
Session1.Values["rememberme"] = remember
|
||||
Session1.Save(c.Request, c.Writer)
|
||||
}
|
||||
|
||||
Session, _ := Store.Get(c.Request, os.Getenv("SESSION_KEY"))
|
||||
Session.Values["token"] = token
|
||||
Session.Save(c.Request, c.Writer)
|
||||
|
||||
c.Redirect(301, "/admin/dashboard")
|
||||
|
||||
}
|
||||
|
||||
// logout and clear the sessions
|
||||
func Logout(c *gin.Context) {
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
// models.LastLoginActivity(userid, TenantId)
|
||||
|
||||
NewTeamWP.LastLoginActivity(userid, TenantId)
|
||||
|
||||
session, err := Store.Get(c.Request, os.Getenv("SESSION_KEY"))
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Logout session get error: %s", err)
|
||||
}
|
||||
|
||||
session.Values["token"] = ""
|
||||
session.Options.MaxAge = -1
|
||||
er := session.Save(c.Request, c.Writer)
|
||||
if er != nil {
|
||||
ErrorLog.Printf("Logout session save error: %s", er)
|
||||
}
|
||||
|
||||
c.Writer.Header().Set("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0")
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
c.Writer.Header().Set("Expires", "Thu, 01 Jan 1970 00:00:00 GMT") // date in the past ensures expiration
|
||||
|
||||
// cookieNames := []string{"myspurtcms", "lang", "channelbanner", "blockbanner", "tempbanner", "ctadesc", "ctabanner"}
|
||||
// for _, name := range cookieNames {
|
||||
// c.SetCookie(name, "", -1, "/", "spurtcms.com", false, false)
|
||||
// c.SetCookie(name, "", -1, "/", ".lvh.me", false, false)
|
||||
// }
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
for _, cookie := range c.Request.Cookies() {
|
||||
c.SetCookie(cookie.Name, "", -1, "/", "", false, true)
|
||||
}
|
||||
c.Redirect(301, "/")
|
||||
|
||||
}
|
||||
|
||||
func LastActive(c *gin.Context) {
|
||||
userid := c.GetInt("userid")
|
||||
NewTeamWP.LastLoginActivity(userid, TenantId)
|
||||
}
|
||||
|
||||
/*update password*/
|
||||
func UpdatePassword(c *gin.Context) {
|
||||
|
||||
}
|
||||
func CreateTokenWithExpireTime(userid int) (string, error) {
|
||||
|
||||
var err error
|
||||
|
||||
//Creating Access Token
|
||||
atClaims := jwt.MapClaims{}
|
||||
atClaims["authorized"] = true
|
||||
atClaims["user_id"] = userid
|
||||
atClaims["exp"] = time.Now().Add(time.Second * 300).Unix()
|
||||
at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
|
||||
token, err := at.SignedString([]byte(os.Getenv("JWT_SECRET")))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return token, nil
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,842 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/auth"
|
||||
cat "github.com/spurtcms/categories"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
var CategoriesImagepath string
|
||||
|
||||
type CategoriesFilter struct {
|
||||
Keyword string
|
||||
Category string
|
||||
Status string
|
||||
FromDate string
|
||||
ToDate string
|
||||
}
|
||||
|
||||
// Category Parent List
|
||||
func CategoryGroupList(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
filter cat.Filter
|
||||
)
|
||||
|
||||
//get values from url query
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
var FinalCategoriesList []cat.TblCategories
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories Group", auth.Read, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("categorygrouplist authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
CategoryConfig.DataAccess = c.GetInt("dataaccess")
|
||||
CategoryConfig.UserId = c.GetInt("userid")
|
||||
|
||||
categorylist, Total_categories, err := CategoryConfig.CategoryGroupList(limt, offset, cat.Filter(filter), TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("category group list error: %s", err)
|
||||
}
|
||||
for _, val := range categorylist {
|
||||
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
FinalCategoriesList = append(FinalCategoriesList, val)
|
||||
|
||||
}
|
||||
|
||||
// _, chcount, _ := category.CategoryGroupList(limt, offset, categories.Filter{})
|
||||
|
||||
//pagination calc
|
||||
paginationendcount := len(categorylist) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(Total_categories), limt)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
uper, _ := NewAuth.IsGranted("Categories Group", auth.Update, TenantId)
|
||||
|
||||
dper, _ := NewAuth.IsGranted("Categories Group", auth.Delete, TenantId)
|
||||
|
||||
c.HTML(200, "categorygroup.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}, "Menu": menu, "translate": translate, "Searchtrue": filterflag, "lencategory": Total_categories, "csrf": csrf.GetToken(c), "categorylist": FinalCategoriesList, "Count": Total_categories, "Paginationendcount": paginationendcount, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Page": Page, "Filter": filter, "Paginationstartcount": paginationstartcount, "HeadTitle": translate.Categories, "Categoriesmenu": true, "title": ModuleName, "linktitle": ModuleName, "Limit": limt, "Tabmenu": TabName, "permission": uper, "dpermission": dper})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Add Category Group
|
||||
func CreateCategoryGroup(c *gin.Context) {
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
categorygroup := cat.CategoryCreate{
|
||||
CategoryName: c.PostForm("category_name"),
|
||||
Description: c.PostForm("category_desc"),
|
||||
CreatedBy: userid,
|
||||
TenantId: TenantId,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories Group", auth.Create, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("createcategorygroup authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := CategoryConfig.CreateCategoryGroup(categorygroup)
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("createcategorygroup mandatory field error: %s", err)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/")
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("createcategorygroup error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, "/admin/categories/")
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Category Group Created Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, "/admin/categories/")
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Category Group Update
|
||||
func UpdateCategoryGroup(c *gin.Context) {
|
||||
|
||||
//get data from html form data
|
||||
pageno := c.Request.PostFormValue("catpageno")
|
||||
id, _ := strconv.Atoi(c.PostForm("category_id"))
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/categories?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/categories/"
|
||||
|
||||
}
|
||||
|
||||
categorygroup := cat.CategoryCreate{
|
||||
Id: id,
|
||||
CategoryName: c.PostForm("category_name"),
|
||||
Description: c.PostForm("category_desc"),
|
||||
ModifiedBy: userid,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories Group", auth.Update, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("updatecategorygroup authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := CategoryConfig.UpdateCategoryGroup(categorygroup, TenantId)
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("updatecategorygroup mandatory field error: %s", perr)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("updatecategorygroup error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, url)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Category Group Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, url)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Delete Category Group
|
||||
func DeleteCategoryGroup(c *gin.Context) {
|
||||
|
||||
categoryId, _ := strconv.Atoi(c.Param("id"))
|
||||
pageno := c.Query("page")
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/categories?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/categories/"
|
||||
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories Group", auth.Delete, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("deletecategorygroup authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := CategoryConfig.DeleteCategoryGroup(categoryId, userid, TenantId)
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("deletecategorygroup mandatory field error: %s", perr)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("deletecategorygroup error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Category Group Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*Add sub Category list*/
|
||||
func AddCategory(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
filter CategoriesFilter
|
||||
FinalCategoriesList []cat.TblCategories
|
||||
)
|
||||
|
||||
//get data from html form data
|
||||
parent_id, _ := strconv.Atoi(c.Param("id"))
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Read, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Addcategory authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
uper, _ := NewAuth.IsGranted("Categories", auth.Update, TenantId)
|
||||
|
||||
dper, _ := NewAuth.IsGranted("Categories", auth.Delete, TenantId)
|
||||
|
||||
_, _, _, Total_categories, err := CategoryConfig.ListCategory(0, 0, cat.Filter(filter), parent_id, TenantId)
|
||||
|
||||
categorylist, _, _, _, _ := CategoryConfig.ListCategory(offset, limt, cat.Filter(filter), parent_id, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("categorylist error: %s", err)
|
||||
}
|
||||
|
||||
for _, val := range categorylist {
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
FinalCategoriesList = append(FinalCategoriesList, val)
|
||||
}
|
||||
|
||||
// _, _, _, catcount, _ := CategoryConfig.ListCategory(offset, limt, cat.Filter{}, parent_id)
|
||||
_, FinalModalCategoriesList, categorys, catcount, _ := CategoryConfig.ListCategory(offset, limt, cat.Filter{}, parent_id, TenantId)
|
||||
// _, FinalModalCategoriesList, _, _, _ := CategoryConfig.ListCategory(offset, limt, cat.Filter{}, parent_id)
|
||||
|
||||
//pagination calc
|
||||
paginationendcount := len(categorylist) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(Total_categories), limt)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Getmedia error in addcategory error: %s", err)
|
||||
}
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
if TabName == "Categories" {
|
||||
TabName = "Categories Group"
|
||||
}
|
||||
|
||||
if c.Request.Method == "POST" {
|
||||
c.JSON(200, gin.H{"CategoryList": FinalCategoriesList, "Count": Total_categories, "translate": translate})
|
||||
return
|
||||
}
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
c.HTML(200, "category.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}, "Menu": menu, "translate": translate, "Searchtrue": filterflag, "catcount": catcount, "csrf": csrf.GetToken(c), "HeadTitle": translate.Categories, "Category": categorys, "Previous": Previous, "Next": Next, "PageCount": PageCount, "Page": Page, "CurrentPage": pageno, "categoryid": parent_id, "ParentCategoryName": categorys.CategoryName, "CategoryList": FinalCategoriesList, "Count": Total_categories, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Filter": filter, "title": "Categories", "linktitle": "Categories", "FinalModalCategoriesList": FinalModalCategoriesList, "heading": categorys.CategoryName, "Back": "/categories", "Categoriesmenu": true, "Limit": limt, "Tabmenu": TabName, "ModuleName": ModuleName, "StorageType": selectedtype.SelectedType, "permission": uper, "dpermission": dper})
|
||||
|
||||
}
|
||||
|
||||
// Add Children Category
|
||||
func AddSubCategory(c *gin.Context) {
|
||||
|
||||
//get value from html form data
|
||||
id := (c.PostForm("categoryid"))
|
||||
imagedata := c.PostForm("categoryimages")
|
||||
userid := c.GetInt("userid")
|
||||
var ParentId, _ = strconv.Atoi(c.PostForm("subcategoryid"))
|
||||
|
||||
var imageName, imagePath string
|
||||
|
||||
storagetype, err := GetSelectedType()
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
if storagetype.SelectedType == "local" {
|
||||
|
||||
if imagedata != "" {
|
||||
|
||||
_, imagePath, err = ConvertBase64(imagedata, strings.TrimPrefix(storagetype.Local+"/categories/addcategory", "/"))
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
} else if storagetype.SelectedType == "aws" {
|
||||
|
||||
tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
var imageByte []byte
|
||||
|
||||
if imagedata != "" {
|
||||
imageName, imagePath, imageByte, err = ConvertBase64toByte(imagedata, "categories/addcategory")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
imagePath = tenantDetails.S3FolderName + imagePath
|
||||
|
||||
uerr := storagecontroller.UploadCropImageS3(imageName, imagePath, imageByte)
|
||||
if uerr != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/")
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
subcategory := cat.CategoryCreate{
|
||||
CategoryName: c.PostForm("cname"),
|
||||
Description: c.PostForm("cdesc"),
|
||||
ImagePath: imagePath,
|
||||
ParentId: ParentId,
|
||||
CreatedBy: userid,
|
||||
TenantId: TenantId,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Create, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Addsubcategory authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := CategoryConfig.AddCategory(subcategory)
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("Addsubcategory mandatory field error: %s", perr)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/")
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Addsubcategory error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/addcategory/"+id)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Category Created Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/addcategory/"+id)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Edit Sub Category
|
||||
func EditSubCategory(c *gin.Context) {
|
||||
|
||||
var id, _ = strconv.Atoi(c.Query("id"))
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Read, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("editsubcategory authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
categorys, err := CategoryConfig.GetSubCategoryDetails(id, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("editsubcategory error :%s", err)
|
||||
}
|
||||
c.JSON(200, categorys)
|
||||
CategoriesImagepath = categorys.ImagePath
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Update Childern Category
|
||||
func UpdateSubCategory(c *gin.Context) {
|
||||
|
||||
//get value from html form data
|
||||
ParentId, _ := strconv.Atoi(c.PostForm("pcategoryid"))
|
||||
imagedata := c.PostForm("image")
|
||||
userid := c.GetInt("userid")
|
||||
Categoryid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
var imageName, imagePath string
|
||||
|
||||
storagetype, err := GetSelectedType()
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
if storagetype.SelectedType == "local" {
|
||||
if CategoriesImagepath != imagedata {
|
||||
_, imagePath, err = ConvertBase64(imagedata, strings.TrimPrefix(storagetype.Local+"/categories/addcategory", "/"))
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
} else {
|
||||
imagePath = imagedata
|
||||
}
|
||||
|
||||
} else if storagetype.SelectedType == "aws" {
|
||||
|
||||
tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
var imageByte []byte
|
||||
|
||||
if CategoriesImagepath != imagedata {
|
||||
imageName, imagePath, imageByte, err = ConvertBase64toByte(imagedata, "categories/addcategory")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
imagePath = tenantDetails.S3FolderName + imagePath
|
||||
|
||||
uerr := storagecontroller.UploadCropImageS3(imageName, imagePath, imageByte)
|
||||
if uerr != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/")
|
||||
return
|
||||
}
|
||||
} else {
|
||||
imagePath = imagedata
|
||||
}
|
||||
}
|
||||
|
||||
subcategory := cat.CategoryCreate{
|
||||
Id: Categoryid,
|
||||
CategoryName: c.PostForm("cname"),
|
||||
Description: c.PostForm("cdesc"),
|
||||
ImagePath: imagePath,
|
||||
ParentId: ParentId,
|
||||
ModifiedBy: userid,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Update, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("updatesubcategory authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.JSON(200, gin.H{"value": false, "url": "/403-page"})
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := CategoryConfig.UpdateSubCategory(subcategory, TenantId) // update category
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("updatesubcategory mandatory field error: %s", perr)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/")
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("updatesubcategory error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Category Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.JSON(200, gin.H{"value": true})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Delete Children Category
|
||||
func DeleteSubCategory(c *gin.Context) {
|
||||
|
||||
var url string
|
||||
|
||||
//get value from html form data
|
||||
parent_id := (c.Query("categoryid"))
|
||||
pageno := c.Query("page")
|
||||
var categoryid, _ = strconv.Atoi(c.Query("id"))
|
||||
userid := c.GetInt("userid")
|
||||
if pageno != "" {
|
||||
url = "/admin/categories/addcategory/" + parent_id + "?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/categories/addcategory/" + parent_id
|
||||
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Delete, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("deletesubcategory authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := CategoryConfig.DeleteSubCategory(categoryid, userid, TenantId) // delete subcategory
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("deletesubcategory mandatory error:")
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/categories/")
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("deletesubcategory error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
} else {
|
||||
c.SetCookie("get-toast", "Category Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
}
|
||||
|
||||
c.Redirect(301, url)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// To Check Group Name id Already Exists
|
||||
func CheckCategoryGroupName(c *gin.Context) {
|
||||
|
||||
//get value from html form data
|
||||
category_id, _ := strconv.Atoi(c.PostForm("category_id"))
|
||||
category_name := c.PostForm("category_name")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Read, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("checkcategorygroupname authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
|
||||
flg, err := CategoryConfig.CheckCategroyGroupName(category_id, category_name, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("checkcategorygroupname error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
}
|
||||
}
|
||||
|
||||
// SubCategory name check
|
||||
func CheckSubCategoryName(c *gin.Context) {
|
||||
|
||||
//get value from html form data
|
||||
category_id, _ := strconv.Atoi(c.PostForm("parentid"))
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Read, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("CheckSubCategoryName authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
categorylistinchk, _, _, _, err := CategoryConfig.ListCategory(0, Limit, cat.Filter{}, category_id, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("checkcategorygroupname authorization error: %s", err)
|
||||
}
|
||||
var catid []int
|
||||
if len(categorylistinchk) != 0 {
|
||||
for _, val := range categorylistinchk {
|
||||
catid = append(catid, val.Id)
|
||||
}
|
||||
}
|
||||
|
||||
category_name := c.PostForm("cname")
|
||||
categoryid, _ := strconv.Atoi(c.PostForm("categoryid"))
|
||||
flg, err := CategoryConfig.CheckSubCategroyName(catid, categoryid, category_name, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("CheckSubCategoryName error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
}
|
||||
}
|
||||
|
||||
func MultiSelectCategoryGroupDelete(c *gin.Context) {
|
||||
|
||||
//get value from html form data
|
||||
categoryId := c.PostFormArray("categorygrbids[]")
|
||||
pageno := c.PostForm("page")
|
||||
userid := c.GetInt("userid")
|
||||
var url string
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories Group", auth.Delete, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("CheckSubCategoryName authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("categorygroup authorization error")
|
||||
c.JSON(200, gin.H{"value": false, "url": "/403-page"})
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
categoryIntIds := make([]int, len(categoryId))
|
||||
for i, id := range categoryId {
|
||||
intId, _ := strconv.Atoi(id)
|
||||
categoryIntIds[i] = intId
|
||||
}
|
||||
|
||||
err := CategoryConfig.MultiSelectDeleteCategoryGroup(categoryIntIds, userid, TenantId) //delete selected category group
|
||||
if err != nil {
|
||||
ErrorLog.Printf("MultiSelectCategoryGroupDelete error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
_, Total_categories, _ := CategoryConfig.CategoryGroupList(0, 0, cat.Filter{}, TenantId)
|
||||
|
||||
if pageno != "" {
|
||||
page, _ := strconv.Atoi(pageno)
|
||||
page = page - 1
|
||||
multi := page * 10
|
||||
multiInt64 := int64(multi)
|
||||
if Total_categories > multiInt64 {
|
||||
url = "/admin/categories?page=" + pageno
|
||||
} else {
|
||||
pagee, _ := strconv.Atoi(pageno)
|
||||
_page := pagee - 1
|
||||
pages := strconv.Itoa(_page)
|
||||
url = "/admin/categories?page=" + pages
|
||||
}
|
||||
} else {
|
||||
url = "/admin/categories/"
|
||||
}
|
||||
c.JSON(200, gin.H{"value": true, "url": url})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func MultiSelectCategoryDelete(c *gin.Context) {
|
||||
|
||||
//get value from html form data
|
||||
categoryId := c.PostFormArray("categoryids[]")
|
||||
parent_id := (c.PostForm("parentid"))
|
||||
Parentid, _ := strconv.Atoi(parent_id)
|
||||
pageno := c.PostForm("page")
|
||||
userid := c.GetInt("userid")
|
||||
var url string
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Categories", auth.Delete, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("CheckSubCategoryName authorization error: %s", perr)
|
||||
}
|
||||
if !permisison {
|
||||
ErrorLog.Printf("category authorization error")
|
||||
c.JSON(200, gin.H{"value": false, "url": "/403-page"})
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
categoryIntIds := make([]int, len(categoryId))
|
||||
for i, id := range categoryId {
|
||||
intId, _ := strconv.Atoi(id)
|
||||
categoryIntIds[i] = intId
|
||||
}
|
||||
|
||||
err := CategoryConfig.MultiselectSubCategoryDelete(categoryIntIds, userid, TenantId) //delete selected categories
|
||||
if err != nil {
|
||||
ErrorLog.Printf("MultiSelectCategoriesDelete error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
_, _, _, Total_categories, err := CategoryConfig.ListCategory(0, 0, cat.Filter{}, Parentid, TenantId)
|
||||
|
||||
if pageno != "" {
|
||||
abc, _ := strconv.Atoi(pageno)
|
||||
abc = abc - 1
|
||||
multi := abc * 10
|
||||
multiInt64 := int64(multi)
|
||||
if Total_categories > multiInt64 {
|
||||
url = "/admin/categories/addcategory/" + parent_id + "?page=" + pageno
|
||||
} else {
|
||||
abcd, _ := strconv.Atoi(pageno)
|
||||
_page := abcd - 1
|
||||
pages := strconv.Itoa(_page)
|
||||
url = "/admin/categories/addcategory/" + parent_id + "?page=" + pages
|
||||
}
|
||||
} else {
|
||||
url = "/admin/categories/addcategory/" + parent_id
|
||||
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true, "url": url})
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
func CategoriesSettings(c *gin.Context) {
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
ModuleName, TabName,_ := ModuleRouteName(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "category_settings.html", gin.H{"Menu": menu, "HeadTitle": translate.Categories, "Categoriesmenu": true, "title": ModuleName, "Tabmenu": TabName})
|
||||
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"spurt-cms/models"
|
||||
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func ChannelSettingView(c *gin.Context) {
|
||||
|
||||
//assign need varibles
|
||||
var (
|
||||
limit int
|
||||
offset int
|
||||
filter models.Filter
|
||||
templates []models.TblEmailTemplate
|
||||
template []models.TblEmailTemplate
|
||||
templatelists []models.TblEmailTemplate
|
||||
)
|
||||
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
if c.Query("limit") == "" {
|
||||
limit = Limit
|
||||
} else {
|
||||
limit, _ = strconv.Atoi(c.Query("limit"))
|
||||
}
|
||||
|
||||
if page != 0 {
|
||||
offset = (page - 1) * limit
|
||||
}
|
||||
|
||||
flag := false
|
||||
|
||||
_, Totaltemplates := models.GetTemplateList(&templates, 0, 0, filter, flag, TenantId)
|
||||
|
||||
models.GetTemplateList(&template, limit, offset, filter, flag, TenantId)
|
||||
|
||||
for _, val := range template {
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.Format(Datelayout)
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.Format(Datelayout)
|
||||
}
|
||||
templatelists = append(templatelists, val)
|
||||
}
|
||||
|
||||
paginationendcount := len(template) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(page, int(Totaltemplates), limit)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
ModuleName, TabName, moduleid := ModuleRouteName(c)
|
||||
|
||||
templatelist, _ := models.GetTemplatesByModuleId(moduleid, TenantId)
|
||||
|
||||
c.HTML(200, "channelsettings.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: page + 1,
|
||||
PreviousPage: page - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: page + 2,
|
||||
TwoBelow: page - 2,
|
||||
ThreeAfter: page + 3,
|
||||
}, "Menu": menu, "translate": translate, "Page": Page, "Count": Totaltemplates, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": page, "Limit": limit, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Filter": filter, "Template": templatelist, "csrf": csrf.GetToken(c), "title": ModuleName, "Emailsmenu": true, "Tooltiptitle": translate.Setting.Emailtooltip, "Tabmenu": TabName, "HeadTitle": translate.Channell.Channels})
|
||||
}
|
||||
|
||||
func ChannelSettingUpdate(c *gin.Context) {
|
||||
var templatedata []map[string]string
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("templatestatus")), &templatedata); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
fmt.Println("templatedata", templatedata)
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
var template models.TblEmailTemplate
|
||||
|
||||
for _, val := range templatedata {
|
||||
|
||||
template.Id, _ = strconv.Atoi(val["templateid"])
|
||||
|
||||
template.IsActive, _ = strconv.Atoi(val["status"])
|
||||
|
||||
err1 := models.TemplateStatus(template.Id, template.IsActive, userid, TenantId)
|
||||
|
||||
if err1 != nil {
|
||||
|
||||
log.Println(err1)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Channel Settings Updated Successfully", 3600, "", "", false, false)
|
||||
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
|
||||
c.Redirect(301, "/entries/settings")
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,48 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"spurt-cms/config"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
const (
|
||||
Limit int = 10
|
||||
MLimit int = 6
|
||||
)
|
||||
|
||||
var (
|
||||
TZONE, _ = time.LoadLocation(os.Getenv("TIME_ZONE"))
|
||||
CurrentLanugageId int
|
||||
Datelayout = "02 Jan 2006 03:04 PM"
|
||||
LogoPath string
|
||||
ExpantLogoPath string
|
||||
PermissionModRoute = []string{}
|
||||
DB = config.SetupDB()
|
||||
ErrorLog *log.Logger
|
||||
WarnLog *log.Logger
|
||||
Lastlogin = make(map[int]string)
|
||||
Lang_codearr = []string{"en", "es", "fr", "ger"}
|
||||
Token string
|
||||
maxSize = 8 * 1024 * 1024 // 8MB
|
||||
SecretKey = os.Getenv("JWT_SECRET")
|
||||
OwndeskUrl = os.Getenv("OWNDESK_URL")
|
||||
CompanyProfilePath = os.Getenv("COMPANY_PROFILE_PATH")
|
||||
)
|
||||
|
||||
var TenantId string
|
||||
|
||||
func Tenant_Id(c *gin.Context) {
|
||||
TenantId = c.GetString("tenant_id")
|
||||
}
|
||||
|
||||
func RemoveSpecialCharacter(str string) string {
|
||||
|
||||
stri := regexp.MustCompile(`[^a-zA-Z0-9 ]+`).ReplaceAllString(str, "")
|
||||
|
||||
return stri
|
||||
}
|
||||
@@ -1,497 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/auth"
|
||||
chn "github.com/spurtcms/channels"
|
||||
mem "github.com/spurtcms/member"
|
||||
memaccess "github.com/spurtcms/member-access"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
|
||||
type memgrp struct {
|
||||
Memgrp []string `json:"access_granted_memgrps"`
|
||||
}
|
||||
|
||||
type entry struct {
|
||||
Entries []memaccess.Entry `json:"channelEntries"`
|
||||
}
|
||||
|
||||
/*content access list*/
|
||||
func ContentAccessControlList(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
filter memaccess.Filter
|
||||
)
|
||||
|
||||
//get values from html from data
|
||||
limit := strconv.Itoa(Limit)
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if page != 0 {
|
||||
offset = (page - 1) * limt
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Member Restrict", auth.CRUD, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Restrict authorization error:")
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Member Restrict authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
var FinalContentAccessLists []memaccess.Tblaccesscontrol
|
||||
|
||||
MemberaccessConfig.DataAccess = c.GetInt("dataaccess")
|
||||
MemberaccessConfig.UserId = c.GetInt("userid")
|
||||
|
||||
//content access list
|
||||
contentAccessLists, content_access_count, err := MemberaccessConfig.ContentAccessList(limt, offset, filter, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("memberaccess list details error: %s", err)
|
||||
}
|
||||
|
||||
for _, val := range contentAccessLists {
|
||||
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.In(TZONE).Format("02 Jan 2006 03:04 PM")
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.In(TZONE).Format("02 Jan 2006 03:04 PM")
|
||||
}
|
||||
|
||||
FinalContentAccessLists = append(FinalContentAccessLists, val)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
paginationendcount := len(contentAccessLists) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, pages := Pagination(page, int(content_access_count), limt)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
menu := NewMenuController(c)
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
c.HTML(200, "contentaccesscontrollist.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: page + 1,
|
||||
PreviousPage: page - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: page + 2,
|
||||
TwoBelow: page - 2,
|
||||
ThreeAfter: page + 3,
|
||||
}, "Menu": menu, "title": ModuleName, "Searchtrue": filterflag, "linktitle": "Member Restrict", "csrf": csrf.GetToken(c), "translate": translate, "Count": content_access_count, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": page, "Limit": limt, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Pages": pages, "Filter": filter, "ContentAccess": FinalContentAccessLists, "Length": len(FinalContentAccessLists), "HeadTitle": translate.Memberss.Members, "Membermenu": true, "Restrictmenu": true, "Tabmenu": TabName})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*create content access control*/
|
||||
func NewContentAccess(c *gin.Context) {
|
||||
|
||||
var (
|
||||
spaceDefault string
|
||||
ChannelDetails []chn.Tblchannel
|
||||
)
|
||||
|
||||
filter := ""
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Member Restrict", auth.CRUD, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Restrict authorization error:")
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Member Restrict authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
|
||||
channelCount, err := ChannelConfig.GetChannelCount(TenantId) //get channel count
|
||||
if err != nil {
|
||||
ErrorLog.Printf("channel count error: %s", err)
|
||||
}
|
||||
|
||||
_, memgrpcount, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{ActiveGroupsOnly: true}, TenantId) // get active member group count
|
||||
if err != nil {
|
||||
ErrorLog.Printf("channel count error: %s", err)
|
||||
}
|
||||
|
||||
membergroup, _, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{Limit: int(memgrpcount), ActiveGroupsOnly: true}, TenantId) // get active member group
|
||||
if err != nil {
|
||||
ErrorLog.Printf("channel count error: %s", err)
|
||||
}
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
|
||||
fmt.Println("check _is", TenantId)
|
||||
ChannelDetails, err = ChannelConfig.GetChannelsWithEntries(TenantId) //get active channel&entries list
|
||||
if err != nil {
|
||||
ErrorLog.Printf("channel count error: %s", err)
|
||||
}
|
||||
spaceDefault = "channel"
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
c.HTML(200, "addcontentaccess.html", gin.H{"Menu": menu, "linktitle": "Create Content Access", "csrf": csrf.GetToken(c), "translate": translate, "Filter": filter, "Membergroup": membergroup, "Button": "Save", "MembergroupLength": len(membergroup), "HeadTitle": translate.Memberaccess, "ChannelDetails": ChannelDetails, "ChannelLength": len(ChannelDetails), "ChannelCount": channelCount, "MemberCount": memgrpcount, "Membermenu": true, "Restrictmenu": true, "SpaceDefault": spaceDefault, "Tabmenu": TabName, "title": ModuleName, "Accesscontent": "Create Memberaccess"})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
func GrantContentAccessControl(c *gin.Context) {
|
||||
|
||||
var (
|
||||
|
||||
entriez entry
|
||||
memgrp_parse memgrp
|
||||
conv_memgrps []int
|
||||
)
|
||||
|
||||
//get values from html form data
|
||||
title := c.PostForm("title")
|
||||
entries := c.PostForm("entries")
|
||||
memgrps := c.PostForm("memgrps")
|
||||
userid := c.GetInt("userid")
|
||||
fmt.Println("title", title, entries, memgrps)
|
||||
|
||||
|
||||
json.Unmarshal([]byte(memgrps), &memgrp_parse)
|
||||
json.Unmarshal([]byte(entries), &entriez)
|
||||
|
||||
|
||||
memgrp_array := memgrp_parse.Memgrp
|
||||
entries_array := entriez.Entries
|
||||
|
||||
if title == "" || len(memgrp_array) == 0 || len(entries_array) == 0 {
|
||||
|
||||
c.SetCookie("Alert-msg", "Please grant atleast one page access to MemberGroups", 3600, "", "", false, false)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
for _, memgrp_id := range memgrp_array {
|
||||
conv_memgrp_id, _ := strconv.Atoi(memgrp_id)
|
||||
conv_memgrps = append(conv_memgrps, conv_memgrp_id)
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Member Restrict", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Restrict authorization error:")
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Member Restrict authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
fmt.Println("idcheck", TenantId)
|
||||
|
||||
acc, cerr := MemberaccessConfig.CreateAccessControl(title, userid, TenantId) //create contentaccess
|
||||
if cerr != nil {
|
||||
ErrorLog.Printf("memberaccess create error: %s", cerr)
|
||||
}
|
||||
|
||||
cherr := MemberaccessConfig.CreateRestrictEntries(acc.Id, conv_memgrps, entries_array, userid, TenantId) //create accessentries
|
||||
if cherr != nil {
|
||||
ErrorLog.Printf("createaccesscontrolpage error: %s", cherr)
|
||||
}
|
||||
|
||||
|
||||
if cerr != nil {
|
||||
|
||||
log.Println(cerr)
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Content Access Rights Granted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func EditContentAcess(c *gin.Context) {
|
||||
|
||||
var (
|
||||
spaceDefault string
|
||||
ChannelDetails []chn.Tblchannel
|
||||
)
|
||||
|
||||
content_access_id, _ := strconv.Atoi(c.Param("accessId"))
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Member Restrict", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Restrict authorization error:")
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Member Restrict authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
|
||||
accessControl, err := MemberaccessConfig.GetControlAccessById(content_access_id, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("memberaccess list details error: %s", err)
|
||||
}
|
||||
|
||||
channelCount, err := ChannelConfig.GetChannelCount(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("getchannelcount error: %s", err)
|
||||
}
|
||||
_, memgrpcount, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{ActiveGroupsOnly: true}, TenantId) //get membergroup count
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroupcount error: %s", err)
|
||||
}
|
||||
|
||||
membergroup, _, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{Limit: int(memgrpcount), ActiveGroupsOnly: true}, TenantId) //get active member group
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup error: %s", err)
|
||||
}
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
|
||||
ChannelDetails, err = ChannelConfig.GetChannelsWithEntries(TenantId) //get active channel&entries list
|
||||
if err != nil {
|
||||
ErrorLog.Printf("getchannelentries error: %s", err)
|
||||
}
|
||||
spaceDefault = "channel"
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
if strings.Contains(c.Request.URL.Path, "copy-accesscontrol") {
|
||||
c.HTML(200, "addcontentaccess.html", gin.H{"Menu": menu, "csrf": csrf.GetToken(c), "translate": translate, "Membergroup": membergroup, "MembergroupLength": len(membergroup), "HeadTitle": translate.Memberaccess, "ChannelDetails": ChannelDetails, "ChannelLength": len(ChannelDetails), "ChannelCount": channelCount, "MemberCount": memgrpcount, "AccessControl": accessControl, "Button": "Copy", "Membermenu": true, "Restrictmenu": true, "SpaceDefault": spaceDefault, "Tabmenu": TabName, "title": ModuleName, "Accesscontent": "Edit Memberaccess"})
|
||||
return
|
||||
}
|
||||
|
||||
c.HTML(200, "addcontentaccess.html", gin.H{"Menu": menu, "linktitle": "Edit Content Access", "csrf": csrf.GetToken(c), "translate": translate, "Membergroup": membergroup, "MembergroupLength": len(membergroup), "HeadTitle": translate.Memberaccess, "ChannelDetails": ChannelDetails, "ChannelLength": len(ChannelDetails), "ChannelCount": channelCount, "MemberCount": memgrpcount, "AccessControl": accessControl, "Button": "Update", "Membermenu": true, "Restrictmenu": true, "SpaceDefault": spaceDefault, "Tabmenu": TabName, "title": ModuleName, "Accesscontent": "Edit Memberaccess"})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func GetContentAccessPages(c *gin.Context) {
|
||||
|
||||
var (
|
||||
conv_memgrpIds []string
|
||||
conv_spaceIds []string
|
||||
conv_channelIds []string
|
||||
)
|
||||
|
||||
accessId, _ := strconv.Atoi(c.Query("content_access_id"))
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Member Restrict", auth.CRUD, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Restrict authorization error:")
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Member Restrict authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
accessControl, aerr := MemberaccessConfig.GetControlAccessById(accessId, TenantId) //content access
|
||||
if aerr != nil {
|
||||
ErrorLog.Printf("getmemberaccess error: %s", aerr)
|
||||
}
|
||||
|
||||
|
||||
membergroupIds, merr := MemberaccessConfig.GetaccessMemberGroup(accessId, TenantId) //access membergroup
|
||||
if merr != nil {
|
||||
ErrorLog.Printf("getaccessmembergroup error: %s", merr)
|
||||
}
|
||||
|
||||
channelIds, channelEntries, cerr := MemberaccessConfig.GetselectedEntiresByAccessControlId(accessId, TenantId) //access entries
|
||||
if cerr != nil {
|
||||
ErrorLog.Printf("getaccessentries list details error: %s", cerr)
|
||||
}
|
||||
|
||||
for _, memgrpId := range membergroupIds {
|
||||
conv_memgrpId := strconv.Itoa(memgrpId)
|
||||
conv_memgrpIds = append(conv_memgrpIds, conv_memgrpId)
|
||||
}
|
||||
|
||||
|
||||
for _, channelId := range channelIds {
|
||||
conv_channelid := strconv.Itoa(channelId)
|
||||
conv_channelIds = append(conv_channelIds, conv_channelid)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"AccessId": accessControl, "MemberGroups": conv_memgrpIds, "Spaces": conv_spaceIds, "Channels": conv_channelIds, "ChannelEntries": channelEntries})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func UpdateContentAccessControl(c *gin.Context) {
|
||||
|
||||
var (
|
||||
|
||||
memgrp_parse memgrp
|
||||
entriez entry
|
||||
conv_memgrps []int
|
||||
)
|
||||
|
||||
//get values from hmtl form data
|
||||
accessId, _ := strconv.Atoi(c.PostForm("content_access_id"))
|
||||
title := c.PostForm("title")
|
||||
|
||||
entries := c.PostForm("entries")
|
||||
memgrps := c.PostForm("memgrps")
|
||||
|
||||
|
||||
json.Unmarshal([]byte(memgrps), &memgrp_parse)
|
||||
json.Unmarshal([]byte(entries), &entriez)
|
||||
|
||||
|
||||
|
||||
memgrp_array := memgrp_parse.Memgrp
|
||||
|
||||
entries_array := entriez.Entries
|
||||
|
||||
if title == "" || len(memgrp_array) == 0 || len(entries_array) == 0 {
|
||||
|
||||
c.SetCookie("Alert-msg", "Please grant atleast one page access to MemberGroups", 3600, "", "", false, false)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
for _, memgrp_id := range memgrp_array {
|
||||
conv_memgrp_id, _ := strconv.Atoi(memgrp_id)
|
||||
conv_memgrps = append(conv_memgrps, conv_memgrp_id)
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Member Restrict", auth.CRUD, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Restrict authorization error:")
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Member Restrict authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
|
||||
err := MemberaccessConfig.UpdateAccessControl(accessId, title, userid, TenantId) //update access control
|
||||
if err != nil {
|
||||
ErrorLog.Printf("updateaccesscontrol error: %s", err)
|
||||
}
|
||||
|
||||
uerr := MemberaccessConfig.UpdateRestrictEntries(accessId, conv_memgrps, entries_array, userid, TenantId) //update accesscontrol page
|
||||
if uerr != nil {
|
||||
ErrorLog.Printf("updateaccesscontrolpage error: %s", uerr)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Content Access Rights Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
return
|
||||
}
|
||||
c.Redirect(301, "/403-page")
|
||||
}
|
||||
|
||||
func DeleteAccessControl(c *gin.Context) {
|
||||
|
||||
var url string
|
||||
accessId, _ := strconv.Atoi(c.Param("accessId"))
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Member Restrict", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Restrict authorization error:")
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Member Restrict authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
|
||||
err := MemberaccessConfig.DeleteMemberAccessControl(accessId, userid, TenantId) //deleteaccesscontrol
|
||||
if err != nil {
|
||||
ErrorLog.Printf("deleteaccescontrol error: %s", err)
|
||||
}
|
||||
|
||||
pageno := c.Query("page")
|
||||
if pageno != "" {
|
||||
url = "/memberaccess?page=" + pageno
|
||||
} else {
|
||||
url = "/memberaccess/"
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Content Access Rights Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func GetChannelsAndItsEntries(c *gin.Context) {
|
||||
|
||||
Channellist, err := ChannelConfig.GetChannelsWithEntries(TenantId) //get active chennal&entries
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"Channels": Channellist})
|
||||
}
|
||||
@@ -1,202 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"spurt-cms/models"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
chn "github.com/spurtcms/channels"
|
||||
formbuilders "github.com/spurtcms/forms-builders"
|
||||
mem "github.com/spurtcms/member"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
var LastUpdatedTime string
|
||||
|
||||
func LastUpdated() string {
|
||||
currentTime := time.Now()
|
||||
LastUpdatedTime = time.Now().Format("2 Jan 2006")
|
||||
return currentTime.Format("02-01-2006")
|
||||
}
|
||||
|
||||
func DashboardView(c *gin.Context) {
|
||||
|
||||
var (
|
||||
user_id = c.GetInt("userid")
|
||||
memlist []mem.Tblmember
|
||||
newEntries []chn.Tblchannelentries
|
||||
allchnentry []chn.Tblchannelentries
|
||||
chaid int
|
||||
newblocks []models.TblBlock
|
||||
newformlist []formbuilders.TblForms
|
||||
usercount int
|
||||
Newusercount int
|
||||
membercount int
|
||||
Newmembercount int
|
||||
)
|
||||
menu := NewMenuController(c)
|
||||
|
||||
usercount, Newusercount, _ = NewTeamWP.DashboardUserCount(TenantId)
|
||||
|
||||
// usercount, Newusercount, _ := NewTeamWP.DashboardUserCount(TenantId)
|
||||
membercount, Newmembercount, _ = MemberConfigWP.DashboardMemberCount(TenantId)
|
||||
|
||||
Totalentris, Newentrycount, _ := ChannelConfigWP.DashboardEntriesCount(TenantId)
|
||||
Totalblock, Newblockcount, _ := BlockConfig.DashBoardBlockCount(TenantId)
|
||||
|
||||
// Pagescount, Newpagescount, _ := CoursesConfigWP.DashboardPagesCount()
|
||||
|
||||
Newactivelist, _ := ChannelConfigWP.DashboardRecentActivites(TenantId)
|
||||
|
||||
var NewActive []chn.RecentActivities
|
||||
|
||||
for _, val := range Newactivelist {
|
||||
|
||||
if val.Imagepath != "" {
|
||||
val.Imagepath = "/image-resize?name=" + val.Imagepath
|
||||
}
|
||||
|
||||
NewActive = append(NewActive, val)
|
||||
}
|
||||
|
||||
memfilter := mem.Filter{Keyword: strings.Trim(c.DefaultQuery("keyword", ""), " ")}
|
||||
memflag := false
|
||||
|
||||
memberlist, _, _ := MemberConfigWP.ListMembers(0, 0, memfilter, memflag, TenantId)
|
||||
|
||||
maxmem := 5
|
||||
|
||||
for i := 0; i < len(memberlist) && i < maxmem; i++ {
|
||||
memberlist[i].CreatedDate = memberlist[i].CreatedOn.In(TZONE).Format(Datelayout)
|
||||
if !memberlist[i].ModifiedOn.IsZero() {
|
||||
memberlist[i].ModifiedDate = memberlist[i].ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
memberlist[i].ModifiedDate = memberlist[i].CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
memlist = append(memlist, memberlist[i])
|
||||
}
|
||||
|
||||
flag1 := true
|
||||
|
||||
Finalchannelslist, _, _ := ChannelConfigWP.ListChannel(chn.Channels{Limit: 100, Offset: 0, IsActive: flag1, TenantId: TenantId})
|
||||
|
||||
sort.Slice(Finalchannelslist, func(i, j int) bool {
|
||||
|
||||
return Finalchannelslist[i].EntriesCount > Finalchannelslist[j].EntriesCount
|
||||
|
||||
})
|
||||
|
||||
var chnallist []chn.Tblchannel
|
||||
|
||||
for _, val := range Finalchannelslist {
|
||||
|
||||
_, _, entrcount, _ := ChannelConfig.ChannelEntriesList(chn.Entries{ChannelId: val.Id, Limit: 0, Offset: 0, Keyword: "", ChannelName: "", Title: "", Status: ""}, TenantId)
|
||||
|
||||
val.EntriesCount = entrcount
|
||||
|
||||
chnallist = append(chnallist, val)
|
||||
|
||||
}
|
||||
maxRecords := 6
|
||||
if len(chnallist) < maxRecords {
|
||||
maxRecords = len(chnallist)
|
||||
}
|
||||
|
||||
topsix_channels := chnallist[:maxRecords]
|
||||
|
||||
chnentry, _, _, _ := ChannelConfigWP.ChannelEntriesList(chn.Entries{ChannelId: chaid}, TenantId)
|
||||
|
||||
for _, entry := range chnentry {
|
||||
|
||||
entry.CreatedDate = entry.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
if !entry.ModifiedOn.IsZero() {
|
||||
entry.ModifiedDate = entry.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
entry.ModifiedDate = entry.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
allchnentry = append(allchnentry, entry)
|
||||
}
|
||||
|
||||
maxLength := 6
|
||||
|
||||
for i := 0; i < len(allchnentry) && i < maxLength; i++ {
|
||||
newEntries = append(newEntries, allchnentry[i])
|
||||
}
|
||||
|
||||
BlockConfig.UserId = c.GetInt("userid")
|
||||
// BlockConfig.DataAccess =
|
||||
// blocklist, _, _ := BlockConfig.BlockList(100, 0, blocks.Filter{}, TenantId)
|
||||
|
||||
blocklist, _, _ := models.BlockLists(100, 0, models.Filter{}, TenantId)
|
||||
|
||||
var allblocks []models.TblBlock
|
||||
|
||||
for _, block := range blocklist {
|
||||
|
||||
block.CreatedDate = block.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
if !block.ModifiedOn.IsZero() {
|
||||
block.ModifiedDate = block.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
block.ModifiedDate = block.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
allblocks = append(allblocks, block)
|
||||
}
|
||||
|
||||
for i := 0; i < len(allblocks) && i < maxLength; i++ {
|
||||
newblocks = append(newblocks, allblocks[i])
|
||||
}
|
||||
|
||||
Formlist, _, _, _ := FormConfig.FormBuildersList(100, 0, formbuilders.Filter{}, TenantId, 1, 0, "", 0)
|
||||
|
||||
var allformlist []formbuilders.TblForms
|
||||
|
||||
for _, form := range Formlist {
|
||||
|
||||
form.CreatedDate = form.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
if !form.ModifiedOn.IsZero() {
|
||||
form.ModifiedDate = form.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
form.ModifiedDate = form.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
allformlist = append(allformlist, form)
|
||||
}
|
||||
|
||||
for i := 0; i < len(allformlist) && i < maxLength; i++ {
|
||||
newformlist = append(newformlist, allformlist[i])
|
||||
}
|
||||
// mostlyviewlist, _ := CoursesConfigWP.MostlyViewList(MLimit, TenantId)
|
||||
// recentlyviewlist, _ := CoursesConfigWP.RecentlyViewList(MLimit, TenantId)
|
||||
activememberlist, _ := MemberConfigWP.ActiveMemberList(MLimit, TenantId)
|
||||
|
||||
var activememberlist1 []mem.Tblmember
|
||||
|
||||
for _, val := range activememberlist {
|
||||
val.DateString = val.LoginTime.In(TZONE).Format(Datelayout)
|
||||
activememberlist1 = append(activememberlist1, val)
|
||||
}
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
userdata, _, _ := NewTeam.GetUserById(user_id, []int{})
|
||||
|
||||
if !userdata.LastLogin.IsZero() {
|
||||
Lastactive := userdata.LastLogin.In(TZONE).Format(Datelayout)
|
||||
Lastlogin[user_id] = Lastactive
|
||||
} else {
|
||||
Lastlogin[user_id] = "--"
|
||||
}
|
||||
|
||||
c.HTML(200, "dashboard.html", gin.H{"Menu": menu, "csrf": csrf.GetToken(c), "translate": translate, "memberlist": memlist, "recentactivity": NewActive, "Lastlogin": Lastlogin[user_id], "channelslist": topsix_channels, "newentries": newEntries, "usercount": usercount, "Newusercount": Newusercount, "membercount": membercount, "Newmembercount": Newmembercount, "entriscount": Totalentris, "Newentrycount": Newentrycount, "HeadTitle": translate.Dashboard, "title": translate.Dashboard, "linktitle": "Dashboard", "activememberlist": activememberlist1, "Dashboardmenu": true, "blockcount": Totalblock, "newblockcount": Newblockcount, "Blocklist": newblocks, "Formlist": newformlist})
|
||||
|
||||
}
|
||||
|
||||
func TruncateDescription(description string, limit int) string {
|
||||
if len(description) <= limit {
|
||||
return description
|
||||
}
|
||||
|
||||
truncated := description[:limit] + "..."
|
||||
return truncated
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,70 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"spurt-cms/models"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
func EmailConfig(c *gin.Context) {
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
var mail models.TblEmailConfigurations
|
||||
|
||||
err := models.GetMail(&mail, TenantId)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
var email models.SmtpConfig
|
||||
|
||||
if mail.SmtpConfig != nil {
|
||||
|
||||
email.Mail = mail.SmtpConfig["Mail"].(string)
|
||||
email.Password = mail.SmtpConfig["Password"].(string)
|
||||
email.Host = mail.SmtpConfig["Host"].(string)
|
||||
email.Port = mail.SmtpConfig["Port"].(string)
|
||||
|
||||
}
|
||||
|
||||
c.HTML(200, "emailconfig.html", gin.H{"csrf": csrf.GetToken(c), "Smtpdiv": false, "Maildetails": mail, "EnvHost": os.Getenv("MAIL_HOST"), "EnvMail": os.Getenv("MAIL_USERNAME"), "EnvPassword": os.Getenv("MAIL_PASSWORD"), "EnvPort": os.Getenv("MAIL_PORT"), "Email": email, "Menu": menu, "translate": translate, "HeadTitle": translate.Email, "SettingsHead": true, "Emailconfigmenu": true, "title": "Email Configuration", "linktitle": "Email Configuration"})
|
||||
|
||||
}
|
||||
|
||||
func CreateEmailConfig(c *gin.Context) {
|
||||
|
||||
//get data form html form data
|
||||
mail := c.PostForm("email")
|
||||
password := c.PostForm("password")
|
||||
host := c.PostForm("host")
|
||||
port := c.PostForm("port")
|
||||
seltype := c.PostForm("seltype")
|
||||
|
||||
var Email models.TblEmailConfigurations
|
||||
|
||||
Email.Id = 1
|
||||
Email.SelectedType = seltype
|
||||
Email.SmtpConfig = datatypes.JSONMap{"Mail": mail, "Password": password, "Host": host, "Port": port}
|
||||
_, err := models.UpdateMail(&Email, TenantId)
|
||||
|
||||
|
||||
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/settings/emails/emailconfig/")
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Email Configuration Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/settings/emails/emailconfig/")
|
||||
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"spurt-cms/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func EmailTemplate(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limit, offset int
|
||||
filter models.Filter
|
||||
templates []models.TblEmailTemplate
|
||||
template []models.TblEmailTemplate
|
||||
templatelists []models.TblEmailTemplate
|
||||
)
|
||||
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
|
||||
if c.Query("limit") == "" {
|
||||
limit = Limit
|
||||
} else {
|
||||
limit, _ = strconv.Atoi(c.Query("limit"))
|
||||
}
|
||||
|
||||
if page != 0 {
|
||||
offset = (page - 1) * limit
|
||||
}
|
||||
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
flag := false
|
||||
|
||||
_, Totaltemplates := models.GetTemplateList(&templates, 0, 0, filter, flag, TenantId)
|
||||
|
||||
models.GetTemplateList(&template, limit, offset, filter, flag, TenantId)
|
||||
|
||||
for _, val := range template {
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.Format(Datelayout)
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.Format(Datelayout)
|
||||
}
|
||||
templatelists = append(templatelists, val)
|
||||
}
|
||||
|
||||
paginationendcount := len(template) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(page, int(Totaltemplates), limit)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "emailtemplate.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: page + 1,
|
||||
PreviousPage: page - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: page + 2,
|
||||
TwoBelow: page - 2,
|
||||
ThreeAfter: page + 3,
|
||||
}, "Menu": menu, "HeadTitle": translate.Memberss.Email, "translate": translate, "Page": Page, "Count": Totaltemplates, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": page, "Limit": limit, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Filter": filter, "Template": templatelists, "csrf": csrf.GetToken(c), "SettingsHead": true, "title": "Email Templates", "linktitle": "Email Templates", "Emailsmenu": true, "Tooltiptitle": translate.Setting.Emailtooltip})
|
||||
}
|
||||
|
||||
func EditTemplate(c *gin.Context) {
|
||||
|
||||
var (
|
||||
temp models.TblEmailTemplate
|
||||
err error
|
||||
id int
|
||||
)
|
||||
|
||||
id, err = strconv.Atoi(c.Query("id"))
|
||||
if err != nil {
|
||||
c.JSON(500, "")
|
||||
}
|
||||
|
||||
models.GetTempdetail(&temp, id, TenantId)
|
||||
|
||||
c.JSON(200, temp)
|
||||
|
||||
}
|
||||
|
||||
func UpdateTemplate(c *gin.Context) {
|
||||
|
||||
if c.PostForm("tempdesc") == "" || c.PostForm("tempsub") == "" || c.PostForm("temcont") == "" {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/emails/")
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
template models.TblEmailTemplate
|
||||
url string
|
||||
)
|
||||
|
||||
fmt.Println("Test")
|
||||
|
||||
pageno := c.PostForm("pageno")
|
||||
pathname := c.PostForm("pathname")
|
||||
|
||||
if pathname != "" {
|
||||
url = pathname
|
||||
} else if pageno != "" {
|
||||
url = "/admin/settings/emails?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/emails/"
|
||||
}
|
||||
|
||||
template.TemplateName = c.PostForm("tempname")
|
||||
template.TemplateSubject = (c.PostForm("tempsub"))
|
||||
template.TemplateMessage = c.PostForm("temcont")
|
||||
template.TemplateDescription = c.PostForm("tempdesc")
|
||||
template.ModifiedBy = c.GetInt("userid")
|
||||
template.Id, _ = strconv.Atoi(c.PostForm("userid"))
|
||||
template.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().In(TZONE).Format("2006-01-02 15:04:05"))
|
||||
|
||||
err := models.UpdateTemplate(&template, TenantId)
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Templateupdatedsuccessfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
/* template status*/
|
||||
func TempIsActive(c *gin.Context) {
|
||||
|
||||
id, _ := strconv.Atoi(c.Request.PostFormValue("id"))
|
||||
val, _ := strconv.Atoi(c.Request.PostFormValue("isactive"))
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
err := models.TemplateStatus(id, val, userid, TenantId)
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"status": false})
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"status": true})
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,10 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import "errors"
|
||||
|
||||
var (
|
||||
ErrInternalServerError = "internalserverr"
|
||||
ErrLoadLocation = errors.New("timeZone not found")
|
||||
ErrGettingTemplateList = errors.New("unable to fetch the template list")
|
||||
ErrGettingTemplateModuleList = errors.New("unable to fetch the template module list")
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,303 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"spurt-cms/models"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
// set default timezone in general settings
|
||||
func SetInitialGeneralValues() {
|
||||
|
||||
tblgeneralsetting, err := models.GetGeneralSettings(TenantId)
|
||||
|
||||
fmt.Println("defaultValues", tblgeneralsetting)
|
||||
|
||||
if err != nil {
|
||||
zone, _ := time.LoadLocation("Asia/Kolkata")
|
||||
ErrorLog.Printf("Getting data from general settings Error: %s", err)
|
||||
TZONE = zone
|
||||
CurrentLanugageId = 1
|
||||
Datelayout = "02 Jan 2006 3:04 pm"
|
||||
return
|
||||
}
|
||||
|
||||
CurrentLanugageId = tblgeneralsetting.LanguageId
|
||||
LogoPath = tblgeneralsetting.LogoPath
|
||||
ExpantLogoPath = tblgeneralsetting.ExpandLogoPath
|
||||
Datelayout = DateFormater(tblgeneralsetting.DateFormat, tblgeneralsetting.TimeFormat)
|
||||
zone, zerr := time.LoadLocation(tblgeneralsetting.TimeZone)
|
||||
|
||||
if zerr != nil {
|
||||
fmt.Println(zerr)
|
||||
ErrorLog.Printf("Invalid Timezone Error: %s", err)
|
||||
TZONE = zone
|
||||
return
|
||||
}
|
||||
|
||||
TZONE = zone
|
||||
|
||||
}
|
||||
|
||||
func GeneralSettings(c *gin.Context) {
|
||||
|
||||
roleId := c.GetInt("role")
|
||||
|
||||
fmt.Println("roleId", roleId)
|
||||
|
||||
fmt.Println("tenantIdGetSettings", TenantId)
|
||||
|
||||
tblgeneralsetting, err := models.GetGeneralSettings(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Getting data from general settings Error:%s", err)
|
||||
}
|
||||
|
||||
fmt.Println("dateFormattttt", tblgeneralsetting.DateFormat)
|
||||
|
||||
var language1 []models.TblLanguage
|
||||
|
||||
query.DataAccess = c.GetInt("dataaccess")
|
||||
query.UserId = c.GetInt("userid")
|
||||
Language, _ := query.GetLanguageList(&language1, 0, 0, models.Filter{}, true, TenantId)
|
||||
|
||||
selectedtype, err := GetSelectedType()
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Getting data from selected type Error:%s", err)
|
||||
}
|
||||
|
||||
if !strings.Contains(tblgeneralsetting.LogoPath, "/public/img/") {
|
||||
if tblgeneralsetting.LogoPath != "" {
|
||||
|
||||
if tblgeneralsetting.StorageType == "local" {
|
||||
tblgeneralsetting.LogoPath = "/" + tblgeneralsetting.LogoPath
|
||||
|
||||
} else if tblgeneralsetting.StorageType == "aws" {
|
||||
tblgeneralsetting.LogoPath = "/image-resize?name=" + tblgeneralsetting.LogoPath
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
timezones, err := models.GetTimeZones(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Getting data from general settings Error:%s", err)
|
||||
}
|
||||
|
||||
c.HTML(200, "general-settings.html", gin.H{"csrf": csrf.GetToken(c), "HeadTitle": translate.Setting.Generalsettings, "Menu": menu, "translate": translate, "SettingsHead": true, "Generalmenu": true, "Tooltiptitle": translate.Setting.Teamstooltip, "title": "General Settings", "linktitle": "General Settings", "GeneralSetting": tblgeneralsetting, "Langugage": Language, "TimeZone": timezones, "StorageType": selectedtype.SelectedType, "RoleId": roleId})
|
||||
}
|
||||
|
||||
func DateFormater(date string, time string) string {
|
||||
|
||||
var Layout string
|
||||
|
||||
switch date {
|
||||
|
||||
case "dd/mm/yyyy":
|
||||
if time == "12" {
|
||||
Layout = "02/01/2006 3:04 pm"
|
||||
} else {
|
||||
Layout = "02/01/2006 15:04"
|
||||
}
|
||||
|
||||
case "mm/dd/yyyy":
|
||||
if time == "12" {
|
||||
Layout = "01/02/2006 3:04 pm"
|
||||
} else {
|
||||
Layout = "01/02/2006 15:04"
|
||||
}
|
||||
|
||||
case "dd-mm-yyyy":
|
||||
if time == "12" {
|
||||
Layout = "01-02-2006 3:04 pm"
|
||||
} else {
|
||||
Layout = "01-02-2006 15:04"
|
||||
}
|
||||
|
||||
case "yyyy-mm-dd":
|
||||
if time == "12" {
|
||||
Layout = "2006-01-02 3:04 pm"
|
||||
} else {
|
||||
Layout = "2006-01-02 15:04"
|
||||
}
|
||||
|
||||
case "dd mmm yyyy":
|
||||
if time == "12" {
|
||||
Layout = "02 Jan 2006 3:04 pm"
|
||||
} else {
|
||||
Layout = "02 Jan 2006 15:04"
|
||||
}
|
||||
|
||||
default:
|
||||
if time == "12" {
|
||||
Layout = "02 Jan 2006 3:04 pm"
|
||||
} else {
|
||||
Layout = "02 Jan 2006 15:04"
|
||||
}
|
||||
}
|
||||
|
||||
return Layout
|
||||
}
|
||||
|
||||
func SetTimeZone(timezone string) {
|
||||
|
||||
zone, err := time.LoadLocation(timezone)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(ErrLoadLocation)
|
||||
fmt.Println("Set Default UTC")
|
||||
}
|
||||
|
||||
TZONE = zone
|
||||
|
||||
}
|
||||
|
||||
func UpdateGeneralSettings(c *gin.Context) {
|
||||
|
||||
companyName := c.PostForm("companyname")
|
||||
// imagePath1 := c.PostForm("logo_imgpath")
|
||||
expandimagePath := c.PostForm("expandlogo_imgpath")
|
||||
dateFormat := c.PostForm("dateformat")
|
||||
timeForamt := c.PostForm("timeformat")
|
||||
timezone := c.PostForm("timezon")
|
||||
languagedefault, _ := strconv.Atoi(c.PostForm("language"))
|
||||
fmt.Println("dateFOrmat", dateFormat)
|
||||
|
||||
var (
|
||||
imgPath string
|
||||
err error
|
||||
)
|
||||
|
||||
response := make(gin.H)
|
||||
|
||||
storageType, err := GetSelectedType()
|
||||
if err != nil {
|
||||
ErrorLog.Println(err)
|
||||
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if strings.Contains(expandimagePath, "data:image/jpeg;base64") || strings.Contains(expandimagePath, "data:image/png;base64") || strings.Contains(expandimagePath, "data:image/svg+xml;base64") {
|
||||
|
||||
tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Println(err)
|
||||
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if storageType.SelectedType == "aws" {
|
||||
var (
|
||||
tempString, imageName string
|
||||
imageByte []byte
|
||||
)
|
||||
|
||||
imageName, tempString, imageByte, err = ConvertBase64toByte(expandimagePath, "user")
|
||||
if err != nil {
|
||||
ErrorLog.Println(err)
|
||||
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
tempString = tenantDetails.S3FolderName + tempString
|
||||
|
||||
err = storagecontroller.UploadCropImageS3(imageName, tempString, imageByte)
|
||||
if err != nil {
|
||||
ErrorLog.Println(err)
|
||||
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
imgPath = tempString
|
||||
|
||||
} else if storageType.SelectedType == "local" {
|
||||
var tempImgPath string
|
||||
|
||||
_, tempImgPath, err = ConvertBase64(expandimagePath, "storage/user")
|
||||
if err != nil {
|
||||
ErrorLog.Println(err)
|
||||
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
imgPath = "/" + tempImgPath
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
prefixEndIndex := strings.Index(expandimagePath, "=")
|
||||
fmt.Println("prefix", prefixEndIndex)
|
||||
|
||||
prefixRemovedPath := expandimagePath[prefixEndIndex+1:]
|
||||
fmt.Println("prefixRemoved", prefixRemovedPath)
|
||||
|
||||
imgPath = prefixRemovedPath
|
||||
}
|
||||
|
||||
var gensetting models.TblGeneralSetting
|
||||
|
||||
gensetting.CompanyName = companyName
|
||||
gensetting.LogoPath = imgPath
|
||||
// gensetting.ExpandLogoPath = imgPath
|
||||
gensetting.DateFormat = dateFormat
|
||||
fmt.Println("dateFormat", gensetting.DateFormat)
|
||||
gensetting.TimeFormat = timeForamt
|
||||
gensetting.TimeZone = timezone
|
||||
|
||||
gensetting.LanguageId = languagedefault
|
||||
models.SetDefaultLang(gensetting.LanguageId, 0, TenantId)
|
||||
|
||||
gensetting.ModifiedBy = c.GetInt("userid")
|
||||
gensetting.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().In(TZONE).Format("2006-01-02 15:04:05"))
|
||||
gensetting.StorageType = storageType.SelectedType
|
||||
|
||||
err = models.UpdateGeneralSettings(gensetting, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Println(err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/settings/general-settings/")
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
return
|
||||
}
|
||||
|
||||
SetTimeZone(timezone)
|
||||
Datelayout = DateFormater(dateFormat, timeForamt)
|
||||
CurrentLanugageId = languagedefault
|
||||
c.SetCookie("lang", string(languagedefault), 3600, "", "", false, false)
|
||||
// LogoPath = imagePath1
|
||||
ExpantLogoPath = expandimagePath
|
||||
|
||||
// c.SetCookie("get-toast", "General Settings Updated Successfully", 3600, "", "", false, false)
|
||||
// c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/settings/general-settings/")
|
||||
|
||||
response["status"] = 1
|
||||
c.JSON(200, response)
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,854 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"spurt-cms/models"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/auth"
|
||||
"github.com/spurtcms/blocks"
|
||||
menu "github.com/spurtcms/menu"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func GoTemplates(c *gin.Context) {
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
goTemplateList []menu.TblGoTemplates
|
||||
count int
|
||||
err error
|
||||
count2 int64
|
||||
)
|
||||
goTemplateList, count1, err := MenuConfig.GoTemplatesList(TenantId)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
count = int(count1)
|
||||
if count == 0 {
|
||||
goTemplateList, count2, err = MenuConfig.GoTemplatesList("")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
count = int(count2)
|
||||
}
|
||||
|
||||
var modulenames []string
|
||||
moduleNameSet := make(map[string]struct{})
|
||||
|
||||
for _, tpl := range goTemplateList {
|
||||
if tpl.TemplateModuleName != "" {
|
||||
if _, exists := moduleNameSet[tpl.TemplateModuleName]; !exists {
|
||||
modulenames = append(modulenames, tpl.TemplateModuleName)
|
||||
moduleNameSet[tpl.TemplateModuleName] = struct{}{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
go_template_default, _ := c.Get("go_template_default")
|
||||
webbanner, _ := c.Cookie("webbanner")
|
||||
if webbanner == "" {
|
||||
webbanner = "true"
|
||||
}
|
||||
ModuleName, _, _ := ModuleRouteName(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "go_template.html", gin.H{
|
||||
"csrf": csrf.GetToken(c),
|
||||
"modulenames": modulenames, // always sorted!
|
||||
"webbanner": webbanner,
|
||||
"Menu": NewMenuController(c),
|
||||
"linktitle": "Website",
|
||||
"translate": translate,
|
||||
"title": ModuleName,
|
||||
"goTemplateList": goTemplateList,
|
||||
"count": count,
|
||||
"go_template_default": go_template_default,
|
||||
})
|
||||
}
|
||||
|
||||
func GoTemplateUpdate(c *gin.Context) {
|
||||
|
||||
templateId, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
err := NewTeam.UpdateGoTemplate(templateId, userid, TenantId)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Template Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/")
|
||||
}
|
||||
}
|
||||
|
||||
//Template edit Page//
|
||||
|
||||
func TemplateEditPage(c *gin.Context) {
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
filter menu.Filter
|
||||
)
|
||||
|
||||
limit := c.Query("limit")
|
||||
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
filter.Status = strings.Trim(c.DefaultQuery("status", ""), " ")
|
||||
filter.ToDate = strings.Trim(c.DefaultQuery("lastupdated", ""), " ")
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
permisison, perr := NewAuth.IsGranted("Website", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("website authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("website authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
webid, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
Websitedet, _ := MenuConfig.GetWebsiteById(webid, TenantId)
|
||||
|
||||
templatedetail, err := MenuConfig.GetTemplateById(Websitedet.TemplateId, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
templatedetail.DateString = templatedetail.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
|
||||
templatepagelist, count, err := MenuConfig.GetTemplatePageList(limt, offset, filter, TenantId, webid)
|
||||
var pagelist []menu.TblTemplatePages
|
||||
|
||||
for _, page := range templatepagelist {
|
||||
|
||||
page.CreatedDate = page.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
if !page.ModifiedOn.IsZero() {
|
||||
page.ModifiedDate = page.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
page.ModifiedDate = page.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
pagelist = append(pagelist, page)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
paginationendcount := len(pagelist) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(count), limt)
|
||||
|
||||
ModuleName, _, _ := ModuleRouteName(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "go_template_edit.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3}, "csrf": csrf.GetToken(c), "Searchtrue": filterflag, "Count": count, "Limit": limt, "templatepagelist": pagelist, "templatedetail": templatedetail, "websitedetail": Websitedet, "Menu": NewMenuController(c), "linktitle": "Website Page", "translate": translate, "title": ModuleName, "Paginationendcount": paginationendcount, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Page": Page, "Filter": filter, "Paginationstartcount": paginationstartcount})
|
||||
|
||||
}
|
||||
|
||||
// Template Add Page//
|
||||
func AddPageInWebsite(c *gin.Context) {
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Website", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
var editpage bool
|
||||
var mode string
|
||||
pageid, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
if pageid != 0 {
|
||||
|
||||
editpage = true
|
||||
|
||||
mode = "edit"
|
||||
} else {
|
||||
|
||||
mode = "create"
|
||||
}
|
||||
webid, _ := strconv.Atoi(c.Query("webid"))
|
||||
|
||||
PageDetail, _ := MenuConfig.GetPageById(pageid, TenantId)
|
||||
|
||||
fmt.Println(PageDetail.PageDescription, "descriptionnnn")
|
||||
|
||||
Websitedet, _ := MenuConfig.GetWebsiteById(webid, TenantId)
|
||||
|
||||
templatedetail, err := MenuConfig.GetTemplateById(Websitedet.TemplateId, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
channelist, clerr := ChannelConfig.GetPermissionChannel(TenantId)
|
||||
if clerr != nil {
|
||||
ErrorLog.Printf("create Entry listchannel error: %s", clerr)
|
||||
}
|
||||
|
||||
templatedetail.DateString = templatedetail.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
|
||||
var bytedata1 []byte
|
||||
|
||||
var bytedata2 []byte
|
||||
|
||||
var finalblocklist []blocks.TblBlock
|
||||
|
||||
blocklist, _, err := BlockConfig.BlockList(0, 0, blocks.Filter{}, TenantId)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("collection list", err)
|
||||
}
|
||||
|
||||
for _, val := range blocklist {
|
||||
var first = val.FirstName
|
||||
var last = val.LastName
|
||||
var firstn = strings.ToUpper(first[:1])
|
||||
var lastn string
|
||||
if val.LastName != "" {
|
||||
lastn = strings.ToUpper(last[:1])
|
||||
}
|
||||
|
||||
val.ChannelNames = strings.Split(val.ChannelSlugname, ",")
|
||||
|
||||
var Name = firstn + lastn
|
||||
val.NameString = Name
|
||||
|
||||
tagname := strings.Split(val.TagValue, ",")
|
||||
|
||||
val.TagValueArr = append(val.TagValueArr, tagname...)
|
||||
img := val.CoverImage
|
||||
imgcontain := "/image-resize?name="
|
||||
flag := strings.Contains(img, imgcontain)
|
||||
if !flag {
|
||||
val.CoverImage = "/image-resize?name=" + val.CoverImage
|
||||
}
|
||||
if val.ProfileImagePath != "" {
|
||||
userimg := val.ProfileImagePath
|
||||
imgflag := strings.Contains(userimg, imgcontain)
|
||||
if !imgflag {
|
||||
val.ProfileImagePath = "/image-resize?name=" + val.ProfileImagePath
|
||||
}
|
||||
}
|
||||
|
||||
finalblocklist = append(finalblocklist, val)
|
||||
|
||||
}
|
||||
|
||||
data := map[string]interface{}{"data": finalblocklist}
|
||||
|
||||
bytedata1, _ = json.Marshal(data)
|
||||
|
||||
if permisison {
|
||||
|
||||
endurl := os.Getenv("MASTER_BLOCKS_ENDPOINTURL")
|
||||
req, err := http.NewRequest("GET", endurl, nil)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create request: " + err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
query := req.URL.Query()
|
||||
|
||||
req.URL.RawQuery = query.Encode()
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Accept", "application/json")
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
masterconnect := true
|
||||
|
||||
if err != nil || resp.StatusCode != http.StatusOK {
|
||||
fmt.Println("Error connecting to master server:", err)
|
||||
masterconnect = false
|
||||
} else {
|
||||
defer resp.Body.Close()
|
||||
}
|
||||
|
||||
var responseData ResponseData
|
||||
if masterconnect {
|
||||
bodyBytes, err := io.ReadAll(resp.Body)
|
||||
if err == nil {
|
||||
fmt.Println("Error response:", err)
|
||||
resp.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
|
||||
err = json.NewDecoder(resp.Body).Decode(&responseData)
|
||||
if err != nil {
|
||||
masterconnect = false
|
||||
}
|
||||
} else {
|
||||
masterconnect = false
|
||||
}
|
||||
}
|
||||
|
||||
if !masterconnect {
|
||||
responseData = ResponseData{
|
||||
DefaultList: []models.TblMstrBlocks{},
|
||||
AllList: []models.TblMstrBlocks{},
|
||||
FinalblockList: []models.TblMstrBlocks{},
|
||||
BlockCount: 0,
|
||||
}
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Blocks", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("block collection list authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if !permisison {
|
||||
|
||||
ErrorLog.Printf("Block authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
blockBannerValue, _ := c.Cookie("blockbanner")
|
||||
if blockBannerValue == "" {
|
||||
blockBannerValue = "true"
|
||||
}
|
||||
|
||||
// fmt.Println(responseData.FinalblockList,"checkdata")
|
||||
data := map[string]interface{}{"data": responseData.FinalblockList}
|
||||
|
||||
bytedata2, _ = json.Marshal(data)
|
||||
}
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
baseurl := os.Getenv("BASE_URL")
|
||||
|
||||
urlpath := map[string]interface{}{"path": baseurl + "uploadb64image", "payload": "imagedata", "success": map[string]interface{}{"imagepath": "imagepath", "imagename": "imagename"}}
|
||||
|
||||
newpath := os.Getenv("BASE_URL")
|
||||
|
||||
ubyte, _ := json.Marshal(urlpath)
|
||||
|
||||
templatepagelist, _, err := MenuConfig.GetTemplatePageList(100, 0, menu.Filter{}, TenantId, webid)
|
||||
|
||||
ModuleName, _, _ := ModuleRouteName(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "go_template_addpage.html", gin.H{"csrf": csrf.GetToken(c), "channellist": channelist, "websitedetail": Websitedet, "pagelist": templatepagelist, "PageDetail": PageDetail, "editpage": editpage, "Storagepath": string(ubyte), "uploadurl": newpath, "StorageType": selectedtype.SelectedType, "blocks": string(bytedata1), "defaultblocks": string(bytedata2), "Mode": mode, "templatedetail": templatedetail, "Menu": NewMenuController(c), "linktitle": "Website", "translate": translate, "title": ModuleName})
|
||||
|
||||
}
|
||||
|
||||
//save page Name//
|
||||
|
||||
func SavePage(c *gin.Context) {
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Website", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("website authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("website authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
pagename := c.PostForm("page_name")
|
||||
userid := c.GetInt("userid")
|
||||
webid, _ := strconv.Atoi(c.PostForm("webid"))
|
||||
pageid, _ := strconv.Atoi(c.PostForm("pageid"))
|
||||
pagedata := c.PostForm("pagedata")
|
||||
var pagedet menu.TblTemplatePages
|
||||
var err error
|
||||
|
||||
if pageid != 0 {
|
||||
|
||||
pageinfo := menu.TblTemplatePages{
|
||||
Id: pageid,
|
||||
Name: pagename,
|
||||
TenantId: TenantId,
|
||||
ModifiedBy: userid,
|
||||
PageDescription: pagedata,
|
||||
WebsiteId: webid,
|
||||
}
|
||||
pagedet, err = MenuConfig.EditTemplatePage(&pageinfo)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.JSON(500, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
} else {
|
||||
|
||||
pageinfo := menu.TblTemplatePages{
|
||||
Name: pagename,
|
||||
TenantId: TenantId,
|
||||
CreatedBy: userid,
|
||||
IsDeleted: 0,
|
||||
Status: 1,
|
||||
WebsiteId: webid,
|
||||
}
|
||||
pagedet, err = MenuConfig.CreateTemplatePage(&pageinfo)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.JSON(500, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"page": pagedet})
|
||||
}
|
||||
|
||||
//Delete Page
|
||||
|
||||
func DeletePage(c *gin.Context) {
|
||||
permisison, perr := NewAuth.IsGranted("Website", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("website authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("website authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
pageid, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
pageno := c.Query("page")
|
||||
userid := c.GetInt("userid")
|
||||
webid := c.Query("webid")
|
||||
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/website/pages/" + webid + "?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/website/pages/" + webid
|
||||
|
||||
}
|
||||
|
||||
err := MenuConfig.DeletePage(pageid, userid, TenantId)
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("deletemenu mandatory field error: %s", perr)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("deletemenu error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Page Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
//Status Change
|
||||
|
||||
func PageStatusChange(c *gin.Context) {
|
||||
|
||||
pageid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
fmt.Println(pageid, "pageiddd")
|
||||
userid := c.GetInt("userid")
|
||||
val, _ := strconv.Atoi(c.Request.PostFormValue("isactive"))
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Website", auth.Update, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("delete menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Website authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
flg, err := MenuConfig.PageStatusChange(pageid, val, userid, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("menu status change error: %s", perr)
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
|
||||
} else {
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//SEO Page
|
||||
|
||||
func Seo(c *gin.Context) {
|
||||
|
||||
webid, _ := strconv.Atoi(c.Query("webid"))
|
||||
|
||||
seodetail, err := MenuConfig.SeoDetail(TenantId, webid)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
webbanner, _ := c.Cookie("webbanner")
|
||||
|
||||
if webbanner == "" {
|
||||
|
||||
webbanner = "true"
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
var pages bool
|
||||
|
||||
if webid != 0 {
|
||||
pages = true
|
||||
|
||||
}
|
||||
Websitedet, _ := MenuConfig.GetWebsiteById(webid, TenantId)
|
||||
templatedetail, err := MenuConfig.GetTemplateById(Websitedet.TemplateId, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
templatedetail.DateString = templatedetail.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
|
||||
ModuleName, _, _ := ModuleRouteName(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "seo.html", gin.H{"csrf": csrf.GetToken(c), "websitedetail": Websitedet, "gotemplatepageheader": pages, "templatedetail": templatedetail, "webbanner": webbanner, "Menu": NewMenuController(c), "linktitle": "SEO", "translate": translate, "title": ModuleName, "seodetail": seodetail})
|
||||
|
||||
}
|
||||
|
||||
func SeoPage(c *gin.Context) {
|
||||
|
||||
pagetitle := c.PostForm("pagetitle")
|
||||
|
||||
pagedescription := c.PostForm("pagedescription")
|
||||
|
||||
pagekeyword := c.PostForm("pagekeyword")
|
||||
|
||||
storetitle := c.PostForm("storetitle")
|
||||
|
||||
storedescription := c.PostForm("storedescription")
|
||||
|
||||
storekeyword := c.PostForm("storekeyword")
|
||||
|
||||
imagedata := c.PostForm("sitemapimage")
|
||||
|
||||
webid := c.Query("webid")
|
||||
|
||||
websiteid, _ := strconv.Atoi(c.Query("webid"))
|
||||
|
||||
var url string
|
||||
|
||||
if webid != "" && webid != "0" {
|
||||
|
||||
url = "?webid=" + webid
|
||||
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
var imageName, imagePath string
|
||||
|
||||
var imageByte []byte
|
||||
|
||||
tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
if imagedata != "" {
|
||||
imageName, imagePath, imageByte, _ = ConvertBase64toByte(imagedata, "seo")
|
||||
|
||||
imagePath = tenantDetails.S3FolderName + imagePath
|
||||
|
||||
uerr := storagecontroller.UploadCropImageS3(imageName, imagePath, imageByte)
|
||||
if uerr != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/seo"+url)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
seo := menu.TblGoTemplateSeo{
|
||||
PageTitle: pagetitle,
|
||||
PageDescription: pagedescription,
|
||||
PageKeyword: pagekeyword,
|
||||
StoreTitle: storetitle,
|
||||
StoreDescription: storedescription,
|
||||
StoreKeyword: storekeyword,
|
||||
SiteMapName: imageName,
|
||||
SiteMapPath: imagePath,
|
||||
TenantId: TenantId,
|
||||
WebsiteId: websiteid,
|
||||
}
|
||||
|
||||
if pagetitle != "" || storetitle != "" || imageName != "" {
|
||||
|
||||
err := MenuConfig.SeoUpdate(seo)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
c.SetCookie("get-toast", "SEO Details Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
|
||||
}
|
||||
|
||||
c.Redirect(301, "/admin/website/seo"+url)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//Settings Page
|
||||
|
||||
func Settings(c *gin.Context) {
|
||||
|
||||
webid, _ := strconv.Atoi(c.Query("webid"))
|
||||
|
||||
settingsdetail, err := MenuConfig.SettingsDetail(TenantId, webid)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
webbanner, _ := c.Cookie("webbanner")
|
||||
|
||||
if webbanner == "" {
|
||||
|
||||
webbanner = "true"
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
var pages bool
|
||||
|
||||
if webid != 0 {
|
||||
pages = true
|
||||
|
||||
}
|
||||
Websitedet, _ := MenuConfig.GetWebsiteById(webid, TenantId)
|
||||
templatedetail, err := MenuConfig.GetTemplateById(Websitedet.TemplateId, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
templatedetail.DateString = templatedetail.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
|
||||
ModuleName, _, _ := ModuleRouteName(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "template_setting.html", gin.H{"csrf": csrf.GetToken(c), "websitedetail": Websitedet, "gotemplatepageheader": pages, "templatedetail": templatedetail, "webbanner": webbanner, "Menu": NewMenuController(c), "linktitle": "Setting", "translate": translate, "title": ModuleName, "settingsdetail": settingsdetail})
|
||||
|
||||
}
|
||||
|
||||
func SettingPage(c *gin.Context) {
|
||||
|
||||
siteName := c.PostForm("siteName")
|
||||
|
||||
sitelogoimage := c.PostForm("sitelogoimage")
|
||||
|
||||
sitefaviconimage := c.PostForm("sitefaviconimage")
|
||||
|
||||
websiteInput := c.PostForm("websiteInput")
|
||||
|
||||
webid := c.Query("webid")
|
||||
|
||||
websiteid, _ := strconv.Atoi(c.Query("webid"))
|
||||
|
||||
var url string
|
||||
|
||||
if webid != "" && webid != "0" {
|
||||
|
||||
url = "?webid=" + webid
|
||||
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
var imageName, imagePath, favimageName, favimagePath string
|
||||
|
||||
var imageByte, favimageByte []byte
|
||||
|
||||
tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
if sitelogoimage != "" {
|
||||
|
||||
imageName, imagePath, imageByte, _ = ConvertBase64toByte(sitelogoimage, "setting")
|
||||
|
||||
imagePath = tenantDetails.S3FolderName + imagePath
|
||||
|
||||
uerr := storagecontroller.UploadCropImageS3(imageName, imagePath, imageByte)
|
||||
if uerr != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/setting"+url)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if sitefaviconimage != "" {
|
||||
favimageName, favimagePath, favimageByte, _ = ConvertBase64toByte(sitefaviconimage, "setting")
|
||||
|
||||
favimagePath = tenantDetails.S3FolderName + favimagePath
|
||||
|
||||
uerr := storagecontroller.UploadCropImageS3(favimageName, favimagePath, favimageByte)
|
||||
if uerr != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/setting"+url)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
setting := menu.TblGoTemplateSettings{
|
||||
SiteName: siteName,
|
||||
SiteLogo: imageName,
|
||||
SiteLogoPath: imagePath,
|
||||
SiteFavIcon: favimageName,
|
||||
SiteFavIconPath: favimagePath,
|
||||
WebsiteUrl: websiteInput,
|
||||
TenantId: TenantId,
|
||||
WebsiteId: websiteid,
|
||||
}
|
||||
|
||||
if siteName != "" || imageName != "" || favimageName != "" || websiteInput != "" {
|
||||
|
||||
err := MenuConfig.SettingUpdate(setting)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
c.SetCookie("get-toast", "Settings Details Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
|
||||
}
|
||||
|
||||
c.Redirect(301, "/admin/website/setting"+url)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func CheckDomainName(c *gin.Context) {
|
||||
|
||||
subdomain := c.PostForm("subdomain")
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
err := NewTeamWP.CheckDomainName(subdomain, userid, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
c.JSON(200, gin.H{"status": true})
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"status": false})
|
||||
}
|
||||
@@ -1,348 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/auth"
|
||||
chn "github.com/spurtcms/channels"
|
||||
menu "github.com/spurtcms/menu"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type TemplateInfo struct {
|
||||
TemplateName string `yaml:"template_name"`
|
||||
TemplateImage string `yaml:"template_image"`
|
||||
Description string `yaml:"description"`
|
||||
Type string `yaml:"type"`
|
||||
Channel string `yaml:"channel"`
|
||||
}
|
||||
|
||||
func WebsiteList(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
filter menu.Filter
|
||||
)
|
||||
|
||||
limit := c.Query("limit")
|
||||
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
filter.Status = strings.Trim(c.DefaultQuery("status", ""), " ")
|
||||
filter.ToDate = strings.Trim(c.DefaultQuery("lastupdated", ""), " ")
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
fmt.Println(filterflag)
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
permisison, perr := NewAuth.IsGranted("Website", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error: %s", perr)
|
||||
}
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
channelslist, _, err := ChannelConfig.ListChannel(chn.Channels{Limit: 100, Offset: 0, IsActive: false, TenantId: TenantId})
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
// goTemplateList, _, err := MenuConfig.GoTemplatesList("")
|
||||
// if err != nil {
|
||||
// fmt.Println(err)
|
||||
// }
|
||||
goTemplateList, err := ReadYamlFile("websites/themes")
|
||||
if err != nil {
|
||||
fmt.Println("Failed to read YAML files:", err)
|
||||
|
||||
}
|
||||
|
||||
host := c.Request.Host
|
||||
isLocal := false
|
||||
|
||||
if strings.Contains(host, "localhost") {
|
||||
isLocal = true
|
||||
}
|
||||
|
||||
baseurl := os.Getenv("BASE_URL")
|
||||
baseurl = strings.TrimPrefix(baseurl, "https://")
|
||||
baseurl = strings.TrimPrefix(baseurl, "http://")
|
||||
baseurl = strings.TrimSuffix(baseurl, "/")
|
||||
|
||||
fmt.Println(goTemplateList, "templatelist")
|
||||
|
||||
var FinalwebsiteList []menu.TblWebsite
|
||||
websitelist, count, err := MenuConfig.WebsiteList(limt, offset, menu.Filter{Keyword: filter.Keyword}, TenantId)
|
||||
|
||||
for _, val := range websitelist {
|
||||
val.CreatedDate = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
if strings.Contains(host, "localhost") {
|
||||
val.Subdomain = "http://" + val.Name + "." + baseurl
|
||||
} else {
|
||||
val.Subdomain = "https://" + val.Name + "." + baseurl
|
||||
}
|
||||
FinalwebsiteList = append(FinalwebsiteList, val)
|
||||
|
||||
}
|
||||
|
||||
go_template_default, _ := c.Get("go_template_default")
|
||||
webbanner, _ := c.Cookie("webbanner")
|
||||
if webbanner == "" {
|
||||
webbanner = "true"
|
||||
}
|
||||
ModuleName, _, _ := ModuleRouteName(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
//pagination calc
|
||||
paginationendcount := len(websitelist) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(count), limt)
|
||||
|
||||
c.HTML(200, "websitelist.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3},
|
||||
"csrf": csrf.GetToken(c),
|
||||
"webbanner": webbanner,
|
||||
"Menu": NewMenuController(c),
|
||||
"linktitle": "Website",
|
||||
"translate": translate,
|
||||
"title": ModuleName,
|
||||
"baseurl": baseurl,
|
||||
"go_template_default": go_template_default,
|
||||
"channelslist": channelslist,
|
||||
"templatelist": goTemplateList,
|
||||
"count": count,
|
||||
"websitelist": FinalwebsiteList,
|
||||
"isLocal": isLocal,
|
||||
"baseurlpath": os.Getenv("BASE_URL"),
|
||||
"Count": count, "Limit": limt, "Paginationendcount": paginationendcount, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Page": Page, "Filter": filter, "Paginationstartcount": paginationstartcount,
|
||||
})
|
||||
}
|
||||
|
||||
func ReadYamlFile(path string) ([]TemplateInfo, error) {
|
||||
var allTemplateInfos []TemplateInfo
|
||||
|
||||
themes, err := os.ReadDir(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, theme := range themes {
|
||||
if !theme.IsDir() {
|
||||
continue
|
||||
}
|
||||
themeDir := filepath.Join(path, theme.Name())
|
||||
|
||||
files, err := ioutil.ReadDir(themeDir)
|
||||
if err != nil {
|
||||
log.Println("Error reading theme dir:", themeDir, err)
|
||||
continue
|
||||
}
|
||||
for _, file := range files {
|
||||
if file.IsDir() || filepath.Ext(file.Name()) != ".yaml" {
|
||||
continue
|
||||
}
|
||||
data, err := ioutil.ReadFile(filepath.Join(themeDir, file.Name()))
|
||||
if err != nil {
|
||||
log.Println("Error reading file:", file.Name(), err)
|
||||
continue
|
||||
}
|
||||
var TemplateInfo TemplateInfo
|
||||
if err := yaml.Unmarshal(data, &TemplateInfo); err != nil {
|
||||
log.Println("Error parsing YAML:", file.Name(), err)
|
||||
continue
|
||||
}
|
||||
allTemplateInfos = append(allTemplateInfos, TemplateInfo)
|
||||
}
|
||||
}
|
||||
return allTemplateInfos, nil
|
||||
}
|
||||
|
||||
//Create Website Function//
|
||||
|
||||
func CreateWebsite(c *gin.Context) {
|
||||
|
||||
sitename := c.PostForm("site_name")
|
||||
channelname := c.PostForm("channel_name")
|
||||
template_name := c.PostForm("template_name")
|
||||
template_desc := c.PostForm("template_desc")
|
||||
template_image := c.PostForm("template_img")
|
||||
template_channel := c.PostForm("template_type")
|
||||
userid := c.GetInt("userid")
|
||||
fmt.Println(sitename, channelname, template_name, "checkdata")
|
||||
|
||||
temp := menu.TblGoTemplates{
|
||||
|
||||
TemplateName: template_name,
|
||||
TemplateDescription: template_desc,
|
||||
TemplateImage: template_image,
|
||||
IsDeleted: 0,
|
||||
TenantId: TenantId,
|
||||
CreatedBy: userid,
|
||||
ChannelSlugName: template_channel,
|
||||
}
|
||||
|
||||
templateinfo, _ := MenuConfig.CreateTemplate(temp)
|
||||
|
||||
websiteinfo := menu.TblWebsite{
|
||||
Name: sitename,
|
||||
ChannelNames: channelname,
|
||||
TemplateId: templateinfo.Id,
|
||||
CreatedBy: userid,
|
||||
TenantId: TenantId,
|
||||
IsDeleted: 0,
|
||||
Status: 0,
|
||||
}
|
||||
|
||||
_, err1 := MenuConfig.CreateWebsite(websiteinfo)
|
||||
|
||||
if err1 != nil {
|
||||
|
||||
fmt.Println(err1)
|
||||
}
|
||||
c.SetCookie("get-toast", "Website Created Successfully", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/")
|
||||
}
|
||||
|
||||
func UpdateWebsite(c *gin.Context) {
|
||||
webid, _ := strconv.Atoi(c.PostForm("website_id"))
|
||||
sitename := c.PostForm("site_name")
|
||||
channelname := c.PostForm("channel_name")
|
||||
template_id, _ := strconv.Atoi(c.PostForm("template_id"))
|
||||
template_name := c.PostForm("template_name")
|
||||
template_desc := c.PostForm("template_desc")
|
||||
template_image := c.PostForm("template_img")
|
||||
template_channel := c.PostForm("template_type")
|
||||
userid := c.GetInt("userid")
|
||||
fmt.Println(sitename, channelname, "checkdata")
|
||||
var templateid int
|
||||
temp := menu.TblGoTemplates{
|
||||
|
||||
TemplateName: template_name,
|
||||
TemplateDescription: template_desc,
|
||||
TemplateImage: template_image,
|
||||
IsDeleted: 0,
|
||||
TenantId: TenantId,
|
||||
CreatedBy: userid,
|
||||
ChannelSlugName: template_channel,
|
||||
}
|
||||
|
||||
if template_id == 0 {
|
||||
templateinfo, _ := MenuConfig.CreateTemplate(temp)
|
||||
|
||||
templateid = templateinfo.Id
|
||||
} else {
|
||||
|
||||
templateid = template_id
|
||||
}
|
||||
|
||||
websiteinfo := menu.TblWebsite{
|
||||
Id: webid,
|
||||
Name: sitename,
|
||||
ChannelNames: channelname,
|
||||
TemplateId: templateid,
|
||||
ModifiedBy: userid,
|
||||
TenantId: TenantId,
|
||||
}
|
||||
|
||||
_, err1 := MenuConfig.UpdateWebsite(websiteinfo)
|
||||
|
||||
if err1 != nil {
|
||||
|
||||
fmt.Println(err1)
|
||||
}
|
||||
c.SetCookie("get-toast", "Website Updated Successfully", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/")
|
||||
|
||||
}
|
||||
|
||||
func DeleteWebsite(c *gin.Context) {
|
||||
|
||||
websiteid, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
pageno := c.Query("page")
|
||||
|
||||
var url string
|
||||
|
||||
if pageno != "" {
|
||||
url = "/admin/website/?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/website/"
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Website", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Delete authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
err := MenuConfig.DeleteWebsite(websiteid, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Delete error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Website Deleted Successfully", 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, url)
|
||||
}
|
||||
func CheckSiteName(c *gin.Context) {
|
||||
|
||||
subdomain := c.PostForm("sitename")
|
||||
|
||||
id, _ := strconv.Atoi(c.PostForm("webid"))
|
||||
|
||||
err := MenuConfig.CheckSiteName(subdomain, id)
|
||||
|
||||
if err != nil {
|
||||
|
||||
c.JSON(200, false)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, true)
|
||||
}
|
||||
@@ -1,283 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"spurt-cms/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func GraphqlTokenApi(c *gin.Context) {
|
||||
|
||||
var limt, offset int
|
||||
|
||||
keyword := strings.TrimSpace(c.Request.URL.Query().Get("keyword"))
|
||||
|
||||
//get values from html form data
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
var lists []models.TblGraphqlSettings
|
||||
list, count, err := models.GetListOfTokens(limt, offset, keyword, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("get the list token error: %s", err)
|
||||
}
|
||||
|
||||
for _, val := range list {
|
||||
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
lists = append(lists, val)
|
||||
|
||||
}
|
||||
|
||||
var paginationendcount = len(lists) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(count), limt)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "graphql.html", gin.H{"csrf": csrf.GetToken(c), "HeadTitle": "Graphql Settings", "linktitle": "Graphql API", "Menu": menu, "translate": translate, "SettingsHead": true, "Graphqlmenu": true, "title": "Graphql Api", "Tokens": lists, "totalcount": count, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Page": Page, "Limit": limt, "filter": keyword, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}})
|
||||
|
||||
}
|
||||
|
||||
func CreateTokenGrapqhl(c *gin.Context) {
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "graphql-manage.html", gin.H{"csrf": csrf.GetToken(c), "HeadTitle": "Graphql Settings", "Menu": menu, "translate": translate, "SettingsHead": true, "Graphqlmenu": true, "title": "Graphql Api", "CreateForm": true})
|
||||
|
||||
}
|
||||
|
||||
func CreateToken(c *gin.Context) {
|
||||
|
||||
var graphql models.TblGraphqlSettings
|
||||
response := make(gin.H)
|
||||
graphql.TokenName = c.PostForm("tokenName")
|
||||
apiToken, err := GenerateApiToken(64)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("genereate token error: %v", err)
|
||||
response["token"] = ""
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
return
|
||||
}
|
||||
graphql.Token = apiToken
|
||||
graphql.Description = c.PostForm("tokenDesc")
|
||||
graphql.Duration = c.PostForm("duration")
|
||||
graphql.CreatedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
graphql.CreatedBy = c.GetInt("userid")
|
||||
graphql.TenantId = TenantId
|
||||
|
||||
if graphql.Duration == "7 Days" {
|
||||
|
||||
graphql.ExpiryTime, _ = time.Parse("2006-01-02 15:04:05", time.Now().AddDate(0, 0, 7).Format("2006-01-02 15:04:05"))
|
||||
|
||||
} else if graphql.Duration == "15 Days" {
|
||||
|
||||
graphql.ExpiryTime, _ = time.Parse("2006-01-02 15:04:05", time.Now().AddDate(0, 0, 15).Format("2006-01-02 15:04:05"))
|
||||
|
||||
} else if graphql.Duration == "30 Days" {
|
||||
|
||||
graphql.ExpiryTime, _ = time.Parse("2006-01-02 15:04:05", time.Now().AddDate(0, 0, 30).Format("2006-01-02 15:04:05"))
|
||||
|
||||
}
|
||||
|
||||
err = models.CreateApiToken(graphql)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("create token error: %s", err)
|
||||
response["token"] = ""
|
||||
response["status"] = 0
|
||||
c.AbortWithStatusJSON(500, response)
|
||||
return
|
||||
}
|
||||
|
||||
response["token"] = apiToken
|
||||
response["status"] = 1
|
||||
c.JSON(200, response)
|
||||
|
||||
}
|
||||
|
||||
func UpdateGraphqlApi(c *gin.Context) {
|
||||
id, _ := strconv.Atoi(c.Param("id"))
|
||||
token, err := models.GetTokenDetailsById(id, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("get token by id error: %s", err)
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{"data": token})
|
||||
}
|
||||
|
||||
func UpdateGraphqlToken(c *gin.Context) {
|
||||
|
||||
var id, _ = strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
var graphql = make(map[string]interface{})
|
||||
graphql["token_name"] = c.Request.FormValue("tokenName")
|
||||
graphql["description"] = c.Request.FormValue("tokenDesc")
|
||||
graphql["duration"] = c.Request.FormValue("duration")
|
||||
graphql["modified_on"], _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
graphql["modified_by"] = c.GetInt("userid")
|
||||
|
||||
var dur = c.Request.FormValue("duration")
|
||||
|
||||
if dur == "7 Days" {
|
||||
|
||||
graphql["expiry_time"], _ = time.Parse("2006-01-02 15:04:05", time.Now().AddDate(0, 0, 7).Format("2006-01-02 15:04:05"))
|
||||
|
||||
} else if dur == "15 Days" {
|
||||
|
||||
graphql["expiry_time"], _ = time.Parse("2006-01-02 15:04:05", time.Now().AddDate(0, 0, 15).Format("2006-01-02 15:04:05"))
|
||||
|
||||
} else if dur == "30 Days" {
|
||||
|
||||
graphql["expiry_time"], _ = time.Parse("2006-01-02 15:04:05", time.Now().AddDate(0, 0, 30).Format("2006-01-02 15:04:05"))
|
||||
|
||||
}
|
||||
|
||||
err := models.UpdateApiToken(graphql, id, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("create token error: %s", err)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
} else {
|
||||
|
||||
c.SetCookie("get-toast", "Graphql Settings Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func DeleteToken(c *gin.Context) {
|
||||
|
||||
var id, _ = strconv.Atoi(c.Param("id"))
|
||||
fmt.Println("id", id)
|
||||
var deletedon, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
|
||||
if err := models.DeleteApiToken(id, c.GetInt("userid"), deletedon, TenantId); err != nil {
|
||||
ErrorLog.Printf("delete token error: %s", err)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
} else {
|
||||
|
||||
c.SetCookie("get-toast", "Graphql Settings Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
}
|
||||
|
||||
c.Redirect(301, "/admin/graphql/")
|
||||
}
|
||||
|
||||
func GenerateApiToken(length int) (string, error) {
|
||||
b := make([]byte, length) // Create a slice to hold 32 bytes of random data
|
||||
if _, err := rand.Read(b); err != nil { // Fill the slice with random data and handle any errors
|
||||
return "", err // Return an empty string and the error if something went wrong
|
||||
}
|
||||
return base64.URLEncoding.EncodeToString(b), nil // Encode the random bytes to a URL-safe base64 string
|
||||
}
|
||||
|
||||
//Multi Delete graphql api//
|
||||
|
||||
func MultiDeleteGraphqlToken(c *gin.Context) {
|
||||
|
||||
var tokenIds []string
|
||||
var tokenIntIds []int
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("tokenids")), &tokenIds); err != nil {
|
||||
ErrorLog.Printf("delete multiple entry error: %s", err)
|
||||
}
|
||||
|
||||
fmt.Println(tokenIds, "tokenidesss")
|
||||
|
||||
for _, ids := range tokenIds {
|
||||
intIds, _ := strconv.Atoi(ids)
|
||||
|
||||
tokenIntIds = append(tokenIntIds, intIds)
|
||||
}
|
||||
|
||||
pageno := c.PostForm("page")
|
||||
fmt.Println("pageNonnnn", pageno)
|
||||
|
||||
var url string
|
||||
|
||||
if pageno != "" {
|
||||
url = "/admin/graphql/?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/graphql/"
|
||||
|
||||
}
|
||||
|
||||
var graphql models.TblGraphqlSettings
|
||||
graphql.IsDeleted = 1
|
||||
graphql.DeletedBy = c.GetInt("userid")
|
||||
graphql.DeletedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
err := models.MultiDeleteGraphqltoken(&graphql, tokenIntIds, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Multiple graphqlapi delete error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
_, count, err := models.GetListOfTokens(0, 0, "", TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("get the list token error: %s", err)
|
||||
}
|
||||
|
||||
recordsPerPage := Limit
|
||||
totalPages := (int(count) + recordsPerPage - 1) / recordsPerPage
|
||||
|
||||
currentPage := 1
|
||||
if pageno != "" {
|
||||
currentPage, _ = strconv.Atoi(pageno)
|
||||
}
|
||||
|
||||
if currentPage > totalPages && totalPages > 0 {
|
||||
|
||||
url = "/admin/graphql?page=" + strconv.Itoa(totalPages)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true, "url": url})
|
||||
c.SetCookie("get-toast", "Graphql Settings Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
|
||||
}
|
||||
|
||||
func PlaygroundView(c *gin.Context) {
|
||||
|
||||
url := os.Getenv("GRAPHQL_URL")
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(http.StatusOK, "playground.html", gin.H{"url": url, "Menu": menu, "translate": translate, "title": "Graphql Playground", "linktitle": "Graphql Playground","Baseurl":"https://spurtcms.com/play/query"})
|
||||
}
|
||||
@@ -1,711 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"spurt-cms/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func LanguageList(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limit int
|
||||
offset int
|
||||
filter models.Filter
|
||||
language1 []models.TblLanguage
|
||||
language []models.TblLanguage
|
||||
conv_language []models.TblLanguage
|
||||
)
|
||||
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
|
||||
if c.Query("limit") == "" {
|
||||
limit = Limit
|
||||
} else {
|
||||
limit, _ = strconv.Atoi(c.Query("limit"))
|
||||
}
|
||||
|
||||
if page != 0 {
|
||||
offset = (page - 1) * limit
|
||||
}
|
||||
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
flag := false
|
||||
|
||||
query.DataAccess = c.GetInt("dataaccess")
|
||||
query.UserId = c.GetInt("userid")
|
||||
|
||||
_, Total_languages := query.GetLanguageList(&language1, 0, 0, filter, flag, TenantId)
|
||||
|
||||
query.GetLanguageList(&language, limit, offset, filter, flag, TenantId)
|
||||
|
||||
for _, language := range language {
|
||||
|
||||
// var default_lang models.TblLanguage
|
||||
// models.GetLanguageById(&default_lang, CurrentLanugageId)
|
||||
|
||||
// if default_lang.Id == language.Id {
|
||||
// language.DefaultLanguageId = default_lang.Id
|
||||
// }
|
||||
|
||||
if language.ModifiedOn.IsZero() {
|
||||
language.DateString = language.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
language.DateString = language.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
if language.ImagePath != "" {
|
||||
|
||||
if !strings.Contains(language.ImagePath, "/public/img/") {
|
||||
if language.StorageType == "local" {
|
||||
language.ImagePath = "/" + language.ImagePath
|
||||
|
||||
} else if language.StorageType == "aws" {
|
||||
language.ImagePath = "/image-resize?name=" + language.ImagePath
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
conv_language = append(conv_language, language)
|
||||
}
|
||||
|
||||
paginationendcount := len(language) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(page, int(Total_languages), limit)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
menu := NewMenuController(c)
|
||||
|
||||
userDetails, _, err := NewTeamWP.GetUserById(c.GetInt("userid"), []int{})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
c.HTML(200, "language.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: page + 1,
|
||||
PreviousPage: page - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: page + 2,
|
||||
TwoBelow: page - 2,
|
||||
ThreeAfter: page + 3,
|
||||
}, "Menu": menu, "HeadTitle": translate.Language, "translate": translate, "csrf": csrf.GetToken(c), "Languages": conv_language, "Count": Total_languages, "Limit": limit, "Filter": filter, "UserDetails": userDetails, "Previous": Previous, "Next": Next, "Page": Page, "PageCount": PageCount, "CurrentPage": page, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Langmenu": true, "SettingsHead": true, "Languagecodearr": Lang_codearr, "title": "Languages", "linktitle": "Language", "Tooltiptitle": translate.Setting.Languagetooltip, "StorageType": selectedtype.SelectedType})
|
||||
|
||||
}
|
||||
|
||||
func SetDefaultLanguage(c *gin.Context) {
|
||||
|
||||
isDefault, err := strconv.Atoi(c.PostForm("isDefault"))
|
||||
if err != nil {
|
||||
c.SetCookie("lang", "", 3600, "", "", false, false)
|
||||
}
|
||||
|
||||
langId, err := strconv.Atoi(c.PostForm("langId"))
|
||||
if err != nil {
|
||||
c.SetCookie("lang", "", 3600, "", "", false, false)
|
||||
}
|
||||
|
||||
fmt.Println("isDefault", isDefault)
|
||||
|
||||
editedLang, err := models.SetDefaultLang(langId, isDefault, TenantId)
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/languages/")
|
||||
return
|
||||
}
|
||||
|
||||
if editedLang.IsDefault == 1 {
|
||||
models.UpdateLanuguageInGeneral(editedLang.Id, TenantId)
|
||||
CurrentLanugageId = editedLang.Id
|
||||
}
|
||||
|
||||
var defaultLang models.TblLanguage
|
||||
err = models.GetDefaultLanguage(&defaultLang, c.GetInt("userid"), TenantId)
|
||||
if err != nil {
|
||||
c.SetCookie("lang", "", 3600, "", "", false, false)
|
||||
|
||||
} else {
|
||||
|
||||
conv_langId := strconv.Itoa(defaultLang.Id)
|
||||
c.SetCookie("lang", conv_langId, 3600, "", "", false, false)
|
||||
|
||||
// if c.PostForm("lang_default") == conv_langId {
|
||||
// c.SetCookie("lang", conv_langId, 3600, "", "", false, false)
|
||||
// } else {
|
||||
// c.SetCookie("lang", "", 3600, "", "", false, false)
|
||||
// }
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true})
|
||||
|
||||
}
|
||||
|
||||
// func AddLanguage(c *gin.Context) {
|
||||
|
||||
// if c.PostForm("flag_imgpath") == "" || c.PostForm("lang_name") == "" || c.PostForm("lang_code") == "" {
|
||||
// c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
// return
|
||||
// }
|
||||
|
||||
// var newlanguagedata models.TblLanguage
|
||||
|
||||
// //adding new lang json file to the code
|
||||
// jsonfile, _ := c.FormFile("lang_json")
|
||||
|
||||
// ext := strings.Split(jsonfile.Filename, ".")[len(strings.Split(jsonfile.Filename, "."))-1]
|
||||
|
||||
// if ext == "json" {
|
||||
|
||||
// newlanguagedata.LanguageCode = c.PostForm("lang_code")
|
||||
// json_dst := fmt.Sprintf("locales/%s", c.PostForm("lang_code")+"."+ext)
|
||||
// newlanguagedata.JsonPath = json_dst
|
||||
// c.SaveUploadedFile(jsonfile, json_dst)
|
||||
// localjsondata, _ := os.Open(json_dst)
|
||||
|
||||
// var jsonData map[string]interface{}
|
||||
// json.NewDecoder(localjsondata).Decode(&jsonData)
|
||||
|
||||
// }
|
||||
|
||||
// // get the selected type for image upload from the db
|
||||
// storageType, err := GetSelectedType()
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// var langDefault = c.PostForm("lang_default")
|
||||
|
||||
// if langDefault != "" {
|
||||
// newlanguagedata.IsDefault, err = strconv.Atoi(langDefault)
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// } else {
|
||||
|
||||
// newlanguagedata.IsDefault = 0
|
||||
// }
|
||||
// //getting the default lang value from the request
|
||||
|
||||
// //image processing according to the selected type
|
||||
// langData := c.PostForm("flag_imgpath")
|
||||
|
||||
// if strings.Contains(langData, "data:image/jpeg;base64") || strings.Contains(langData, "data:image/png;base64") || strings.Contains(langData, "data:image/svg+xml;base64") {
|
||||
|
||||
// // image processing if the selected type is aws
|
||||
// if storageType.SelectedType == "aws" {
|
||||
|
||||
// tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// var (
|
||||
// tempString, imageName string
|
||||
// imageByte []byte
|
||||
// )
|
||||
|
||||
// imageName, tempString, imageByte, err = ConvertBase64toByte(langData, "lang")
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// tempString = tenantDetails.S3FolderName + tempString
|
||||
|
||||
// err = storagecontroller.UploadCropImageS3(imageName, tempString, imageByte)
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// newlanguagedata.ImagePath = tempString
|
||||
|
||||
// } else if storageType.SelectedType == "local" {
|
||||
// // image processing if the selected type is local
|
||||
// var tempImgPath string
|
||||
|
||||
// _, tempImgPath, err = ConvertBase64(langData, "storage/lang")
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// newlanguagedata.ImagePath = "/" + tempImgPath
|
||||
|
||||
// }
|
||||
|
||||
// } else {
|
||||
// newlanguagedata.ImagePath = langData
|
||||
// }
|
||||
|
||||
// newlanguagedata.LanguageName = c.PostForm("lang_name")
|
||||
// newlanguagedata.IsStatus = 1
|
||||
// newlanguagedata.CreatedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
// newlanguagedata.CreatedBy = c.GetInt("userid")
|
||||
// newlanguagedata.StorageType = storageType.SelectedType
|
||||
// newlanguagedata.TenantId = TenantId
|
||||
|
||||
// err = models.AddNewLanguage(&newlanguagedata, c.GetInt("userid"))
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
// return
|
||||
// }
|
||||
|
||||
// c.SetCookie("get-toast", "Language Added Successfully", 3600, "", "", false, false)
|
||||
// c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
// }
|
||||
|
||||
// func EditLanguage(c *gin.Context) {
|
||||
|
||||
// languageId, _ := strconv.Atoi(c.Param("id"))
|
||||
// userid := c.GetInt("userid")
|
||||
// var language models.TblLanguage
|
||||
|
||||
// err := models.GetLanguageDetails(&language, languageId, userid, TenantId)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// }
|
||||
|
||||
// if !strings.Contains(language.ImagePath, "/public/img/") {
|
||||
// if language.ImagePath != "" {
|
||||
// if language.StorageType == "local" {
|
||||
// language.ImagePath = "/" + language.ImagePath
|
||||
|
||||
// } else if language.StorageType == "aws" {
|
||||
// language.ImagePath = "/image-resize?name=" + language.ImagePath
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// language.DefaultLanguageId = CurrentLanugageId
|
||||
|
||||
// c.JSON(200, gin.H{"csrf": csrf.GetToken(c), "Language": language, "UploadUrl": "/admin/languages/updatelanguage", "Button": "Update"})
|
||||
// }
|
||||
|
||||
// func UpdateLanguage(c *gin.Context) {
|
||||
|
||||
// if c.PostForm("lang_id") == "" || c.PostForm("lang_name") == "" {
|
||||
|
||||
// c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
// return
|
||||
// }
|
||||
|
||||
// var editLanguage models.TblLanguage
|
||||
|
||||
// editLanguage.Id, _ = strconv.Atoi(c.PostForm("lang_id"))
|
||||
// editLanguage.LanguageCode = c.PostForm("lang_code")
|
||||
// editLanguage.IsDefault, _ = strconv.Atoi(c.PostForm("lang_default"))
|
||||
// editLanguage.IsStatus, _ = strconv.Atoi(c.PostForm("lang_status"))
|
||||
// editLanguage.LanguageName = c.PostForm("lang_name")
|
||||
// editLanguage.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
// editLanguage.ModifiedBy = c.GetInt("userid")
|
||||
|
||||
// // get the selected type for image upload from the db
|
||||
// storageType, err := GetSelectedType()
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// var tempImgPath string
|
||||
|
||||
// langData := c.PostForm("flag_imgpath")
|
||||
|
||||
// if strings.Contains(langData, "data:image/jpeg;base64") || strings.Contains(langData, "data:image/png;base64") || strings.Contains(langData, "data:image/svg+xml;base64") {
|
||||
|
||||
// if storageType.SelectedType == "aws" {
|
||||
|
||||
// tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// var (
|
||||
// tempString, imageName string
|
||||
// imageByte []byte
|
||||
// )
|
||||
|
||||
// imageName, tempString, imageByte, err = ConvertBase64toByte(langData, "lang")
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// tempString = tenantDetails.S3FolderName + tempString
|
||||
|
||||
// err = storagecontroller.UploadCropImageS3(imageName, tempString, imageByte)
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// editLanguage.ImagePath = tempString
|
||||
|
||||
// } else if storageType.SelectedType == "local" {
|
||||
|
||||
// _, tempImgPath, err = ConvertBase64(langData, "storage/lang")
|
||||
// if err != nil {
|
||||
// ErrorLog.Println(err)
|
||||
|
||||
// ErrorLog.Printf("Add Language error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// editLanguage.ImagePath = "/" + tempImgPath
|
||||
|
||||
// }
|
||||
|
||||
// } else {
|
||||
|
||||
// prefixEndIndex := strings.Index(langData, "=")
|
||||
// fmt.Println("prefix", prefixEndIndex)
|
||||
|
||||
// prefixRemovedPath := langData[prefixEndIndex+1:]
|
||||
// fmt.Println("prefixRemoved", prefixRemovedPath)
|
||||
|
||||
// editLanguage.ImagePath = prefixRemovedPath
|
||||
// }
|
||||
|
||||
// jsonFile, _ := c.FormFile("lang_json")
|
||||
|
||||
// if jsonFile != nil {
|
||||
|
||||
// ext := strings.Split(jsonFile.Filename, ".")[len(strings.Split(jsonFile.Filename, "."))-1]
|
||||
|
||||
// if ext == "json" {
|
||||
// json_dst := fmt.Sprintf("locales/%s", c.PostForm("lang_code")+"."+ext)
|
||||
// editLanguage.JsonPath = json_dst
|
||||
// c.SaveUploadedFile(jsonFile, json_dst)
|
||||
// localjsondata, _ := os.Open(json_dst)
|
||||
|
||||
// var jsonData map[string]interface{}
|
||||
// json.NewDecoder(localjsondata).Decode(&jsonData)
|
||||
// }
|
||||
// } else {
|
||||
|
||||
// var languageData models.TblLanguage
|
||||
// userid := c.GetInt("userid")
|
||||
// err = models.GetLanguageDetails(&languageData, editLanguage.Id, userid, TenantId)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// }
|
||||
|
||||
// editLanguage.JsonPath = languageData.JsonPath
|
||||
// }
|
||||
|
||||
// editLanguage.StorageType = storageType.SelectedType
|
||||
|
||||
// err = models.UpdateLanguage(&editLanguage, c.GetInt("userid"), TenantId)
|
||||
// if err != nil {
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
// return
|
||||
// }
|
||||
|
||||
// if editLanguage.IsDefault == 1 {
|
||||
// models.UpdateLanuguageInGeneral(editLanguage.Id, TenantId)
|
||||
// CurrentLanugageId = editLanguage.Id
|
||||
// }
|
||||
|
||||
// var default_lang models.TblLanguage
|
||||
// err = models.GetDefaultLanguage(&default_lang, c.GetInt("userid"), TenantId)
|
||||
|
||||
// if err != nil {
|
||||
// c.SetCookie("lang", "", 3600, "", "", false, false)
|
||||
|
||||
// } else {
|
||||
|
||||
// conv_langId := strconv.Itoa(default_lang.Id)
|
||||
|
||||
// if c.PostForm("lang_default") == conv_langId {
|
||||
// c.SetCookie("lang", conv_langId, 3600, "", "", false, false)
|
||||
// } else {
|
||||
// c.SetCookie("lang", "", 3600, "", "", false, false)
|
||||
// }
|
||||
// }
|
||||
|
||||
// c.SetCookie("get-toast", "Language Updated Successfully", 3600, "", "", false, false)
|
||||
// c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
|
||||
// }
|
||||
|
||||
// func DeleteLanguage(c *gin.Context) {
|
||||
|
||||
// languageId, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
// userid := c.GetInt("userid")
|
||||
|
||||
// var (
|
||||
// default_lang models.TblLanguage
|
||||
// language models.TblLanguage
|
||||
// )
|
||||
|
||||
// err := models.GetDefaultLanguage(&default_lang, userid, TenantId)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// }
|
||||
// if languageId == default_lang.Id || languageId == 1 {
|
||||
|
||||
// c.SetCookie("Alert-msg", "DefaultLanguageNotAllowedToDelete", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
// return
|
||||
// }
|
||||
|
||||
// /*uncomment the below code to use for language json file delete purpose*/
|
||||
|
||||
// // var langData models.TblLanguage
|
||||
|
||||
// // models.GetLanguageById(&langData,languageId)
|
||||
|
||||
// // log.Println("language json delete path",langData.JsonPath)
|
||||
|
||||
// // err = os.Remove(langData.JsonPath)
|
||||
|
||||
// // if err != nil {
|
||||
|
||||
// // log.Println("Error deleting file:", err)
|
||||
|
||||
// // return
|
||||
// // }
|
||||
|
||||
// // fmt.Println("language json deleted successfully!")
|
||||
|
||||
// language.Id = languageId
|
||||
// language.IsDeleted = 1
|
||||
// language.DeletedBy = c.GetInt("userid")
|
||||
// language.DeletedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
|
||||
// err = models.DeleteLanguage(&language, TenantId)
|
||||
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("DeleteMultipleUser error: %s", err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// return
|
||||
// }
|
||||
|
||||
// c.SetCookie("get-toast", "Language Deleted Successfully", 3600, "", "", false, false)
|
||||
// c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
// c.Redirect(301, "/admin/languages/")
|
||||
// }
|
||||
|
||||
// func DownloadLanguage(c *gin.Context) {
|
||||
|
||||
// langId, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
// var langData models.TblLanguage
|
||||
|
||||
// err := models.GetLanguageById(&langData, langId)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// return
|
||||
// }
|
||||
|
||||
// jsonData, err := ioutil.ReadFile(langData.JsonPath)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
// return
|
||||
// }
|
||||
|
||||
// c.Header("Content-Disposition", "attachment; filename="+langData.LanguageName+"."+strings.Split(langData.JsonPath, ".")[1])
|
||||
// c.Data(200, "application/json", jsonData)
|
||||
// c.SetCookie("get-toast", "Language Json file Download Successfully", 3600, "", "", false, false)
|
||||
// c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
|
||||
// }
|
||||
|
||||
// func LanguageStatus(c *gin.Context) {
|
||||
|
||||
// var langData models.TblLanguage
|
||||
|
||||
// id, err := strconv.Atoi(c.Request.PostFormValue("id"))
|
||||
// if err != nil {
|
||||
// c.JSON(500, gin.H{"language": "", "status": false})
|
||||
// }
|
||||
|
||||
// langData.IsStatus, _ = strconv.Atoi(c.Request.PostFormValue("isactive"))
|
||||
// langData.ModifiedBy = c.GetInt("userid")
|
||||
// langData.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
// models.Languageisactive(&langData, id, TenantId)
|
||||
|
||||
// var language models.TblLanguage
|
||||
// models.GetLanguageDetails(&language, id, c.GetInt("userid"), TenantId)
|
||||
|
||||
// c.JSON(200, gin.H{"language": language, "status": true})
|
||||
|
||||
// }
|
||||
|
||||
// // language name check
|
||||
// func CheckLanguageName(c *gin.Context) {
|
||||
|
||||
// var chekclang models.TblLanguage
|
||||
|
||||
// name := c.PostForm("langname")
|
||||
// id, _ := strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
// err := models.Checklang(&chekclang, name, id, TenantId)
|
||||
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("check language name error: %s", err)
|
||||
// json.NewEncoder(c.Writer).Encode(false)
|
||||
// return
|
||||
// }
|
||||
|
||||
// json.NewEncoder(c.Writer).Encode(true)
|
||||
|
||||
// }
|
||||
|
||||
// func MultiselectLanguageDelete(c *gin.Context) {
|
||||
|
||||
// var languagedata []map[string]string
|
||||
|
||||
// if err := json.Unmarshal([]byte(c.Request.PostFormValue("languageids")), &languagedata); err != nil {
|
||||
// ErrorLog.Printf("Multiple language delete unmarshall error: %s", err)
|
||||
// }
|
||||
|
||||
// fmt.Println("languageData", languagedata)
|
||||
|
||||
// var languageids []int
|
||||
|
||||
// for _, val := range languagedata {
|
||||
// languageid, _ := strconv.Atoi(val["languageId"])
|
||||
// languageids = append(languageids, languageid)
|
||||
// }
|
||||
|
||||
// fmt.Println("langaugeIds", languageids)
|
||||
|
||||
// var language models.TblLanguage
|
||||
|
||||
// language.IsDeleted = 1
|
||||
// language.DeletedBy = c.GetInt("userid")
|
||||
// language.DeletedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
// err := models.MultiSelectDeleteLanguage(&language, languageids, TenantId)
|
||||
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("Multiple language delete error: %s", err)
|
||||
// c.JSON(200, gin.H{"value": false})
|
||||
// return
|
||||
// }
|
||||
|
||||
// c.JSON(200, gin.H{"value": true, "url": "/admin/languages/"})
|
||||
// }
|
||||
|
||||
// func MultiSelectLanguageStatus(c *gin.Context) {
|
||||
|
||||
// var (
|
||||
// languagedata []map[string]string
|
||||
// languageids []int
|
||||
// statusint int
|
||||
// status int
|
||||
// )
|
||||
|
||||
// if err := json.Unmarshal([]byte(c.Request.PostFormValue("languageids")), &languagedata); err != nil {
|
||||
// ErrorLog.Printf("Multiple language status change unmarshall error: %s", err)
|
||||
// }
|
||||
|
||||
// for _, val := range languagedata {
|
||||
|
||||
// languageid, _ := strconv.Atoi(val["languageId"])
|
||||
// statusint, _ = strconv.Atoi(val["status"])
|
||||
// if statusint == 0 {
|
||||
// status = 1
|
||||
// } else if statusint == 1 {
|
||||
// status = 0
|
||||
// }
|
||||
|
||||
// languageids = append(languageids, languageid)
|
||||
|
||||
// }
|
||||
|
||||
// var langData models.TblLanguage
|
||||
// langData.IsStatus = status
|
||||
// langData.ModifiedBy = c.GetInt("userid")
|
||||
// langData.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
|
||||
// err := models.MultiSelectLanguageisactive(&langData, languageids, TenantId)
|
||||
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("Multiple language status change error: %s", err)
|
||||
// c.JSON(200, gin.H{"value": false})
|
||||
// return
|
||||
// }
|
||||
|
||||
// c.JSON(200, gin.H{"value": true, "status": status, "url": "/admin/languages/"})
|
||||
|
||||
// }
|
||||
@@ -1,806 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/gif"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"net/http"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"spurt-cms/models"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
|
||||
"strconv"
|
||||
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/nfnt/resize"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
type medias struct {
|
||||
File bool
|
||||
Name string
|
||||
Path string
|
||||
ModTime time.Time
|
||||
TotalSubMedia int
|
||||
}
|
||||
|
||||
// var StorageType = os.Getenv("STORAGE_TYPE")
|
||||
|
||||
func GetSelectedType() (storagetyp models.TblStorageType, err error) {
|
||||
|
||||
storagetype, err := models.GetStorageValue(TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
|
||||
return models.TblStorageType{}, err
|
||||
}
|
||||
|
||||
return storagetype, nil
|
||||
|
||||
}
|
||||
|
||||
func MediaList(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
)
|
||||
|
||||
//get data from html url query
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
|
||||
if limit == "" {
|
||||
limt = 40
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
fmt.Println(offset, limit, "offset")
|
||||
|
||||
search := strings.TrimSpace(c.Query("keyword"))
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
_, _, Media, nextcont, _ := GetMedia1(search, "")
|
||||
|
||||
Folder, File, _ := S3ArrPagination(Media, limt, offset)
|
||||
|
||||
fmt.Println(Folder, "totalmediaa")
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
var paginationendcount = len(Folder) + len(File) + offset
|
||||
|
||||
paginationstartcount := offset + 1
|
||||
|
||||
fmt.Println(paginationendcount, paginationstartcount, "startendcount")
|
||||
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(len(Media)), limt)
|
||||
|
||||
c.HTML(200, "media.html", gin.H{"Menu": menu, "Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3}, "title": ModuleName, "csrf": csrf.GetToken(c), "translate": translate, "Folder": Folder, "File": File, "Media": Media, "HeadTitle": "Media", "Count": len(Media), "Mediamenu": true, "Tabmenu": TabName, "StorageType": selectedtype.SelectedType, "Nextcont": nextcont, "Previous": Previous, "Next": Next, "Page": Page, "Limit": limt, "PageCount": PageCount, "CurrentPage": pageno, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Filter": search, "ListCount": len(Folder) + len(File)})
|
||||
|
||||
}
|
||||
|
||||
/*ADD FOLDER OR File*/
|
||||
func AddFolder(c *gin.Context) {
|
||||
|
||||
foldername := c.PostForm("foldername")
|
||||
folderpath := c.PostForm("path")
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
_ = storagecontroller.AddFolderMakeDir(foldername, folderpath)
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
_, makedirerr := storagecontroller.CreateFolderToS3(foldername, folderpath)
|
||||
if makedirerr != nil {
|
||||
ErrorLog.Printf("add folder error: %s", makedirerr)
|
||||
json.NewEncoder(c.Writer).Encode("false")
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode("true")
|
||||
|
||||
}
|
||||
|
||||
/*REMOVE FOLDER*/
|
||||
func DeleteFolderFile(c *gin.Context) {
|
||||
|
||||
deleteid := strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(c.PostForm("id"), "[", ""), "]", ""), `"`, "")
|
||||
ids := strings.Split(deleteid, ",")
|
||||
folderpath := c.PostForm("path")
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
fmt.Println(deleteid, ids, folderpath, "deletedetails")
|
||||
|
||||
var DeleteErr error
|
||||
|
||||
if len(deleteid) > 0 {
|
||||
|
||||
for _, val := range ids {
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
|
||||
fmt.Println("Local selected")
|
||||
DeleteErr = storagecontroller.DeleteImageFolder(folderpath, val)
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
fmt.Println("S3 selected")
|
||||
|
||||
err := storagecontroller.DeleteS3FolderAndContents(val)
|
||||
if err != nil {
|
||||
fmt.Printf("Error deleting folder and contents %s: %v\n", val, err)
|
||||
}
|
||||
|
||||
}
|
||||
// } else if selectedtype.SelectedType == "aws" {
|
||||
|
||||
// fmt.Println("s3 selected")
|
||||
// resp1, _ := storagecontroller.ListS3BucketWithPath(val)
|
||||
// for _, val := range resp1.CommonPrefixes {
|
||||
// storagecontroller.DeleteS3Files(*val.Prefix)
|
||||
// }
|
||||
// DeleteErr = storagecontroller.DeleteS3Files(val)
|
||||
// }
|
||||
|
||||
if DeleteErr != nil {
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
|
||||
}
|
||||
|
||||
/*Individual Folder Details*/
|
||||
func FolderDetails(c *gin.Context) {
|
||||
|
||||
folderpath := c.PostForm("path")
|
||||
|
||||
var (
|
||||
Media []storagecontroller.Medias
|
||||
Folder []storagecontroller.Medias
|
||||
File []storagecontroller.Medias
|
||||
err error
|
||||
folderCount, fileCount int
|
||||
nextconf string
|
||||
)
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
folderCount, fileCount, Folder, File, err = storagecontroller.FolderDetails(folderpath + "/")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
|
||||
resp1, _ := storagecontroller.ListS3BucketWithPath(folderpath + "/")
|
||||
Folder, File = MakeFolderandFileArr(resp1, folderpath, "")
|
||||
if resp1.NextContinuationToken != nil {
|
||||
nextconf = *resp1.NextContinuationToken
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sort.SliceStable(Folder, func(i, j int) bool {
|
||||
return Folder[i].ModTime.Unix() > Folder[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
sort.SliceStable(File, func(i, j int) bool {
|
||||
return File[i].ModTime.Unix() > File[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
Media = append(Media, Folder...)
|
||||
Media = append(Media, File...)
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(gin.H{"folder": Folder, "file": File, "mediaCount": len(Media), "fileCount": fileCount, "folderCount": folderCount, "Media": Media, "nextcont": nextconf})
|
||||
|
||||
}
|
||||
|
||||
/*Upload Image*/
|
||||
func UploadImageMedia(c *gin.Context) {
|
||||
|
||||
imageData := c.Request.PostFormValue("file")
|
||||
imagename := c.Request.PostFormValue("name")
|
||||
|
||||
var Path string
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
Path = storagecontroller.UploadCropImage(imageData, imagename)
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
storagecontroller.StoreS3Base64(strings.ReplaceAll(imageData, "data:image/jpeg;base64,", ""), "media/", imagename)
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(gin.H{"Path": "/" + Path + imagename})
|
||||
|
||||
}
|
||||
|
||||
/*Upload system image */
|
||||
func UploadImage(c *gin.Context) {
|
||||
|
||||
var err error
|
||||
|
||||
file, fileheader, err := c.Request.FormFile("image")
|
||||
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
if fileheader.Size > int64(maxSize) {
|
||||
c.JSON(http.StatusRequestEntityTooLarge, gin.H{"error": "File size exceeds 8MB"})
|
||||
return
|
||||
}
|
||||
|
||||
var UploadErr error
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
fmt.Println("Local selected")
|
||||
UploadErr = storagecontroller.UploadImageLocal(file, fileheader, c.Request.PostFormValue("path"), c)
|
||||
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
fmt.Println("s3 selected")
|
||||
UploadErr = storagecontroller.UploadFileS3(file, fileheader, c.Request.PostFormValue("path"))
|
||||
|
||||
} else if selectedtype.SelectedType == "azure" {
|
||||
|
||||
} else if selectedtype.SelectedType == "drive" {
|
||||
|
||||
fmt.Println("drive selected")
|
||||
}
|
||||
|
||||
if UploadErr != nil {
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
|
||||
}
|
||||
|
||||
// view image
|
||||
func ResizeImage(c *gin.Context) {
|
||||
|
||||
fileName := c.Query("name")
|
||||
filePath := c.Query("path")
|
||||
width, _ := strconv.ParseUint(c.Query("width"), 10, 64)
|
||||
height, _ := strconv.ParseUint(c.Query("height"), 10, 64)
|
||||
extention := path.Ext(fileName)
|
||||
|
||||
rawObject, err := storagecontroller.GetObjectFromS3(filePath + fileName)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
|
||||
buf.ReadFrom(rawObject.Body)
|
||||
|
||||
if extention == ".svg" {
|
||||
svgData := buf.String()
|
||||
c.Data(http.StatusOK, "image/svg+xml", []byte(svgData))
|
||||
return
|
||||
}
|
||||
|
||||
Image, _, erri := image.Decode(bytes.NewReader(buf.Bytes()))
|
||||
if erri != nil {
|
||||
fmt.Println(erri)
|
||||
return
|
||||
}
|
||||
|
||||
newImage := resize.Resize(uint(width), uint(height), Image, resize.Lanczos3)
|
||||
if extention == ".png" {
|
||||
png.Encode(c.Writer, newImage)
|
||||
return
|
||||
}
|
||||
|
||||
if extention == ".gif" {
|
||||
gif.Encode(c.Writer, newImage, nil)
|
||||
return
|
||||
}
|
||||
|
||||
if extention == ".jpeg" || extention == ".jpg" {
|
||||
_ = jpeg.Encode(c.Writer, newImage, nil)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func AudioResize(c *gin.Context) {
|
||||
fileName := c.Query("name")
|
||||
filePath := c.Query("path")
|
||||
extension := path.Ext(fileName)
|
||||
|
||||
rawObject, err := storagecontroller.GetObjectFromS3(filePath + fileName)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve the audio file"})
|
||||
return
|
||||
}
|
||||
defer rawObject.Body.Close()
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
if _, err := buf.ReadFrom(rawObject.Body); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read audio data"})
|
||||
return
|
||||
}
|
||||
|
||||
audioData := buf.Bytes()
|
||||
switch extension {
|
||||
case ".mpeg":
|
||||
c.Data(http.StatusOK, "audio/mpeg", audioData)
|
||||
case ".mp3":
|
||||
c.Data(http.StatusOK, "audio/mpeg", audioData)
|
||||
case ".wav":
|
||||
c.Data(http.StatusOK, "audio/wav", audioData)
|
||||
default:
|
||||
c.JSON(http.StatusUnsupportedMediaType, gin.H{"error": "Unsupported audio format"})
|
||||
}
|
||||
}
|
||||
|
||||
func DocumentResize(c *gin.Context) {
|
||||
fileName := c.Query("name")
|
||||
filePath := c.Query("path")
|
||||
extension := path.Ext(fileName)
|
||||
|
||||
rawObject, err := storagecontroller.GetObjectFromS3(filePath + fileName)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve the document file"})
|
||||
return
|
||||
}
|
||||
defer rawObject.Body.Close()
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
if _, err := buf.ReadFrom(rawObject.Body); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read document data"})
|
||||
return
|
||||
}
|
||||
|
||||
documentData := buf.Bytes()
|
||||
|
||||
switch extension {
|
||||
case ".pdf":
|
||||
c.Data(http.StatusOK, "application/pdf", documentData)
|
||||
case ".doc", ".docx":
|
||||
c.Data(http.StatusOK, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", documentData)
|
||||
case ".txt":
|
||||
c.Data(http.StatusOK, "text/plain", documentData)
|
||||
case ".zip":
|
||||
c.Data(http.StatusOK, "application/zip", documentData)
|
||||
default:
|
||||
c.JSON(http.StatusUnsupportedMediaType, gin.H{"error": "Unsupported document format"})
|
||||
}
|
||||
}
|
||||
|
||||
// make folder and file array
|
||||
func MakeFolderandFileArr(resp1 *s3.ListObjectsV2Output, parentfoldername string, searchfilter string) (folders []storagecontroller.Medias, files []storagecontroller.Medias) {
|
||||
|
||||
var (
|
||||
Folder []storagecontroller.Medias
|
||||
File []storagecontroller.Medias
|
||||
)
|
||||
|
||||
if searchfilter != "" {
|
||||
|
||||
for _, val := range resp1.CommonPrefixes {
|
||||
|
||||
if strings.Contains(strings.ToLower(RemoveSpecialCharacter(strings.Replace(*val.Prefix, parentfoldername, "", 1))), strings.ToLower(searchfilter)) {
|
||||
|
||||
// obj, _ := storagecontroller.GetObjectFromS3(*val.Prefix)
|
||||
|
||||
var Folde storagecontroller.Medias
|
||||
filename := RemoveSpecialCharacter(strings.Replace(*val.Prefix, parentfoldername, "", 1))
|
||||
Folde.File = true
|
||||
Folde.Path = filename
|
||||
Folde.AliaseName = *val.Prefix
|
||||
Folde.Name = filename
|
||||
// Folde.ModTime = *obj.LastModified
|
||||
Folder = append(Folder, Folde)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for _, val := range resp1.Contents {
|
||||
|
||||
if strings.Contains(strings.ToLower(*val.Key), strings.ToLower(searchfilter)) {
|
||||
|
||||
if strings.Contains(*val.Key, ".jpeg") || strings.Contains(*val.Key, ".png") || strings.Contains(*val.Key, ".jpg") || strings.Contains(*val.Key, ".svg") {
|
||||
|
||||
var file storagecontroller.Medias
|
||||
filename := strings.Replace(*val.Key, parentfoldername, "", 1)
|
||||
Lastupdate := *val.LastModified
|
||||
file.File = false
|
||||
file.Name = filename
|
||||
file.AliaseName = *val.Key
|
||||
file.Path = parentfoldername
|
||||
file.ModTime = Lastupdate
|
||||
File = append(File, file)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
for _, val := range resp1.CommonPrefixes {
|
||||
|
||||
folderPrefix := *val.Prefix
|
||||
var folderCount, imageCount int
|
||||
// List objects in the current folder
|
||||
resp2, err := storagecontroller.ListS3BucketWithPath(folderPrefix)
|
||||
if err != nil {
|
||||
// Handle error
|
||||
continue
|
||||
}
|
||||
|
||||
for _, obj := range resp2.Contents {
|
||||
|
||||
if strings.HasSuffix(*obj.Key, "/") {
|
||||
// Increment folder count
|
||||
folderCount++
|
||||
} else {
|
||||
// Increment image count
|
||||
imageCount++
|
||||
}
|
||||
}
|
||||
folderCount = len(resp2.CommonPrefixes)
|
||||
|
||||
// obj, _ := storagecontroller.GetObjectFromS3(*val.Prefix)
|
||||
|
||||
var Folde storagecontroller.Medias
|
||||
filename := RemoveSpecialCharacter(strings.Replace(*val.Prefix, parentfoldername, "", 1))
|
||||
Folde.File = true
|
||||
Folde.Path = filename
|
||||
Folde.AliaseName = *val.Prefix
|
||||
Folde.Name = filename
|
||||
Folde.TotalSubMedia = folderCount + imageCount
|
||||
|
||||
// Folde.ModTime = *obj.LastModified
|
||||
Folder = append(Folder, Folde)
|
||||
|
||||
}
|
||||
|
||||
for _, val := range resp1.Contents {
|
||||
|
||||
if strings.Contains(*val.Key, ".jpeg") || strings.Contains(*val.Key, ".png") || strings.Contains(*val.Key, ".jpg") || strings.Contains(*val.Key, ".svg") {
|
||||
|
||||
var file storagecontroller.Medias
|
||||
filename := strings.Replace(*val.Key, parentfoldername, "", 1)
|
||||
Lastupdate := *val.LastModified
|
||||
file.File = false
|
||||
file.Name = filename
|
||||
file.AliaseName = *val.Key
|
||||
file.Path = parentfoldername
|
||||
file.ModTime = Lastupdate
|
||||
File = append(File, file)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Folder, File
|
||||
}
|
||||
|
||||
func GetMedia() (Folders []storagecontroller.Medias, Files []storagecontroller.Medias, TotalMedia []storagecontroller.Medias, Nextcontin string, err error) {
|
||||
|
||||
var (
|
||||
MediaErr error
|
||||
Media []storagecontroller.Medias
|
||||
Folder []storagecontroller.Medias
|
||||
File []storagecontroller.Medias
|
||||
nextcont string
|
||||
search string
|
||||
)
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
|
||||
Folder, File, MediaErr = storagecontroller.MediaLocalList(search, "")
|
||||
|
||||
if MediaErr != nil {
|
||||
|
||||
ErrorLog.Println(MediaErr)
|
||||
}
|
||||
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
|
||||
// resp, _ := storagecontroller.ListS3Bucket()
|
||||
|
||||
resp1, err := storagecontroller.ListS3BucketWithPath("media/")
|
||||
|
||||
nextcont = *resp1.NextContinuationToken
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println("please check the aws fields")
|
||||
|
||||
return []storagecontroller.Medias{}, []storagecontroller.Medias{}, []storagecontroller.Medias{}, nextcont, err
|
||||
}
|
||||
|
||||
Folder, File = MakeFolderandFileArr(resp1, "media/", "")
|
||||
|
||||
}
|
||||
|
||||
sort.SliceStable(Folder, func(i, j int) bool {
|
||||
|
||||
return Folder[i].ModTime.Unix() > Folder[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
sort.SliceStable(File, func(i, j int) bool {
|
||||
|
||||
return File[i].ModTime.Unix() > File[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
Media = append(Media, Folder...)
|
||||
|
||||
Media = append(Media, File...)
|
||||
|
||||
return Folder, File, Media, nextcont, nil
|
||||
|
||||
}
|
||||
|
||||
func LoadMore(c *gin.Context) {
|
||||
|
||||
offset, _ := strconv.Atoi(c.PostForm("offset"))
|
||||
search := c.PostForm("search")
|
||||
folderpath := c.PostForm("path")
|
||||
|
||||
var limit = 40
|
||||
// offset := limit * offse
|
||||
|
||||
fmt.Println(offset, "offsetvalue")
|
||||
|
||||
_, _, Medias, NextCont, _ := GetMedia1(search, folderpath)
|
||||
|
||||
Folder, File, Media := S3ArrPagination(Medias, limit, offset)
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(gin.H{"folder": Folder, "file": File, "nextcont": NextCont, "Media": Media, "count": len(Medias), "LoadFileCount": len(Folder) + len(File)})
|
||||
}
|
||||
|
||||
func LoadMoreS3(NextCont string) (Folders []storagecontroller.Medias, Files []storagecontroller.Medias, TotalMedia []storagecontroller.Medias, NextContu string, err error) {
|
||||
|
||||
var (
|
||||
MediaErr error
|
||||
Media []storagecontroller.Medias
|
||||
Folder []storagecontroller.Medias
|
||||
File []storagecontroller.Medias
|
||||
nextcont string
|
||||
search string
|
||||
)
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
|
||||
Folder, File, MediaErr = storagecontroller.MediaLocalList(search, "")
|
||||
|
||||
if MediaErr != nil {
|
||||
|
||||
ErrorLog.Println(MediaErr)
|
||||
}
|
||||
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
|
||||
resp1, err := storagecontroller.LoadMoreListS3BucketWithPath("media/", NextCont)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println("please check the aws fields")
|
||||
|
||||
return []storagecontroller.Medias{}, []storagecontroller.Medias{}, []storagecontroller.Medias{}, nextcont, err
|
||||
}
|
||||
|
||||
if resp1.NextContinuationToken != nil {
|
||||
|
||||
nextcont = *resp1.NextContinuationToken
|
||||
}
|
||||
|
||||
Folder, File = MakeFolderandFileArr(resp1, "media/", "")
|
||||
|
||||
}
|
||||
|
||||
sort.SliceStable(Folder, func(i, j int) bool {
|
||||
|
||||
return Folder[i].ModTime.Unix() > Folder[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
sort.SliceStable(File, func(i, j int) bool {
|
||||
|
||||
return File[i].ModTime.Unix() > File[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
Media = append(Media, Folder...)
|
||||
|
||||
Media = append(Media, File...)
|
||||
|
||||
return Folder, File, Media, nextcont, nil
|
||||
|
||||
}
|
||||
|
||||
func GetMedia1(search, folderpath string) (Folders []storagecontroller.Medias, Files []storagecontroller.Medias, TotalMedia []storagecontroller.Medias, Nextcontin string, err error) {
|
||||
|
||||
var (
|
||||
MediaErr error
|
||||
Media []storagecontroller.Medias
|
||||
Folder []storagecontroller.Medias
|
||||
File []storagecontroller.Medias
|
||||
nextcont string
|
||||
)
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
|
||||
Folder, File, MediaErr = storagecontroller.MediaLocalList(search, folderpath)
|
||||
|
||||
if MediaErr != nil {
|
||||
|
||||
ErrorLog.Println(MediaErr)
|
||||
}
|
||||
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
|
||||
resp1, err := storagecontroller.ListS3BucketWithPath1("media/" + folderpath)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println("please check the aws fields")
|
||||
|
||||
return []storagecontroller.Medias{}, []storagecontroller.Medias{}, []storagecontroller.Medias{}, nextcont, err
|
||||
}
|
||||
|
||||
Folder, File = MakeFolderandFileArr(resp1, "media/"+folderpath, search)
|
||||
|
||||
}
|
||||
|
||||
sort.SliceStable(Folder, func(i, j int) bool {
|
||||
|
||||
return Folder[i].ModTime.Unix() > Folder[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
sort.SliceStable(File, func(i, j int) bool {
|
||||
|
||||
return File[i].ModTime.Unix() > File[j].ModTime.Unix()
|
||||
})
|
||||
|
||||
Media = append(Media, Folder...)
|
||||
|
||||
Media = append(Media, File...)
|
||||
|
||||
return Folder, File, Media, nextcont, nil
|
||||
|
||||
}
|
||||
|
||||
func S3ArrPagination(Media []storagecontroller.Medias, limit int, offset int) (s []storagecontroller.Medias, f []storagecontroller.Medias, m []storagecontroller.Medias) {
|
||||
|
||||
var (
|
||||
Files []storagecontroller.Medias
|
||||
Folders []storagecontroller.Medias
|
||||
Medias []storagecontroller.Medias
|
||||
)
|
||||
|
||||
end := limit + offset
|
||||
|
||||
if end > len(Media) {
|
||||
end = len(Media)
|
||||
}
|
||||
|
||||
for i := offset; i < end; i++ {
|
||||
|
||||
if Media[i].File {
|
||||
|
||||
var Folde storagecontroller.Medias
|
||||
Folde.File = true
|
||||
Folde.Path = Media[i].Path
|
||||
Folde.AliaseName = Media[i].AliaseName
|
||||
Folde.TotalSubMedia = Media[i].TotalSubMedia
|
||||
Folde.Name = Media[i].Name
|
||||
Folders = append(Folders, Folde)
|
||||
|
||||
} else {
|
||||
|
||||
var files storagecontroller.Medias
|
||||
files.File = false
|
||||
files.Name = Media[i].Name
|
||||
files.AliaseName = Media[i].AliaseName
|
||||
files.Path = Media[i].Path
|
||||
files.ModTime = Media[i].ModTime
|
||||
Files = append(Files, files)
|
||||
|
||||
}
|
||||
|
||||
Medias = append(Medias, Media[i])
|
||||
|
||||
}
|
||||
|
||||
return Folders, Files, Medias
|
||||
}
|
||||
func RenameMediaPath(c *gin.Context) {
|
||||
|
||||
oldFilename := c.PostForm("oldfilename")
|
||||
newFilename := c.PostForm("newfilename")
|
||||
filetype := c.PostForm("filetype")
|
||||
|
||||
newFilename1 := filepath.Dir(oldFilename)
|
||||
|
||||
if !strings.HasSuffix(newFilename1, "/") {
|
||||
newFilename1 += "/"
|
||||
}
|
||||
|
||||
var oldObjectKey string
|
||||
|
||||
var newObjectKey string
|
||||
|
||||
if filetype == "filediv" {
|
||||
|
||||
oldObjectKey = oldFilename
|
||||
newObjectKey = newFilename1 + newFilename
|
||||
} else if filetype == "folderdiv" {
|
||||
|
||||
oldObjectKey = oldFilename + "/"
|
||||
newObjectKey = newFilename1 + newFilename + "/"
|
||||
}
|
||||
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
fmt.Println(oldObjectKey, newObjectKey, "checkrenameee")
|
||||
|
||||
if selectedtype.SelectedType == "local" {
|
||||
fmt.Println("Local selected")
|
||||
|
||||
} else if selectedtype.SelectedType == "aws" {
|
||||
fmt.Println("s3 selected")
|
||||
err1 := storagecontroller.RenameFileS3(oldObjectKey, newObjectKey)
|
||||
|
||||
fmt.Println(err1, "getting error from renameprocess")
|
||||
|
||||
} else if selectedtype.SelectedType == "azure" {
|
||||
|
||||
} else if selectedtype.SelectedType == "drive" {
|
||||
|
||||
fmt.Println("drive selected")
|
||||
}
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"spurt-cms/models"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
func MediaSettings(c *gin.Context) {
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
Storagetype, err := models.GetStorageValue(TenantId)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
var aws models.AWS
|
||||
|
||||
if Storagetype.Aws != nil {
|
||||
|
||||
aws.AccessId = Storagetype.Aws["AccessId"].(string)
|
||||
aws.AccessKey = Storagetype.Aws["AccessKey"].(string)
|
||||
aws.Region = Storagetype.Aws["Region"].(string)
|
||||
aws.BucketName = Storagetype.Aws["BucketName"].(string)
|
||||
|
||||
}
|
||||
|
||||
var azure models.Azure
|
||||
|
||||
if Storagetype.Azure != nil {
|
||||
azure.StorageAccount = Storagetype.Azure["AzureAccount"].(string)
|
||||
azure.AccountKey = Storagetype.Azure["AzureKey"].(string)
|
||||
azure.ContainerName = Storagetype.Azure["AzureContainer"].(string)
|
||||
}
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "media_settings.html", gin.H{"Menu": menu, "Mediamenu": true, "title": ModuleName, "Tabmenu": TabName, "HeadTitle": "Media", "csrf": csrf.GetToken(c), "aws": aws, "azure": azure, "local": Storagetype.Local, "Storage": Storagetype, "translate": translate})
|
||||
}
|
||||
|
||||
func MediaStorageUpdate(c *gin.Context) {
|
||||
|
||||
selectedtype := c.Request.PostFormValue("type")
|
||||
|
||||
local := c.PostForm("local")
|
||||
awsid := c.PostForm("awsid")
|
||||
awskey := c.PostForm("awskey")
|
||||
awsregion := c.PostForm("awsregion")
|
||||
awsbucketname := c.PostForm("awsbucketname")
|
||||
azureacc := c.PostForm("azureacc")
|
||||
azurekey := c.PostForm("azurekey")
|
||||
azurecontainer := c.PostForm("azurecontainer")
|
||||
|
||||
var Stype models.TblStorageType
|
||||
|
||||
Stype.Local = local
|
||||
Stype.Aws = datatypes.JSONMap{"AccessId": awsid, "AccessKey": awskey, "Region": awsregion, "BucketName": awsbucketname}
|
||||
Stype.Azure = datatypes.JSONMap{"AzureAccount": azureacc, "AzureKey": azurekey, "AzureContainer": azurecontainer}
|
||||
Stype.SelectedType = selectedtype
|
||||
|
||||
_, err := models.UpdateStorageType(Stype, TenantId)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.SetCookie("get-toast", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/media/settings/")
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Media Settings Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/media/settings/")
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,522 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/auth"
|
||||
mem "github.com/spurtcms/member"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
type memfilter struct {
|
||||
Keyword string
|
||||
Category string
|
||||
Status string
|
||||
FromDate string
|
||||
ToDate string
|
||||
FirstName string
|
||||
}
|
||||
|
||||
/* List Member Group*/
|
||||
func MemberGroupList(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
filter memfilter
|
||||
)
|
||||
|
||||
//get values from html from data
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("View", auth.Read, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member group list authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("MemberGroup authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
// get member group list
|
||||
var membergrouplist []mem.Tblmembergroup
|
||||
MemberConfig.DataAccess = c.GetInt("dataaccess")
|
||||
MemberConfig.UserId = c.GetInt("userid")
|
||||
membergrouplists, _, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{Limit: limt, Offset: offset, Keyword: filter.Keyword}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup list details error: %s", err)
|
||||
}
|
||||
|
||||
for _, membergroupvalue := range membergrouplists {
|
||||
if !membergroupvalue.ModifiedOn.IsZero() {
|
||||
membergroupvalue.DateString = membergroupvalue.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
membergroupvalue.DateString = membergroupvalue.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
membergrouplist = append(membergrouplist, membergroupvalue)
|
||||
}
|
||||
|
||||
_, Total_members, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{Keyword: filter.Keyword}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup list details error: %s", err)
|
||||
}
|
||||
|
||||
var paginationendcount = len(membergrouplists) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(Total_members), limt)
|
||||
menu := NewMenuController(c)
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
uper, _ := NewAuth.IsGranted("Members Group", auth.Update, TenantId)
|
||||
|
||||
dper, _ := NewAuth.IsGranted("Members Group", auth.Delete, TenantId)
|
||||
|
||||
c.HTML(200, "groups.html", gin.H{"csrf": csrf.GetToken(c), "Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}, "title": ModuleName, "translate": translate, "Searchtrue": filterflag, "linktitle": "Users Group", "Menu": menu, "Limit": limt, "MemberGroupList": membergrouplist, "Count": Total_members, "Previous": Previous, "Page": Page, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "HeadTitle": translate.Memberss.Members, "Filter": filter, "Membermenu": true, "Groupmenu": true, "Tabmenu": TabName, "permission": uper, "dpermission": dper})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* Create Member Group*/
|
||||
func CreateNewMemberGroup(c *gin.Context) {
|
||||
|
||||
//get values from html from data
|
||||
userid := c.GetInt("userid")
|
||||
MemberGroup := mem.MemberGroupCreation{
|
||||
Name: c.PostForm("membergroup_name"),
|
||||
Description: c.PostForm("membergroup_desc"),
|
||||
CreatedBy: userid,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Create", auth.Create, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Group List authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Membergroup authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := MemberConfig.CreateMemberGroup(MemberGroup, TenantId) //Create member group
|
||||
if err != nil {
|
||||
if err != nil {
|
||||
ErrorLog.Printf("create membergroup error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/usergroup/")
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/usergroup/")
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Member Group Created Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/usergroup/")
|
||||
|
||||
} else {
|
||||
c.Redirect(301, "/403-page")
|
||||
}
|
||||
}
|
||||
|
||||
/* Update Member Group*/
|
||||
func UpdateMemberGroup(c *gin.Context) {
|
||||
|
||||
var url string
|
||||
|
||||
//get values from html from data
|
||||
id, _ := strconv.Atoi(c.PostForm("membergroup_id"))
|
||||
pageno := c.PostForm("memgrbpageno")
|
||||
if pageno != "" {
|
||||
url = "/admin/usergroup?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/usergroup/"
|
||||
}
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
MemberGroup := mem.MemberGroupCreationUpdation{
|
||||
Name: c.PostForm("membergroup_name"),
|
||||
Description: c.PostForm("membergroup_desc"),
|
||||
ModifiedBy: userid,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Update", auth.Update, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Group List authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Membergroup authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := MemberConfig.UpdateMemberGroup(MemberGroup, id, TenantId) //update member group
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup update error: %s", err)
|
||||
}
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
c.SetCookie("get-toast", "Member Group Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Delete Member Group*/
|
||||
func DeleteMemberGroup(c *gin.Context) {
|
||||
|
||||
var url string
|
||||
|
||||
//get values from html from data
|
||||
MemberGroupId, _ := strconv.Atoi(c.Query("id"))
|
||||
pageno := c.Query("page")
|
||||
if pageno != "" {
|
||||
url = "/admin/usergroup?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/usergroup/"
|
||||
}
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Delete", auth.Delete, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Group List authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Membergroup authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := MemberConfig.DeleteMemberGroup(MemberGroupId, userid, TenantId) //delete member group
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup delete error: %s", err)
|
||||
}
|
||||
|
||||
_, Total_membergrp, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{Keyword: ""}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup list details error: %s", err)
|
||||
}
|
||||
|
||||
recordsPerPage := Limit
|
||||
totalPages := (int(Total_membergrp) + recordsPerPage - 1) / recordsPerPage
|
||||
|
||||
currentPage := 1
|
||||
if pageno != "" {
|
||||
currentPage, _ = strconv.Atoi(pageno)
|
||||
}
|
||||
|
||||
if currentPage > totalPages && totalPages > 0 {
|
||||
url = "/admin/usergroup?page=" + strconv.Itoa(totalPages)
|
||||
}
|
||||
|
||||
fmt.Println("url", url)
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Member Group Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*Update Member Group status*/
|
||||
func MemberIsActive(c *gin.Context) {
|
||||
|
||||
//get values from html from data
|
||||
id, _ := strconv.Atoi(c.Request.PostFormValue("id"))
|
||||
val, _ := strconv.Atoi(c.Request.PostFormValue("isactive"))
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Members Group", auth.Update, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Member Group List authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Membergroup authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
flg, err := MemberConfig.MemberGroupIsActive(id, val, userid, TenantId) //update member group status
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup status update error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
|
||||
} else {
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func CheckNameInMemberGroup(c *gin.Context) {
|
||||
|
||||
id, _ := strconv.Atoi(c.PostForm("membergroup_id"))
|
||||
|
||||
name := c.PostForm("membergroup_name")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Members Group", auth.Read, TenantId)
|
||||
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("multi group delete authorization error :%s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Membergroup authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
flg, err := MemberConfig.CheckNameInMemberGroup(id, name, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("check name in member error :%s", perr)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
func MultiSelectDeleteMembergroup(c *gin.Context) {
|
||||
|
||||
var (
|
||||
memberdata []map[string]string
|
||||
Memberids []int
|
||||
url string
|
||||
)
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("memberids")), &memberdata); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
for _, val := range memberdata {
|
||||
memberid, _ := strconv.Atoi(val["memberid"])
|
||||
Memberids = append(Memberids, memberid)
|
||||
}
|
||||
|
||||
pageno := c.PostForm("page")
|
||||
|
||||
if pageno != "" {
|
||||
url = "/admin/usergroup?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/usergroup/"
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Members Group", auth.Delete, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("multi group delete authorization error :%s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Membergroup authorization error: %s", perr)
|
||||
c.JSON(200, gin.H{"value": false, "url": "/403-page"})
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
_, err := MemberConfig.MultiSelectedMemberDeletegroup(Memberids, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("multi group delete error :%s", perr)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
_, Total_membergrp, err := MemberConfig.ListMemberGroup(mem.MemberGroupListReq{Keyword: ""}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("membergroup list details error: %s", err)
|
||||
}
|
||||
|
||||
recordsPerPage := Limit
|
||||
totalPages := (int(Total_membergrp) + recordsPerPage - 1) / recordsPerPage
|
||||
|
||||
currentPage := 1
|
||||
if pageno != "" {
|
||||
currentPage, _ = strconv.Atoi(pageno)
|
||||
}
|
||||
|
||||
if currentPage > totalPages && totalPages > 0 {
|
||||
url = "/admin/usergroup?page=" + strconv.Itoa(totalPages)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true, "url": url})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func MultiSelectMembersgroupStatus(c *gin.Context) {
|
||||
|
||||
var (
|
||||
memberdata []map[string]string
|
||||
memberids []int
|
||||
statusint int
|
||||
status int
|
||||
)
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("memberids")), &memberdata); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
for _, val := range memberdata {
|
||||
|
||||
memberid, _ := strconv.Atoi(val["memberid"])
|
||||
statusint, _ = strconv.Atoi(val["status"])
|
||||
|
||||
if statusint == 0 {
|
||||
status = 1
|
||||
} else if statusint == 1 {
|
||||
status = 0
|
||||
|
||||
}
|
||||
|
||||
memberids = append(memberids, memberid)
|
||||
|
||||
}
|
||||
|
||||
pageno := c.PostForm("page")
|
||||
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/usergroup?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/usergroup/"
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Members Group", auth.Update, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("multi group status authorization error :%s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Membergroup authorization error: %s", perr)
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
_, err := MemberConfig.MultiSelectMembersgroupStatus(memberids, status, userid, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("multi group delete authorization error :%s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true, "status": status, "url": url})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func Chkmemgrphavemember(c *gin.Context) {
|
||||
|
||||
var (
|
||||
membergrpdata []map[string]string
|
||||
Membergrpids []int
|
||||
)
|
||||
memgrp_id, _ := strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("membergrpids")), &membergrpdata); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
for _, val := range membergrpdata {
|
||||
memberid, _ := strconv.Atoi(val["memberid"])
|
||||
Membergrpids = append(Membergrpids, memberid)
|
||||
}
|
||||
|
||||
_, err := MemberConfig.Membergroupcheckmember(memgrp_id, Membergrpids, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Member group check hane Error :%s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"value": true})
|
||||
|
||||
}
|
||||
@@ -1,132 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"log"
|
||||
"spurt-cms/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func MemberSettings(c *gin.Context) {
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
moulename, TabName, moduleid := ModuleRouteName(c)
|
||||
|
||||
templatelist, _ := models.GetTemplatesByModuleId(moduleid, TenantId)
|
||||
|
||||
membersetttings, _ := models.GetMemberSettings(TenantId)
|
||||
|
||||
Adminroles, _ := NewRoleWP.GetRoleByName(TenantId)
|
||||
|
||||
var Adminroleids []int
|
||||
|
||||
for _, val := range Adminroles {
|
||||
|
||||
Adminroleids = append(Adminroleids, val.Id)
|
||||
|
||||
}
|
||||
|
||||
Adminmember, _ := NewTeamWP.GetAdminRoleUsers(Adminroleids, TenantId)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "membersettings.html", gin.H{"Menu": menu, "linktitle": "Member Settings", "Cmsmenu": true, "title": moulename, "Tabmenu": TabName, "HeadTitle": translate.Memberss.Members, "Templatelist": templatelist, "csrf": csrf.GetToken(c), "Membersettings": membersetttings, "Adminmembers": Adminmember, "translate": translate})
|
||||
}
|
||||
|
||||
func MemberSettingUpdate(c *gin.Context) {
|
||||
|
||||
var updatedetails models.TblMemberSetting
|
||||
updatedetails.AllowRegistration, _ = strconv.Atoi(c.PostForm("allowregistration"))
|
||||
updatedetails.MemberLogin = strings.ToLower(c.PostForm("memberlogin"))
|
||||
updatedetails.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
updatedetails.ModifiedBy = c.GetInt("userid")
|
||||
updatedetails.Id, _ = strconv.Atoi(c.PostForm("membersettingid"))
|
||||
updatedetails.NotificationUsers = c.PostForm("multiselectuser")
|
||||
|
||||
var templatedata []map[string]string
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("templatestatus")), &templatedata); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
var template models.TblEmailTemplate
|
||||
|
||||
for _, val := range templatedata {
|
||||
|
||||
template.Id, _ = strconv.Atoi(val["templateid"])
|
||||
template.IsActive, _ = strconv.Atoi(val["status"])
|
||||
err1 := models.TemplateStatus(template.Id, template.IsActive, userid, TenantId)
|
||||
if err1 != nil {
|
||||
log.Println(err1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
err := models.UpdateMemberSetting(&updatedetails, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Member Settings Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/user/settings/")
|
||||
|
||||
}
|
||||
|
||||
func EditMemberSettingTemplate(c *gin.Context) {
|
||||
|
||||
var temp models.TblEmailTemplate
|
||||
|
||||
var id, _ = strconv.Atoi(c.Query("id"))
|
||||
|
||||
models.GetTempdetail(&temp, id, TenantId)
|
||||
|
||||
c.JSON(200, temp)
|
||||
|
||||
}
|
||||
|
||||
func UpdateMemberSettingTemplate(c *gin.Context) {
|
||||
|
||||
if c.PostForm("tempname") == "" || c.PostForm("tempdesc") == "" || c.PostForm("tempsub") == "" || c.PostForm("temcont") == "" {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/user/settings/")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
var template models.TblEmailTemplate
|
||||
template.TemplateName = c.PostForm("tempname")
|
||||
template.TemplateSubject = (c.PostForm("tempsub"))
|
||||
template.TemplateMessage = c.PostForm("temcont")
|
||||
template.TemplateDescription = c.PostForm("tempdesc")
|
||||
template.ModifiedBy = c.GetInt("userid")
|
||||
template.Id, _ = strconv.Atoi(c.PostForm("userid"))
|
||||
template.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().In(TZONE).Format("2006-01-02 15:04:05"))
|
||||
|
||||
err := models.UpdateTemplate(&template, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
|
||||
c.Redirect(301, "/user/settings/")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Templateupdatedsuccessfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/user/settings/")
|
||||
|
||||
}
|
||||
@@ -1,677 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"spurt-cms/config"
|
||||
"spurt-cms/models"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type SubModule struct {
|
||||
Id int
|
||||
ModuleName string
|
||||
IconPath string
|
||||
Routes []URL
|
||||
// FullAccessPermission bool
|
||||
Action bool
|
||||
}
|
||||
|
||||
type URL struct {
|
||||
Id int
|
||||
DisplayName string
|
||||
RouteName string
|
||||
}
|
||||
|
||||
type MenuMod struct {
|
||||
Id int
|
||||
ParentId int
|
||||
ModuleName string
|
||||
IconPath string
|
||||
Routes []URL // this is for single menu multiple permissions arr
|
||||
HrefRoute URL
|
||||
Route string //this is for a tag href route
|
||||
SubModule []SubModule // this is for submodules
|
||||
// FullAccessPermission bool
|
||||
EmptyCheck bool //this is flg for mainmenu hide if submodule is empty
|
||||
}
|
||||
|
||||
type TablePageType struct {
|
||||
Id int
|
||||
Title string
|
||||
Slug string
|
||||
CreatedBy int
|
||||
CreatedOn time.Time
|
||||
ModifiedBy int
|
||||
ModifiedOn time.Time
|
||||
DeletedBy int
|
||||
DeletedOn time.Time
|
||||
IsDeleted int
|
||||
}
|
||||
|
||||
type USR struct {
|
||||
TblModule []MenuMod
|
||||
Name string
|
||||
NameLength int
|
||||
LimitedLengthName string
|
||||
RoleName string
|
||||
ProfileImagePath string
|
||||
Languages []models.TblLanguage
|
||||
DefaultLanguage models.TblLanguage
|
||||
CurrentLanguage models.TblLanguage
|
||||
Personalize models.TblUserPersonalize
|
||||
Footer string
|
||||
NameString string
|
||||
Expand bool
|
||||
LogoPath string
|
||||
ExpandLogoPath string
|
||||
TblPageTypes []TablePageType
|
||||
ChannelID int
|
||||
LastUpdatedOn string
|
||||
WebsiteUrl string
|
||||
}
|
||||
|
||||
type TblModulePermission struct {
|
||||
Id int
|
||||
RouteName string
|
||||
DisplayName string
|
||||
SlugName string
|
||||
Description string
|
||||
ModuleId int
|
||||
CreatedBy int
|
||||
CreatedOn time.Time
|
||||
CreatedDate string `gorm:"-"`
|
||||
ModifiedBy int `gorm:"DEFAULT:NULL"`
|
||||
ModifiedOn time.Time `gorm:"DEFAULT:NULL"`
|
||||
ModuleName string `gorm:"<-:false"`
|
||||
FullAccessPermission int
|
||||
ParentId int
|
||||
AssignPermission int
|
||||
BreadcrumbName string
|
||||
TblRolePermission []TblRolePermission `gorm:"<-:false; foreignKey:PermissionId"`
|
||||
OrderIndex int
|
||||
}
|
||||
|
||||
type TblRolePermission struct {
|
||||
Id int
|
||||
RoleId int
|
||||
PermissionId int
|
||||
CreatedBy int
|
||||
CreatedOn time.Time
|
||||
CreatedDate string `gorm:"<-:false"`
|
||||
}
|
||||
|
||||
type TblModule struct {
|
||||
Id int
|
||||
ModuleName string
|
||||
IsActive int
|
||||
CreatedBy int
|
||||
CreatedOn time.Time
|
||||
CreatedDate string `gorm:"<-:false"`
|
||||
DefaultModule int
|
||||
ParentId int
|
||||
IconPath string
|
||||
OrderIndex int
|
||||
TblModulePermission []TblModulePermission `gorm:"<-:false; foreignKey:ModuleId"`
|
||||
Description string
|
||||
DisplayName string `gorm:"column:display_name;<-:false"`
|
||||
RouteName string `gorm:"column:route_name;<-:false"`
|
||||
RouteParentId int `gorm:"column:parent_id;<-:false"`
|
||||
FullAccessPermission int
|
||||
GroupFlg int
|
||||
}
|
||||
|
||||
func GetLanguageList() []models.TblLanguage {
|
||||
|
||||
var languagelist []models.TblLanguage
|
||||
|
||||
err := models.FetchAllLanguage(&languagelist, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Fectch all language error: %s", err)
|
||||
return []models.TblLanguage{}
|
||||
}
|
||||
|
||||
for _, langlist := range languagelist {
|
||||
_, err := os.Stat(langlist.JsonPath)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return []models.TblLanguage{}
|
||||
}
|
||||
}
|
||||
|
||||
return languagelist
|
||||
|
||||
}
|
||||
|
||||
func MainMenu() []TblModule {
|
||||
|
||||
var parentModules []TblModule
|
||||
|
||||
GetAllParentModule(&parentModules) //get parent default main module only
|
||||
|
||||
return parentModules
|
||||
|
||||
}
|
||||
|
||||
func GetPageType() []TablePageType {
|
||||
|
||||
var pagetypes []TablePageType
|
||||
|
||||
GetDefaultPagetypes(&pagetypes) //get parent default main module only
|
||||
|
||||
return pagetypes
|
||||
|
||||
}
|
||||
|
||||
func TabMenu(parentid int) []TblModule {
|
||||
|
||||
var subModules []TblModule
|
||||
|
||||
GetAllSubModule(&subModules, parentid)
|
||||
|
||||
return subModules
|
||||
|
||||
}
|
||||
|
||||
func NewMenuController(c *gin.Context) USR {
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
var (
|
||||
permissionid []int
|
||||
Final []MenuMod
|
||||
personalize_data models.TblUserPersonalize
|
||||
firstn string
|
||||
lastn string
|
||||
expandflg bool
|
||||
currentLanguage models.TblLanguage
|
||||
)
|
||||
|
||||
user, _, _ := NewTeamWP.GetUserById(userid, []int{})
|
||||
|
||||
rolepermission, err := GetPermissionIDS(user.RoleId)
|
||||
|
||||
pagetype := GetPageType()
|
||||
|
||||
if err != nil {
|
||||
|
||||
log.Println(err)
|
||||
|
||||
}
|
||||
|
||||
for _, val := range rolepermission {
|
||||
permissionid = append(permissionid, val.PermissionId)
|
||||
}
|
||||
|
||||
LeftMain := MainMenu()
|
||||
|
||||
for _, val := range LeftMain {
|
||||
|
||||
var fin MenuMod
|
||||
fin.Id = val.Id
|
||||
fin.ModuleName = val.ModuleName
|
||||
fin.IconPath = val.IconPath
|
||||
|
||||
TabManu := TabMenu(val.Id)
|
||||
|
||||
var Suball []SubModule
|
||||
|
||||
if user.RoleId != 1 && user.RoleId != 2 { //not admin users
|
||||
for _, tab := range TabManu {
|
||||
|
||||
var sub SubModule
|
||||
sub.Id = tab.Id
|
||||
sub.ModuleName = tab.ModuleName
|
||||
sub.IconPath = tab.IconPath
|
||||
|
||||
var (
|
||||
Url []URL
|
||||
rout []TblModulePermission
|
||||
flg bool
|
||||
)
|
||||
|
||||
GetModulePermissions(&rout, tab.Id, permissionid)
|
||||
|
||||
for _, url := range rout {
|
||||
if strings.Contains(url.RouteName, "/entries/entrylist/") {
|
||||
flg = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for _, url := range rout {
|
||||
if url.ModuleId == tab.Id {
|
||||
if url.RouteName != "/entries/entrylist" {
|
||||
|
||||
var urll URL
|
||||
if strings.Contains(url.RouteName, "/entries/entrylist/") {
|
||||
|
||||
url.RouteName = "/entries/entrylist"
|
||||
}
|
||||
urll.Id = url.Id
|
||||
urll.DisplayName = url.DisplayName
|
||||
urll.RouteName = url.RouteName
|
||||
Url = append(Url, urll)
|
||||
|
||||
} else if flg && url.RouteName == "/entries/entrylist" {
|
||||
|
||||
var urll URL
|
||||
urll.Id = url.Id
|
||||
urll.DisplayName = url.DisplayName
|
||||
urll.RouteName = url.RouteName
|
||||
Url = append(Url, urll)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if flg {
|
||||
|
||||
var urll URL
|
||||
urll.DisplayName = "Entries"
|
||||
urll.RouteName = "/entries/entrylist"
|
||||
Url = append(Url, urll)
|
||||
}
|
||||
|
||||
sub.Routes = Url
|
||||
Suball = append(Suball, sub)
|
||||
}
|
||||
} else {
|
||||
|
||||
for _, tab := range TabManu {
|
||||
|
||||
if tab.ParentId == val.Id {
|
||||
|
||||
var sub SubModule
|
||||
sub.Id = tab.Id
|
||||
sub.ModuleName = tab.ModuleName
|
||||
sub.IconPath = tab.IconPath
|
||||
|
||||
var rout []TblModulePermission
|
||||
GetModulePermissions(&rout, tab.Id, []int{})
|
||||
|
||||
var Url []URL
|
||||
for _, url := range rout {
|
||||
var urll URL
|
||||
urll.Id = url.Id
|
||||
urll.DisplayName = url.DisplayName
|
||||
urll.RouteName = url.RouteName
|
||||
Url = append(Url, urll)
|
||||
}
|
||||
|
||||
sub.Routes = Url
|
||||
Suball = append(Suball, sub)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(Suball) > 0 && len(Suball[0].Routes) > 0 {
|
||||
|
||||
fin.Route = Suball[0].Routes[0].RouteName
|
||||
|
||||
}
|
||||
|
||||
for _, val := range Suball {
|
||||
if len(val.Routes) != 0 {
|
||||
fin.Route = val.Routes[0].RouteName
|
||||
break
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fin.SubModule = Suball
|
||||
Final = append(Final, fin)
|
||||
|
||||
}
|
||||
|
||||
// for _, val := range Final {
|
||||
|
||||
// fmt.Println(val)
|
||||
|
||||
// fmt.Println()
|
||||
// }
|
||||
|
||||
models.GetPersonalize(&personalize_data, userid, TenantId)
|
||||
|
||||
var first = user.FirstName
|
||||
var last = user.LastName
|
||||
|
||||
if first != "" {
|
||||
firstn = strings.ToUpper(first[:1])
|
||||
}
|
||||
if user.LastName != "" {
|
||||
lastn = strings.ToUpper(last[:1])
|
||||
}
|
||||
|
||||
var nameLength = len(user.FirstName) + len(user.LastName)
|
||||
|
||||
user.NameLength = nameLength
|
||||
|
||||
if nameLength > 18 {
|
||||
if len(first) > 6 {
|
||||
user.LimitedLengthName = first[:5] + "..."
|
||||
|
||||
} else {
|
||||
user.LimitedLengthName = first[:len(first)] + "..."
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var Name = firstn + lastn
|
||||
|
||||
user.NameString = Name
|
||||
|
||||
if user.ProfileImagePath != "" {
|
||||
if user.StorageType == "local" {
|
||||
user.ProfileImagePath = "/" + user.ProfileImagePath
|
||||
} else if user.StorageType == "aws" {
|
||||
user.ProfileImagePath = "/image-resize?name=" + user.ProfileImagePath
|
||||
}
|
||||
}
|
||||
|
||||
if interfaceValue, exists := c.Get("currentLanguage"); exists {
|
||||
if structValue, ok := interfaceValue.(models.TblLanguage); ok {
|
||||
currentLanguage = structValue
|
||||
}
|
||||
}
|
||||
|
||||
session1, _ := c.Cookie("mainmenu")
|
||||
|
||||
if session1 != "" {
|
||||
expandflg = true
|
||||
} else {
|
||||
expandflg = false
|
||||
}
|
||||
|
||||
tblGeneralSettings, _ := models.GetGeneralSettings(TenantId)
|
||||
|
||||
if !strings.Contains(tblGeneralSettings.LogoPath, "/public/img") {
|
||||
|
||||
if tblGeneralSettings.StorageType == "aws" {
|
||||
|
||||
LogoPath = "/image-resize?name=" + tblGeneralSettings.LogoPath
|
||||
ExpantLogoPath = "/image-resize?name=" + tblGeneralSettings.ExpandLogoPath
|
||||
|
||||
} else if tblGeneralSettings.StorageType == "local" {
|
||||
|
||||
LogoPath = "Storage/" + tblGeneralSettings.LogoPath
|
||||
ExpantLogoPath = "Storage/" + tblGeneralSettings.ExpandLogoPath
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
LogoPath = tblGeneralSettings.LogoPath
|
||||
|
||||
}
|
||||
|
||||
// ChannelId, err := ChannelConfig.DefaultChannel("default_channel", TenantId)
|
||||
// if err != nil {
|
||||
// fmt.Println(err)
|
||||
// }
|
||||
channelist, clerr := ChannelConfig.GetPermissionChannel(TenantId)
|
||||
if clerr != nil {
|
||||
ErrorLog.Printf(" Entry listchannel error: %s", clerr)
|
||||
}
|
||||
var ChannelId int
|
||||
|
||||
if len(channelist) != 0 {
|
||||
|
||||
selectedchannel := channelist[len(channelist)-1]
|
||||
|
||||
ChannelId = selectedchannel.Id
|
||||
|
||||
}
|
||||
Mod := USR{
|
||||
TblModule: Final,
|
||||
Name: user.FirstName + " " + user.LastName,
|
||||
NameLength: user.NameLength,
|
||||
LimitedLengthName: user.LimitedLengthName,
|
||||
RoleName: user.RoleName,
|
||||
ProfileImagePath: user.ProfileImagePath,
|
||||
Languages: GetLanguageList(),
|
||||
// DefaultLanguage: GetDefaultLanguageDetails(userid),
|
||||
Personalize: personalize_data,
|
||||
CurrentLanguage: currentLanguage,
|
||||
Footer: os.Getenv("COPYRIGHTS"),
|
||||
NameString: user.NameString,
|
||||
Expand: expandflg,
|
||||
LogoPath: LogoPath,
|
||||
ExpandLogoPath: ExpantLogoPath,
|
||||
TblPageTypes: pagetype,
|
||||
ChannelID: ChannelId,
|
||||
LastUpdatedOn: LastUpdatedTime,
|
||||
WebsiteUrl: os.Getenv("WEBSITE_URL"),
|
||||
}
|
||||
|
||||
return Mod
|
||||
}
|
||||
|
||||
func GetPermissionIDS(roleid int) ([]TblRolePermission, error) {
|
||||
|
||||
var perm []TblRolePermission
|
||||
|
||||
err := GetPermissionId(&perm, roleid)
|
||||
|
||||
if err != nil {
|
||||
|
||||
log.Println(err)
|
||||
|
||||
return []TblRolePermission{}, err
|
||||
|
||||
}
|
||||
|
||||
return perm, nil
|
||||
}
|
||||
|
||||
var db = config.SetupDB()
|
||||
|
||||
/**/
|
||||
func GetAllParentModule(modules *[]TblModule) error {
|
||||
|
||||
if err := db.Table("tbl_modules").Where("default_module = 0 and parent_id = 0").Order("tbl_modules.order_index asc").Find(&modules).
|
||||
Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetAllSubModules(modules *[]TblModule, parentId []int) error {
|
||||
|
||||
if err := db.Table("tbl_modules").Where("parent_id in (?)", parentId).Order("tbl_modules.order_index asc").Find(&modules).
|
||||
Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetAllSubModule(modules *[]TblModule, moduleid int) error {
|
||||
|
||||
if err := db.Table("tbl_modules").Where("parent_id = (?) and menu_type='tab'", moduleid).Order("tbl_modules.order_index asc").Find(&modules).
|
||||
Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetModulePermissions(permission *[]TblModulePermission, modid int, ids []int) error {
|
||||
|
||||
query := db.Table("tbl_module_permissions").Select("tbl_module_permissions.*,tbl_modules.module_name").Joins("inner join tbl_modules on tbl_modules.id = tbl_module_permissions.module_id").Order("tbl_modules.order_index asc,tbl_module_permissions.order_index asc")
|
||||
|
||||
if len(ids) > 0 {
|
||||
|
||||
query = query.Where("tbl_module_permissions.id in (?)", ids)
|
||||
|
||||
}
|
||||
|
||||
if modid != 0 && modid > -1 {
|
||||
|
||||
query = query.Where("module_id = (?)", modid)
|
||||
}
|
||||
|
||||
query.Find(&permission)
|
||||
|
||||
if err := query.Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/*Get PermissionId By RoleId*/
|
||||
func GetPermissionId(perm *[]TblRolePermission, roleid int) error {
|
||||
|
||||
if err := db.Model(TblRolePermission{}).Where("role_id=?", roleid).Find(&perm).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/**/
|
||||
func GetAllParentModules1(mod *[]TblModule) (err error) {
|
||||
|
||||
if err := DB.Model(TblModule{}).Where("parent_id=0 and (tenant_id is NULL or tenant_id = ?)", TenantId).Order("order_index asc").Find(&mod).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/**/
|
||||
func GetDefaultPagetypes(mod *[]TablePageType) (err error) {
|
||||
|
||||
if err := DB.Table("tbl_page_types").Where("is_deleted=0").Find(&mod).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/**/
|
||||
func GetAllSubModules1(mod *[]TblModule, ids []int) (err error) {
|
||||
|
||||
if err := DB.Debug().Model(TblModule{}).Where("(tbl_modules.parent_id in (?) or id in(?)) and tbl_modules.assign_permission=0 and (tenant_id is NULL or tenant_id = ?)", ids, ids, TenantId).Order("order_index").Preload("TblModulePermission", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Where("assign_permission =1 and tenant_id is NULL or tenant_id = ?", TenantId).Order("order_index asc")
|
||||
}).Find(&mod).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Permissions() []TblModule {
|
||||
|
||||
var (
|
||||
allmodule []TblModule
|
||||
allmodules []TblModule
|
||||
parentid []int //all parentid
|
||||
submod []TblModule
|
||||
)
|
||||
|
||||
GetAllParentModules1(&allmodule)
|
||||
for _, val := range allmodule {
|
||||
parentid = append(parentid, val.Id)
|
||||
}
|
||||
|
||||
GetAllSubModules1(&submod, parentid)
|
||||
for _, val := range allmodule {
|
||||
|
||||
if val.GroupFlg == 1 {
|
||||
|
||||
var newmod TblModule
|
||||
newmod.Id = val.Id
|
||||
newmod.Description = val.Description
|
||||
newmod.CreatedBy = val.CreatedBy
|
||||
newmod.ModuleName = val.ModuleName
|
||||
newmod.IsActive = val.IsActive
|
||||
newmod.IconPath = val.IconPath
|
||||
newmod.CreatedDate = val.CreatedOn.Format("02 Jan 2006 03:04 PM")
|
||||
|
||||
for _, sub := range submod {
|
||||
if sub.ParentId == val.Id {
|
||||
for _, getmod := range sub.TblModulePermission {
|
||||
if getmod.ModuleId == sub.Id {
|
||||
|
||||
var modper TblModulePermission
|
||||
modper.Id = getmod.Id
|
||||
modper.Description = getmod.Description
|
||||
modper.DisplayName = getmod.DisplayName
|
||||
modper.ModuleName = getmod.ModuleName
|
||||
modper.RouteName = getmod.RouteName
|
||||
modper.CreatedBy = getmod.CreatedBy
|
||||
modper.Description = getmod.Description
|
||||
modper.TblRolePermission = getmod.TblRolePermission
|
||||
modper.CreatedDate = val.CreatedOn.Format("2006-01-02 15:04:05")
|
||||
modper.FullAccessPermission = getmod.FullAccessPermission
|
||||
newmod.TblModulePermission = append(newmod.TblModulePermission, modper)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
allmodules = append(allmodules, newmod)
|
||||
|
||||
} else {
|
||||
|
||||
for _, sub := range submod {
|
||||
|
||||
if sub.ParentId == val.Id {
|
||||
|
||||
var newmod TblModule
|
||||
newmod.Id = sub.Id
|
||||
newmod.Description = sub.Description
|
||||
newmod.CreatedBy = sub.CreatedBy
|
||||
newmod.ModuleName = sub.ModuleName
|
||||
newmod.IsActive = sub.IsActive
|
||||
newmod.IconPath = sub.IconPath
|
||||
newmod.CreatedDate = sub.CreatedOn.Format("02 Jan 2006 03:04 PM")
|
||||
|
||||
for _, getmod := range sub.TblModulePermission {
|
||||
if getmod.ModuleId == sub.Id {
|
||||
|
||||
var modper TblModulePermission
|
||||
modper.Id = getmod.Id
|
||||
modper.Description = sub.Description
|
||||
modper.DisplayName = getmod.DisplayName
|
||||
modper.ModuleName = getmod.ModuleName
|
||||
modper.RouteName = getmod.RouteName
|
||||
modper.CreatedBy = getmod.CreatedBy
|
||||
modper.Description = getmod.Description
|
||||
modper.TblRolePermission = getmod.TblRolePermission
|
||||
modper.CreatedDate = val.CreatedOn.Format("2006-01-02 15:04:05")
|
||||
modper.FullAccessPermission = getmod.FullAccessPermission
|
||||
newmod.TblModulePermission = append(newmod.TblModulePermission, modper)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
allmodules = append(allmodules, newmod)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return allmodules
|
||||
}
|
||||
@@ -1,301 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
newauth "github.com/spurtcms/auth"
|
||||
"github.com/spurtcms/blocks"
|
||||
cat "github.com/spurtcms/categories"
|
||||
chn "github.com/spurtcms/channels"
|
||||
courses "github.com/spurtcms/courses"
|
||||
forms "github.com/spurtcms/forms-builders"
|
||||
listing "github.com/spurtcms/listing"
|
||||
mem "github.com/spurtcms/member"
|
||||
memaccess "github.com/spurtcms/member-access"
|
||||
memship "github.com/spurtcms/membership"
|
||||
"github.com/spurtcms/menu"
|
||||
menus "github.com/spurtcms/menu"
|
||||
"github.com/spurtcms/team"
|
||||
role "github.com/spurtcms/team-roles"
|
||||
)
|
||||
|
||||
var (
|
||||
NewAuth *newauth.Auth
|
||||
NewTeam *team.Teams
|
||||
NewTeamWP *team.Teams
|
||||
NewRole *role.PermissionConfig
|
||||
NewRoleWP *role.PermissionConfig
|
||||
ChannelConfig *chn.Channel
|
||||
ChannelConfigWP *chn.Channel
|
||||
CategoryConfig *cat.Categories
|
||||
MemberConfig *mem.Member
|
||||
MemberConfigWP *mem.Member
|
||||
MemberaccessConfig *memaccess.AccessControl
|
||||
BlockConfig *blocks.Block
|
||||
FormConfig *forms.Formbuilders
|
||||
MembershipConfig *memship.Membership
|
||||
CoursesConfig *courses.Courses
|
||||
MenuConfig *menus.Menu
|
||||
MenuConfigWp *menus.Menu
|
||||
ListingConfig *listing.Listing
|
||||
)
|
||||
|
||||
// AuthCofing
|
||||
func AuthConfig() *newauth.Auth {
|
||||
|
||||
NewAuth = newauth.AuthSetup(newauth.Config{
|
||||
SecretKey: os.Getenv("JWT_SECRET"),
|
||||
DB: DB,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewAuth
|
||||
}
|
||||
|
||||
// TeamConfig
|
||||
func GetTeamInstance() *team.Teams {
|
||||
|
||||
NewTeam = team.TeamSetup(team.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewTeam
|
||||
}
|
||||
|
||||
// TeamConfig
|
||||
func GetTeamInstanceWithoutPermission() *team.Teams {
|
||||
|
||||
NewTeamWP = team.TeamSetup(team.Config{
|
||||
DB: DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewTeamWP
|
||||
}
|
||||
|
||||
// roles and permissions config
|
||||
func GetRoleInstance() *role.PermissionConfig {
|
||||
|
||||
NewAuth.AuthFlg = true
|
||||
NewAuth.PermissionFlg = true
|
||||
|
||||
NewRole = role.RoleSetup(role.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Authenticate: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewRole
|
||||
}
|
||||
|
||||
// roles and permissions without permission config
|
||||
func GetRoleInstanceWithoutPermission() *role.PermissionConfig {
|
||||
|
||||
NewRoleWP = role.RoleSetup(role.Config{
|
||||
DB: DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Authenticate: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewRoleWP
|
||||
}
|
||||
|
||||
// channel config
|
||||
func GetChannelInstance() *chn.Channel {
|
||||
|
||||
ChannelConfig = chn.ChannelSetup(chn.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return ChannelConfig
|
||||
}
|
||||
|
||||
// channel config without permission
|
||||
func GetChannelInstanceWithoutPermission() *chn.Channel {
|
||||
|
||||
ChannelConfigWP = chn.ChannelSetup(chn.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return ChannelConfigWP
|
||||
}
|
||||
|
||||
// Categoryconfig
|
||||
func GetCategoryInstance() *cat.Categories {
|
||||
|
||||
CategoryConfig = cat.CategoriesSetup(cat.Config{
|
||||
DB: db,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return CategoryConfig
|
||||
}
|
||||
|
||||
// member config
|
||||
func GetMemberInstance() *mem.Member {
|
||||
|
||||
MemberConfig = mem.MemberSetup(mem.Config{
|
||||
DB: db,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return MemberConfig
|
||||
}
|
||||
|
||||
// member config without permission
|
||||
func GetMemberInstanceWithoutPermission() *mem.Member {
|
||||
|
||||
MemberConfigWP = mem.MemberSetup(mem.Config{
|
||||
DB: db,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return MemberConfigWP
|
||||
}
|
||||
|
||||
/*content access Config*/
|
||||
func GetMemberaccessInstance() *memaccess.AccessControl {
|
||||
|
||||
MemberaccessConfig = memaccess.AccessSetup(memaccess.Config{
|
||||
DB: db,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return MemberaccessConfig
|
||||
}
|
||||
|
||||
func GetBlockInstance() *blocks.Block {
|
||||
|
||||
BlockConfig = blocks.BlockSetup(blocks.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return BlockConfig
|
||||
}
|
||||
|
||||
func GetFormInstance() *forms.Formbuilders {
|
||||
|
||||
FormConfig = forms.FormSetup(forms.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return FormConfig
|
||||
}
|
||||
|
||||
func GetMembershipInstance() *memship.Membership {
|
||||
|
||||
MembershipConfig = memship.MembershipSetup(memship.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return MembershipConfig
|
||||
}
|
||||
|
||||
func GetCoursesInstance() *courses.Courses {
|
||||
|
||||
CoursesConfig = courses.CoursesSetup(courses.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return CoursesConfig
|
||||
}
|
||||
|
||||
func GetListingInstance() *listing.Listing {
|
||||
|
||||
ListingConfig = listing.ListingSetup(listing.Config{
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return ListingConfig
|
||||
}
|
||||
|
||||
func GetMenuInstrance() *menu.Menu {
|
||||
|
||||
MenuConfig = menu.MenuSetup(menu.Config{
|
||||
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return MenuConfig
|
||||
}
|
||||
func GetMenuInstranceWithoutPermission() *menu.Menu {
|
||||
|
||||
MenuConfigWp = menu.MenuSetup(menu.Config{
|
||||
|
||||
DB: DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return MenuConfigWp
|
||||
}
|
||||
func PackageInitialize() {
|
||||
AuthConfig()
|
||||
GetTeamInstance()
|
||||
GetRoleInstance()
|
||||
GetChannelInstance()
|
||||
GetCategoryInstance()
|
||||
GetMemberInstance()
|
||||
GetMemberaccessInstance()
|
||||
GetTeamInstanceWithoutPermission()
|
||||
GetRoleInstanceWithoutPermission()
|
||||
GetMemberInstanceWithoutPermission()
|
||||
GetChannelInstanceWithoutPermission()
|
||||
GetCoursesInstance()
|
||||
GetBlockInstance()
|
||||
GetFormInstance()
|
||||
GetMenuInstrance()
|
||||
GetMenuInstranceWithoutPermission()
|
||||
GetListingInstance()
|
||||
GetMembershipInstance()
|
||||
}
|
||||
@@ -1,503 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
nauth "github.com/spurtcms/auth"
|
||||
role "github.com/spurtcms/team-roles"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
/*Roles list*/
|
||||
func RoleView(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
NewModule []TblModule
|
||||
)
|
||||
|
||||
//get values from html form data
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
keyword := c.Query("keyword")
|
||||
|
||||
|
||||
var filterflag bool
|
||||
if keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Roles & Permissions", nauth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("roleslist authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
NewRole.DataAccess = c.GetInt("dataaccess")
|
||||
NewRole.UserId = c.GetInt("userid")
|
||||
|
||||
roles, rolecount, err := NewRole.RoleList(role.Rolelist{Limit: limt, Offset: offset, Filter: role.Filter{Keyword: keyword}}, TenantId, false)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("roleslist error: %s", err)
|
||||
}
|
||||
|
||||
var newroles []role.Tblrole
|
||||
for _, val := range roles {
|
||||
|
||||
permissionid, err := NewRole.GetPermissionDetailsById(val.Id, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("roleslist permission details error: %s", err)
|
||||
}
|
||||
|
||||
if len(permissionid) > 0 {
|
||||
val.Slug = "Manage"
|
||||
} else {
|
||||
val.Slug = "Yettoconf"
|
||||
}
|
||||
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.CreatedDate = val.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
val.CreatedDate = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
newroles = append(newroles, val)
|
||||
}
|
||||
|
||||
/*Get module permission list*/
|
||||
// var NewModule []role.Tblmodule
|
||||
|
||||
// Module, _, err := NewRole.PermissionListRoleId(100, 0, c.GetInt("role"), role.Filter{})
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("get permissionlist error: %s", err)
|
||||
// }
|
||||
Module := Permissions()
|
||||
|
||||
for _, val := range Module {
|
||||
/*this is for display whitespcae remove */
|
||||
val.Description = strings.ReplaceAll(val.ModuleName, " ", "")
|
||||
NewModule = append(NewModule, val)
|
||||
}
|
||||
loguserid := c.GetInt("userid")
|
||||
|
||||
roleid := NewRole.GetRoleids(loguserid)
|
||||
|
||||
//pagination calc
|
||||
paginationendcount := len(roles) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(rolecount), limt)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
menu := NewMenuController(c)
|
||||
|
||||
c.HTML(200, "rolesandpermission.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}, "Menu": menu, "csrf": csrf.GetToken(c), "linktitle": "Roles & Permissions", "roleid": roleid, "Searchtrue": filterflag, "loguserid": loguserid, "HeadTitle": translate.Roles + " & " + translate.Permission.Permissions, "translate": translate, "roles": newroles, "Count": rolecount, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Previous": Previous, "Next": Next, "PageCount": PageCount, "Page": Page, "CurrentPage": pageno, "Module": NewModule, "Limit": limt, "keyword": keyword, "title": "Roles & Permissions", "SettingsHead": true, "Rolesmenu": true, "Tooltiptitle": translate.Setting.Rolestooltip})
|
||||
|
||||
}
|
||||
|
||||
/*Get data using id*/
|
||||
func GetRolePermissionData(c *gin.Context) {
|
||||
|
||||
var roleid, _ = strconv.Atoi(c.Request.PostFormValue("id"))
|
||||
|
||||
role, err := NewRole.GetRoleById(roleid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("get role details error: %s", err)
|
||||
}
|
||||
|
||||
permissionid, perr := NewRole.GetPermissionDetailsById(roleid, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("get permission details error: %s", perr)
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(gin.H{"role": role, "permissionid": permissionid})
|
||||
}
|
||||
|
||||
/*Roles Create or update*/
|
||||
func RoleCreate(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
rolename := c.Request.PostFormValue("rolename")
|
||||
description := c.Request.PostFormValue("roledesc")
|
||||
permissionsid := c.PostFormArray("permissionid[]")
|
||||
roleisactive:= c.Request.PostFormValue("roleisactive")
|
||||
fmt.Println("print",roleisactive)
|
||||
isactive, err := strconv.Atoi(roleisactive)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
|
||||
fmt.Println("role data", rolename, permissionsid)
|
||||
|
||||
var idi = []int{}
|
||||
if len(permissionsid) > 0 {
|
||||
|
||||
//convert stringarray to intarray
|
||||
for _, i := range permissionsid {
|
||||
j, err := strconv.Atoi(i)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
idi = append(idi, j)
|
||||
}
|
||||
}
|
||||
|
||||
idi = append(idi, 1, 21)
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
fmt.Println("dtetet1")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Roles & Permissions", nauth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("rolescreate authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
/*role created*/
|
||||
|
||||
fmt.Println("tetetett2")
|
||||
roledetail, rerr := NewRole.CreateRole(role.RoleCreation{Name: rolename, Description: description, CreatedBy: userid, TenantId: TenantId},isactive)
|
||||
if rerr != nil {
|
||||
ErrorLog.Printf("rolescreate error: %s", rerr)
|
||||
json.NewEncoder(c.Writer).Encode(rerr)
|
||||
return
|
||||
}
|
||||
|
||||
/*permission created*/
|
||||
prerr := NewRole.CreatePermission(role.MultiPermissin{RoleId: roledetail.Id, Ids: idi, CreatedBy: userid, TenantId: TenantId})
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("rolepermission create error: %s", prerr)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"role": "added"})
|
||||
|
||||
}
|
||||
|
||||
/*Roles Create or update*/
|
||||
func RoleUpdate(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
roleid, _ := strconv.Atoi(c.Request.PostFormValue("roleid"))
|
||||
rolename := c.Request.PostFormValue("rolename")
|
||||
description := c.Request.PostFormValue("roledesc")
|
||||
permissionsid := c.PostFormArray("permissionid[]")
|
||||
|
||||
var idi = []int{}
|
||||
if len(permissionsid) > 0 {
|
||||
|
||||
//convert stringarray to intarray
|
||||
for _, i := range permissionsid {
|
||||
j, err := strconv.Atoi(i)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
idi = append(idi, j)
|
||||
}
|
||||
}
|
||||
|
||||
idi = append(idi, 1, 21)
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Roles & Permissions", nauth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("rolesupdate authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
/*role update*/
|
||||
roledetail, rerr := NewRole.UpdateRole(role.RoleCreation{Name: rolename, Description: description, CreatedBy: userid}, roleid, TenantId)
|
||||
if rerr != nil {
|
||||
ErrorLog.Printf("rolesupdate error: %s", perr)
|
||||
json.NewEncoder(c.Writer).Encode(rerr)
|
||||
return
|
||||
}
|
||||
|
||||
/*permission created*/
|
||||
prerr := NewRole.CreateUpdatePermission(role.MultiPermissin{RoleId: roledetail.Id, Ids: idi, CreatedBy: userid, TenantId: TenantId})
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("rolepermission update error: %s", prerr)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"role": "updated"})
|
||||
|
||||
}
|
||||
|
||||
/*Delete Role*/
|
||||
func DeleteRole(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
var id, _ = strconv.Atoi(c.Query("id"))
|
||||
pageno := c.Query("page")
|
||||
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/settings/roles?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/roles/"
|
||||
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Roles & Permissions", nauth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("rolesdelete authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
_, err := NewRole.DeleteRole([]int{}, id, TenantId)
|
||||
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
ErrorLog.Printf("rolesdelete authorization error: %s", err)
|
||||
}
|
||||
_, rolecount, err := NewRole.RoleList(role.Rolelist{Limit: 0, Offset: 0, Filter: role.Filter{Keyword: ""}}, TenantId, false)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("roleslist error: %s", err)
|
||||
}
|
||||
|
||||
|
||||
recordsPerPage := Limit
|
||||
totalPages := (int(rolecount) + recordsPerPage - 1) / recordsPerPage
|
||||
|
||||
currentPage := 1
|
||||
if pageno != "" {
|
||||
currentPage, _ = strconv.Atoi(pageno)
|
||||
}
|
||||
|
||||
if currentPage > totalPages && totalPages > 0 {
|
||||
url = "/admin/settings/roles?page=" + strconv.Itoa(totalPages)
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Role Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
/*Check Role Already Exists*/
|
||||
func CheckRoleAlreadyExists(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
roleid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
Rolename := c.PostForm("name")
|
||||
|
||||
_, err := NewRole.CheckRoleAlreadyExists(roleid, Rolename, TenantId)
|
||||
|
||||
var role bool
|
||||
if err != nil {
|
||||
ErrorLog.Printf("check roles error: %s", err)
|
||||
role = false
|
||||
} else {
|
||||
role = true
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"role": role})
|
||||
}
|
||||
|
||||
/*permission role status*/
|
||||
func RoleIsActive(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
id, _ := strconv.Atoi(c.Request.PostFormValue("id"))
|
||||
val, _ := strconv.Atoi(c.Request.PostFormValue("isactive"))
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
err := NewRole.RoleStatus(id, val, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("roles status error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
} else {
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// multiple role delete
|
||||
func MultiselectRoleDelete(c *gin.Context) {
|
||||
|
||||
var (
|
||||
roledata []map[string]string
|
||||
roleids []int
|
||||
)
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("roleids")), &roledata); err != nil {
|
||||
ErrorLog.Printf("roles multiple delete unmarshall error: %s", err)
|
||||
}
|
||||
|
||||
for _, val := range roledata {
|
||||
roleid, _ := strconv.Atoi(val["roleid"])
|
||||
roleids = append(roleids, roleid)
|
||||
}
|
||||
|
||||
pageno := c.PostForm("page")
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/settings/roles?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/roles/"
|
||||
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Roles & Permissions", nauth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("rolesmultiple delete authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
_, err := NewRole.DeleteRole(roleids, 0, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("rolesmultiple delete error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
_, rolecount, err := NewRole.RoleList(role.Rolelist{Limit: 0, Offset: 0, Filter: role.Filter{Keyword: ""}}, TenantId, false)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("roleslist error: %s", err)
|
||||
}
|
||||
|
||||
|
||||
recordsPerPage := Limit
|
||||
totalPages := (int(rolecount) + recordsPerPage - 1) / recordsPerPage
|
||||
|
||||
currentPage := 1
|
||||
if pageno != "" {
|
||||
currentPage, _ = strconv.Atoi(pageno)
|
||||
}
|
||||
|
||||
if currentPage > totalPages && totalPages > 0 {
|
||||
url = "/admin/settings/roles?page=" + strconv.Itoa(totalPages)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true, "url": url})
|
||||
|
||||
}
|
||||
|
||||
func MultiSelectRoleStatus(c *gin.Context) {
|
||||
|
||||
var roledata []map[string]string
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("roleids")), &roledata); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
var (
|
||||
roleids []int
|
||||
statusint int
|
||||
status int
|
||||
)
|
||||
|
||||
for _, val := range roledata {
|
||||
|
||||
roleid, _ := strconv.Atoi(val["roleid"])
|
||||
statusint, _ = strconv.Atoi(val["status"])
|
||||
if statusint == 0 {
|
||||
status = 1
|
||||
} else if statusint == 1 {
|
||||
status = 0
|
||||
}
|
||||
|
||||
roleids = append(roleids, roleid)
|
||||
|
||||
}
|
||||
|
||||
fmt.Println("state", status)
|
||||
|
||||
pageno := c.PostForm("page")
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/settings/roles?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/roles/"
|
||||
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Roles & Permissions", nauth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("rolesmultiplestatus authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
err := NewRole.MultiSelectRoleStatus(roleids, status, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("rolesmultiplestatus error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
c.SetCookie("get-toast", "Role Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.JSON(200, gin.H{"value": true, "status": status, "url": url})
|
||||
}
|
||||
|
||||
|
||||
func Chkroleshaveuser(c *gin.Context){
|
||||
var (
|
||||
rolesdata []map[string]string
|
||||
rolesids []int
|
||||
)
|
||||
roles_id, _ := strconv.Atoi(c.PostForm("rolesid"))
|
||||
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("roleids")), &rolesdata); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
for _, val := range rolesdata {
|
||||
roleid, _ := strconv.Atoi(val["roleid"])
|
||||
rolesids = append(rolesids, roleid)
|
||||
}
|
||||
|
||||
_, err := NewRole.Rolescheckusers(roles_id,rolesids, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Roles and permission check hane Error :%s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"value": true})
|
||||
}
|
||||
@@ -1,265 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/team"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func SettingView(c *gin.Context) {
|
||||
|
||||
menu := NewMenuController(c)
|
||||
// fmt.Println("valmenemodule",menu.TblModule)
|
||||
|
||||
// for _,val:= range menu.TblModule{
|
||||
// if val.ModuleName=="Settings"{
|
||||
// for _,val2:=range val.SubModule{
|
||||
|
||||
// fmt.Println("valmenemodule",val2)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "settings.html", gin.H{"Menu": menu, "linktitle": "Settings", "csrf": csrf.GetToken(c), "translate": translate, "HeadTitle": translate.Settings, "title": "Settings"})
|
||||
|
||||
}
|
||||
|
||||
func MyProfile(c *gin.Context) {
|
||||
|
||||
users, _, err := NewTeamWP.GetUserById(c.GetInt("userid"), []int{})
|
||||
if err != nil {
|
||||
ErrorLog.Printf("get myprofile error : %s", err)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
}
|
||||
|
||||
var first = users.FirstName
|
||||
var last = users.LastName
|
||||
var firstn = strings.ToUpper(first[:1])
|
||||
var lastn string
|
||||
if users.LastName != "" {
|
||||
lastn = strings.ToUpper(last[:1])
|
||||
}
|
||||
|
||||
if users.ProfileImagePath != "" {
|
||||
|
||||
if users.StorageType == "local" {
|
||||
users.ProfileImagePath = "/" + users.ProfileImagePath
|
||||
|
||||
} else if users.StorageType == "aws" {
|
||||
users.ProfileImagePath = "/image-resize?name=" + users.ProfileImagePath
|
||||
}
|
||||
}
|
||||
|
||||
var Name = firstn + lastn
|
||||
users.NameString = Name
|
||||
|
||||
Role, err := NewRole.GetRoleById(users.RoleId, "")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
menu := NewMenuController(c)
|
||||
// Folder, File, Media, _, _ := GetMedia()
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
c.HTML(200, "myaccount.html", gin.H{"Menu": menu, "title": "My Account", "linktitle": "My Account", "csrf": csrf.GetToken(c), "HeadTitle": translate.Myprofile, "translate": translate, "user": users, "rolename": Role.Name, "SettingsHead": true, "Myprofmenu": true, "Tooltiptitle": translate.Setting.Myprofiletooltip,"StorageType": selectedtype.SelectedType})
|
||||
}
|
||||
|
||||
func ChangePassword(c *gin.Context) {
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
c.HTML(200, "security.html", gin.H{"Menu": menu, "title": "Security", "linktitle": "Security", "csrf": csrf.GetToken(c), "translate": translate, "HeadTitle": translate.Setting.Security, "SettingsHead": true, "Changepassmenu": true, "Tooltiptitle": translate.Setting.Securitytooltip})
|
||||
}
|
||||
|
||||
func UpdateProfile(c *gin.Context) {
|
||||
|
||||
if c.PostForm("user_fname") == "" || c.PostForm("user_email") == "" || c.PostForm("user_mob") == "" || c.PostForm("user_name") == "" {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
imgPath, imgName string
|
||||
err error
|
||||
)
|
||||
|
||||
storageType, err := GetSelectedType()
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
return
|
||||
}
|
||||
|
||||
imagedata := c.PostForm("crop_data")
|
||||
|
||||
if strings.Contains(imagedata, "data:image/jpeg;base64") || strings.Contains(imagedata, "data:image/png;base64") || strings.Contains(imagedata, "data:image/svg+xml;base64") {
|
||||
|
||||
tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
return
|
||||
}
|
||||
|
||||
if storageType.SelectedType == "aws" {
|
||||
var (
|
||||
tempString, imageName string
|
||||
imageByte []byte
|
||||
)
|
||||
|
||||
imageName, tempString, imageByte, err = ConvertBase64toByte(imagedata, "user")
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
return
|
||||
}
|
||||
|
||||
tempString = tenantDetails.S3FolderName + tempString
|
||||
|
||||
err = storagecontroller.UploadCropImageS3(imageName, tempString, imageByte)
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
return
|
||||
}
|
||||
|
||||
imgPath = tempString
|
||||
imgName = imageName
|
||||
|
||||
} else if storageType.SelectedType == "local" {
|
||||
var tempImgPath, imageName string
|
||||
|
||||
imageName, tempImgPath, err = ConvertBase64(imagedata, "storage/user")
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
return
|
||||
}
|
||||
|
||||
imgPath = "/" + tempImgPath
|
||||
imgName = imageName
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
imgPath = imagedata
|
||||
}
|
||||
|
||||
userid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
Newuser := team.TeamCreate{
|
||||
|
||||
FirstName: c.PostForm("user_fname"),
|
||||
LastName: c.PostForm("user_lname"),
|
||||
Email: c.PostForm("user_email"),
|
||||
MobileNo: c.PostForm("user_mob"),
|
||||
Username: c.PostForm("user_name"),
|
||||
ProfileImage: imgName,
|
||||
ProfileImagePath: imgPath,
|
||||
StorageType: storageType.SelectedType,
|
||||
}
|
||||
|
||||
fmt.Println("Dha", Newuser)
|
||||
|
||||
err = NewTeamWP.UpdateMyUser(Newuser, userid, TenantId)
|
||||
if err != nil {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "My Profile Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/myprofile/")
|
||||
|
||||
}
|
||||
|
||||
func UptPassword(c *gin.Context) {
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
pswd := c.PostForm("pass")
|
||||
|
||||
cpswd := c.PostForm("cpass")
|
||||
|
||||
if pswd == "" && cpswd == "" && pswd != cpswd {
|
||||
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
|
||||
c.Redirect(301, "/admin/settings/changepassword")
|
||||
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
err, _ := NewTeamWP.ChangeYourPassword(pswd, userid, TenantId)
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
|
||||
c.Redirect(301, "/admin/settings/changepassword")
|
||||
|
||||
return
|
||||
|
||||
} else {
|
||||
|
||||
c.SetCookie("get-toast", "Password Updated Successfully", 3600, "", "", false, false)
|
||||
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
|
||||
c.Redirect(301, "/admin/settings/changepassword")
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
func CheckPassword(c *gin.Context) {
|
||||
|
||||
var Password bool
|
||||
|
||||
id := c.GetInt("userid")
|
||||
|
||||
pswd := c.PostForm("pass")
|
||||
|
||||
userdet, _, _ := NewTeamWP.GetUserById(id, []int{})
|
||||
|
||||
if strings.Contains(fmt.Sprint(userdet), "given some values is empty") {
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
passerr := bcrypt.CompareHashAndPassword([]byte(userdet.Password), []byte(pswd))
|
||||
|
||||
if passerr == bcrypt.ErrMismatchedHashAndPassword {
|
||||
|
||||
Password = false
|
||||
} else {
|
||||
Password = true
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"pass": Password})
|
||||
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"spurt-cms/models"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func Personalization(c *gin.Context) {
|
||||
|
||||
var id = c.GetInt("userid")
|
||||
var personalize_data models.TblUserPersonalize
|
||||
models.GetPersonalize(&personalize_data, id,TenantId)
|
||||
var logo = personalize_data.LogoPath
|
||||
|
||||
menu := NewMenuController(c)
|
||||
Folder, File, Media, _, _ := GetMedia()
|
||||
translate, _ := TranslateHandler(c)
|
||||
selectedtype, _ := GetSelectedType()
|
||||
|
||||
c.HTML(200, "personalize.html", gin.H{"Menu": menu,"linktitle":"Personalize", "title": "Personalize", "csrf": csrf.GetToken(c), "HeadTitle": translate.Setting.Personalize, "translate": translate, "Folder": Folder, "File": File, "Media": Media, "logo": logo, "SettingsHead": true, "Personalizemenu": true, "Tooltiptitle": translate.Setting.Personalizetooltip, "StorageType": selectedtype.SelectedType})
|
||||
}
|
||||
|
||||
func PersonalizationUpdate(c *gin.Context) {
|
||||
|
||||
var (
|
||||
id = c.GetInt("userid")
|
||||
cl = c.PostForm("color-change")
|
||||
imagePath string
|
||||
expandimagePath string
|
||||
personalize_data models.TblUserPersonalize
|
||||
)
|
||||
|
||||
imagePath = c.PostForm("logo_imgpath")
|
||||
expandimagePath = c.PostForm("expandlogo_imgpath")
|
||||
|
||||
err := models.GetPersonalize(&personalize_data, id,TenantId)
|
||||
if err != nil {
|
||||
|
||||
personalize_data.UserId = id
|
||||
personalize_data.MenuBackgroundColor = cl
|
||||
personalize_data.LogoPath = imagePath
|
||||
personalize_data.ExpandLogoPath = expandimagePath
|
||||
personalize_data.CreatedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
err1 := models.CreatePersonalize(&personalize_data)
|
||||
if err1 != nil {
|
||||
ErrorLog.Printf("create personalize error : %s", err)
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
personalize_data.MenuBackgroundColor = cl
|
||||
personalize_data.LogoPath = imagePath
|
||||
personalize_data.ExpandLogoPath = expandimagePath
|
||||
personalize_data.ModifiedOn, _ = time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
err2 := models.UpdatePersonalize(&personalize_data, id,TenantId)
|
||||
if err2 != nil {
|
||||
ErrorLog.Printf("update personalize error : %s", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Personalize Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/settings/personalize/")
|
||||
}
|
||||
@@ -1,693 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/auth"
|
||||
chn "github.com/spurtcms/channels"
|
||||
"github.com/spurtcms/courses"
|
||||
forms "github.com/spurtcms/forms-builders"
|
||||
"github.com/spurtcms/listing"
|
||||
menu "github.com/spurtcms/menu"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
// ContentMenuList
|
||||
func MenuList(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt int
|
||||
offset int
|
||||
filter menu.Filter
|
||||
FinalMenusList []menu.TblMenus
|
||||
)
|
||||
|
||||
//get values from url query
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
filter.Status = strings.Trim(c.DefaultQuery("status", ""), " ")
|
||||
filter.ToDate = strings.Trim(c.DefaultQuery("lastupdated", ""), " ")
|
||||
webid, _ := strconv.Atoi(c.Query("webid"))
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
permission, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error:%s", perr)
|
||||
c.AbortWithStatus(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if !permission {
|
||||
ErrorLog.Printf("menu authorization error")
|
||||
c.Redirect(http.StatusMovedPermanently, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
MenuConfig.DataAccess = c.GetInt("dataaccess")
|
||||
MenuConfig.UserId = c.GetInt("userid")
|
||||
|
||||
Menulist, Total_count, err := MenuConfig.MenuList(limt, offset, menu.Filter(filter), TenantId, webid)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("menu list error: %s", err)
|
||||
}
|
||||
for _, val := range Menulist {
|
||||
|
||||
if !val.ModifiedOn.IsZero() {
|
||||
val.DateString = val.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
val.DateString = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
menuitemslist, _ := MenuConfig.GetMenusByParentid(val.Id, TenantId)
|
||||
|
||||
val.MenuitemCount = len(menuitemslist) - 1
|
||||
|
||||
fmt.Println("lengdffd", len(menuitemslist))
|
||||
FinalMenusList = append(FinalMenusList, val)
|
||||
|
||||
}
|
||||
|
||||
//pagination calc
|
||||
paginationendcount := len(Menulist) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(Total_count), limt)
|
||||
|
||||
webbanner, _ := c.Cookie("webbanner")
|
||||
|
||||
if webbanner == "" {
|
||||
|
||||
webbanner = "true"
|
||||
}
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
var pages bool
|
||||
|
||||
if webid != 0 {
|
||||
pages = true
|
||||
|
||||
}
|
||||
|
||||
Websitedet, _ := MenuConfig.GetWebsiteById(webid, TenantId)
|
||||
templatedetail, err := MenuConfig.GetTemplateById(Websitedet.TemplateId, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
templatedetail.DateString = templatedetail.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
|
||||
c.HTML(200, "menulist.html", gin.H{"Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}, "Searchtrue": filterflag, "webbanner": webbanner, "websitedetail": Websitedet, "gotemplatepageheader": pages, "templatedetail": templatedetail, "Count": Total_count, "Limit": limt, "csrf": csrf.GetToken(c), "title": ModuleName, "Tabmenu": TabName, "translate": translate, "Menulist": FinalMenusList, "Menu": NewMenuController(c), "linktitle": "Menus", "Paginationendcount": paginationendcount, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Page": Page, "Filter": filter, "Paginationstartcount": paginationstartcount, "HeadTitle": "Menu"})
|
||||
|
||||
}
|
||||
|
||||
// Content MenuItemsList
|
||||
func MenuIemsList(c *gin.Context) {
|
||||
|
||||
permission, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error:%s", perr)
|
||||
c.AbortWithStatus(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if !permission {
|
||||
ErrorLog.Printf("menu authorization error")
|
||||
c.Redirect(http.StatusMovedPermanently, "/403-page")
|
||||
return
|
||||
}
|
||||
var recentChannels []chn.Tblchannel
|
||||
var recentCourses []courses.TblCourses
|
||||
var recentForms []forms.TblForms
|
||||
TenMinutesAgo := time.Now().Add(-60 * time.Minute)
|
||||
channelist, _, clerr := ChannelConfig.ListChannel(chn.Channels{Limit: 100, Offset: 0, IsActive: true, TenantId: TenantId})
|
||||
if clerr != nil {
|
||||
ErrorLog.Printf("channellist error :%s", clerr)
|
||||
}
|
||||
|
||||
courseslist, _, err := CoursesConfig.CoursesList(100, 0, courses.Filter{}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("courselist error :%s", err)
|
||||
}
|
||||
|
||||
Formlist, _, _, err := FormConfig.FormBuildersList(100, 0, forms.Filter{}, TenantId, 1, 0, "", 0)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("formslist error :%s", err)
|
||||
}
|
||||
for _, val := range channelist {
|
||||
if val.CreatedOn.After(TenMinutesAgo) {
|
||||
recentChannels = append(recentChannels, val)
|
||||
}
|
||||
}
|
||||
for _, val := range courseslist {
|
||||
if val.CreatedOn.After(TenMinutesAgo) {
|
||||
recentCourses = append(recentCourses, val)
|
||||
}
|
||||
}
|
||||
for _, val := range Formlist {
|
||||
if val.CreatedOn.After(TenMinutesAgo) {
|
||||
recentForms = append(recentForms, val)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(recentChannels, "channellistsdf")
|
||||
menuid, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
menuitemslist, err := MenuConfig.GetMenusByParentid(menuid, TenantId)
|
||||
|
||||
menudetails, _ := MenuConfig.GetmenyById(menuid, TenantId)
|
||||
|
||||
ModuleName, TabName, _ := ModuleRouteName(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
webid, _ := strconv.Atoi(c.Query("webid"))
|
||||
|
||||
var pages bool
|
||||
|
||||
if webid != 0 {
|
||||
pages = true
|
||||
|
||||
}
|
||||
|
||||
Websitedet, _ := MenuConfig.GetWebsiteById(webid, TenantId)
|
||||
templatedetail, err := MenuConfig.GetTemplateById(Websitedet.TemplateId, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
Entrylist, _, _, _ := ChannelConfig.ChannelEntriesList(chn.Entries{}, TenantId)
|
||||
|
||||
pagelist, _, err := MenuConfig.GetTemplatePageList(100, 0, menu.Filter{Status: "Active"}, TenantId, webid)
|
||||
|
||||
listinglist, _, err := ListingConfig.ListingsList(0, 0, listing.Filter{}, TenantId)
|
||||
if err != nil {
|
||||
fmt.Printf("Unable to fetch Listings List:%v", err)
|
||||
}
|
||||
|
||||
c.HTML(200, "menuitems.html", gin.H{"csrf": csrf.GetToken(c), "websitedetail": Websitedet, "Entrylist": Entrylist, "pagelist": pagelist, "listinglist": listinglist, "gotemplatepageheader": pages, "templatedetail": templatedetail, "recentChannels": recentChannels, "recentCourses": recentCourses, "recentForms": recentForms, "menudetails": menudetails, "menuitemslist": menuitemslist, "title": ModuleName, "Tabmenu": TabName, "translate": translate, "Menu": NewMenuController(c), "linktitle": "Menus Items", "channelist": channelist, "courselist": courseslist, "Formlist": Formlist, "menuid": menuid})
|
||||
|
||||
}
|
||||
|
||||
// CreateMenu
|
||||
func CreateMenu(c *gin.Context) {
|
||||
|
||||
menuname := c.PostForm("menu_name")
|
||||
|
||||
menudesc := c.PostForm("menu_desc")
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
websiteid := c.Query("webid")
|
||||
|
||||
fmt.Println("websiteiddd", websiteid)
|
||||
|
||||
webid, _ := strconv.Atoi(c.Query("webid"))
|
||||
|
||||
menustatus, _ := strconv.Atoi(c.PostForm("menustatus"))
|
||||
|
||||
permission, perr := NewAuth.IsGranted("Menu", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("menu authorization error:%s", perr)
|
||||
c.AbortWithStatus(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if !permission {
|
||||
ErrorLog.Printf("menu authorization error")
|
||||
c.Redirect(http.StatusMovedPermanently, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
_, err := MenuConfig.CreateMenus(menu.MenuCreate{MenuName: menuname, WebsiteId: webid, Description: menudesc, Status: menustatus, TenantId: TenantId, CreatedBy: userid, ParentId: 0})
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("Menu mandatory field error: %s", err)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/menu?webid="+websiteid)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Menu error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, "/admin/website/menu?webid="+websiteid)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Menu Created Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, "/admin/website/menu?webid="+websiteid)
|
||||
|
||||
}
|
||||
|
||||
func UpdateMenu(c *gin.Context) {
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
menuid, _ := strconv.Atoi(c.PostForm("menu_id"))
|
||||
menustatus, _ := strconv.Atoi(c.PostForm("menustatus"))
|
||||
pageno := c.Request.PostFormValue("menupageno")
|
||||
menupage := c.PostForm("menupage")
|
||||
templateid := c.Query("webid")
|
||||
webid, _ := strconv.Atoi(c.Query("webid"))
|
||||
menudetails := menu.MenuCreate{
|
||||
MenuName: c.PostForm("menu_name"),
|
||||
Description: c.PostForm("menu_desc"),
|
||||
Status: menustatus,
|
||||
ModifiedBy: userid,
|
||||
TenantId: TenantId,
|
||||
Id: menuid,
|
||||
WebsiteId: webid,
|
||||
}
|
||||
var url string
|
||||
if menupage == "menuitems" {
|
||||
url = "/admin/website/menu/menuitems/" + c.PostForm("menu_id")
|
||||
} else {
|
||||
if pageno != "" {
|
||||
url = "/admin/website/menu?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/website/menu"
|
||||
}
|
||||
}
|
||||
|
||||
if templateid != "" && templateid != "0" {
|
||||
if strings.Contains(url, "?") {
|
||||
url += "&webid=" + templateid
|
||||
} else {
|
||||
url += "?webid=" + templateid
|
||||
}
|
||||
}
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.Create, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Update Menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Update Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
_, err := MenuConfig.UpdateMenu(menudetails)
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("UpdateMenu mandatory field error: %s", err)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("UpdateMenu error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, url)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Menu Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, url)
|
||||
|
||||
}
|
||||
|
||||
//Delete Menu function//
|
||||
|
||||
func DeleteMenu(c *gin.Context) {
|
||||
|
||||
menuId, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
fmt.Println(menuId, "menuiddd")
|
||||
pageno := c.Query("page")
|
||||
userid := c.GetInt("userid")
|
||||
webid := c.Query("webid")
|
||||
|
||||
var url string
|
||||
if pageno != "" {
|
||||
url = "/admin/website/menu?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/website/menu"
|
||||
|
||||
}
|
||||
if webid != "" && webid != "0" {
|
||||
if strings.Contains(url, "?") {
|
||||
url += "&webid=" + webid
|
||||
} else {
|
||||
url += "?webid=" + webid
|
||||
}
|
||||
}
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.Delete, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("delete menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := MenuConfig.DeleteMenu(menuId, userid, TenantId)
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("deletemenu mandatory field error: %s", perr)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("deletemenu error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Menu Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Duplicate Menu Name check function//
|
||||
|
||||
func CheckMenuName(c *gin.Context) {
|
||||
|
||||
// get value from html form data
|
||||
menu_id, _ := strconv.Atoi(c.PostForm("menu_id"))
|
||||
menu_name := c.PostForm("menu_name")
|
||||
websiteid, _ := strconv.Atoi(c.PostForm("webid"))
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.Read, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("checkmenugroupname authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("menugroup authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
if permisison {
|
||||
|
||||
flg, err := MenuConfig.CheckMenuName(menu_id, menu_name, websiteid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("checkmenugroupname error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Status change function//
|
||||
|
||||
func MenuStatusChange(c *gin.Context) {
|
||||
|
||||
menuId, _ := strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
fmt.Println(menuId, "menuiddd")
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
val, _ := strconv.Atoi(c.Request.PostFormValue("isactive"))
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.Update, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("delete menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
flg, err := MenuConfig.MenuStatusChange(menuId, val, userid, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("menu status change error: %s", perr)
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
|
||||
} else {
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
func MenuPublish(c *gin.Context) {
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.Update, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("delete menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
menuid, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
webid := c.Query("webid")
|
||||
|
||||
_, err := MenuConfig.MenuStatusChange(menuid, 1, userid, TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
}
|
||||
c.SetCookie("get-toast", "Menu Updated Successfully", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/menu/?webid="+webid)
|
||||
}
|
||||
|
||||
//Menu Item Creation//
|
||||
|
||||
func CreateMenuItem(c *gin.Context) {
|
||||
|
||||
labelname := c.PostForm("menu_name")
|
||||
|
||||
urlpath := c.PostForm("urlpath")
|
||||
|
||||
parentmenuid, _ := strconv.Atoi(c.PostForm("menu_id"))
|
||||
|
||||
mode := c.PostForm("formmode")
|
||||
|
||||
mtype := c.PostForm("type")
|
||||
|
||||
typeid, _ := strconv.Atoi(c.PostForm("cid"))
|
||||
|
||||
listingsids := c.PostForm("listingsids")
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
websiteid := c.Query("webid")
|
||||
|
||||
webid, _ := strconv.Atoi(websiteid)
|
||||
|
||||
if urlpath == "" && mtype == "channel" {
|
||||
|
||||
urlpath = "/channel/" + labelname
|
||||
} else if urlpath == "/listings/" {
|
||||
|
||||
urlpath = "/listings/" + strings.ToLower(strings.ReplaceAll(labelname, " ", "-"))
|
||||
mtype = "listings"
|
||||
}
|
||||
|
||||
menu, err := MenuConfig.CreateMenus(menu.MenuCreate{MenuName: labelname, Status: 1, ParentId: parentmenuid, WebsiteId: webid, UrlPath: urlpath, TenantId: TenantId, CreatedBy: userid, Type: mtype, TypeId: typeid, ListingsIds: listingsids})
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("Menu mandatory field error: %s", err)
|
||||
if mode == "1" {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/menu/menuitems/"+c.PostForm("menu_id")+"?webid="+websiteid)
|
||||
return
|
||||
}
|
||||
c.JSON(200, false)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Menu error: %s", err)
|
||||
|
||||
if mode == "1" {
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, "/admin/website/menu/menuitems/"+c.PostForm("menu_id")+"?webid="+websiteid)
|
||||
return
|
||||
}
|
||||
c.JSON(200, false)
|
||||
|
||||
}
|
||||
if mode == "1" {
|
||||
c.SetCookie("get-toast", "Menu Created Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, "/admin/website/menu/menuitems/"+c.PostForm("menu_id")+"?webid="+websiteid)
|
||||
} else {
|
||||
c.JSON(200, menu)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func UpdateMenuItem(c *gin.Context) {
|
||||
|
||||
labelname := c.PostForm("menu_name")
|
||||
|
||||
urlpath := c.PostForm("urlpath")
|
||||
|
||||
urlpath = "/listings/" + strings.ToLower(strings.ReplaceAll(labelname, " ", "-"))
|
||||
|
||||
parentmenuid, _ := strconv.Atoi(c.PostForm("parentmenu_id"))
|
||||
|
||||
menuid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
|
||||
mtype := c.PostForm("type")
|
||||
|
||||
typeid, _ := strconv.Atoi(c.PostForm("cid"))
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
webid, _ := strconv.Atoi(c.PostForm("webid"))
|
||||
|
||||
menudetails := menu.MenuCreate{
|
||||
MenuName: labelname,
|
||||
Status: 1,
|
||||
ModifiedBy: userid,
|
||||
TenantId: TenantId,
|
||||
Id: menuid,
|
||||
ParentId: parentmenuid,
|
||||
UrlPath: urlpath,
|
||||
Type: mtype,
|
||||
TypeId: typeid,
|
||||
WebsiteId: webid,
|
||||
}
|
||||
fmt.Println("checkupdate", menudetails)
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.Create, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Update Menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Update Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
updatemenu, err := MenuConfig.UpdateMenu(menudetails)
|
||||
|
||||
if err != nil {
|
||||
|
||||
c.JSON(200, false)
|
||||
}
|
||||
|
||||
c.JSON(200, updatemenu)
|
||||
}
|
||||
|
||||
func DeleteMenuItem(c *gin.Context) {
|
||||
|
||||
menuId, _ := strconv.Atoi(c.Param("id"))
|
||||
|
||||
fmt.Println(menuId, "menuiddd")
|
||||
|
||||
templateid := c.Query("webid")
|
||||
userid := c.GetInt("userid")
|
||||
menudeta, _ := MenuConfig.GetmenyById(menuId, TenantId)
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Menu", auth.Delete, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("delete menu authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
ErrorLog.Printf("Menu authorization error")
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
var parentid int
|
||||
|
||||
fmt.Println("menudetadfd", menudeta.ParentId)
|
||||
|
||||
if menudeta.ParentId != 0 {
|
||||
|
||||
menudet, _ := MenuConfig.GetmenyById(menudeta.ParentId, TenantId)
|
||||
|
||||
if menudet.ParentId == 0 {
|
||||
|
||||
parentid = menudet.Id
|
||||
} else {
|
||||
|
||||
parentid = menudet.ParentId
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
parentid = menudeta.ParentId
|
||||
}
|
||||
|
||||
if permisison {
|
||||
|
||||
err := MenuConfig.DeleteMenu(menuId, userid, TenantId)
|
||||
|
||||
// err := MenuConfig.DeleteMenuItem(menuId, userid, TenantId)
|
||||
|
||||
if strings.Contains(fmt.Sprint(err), "given some values is empty") {
|
||||
ErrorLog.Printf("deletemenu mandatory field error: %s", perr)
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/menu/menuitems/"+strconv.Itoa(parentid)+"?webid="+templateid)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("deletemenu error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/menu/menuitems/"+strconv.Itoa(parentid)+"?webid="+templateid)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "Menu Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/website/menu/menuitems/"+strconv.Itoa(parentid)+"?webid="+templateid)
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,167 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"spurt-cms/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/channels"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func ListTemplates(c *gin.Context) {
|
||||
|
||||
var limit, offset int
|
||||
|
||||
keyword := strings.TrimSpace(c.Request.URL.Query().Get("keyword"))
|
||||
|
||||
channelSlug := c.Request.URL.Query().Get("channel")
|
||||
userLimit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
|
||||
if userLimit == "" {
|
||||
limit = Limit
|
||||
|
||||
} else {
|
||||
limit, _ = strconv.Atoi(userLimit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
|
||||
offset = (pageno - 1) * limit
|
||||
}
|
||||
|
||||
var (
|
||||
templateList []models.TblTemplates
|
||||
templateModuleList []models.TblTemplateModules
|
||||
mainCount int64
|
||||
tempCountList []int
|
||||
err error
|
||||
channelDetails models.TblChannel
|
||||
)
|
||||
tempBannerValue, _ := c.Cookie("channelbanner")
|
||||
|
||||
if tempBannerValue == "" {
|
||||
|
||||
tempBannerValue = "true"
|
||||
}
|
||||
templateModuleList, mainCount, err = models.GetTemplateModuleList(keyword, TenantId, channelSlug)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("%v: %v", ErrGettingTemplateModuleList, err)
|
||||
|
||||
}
|
||||
|
||||
channelDetails, err = models.GetChannelDetailsWithTemplateCount(channelSlug, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("%v: %v", ErrGettingTemplateModuleList, err)
|
||||
|
||||
}
|
||||
|
||||
var imagePath string
|
||||
|
||||
var finalList []models.TblTemplateModules
|
||||
|
||||
for _, templateModule := range templateModuleList {
|
||||
|
||||
tempCountList = append(tempCountList, len(templateModule.Templates))
|
||||
|
||||
moduleName := strings.ToTitle(templateModule.TemplateModuleName)
|
||||
moduleSlug := strings.ToTitle(templateModule.TemplateModuleSlug)
|
||||
|
||||
templateModule.TemplateModuleName = moduleName
|
||||
templateModule.TemplateModuleSlug = moduleSlug
|
||||
|
||||
var finalTemplateList []models.TblTemplates
|
||||
var count = 0
|
||||
for _, template := range templateModule.Templates {
|
||||
|
||||
// changedTempName := strings.ToTitle(template.TemplateName)
|
||||
var changedTempName string
|
||||
if len(moduleName) > 0 {
|
||||
changedTempName = strings.ToUpper(string(template.TemplateName[0])) + template.TemplateName[1:]
|
||||
}
|
||||
changedTempSlug := strings.ToTitle(template.TemplateSlug)
|
||||
|
||||
if template.ImagePath != "" {
|
||||
|
||||
imagePath = "/image-resize?name=" + template.ImagePath
|
||||
|
||||
} else {
|
||||
imagePath = ""
|
||||
}
|
||||
|
||||
count++
|
||||
template.ImagePath = imagePath
|
||||
template.TemplateName = changedTempName
|
||||
template.TemplateSlug = changedTempSlug
|
||||
if strings.Contains(template.DeployLink, "next_public_spurtcms_nextjs_starter_apikey") {
|
||||
template.DeployLink = strings.Replace(template.DeployLink, "next_public_spurtcms_nextjs_starter_apikey", "NEXT_PUBLIC_SPURTCMS_NEXTJS_STARTER_APIKEY", -1)
|
||||
}
|
||||
finalTemplateList = append(finalTemplateList, template)
|
||||
}
|
||||
|
||||
templateModule.Templates = finalTemplateList
|
||||
templateModule.TemplateCount = count
|
||||
finalList = append(finalList, templateModule)
|
||||
|
||||
}
|
||||
|
||||
channelList, _, err := ChannelConfig.ListChannel(channels.Channels{Limit: 200, Offset: 0, IsActive: true, TenantId: TenantId})
|
||||
if err != nil {
|
||||
ErrorLog.Printf("%v: %v", ErrGettingTemplateModuleList, err)
|
||||
|
||||
}
|
||||
|
||||
var finalChannelList []channels.Tblchannel
|
||||
|
||||
for _, chnList := range channelList {
|
||||
|
||||
templateCount, err := models.GetChannelBasedTemplateCount(chnList.SlugName, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("%v: %v", ErrGettingTemplateModuleList, err)
|
||||
|
||||
}
|
||||
|
||||
chnList.EntriesCount = templateCount.TemplateCount
|
||||
finalChannelList = append(finalChannelList, chnList)
|
||||
}
|
||||
|
||||
var allZeros bool
|
||||
|
||||
if len(tempCountList) > 0 {
|
||||
for _, val := range tempCountList {
|
||||
if val != 0 {
|
||||
allZeros = false
|
||||
break
|
||||
}
|
||||
allZeros = true
|
||||
}
|
||||
} else {
|
||||
allZeros = true
|
||||
}
|
||||
|
||||
var paginationendcount = len(templateList) + offset
|
||||
var paginationstartcount = offset + 1
|
||||
previous, next, pageCount, page := Pagination(pageno, int(mainCount), limit)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
c.HTML(200, "template.html", gin.H{"csrf": csrf.GetToken(c), "tempBannerValue": tempBannerValue, "linktitle": "Next.js Templates", "Menu": menu, "translate": translate, "SettingsHead": true, "title": "Channels", "TemplateModules": finalList, "Count": mainCount, "IsCountZero": allZeros, "Filter": keyword, "Previous": previous, "Next": next, "PageCount": pageCount, "CurrentPage": pageno, "Page": page, "Limit": limit, "Paginationendcount": paginationendcount, "ChannelList": finalChannelList, "ChannelDetail": channelDetails, "Paginationstartcount": paginationstartcount, "Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: pageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}})
|
||||
}
|
||||
|
||||
func Templates(c *gin.Context) {
|
||||
|
||||
fmt.Println("Dhanush")
|
||||
c.HTML(200, "template.html", gin.H{"Name": "Dhanush"})
|
||||
|
||||
}
|
||||
@@ -1,829 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"spurt-cms/models"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spurtcms/auth"
|
||||
"github.com/spurtcms/team"
|
||||
teamroles "github.com/spurtcms/team-roles"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
var query models.QUERY
|
||||
|
||||
// user list
|
||||
func Userlist(c *gin.Context) {
|
||||
|
||||
var (
|
||||
limt, offset int
|
||||
filter team.Filters
|
||||
)
|
||||
|
||||
//get values from html form data
|
||||
limit := c.Query("limit")
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
|
||||
if limit == "" {
|
||||
limt = Limit
|
||||
} else {
|
||||
limt, _ = strconv.Atoi(limit)
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
filter.Keyword = strings.Trim(c.DefaultQuery("keyword", ""), " ")
|
||||
|
||||
var filterflag bool
|
||||
if filter.Keyword != "" {
|
||||
filterflag = true
|
||||
} else {
|
||||
filterflag = false
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId) //check role based permissions
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("Userlist authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
NewTeam.Dataaccess = c.GetInt("dataaccess")
|
||||
NewTeam.Userid = c.GetInt("userid")
|
||||
|
||||
userlist, count, err := NewTeam.ListUser(limt, offset, team.Filters{Keyword: filter.Keyword}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Getting userlist data error : %s", err)
|
||||
}
|
||||
|
||||
var userlists []team.TblUser
|
||||
for _, val := range userlist {
|
||||
if !val.ModifiedOn.IsZero() { //change date format to display on list
|
||||
val.ModuleName = val.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
val.ModuleName = val.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
if val.ProfileImagePath != "" {
|
||||
if val.StorageType == "local" {
|
||||
val.ProfileImagePath = "/" + val.ProfileImagePath
|
||||
} else if val.StorageType == "aws" {
|
||||
val.ProfileImagePath = "/image-resize?name=" + val.ProfileImagePath
|
||||
}
|
||||
}
|
||||
|
||||
userlists = append(userlists, val)
|
||||
}
|
||||
|
||||
var paginationendcount = len(userlist) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(count), limt)
|
||||
|
||||
menu := NewMenuController(c)
|
||||
|
||||
translate, _ := TranslateHandler(c)
|
||||
|
||||
roles, _, rerr := NewRole.RoleList(teamroles.Rolelist{GetAllData: true}, TenantId, true)
|
||||
if rerr != nil {
|
||||
ErrorLog.Printf("Getting all rolelist data error : %s", rerr)
|
||||
}
|
||||
|
||||
fmt.Println("role", roles)
|
||||
|
||||
loguserid, _ := c.Get("userid")
|
||||
|
||||
storagetype, err := GetSelectedType()
|
||||
if err != nil {
|
||||
fmt.Printf("member list getting storagetype error: %s", err)
|
||||
}
|
||||
|
||||
roleidlog := c.GetInt("role")
|
||||
|
||||
c.HTML(200, "teams.html", gin.H{"csrf": csrf.GetToken(c), "Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3,
|
||||
}, "HeadTitle": translate.Setting.Teams, "linktitle": "Teams", "Searchtrue": filterflag, "Roles": roles, "user": userlists, "Count": count, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Page": Page, "Limit": limt, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Menu": menu, "Filter": filter, "translate": translate, "chcount": count, "SettingsHead": true, "Teamsmenu": true, "Tooltiptitle": translate.Setting.Teamstooltip, "title": "Teams", "loggedinuser": loguserid, "StorageType": storagetype.SelectedType, "roleidlog": roleidlog})
|
||||
|
||||
}
|
||||
|
||||
// create user
|
||||
func CreateUser(c *gin.Context) {
|
||||
|
||||
//check validation
|
||||
if c.PostForm("user_fname") == "" || c.PostForm("user_email") == "" || c.PostForm("user_mob") == "" || c.PostForm("user_name") == "" || c.PostForm("user_pass") == "" || c.PostForm("user_role") == "" {
|
||||
ErrorLog.Printf("create user error mandatory field error")
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/users/")
|
||||
return
|
||||
}
|
||||
|
||||
//get values from html form data
|
||||
Roleid, _ := strconv.Atoi(c.PostForm("user_role"))
|
||||
IsActive, _ := strconv.Atoi(c.PostForm("mem_activestat"))
|
||||
DataAccess, _ := strconv.Atoi(c.PostForm("mem_data_access"))
|
||||
imagedata := c.PostForm("crop_data")
|
||||
|
||||
// tenantDetails, err := NewTeam.GetTenantDetails(TenantId)
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("unable to get the tenant details: %s", err)
|
||||
// }
|
||||
|
||||
// if (tenantDetails.Id == 1) && (tenantDetails.S3FolderName == "") {
|
||||
// var s3FolderName = "SuperAdminFolder"
|
||||
// s3Path, err := storagecontroller.CreateFolderToS3(s3FolderName, "")
|
||||
// if err != nil {
|
||||
// fmt.Println("error creating a folder for super user in s3 bucket:", err)
|
||||
// ErrorLog.Printf("error creating a folder for super user in s3 bucket: %v", err)
|
||||
// return
|
||||
// }
|
||||
|
||||
// err = NewTeam.UpdateS3FolderName(0, tenantDetails.Id, s3Path)
|
||||
// if err != nil {
|
||||
// fmt.Println("error updating folder path for super admin in Database:", err)
|
||||
// ErrorLog.Printf("error updating folder path for super admin in Database: %v", err)
|
||||
// return
|
||||
// }
|
||||
|
||||
// tenantDetails.S3FolderName = s3Path
|
||||
|
||||
// }
|
||||
|
||||
userDetails, err := GetRequestScopedTenantDetails(c)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("%s", err)
|
||||
return
|
||||
}
|
||||
|
||||
var imageName, imagePath string
|
||||
|
||||
storagetype, err := GetSelectedType()
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
if storagetype.SelectedType == "local" {
|
||||
|
||||
if imagedata != "" {
|
||||
imageName, imagePath, _ = ConvertBase64(imagedata, "storage/user")
|
||||
}
|
||||
|
||||
} else if storagetype.SelectedType == "aws" {
|
||||
|
||||
if imagedata != "" {
|
||||
|
||||
var (
|
||||
imageByte []byte
|
||||
err error
|
||||
)
|
||||
|
||||
imageName, imagePath, imageByte, err = ConvertBase64toByte(imagedata, "user")
|
||||
if err != nil {
|
||||
ErrorLog.Printf("convert base 64 to byte error : %s", err)
|
||||
}
|
||||
|
||||
imagePath = userDetails.S3FolderName + imagePath
|
||||
|
||||
uerr := storagecontroller.UploadCropImageS3(imageName, imagePath, imageByte)
|
||||
if uerr != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/users/")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//pass values to the team struct
|
||||
Newuser := team.TeamCreate{
|
||||
FirstName: c.PostForm("user_fname"),
|
||||
LastName: c.PostForm("user_lname"),
|
||||
Email: c.PostForm("user_email"),
|
||||
MobileNo: c.PostForm("user_mob"),
|
||||
Username: c.PostForm("user_name"),
|
||||
Password: c.PostForm("user_pass"),
|
||||
ProfileImage: imageName,
|
||||
ProfileImagePath: imagePath,
|
||||
RoleId: Roleid,
|
||||
IsActive: IsActive,
|
||||
DataAccess: DataAccess,
|
||||
CreatedBy: userDetails.Id,
|
||||
StorageType: storagetype.SelectedType,
|
||||
TenantId: TenantId,
|
||||
S3FolderPath: userDetails.S3FolderName,
|
||||
DefaultLanguageId: userDetails.DefaultLanguageId,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("CreateUser authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
_, _, terr := NewTeam.CreateUser(Newuser)
|
||||
|
||||
if strings.Contains(fmt.Sprint(terr), "given some values is empty") {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/users/")
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Creating User error: %s", err)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/users/")
|
||||
return
|
||||
}
|
||||
|
||||
// var email models.TblEmailTemplate
|
||||
// err = models.GetTemplates(&email, "createuser", TenantId)
|
||||
// if err != nil {
|
||||
// ErrorLog.Printf("emailtemplate get error: %s", err)
|
||||
// }
|
||||
|
||||
if IsActive == 1 {
|
||||
fname := c.PostForm("user_fname")
|
||||
uname := c.PostForm("user_name")
|
||||
pas := c.PostForm("user_pass")
|
||||
email := c.PostForm("user_email")
|
||||
|
||||
var url_prefix = os.Getenv("BASE_URL")
|
||||
linkedin := os.Getenv("LINKEDIN")
|
||||
facebook := os.Getenv("FACEBOOK")
|
||||
twitter := os.Getenv("TWITTER")
|
||||
youtube := os.Getenv("YOUTUBE")
|
||||
insta := os.Getenv("INSTAGRAM")
|
||||
|
||||
data := map[string]interface{}{
|
||||
|
||||
"fname": fname,
|
||||
"uname": uname,
|
||||
"Pass": pas,
|
||||
"login_url": url_prefix,
|
||||
"admin_logo": url_prefix + "public/img/SpurtCMSlogo.png",
|
||||
"fb_logo": url_prefix + "public/img/email-icons/facebook.png",
|
||||
"linkedin_logo": url_prefix + "public/img/email-icons/linkedin.png",
|
||||
"twitter_logo": url_prefix + "public/img/email-icons/x.png",
|
||||
"youtube_logo": url_prefix + "public/img/email-icons/youtube.png",
|
||||
"insta_log": url_prefix + "public/img/email-icons/instagram.png",
|
||||
"facebook": facebook,
|
||||
"instagram": insta,
|
||||
"youtube": youtube,
|
||||
"linkedin": linkedin,
|
||||
"twitter": twitter,
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
go UserCreateMail(&wg, data, email, "createuser")
|
||||
|
||||
} else {
|
||||
WarnLog.Println("Create Team email notification status not enabled")
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "User Created Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/users/")
|
||||
}
|
||||
|
||||
// check email already exists
|
||||
func CheckEmail(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
userid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
email := c.PostForm("email")
|
||||
|
||||
_, _, err := NewTeam.CheckEmail(email, userid, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("check email error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
|
||||
}
|
||||
|
||||
// check number already exists
|
||||
func CheckNumber(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
userid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
number := c.PostForm("number")
|
||||
|
||||
_, err := NewTeam.CheckNumber(number, userid, TenantId)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("check number error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
|
||||
}
|
||||
|
||||
// check username already exists
|
||||
func CheckUsername(c *gin.Context) {
|
||||
|
||||
userid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
username := c.PostForm("username")
|
||||
fmt.Println("username", username)
|
||||
|
||||
_, err := NewTeam.CheckUsername(username, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("check Username error: %s", err)
|
||||
json.NewEncoder(c.Writer).Encode(false)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(true)
|
||||
|
||||
}
|
||||
|
||||
// get user details
|
||||
func EditUser(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
var id, _ = strconv.Atoi(c.Query("id"))
|
||||
userdet, _, _ := NewTeam.GetUserById(id, []int{})
|
||||
|
||||
var firstn = strings.ToUpper(userdet.FirstName[:1])
|
||||
|
||||
var lastn string
|
||||
if userdet.LastName != "" {
|
||||
lastn = strings.ToUpper(userdet.LastName[:1])
|
||||
}
|
||||
userdet.NameString = firstn + lastn
|
||||
|
||||
if userdet.ProfileImagePath != "" {
|
||||
if userdet.StorageType == "local" {
|
||||
userdet.ProfileImagePath = "/" + userdet.ProfileImagePath
|
||||
} else if userdet.StorageType == "aws" {
|
||||
userdet.ProfileImagePath = "/image-resize?name=" + userdet.ProfileImagePath
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(200, userdet)
|
||||
}
|
||||
|
||||
// Update User
|
||||
func UpdateUser(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
Roleid, _ := strconv.Atoi(c.PostForm("user_role"))
|
||||
IsActive, _ := strconv.Atoi(c.PostForm("mem_activestat"))
|
||||
DataAccess, _ := strconv.Atoi(c.PostForm("mem_data_access"))
|
||||
imagedata := c.PostForm("crop_data")
|
||||
pageno := c.PostForm("pageno")
|
||||
|
||||
var (
|
||||
url string
|
||||
imageName, imagePath string
|
||||
)
|
||||
|
||||
if pageno != "" {
|
||||
url = "/admin/settings/users?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/users/"
|
||||
|
||||
}
|
||||
|
||||
//check validation
|
||||
if c.PostForm("user_fname") == "" || c.PostForm("user_email") == "" || c.PostForm("user_mob") == "" || c.PostForm("user_name") == "" || c.PostForm("user_role") == "" {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/users/")
|
||||
return
|
||||
}
|
||||
|
||||
userid, _ := strconv.Atoi(c.PostForm("userid"))
|
||||
|
||||
fmt.Println("userId", userid)
|
||||
|
||||
storagetype, err := GetSelectedType()
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
if storagetype.SelectedType == "local" {
|
||||
|
||||
if imagedata != "" {
|
||||
imageName, imagePath, _ = ConvertBase64(imagedata, storagetype.Local+"/user")
|
||||
}
|
||||
|
||||
} else if storagetype.SelectedType == "aws" {
|
||||
|
||||
userDetails, _, err := NewTeam.GetUserById(userid, []int{})
|
||||
if err != nil {
|
||||
ErrorLog.Printf("error get storage type error: %s", err)
|
||||
}
|
||||
|
||||
fmt.Println("userDetails", userDetails)
|
||||
|
||||
if imagedata != "" {
|
||||
|
||||
var (
|
||||
imageByte []byte
|
||||
err error
|
||||
)
|
||||
|
||||
imageName, imagePath, imageByte, err = ConvertBase64toByte(imagedata, "user")
|
||||
if err != nil {
|
||||
ErrorLog.Printf("convert base 64 to byte error : %s", err)
|
||||
}
|
||||
|
||||
imagePath = userDetails.S3FolderName + imagePath
|
||||
|
||||
uerr := storagecontroller.UploadCropImageS3(imageName, imagePath, imageByte)
|
||||
if uerr != nil {
|
||||
c.SetCookie("Alert-msg", "ERRORAWScredentialsnotfound", 3600, "", "", false, false)
|
||||
c.Redirect(301, "/admin/settings/users/")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//pass values to struct
|
||||
Newuser := team.TeamCreate{
|
||||
FirstName: c.PostForm("user_fname"),
|
||||
LastName: c.PostForm("user_lname"),
|
||||
Email: c.PostForm("user_email"),
|
||||
MobileNo: c.PostForm("user_mob"),
|
||||
Username: c.PostForm("user_name"),
|
||||
Password: c.PostForm("user_pass"),
|
||||
ProfileImage: imageName,
|
||||
ProfileImagePath: imagePath,
|
||||
RoleId: Roleid,
|
||||
IsActive: IsActive,
|
||||
DataAccess: DataAccess,
|
||||
StorageType: storagetype.SelectedType,
|
||||
}
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("UpdateUser authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
NewTeam.Dataaccess = c.GetInt("dataaccess")
|
||||
NewTeam.Userid = c.GetInt("userid")
|
||||
|
||||
_, terr := NewTeam.UpdateUser(Newuser, userid, TenantId)
|
||||
|
||||
if strings.Contains(fmt.Sprint(terr), "given some values is empty") {
|
||||
c.SetCookie("Alert-msg", "Pleaseenterthemandatoryfields", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Update User error: %s", err)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "alert", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
return
|
||||
}
|
||||
c.SetCookie("get-toast", "User Updated Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(301, url)
|
||||
|
||||
}
|
||||
|
||||
// DeleteUser
|
||||
func DeleteUser(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
deluserId, _ := strconv.Atoi(c.Param("id"))
|
||||
pageno := c.Query("page")
|
||||
|
||||
var url string
|
||||
|
||||
if pageno != "" {
|
||||
url = "/admin/settings/users?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/users/"
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("DeleteUser authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
err := NewTeam.DeleteUser([]int{}, deluserId, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("DeleteUser error: %s", perr)
|
||||
c.SetCookie("Alert-msg", ErrInternalServerError, 3600, "", "", false, false)
|
||||
return
|
||||
}
|
||||
|
||||
_, count, err := NewTeam.ListUser(0, 0, team.Filters{Keyword: ""}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Getting userlist data error : %s", err)
|
||||
}
|
||||
|
||||
recordsPerPage := Limit
|
||||
totalPages := (int(count) + recordsPerPage - 1) / recordsPerPage
|
||||
|
||||
currentPage := 1
|
||||
if pageno != "" {
|
||||
currentPage, _ = strconv.Atoi(pageno)
|
||||
}
|
||||
|
||||
if currentPage > totalPages && totalPages > 0 {
|
||||
url = "/admin/settings/users?page=" + strconv.Itoa(totalPages)
|
||||
}
|
||||
|
||||
c.SetCookie("get-toast", "User Deleted Successfully", 3600, "", "", false, false)
|
||||
c.SetCookie("Alert-msg", "success", 3600, "", "", false, false)
|
||||
c.Redirect(http.StatusMovedPermanently, url)
|
||||
}
|
||||
|
||||
// delete multiple user
|
||||
func DeleteMultipleUser(c *gin.Context) {
|
||||
|
||||
var userData []map[string]string
|
||||
err := json.Unmarshal([]byte(c.Request.PostFormValue("userIds")), &userData)
|
||||
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Unmarshal error in deletemultipleuser error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
pageNo := c.Request.PostFormValue("page")
|
||||
var url string
|
||||
if pageNo != "" {
|
||||
url = "/admin/settings/users?page=" + pageNo
|
||||
} else {
|
||||
url = "/admin/settings/users/"
|
||||
}
|
||||
|
||||
var userIds []int
|
||||
for _, val := range userData {
|
||||
userId, _ := strconv.Atoi(val["entryid"])
|
||||
userIds = append(userIds, userId)
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("DeleteMultipleUser authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
err = NewTeam.DeleteUser(userIds, 0, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("DeleteMultipleUser error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
_, count, err := NewTeam.ListUser(0, 0, team.Filters{Keyword: ""}, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("Getting userlist data error : %s", err)
|
||||
}
|
||||
|
||||
|
||||
recordsPerPage := Limit
|
||||
totalPages := (int(count) + recordsPerPage - 1) / recordsPerPage
|
||||
|
||||
currentPage := 1
|
||||
if pageNo != "" {
|
||||
currentPage, _ = strconv.Atoi(pageNo)
|
||||
}
|
||||
|
||||
if currentPage > totalPages && totalPages > 0 {
|
||||
url = "/admin/settings/users?page=" + strconv.Itoa(totalPages)
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true, "url": url})
|
||||
|
||||
}
|
||||
|
||||
/* Check overall validation in single function */
|
||||
func CheckUserData(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
userid, _ := strconv.Atoi(c.PostForm("id"))
|
||||
username := c.PostForm("username")
|
||||
email := c.PostForm("email")
|
||||
number := c.PostForm("mobile")
|
||||
|
||||
fmt.Println("reapt", userid, username, email, number)
|
||||
|
||||
_, err1 := NewTeam.CheckUsername(username, userid, TenantId)
|
||||
_, _, err2 := NewTeam.CheckEmail(email, userid, TenantId)
|
||||
_, err3 := NewTeam.CheckNumber(number, userid, TenantId)
|
||||
|
||||
var Number, User, Email bool
|
||||
|
||||
if err1 != nil {
|
||||
ErrorLog.Printf("DeleteMultipleUser error: %s", err1)
|
||||
User = false
|
||||
} else {
|
||||
User = true
|
||||
}
|
||||
|
||||
if err2 != nil {
|
||||
ErrorLog.Printf("DeleteMultipleUser error: %s", err2)
|
||||
Email = false
|
||||
} else {
|
||||
Email = true
|
||||
}
|
||||
|
||||
if err3 != nil {
|
||||
Number = false
|
||||
} else {
|
||||
Number = true
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"user": User, "number": Number, "email": Email})
|
||||
}
|
||||
|
||||
// Multi Select Change Access
|
||||
func SelectedUsersAccessChange(c *gin.Context) {
|
||||
|
||||
var (
|
||||
entryIds []int
|
||||
statusInt int
|
||||
status string
|
||||
entryData []map[string]string
|
||||
url string
|
||||
)
|
||||
|
||||
err := json.Unmarshal([]byte(c.Request.PostFormValue("userIds")), &entryData)
|
||||
if err != nil {
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
ErrorLog.Printf("Unmarshall error multiple access change error : %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, val := range entryData {
|
||||
entryId, _ := strconv.Atoi(val["entryid"])
|
||||
status = val["status"]
|
||||
|
||||
if status == "All User" {
|
||||
statusInt = 1
|
||||
} else if status == "User's Only" {
|
||||
statusInt = 0
|
||||
}
|
||||
|
||||
entryIds = append(entryIds, entryId)
|
||||
|
||||
}
|
||||
|
||||
pageno := c.PostForm("page")
|
||||
if pageno != "" {
|
||||
url = "/admin/settings/users/?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/users/"
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("multiple access change authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
err = NewTeam.ChangeAccess(entryIds, userid, statusInt, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("while changing the access in multiple user error: %s", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"value": true, "status": statusInt, "url": url})
|
||||
|
||||
}
|
||||
|
||||
func ChangeActiveStatus(c *gin.Context) {
|
||||
|
||||
//get values from html form data
|
||||
id, _ := strconv.Atoi(c.Request.PostFormValue("id"))
|
||||
activeStatus, _ := strconv.Atoi(c.Request.PostFormValue("isActive"))
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("DeleteUser authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
flg, err := NewTeam.ChangeActiveStatus(id, activeStatus, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("change active status in single user error : %s ", err)
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
}
|
||||
|
||||
json.NewEncoder(c.Writer).Encode(flg)
|
||||
|
||||
}
|
||||
|
||||
func SelectedUsersStatusChange(c *gin.Context) {
|
||||
|
||||
var (
|
||||
userdIds []int
|
||||
activeStatusInt int
|
||||
activeStatus int
|
||||
userData []map[string]string
|
||||
)
|
||||
|
||||
if err := json.Unmarshal([]byte(c.Request.PostFormValue("userIds")), &userData); err != nil {
|
||||
ErrorLog.Printf("unmarshall userid multiple status change error: %s", err)
|
||||
}
|
||||
|
||||
for _, val := range userData {
|
||||
|
||||
userId, _ := strconv.Atoi(val["entryid"])
|
||||
activeStatusInt, _ = strconv.Atoi(val["activeStatus"])
|
||||
|
||||
if activeStatusInt == 0 {
|
||||
activeStatus = 1
|
||||
} else if activeStatusInt == 1 {
|
||||
activeStatus = 0
|
||||
}
|
||||
|
||||
userdIds = append(userdIds, userId)
|
||||
}
|
||||
|
||||
pageno := c.PostForm("page")
|
||||
var url string
|
||||
|
||||
if pageno != "" {
|
||||
url = "/admin/settings/users/?page=" + pageno
|
||||
} else {
|
||||
url = "/admin/settings/users/"
|
||||
}
|
||||
|
||||
userid := c.GetInt("userid")
|
||||
|
||||
permisison, perr := NewAuth.IsGranted("Team", auth.CRUD, TenantId)
|
||||
if perr != nil {
|
||||
ErrorLog.Printf("multiple statuc change authorization error: %s", perr)
|
||||
}
|
||||
|
||||
if !permisison {
|
||||
c.Redirect(301, "/403-page")
|
||||
return
|
||||
}
|
||||
|
||||
err := NewTeam.SelectedUserStatusChange(userdIds, activeStatus, userid, TenantId)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("change active status in multiple user error : %s ", err)
|
||||
c.JSON(200, gin.H{"value": false})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"value": true, "status": activeStatus, "url": url})
|
||||
|
||||
}
|
||||
@@ -1,513 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"os"
|
||||
"spurt-cms/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"github.com/gin-gonic/gin"
|
||||
chn "github.com/spurtcms/channels"
|
||||
"github.com/spurtcms/courses"
|
||||
"github.com/spurtcms/menu"
|
||||
"golang.org/x/net/html"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrorOtpExpiry = errors.New("otp expired")
|
||||
|
||||
ErrorInvalidOTP = errors.New("invalid OTP")
|
||||
)
|
||||
|
||||
type UserInfo struct {
|
||||
Email string `json:"email"`
|
||||
Name string `json:"name"`
|
||||
GivenName string `json:"given_name"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name"`
|
||||
}
|
||||
type WebAuth struct {
|
||||
UserId int
|
||||
ExpiryTime int
|
||||
ExpiryFlg bool
|
||||
SecretKey string
|
||||
DB *gorm.DB
|
||||
AuthFlg bool
|
||||
PermissionFlg bool
|
||||
RoleId int
|
||||
RoleName string
|
||||
DataAccess int
|
||||
}
|
||||
|
||||
func NewWebsitePage(c *gin.Context) {
|
||||
|
||||
TENANTID := os.Getenv("TENANTID")
|
||||
|
||||
WebsiteLoad(c, TENANTID, "")
|
||||
|
||||
}
|
||||
|
||||
func WebsiteLoad(c *gin.Context, Tenantid, subdomain string) {
|
||||
|
||||
// tag := c.Query("tag")
|
||||
|
||||
var website menu.TblWebsite
|
||||
|
||||
if Tenantid == "1" {
|
||||
|
||||
website, _ = MenuConfig.GetWebsiteById(1, "1")
|
||||
} else {
|
||||
|
||||
website, _ = MenuConfig.GetWebsiteByName(subdomain)
|
||||
}
|
||||
if website.Id == 0 {
|
||||
|
||||
c.HTML(404, "nodata.html", nil)
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
User, _, _ := NewTeamWP.GetUserById(website.CreatedBy, []int{})
|
||||
|
||||
templatedet, _ := MenuConfig.GetTemplateById(website.TemplateId, website.TenantId)
|
||||
|
||||
menulist, _, _ := MenuConfig.MenuList(100, 0, menu.Filter{}, User.TenantId, website.Id)
|
||||
|
||||
var newmenulist []menu.TblMenus
|
||||
var parentid int
|
||||
var menuitemslist []menu.TblMenus
|
||||
|
||||
for _, val := range menulist {
|
||||
|
||||
if val.Status == 1 {
|
||||
|
||||
parentid = val.Id
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
menuitemslist, err := MenuConfig.GetMenusByParentid(parentid, User.TenantId)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
for _, val := range menuitemslist {
|
||||
if val.ParentId != 0 {
|
||||
newmenulist = append(newmenulist, val)
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
limt, offset, Count int
|
||||
)
|
||||
|
||||
pageno, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
Location := strings.TrimSpace(c.Query("Location"))
|
||||
Title := strings.TrimSpace(c.Query("Title"))
|
||||
template_name := strings.ToLower(templatedet.TemplateName)
|
||||
template_name = strings.ReplaceAll(template_name, " ", "_")
|
||||
|
||||
switch template_name {
|
||||
|
||||
case "content_chronicle":
|
||||
limt = 12
|
||||
case "content_Verse":
|
||||
limt = 15
|
||||
case "support_sphere":
|
||||
limt = 0
|
||||
default:
|
||||
limt = Limit
|
||||
}
|
||||
|
||||
if pageno != 0 {
|
||||
offset = (pageno - 1) * limt
|
||||
}
|
||||
|
||||
var chnentry []chn.Tblchannelentries
|
||||
|
||||
c.Set("menulist", newmenulist)
|
||||
|
||||
if template_name == "jobs" {
|
||||
|
||||
entries, _, count, _ := ChannelConfigWP.FlexibleChannelEntriesList(
|
||||
chn.EntriesInputs{
|
||||
Status: "Published",
|
||||
ChannelName: "Jobs",
|
||||
Limit: limt,
|
||||
Offset: offset,
|
||||
GetAdditionalFields: true,
|
||||
|
||||
Title: Title,
|
||||
Location: Location,
|
||||
TenantId: User.TenantId,
|
||||
},
|
||||
)
|
||||
Count = count
|
||||
|
||||
for i := range entries {
|
||||
entries[i].CreatedDate = entries[i].CreatedOn.In(TZONE).Format("Jan 2 2006")
|
||||
if entries[i].ProfileImagePath != "" {
|
||||
entries[i].ProfileImagePath = "/image-resize?name=" + entries[i].ProfileImagePath
|
||||
}
|
||||
entries[i].Description = StripHTML(entries[i].Description)
|
||||
|
||||
categoryid, _ := strconv.Atoi(entries[i].CategoriesId)
|
||||
categorydetails, _ := CategoryConfig.GetSubCategoryDetails(categoryid, User.TenantId)
|
||||
entries[i].CategoryGroup = categorydetails.CategoryName
|
||||
channelinfo, _, _ := ChannelConfigWP.GetChannelsById(entries[i].ChannelId, Tenantid)
|
||||
|
||||
entries[i].ChannelName = channelinfo.ChannelName
|
||||
|
||||
}
|
||||
chnentry = entries
|
||||
} else if template_name != "support_sphere" {
|
||||
|
||||
for _, val := range newmenulist {
|
||||
if val.TypeId != 0 {
|
||||
var entries []chn.Tblchannelentries
|
||||
var count int
|
||||
|
||||
entries, _, count, _ = ChannelConfigWP.ChannelEntriesList(
|
||||
chn.Entries{
|
||||
ChannelId: val.TypeId,
|
||||
Status: "Published",
|
||||
Limit: limt - len(chnentry),
|
||||
Offset: offset,
|
||||
},
|
||||
User.TenantId,
|
||||
)
|
||||
Count = count
|
||||
for i := range entries {
|
||||
entries[i].CreatedDate = entries[i].CreatedOn.In(TZONE).Format("Jan 2 2006")
|
||||
if entries[i].ProfileImagePath != "" {
|
||||
entries[i].ProfileImagePath = "/image-resize?name=" + entries[i].ProfileImagePath
|
||||
}
|
||||
entries[i].Description = StripHTML(entries[i].Description)
|
||||
|
||||
categoryid, _ := strconv.Atoi(entries[i].CategoriesId)
|
||||
categorydetails, _ := CategoryConfig.GetSubCategoryDetails(categoryid, User.TenantId)
|
||||
entries[i].CategoryGroup = categorydetails.CategoryName
|
||||
}
|
||||
|
||||
chnentry = append(chnentry, entries...)
|
||||
|
||||
if len(chnentry) >= limt {
|
||||
chnentry = chnentry[:limt]
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for i := range newmenulist {
|
||||
val := &newmenulist[i]
|
||||
if val.TypeId != 0 {
|
||||
entries, _, _, _ := ChannelConfigWP.ChannelEntriesList(
|
||||
chn.Entries{
|
||||
ChannelId: val.TypeId,
|
||||
Status: "Published",
|
||||
},
|
||||
User.TenantId,
|
||||
)
|
||||
|
||||
val.Count = len(entries)
|
||||
|
||||
if len(entries) > 3 {
|
||||
entries = entries[:3]
|
||||
}
|
||||
chnentry = append(chnentry, entries...)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
batchSize := 4
|
||||
var batches [][]chn.Tblchannelentries
|
||||
for i := 0; i < len(chnentry); i += batchSize {
|
||||
end := i + batchSize
|
||||
if end > len(chnentry) {
|
||||
end = len(chnentry)
|
||||
}
|
||||
batch := chnentry[i:end]
|
||||
batches = append(batches, batch)
|
||||
}
|
||||
|
||||
var login bool
|
||||
session, _ := Store.Get(c.Request, os.Getenv("SESSION_KEY"))
|
||||
tkn, ok := session.Values["token"].(string)
|
||||
if !ok || tkn == "" {
|
||||
login = true
|
||||
|
||||
}
|
||||
|
||||
seodetail, err := MenuConfig.SeoDetail(User.TenantId, website.Id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
settingsdetail, err := MenuConfig.SettingsDetail(User.TenantId, website.Id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
var paginationendcount = len(chnentry) + offset
|
||||
paginationstartcount := offset + 1
|
||||
Previous, Next, PageCount, Page := Pagination(pageno, int(Count), limt)
|
||||
UserDetailsFunction(c)
|
||||
|
||||
memberdet, _ := c.Get("userdetails")
|
||||
// Parse templates
|
||||
tmpl, err := template.ParseFiles("websites/themes/"+template_name+"/layouts/partials/header.html", "websites/themes/"+template_name+"/layouts/partials/footer.html", "websites/themes/"+template_name+"/layouts/partials/head.html", "websites/themes/"+template_name+"/layouts/_default/content_list.html")
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err, "templateerr")
|
||||
}
|
||||
|
||||
data := gin.H{"Pagination": PaginationData{
|
||||
NextPage: pageno + 1,
|
||||
PreviousPage: pageno - 1,
|
||||
TotalPages: PageCount,
|
||||
TwoAfter: pageno + 2,
|
||||
TwoBelow: pageno - 2,
|
||||
ThreeAfter: pageno + 3}, "memberdet": memberdet, "menulist": newmenulist, "searchlist": chnentry, "login": login, "template_name": c.Query("template_name"), "seodetail": seodetail, "settingsdetail": settingsdetail, "Count": Count, "Previous": Previous, "Next": Next, "PageCount": PageCount, "CurrentPage": pageno, "Page": Page, "Limit": limt, "Paginationendcount": paginationendcount, "Paginationstartcount": paginationstartcount, "Home": "Home"}
|
||||
|
||||
CourseList, err := TemplateCourseList(limt, offset, User.TenantId)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
switch template_name {
|
||||
case "content_chronicle":
|
||||
data["Entries"] = batches
|
||||
case "support_sphere":
|
||||
data["Entries"] = chnentry
|
||||
case "courses":
|
||||
|
||||
for _, val := range newmenulist {
|
||||
|
||||
if val.SlugName == "all-courses" {
|
||||
|
||||
data["course"] = CourseList
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
case "ai_templates":
|
||||
|
||||
// var ids []string
|
||||
|
||||
// for _, val := range newmenulist {
|
||||
|
||||
// ids = append(ids, val.ListingsIds)
|
||||
// }
|
||||
|
||||
// allIds := strings.Join(ids, ",")
|
||||
|
||||
// listingIds := strings.Split(allIds, ",")
|
||||
|
||||
// listings, _ := ListingConfig.GetListingsByIds(listingIds, tag, User.TenantId)
|
||||
|
||||
// data["listingslist"] = listings
|
||||
|
||||
var homeurl string
|
||||
|
||||
for index, val := range newmenulist {
|
||||
|
||||
if index == 0 {
|
||||
homeurl = val.UrlPath
|
||||
}
|
||||
}
|
||||
data["homeurl"] = homeurl
|
||||
|
||||
default:
|
||||
data["entries"] = chnentry
|
||||
}
|
||||
|
||||
RenderTemplate(c, tmpl, "content_list.html", data)
|
||||
}
|
||||
func TemplateCourseList(limit int, offset int, tenantid string) ([]courses.TblCourses, error) {
|
||||
var CourseList []courses.TblCourses
|
||||
|
||||
var filteredCoursesList []courses.TblCourses
|
||||
|
||||
courseslist, _, err := CoursesConfig.CoursesList(limit, offset, courses.Filter{}, tenantid)
|
||||
|
||||
for _, val := range courseslist {
|
||||
|
||||
if val.Status == 1 {
|
||||
|
||||
filteredCoursesList = append(filteredCoursesList, val)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return []courses.TblCourses{}, err
|
||||
}
|
||||
|
||||
for _, value := range filteredCoursesList {
|
||||
|
||||
if value.ImagePath != "" {
|
||||
|
||||
value.ImagePath = "/image-resize?name=" + value.ImagePath
|
||||
|
||||
}
|
||||
|
||||
if value.ProfileImagePath != "" {
|
||||
|
||||
value.ProfileImagePath = "/image-resize?name=" + value.ProfileImagePath
|
||||
|
||||
}
|
||||
|
||||
var first = value.FirstName
|
||||
var last = value.LastName
|
||||
var firstn string
|
||||
var lastn string
|
||||
|
||||
if value.FirstName != "" {
|
||||
firstn = strings.ToUpper(first[:1])
|
||||
}
|
||||
if value.LastName != "" {
|
||||
lastn = strings.ToUpper(last[:1])
|
||||
}
|
||||
|
||||
value.NameString = firstn + lastn
|
||||
|
||||
if !value.ModifiedOn.IsZero() {
|
||||
value.DateString = value.ModifiedOn.In(TZONE).Format(Datelayout)
|
||||
} else {
|
||||
value.DateString = value.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
}
|
||||
|
||||
value.CreatedTime = value.CreatedOn.In(TZONE).Format(Datelayout)
|
||||
|
||||
CourseList = append(CourseList, value)
|
||||
}
|
||||
|
||||
return CourseList, nil
|
||||
}
|
||||
|
||||
func GetTemplateName(c *gin.Context) string {
|
||||
templateName := c.Query("template_name")
|
||||
var baseName string
|
||||
if subdomain := strings.Split(c.Request.Host, ".")[0]; subdomain != "" &&
|
||||
subdomain != "lvh" && subdomain != "localhost:8000" && subdomain != "spurtcms" {
|
||||
User, err := models.GetuserBySubdomain(subdomain)
|
||||
if err == nil {
|
||||
templatedetails, err := MenuConfig.GetTemplateById(User.GoTemplateDefault, User.TenantId)
|
||||
if err == nil && templateName == "" {
|
||||
baseName = templatedetails.TemplateName
|
||||
}
|
||||
}
|
||||
}
|
||||
if templateName != "" {
|
||||
baseName = templateName
|
||||
}
|
||||
baseName = strings.ToLower(baseName)
|
||||
baseName = strings.ReplaceAll(baseName, " ", "_")
|
||||
|
||||
return baseName
|
||||
}
|
||||
func RenderTemplate(c *gin.Context, tmpl *template.Template, templateName string, data interface{}) {
|
||||
|
||||
err := tmpl.ExecuteTemplate(c.Writer, templateName, data)
|
||||
|
||||
if err != nil {
|
||||
|
||||
c.String(http.StatusInternalServerError, err.Error())
|
||||
}
|
||||
}
|
||||
func StripHTML(input string) string {
|
||||
doc, err := html.Parse(strings.NewReader(input))
|
||||
if err != nil {
|
||||
return input
|
||||
}
|
||||
var buf bytes.Buffer
|
||||
var f func(*html.Node)
|
||||
f = func(n *html.Node) {
|
||||
if n.Type == html.TextNode {
|
||||
buf.WriteString(n.Data)
|
||||
}
|
||||
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
||||
f(c)
|
||||
}
|
||||
}
|
||||
f(doc)
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func LogoutTime(userid int) {
|
||||
|
||||
userdata, _, _ := NewTeam.GetUserById(userid, []int{})
|
||||
|
||||
if !userdata.LastLogin.IsZero() {
|
||||
Lastactive := userdata.LastLogin.In(TZONE).Format(Datelayout)
|
||||
Lastlogin[userdata.Id] = Lastactive
|
||||
} else {
|
||||
Lastlogin[userdata.Id] = "--"
|
||||
}
|
||||
}
|
||||
|
||||
func UserDetailsFunction(c *gin.Context) {
|
||||
|
||||
session, _ := Store.Get(c.Request, "spurttemplate")
|
||||
|
||||
tkn := session.Values["token"]
|
||||
|
||||
if tkn != nil {
|
||||
token := tkn.(string)
|
||||
|
||||
secret := os.Getenv("JWT_SECRET")
|
||||
|
||||
Claims := jwt.MapClaims{}
|
||||
|
||||
_, err := jwt.ParseWithClaims(token, Claims, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(secret), nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
if err == jwt.ErrSignatureInvalid {
|
||||
fmt.Println(err)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
userIDFloat, ok := Claims["member_id"].(float64)
|
||||
if !ok {
|
||||
fmt.Println(ok, "err")
|
||||
|
||||
}
|
||||
|
||||
userid := int(userIDFloat)
|
||||
tenantid, ok := Claims["tenant_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println(ok, "err")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("userid: %d, tenantid: %d\n", userid)
|
||||
|
||||
member, _ := MemberConfig.GetMemberAndProfileData(userid, "", 0, "", tenantid)
|
||||
|
||||
var firstn = strings.ToUpper(member.FirstName[:1])
|
||||
|
||||
var lastn string
|
||||
if member.LastName != "" {
|
||||
lastn = strings.ToUpper(member.LastName[:1])
|
||||
}
|
||||
member.NameString = firstn + lastn
|
||||
|
||||
member.NameString = firstn + lastn
|
||||
|
||||
if err == nil && member.Id != 0 {
|
||||
c.Set("userdetails", member)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
module spurt-cms
|
||||
|
||||
go 1.24.2
|
||||
|
||||
require (
|
||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1
|
||||
github.com/99designs/gqlgen v0.17.66
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2
|
||||
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2
|
||||
github.com/aws/aws-sdk-go v1.55.5
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||
github.com/gin-contrib/sessions v1.0.1
|
||||
github.com/gin-gonic/gin v1.10.0
|
||||
github.com/gorilla/sessions v1.2.2
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
|
||||
github.com/spurtcms/auth v0.0.44
|
||||
github.com/spurtcms/categories v0.0.27
|
||||
github.com/spurtcms/channels v0.0.107
|
||||
github.com/spurtcms/forms-builders v0.0.27
|
||||
github.com/spurtcms/member v0.0.26
|
||||
github.com/spurtcms/member-access v0.0.10
|
||||
github.com/spurtcms/team v0.0.40
|
||||
github.com/spurtcms/team-roles v0.0.23
|
||||
github.com/utrack/gin-csrf v0.0.0-20190424104817-40fb8d2c8fca
|
||||
github.com/vektah/gqlparser/v2 v2.5.22
|
||||
golang.org/x/crypto v0.33.0
|
||||
golang.org/x/net v0.35.0
|
||||
golang.org/x/oauth2 v0.22.0
|
||||
gorm.io/datatypes v1.2.0
|
||||
gorm.io/driver/mysql v1.5.6
|
||||
gorm.io/driver/postgres v1.5.9
|
||||
gorm.io/gorm v1.30.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/spurtcms/courses v0.0.31
|
||||
github.com/spurtcms/listing v0.0.8
|
||||
github.com/spurtcms/membership v0.0.26
|
||||
github.com/spurtcms/menu v0.0.32
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
)
|
||||
|
||||
require github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
|
||||
|
||||
require (
|
||||
cloud.google.com/go/compute/metadata v0.3.0 // indirect
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect
|
||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
|
||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
|
||||
github.com/agnivade/levenshtein v1.2.1 // indirect
|
||||
github.com/bytedance/sonic v1.11.6 // indirect
|
||||
github.com/bytedance/sonic/loader v0.1.1 // indirect
|
||||
github.com/cloudwego/base64x v0.1.4 // indirect
|
||||
github.com/cloudwego/iasm v0.2.0 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
|
||||
github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||
github.com/go-playground/locales v0.14.1 // indirect
|
||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||
github.com/go-playground/validator/v10 v10.20.0 // indirect
|
||||
github.com/go-sql-driver/mysql v1.7.1 // indirect
|
||||
github.com/goccy/go-json v0.10.2 // indirect
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/gorilla/context v1.1.2 // indirect
|
||||
github.com/gorilla/securecookie v1.1.2 // indirect
|
||||
github.com/gorilla/websocket v1.5.0 // indirect
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
||||
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect
|
||||
github.com/jackc/pgx/v5 v5.5.5 // indirect
|
||||
github.com/jackc/puddle/v2 v2.2.1 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
|
||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||
github.com/leodido/go-urn v1.4.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/sosodev/duration v1.3.1 // indirect
|
||||
github.com/spurtcms/blocks v0.0.59
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||
github.com/urfave/cli/v2 v2.27.5 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
||||
golang.org/x/arch v0.8.0 // indirect
|
||||
golang.org/x/mod v0.23.0 // indirect
|
||||
golang.org/x/sync v0.11.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
golang.org/x/text v0.22.0 // indirect
|
||||
golang.org/x/tools v0.30.0 // indirect
|
||||
google.golang.org/protobuf v1.36.5 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
@@ -1,292 +0,0 @@
|
||||
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
|
||||
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
|
||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks=
|
||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE=
|
||||
github.com/99designs/gqlgen v0.17.66 h1:2/SRc+h3115fCOZeTtsqrB5R5gTGm+8qCAwcrZa+CXA=
|
||||
github.com/99designs/gqlgen v0.17.66/go.mod h1:gucrb5jK5pgCKzAGuOMMVU9C8PnReecHEHd2UxLQwCg=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2 h1:FDif4R1+UUR+00q6wquyX90K7A8dN+R5E8GEadoP7sU=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2/go.mod h1:aiYBYui4BJ/BJCAIKs92XiPyQfTaBWqvHujDwKb6CBU=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0 h1:AifHbc4mg0x9zW52WOpKbsHaDKuRhlI7TVl47thgQ70=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0/go.mod h1:T5RfihdXtBDxt1Ch2wobif3TvzTdumDy29kahv6AV9A=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 h1:YUUxeiOWgdAQE3pXt2H7QXzZs0q8UBjgRbl56qo8GYM=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2/go.mod h1:dmXQgZuiSubAecswZE+Sm8jkvEa7kQgTPVRvwL/nd0E=
|
||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU=
|
||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
|
||||
github.com/PuerkitoBio/goquery v1.9.3 h1:mpJr/ikUA9/GNJB/DBZcGeFDXUtosHRyRrwh7KGdTG0=
|
||||
github.com/PuerkitoBio/goquery v1.9.3/go.mod h1:1ndLHPdTz+DyQPICCWYlYQMPl0oXZj0G6D4LCYA6u4U=
|
||||
github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM=
|
||||
github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||
github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
|
||||
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
|
||||
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
|
||||
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
|
||||
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw=
|
||||
github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
|
||||
github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI=
|
||||
github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
|
||||
github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
|
||||
github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
|
||||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
|
||||
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
||||
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
|
||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9 h1:74lLNRzvsdIlkTgfDSMuaPjBr4cf6k7pwQQANm/yLKU=
|
||||
github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54 h1:SG7nF6SRlWhcT7cNTs5R6Hk4V2lcmLz2NsG2VnInyNo=
|
||||
github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
|
||||
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
|
||||
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
|
||||
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
|
||||
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
|
||||
github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
||||
github.com/gin-contrib/sessions v0.0.0-20190101140330-dc5246754963/go.mod h1:4lkInX8nHSR62NSmhXM3xtPeMSyfiR58NaEz+om1lHM=
|
||||
github.com/gin-contrib/sessions v1.0.1 h1:3hsJyNs7v7N8OtelFmYXFrulAf6zSR7nW/putcPEHxI=
|
||||
github.com/gin-contrib/sessions v1.0.1/go.mod h1:ouxSFM24/OgIud5MJYQJLpy6AwxQ5EYO9yLhbtObGkM=
|
||||
github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
|
||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||
github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y=
|
||||
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
|
||||
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
|
||||
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
|
||||
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
|
||||
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||
github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
|
||||
github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
|
||||
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
|
||||
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
|
||||
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
||||
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||
github.com/gorilla/context v1.1.2 h1:WRkNAv2uoa03QNIc1A6u4O7DAGMUVoopZhkiXWA2V1o=
|
||||
github.com/gorilla/context v1.1.2/go.mod h1:KDPwT9i/MeWHiLl90fuTgrt4/wPcv75vFAZLaOOcbxM=
|
||||
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
||||
github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
|
||||
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
|
||||
github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
|
||||
github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
|
||||
github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY=
|
||||
github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ=
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
|
||||
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
|
||||
github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
|
||||
github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
|
||||
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
|
||||
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
|
||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nVr8KZVXJSS97Jo8pJ0jgq29P6H7dG0oplUA86MQw=
|
||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
||||
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
||||
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
|
||||
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
|
||||
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
github.com/memcachier/mc v2.0.1+incompatible/go.mod h1:7bkvFE61leUBvXz+yxsOnGBQSZpBSPIMUQSmmSHvuXc=
|
||||
github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLgZiaenE=
|
||||
github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
|
||||
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
|
||||
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
|
||||
github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4=
|
||||
github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg=
|
||||
github.com/spurtcms/auth v0.0.44 h1:VRfWdorAPLgaQl2hend6oDpquO5Aiuv+HdQXd5VMaU4=
|
||||
github.com/spurtcms/auth v0.0.44/go.mod h1:QDSbAUWyrGmCjvd2UHMPomBAk3TeUmjjZW5wnrInGSU=
|
||||
github.com/spurtcms/blocks v0.0.59 h1:UFqbQr5GAvduEtTjFEzgNsqLttgfJ/CkbBbu4JfZFIc=
|
||||
github.com/spurtcms/blocks v0.0.59/go.mod h1:VcEP1lN4eXyBb/hNwnyFwhPcujTdZupbSgNG7j+vJeI=
|
||||
github.com/spurtcms/categories v0.0.27 h1:3fL5bC/RsAgTT6u14bspXy4ovWZkLJqrY2WIVubWA0Q=
|
||||
github.com/spurtcms/categories v0.0.27/go.mod h1:5YjyFKoY9vaGxtCCkvcZuA7jFcWnn1dadZ+e4C8OTSs=
|
||||
github.com/spurtcms/channels v0.0.107 h1:Fnc3WLnrUgeph9bFD5I/0Hwlp+aUk7906W0zMItmsdg=
|
||||
github.com/spurtcms/channels v0.0.107/go.mod h1:ppuno0wAKoL1F3V+/K1uykkXoL2I1+Ggjpc4gwuANZg=
|
||||
github.com/spurtcms/courses v0.0.31 h1:SrruXJ4AgGEYQ8bkywO6I8XF06qUWQIMxpidkN/Gaj4=
|
||||
github.com/spurtcms/courses v0.0.31/go.mod h1:gv/OktzG/VRy6fF4ja6wZmXKLV2fUI73CNKIlwaKnLI=
|
||||
github.com/spurtcms/forms-builders v0.0.27 h1:FNAGn4V3RS2+phDeCoe5brDtZwoUgXTdLoIBHJ/LbQo=
|
||||
github.com/spurtcms/forms-builders v0.0.27/go.mod h1:MD7DOEu99VApmq2/Gl2DOSXaIMO22sLWh+OAW5JpWm0=
|
||||
github.com/spurtcms/listing v0.0.8 h1:Vg80tRVlRbFFgDfMj2k5Y00cGGE4PlwtHANeAd93BZM=
|
||||
github.com/spurtcms/listing v0.0.8/go.mod h1:eJPJsnNPSGz6tCoon7yKfAhNKDTctr9rutM17Me4u0E=
|
||||
github.com/spurtcms/member v0.0.26 h1:cdRe12zlH2A86YdC8w2Xyu69DVav6CeqFce3hqMJ9vM=
|
||||
github.com/spurtcms/member v0.0.26/go.mod h1:jNwxQHW/o/MAqPCjnl0z/haMAreuhgEafsfc2DwhXrs=
|
||||
github.com/spurtcms/member-access v0.0.10 h1:4u7y5/+IZGZJ+diB+1k/UrJpTNt0oIQXnSsdJjkKoaw=
|
||||
github.com/spurtcms/member-access v0.0.10/go.mod h1:Ok/+dQX0afYU4WzdRVU3iQw5B1l+3zlTONHQRQMUOl8=
|
||||
github.com/spurtcms/membership v0.0.26 h1:42P0fKWs9CA6llHm9GNeAvfRHL0IDzdhRUN49kkglfk=
|
||||
github.com/spurtcms/membership v0.0.26/go.mod h1:uvn6cm4puxilQ2krc74ayOcn9Fns+usqdkn1BmD/Lh8=
|
||||
github.com/spurtcms/menu v0.0.32 h1:9BftEJOkB5F0pX1nf669CMOnfoW232arcEgprhKHoXw=
|
||||
github.com/spurtcms/menu v0.0.32/go.mod h1:7PlQpDFYLQh3jg7Ys419BBHy+86DDtQqbL1oN6uyr50=
|
||||
github.com/spurtcms/team v0.0.40 h1:RWbEefrp6up3VnU92G5Uni0sN5VxqKKlHhasoAfaZSs=
|
||||
github.com/spurtcms/team v0.0.40/go.mod h1:XMtTNJbC605oe99XSKhzvPrr+J5/y3qUSxC2GQNyjf4=
|
||||
github.com/spurtcms/team-roles v0.0.23 h1:ACPFjR/4w8P/p0sLagiswvtQ7LlhIhfRyUsRms2bXak=
|
||||
github.com/spurtcms/team-roles v0.0.23/go.mod h1:h4yVYhuFtdloe8h+zS1qGnyyLUyEOEiI+ZkRxynEviM=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||
github.com/ugorji/go/codec v0.0.0-20181209151446-772ced7fd4c2/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
||||
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
||||
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||
github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w=
|
||||
github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
|
||||
github.com/utrack/gin-csrf v0.0.0-20190424104817-40fb8d2c8fca h1:lpvAjPK+PcxnbcB8H7axIb4fMNwjX9bE4DzwPjGg8aE=
|
||||
github.com/utrack/gin-csrf v0.0.0-20190424104817-40fb8d2c8fca/go.mod h1:XXKxNbpoLihvvT7orUZbs/iZayg1n4ip7iJakJPAwA8=
|
||||
github.com/vektah/gqlparser/v2 v2.5.22 h1:yaaeJ0fu+nv1vUMW0Hl+aS1eiv1vMfapBNjpffAda1I=
|
||||
github.com/vektah/gqlparser/v2 v2.5.22/go.mod h1:xMl+ta8a5M1Yo1A1Iwt/k7gSpscwSnHZdw7tfhEGfTM=
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
|
||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
|
||||
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
|
||||
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
|
||||
golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
|
||||
golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
||||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
|
||||
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
|
||||
golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
|
||||
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
|
||||
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
|
||||
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gorm.io/datatypes v1.2.0 h1:5YT+eokWdIxhJgWHdrb2zYUimyk0+TaFth+7a0ybzco=
|
||||
gorm.io/datatypes v1.2.0/go.mod h1:o1dh0ZvjIjhH/bngTpypG6lVRJ5chTBxE09FH/71k04=
|
||||
gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
|
||||
gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
|
||||
gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8=
|
||||
gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
|
||||
gorm.io/driver/sqlite v1.4.4 h1:gIufGoR0dQzjkyqDyYSCvsYR6fba1Gw5YKDqKeChxFc=
|
||||
gorm.io/driver/sqlite v1.4.4/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI=
|
||||
gorm.io/driver/sqlserver v1.4.1 h1:t4r4r6Jam5E6ejqP7N82qAJIJAht27EGT41HyPfXRw0=
|
||||
gorm.io/driver/sqlserver v1.4.1/go.mod h1:DJ4P+MeZbc5rvY58PnmN1Lnyvb5gw5NPzGshHDnJLig=
|
||||
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||
gorm.io/gorm v1.30.0 h1:qbT5aPv1UH8gI99OsRlvDToLxW5zR7FzS9acZDOZcgs=
|
||||
gorm.io/gorm v1.30.0/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE=
|
||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||
@@ -1,171 +0,0 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"spurt-cms/graphql/info"
|
||||
"spurt-cms/graphql/model"
|
||||
"spurt-cms/models"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func CategoryList(ctx context.Context, categoryFilter *model.CategoryFilter, commonFilter *model.Filter) (*model.CategoryDetails, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
return &model.CategoryDetails{}, info.ErrGinCtx
|
||||
}
|
||||
|
||||
var (
|
||||
limit, offset, categoryGroupId, hierarchyLevel int
|
||||
checkEntriesPresence, excludeGroup, excludeParent, exactLevelOnly bool
|
||||
categoryGroupSlug,channelSlug string
|
||||
finalCategoriesList []model.Category
|
||||
)
|
||||
|
||||
if commonFilter != nil {
|
||||
|
||||
if commonFilter.Limit.IsSet() {
|
||||
limit = *commonFilter.Limit.Value()
|
||||
|
||||
}
|
||||
if commonFilter.Offset.IsSet() {
|
||||
offset = *commonFilter.Offset.Value()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if categoryFilter != nil {
|
||||
|
||||
if categoryFilter.CategoryGroupID.IsSet() {
|
||||
categoryGroupId = *categoryFilter.CategoryGroupID.Value()
|
||||
}
|
||||
|
||||
if categoryFilter.HierarchyLevel.IsSet() {
|
||||
hierarchyLevel = *categoryFilter.HierarchyLevel.Value()
|
||||
}
|
||||
|
||||
if categoryFilter.CheckEntriesPresence.IsSet() && *categoryFilter.CheckEntriesPresence.Value(){
|
||||
checkEntriesPresence = *categoryFilter.CheckEntriesPresence.Value()
|
||||
}
|
||||
|
||||
if categoryFilter.ExcludeGroup.IsSet() && *categoryFilter.ExcludeGroup.Value() {
|
||||
excludeGroup = *categoryFilter.ExcludeGroup.Value()
|
||||
}
|
||||
|
||||
if categoryFilter.ExcludeParent.IsSet() && *categoryFilter.ExcludeParent.Value() {
|
||||
excludeParent = *categoryFilter.ExcludeParent.Value()
|
||||
}
|
||||
|
||||
if categoryFilter.CategoryGroupSlug.IsSet() {
|
||||
categoryGroupSlug = *categoryFilter.CategoryGroupSlug.Value()
|
||||
}
|
||||
|
||||
if categoryFilter.ExactLevelOnly.IsSet() && *categoryFilter.ExactLevelOnly.Value(){
|
||||
exactLevelOnly = *categoryFilter.ExactLevelOnly.Value()
|
||||
}
|
||||
|
||||
if categoryFilter.ChannelSlug.IsSet() && *categoryFilter.ChannelSlug.Value() != ""{
|
||||
|
||||
channelSlug = *categoryFilter.ChannelSlug.Value()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
tenantDetails, err := GetTenantDetails(c)
|
||||
|
||||
if err != nil {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrFetchTenantDetails)
|
||||
|
||||
c.AbortWithStatus(500)
|
||||
|
||||
return &model.CategoryDetails{}, info.ErrFetchTenantDetails
|
||||
}
|
||||
|
||||
categoryListLocal, count, err := CategoryInstance.CategoryList(limit, offset, categoryGroupId, hierarchyLevel,tenantDetails.TenantId, checkEntriesPresence, excludeGroup, excludeParent,exactLevelOnly,channelSlug,categoryGroupSlug)
|
||||
|
||||
if err != nil {
|
||||
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
|
||||
return &model.CategoryDetails{}, nil
|
||||
|
||||
}
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrFetchCategoryDetails)
|
||||
|
||||
c.AbortWithStatus(500)
|
||||
|
||||
return &model.CategoryDetails{}, info.ErrFetchCategoryDetails
|
||||
}
|
||||
|
||||
for _, categoryList := range categoryListLocal {
|
||||
|
||||
cateModifiedOn := categoryList.ModifiedOn
|
||||
|
||||
cateModifiedBy := categoryList.ModifiedBy
|
||||
|
||||
var localCategoryList model.Category
|
||||
|
||||
localCategoryList.CategoryName = categoryList.CategoryName
|
||||
localCategoryList.CategorySlug = categoryList.CategorySlug
|
||||
localCategoryList.CreatedBy = categoryList.CreatedBy
|
||||
localCategoryList.CreatedOn = categoryList.CreatedOn
|
||||
localCategoryList.Description = categoryList.Description
|
||||
localCategoryList.ID = categoryList.Id
|
||||
localCategoryList.ImagePath = categoryList.ImagePath
|
||||
localCategoryList.ModifiedBy = &cateModifiedBy
|
||||
localCategoryList.ModifiedOn = &cateModifiedOn
|
||||
localCategoryList.ParentID = categoryList.ParentId
|
||||
localCategoryList.TenantID = categoryList.TenantId
|
||||
|
||||
finalCategoriesList = append(finalCategoriesList, localCategoryList)
|
||||
}
|
||||
|
||||
return &model.CategoryDetails{Categorylist: finalCategoriesList, Count: count}, nil
|
||||
|
||||
}
|
||||
|
||||
func GeneralInfo(ctx context.Context, id *string) (*model.GeneralInfo, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
if !ok {
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
return nil, info.ErrGinCtx
|
||||
}
|
||||
|
||||
var tenantid string
|
||||
|
||||
if *id != "" {
|
||||
|
||||
tenantid = *id
|
||||
}
|
||||
|
||||
// models.GetGeneralSettings(tenantid)
|
||||
|
||||
tblgeneralsetting, err :=models.GetGeneralSettings(tenantid)
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
c.AbortWithStatus(400)
|
||||
return nil, err
|
||||
}
|
||||
ErrorLog.Printf("%v", err)
|
||||
c.AbortWithStatus(500)
|
||||
return nil, err
|
||||
}
|
||||
generalInfo:=model.GeneralInfo{
|
||||
CompanyName: tblgeneralsetting.CompanyName,
|
||||
LogoPath: tblgeneralsetting.LogoPath,
|
||||
ExpandLogoPath: tblgeneralsetting.ExpandLogoPath,
|
||||
TenantID: tenantid,
|
||||
}
|
||||
|
||||
return &generalInfo,nil
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,450 +0,0 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"spurt-cms/graphql/info"
|
||||
logPkg "spurt-cms/graphql/logger"
|
||||
"spurt-cms/graphql/model"
|
||||
"spurt-cms/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/nfnt/resize"
|
||||
newauth "github.com/spurtcms/auth"
|
||||
"github.com/spurtcms/categories"
|
||||
chn "github.com/spurtcms/channels"
|
||||
"github.com/spurtcms/courses"
|
||||
forms "github.com/spurtcms/forms-builders"
|
||||
"github.com/spurtcms/member"
|
||||
membership "github.com/spurtcms/membership"
|
||||
"github.com/spurtcms/team"
|
||||
role "github.com/spurtcms/team-roles"
|
||||
)
|
||||
|
||||
type Key string
|
||||
|
||||
type Header string
|
||||
|
||||
var (
|
||||
GinContext Key
|
||||
ErrorLog *log.Logger
|
||||
NewAuth *newauth.Auth
|
||||
NewRole *role.PermissionConfig
|
||||
NewRoleWP *role.PermissionConfig
|
||||
ChannelConfig *chn.Channel
|
||||
ChannelConfigWP *chn.Channel
|
||||
NewTeam *team.Teams
|
||||
NewTeamWP *team.Teams
|
||||
MemberInstance *member.Member
|
||||
MembershipConfigWP *membership.Membership
|
||||
MemberAuthInstance *member.Member
|
||||
CategoryInstance *categories.Categories
|
||||
CategoryAuthInstance *categories.Categories
|
||||
MaxChunkLength int = 8388573 //max size of a string response
|
||||
FormConfigwp *forms.Formbuilders
|
||||
CoursesInstance *courses.Courses
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
if err := godotenv.Load(); err != nil {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrLoadEnv)
|
||||
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
ErrorLog = logPkg.ErrorLog()
|
||||
|
||||
AuthConfig()
|
||||
|
||||
GetTeamInstance()
|
||||
|
||||
GetTeamInstanceWithoutPermission()
|
||||
|
||||
GetChannelInstance()
|
||||
|
||||
GetChannelInstanceWithoutPermission()
|
||||
|
||||
GetMemberInstance()
|
||||
|
||||
GetMemberAuthInstance()
|
||||
|
||||
GetCategoryInstance()
|
||||
|
||||
GetCategoryAuthInstance()
|
||||
|
||||
GetMembershipInstanceWithoutPermission()
|
||||
|
||||
GetFormInstance()
|
||||
|
||||
GetCoursesInstance()
|
||||
}
|
||||
|
||||
// AuthCofing
|
||||
func AuthConfig() *newauth.Auth {
|
||||
|
||||
NewAuth = newauth.AuthSetup(newauth.Config{
|
||||
SecretKey: os.Getenv("JWT_SECRET"),
|
||||
DB: models.DB,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewAuth
|
||||
}
|
||||
|
||||
// channel config
|
||||
func GetChannelInstance() *chn.Channel {
|
||||
|
||||
ChannelConfig = chn.ChannelSetup(chn.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return ChannelConfig
|
||||
}
|
||||
|
||||
// channel config without permission
|
||||
func GetChannelInstanceWithoutPermission() *chn.Channel {
|
||||
|
||||
ChannelConfigWP = chn.ChannelSetup(chn.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return ChannelConfigWP
|
||||
}
|
||||
|
||||
// channel config without permission
|
||||
func GetMembershipInstanceWithoutPermission() *membership.Membership {
|
||||
|
||||
MembershipConfigWP = membership.MembershipSetup(membership.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return MembershipConfigWP
|
||||
}
|
||||
|
||||
// TeamConfig
|
||||
func GetTeamInstance() *team.Teams {
|
||||
|
||||
NewTeam = team.TeamSetup(team.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewTeam
|
||||
}
|
||||
|
||||
// TeamConfig
|
||||
func GetTeamInstanceWithoutPermission() *team.Teams {
|
||||
|
||||
NewTeamWP = team.TeamSetup(team.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
// DataBaseType: os.Getenv("DATABASE_TYPE"),
|
||||
})
|
||||
|
||||
return NewTeamWP
|
||||
}
|
||||
|
||||
// Member Instance without Auth
|
||||
func GetMemberInstance() *member.Member {
|
||||
|
||||
MemberInstance = member.MemberSetup(member.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return MemberInstance
|
||||
}
|
||||
|
||||
func GetMemberAuthInstance() *member.Member {
|
||||
|
||||
MemberAuthInstance = member.MemberSetup(member.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return MemberAuthInstance
|
||||
}
|
||||
|
||||
func GetTenantDetails(c *gin.Context) (team.TblUser, error) {
|
||||
|
||||
tenantData, ok := c.Get("tenantDetails")
|
||||
|
||||
if !ok {
|
||||
|
||||
return team.TblUser{}, info.ErrFetchTenantDetails
|
||||
}
|
||||
|
||||
return tenantData.(team.TblUser), nil
|
||||
}
|
||||
|
||||
func GetCategoryInstance() *categories.Categories {
|
||||
|
||||
CategoryInstance = categories.CategoriesSetup(categories.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return CategoryInstance
|
||||
}
|
||||
|
||||
func GetCategoryAuthInstance() *categories.Categories {
|
||||
CategoryAuthInstance = categories.CategoriesSetup(categories.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: true,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return CategoryAuthInstance
|
||||
}
|
||||
|
||||
func GetFormInstance() *forms.Formbuilders {
|
||||
|
||||
FormConfigwp = forms.FormSetup(forms.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: false,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return FormConfigwp
|
||||
}
|
||||
|
||||
func GetCoursesInstance() *courses.Courses {
|
||||
|
||||
CoursesInstance = courses.CoursesSetup(courses.Config{
|
||||
DB: models.DB,
|
||||
AuthEnable: true,
|
||||
PermissionEnable: false,
|
||||
Auth: NewAuth,
|
||||
})
|
||||
|
||||
return CoursesInstance
|
||||
}
|
||||
|
||||
func ImageResize(c *gin.Context) {
|
||||
|
||||
fileName := c.Query("name")
|
||||
|
||||
filePath := c.Query("path")
|
||||
|
||||
extension := path.Ext(fileName)
|
||||
|
||||
var storageType model.TblStorageTypes
|
||||
|
||||
err := model.GetStorageType(models.DB, &storageType)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
|
||||
c.AbortWithError(500, fmt.Errorf("%v-%v", info.ErrGetAwsCreds, err))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
var byteData []byte
|
||||
|
||||
rawObject, err := GetObjectFromS3(storageType.Aws, strings.TrimSuffix(filePath, "/")+"/"+fileName)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
|
||||
c.AbortWithError(500, fmt.Errorf("%v-%v", info.ErrGetImage, err))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
|
||||
buf.ReadFrom(rawObject.Body)
|
||||
|
||||
byteData = buf.Bytes()
|
||||
|
||||
extType := strings.Trim(extension, ".")
|
||||
|
||||
if c.Query("width") == "" || c.Query("height") == "" {
|
||||
|
||||
if extType == "svg" {
|
||||
|
||||
extType = "svg+xml"
|
||||
}
|
||||
|
||||
c.Data(200, "image/"+extType, byteData)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
width, _ := strconv.ParseUint(c.Query("width"), 10, 64)
|
||||
|
||||
height, _ := strconv.ParseUint(c.Query("height"), 10, 64)
|
||||
|
||||
Image, _, err := image.Decode(bytes.NewReader(byteData))
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
|
||||
c.AbortWithError(500, fmt.Errorf("%v-%v", info.ErrDecodeImg, err))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
newImage := resize.Resize(uint(width), uint(height), Image, resize.Lanczos3)
|
||||
|
||||
if extension == ".png" {
|
||||
|
||||
err = png.Encode(c.Writer, newImage)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
|
||||
c.AbortWithError(500, fmt.Errorf("%v-%v", info.ErrImageResize, err))
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if extension == ".jpeg" || extension == ".jpg" {
|
||||
|
||||
err = jpeg.Encode(c.Writer, newImage, nil)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
|
||||
c.AbortWithError(500, fmt.Errorf("%v-%v", info.ErrImageResize, err))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func GetObjectFromS3(AwsCredentials map[string]interface{}, key string) (*s3.GetObjectOutput, error) {
|
||||
|
||||
session := CreateAwsSession(AwsCredentials)
|
||||
|
||||
s3Svc := CreateS3Session(session)
|
||||
|
||||
awsBucket := AwsCredentials["BucketName"].(string)
|
||||
|
||||
rawObject, err := s3Svc.GetObject(&s3.GetObjectInput{
|
||||
Bucket: aws.String(awsBucket),
|
||||
Key: aws.String(key),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Printf("Error get object %s: %s\n", key, err)
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return rawObject, nil
|
||||
}
|
||||
|
||||
// create session
|
||||
func CreateS3Session(awsSession *session.Session) (ses *s3.S3) {
|
||||
|
||||
svc := s3.New(awsSession)
|
||||
|
||||
return svc
|
||||
|
||||
}
|
||||
|
||||
func CreateAwsSession(AwsCredentials map[string]interface{}) *session.Session {
|
||||
|
||||
var awsId, awsKey, awsRegion string
|
||||
|
||||
if AwsCredentials != nil {
|
||||
|
||||
awsId = AwsCredentials["AccessId"].(string)
|
||||
|
||||
awsKey = AwsCredentials["AccessKey"].(string)
|
||||
|
||||
awsRegion = AwsCredentials["Region"].(string)
|
||||
|
||||
}
|
||||
|
||||
// The session the S3 Uploader will use
|
||||
sess := session.Must(session.NewSession(
|
||||
&aws.Config{
|
||||
Region: &awsRegion,
|
||||
Credentials: credentials.NewStaticCredentials(awsId, awsKey, ""),
|
||||
},
|
||||
))
|
||||
|
||||
return sess
|
||||
}
|
||||
|
||||
func FetchChunkData(fullLengthData string) []string {
|
||||
|
||||
var chunks []string
|
||||
|
||||
dataLen := utf8.RuneCountInString(fullLengthData)
|
||||
|
||||
for i := 0; i < dataLen; i += MaxChunkLength {
|
||||
|
||||
var chunk string
|
||||
|
||||
switch {
|
||||
|
||||
case i+MaxChunkLength > dataLen:
|
||||
|
||||
chunk = fullLengthData[i:dataLen]
|
||||
|
||||
default:
|
||||
|
||||
chunk = fullLengthData[i : i+MaxChunkLength]
|
||||
|
||||
}
|
||||
|
||||
chunks = append(chunks, chunk)
|
||||
|
||||
}
|
||||
|
||||
return chunks
|
||||
}
|
||||
@@ -1,171 +0,0 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"spurt-cms/graphql/info"
|
||||
"spurt-cms/graphql/model"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
//CourseList Api
|
||||
|
||||
func CourseList(ctx context.Context, tenantId *string, status *int, categoryid *int) (*model.CourseLists, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
return &model.CourseLists{}, info.ErrGinCtx
|
||||
}
|
||||
|
||||
var tenantid string
|
||||
|
||||
if *tenantId != "" {
|
||||
|
||||
tenantid = *tenantId
|
||||
}
|
||||
|
||||
var Status int
|
||||
|
||||
if *status != 0 {
|
||||
|
||||
Status = *status
|
||||
}
|
||||
|
||||
var CategoryId int
|
||||
|
||||
if *categoryid != 0 {
|
||||
|
||||
CategoryId = *categoryid
|
||||
}
|
||||
|
||||
courselist, count, err := CoursesInstance.CourseList(Status, tenantid, CategoryId)
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
c.AbortWithStatus(400)
|
||||
return nil, err
|
||||
}
|
||||
ErrorLog.Printf("%v", err)
|
||||
c.AbortWithStatus(500)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var finalCourseList []model.Course
|
||||
|
||||
for _, val := range courselist {
|
||||
|
||||
value := model.Course{
|
||||
ID: val.Id,
|
||||
Title: val.Title,
|
||||
Description: val.Description,
|
||||
ImageName: val.ImageName,
|
||||
ImagePath: val.ImagePath,
|
||||
Category: val.CategoryId,
|
||||
}
|
||||
|
||||
finalCourseList = append(finalCourseList, value)
|
||||
|
||||
}
|
||||
|
||||
list := model.CourseLists{
|
||||
Courselist: finalCourseList,
|
||||
Count: int(count),
|
||||
}
|
||||
|
||||
return &list, nil
|
||||
|
||||
}
|
||||
|
||||
//CourseDetails Api
|
||||
|
||||
func CourseDetails(ctx context.Context, tenantId *string, courseId *int) (*model.CourseDetails, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
return &model.CourseDetails{}, info.ErrGinCtx
|
||||
}
|
||||
|
||||
var tenantid string
|
||||
|
||||
if *tenantId != "" {
|
||||
|
||||
tenantid = *tenantId
|
||||
}
|
||||
|
||||
var CourseId int
|
||||
|
||||
if *courseId != 0 {
|
||||
|
||||
CourseId = *courseId
|
||||
}
|
||||
|
||||
sectionlist, serr := CoursesInstance.SectionList(CourseId, tenantid)
|
||||
if serr != nil {
|
||||
if serr == gorm.ErrRecordNotFound {
|
||||
c.AbortWithStatus(400)
|
||||
return nil, serr
|
||||
}
|
||||
ErrorLog.Printf("%v", serr)
|
||||
c.AbortWithStatus(500)
|
||||
return nil, serr
|
||||
}
|
||||
|
||||
var FinalSectionList []model.Sections
|
||||
|
||||
for _, sectionValue := range sectionlist {
|
||||
|
||||
SectionList := model.Sections{
|
||||
ID: sectionValue.Id,
|
||||
CourseID: sectionValue.CourseId,
|
||||
Title: sectionValue.Title,
|
||||
Content: sectionValue.Content,
|
||||
OrderIndex: sectionValue.OrderIndex,
|
||||
TenantID: sectionValue.TenantId,
|
||||
}
|
||||
|
||||
FinalSectionList = append(FinalSectionList, SectionList)
|
||||
}
|
||||
|
||||
lessonlist, lerr := CoursesInstance.LessonList(CourseId, tenantid)
|
||||
if lerr != nil {
|
||||
if lerr == gorm.ErrRecordNotFound {
|
||||
c.AbortWithStatus(400)
|
||||
return nil, lerr
|
||||
}
|
||||
ErrorLog.Printf("%v", lerr)
|
||||
c.AbortWithStatus(500)
|
||||
return nil, lerr
|
||||
}
|
||||
|
||||
var FinalLessonList []model.Lesson
|
||||
|
||||
for _, lessonValue := range lessonlist {
|
||||
|
||||
LessonList := model.Lesson{
|
||||
ID: lessonValue.Id,
|
||||
CourseID: lessonValue.CourseId,
|
||||
SectionID: lessonValue.SectionId,
|
||||
Title: lessonValue.Title,
|
||||
Content: lessonValue.Content,
|
||||
EmbedLink: lessonValue.EmbedLink,
|
||||
FileName: lessonValue.FileName,
|
||||
FilePath: lessonValue.FilePath,
|
||||
LessonType: lessonValue.LessonType,
|
||||
OrderIndex: lessonValue.OrderIndex,
|
||||
TenantID: lessonValue.TenantId,
|
||||
}
|
||||
|
||||
FinalLessonList = append(FinalLessonList, LessonList)
|
||||
}
|
||||
|
||||
return &model.CourseDetails{Lesson: FinalLessonList, Section: FinalSectionList}, nil
|
||||
|
||||
}
|
||||
@@ -1,732 +0,0 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"spurt-cms/controllers"
|
||||
"spurt-cms/graphql/info"
|
||||
"spurt-cms/graphql/model"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/golang-jwt/jwt"
|
||||
"github.com/spurtcms/member"
|
||||
"github.com/spurtcms/team"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func MemberRegister(ctx context.Context, memberData *model.MemberDetails, arguments *model.MemberArguments) (bool, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
c.AbortWithStatus(500)
|
||||
|
||||
return false, info.ErrGinCtx
|
||||
}
|
||||
|
||||
tenantId := memberData.TenantID
|
||||
createdBy := memberData.UserID
|
||||
fmt.Println("userid:", createdBy, tenantId)
|
||||
|
||||
var (
|
||||
memberSettings member.TblMemberSetting
|
||||
err error
|
||||
)
|
||||
|
||||
memberSettings, err = MemberInstance.GetMemberSettings(tenantId)
|
||||
if err != nil {
|
||||
|
||||
return false, err
|
||||
}
|
||||
|
||||
if memberSettings.AllowRegistration == 0 {
|
||||
|
||||
return false, info.ErrMemberRegisterPerm
|
||||
}
|
||||
|
||||
var memberDetails member.TblMember
|
||||
|
||||
if memberData.Mobile.IsSet() {
|
||||
|
||||
memberDetails.MobileNo = *memberData.Mobile.Value()
|
||||
}
|
||||
|
||||
if memberData.LastName.IsSet() {
|
||||
|
||||
memberDetails.LastName = *memberData.LastName.Value()
|
||||
}
|
||||
|
||||
if memberData.Password != "" {
|
||||
|
||||
memberDetails.Password = memberData.Password
|
||||
}
|
||||
|
||||
if memberData.Username.IsSet() {
|
||||
|
||||
memberDetails.Username = *memberData.Username.Value()
|
||||
|
||||
isExist, err := MemberInstance.CheckNameInMember(0, *memberData.Username.Value(), tenantId)
|
||||
if isExist || err == nil {
|
||||
err = errors.New("member already exists")
|
||||
|
||||
c.AbortWithError(422, err)
|
||||
|
||||
return isExist, err
|
||||
}
|
||||
}
|
||||
|
||||
if memberData.Email != "" {
|
||||
|
||||
memberDetails.Email = memberData.Email
|
||||
|
||||
isExist, err := MemberInstance.CheckEmailInMember(0, memberData.Email, tenantId)
|
||||
|
||||
if isExist || err == nil {
|
||||
|
||||
err = errors.New("member already exists")
|
||||
|
||||
c.AbortWithError(http.StatusBadRequest, err)
|
||||
|
||||
return isExist, err
|
||||
}
|
||||
}
|
||||
|
||||
memberDetails.FirstName = memberData.FirstName
|
||||
memberDetails.Username = strings.ToLower(memberData.FirstName)
|
||||
memberDetails.IsActive = 1
|
||||
|
||||
memberss := member.MemberCreationUpdation{
|
||||
FirstName: memberDetails.FirstName,
|
||||
LastName: memberDetails.LastName,
|
||||
Username: memberDetails.Username,
|
||||
Email: memberDetails.Email,
|
||||
Password: memberDetails.Password,
|
||||
IsActive: memberDetails.IsActive,
|
||||
CreatedBy: createdBy,
|
||||
TenantId: tenantId,
|
||||
}
|
||||
|
||||
members, _ := MemberInstance.CreateMember(memberss)
|
||||
|
||||
MemberProfile := member.MemberprofilecreationUpdation{
|
||||
MemberId: members.Id,
|
||||
CreatedBy: createdBy,
|
||||
TenantId: tenantId,
|
||||
}
|
||||
|
||||
merr := MemberInstance.CreateMemberProfile(MemberProfile)
|
||||
if merr != nil {
|
||||
ErrorLog.Printf("memberprofile create error: %s", merr)
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func MemberLogin(ctx context.Context, memberData *model.MemberSignin) (*model.MemberCheckLoginResponse, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
c.AbortWithStatus(500)
|
||||
|
||||
return nil, info.ErrGinCtx
|
||||
}
|
||||
|
||||
Email := memberData.Email
|
||||
Password := memberData.Password
|
||||
UserId := memberData.UserID
|
||||
TenantId := memberData.TenantID
|
||||
|
||||
token, pass, email, _ := model.Model.CheckMemberLogin(Email, Password, UserId, TenantId)
|
||||
if !email {
|
||||
return &model.MemberCheckLoginResponse{
|
||||
Email: false,
|
||||
Message: "Login failed: invalid credentials",
|
||||
Success: false,
|
||||
}, nil
|
||||
}
|
||||
if !pass {
|
||||
return &model.MemberCheckLoginResponse{
|
||||
Email: true,
|
||||
Password: false,
|
||||
Message: "Login failed: invalid credentials",
|
||||
Success: false,
|
||||
}, nil
|
||||
}
|
||||
member, _ := MemberInstance.GetMemberAndProfileData(0, Email, 0, "", TenantId)
|
||||
|
||||
var firstn = strings.ToUpper(member.FirstName[:1])
|
||||
|
||||
var lastn string
|
||||
if member.LastName != "" {
|
||||
lastn = strings.ToUpper(member.LastName[:1])
|
||||
}
|
||||
member.NameString = firstn + lastn
|
||||
|
||||
member.NameString = firstn + lastn
|
||||
return &model.MemberCheckLoginResponse{Email: true, Password: true, Message: "Login successful", Token: token, Success: true,
|
||||
MemberDetails: &model.Members{Email: member.Email, FirstName: member.FirstName, LastName: &member.LastName, ProfileImage: &member.ProfileImage, ProfileImagePath: &member.ProfileImagePath, Mobile: &member.MobileNo, NameString: &member.NameString, ID: &member.Id}}, nil
|
||||
}
|
||||
func MembersList(ctx context.Context, filter *model.Filter) (*model.MembersDetails, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
return &model.MembersDetails{}, info.ErrGinCtx
|
||||
}
|
||||
|
||||
tenantDetails, err := GetTenantDetails(c)
|
||||
|
||||
if err != nil {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrFetchTenantDetails)
|
||||
|
||||
c.AbortWithStatus(500)
|
||||
|
||||
return &model.MembersDetails{}, info.ErrFetchTenantDetails
|
||||
}
|
||||
|
||||
var (
|
||||
limit, offset int
|
||||
keyword string
|
||||
)
|
||||
|
||||
if filter != nil {
|
||||
|
||||
if filter.Limit.IsSet() && filter.Limit.Value() != nil {
|
||||
|
||||
limit = *filter.Limit.Value()
|
||||
}
|
||||
|
||||
if filter.Offset.IsSet() && filter.Offset.Value() != nil {
|
||||
|
||||
offset = *filter.Offset.Value()
|
||||
}
|
||||
|
||||
if filter.Keyword.IsSet() && filter.Keyword.Value() != nil {
|
||||
|
||||
keyword = *filter.Keyword.Value()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
input := model.MembersListReq{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
Keyword: keyword,
|
||||
TenantId: tenantDetails.TenantId,
|
||||
Count: true,
|
||||
}
|
||||
|
||||
members, count, err := model.Model.MembersList(input)
|
||||
|
||||
if err != nil {
|
||||
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
|
||||
c.AbortWithStatus(400)
|
||||
|
||||
return &model.MembersDetails{}, err
|
||||
}
|
||||
|
||||
ErrorLog.Printf("%v", err)
|
||||
|
||||
c.AbortWithStatus(500)
|
||||
|
||||
return &model.MembersDetails{}, err
|
||||
}
|
||||
|
||||
var memberlist []model.Members
|
||||
|
||||
for _, member := range members {
|
||||
|
||||
modifiedOn := member.ModifiedOn
|
||||
|
||||
modifiedBy := member.ModifiedBy
|
||||
|
||||
member := model.Members{
|
||||
ID: member.ID,
|
||||
FirstName: member.FirstName,
|
||||
LastName: member.LastName,
|
||||
Email: member.Email,
|
||||
Mobile: member.Mobile,
|
||||
IsActive: member.IsActive,
|
||||
CreatedOn: member.CreatedOn,
|
||||
CreatedBy: member.CreatedBy,
|
||||
IsDeleted: member.IsDeleted,
|
||||
ModifiedOn: modifiedOn,
|
||||
ModifiedBy: modifiedBy,
|
||||
TenantID: member.TenantID,
|
||||
}
|
||||
|
||||
memberlist = append(memberlist, member)
|
||||
}
|
||||
|
||||
return &model.MembersDetails{MembersList: memberlist, Count: int(count)}, nil
|
||||
}
|
||||
|
||||
//Forgot Password API//
|
||||
|
||||
func ForgotPassword(ctx context.Context, memberdetails *model.MemberInfo) (*model.ForgotPasswordResponse, error) {
|
||||
|
||||
_, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
return &model.ForgotPasswordResponse{}, info.ErrGinCtx
|
||||
}
|
||||
|
||||
member, err := MemberInstance.GetMemberAndProfileData(0, memberdetails.Email, 0, "", memberdetails.TenantID)
|
||||
|
||||
id := member.Id
|
||||
token, _ := CreateTokenWithExpireTime(id, memberdetails.TenantID)
|
||||
|
||||
fmt.Println(token, "token")
|
||||
|
||||
if err != nil {
|
||||
|
||||
ErrorLog.Printf("Send Link forget password error: %s", err)
|
||||
return &model.ForgotPasswordResponse{Message: "you are not registered with us", Success: false}, fmt.Errorf("you are not registered with us")
|
||||
}
|
||||
|
||||
var url_prefix = os.Getenv("BASE_URL")
|
||||
|
||||
var resetpassurl = memberdetails.URL
|
||||
|
||||
linkedin := os.Getenv("LINKEDIN")
|
||||
facebook := os.Getenv("FACEBOOK")
|
||||
twitter := os.Getenv("TWITTER")
|
||||
youtube := os.Getenv("YOUTUBE")
|
||||
insta := os.Getenv("INSTAGRAM")
|
||||
data := map[string]interface{}{
|
||||
"fname": member.Username,
|
||||
"resetpassword": resetpassurl + "/auth/change-password?token=" + token,
|
||||
"restpassurl": resetpassurl + "/auth/change-password",
|
||||
"admin_logo": url_prefix + "public/img/SpurtCMSlogo.png",
|
||||
"fb_logo": url_prefix + "public/img/email-icons/facebook.png",
|
||||
"linkedin_logo": url_prefix + "public/img/email-icons/linkedin.png",
|
||||
"twitter_logo": url_prefix + "public/img/email-icons/x.png",
|
||||
"youtube_logo": url_prefix + "public/img/email-icons/youtube.png",
|
||||
"insta_log": url_prefix + "public/img/email-icons/instagram.png",
|
||||
"facebook": facebook,
|
||||
"instagram": insta,
|
||||
"youtube": youtube,
|
||||
"linkedin": linkedin,
|
||||
"twitter": twitter,
|
||||
}
|
||||
var wg sync.WaitGroup
|
||||
|
||||
wg.Add(1)
|
||||
|
||||
Chan := make(chan string, 1)
|
||||
|
||||
go controllers.ForgetPasswordEmail(Chan, &wg, data, member.Email, "Forgot Password", "")
|
||||
|
||||
close(Chan)
|
||||
|
||||
return &model.ForgotPasswordResponse{Message: "Mail sent successfully!", Success: true}, nil
|
||||
}
|
||||
|
||||
//Reset Password API//
|
||||
|
||||
func ResetPassword(ctx context.Context, memberinfo *model.MemberResetpassInfo) (bool, error) {
|
||||
|
||||
_, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
return false, info.ErrGinCtx
|
||||
}
|
||||
newpass := memberinfo.NewPassword
|
||||
|
||||
confrimpass := memberinfo.ConfrimPassword
|
||||
|
||||
token := memberinfo.Token
|
||||
|
||||
Claims := jwt.MapClaims{}
|
||||
_, err := jwt.ParseWithClaims(token, Claims, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(os.Getenv("JWT_SECRET")), nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
if err == jwt.ErrSignatureInvalid {
|
||||
ErrorLog.Printf("Invalid token change password error: %s", err)
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
memberIDStr, ok := Claims["member_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("member_id is not a string")
|
||||
return false, err
|
||||
}
|
||||
|
||||
memberid, err := strconv.Atoi(memberIDStr)
|
||||
if err != nil {
|
||||
fmt.Println("Error converting member_id:", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
TenantidStr, ok := Claims["tenant_id"].(string)
|
||||
if !ok {
|
||||
return false, err
|
||||
}
|
||||
|
||||
Tenantid := TenantidStr
|
||||
|
||||
getuserinfo, _ := NewTeamWP.GetTenantDetails(Tenantid)
|
||||
|
||||
if newpass == confrimpass {
|
||||
|
||||
err := MemberInstance.MemberPasswordUpdate(newpass, confrimpass, "", memberid, getuserinfo.Id, Tenantid)
|
||||
if err != nil {
|
||||
ErrorLog.Printf("set new password error: %s", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
} else {
|
||||
return false, fmt.Errorf("password don't mismatch")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func CreateTokenWithExpireTime(userid int, tenantid string) (string, error) {
|
||||
atClaims := jwt.MapClaims{}
|
||||
atClaims["authorized"] = true
|
||||
atClaims["member_id"] = (userid)
|
||||
atClaims["tenant_id"] = tenantid
|
||||
|
||||
at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
|
||||
token, err := at.SignedString([]byte(os.Getenv("JWT_SECRET")))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return token, nil
|
||||
}
|
||||
|
||||
// social Login //
|
||||
func MemberSocialLogin(ctx context.Context, input *model.SocialLoginInput) (*model.SocialLoginResponse, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
c.AbortWithError(500, nil)
|
||||
}
|
||||
|
||||
apiKey := c.GetHeader("ApiKey")
|
||||
|
||||
tenantdetails, _ := model.Model.GettenantByapikey(apiKey)
|
||||
|
||||
fmt.Println(apiKey, tenantdetails, "tenantdetailsss")
|
||||
|
||||
userinfo, _ := model.Model.GetUserbyTenantId(tenantdetails.TenantId)
|
||||
|
||||
memberinfo, _ := MemberInstance.GetMemberAndProfileData(0, input.Email, 0, "", tenantdetails.TenantId)
|
||||
|
||||
if memberinfo.Id != 0 && memberinfo.IsActive == 0 {
|
||||
message := "This account is inactive. Please contact Admin."
|
||||
return &model.SocialLoginResponse{Message: message}, fmt.Errorf("account is inactive")
|
||||
}
|
||||
|
||||
var response model.SocialLoginResponse
|
||||
var memid int
|
||||
var username string
|
||||
var lastname string
|
||||
var password string
|
||||
|
||||
if memberinfo.Email != input.Email {
|
||||
|
||||
if input.Username.IsSet() && input.Username.Value() != nil {
|
||||
|
||||
username = *input.Username.Value()
|
||||
}
|
||||
if input.LastName.IsSet() && input.LastName.Value() != nil {
|
||||
|
||||
lastname = *input.LastName.Value()
|
||||
}
|
||||
if input.Password.IsSet() && input.Password.Value() != nil {
|
||||
|
||||
password = *input.Password.Value()
|
||||
}
|
||||
|
||||
membergrp, err := model.Model.GetmemberGroup("default-group", tenantdetails.TenantId)
|
||||
|
||||
fmt.Println(membergrp, "membergrbb")
|
||||
|
||||
memberss := member.MemberCreationUpdation{
|
||||
FirstName: input.FirstName,
|
||||
LastName: lastname,
|
||||
Username: username,
|
||||
Email: input.Email,
|
||||
Password: password,
|
||||
IsActive: 1,
|
||||
CreatedBy: userinfo.Id,
|
||||
TenantId: tenantdetails.TenantId,
|
||||
StorageType: "aws",
|
||||
}
|
||||
|
||||
members, err := MemberInstance.CreateMember(memberss)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("member creation error")
|
||||
return &model.SocialLoginResponse{Message: "member Creation error"}, err
|
||||
|
||||
}
|
||||
|
||||
MemberProfile := member.MemberprofilecreationUpdation{
|
||||
MemberId: members.Id,
|
||||
CreatedBy: userinfo.Id,
|
||||
TenantId: tenantdetails.TenantId,
|
||||
}
|
||||
|
||||
merr := MemberInstance.CreateMemberProfile(MemberProfile)
|
||||
if merr != nil {
|
||||
ErrorLog.Printf("memberprofile create error: %s", merr)
|
||||
return &model.SocialLoginResponse{Message: "memberprofile create error"}, merr
|
||||
}
|
||||
|
||||
memid = members.Id
|
||||
|
||||
} else {
|
||||
memid = memberinfo.Id // Existing user's ID
|
||||
}
|
||||
|
||||
successMessage := "Successfully Logged In"
|
||||
token, _ := CreateTokenWithExpireTime(memid, tenantdetails.TenantId)
|
||||
response.Token = token
|
||||
response.Message = successMessage
|
||||
response.Userid = memid
|
||||
|
||||
return &response, nil
|
||||
}
|
||||
|
||||
//Member Profile Details//
|
||||
|
||||
func MemberProfileDetails(ctx context.Context, id *int) (*model.Members, error) {
|
||||
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
c.AbortWithError(500, nil)
|
||||
}
|
||||
var memberid int
|
||||
var memdet model.Members
|
||||
|
||||
if id != nil {
|
||||
|
||||
memberid = *id
|
||||
}
|
||||
if memberid == 0 {
|
||||
|
||||
err := errors.New("unauthorized access")
|
||||
|
||||
c.AbortWithError(http.StatusUnauthorized, err)
|
||||
|
||||
return &model.Members{}, err
|
||||
|
||||
}
|
||||
tenantData, ok := c.Get("tenantDetails")
|
||||
|
||||
tenantdetails := tenantData.(team.TblUser)
|
||||
|
||||
memberdetails, err := MemberInstance.GetMemberAndProfileData(memberid, "", 0, "", tenantdetails.TenantId)
|
||||
if err != nil {
|
||||
|
||||
return &model.Members{}, err
|
||||
}
|
||||
var firstn = strings.ToUpper(memberdetails.FirstName[:1])
|
||||
var lastn string
|
||||
if memberdetails.LastName != "" {
|
||||
lastn = strings.ToUpper(memberdetails.LastName[:1])
|
||||
}
|
||||
memberdetails.NameString = firstn + lastn
|
||||
|
||||
memberdetails.NameString = firstn + lastn
|
||||
memdet = model.Members{
|
||||
ID: &memberdetails.Id,
|
||||
FirstName: memberdetails.FirstName,
|
||||
LastName: &memberdetails.LastName,
|
||||
Username: &memberdetails.Username,
|
||||
ProfileImage: &memberdetails.ProfileImage,
|
||||
ProfileImagePath: &memberdetails.ProfileImagePath,
|
||||
Email: memberdetails.Email,
|
||||
IsActive: &memberdetails.IsActive,
|
||||
Mobile: &memberdetails.MobileNo,
|
||||
GroupID: &memberdetails.MemberGroupId,
|
||||
NameString: &memberdetails.NameString,
|
||||
}
|
||||
|
||||
return &memdet, nil
|
||||
}
|
||||
|
||||
//Update Memberprofile//
|
||||
|
||||
func UpdateMemberProfile(ctx context.Context, input *model.UpdateMember) (*model.UpdatememberResponse, error) {
|
||||
c, ok := ctx.Value(GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
c.AbortWithError(500, nil)
|
||||
}
|
||||
if input.ID == 0 {
|
||||
return &model.UpdatememberResponse{Message: "Invalid member ID"}, fmt.Errorf("member ID cannot be zero")
|
||||
}
|
||||
var imageName, imagePath, lastname, Password, hasspass string
|
||||
|
||||
tenantData, _ := c.Get("tenantDetails")
|
||||
tenantDetails := tenantData.(team.TblUser)
|
||||
member, err := MemberInstance.GetMemberDetails(input.ID, tenantDetails.TenantId)
|
||||
|
||||
if err != nil {
|
||||
|
||||
return &model.UpdatememberResponse{Message: "Member not found or deleted"}, fmt.Errorf("member with ID %d not found: %v", input.ID, err)
|
||||
}
|
||||
|
||||
if input.RemoveImage.IsSet() && *input.RemoveImage.Value() {
|
||||
imageName = ""
|
||||
imagePath = ""
|
||||
} else if input.ProfileImage.IsSet() && *input.ProfileImage.Value() != "" {
|
||||
|
||||
var err error
|
||||
var imageByte []byte
|
||||
imageName, imagePath, imageByte, err = controllers.ConvertBase64toByte(*input.ProfileImage.Value(), "member")
|
||||
|
||||
if err != nil {
|
||||
return &model.UpdatememberResponse{Message: "Failed to image upload"}, err
|
||||
}
|
||||
|
||||
imagePath = tenantDetails.S3FolderName + imagePath
|
||||
|
||||
if uerr := storagecontroller.UploadCropImageS3(imageName, imagePath, imageByte); uerr != nil {
|
||||
return &model.UpdatememberResponse{Message: "Failed to image upload"}, uerr
|
||||
}
|
||||
} else {
|
||||
|
||||
imageName = member.ProfileImage
|
||||
imagePath = member.ProfileImagePath
|
||||
}
|
||||
|
||||
fmt.Println("imagename", imageName, imagePath)
|
||||
|
||||
if input.LastName.IsSet() && input.LastName.Value() != nil {
|
||||
lastname = *input.LastName.Value()
|
||||
}
|
||||
|
||||
if input.Password.IsSet() && input.Password.Value() != nil {
|
||||
|
||||
Password = *input.Password.Value()
|
||||
}
|
||||
|
||||
// if input.Username.IsSet() && input.Username.Value() != nil {
|
||||
// Username = *input.Username.Value()
|
||||
// }
|
||||
|
||||
if input.Email != "" {
|
||||
|
||||
isExist, err := MemberInstance.CheckEmailInMember(input.ID, input.Email, tenantDetails.TenantId)
|
||||
|
||||
if isExist || err == nil {
|
||||
|
||||
fmt.Println("isexit", isExist, err)
|
||||
|
||||
err = errors.New("Email already exists")
|
||||
|
||||
c.AbortWithError(http.StatusBadRequest, err)
|
||||
|
||||
return &model.UpdatememberResponse{Message: "Email Already Exists"}, err
|
||||
}
|
||||
}
|
||||
|
||||
if input.Mobile != "" {
|
||||
|
||||
isExist, err := MemberInstance.CheckNumberInMember(input.ID, input.Mobile, tenantDetails.TenantId)
|
||||
|
||||
if isExist || err == nil {
|
||||
|
||||
err = errors.New("Mobile Number already exists")
|
||||
|
||||
c.AbortWithError(http.StatusBadRequest, err)
|
||||
|
||||
return &model.UpdatememberResponse{Message: "Mobile Number Already Exists"}, err
|
||||
}
|
||||
}
|
||||
if Password != "" {
|
||||
|
||||
hasspass = hashingPassword(Password)
|
||||
|
||||
} else {
|
||||
|
||||
hasspass = member.Password
|
||||
}
|
||||
|
||||
updateMap := map[string]interface{}{
|
||||
"first_name": input.FirstName,
|
||||
"last_name": lastname,
|
||||
"mobile_no": input.Mobile,
|
||||
"email": input.Email,
|
||||
"password": hasspass,
|
||||
"profile_image": imageName,
|
||||
"profile_image_path": imagePath,
|
||||
"is_active": 1,
|
||||
"storage_type": "aws",
|
||||
}
|
||||
|
||||
err2 := MemberInstance.MemberFlexibleUpdate(updateMap, input.ID, tenantDetails.Id, tenantDetails.TenantId)
|
||||
|
||||
if err2 != nil {
|
||||
return &model.UpdatememberResponse{Message: "User Update error"}, err2
|
||||
}
|
||||
|
||||
nmember, _ := MemberInstance.GetMemberDetails(input.ID, tenantDetails.TenantId)
|
||||
|
||||
return &model.UpdatememberResponse{
|
||||
Message: "User Updated Successfully",
|
||||
MemberDetails: &model.Members{
|
||||
FirstName: nmember.FirstName,
|
||||
LastName: &nmember.LastName,
|
||||
Email: nmember.Email,
|
||||
Mobile: &nmember.MobileNo,
|
||||
ProfileImage: &nmember.ProfileImage,
|
||||
ProfileImagePath: &nmember.ProfileImagePath,
|
||||
Username: &nmember.Username,
|
||||
ID: &nmember.Id,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
func hashingPassword(pass string) string {
|
||||
|
||||
passbyte, err := bcrypt.GenerateFromPassword([]byte(pass), 14)
|
||||
|
||||
if err != nil {
|
||||
|
||||
panic(err)
|
||||
|
||||
}
|
||||
|
||||
return string(passbyte)
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
# Where are all the schema files located? globs are supported eg src/**/*.graphqls
|
||||
schema:
|
||||
- schema/*.graphqls
|
||||
|
||||
# Where should the generated server code go?
|
||||
exec:
|
||||
filename: graph/generated.go
|
||||
package: graph
|
||||
|
||||
# Uncomment to enable federation
|
||||
# federation:
|
||||
# filename: graph/federation.go
|
||||
# package: graph
|
||||
|
||||
# Where should any generated models go?
|
||||
model:
|
||||
filename: model/models_gen.go
|
||||
package: model
|
||||
|
||||
# Where should the resolver implementations go?
|
||||
resolver:
|
||||
layout: follow-schema
|
||||
dir: resolvers
|
||||
package: resolvers
|
||||
filename_template: "{name}.resolvers.go"
|
||||
# Optional: turn on to not generate template comments above resolvers
|
||||
# omit_template_comment: false
|
||||
|
||||
# Optional: turn on use ` + "`" + `gqlgen:"fieldName"` + "`" + ` tags in your models
|
||||
# struct_tag: json
|
||||
|
||||
# Optional: turn on to use []Thing instead of []*Thing
|
||||
omit_slice_element_pointers: true
|
||||
|
||||
# Optional: turn on to omit Is<Name>() methods to interface and unions
|
||||
# omit_interface_checks : true
|
||||
|
||||
# Optional: turn on to skip generation of ComplexityRoot struct content and Complexity function
|
||||
# omit_complexity: false
|
||||
|
||||
# Optional: turn on to not generate any file notice comments in generated files
|
||||
# omit_gqlgen_file_notice: false
|
||||
|
||||
# Optional: turn on to exclude the gqlgen version in the generated file notice. No effect if `omit_gqlgen_file_notice` is true.
|
||||
# omit_gqlgen_version_in_file_notice: false
|
||||
|
||||
# Optional: turn off to make struct-type struct fields not use pointers
|
||||
# e.g. type Thing struct { FieldA OtherThing } instead of { FieldA *OtherThing }
|
||||
# struct_fields_always_pointers: true
|
||||
|
||||
# Optional: turn off to make resolvers return values instead of pointers for structs
|
||||
# resolvers_always_return_pointers: true
|
||||
|
||||
# Optional: turn on to return pointers instead of values in unmarshalInput
|
||||
# return_pointers_in_unmarshalinput: false
|
||||
|
||||
# Optional: wrap nullable input fields with Omittable
|
||||
nullable_input_omittable: true
|
||||
|
||||
# Optional: set to speed up generation time by not performing a final validation pass.
|
||||
# skip_validation: true
|
||||
|
||||
# Optional: set to skip running `go mod tidy` when generating server code
|
||||
# skip_mod_tidy: true
|
||||
|
||||
# gqlgen will search for any type names in the schema in these go packages
|
||||
# if they match it will use them, otherwise it will generate them.
|
||||
autobind:
|
||||
# - "spurtcms-graphql/graph/model"
|
||||
|
||||
# This section declares type mapping between the GraphQL and go type systems
|
||||
#
|
||||
# The first line in each type will be used as defaults for resolver arguments and
|
||||
# modelgen, the others will be allowed when binding to fields. Configure them to
|
||||
# your liking
|
||||
models:
|
||||
ID:
|
||||
model:
|
||||
- github.com/99designs/gqlgen/graphql.ID
|
||||
- github.com/99designs/gqlgen/graphql.Int
|
||||
- github.com/99designs/gqlgen/graphql.Int64
|
||||
- github.com/99designs/gqlgen/graphql.Int32
|
||||
Int:
|
||||
model:
|
||||
- github.com/99designs/gqlgen/graphql.Int
|
||||
- github.com/99designs/gqlgen/graphql.Int64
|
||||
- github.com/99designs/gqlgen/graphql.Int32
|
||||
CustomString:
|
||||
model:
|
||||
- spurt-cms/graphql/scalars.CustomString
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,23 +0,0 @@
|
||||
package info
|
||||
|
||||
import "errors"
|
||||
|
||||
var (
|
||||
ErrLoadEnv = errors.New("failed to load env file")
|
||||
ErrGinCtx = errors.New("failed to get gin context")
|
||||
ErrAuth = errors.New("unauthorized access")
|
||||
ErrReqApiKey = errors.New("required api token to access graphql server")
|
||||
ErrExpireApiKey = errors.New("graphql api token expired")
|
||||
ErrTenantId = errors.New("tenant id is required")
|
||||
ErrMemberRegisterPerm = errors.New("member register permission denied")
|
||||
ErrFetchTenantDetails = errors.New("failed to get tenant Details")
|
||||
ErrGetImage = errors.New("failed to retrieve the file")
|
||||
ErrGetAwsCreds = errors.New("failed to retrieve the aws credentials")
|
||||
ErrDecodeImg = errors.New("failed to parse the image data")
|
||||
ErrImageResize = errors.New("failed to resize the image")
|
||||
ErrFetchCategoryDetails = errors.New("failed to get the category list")
|
||||
ErrReqMandatory = errors.New("required mandatory fields")
|
||||
ErrNoRowsAffected = errors.New("no rows affected")
|
||||
ErrUpdateViewCount = errors.New("failed to update view count")
|
||||
ErrRecordNotFound = errors.New("record not found")
|
||||
)
|
||||
@@ -1,76 +0,0 @@
|
||||
package loggger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
var (
|
||||
LogFilePath = "graphql/logs/errors.log"
|
||||
|
||||
logger *Logger
|
||||
)
|
||||
|
||||
const (
|
||||
InfoLevel = iota
|
||||
WarningLevel
|
||||
ErrorLevel
|
||||
)
|
||||
|
||||
type Logger struct {
|
||||
Level int
|
||||
InfoLogger *log.Logger
|
||||
WarnLogger *log.Logger
|
||||
ErrorLogger *log.Logger
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
||||
_, err := os.Stat(LogFilePath)
|
||||
|
||||
var LogFile *os.File
|
||||
|
||||
if os.IsNotExist(err) {
|
||||
|
||||
makErr := os.MkdirAll("graphql/log/", 0777)
|
||||
|
||||
if makErr != nil {
|
||||
|
||||
fmt.Println(makErr)
|
||||
|
||||
}
|
||||
|
||||
_, err = os.Create(LogFilePath)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Printf("failed to create log file: %v\n", err)
|
||||
}
|
||||
|
||||
fmt.Println("Created new log file")
|
||||
}
|
||||
|
||||
LogFile, err = os.OpenFile(LogFilePath, os.O_APPEND|os.O_WRONLY, 0666)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Printf("failed to open log file: %v\n", err)
|
||||
}
|
||||
|
||||
logger = &Logger{
|
||||
Level: InfoLevel,
|
||||
InfoLogger: log.New(LogFile, "INFO ", log.LstdFlags|log.Lshortfile),
|
||||
WarnLogger: log.New(LogFile, "WARN ", log.LstdFlags|log.Lshortfile),
|
||||
ErrorLogger: log.New(LogFile, "ERROR ", log.LstdFlags|log.Lshortfile),
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func ErrorLog() *log.Logger {
|
||||
return logger.ErrorLogger
|
||||
}
|
||||
|
||||
func WarnLog() *log.Logger {
|
||||
return logger.ErrorLogger
|
||||
}
|
||||
@@ -1,179 +0,0 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"spurt-cms/graphql/controller"
|
||||
"spurt-cms/graphql/info"
|
||||
"spurt-cms/graphql/model"
|
||||
"time"
|
||||
|
||||
"github.com/99designs/gqlgen/graphql"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/golang-jwt/jwt"
|
||||
"github.com/spurtcms/team"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func AuthMiddleware(ctx context.Context, _ interface{}, next graphql.Resolver) (interface{}, error) {
|
||||
|
||||
c, ok := ctx.Value(controller.GinContext).(*gin.Context)
|
||||
|
||||
if !ok {
|
||||
|
||||
controller.ErrorLog.Printf("%v", info.ErrGinCtx)
|
||||
|
||||
c.AbortWithStatus(http.StatusInternalServerError)
|
||||
|
||||
return nil, info.ErrGinCtx
|
||||
}
|
||||
|
||||
var graphqlSettings model.TblGraphqlSettings
|
||||
|
||||
err := AuthenticateApiKey(c, &graphqlSettings)
|
||||
|
||||
if err != nil {
|
||||
|
||||
controller.ErrorLog.Printf("%v", err)
|
||||
|
||||
c.AbortWithStatus(http.StatusBadRequest)
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tenantDetails, err := controller.NewTeamWP.UserDetails(team.Team{TenantId: graphqlSettings.TenantId})
|
||||
|
||||
if err != nil {
|
||||
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
|
||||
controller.ErrorLog.Printf("%v", info.ErrTenantId)
|
||||
|
||||
c.AbortWithStatus(http.StatusBadRequest)
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
controller.ErrorLog.Printf("%v", err)
|
||||
|
||||
c.AbortWithStatus(http.StatusInternalServerError)
|
||||
|
||||
return nil, err
|
||||
|
||||
}
|
||||
userkey := c.GetHeader("Userkey")
|
||||
|
||||
var userdet *model.Members
|
||||
|
||||
if userkey != "" {
|
||||
|
||||
fmt.Println("checkmemberlogin")
|
||||
|
||||
userdet, err = AuthenticateUserLogin(c, userkey)
|
||||
|
||||
if err != nil {
|
||||
|
||||
controller.ErrorLog.Printf("%v", err)
|
||||
|
||||
c.AbortWithStatus(http.StatusBadRequest)
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fmt.Println(userdet, "userdetails")
|
||||
|
||||
c.Set("userdetails", userdet)
|
||||
|
||||
c.Set("tenantDetails", tenantDetails)
|
||||
|
||||
return next(ctx)
|
||||
}
|
||||
|
||||
func AuthenticateApiKey(c *gin.Context, graphqlSettings *model.TblGraphqlSettings) error {
|
||||
|
||||
apiKey := c.GetHeader("ApiKey")
|
||||
|
||||
err := model.Model.GetApiSettings(apiKey, graphqlSettings)
|
||||
|
||||
if err != nil {
|
||||
|
||||
switch {
|
||||
|
||||
case err == gorm.ErrRecordNotFound && apiKey != "":
|
||||
|
||||
return errors.New("invalid api key")
|
||||
|
||||
case err == gorm.ErrRecordNotFound && apiKey == "":
|
||||
|
||||
return errors.New("api key required")
|
||||
|
||||
default:
|
||||
|
||||
return err
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if graphqlSettings.Duration != "Unlimited" && time.Now().After(graphqlSettings.ExpiryTime) {
|
||||
|
||||
return info.ErrExpireApiKey
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func AuthenticateUserLogin(c *gin.Context, userkey string) (userdetails *model.Members, err error) {
|
||||
|
||||
Claims := jwt.MapClaims{}
|
||||
tkn, err := jwt.ParseWithClaims(userkey, Claims, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(os.Getenv("JWT_SECRET")), nil
|
||||
})
|
||||
var ErrorToken = errors.New("invalid token")
|
||||
if err != nil {
|
||||
if err == jwt.ErrSignatureInvalid {
|
||||
fmt.Println(err, "kkkkk")
|
||||
return &model.Members{}, ErrorToken
|
||||
}
|
||||
|
||||
return &model.Members{}, ErrorToken
|
||||
}
|
||||
|
||||
if !tkn.Valid {
|
||||
fmt.Println(tkn)
|
||||
return &model.Members{}, ErrorToken
|
||||
}
|
||||
usrid := Claims["member_id"]
|
||||
|
||||
tenantid := Claims["tenant_id"]
|
||||
|
||||
fmt.Println(usrid, tenantid, "detailsauth")
|
||||
|
||||
useridint := int(usrid.(float64))
|
||||
|
||||
tenantint := string(tenantid.(string))
|
||||
|
||||
// user, _ := strconv.Atoi(useridint)
|
||||
|
||||
c.Set("memberid", useridint)
|
||||
|
||||
member, _ := controller.MemberInstance.GetMemberDetails(useridint, tenantint)
|
||||
|
||||
return &model.Members{FirstName: member.FirstName, LastName: &member.LastName, Email: member.Email, Mobile: &member.MobileNo, ProfileImage: &member.ProfileImage, ProfileImagePath: &member.ProfileImagePath, Username: &member.Username, ID: &member.Id}, nil
|
||||
}
|
||||
|
||||
func LimitRequestBodySize(limit int64) gin.HandlerFunc {
|
||||
|
||||
return func(c *gin.Context) {
|
||||
|
||||
c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, limit)
|
||||
|
||||
c.Next()
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package middleware
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
func CorsMiddleware()gin.HandlerFunc{
|
||||
|
||||
return func(c *gin.Context) {
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, Authorization, ApiKey, TenantId, accept, origin, Cache-Control, X-Requested-With,Userkey")
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")
|
||||
|
||||
if c.Request.Method == "OPTIONS" {
|
||||
|
||||
c.AbortWithStatus(204)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"spurt-cms/models"
|
||||
"time"
|
||||
|
||||
"gorm.io/datatypes"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
Model ModelConfig
|
||||
)
|
||||
|
||||
type ModelConfig struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
type TblGraphqlSettings struct {
|
||||
Id int `gorm:"primaryKey;auto_increment;"`
|
||||
TokenName string
|
||||
Description string
|
||||
Duration string
|
||||
CreatedBy int
|
||||
CreatedOn time.Time
|
||||
ModifiedBy int
|
||||
ModifiedOn time.Time
|
||||
DeletedBy int
|
||||
DeletedOn time.Time
|
||||
IsDeleted int `gorm:"DEFAULT:0"`
|
||||
Token string
|
||||
ExpiryTime time.Time
|
||||
IsDefault int `gorm:"Default:NULl"`
|
||||
TenantId string
|
||||
}
|
||||
|
||||
type TblMstrTenant struct {
|
||||
Id int `gorm:"primaryKey;auto_increment"`
|
||||
TenantId string
|
||||
IsDeleted int `gorm:"DEFAULT:0"`
|
||||
DeletedBy int `gorm:"DEFAULT:NULL"`
|
||||
DeletedOn time.Time
|
||||
}
|
||||
|
||||
type TblStorageTypes struct {
|
||||
Id int `gorm:"primaryKey;auto_increment"`
|
||||
Local string
|
||||
Aws datatypes.JSONMap
|
||||
Azure datatypes.JSONMap
|
||||
Drive datatypes.JSONMap
|
||||
SelectedType string
|
||||
TenantId string
|
||||
}
|
||||
|
||||
func init() {
|
||||
Model = ModelConfig{DB: models.DB}
|
||||
}
|
||||
|
||||
func (model ModelConfig) GetApiSettings(apikey string, graphqlsettings *TblGraphqlSettings) error {
|
||||
|
||||
if err := model.DB.Debug().Model(TblGraphqlSettings{}).Where("is_deleted = 0 and token = ?", apikey).First(&graphqlsettings).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (model ModelConfig) GetTenantDetails(tenantId string, tenantDetails *TblMstrTenant) error {
|
||||
|
||||
if err := model.DB.Debug().Model(TblMstrTenant{}).Where("is_deleted=0 and id=?", tenantId).First(&tenantDetails).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetStorageType(db *gorm.DB, storageType *TblStorageTypes) error {
|
||||
|
||||
if err := db.Debug().Model(TblStorageTypes{}).First(&storageType).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (model ModelConfig) GettenantByapikey(apikey string) (tenant TblGraphqlSettings, err error) {
|
||||
|
||||
if err := model.DB.Debug().Model(TblGraphqlSettings{}).Where("is_deleted = 0 and token = ?", apikey).First(&tenant).Error; err != nil {
|
||||
|
||||
return TblGraphqlSettings{}, err
|
||||
}
|
||||
|
||||
return tenant, nil
|
||||
}
|
||||
|
||||
func (model ModelConfig) GetUserbyTenantId(tenantid string) (user models.TblUser, err error) {
|
||||
|
||||
if err := model.DB.Debug().Table("tbl_users").Where("is_deleted = 0 and tenant_id = ?", tenantid).First(&user).Error; err != nil {
|
||||
|
||||
return models.TblUser{}, err
|
||||
}
|
||||
|
||||
return user, nil
|
||||
}
|
||||
@@ -1,136 +0,0 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
type MembersListReq struct {
|
||||
Limit int
|
||||
Offset int
|
||||
Keyword string
|
||||
TenantId string
|
||||
Count bool
|
||||
}
|
||||
|
||||
type TblMemberGroup struct {
|
||||
Id int
|
||||
Name string
|
||||
Slug string
|
||||
Description string
|
||||
IsActive int
|
||||
IsDeleted int
|
||||
CreatedOn time.Time
|
||||
CreatedBy int
|
||||
ModifiedOn time.Time `gorm:"default:null"`
|
||||
ModifiedBy int `gorm:"default:null"`
|
||||
DeletedOn time.Time `gorm:"default:null"`
|
||||
DeletedBy int `gorm:"default:null"`
|
||||
TenantId string
|
||||
}
|
||||
|
||||
func (model ModelConfig) MembersList(inputs MembersListReq) (members []Members, count int64, err error) {
|
||||
|
||||
fmt.Println(model.DB, inputs.Count, inputs.Limit, "dbvalue")
|
||||
query := model.DB.Debug().Table("tbl_members").Where("tbl_members.is_deleted = 0").Order("id desc")
|
||||
|
||||
if inputs.TenantId != "" {
|
||||
|
||||
query = query.Where("tbl_members.tenant_id=?", inputs.TenantId)
|
||||
|
||||
}
|
||||
|
||||
if inputs.Keyword != "" {
|
||||
|
||||
query = query.Where("LOWER(TRIM(first_name)) LIKE LOWER(TRIM(?))", "%"+inputs.Keyword+"%")
|
||||
}
|
||||
|
||||
if inputs.Count {
|
||||
|
||||
err = query.Count(&count).Error
|
||||
|
||||
if err != nil {
|
||||
|
||||
return []Members{}, 0, err
|
||||
}
|
||||
}
|
||||
|
||||
if inputs.Limit != 0 {
|
||||
|
||||
query = query.Limit(inputs.Limit)
|
||||
}
|
||||
|
||||
if inputs.Offset != -1 {
|
||||
|
||||
query = query.Offset(inputs.Offset)
|
||||
}
|
||||
|
||||
err = query.Find(&members).Error
|
||||
|
||||
if err != nil {
|
||||
|
||||
return []Members{}, 0, err
|
||||
}
|
||||
|
||||
fmt.Println(members, "mmembersss")
|
||||
return members, count, nil
|
||||
}
|
||||
func (model ModelConfig) CheckMemberLogin(Email string, Password string, userid int, tenantid string) (string, bool, bool, error) {
|
||||
|
||||
var members Members
|
||||
|
||||
err := model.DB.Table("tbl_members").Where("tbl_members.is_deleted = 0 AND tbl_members.email = ? AND tbl_members.created_by = ? AND tbl_members.tenant_id = ?", Email, userid, tenantid).First(&members).Error
|
||||
|
||||
if err != nil {
|
||||
return "", false, false, err
|
||||
}
|
||||
|
||||
if members.Email == "" {
|
||||
return "", false, false, err
|
||||
}
|
||||
|
||||
passerr := bcrypt.CompareHashAndPassword([]byte(members.Password), []byte(Password))
|
||||
|
||||
if passerr != nil || passerr == bcrypt.ErrMismatchedHashAndPassword {
|
||||
|
||||
return "", false, true, passerr
|
||||
}
|
||||
|
||||
token, err := model.CreateToken(members)
|
||||
|
||||
if err != nil {
|
||||
|
||||
return "", false, true, err
|
||||
}
|
||||
|
||||
return token, true, true, nil
|
||||
|
||||
}
|
||||
|
||||
func (model ModelConfig) CreateToken(members Members) (string, error) {
|
||||
|
||||
atClaims := jwt.MapClaims{}
|
||||
atClaims["member_id"] = members.ID
|
||||
atClaims["user_id"] = members.CreatedBy
|
||||
atClaims["tenant_id"] = members.TenantID
|
||||
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
|
||||
|
||||
return token.SignedString([]byte(os.Getenv("JWT_SECRET")))
|
||||
}
|
||||
|
||||
func (model ModelConfig) GetmemberGroup(slug string, tenantid string) (membergrb TblMemberGroup,err error) {
|
||||
|
||||
err1 := model.DB.Table("tbl_member_groups").Where("tbl_member_groups.is_deleted = 0 and slug=? and tbl_member_groups.tenant_id = ?",slug, tenantid).First(&membergrb).Error
|
||||
|
||||
if err1 != nil {
|
||||
return TblMemberGroup{},nil
|
||||
}
|
||||
return TblMemberGroup{}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,450 +0,0 @@
|
||||
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"spurt-cms/graphql/scalars"
|
||||
"time"
|
||||
|
||||
"github.com/99designs/gqlgen/graphql"
|
||||
)
|
||||
|
||||
type AdditionalFields struct {
|
||||
Sections []Section `json:"sections,omitempty"`
|
||||
Fields []Field `json:"fields,omitempty"`
|
||||
}
|
||||
|
||||
type Author struct {
|
||||
ID int `json:"id"`
|
||||
FirstName string `json:"firstName"`
|
||||
LastName string `json:"lastName"`
|
||||
Email string `json:"email"`
|
||||
MobileNo *string `json:"mobileNo,omitempty"`
|
||||
IsActive *int `json:"isActive,omitempty"`
|
||||
ProfileImagePath *string `json:"profileImagePath,omitempty"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBy,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
RoleID *int `json:"roleId,omitempty"`
|
||||
RoleName *string `json:"roleName,omitempty"`
|
||||
NameString *string `json:"NameString,omitempty"`
|
||||
}
|
||||
|
||||
type Category struct {
|
||||
ID int `json:"id"`
|
||||
CategoryName string `json:"categoryName"`
|
||||
CategorySlug string `json:"categorySlug"`
|
||||
Description string `json:"description"`
|
||||
ImagePath string `json:"imagePath"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBy,omitempty"`
|
||||
ParentID int `json:"parentId"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type CategoryDetails struct {
|
||||
Categorylist []Category `json:"categorylist"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type CategoryFilter struct {
|
||||
CategoryGroupID graphql.Omittable[*int] `json:"categoryGroupId,omitempty"`
|
||||
HierarchyLevel graphql.Omittable[*int] `json:"hierarchyLevel,omitempty"`
|
||||
ExcludeGroup graphql.Omittable[*bool] `json:"excludeGroup,omitempty"`
|
||||
ExcludeParent graphql.Omittable[*bool] `json:"excludeParent,omitempty"`
|
||||
ExactLevelOnly graphql.Omittable[*bool] `json:"exactLevelOnly,omitempty"`
|
||||
CheckEntriesPresence graphql.Omittable[*bool] `json:"checkEntriesPresence,omitempty"`
|
||||
CategoryGroupSlug graphql.Omittable[*string] `json:"categoryGroupSlug,omitempty"`
|
||||
ChannelSlug graphql.Omittable[*string] `json:"channelSlug,omitempty"`
|
||||
}
|
||||
|
||||
type Channel struct {
|
||||
ID int `json:"id"`
|
||||
ChannelName string `json:"channelName"`
|
||||
ChannelDescription string `json:"channelDescription"`
|
||||
SlugName string `json:"slugName"`
|
||||
FieldGroupID int `json:"fieldGroupId"`
|
||||
IsActive int `json:"isActive"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
IsDeleted int `json:"isDeleted"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBy,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type ChannelDetails struct {
|
||||
Channellist []Channel `json:"channellist"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type ChannelEntries struct {
|
||||
ID int `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Slug string `json:"slug"`
|
||||
Description scalars.CustomString `json:"description"`
|
||||
UserID int `json:"userId"`
|
||||
ChannelID int `json:"channelId"`
|
||||
Status int `json:"status"`
|
||||
IsActive int `json:"isActive"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
ModifiedBy *int `json:"modifiedBy,omitempty"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
CoverImage string `json:"coverImage"`
|
||||
ThumbnailImage string `json:"thumbnailImage"`
|
||||
MetaTitle string `json:"metaTitle"`
|
||||
MetaDescription string `json:"metaDescription"`
|
||||
Keyword string `json:"keyword"`
|
||||
CategoriesID string `json:"categoriesId"`
|
||||
RelatedArticles string `json:"relatedArticles"`
|
||||
FeaturedEntry int `json:"featuredEntry"`
|
||||
ViewCount int `json:"viewCount"`
|
||||
Author *string `json:"author,omitempty"`
|
||||
SortOrder *int `json:"sortOrder,omitempty"`
|
||||
CreateTime *time.Time `json:"createTime,omitempty"`
|
||||
PublishedTime *time.Time `json:"publishedTime,omitempty"`
|
||||
ReadingTime *int `json:"readingTime,omitempty"`
|
||||
Tags *string `json:"tags,omitempty"`
|
||||
Excerpt *string `json:"excerpt,omitempty"`
|
||||
ImageAltTag *string `json:"imageAltTag,omitempty"`
|
||||
Categories [][]Category `json:"categories,omitempty"`
|
||||
AdditionalFields *AdditionalFields `json:"additionalFields,omitempty"`
|
||||
AuthorDetails *Author `json:"authorDetails,omitempty"`
|
||||
MemberProfile *MemberProfile `json:"memberProfile,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
ContentChunk *Chunk `json:"contentChunk,omitempty"`
|
||||
CtaLink *string `json:"ctaLink,omitempty"`
|
||||
SavedFlag *bool `json:"savedFlag,omitempty"`
|
||||
PreviewLink *string `json:"PreviewLink,omitempty"`
|
||||
UUID *string `json:"Uuid,omitempty"`
|
||||
}
|
||||
|
||||
type ChannelEntryDetails struct {
|
||||
ChannelEntriesList []ChannelEntries `json:"channelEntriesList"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type Chunk struct {
|
||||
Data []string `json:"data"`
|
||||
Length int `json:"length"`
|
||||
}
|
||||
|
||||
type CountUpdate struct {
|
||||
Count int `json:"count"`
|
||||
Status bool `json:"status"`
|
||||
}
|
||||
|
||||
type Course struct {
|
||||
ID int `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
ImageName string `json:"imageName"`
|
||||
ImagePath string `json:"imagePath"`
|
||||
Category int `json:"category"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type CourseDetails struct {
|
||||
Lesson []Lesson `json:"lesson"`
|
||||
Section []Sections `json:"section"`
|
||||
}
|
||||
|
||||
type CourseLists struct {
|
||||
Courselist []Course `json:"courselist"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type EntriesAdditionalData struct {
|
||||
AuthorDetails graphql.Omittable[*bool] `json:"authorDetails,omitempty"`
|
||||
MemberProfile graphql.Omittable[*bool] `json:"memberProfile,omitempty"`
|
||||
AdditionalFields graphql.Omittable[*bool] `json:"additionalFields,omitempty"`
|
||||
Categories graphql.Omittable[*bool] `json:"categories,omitempty"`
|
||||
SavedList graphql.Omittable[*bool] `json:"savedList,omitempty"`
|
||||
MemberID graphql.Omittable[*int] `json:"MemberId,omitempty"`
|
||||
}
|
||||
|
||||
type EntriesFilter struct {
|
||||
ChannelID graphql.Omittable[*int] `json:"channelId,omitempty"`
|
||||
CategoryID graphql.Omittable[*int] `json:"categoryId,omitempty"`
|
||||
CategorySlug graphql.Omittable[*string] `json:"categorySlug,omitempty"`
|
||||
GetChildCategories graphql.Omittable[*bool] `json:"getChildCategories,omitempty"`
|
||||
Status graphql.Omittable[*string] `json:"Status,omitempty"`
|
||||
ChannelName graphql.Omittable[*string] `json:"ChannelName,omitempty"`
|
||||
}
|
||||
|
||||
type EntrySave struct {
|
||||
EntryID int `json:"entryId"`
|
||||
UserID int `json:"userId"`
|
||||
TenantID string `json:"tenantId"`
|
||||
Save bool `json:"save"`
|
||||
}
|
||||
|
||||
type Field struct {
|
||||
ID int `json:"id"`
|
||||
FieldName string `json:"fieldName"`
|
||||
FieldTypeID int `json:"fieldTypeId"`
|
||||
MandatoryField int `json:"mandatoryField"`
|
||||
OptionExist int `json:"optionExist"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBY,omitempty"`
|
||||
FieldDesc string `json:"fieldDesc"`
|
||||
OrderIndex int `json:"orderIndex"`
|
||||
ImagePath string `json:"imagePath"`
|
||||
DatetimeFormat *string `json:"datetimeFormat,omitempty"`
|
||||
TimeFormat *string `json:"timeFormat,omitempty"`
|
||||
SectionParentID *int `json:"sectionParentId,omitempty"`
|
||||
CharacterAllowed *int `json:"characterAllowed,omitempty"`
|
||||
FieldTypeName string `json:"fieldTypeName"`
|
||||
FieldValue *FieldValue `json:"fieldValue,omitempty"`
|
||||
FieldOptions []FieldOptions `json:"fieldOptions,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type FieldOptions struct {
|
||||
ID int `json:"id"`
|
||||
OptionName string `json:"optionName"`
|
||||
OptionValue string `json:"optionValue"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBY,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type FieldValue struct {
|
||||
ID int `json:"id"`
|
||||
FieldValue string `json:"fieldValue"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBY,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type Filter struct {
|
||||
Limit graphql.Omittable[*int] `json:"limit,omitempty"`
|
||||
Offset graphql.Omittable[*int] `json:"offset,omitempty"`
|
||||
IsActive graphql.Omittable[*bool] `json:"isActive,omitempty"`
|
||||
Keyword graphql.Omittable[*string] `json:"keyword,omitempty"`
|
||||
Location graphql.Omittable[*string] `json:"location,omitempty"`
|
||||
Experience graphql.Omittable[*string] `json:"Experience,omitempty"`
|
||||
Posteddate graphql.Omittable[*string] `json:"posteddate,omitempty"`
|
||||
}
|
||||
|
||||
type ForgotPasswordResponse struct {
|
||||
Message string `json:"message"`
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type GeneralInfo struct {
|
||||
CompanyName string `json:"companyName"`
|
||||
LogoPath string `json:"logoPath"`
|
||||
ExpandLogoPath string `json:"expandLogoPath"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type Lesson struct {
|
||||
ID int `json:"id"`
|
||||
CourseID int `json:"courseId"`
|
||||
SectionID int `json:"sectionId"`
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"`
|
||||
EmbedLink string `json:"embedLink"`
|
||||
FileName string `json:"fileName"`
|
||||
FilePath string `json:"filePath"`
|
||||
LessonType string `json:"lessonType"`
|
||||
OrderIndex int `json:"orderIndex"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type MemberArguments struct {
|
||||
Module graphql.Omittable[*int] `json:"module,omitempty"`
|
||||
TenantID graphql.Omittable[*string] `json:"tenantId,omitempty"`
|
||||
}
|
||||
|
||||
type MemberCheckLoginResponse struct {
|
||||
Email bool `json:"email"`
|
||||
Password bool `json:"password"`
|
||||
Message string `json:"message"`
|
||||
Token string `json:"token"`
|
||||
Success bool `json:"success"`
|
||||
MemberDetails *Members `json:"memberDetails,omitempty"`
|
||||
}
|
||||
|
||||
type MemberDetails struct {
|
||||
ID graphql.Omittable[*int] `json:"id,omitempty"`
|
||||
FirstName string `json:"firstName"`
|
||||
LastName graphql.Omittable[*string] `json:"lastName,omitempty"`
|
||||
Mobile graphql.Omittable[*string] `json:"mobile,omitempty"`
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
IsActive graphql.Omittable[*int] `json:"isActive,omitempty"`
|
||||
ProfileImage graphql.Omittable[*string] `json:"profileImage,omitempty"`
|
||||
ProfileImagePath graphql.Omittable[*string] `json:"profileImagePath,omitempty"`
|
||||
Username graphql.Omittable[*string] `json:"username,omitempty"`
|
||||
GroupID graphql.Omittable[*int] `json:"groupId,omitempty"`
|
||||
UserID int `json:"userId"`
|
||||
TenantID string `json:"tenantId"`
|
||||
Message graphql.Omittable[*string] `json:"message,omitempty"`
|
||||
}
|
||||
|
||||
type MemberInfo struct {
|
||||
Email string `json:"email"`
|
||||
TenantID string `json:"tenantId"`
|
||||
URL string `json:"url"`
|
||||
}
|
||||
|
||||
type MemberProfile struct {
|
||||
ID int `json:"id"`
|
||||
MemberID int `json:"memberId"`
|
||||
ProfileName string `json:"profileName"`
|
||||
ProfileSlug string `json:"profileSlug"`
|
||||
ProfilePage *string `json:"profilePage,omitempty"`
|
||||
MemberDetails any `json:"memberDetails,omitempty"`
|
||||
CompanyName *string `json:"companyName,omitempty"`
|
||||
CompanyLocation *string `json:"companyLocation,omitempty"`
|
||||
CompanyLogo *string `json:"companyLogo,omitempty"`
|
||||
About *string `json:"about,omitempty"`
|
||||
SeoTitle *string `json:"seoTitle,omitempty"`
|
||||
SeoDescription *string `json:"seoDescription,omitempty"`
|
||||
SeoKeyword *string `json:"seoKeyword,omitempty"`
|
||||
Linkedin *string `json:"linkedin,omitempty"`
|
||||
Twitter *string `json:"twitter,omitempty"`
|
||||
Website *string `json:"website,omitempty"`
|
||||
CreatedBy *int `json:"createdBy,omitempty"`
|
||||
CreatedOn *time.Time `json:"createdOn,omitempty"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBy,omitempty"`
|
||||
ClaimStatus *int `json:"claimStatus,omitempty"`
|
||||
IsActive *int `json:"IsActive,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
ClaimDate *time.Time `json:"claimDate,omitempty"`
|
||||
}
|
||||
|
||||
type MemberResetpassInfo struct {
|
||||
NewPassword string `json:"newPassword"`
|
||||
ConfrimPassword string `json:"confrimPassword"`
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
type MemberSettings struct {
|
||||
ID int `json:"id"`
|
||||
AllowRegistration int `json:"allowRegistration"`
|
||||
MemberLogin string `json:"memberLogin"`
|
||||
ModifiedBy *int `json:"modifiedBy,omitempty"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
NotificationUsers string `json:"notificationUsers"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type MemberSignin struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
UserID int `json:"userId"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type Members struct {
|
||||
ID *int `json:"Id,omitempty"`
|
||||
FirstName string `json:"firstName"`
|
||||
LastName *string `json:"lastName,omitempty"`
|
||||
Mobile *string `json:"mobile,omitempty"`
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
IsActive *int `json:"isActive,omitempty"`
|
||||
ProfileImage *string `json:"profileImage,omitempty"`
|
||||
ProfileImagePath *string `json:"profileImagePath,omitempty"`
|
||||
Username *string `json:"username,omitempty"`
|
||||
GroupID *int `json:"groupId,omitempty"`
|
||||
CreatedBy *int `json:"createdBy,omitempty"`
|
||||
CreatedOn *time.Time `json:"createdOn,omitempty"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBy,omitempty"`
|
||||
TenantID string `json:"tenantId"`
|
||||
IsDeleted int `json:"isDeleted"`
|
||||
StorageType *string `json:"storageType,omitempty"`
|
||||
NameString *string `json:"NameString,omitempty"`
|
||||
}
|
||||
|
||||
type MembersDetails struct {
|
||||
MembersList []Members `json:"membersList"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type Mutation struct {
|
||||
}
|
||||
|
||||
type Query struct {
|
||||
}
|
||||
|
||||
type Section struct {
|
||||
ID int `json:"id"`
|
||||
SectionName string `json:"sectionName"`
|
||||
SectionTypeID int `json:"sectionTypeId"`
|
||||
CreatedOn time.Time `json:"createdOn"`
|
||||
CreatedBy int `json:"createdBy"`
|
||||
ModifiedOn *time.Time `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy *int `json:"modifiedBY,omitempty"`
|
||||
OrderIndex int `json:"orderIndex"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type Sections struct {
|
||||
ID int `json:"id"`
|
||||
CourseID int `json:"courseId"`
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"`
|
||||
OrderIndex int `json:"orderIndex"`
|
||||
TenantID string `json:"tenantId"`
|
||||
}
|
||||
|
||||
type SocialLoginInput struct {
|
||||
FirstName string `json:"firstName"`
|
||||
LastName graphql.Omittable[*string] `json:"lastName,omitempty"`
|
||||
Email string `json:"email"`
|
||||
Password graphql.Omittable[*string] `json:"password,omitempty"`
|
||||
Username graphql.Omittable[*string] `json:"username,omitempty"`
|
||||
}
|
||||
|
||||
type SocialLoginResponse struct {
|
||||
Message string `json:"message"`
|
||||
Token string `json:"token"`
|
||||
Userid int `json:"userid"`
|
||||
}
|
||||
|
||||
type Sort struct {
|
||||
SortBy graphql.Omittable[*string] `json:"sortBy,omitempty"`
|
||||
Order graphql.Omittable[*int] `json:"order,omitempty"`
|
||||
}
|
||||
|
||||
type UpdateMember struct {
|
||||
ID int `json:"Id"`
|
||||
FirstName string `json:"firstName"`
|
||||
LastName graphql.Omittable[*string] `json:"lastName,omitempty"`
|
||||
Mobile string `json:"mobile"`
|
||||
Email string `json:"email"`
|
||||
Password graphql.Omittable[*string] `json:"password,omitempty"`
|
||||
IsActive graphql.Omittable[*int] `json:"isActive,omitempty"`
|
||||
ProfileImage graphql.Omittable[*string] `json:"profileImage,omitempty"`
|
||||
ProfileImagePath graphql.Omittable[*string] `json:"profileImagePath,omitempty"`
|
||||
Username graphql.Omittable[*string] `json:"username,omitempty"`
|
||||
GroupID graphql.Omittable[*int] `json:"groupId,omitempty"`
|
||||
CreatedBy graphql.Omittable[*int] `json:"createdBy,omitempty"`
|
||||
CreatedOn graphql.Omittable[*time.Time] `json:"createdOn,omitempty"`
|
||||
ModifiedOn graphql.Omittable[*time.Time] `json:"modifiedOn,omitempty"`
|
||||
ModifiedBy graphql.Omittable[*int] `json:"modifiedBy,omitempty"`
|
||||
TenantID graphql.Omittable[*string] `json:"tenantId,omitempty"`
|
||||
RemoveImage graphql.Omittable[*bool] `json:"removeImage,omitempty"`
|
||||
}
|
||||
|
||||
type UpdatememberResponse struct {
|
||||
MemberDetails *Members `json:"memberDetails"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.4 KiB |
-1
@@ -1 +0,0 @@
|
||||
function scrollSpy(){var l=5,e=document.querySelector("html"),c=(e&&(e=window.getComputedStyle(e).scrollPaddingTop)&&"string"==typeof e&&"auto"!==e&&e.endsWith("px")&&(l+=parseInt(e.split("px")[0])),"nav-scroll-active"),i=null,d=[];function t(){i=null;var e=document.querySelectorAll("[data-traverse-target]");Array.prototype.forEach.call(e,function(e){d.push({id:e.id,top:e.offsetTop})})}var n=debounce(function(){t(),o()},500),o=debounce(function(){var e,t,n,o,r=(e=>{for(var t=e+l,n=0;n<d.length;n++){var o=d[n+1];if(t>=d[n].top&&(!o||t<o.top))return n}return-1})(document.documentElement.scrollTop||document.body.scrollTop);r!==i&&(r=d[i=r],e=document.querySelector("."+c),t=s(r=r?document.querySelector('#nav a[href="#'+r.id+'"]'):null),n=(o=s(e))!==t,o&&n&&u(o,!1),t&&n&&u(t,!0),r&&(r.classList.add(c),r.scrollIntoViewIfNeeded?r.scrollIntoViewIfNeeded():!r.scrollIntoView||0<=(o=(o=r).getBoundingClientRect()).top&&0<=o.left&&o.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&o.right<=(window.innerWidth||document.documentElement.clientWidth)||r.scrollIntoView({block:"center",inline:"start"})),e)&&e.classList.remove(c)},100);function u(e,t){for(var n=t?"add":"remove";e;)e.classList[n]("nav-scroll-expand"),e=s(e.parentNode)}function s(e){return e&&e.closest?e.closest(".nav-group-section"):null}setTimeout(function(){t(),o(),window.addEventListener("scroll",o),window.addEventListener("resize",n)},300)}function toggleMenu(){var t="drawer-open",e=document.querySelector("#spectaql .sidebar-open-button"),n=document.querySelector("#spectaql #sidebar .close-button"),o=document.querySelector("#spectaql .drawer-overlay");function r(){var e=document.querySelector("#spectaql #page");e.classList.contains(t)?e.classList.remove(t):e.classList.add(t)}e.addEventListener("click",r),n.addEventListener("click",r),o.addEventListener("click",r)}function debounce(e,t){var n=null;return function(){clearTimeout(n),n=setTimeout(function(){e.apply(null)},t)}}window.addEventListener("DOMContentLoaded",e=>{toggleMenu(),scrollSpy()});
|
||||
File diff suppressed because it is too large
Load Diff
-1
File diff suppressed because one or more lines are too long
@@ -1,27 +0,0 @@
|
||||
package resolvers
|
||||
|
||||
// This file will be automatically regenerated based on the schema, any resolver implementations
|
||||
// will be copied through when generating and any unknown code will be moved to the end.
|
||||
// Code generated by github.com/99designs/gqlgen version v0.17.66
|
||||
|
||||
import (
|
||||
"context"
|
||||
"spurt-cms/graphql/controller"
|
||||
"spurt-cms/graphql/graph"
|
||||
"spurt-cms/graphql/model"
|
||||
)
|
||||
|
||||
// CategoryList is the resolver for the CategoryList field.
|
||||
func (r *queryResolver) CategoryList(ctx context.Context, categoryFilter *model.CategoryFilter, commonFilter *model.Filter) (*model.CategoryDetails, error) {
|
||||
return controller.CategoryList(ctx, categoryFilter, commonFilter)
|
||||
}
|
||||
|
||||
// GeneralInformation is the resolver for the GeneralInformation field.
|
||||
func (r *queryResolver) GeneralInformation(ctx context.Context, tenantID *string) (*model.GeneralInfo, error) {
|
||||
return controller.GeneralInfo(ctx, tenantID)
|
||||
}
|
||||
|
||||
// Query returns graph.QueryResolver implementation.
|
||||
func (r *Resolver) Query() graph.QueryResolver { return &queryResolver{r} }
|
||||
|
||||
type queryResolver struct{ *Resolver }
|
||||
@@ -1,52 +0,0 @@
|
||||
package resolvers
|
||||
|
||||
// This file will be automatically regenerated based on the schema, any resolver implementations
|
||||
// will be copied through when generating and any unknown code will be moved to the end.
|
||||
// Code generated by github.com/99designs/gqlgen version v0.17.66
|
||||
|
||||
import (
|
||||
"context"
|
||||
"spurt-cms/graphql/controller"
|
||||
"spurt-cms/graphql/graph"
|
||||
"spurt-cms/graphql/model"
|
||||
)
|
||||
|
||||
// UpdateEntryViewCount is the resolver for the UpdateEntryViewCount field.
|
||||
func (r *mutationResolver) UpdateEntryViewCount(ctx context.Context, id *int, slug *string) (*model.CountUpdate, error) {
|
||||
return controller.UpdateEntryViewCount(ctx, id, slug)
|
||||
}
|
||||
|
||||
// EntrySaveUpdate is the resolver for the EntrySaveUpdate field.
|
||||
func (r *mutationResolver) EntrySaveUpdate(ctx context.Context, input model.EntrySave) (string, error) {
|
||||
return controller.EntrySaveUpdate(ctx, &input)
|
||||
}
|
||||
|
||||
// ChannelList is the resolver for the ChannelList field.
|
||||
func (r *queryResolver) ChannelList(ctx context.Context, filter *model.Filter, sort *model.Sort) (*model.ChannelDetails, error) {
|
||||
return controller.ChannelList(ctx, filter, sort)
|
||||
}
|
||||
|
||||
// ChannelDetail is the resolver for the ChannelDetail field.
|
||||
func (r *queryResolver) ChannelDetail(ctx context.Context, channelID *int, channelSlug *string, isActive *bool) (*model.Channel, error) {
|
||||
return controller.ChannelDetails(ctx, channelID, channelSlug, isActive)
|
||||
}
|
||||
|
||||
// ChannelEntriesList is the resolver for the ChannelEntriesList field.
|
||||
func (r *queryResolver) ChannelEntriesList(ctx context.Context, commonFilter *model.Filter, sort *model.Sort, entryFilter *model.EntriesFilter, additionalData *model.EntriesAdditionalData) (*model.ChannelEntryDetails, error) {
|
||||
return controller.ChannelEntriesList(ctx, commonFilter, sort, entryFilter, additionalData)
|
||||
}
|
||||
|
||||
// ChannelEntryDetail is the resolver for the ChannelEntryDetail field.
|
||||
func (r *queryResolver) ChannelEntryDetail(ctx context.Context, id *int, slug *string, additionalData *model.EntriesAdditionalData, channelID *int, memberID *int) (*model.ChannelEntries, error) {
|
||||
return controller.ChannelEntryDetail(ctx, id, slug, additionalData, channelID, memberID)
|
||||
}
|
||||
|
||||
// TopAuthorsList is the resolver for the TopAuthorsList field.
|
||||
func (r *queryResolver) TopAuthorsList(ctx context.Context, id *string) ([]*model.Author, error) {
|
||||
return controller.TopAuthorsList(ctx, id)
|
||||
}
|
||||
|
||||
// Mutation returns graph.MutationResolver implementation.
|
||||
func (r *Resolver) Mutation() graph.MutationResolver { return &mutationResolver{r} }
|
||||
|
||||
type mutationResolver struct{ *Resolver }
|
||||
@@ -1,21 +0,0 @@
|
||||
package resolvers
|
||||
|
||||
// This file will be automatically regenerated based on the schema, any resolver implementations
|
||||
// will be copied through when generating and any unknown code will be moved to the end.
|
||||
// Code generated by github.com/99designs/gqlgen version v0.17.66
|
||||
|
||||
import (
|
||||
"context"
|
||||
"spurt-cms/graphql/controller"
|
||||
"spurt-cms/graphql/model"
|
||||
)
|
||||
|
||||
// CourseList is the resolver for the CourseList field.
|
||||
func (r *queryResolver) CourseList(ctx context.Context, tenantID *string, status *int, categoryID *int) (*model.CourseLists, error) {
|
||||
return controller.CourseList(ctx, tenantID, status, categoryID)
|
||||
}
|
||||
|
||||
// CoursedetailList is the resolver for the CoursedetailList field.
|
||||
func (r *queryResolver) CoursedetailList(ctx context.Context, tenantID *string, courseID *int) (*model.CourseDetails, error) {
|
||||
return controller.CourseDetails(ctx, tenantID, courseID)
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
package resolvers
|
||||
|
||||
// This file will be automatically regenerated based on the schema, any resolver implementations
|
||||
// will be copied through when generating and any unknown code will be moved to the end.
|
||||
// Code generated by github.com/99designs/gqlgen version v0.17.66
|
||||
|
||||
import (
|
||||
"context"
|
||||
"spurt-cms/graphql/controller"
|
||||
"spurt-cms/graphql/model"
|
||||
)
|
||||
|
||||
// MemberRegister is the resolver for the memberRegister field.
|
||||
func (r *mutationResolver) MemberRegister(ctx context.Context, input model.MemberDetails, arguments *model.MemberArguments) (bool, error) {
|
||||
return controller.MemberRegister(ctx, &input, arguments)
|
||||
}
|
||||
|
||||
// MemberCheckLogin is the resolver for the memberCheckLogin field.
|
||||
func (r *mutationResolver) MemberCheckLogin(ctx context.Context, input model.MemberSignin) (*model.MemberCheckLoginResponse, error) {
|
||||
return controller.MemberLogin(ctx, &input)
|
||||
}
|
||||
|
||||
// ForgotPassword is the resolver for the forgotPassword field.
|
||||
func (r *mutationResolver) ForgotPassword(ctx context.Context, input model.MemberInfo) (*model.ForgotPasswordResponse, error) {
|
||||
return controller.ForgotPassword(ctx, &input)
|
||||
}
|
||||
|
||||
// ResetPassword is the resolver for the resetPassword field.
|
||||
func (r *mutationResolver) ResetPassword(ctx context.Context, input model.MemberResetpassInfo) (bool, error) {
|
||||
return controller.ResetPassword(ctx, &input)
|
||||
}
|
||||
|
||||
// MemberSocialLogin is the resolver for the memberSocialLogin field.
|
||||
func (r *mutationResolver) MemberSocialLogin(ctx context.Context, input model.SocialLoginInput) (*model.SocialLoginResponse, error) {
|
||||
return controller.MemberSocialLogin(ctx, &input)
|
||||
}
|
||||
|
||||
// UpdateMemberProfile is the resolver for the updateMemberProfile field.
|
||||
func (r *mutationResolver) UpdateMemberProfile(ctx context.Context, input model.UpdateMember) (*model.UpdatememberResponse, error) {
|
||||
return controller.UpdateMemberProfile(ctx, &input)
|
||||
}
|
||||
|
||||
// MembersList is the resolver for the MembersList field.
|
||||
func (r *queryResolver) MembersList(ctx context.Context, filter *model.Filter) (*model.MembersDetails, error) {
|
||||
return controller.MembersList(ctx, filter)
|
||||
}
|
||||
|
||||
// MemberProfileDetails is the resolver for the MemberProfileDetails field.
|
||||
func (r *queryResolver) MemberProfileDetails(ctx context.Context, id int) (*model.Members, error) {
|
||||
return controller.MemberProfileDetails(ctx, &id)
|
||||
}
|
||||
|
||||
// !!! WARNING !!!
|
||||
// The code below was going to be deleted when updating resolvers. It has been copied here so you have
|
||||
// one last chance to move it out of harms way if you want. There are two reasons this happens:
|
||||
// - When renaming or deleting a resolver the old code will be put in here. You can safely delete
|
||||
// it when you're done.
|
||||
// - You have helper methods in this file. Move them out to keep these resolver files clean.
|
||||
/*
|
||||
func (r *mutationResolver) MemberCheckoutDetails(ctx context.Context, checkouts model.MemberCheckoutDetails) (string, error) {
|
||||
return controller.CreateCheckoutDetails(ctx, &checkouts)
|
||||
}
|
||||
func (r *queryResolver) MembershipLevelList(ctx context.Context, filter *model.Filter, tenantID *string) (*model.MemershipDetail, error) {
|
||||
return controller.MembershipLevelList(ctx, filter, tenantID)
|
||||
// panic(fmt.Errorf("not implemented: MembershipLevelList - MembershipLevelList"))
|
||||
}
|
||||
func (r *queryResolver) MembershipLevelDetails(ctx context.Context, subscriptionid *int, tenantID *string) (*model.MemershipDetail, error) {
|
||||
return controller.MembershipLevelDetails(ctx, subscriptionid, tenantID)
|
||||
|
||||
// panic(fmt.Errorf("not implemented: MembershipLevelDetails - MembershipLevelDetails"))
|
||||
}
|
||||
func (r *queryResolver) Integration(ctx context.Context, tenantID *string) (*model.ListIntegration, error) {
|
||||
return controller.IntegrationList(ctx, tenantID)
|
||||
|
||||
// panic(fmt.Errorf("not implemented: Integration - Integration"))
|
||||
}
|
||||
*/
|
||||
@@ -1,7 +0,0 @@
|
||||
package resolvers
|
||||
|
||||
// This file will not be regenerated automatically.
|
||||
//
|
||||
// It serves as dependency injection for your app, add any dependencies you require here.
|
||||
|
||||
type Resolver struct{}
|
||||
@@ -1,68 +0,0 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"spurt-cms/graphql/controller"
|
||||
"spurt-cms/graphql/graph"
|
||||
"spurt-cms/graphql/middleware"
|
||||
"spurt-cms/graphql/resolvers"
|
||||
"strings"
|
||||
|
||||
"github.com/99designs/gqlgen/graphql/handler"
|
||||
"github.com/99designs/gqlgen/graphql/playground"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func GetEndpointHandlers(r *gin.Engine) *gin.Engine {
|
||||
|
||||
r.Static("/public", "./graphql/public")
|
||||
|
||||
var htmlFilePath []string
|
||||
|
||||
filepath.Walk("./graphql", func(path string, _ fs.FileInfo, _ error) error {
|
||||
|
||||
if strings.HasSuffix(path, ".html") {
|
||||
|
||||
htmlFilePath = append(htmlFilePath, path)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
r.LoadHTMLFiles(htmlFilePath...)
|
||||
|
||||
// r.Use(middleware.LimitRequestBodySize(20 << 20))
|
||||
|
||||
r.Use(middleware.CorsMiddleware())
|
||||
|
||||
r.GET("/image-resize", controller.ImageResize)
|
||||
|
||||
r.GET("/", func(c *gin.Context) {
|
||||
|
||||
h := playground.Handler("GraphQL playground", os.Getenv("GRAPHQL_API_URL"))
|
||||
|
||||
h.ServeHTTP(c.Writer, c.Request)
|
||||
|
||||
})
|
||||
|
||||
r.POST("/query", func(c *gin.Context) {
|
||||
|
||||
execSchema := graph.NewExecutableSchema(graph.Config{Resolvers: &resolvers.Resolver{}, Directives: graph.DirectiveRoot{Auth: middleware.AuthMiddleware}})
|
||||
|
||||
srv := handler.NewDefaultServer(execSchema)
|
||||
|
||||
ctx := context.WithValue(c.Request.Context(), controller.GinContext, c)
|
||||
|
||||
srv.ServeHTTP(c.Writer, c.Request.WithContext(ctx))
|
||||
})
|
||||
|
||||
r.GET("/apidocs", func(c *gin.Context) {
|
||||
|
||||
c.HTML(200, "spectaqldocs.html", nil)
|
||||
})
|
||||
|
||||
return r
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package scalars
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
// Define the maximum length for your string
|
||||
// const MaxLength int = 1000000000000000000
|
||||
|
||||
// CustomString is a custom scalar for strings with length constraints
|
||||
type CustomString string
|
||||
|
||||
func (s *CustomString) UnmarshalJSON(data []byte) error {
|
||||
var str string
|
||||
if err := json.Unmarshal(data, &str); err != nil {
|
||||
return err
|
||||
}
|
||||
*s = CustomString(str)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s CustomString) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(s)
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
type Category{
|
||||
id: Int!
|
||||
categoryName: String!
|
||||
categorySlug: String!
|
||||
description: String!
|
||||
imagePath: String!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
parentId: Int!
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type CategoryDetails{
|
||||
categorylist: [Category!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type GeneralInfo{
|
||||
companyName:String!
|
||||
logoPath:String!
|
||||
expandLogoPath:String!
|
||||
tenantId:String!
|
||||
}
|
||||
|
||||
extend type Query{
|
||||
CategoryList(categoryFilter: CategoryFilter,commonFilter: Filter): CategoryDetails! @auth
|
||||
GeneralInformation(tenantId:String):GeneralInfo! @auth
|
||||
}
|
||||
|
||||
input CategoryFilter{
|
||||
categoryGroupId: Int
|
||||
hierarchyLevel: Int
|
||||
excludeGroup: Boolean
|
||||
excludeParent: Boolean
|
||||
exactLevelOnly: Boolean
|
||||
checkEntriesPresence: Boolean
|
||||
categoryGroupSlug: String
|
||||
channelSlug: String
|
||||
}
|
||||
|
||||
|
||||
@@ -1,213 +0,0 @@
|
||||
directive @auth on FIELD_DEFINITION
|
||||
|
||||
scalar Time
|
||||
|
||||
scalar CustomString
|
||||
|
||||
type Channel{
|
||||
id: Int!
|
||||
channelName: String!
|
||||
channelDescription: String!
|
||||
slugName: String!
|
||||
fieldGroupId: Int!
|
||||
isActive: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
isDeleted: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type ChannelDetails{
|
||||
channellist: [Channel!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type ChannelEntryDetails{
|
||||
channelEntriesList: [ChannelEntries!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type ChannelEntries{
|
||||
id: Int!
|
||||
title: String!
|
||||
slug: String!
|
||||
description: CustomString!
|
||||
userId: Int!
|
||||
channelId: Int!
|
||||
status: Int!
|
||||
isActive: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedBy: Int
|
||||
modifiedOn: Time
|
||||
coverImage: String!
|
||||
thumbnailImage: String!
|
||||
metaTitle: String!
|
||||
metaDescription: String!
|
||||
keyword: String!
|
||||
categoriesId: String!
|
||||
relatedArticles: String!
|
||||
featuredEntry: Int!
|
||||
viewCount: Int!
|
||||
author: String
|
||||
sortOrder: Int
|
||||
createTime: Time
|
||||
publishedTime: Time
|
||||
readingTime: Int
|
||||
tags: String
|
||||
excerpt: String
|
||||
imageAltTag: String
|
||||
categories: [[Category!]!]
|
||||
additionalFields: AdditionalFields
|
||||
authorDetails: Author
|
||||
memberProfile: MemberProfile
|
||||
tenantId: String!
|
||||
contentChunk: Chunk
|
||||
ctaLink: String
|
||||
savedFlag: Boolean
|
||||
PreviewLink: String
|
||||
Uuid: String
|
||||
}
|
||||
|
||||
type Author{
|
||||
id: Int!
|
||||
firstName: String!
|
||||
lastName: String!
|
||||
email: String!
|
||||
mobileNo: String
|
||||
isActive: Int
|
||||
profileImagePath: String
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
tenantId: String!
|
||||
roleId: Int
|
||||
roleName: String
|
||||
NameString: String
|
||||
}
|
||||
|
||||
type AdditionalFields{
|
||||
sections: [Section!]
|
||||
fields: [Field!]
|
||||
}
|
||||
|
||||
type Section{
|
||||
id: Int!
|
||||
sectionName: String!
|
||||
sectionTypeId: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
orderIndex: Int!
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type Field{
|
||||
id: Int!
|
||||
fieldName: String!
|
||||
fieldTypeId: Int!
|
||||
mandatoryField: Int!
|
||||
optionExist: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
fieldDesc: String!
|
||||
orderIndex: Int!
|
||||
imagePath: String!
|
||||
datetimeFormat: String
|
||||
timeFormat: String
|
||||
sectionParentId: Int
|
||||
characterAllowed: Int
|
||||
fieldTypeName: String!
|
||||
fieldValue: FieldValue
|
||||
fieldOptions: [FieldOptions!]
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type FieldValue{
|
||||
id: Int!
|
||||
fieldValue: String!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type FieldOptions{
|
||||
id: Int!
|
||||
optionName: String!
|
||||
optionValue: String!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type CountUpdate{
|
||||
count: Int!
|
||||
status: Boolean!
|
||||
}
|
||||
|
||||
type Chunk{
|
||||
data: [String!]!
|
||||
length: Int!
|
||||
}
|
||||
|
||||
input EntrySave{
|
||||
entryId: Int!
|
||||
userId: Int!
|
||||
tenantId: String!
|
||||
save: Boolean!
|
||||
}
|
||||
extend type Query{
|
||||
ChannelList(filter: Filter,sort: Sort): ChannelDetails! @auth
|
||||
ChannelDetail(channelId: Int,channelSlug: String,isActive: Boolean): Channel @auth
|
||||
ChannelEntriesList(commonFilter: Filter,sort: Sort,entryFilter: EntriesFilter,AdditionalData: EntriesAdditionalData): ChannelEntryDetails! @auth
|
||||
ChannelEntryDetail(id: Int, slug: String,AdditionalData: EntriesAdditionalData,channelId:Int,memberId:Int): ChannelEntries! @auth
|
||||
TopAuthorsList(id:String):[Author] @auth
|
||||
}
|
||||
|
||||
extend type Mutation{
|
||||
UpdateEntryViewCount(id: Int,slug: String): CountUpdate! @auth
|
||||
EntrySaveUpdate(input: EntrySave!):String! @auth
|
||||
}
|
||||
|
||||
input Filter{
|
||||
limit: Int
|
||||
offset: Int
|
||||
isActive: Boolean
|
||||
keyword: String
|
||||
location: String
|
||||
Experience: String
|
||||
posteddate: String
|
||||
}
|
||||
|
||||
input EntriesFilter{
|
||||
channelId: Int
|
||||
categoryId: Int
|
||||
categorySlug: String
|
||||
getChildCategories: Boolean
|
||||
Status: String
|
||||
ChannelName: String
|
||||
}
|
||||
|
||||
input EntriesAdditionalData{
|
||||
authorDetails: Boolean
|
||||
memberProfile: Boolean
|
||||
additionalFields: Boolean
|
||||
categories: Boolean
|
||||
savedList: Boolean
|
||||
MemberId: Int
|
||||
}
|
||||
|
||||
input Sort{
|
||||
sortBy: String
|
||||
order: Int
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
type Course{
|
||||
id: Int!
|
||||
title: String!
|
||||
description: String!
|
||||
imageName: String!
|
||||
imagePath: String!
|
||||
category: Int!
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type CourseLists{
|
||||
courselist: [Course!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type Lesson{
|
||||
id: Int!
|
||||
courseId: Int!
|
||||
sectionId: Int!
|
||||
title: String!
|
||||
content: String!
|
||||
embedLink: String!
|
||||
fileName: String!
|
||||
filePath: String!
|
||||
lessonType: String!
|
||||
orderIndex: Int!
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type Sections{
|
||||
id: Int!
|
||||
courseId: Int!
|
||||
title: String!
|
||||
content: String!
|
||||
orderIndex: Int!
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
type CourseDetails{
|
||||
lesson: [Lesson!]!
|
||||
section: [Sections!]!
|
||||
}
|
||||
|
||||
|
||||
|
||||
extend type Query{
|
||||
CourseList(tenantId:String,status:Int,categoryId:Int): CourseLists! @auth
|
||||
CoursedetailList(tenantId:String,courseId:Int): CourseDetails! @auth
|
||||
}
|
||||
@@ -1,186 +0,0 @@
|
||||
scalar Any
|
||||
|
||||
type MemberProfile{
|
||||
id: Int!
|
||||
memberId: Int!
|
||||
profileName: String!
|
||||
profileSlug: String!
|
||||
profilePage: String
|
||||
memberDetails: Any
|
||||
companyName: String
|
||||
companyLocation: String
|
||||
companyLogo: String
|
||||
about: String
|
||||
seoTitle: String
|
||||
seoDescription: String
|
||||
seoKeyword: String
|
||||
linkedin: String
|
||||
twitter: String
|
||||
website: String
|
||||
createdBy: Int
|
||||
createdOn: Time
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
claimStatus: Int
|
||||
IsActive: Int
|
||||
tenantId: String!
|
||||
claimDate: Time
|
||||
}
|
||||
|
||||
type MemberSettings {
|
||||
id: Int!
|
||||
allowRegistration: Int!
|
||||
memberLogin: String!
|
||||
modifiedBy: Int
|
||||
modifiedOn: Time
|
||||
notificationUsers: String!
|
||||
tenantId: String!
|
||||
}
|
||||
|
||||
input MemberInfo{
|
||||
email: String!
|
||||
tenantId: String!
|
||||
url: String!
|
||||
}
|
||||
|
||||
input MemberResetpassInfo{
|
||||
newPassword: String!
|
||||
confrimPassword: String!
|
||||
token: String!
|
||||
|
||||
}
|
||||
input MemberSignin{
|
||||
email: String!
|
||||
password: String!
|
||||
userId: Int!
|
||||
tenantId: String!
|
||||
}
|
||||
type MemberCheckLoginResponse {
|
||||
email:Boolean!
|
||||
password:Boolean!
|
||||
message: String!
|
||||
token:String!
|
||||
success: Boolean!
|
||||
memberDetails: Members
|
||||
}
|
||||
|
||||
type ForgotPasswordResponse{
|
||||
message: String!
|
||||
success:Boolean!
|
||||
}
|
||||
|
||||
|
||||
|
||||
extend type Mutation{
|
||||
memberRegister(input: MemberDetails!,arguments: MemberArguments):Boolean! @auth
|
||||
memberCheckLogin(input:MemberSignin!): MemberCheckLoginResponse! @auth
|
||||
forgotPassword(input: MemberInfo!):ForgotPasswordResponse!@auth
|
||||
resetPassword(input: MemberResetpassInfo!):Boolean! @auth
|
||||
memberSocialLogin(input: SocialLoginInput!): SocialLoginResponse! @auth
|
||||
updateMemberProfile(input:UpdateMember!): UpdatememberResponse! @auth
|
||||
|
||||
}
|
||||
|
||||
type UpdatememberResponse{
|
||||
memberDetails: Members!
|
||||
message: String!
|
||||
}
|
||||
input SocialLoginInput{
|
||||
|
||||
firstName: String!
|
||||
lastName: String
|
||||
email: String!
|
||||
password: String
|
||||
username: String
|
||||
|
||||
|
||||
}
|
||||
|
||||
type SocialLoginResponse{
|
||||
message: String!
|
||||
token:String!
|
||||
userid:Int!
|
||||
|
||||
}
|
||||
input MemberDetails{
|
||||
id: Int
|
||||
firstName: String!
|
||||
lastName: String
|
||||
mobile: String
|
||||
email: String!
|
||||
password: String!
|
||||
isActive: Int
|
||||
profileImage: String
|
||||
profileImagePath: String
|
||||
username: String
|
||||
groupId: Int
|
||||
userId: Int!
|
||||
tenantId: String!
|
||||
message: String
|
||||
}
|
||||
input MemberArguments{
|
||||
module: Int
|
||||
tenantId: String
|
||||
}
|
||||
|
||||
type Members{
|
||||
Id: Int
|
||||
firstName: String!
|
||||
lastName: String
|
||||
mobile: String
|
||||
email: String!
|
||||
password: String!
|
||||
isActive: Int
|
||||
profileImage: String
|
||||
profileImagePath: String
|
||||
username: String
|
||||
groupId: Int
|
||||
createdBy: Int
|
||||
createdOn: Time
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
tenantId: String!
|
||||
isDeleted: Int!
|
||||
storageType: String
|
||||
NameString: String
|
||||
|
||||
}
|
||||
input UpdateMember{
|
||||
Id: Int!
|
||||
firstName: String!
|
||||
lastName: String
|
||||
mobile: String!
|
||||
email: String!
|
||||
password: String
|
||||
isActive: Int
|
||||
profileImage: String
|
||||
profileImagePath: String
|
||||
username: String
|
||||
groupId: Int
|
||||
createdBy: Int
|
||||
createdOn: Time
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
tenantId: String
|
||||
removeImage: Boolean
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
type MembersDetails{
|
||||
membersList: [Members!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extend type Query{
|
||||
MembersList(filter: Filter): MembersDetails! @auth
|
||||
|
||||
MemberProfileDetails(id:Int!):Members! @auth
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package graphql
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"spurt-cms/graphql/routes"
|
||||
"sync"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func RunGraphqlServer(wg *sync.WaitGroup) {
|
||||
|
||||
defer wg.Done()
|
||||
|
||||
port := os.Getenv("GRAPHQL_PORT")
|
||||
|
||||
r := gin.Default()
|
||||
|
||||
REngine := routes.GetEndpointHandlers(r)
|
||||
|
||||
if err := REngine.Run(":" + port); err != nil{
|
||||
|
||||
log.Fatal("")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
introspection:
|
||||
schemaFile: ./spectaql/schema.graphqls
|
||||
|
||||
info:
|
||||
title: "Spurtcms API Documentation"
|
||||
description: "This is the API documentation for spurtcms Admin"
|
||||
|
||||
servers:
|
||||
- url: http://devspurtcms.com:8084/query
|
||||
description: Development Server
|
||||
|
||||
spectaql:
|
||||
logoFile: ./spectaql/logo.png
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.4 KiB |
@@ -1,285 +0,0 @@
|
||||
# GraphQL schema example
|
||||
#
|
||||
# https://gqlgen.com/getting-started/
|
||||
|
||||
directive @auth on FIELD_DEFINITION
|
||||
|
||||
scalar Time
|
||||
|
||||
scalar Any
|
||||
|
||||
scalar CustomString
|
||||
|
||||
type Channel{
|
||||
id: Int!
|
||||
channelName: String!
|
||||
channelDescription: String!
|
||||
slugName: String!
|
||||
fieldGroupId: Int!
|
||||
isActive: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
isDeleted: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type ChannelDetails{
|
||||
channellist: [Channel!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type ChannelEntryDetails{
|
||||
channelEntriesList: [ChannelEntries!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type ChannelEntries{
|
||||
id: Int!
|
||||
title: String!
|
||||
slug: String!
|
||||
description: CustomString!
|
||||
userId: Int!
|
||||
channelId: Int!
|
||||
status: Int!
|
||||
isActive: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedBy: Int
|
||||
modifiedOn: Time
|
||||
coverImage: String!
|
||||
thumbnailImage: String!
|
||||
metaTitle: String!
|
||||
metaDescription: String!
|
||||
keyword: String!
|
||||
categoriesId: String!
|
||||
relatedArticles: String!
|
||||
featuredEntry: Int!
|
||||
viewCount: Int!
|
||||
author: String
|
||||
sortOrder: Int
|
||||
createTime: Time
|
||||
publishedTime: Time
|
||||
readingTime: Int
|
||||
tags: String
|
||||
excerpt: String
|
||||
imageAltTag: String
|
||||
categories: [[Category!]!]
|
||||
additionalFields: AdditionalFields
|
||||
authorDetails: Author
|
||||
memberProfile: MemberProfile
|
||||
tenantId: Int!
|
||||
contentChunk: Chunk
|
||||
}
|
||||
|
||||
type Author{
|
||||
id: Int!
|
||||
firstName: String!
|
||||
lastName: String!
|
||||
email: String!
|
||||
mobileNo: String
|
||||
isActive: Int
|
||||
profileImagePath: String
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type AdditionalFields{
|
||||
sections: [Section!]
|
||||
fields: [Field!]
|
||||
}
|
||||
|
||||
type Section{
|
||||
id: Int!
|
||||
sectionName: String!
|
||||
sectionTypeId: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
orderIndex: Int!
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type Field{
|
||||
id: Int!
|
||||
fieldName: String!
|
||||
fieldTypeId: Int!
|
||||
mandatoryField: Int!
|
||||
optionExist: Int!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
fieldDesc: String!
|
||||
orderIndex: Int!
|
||||
imagePath: String!
|
||||
datetimeFormat: String
|
||||
timeFormat: String
|
||||
sectionParentId: Int
|
||||
characterAllowed: Int
|
||||
fieldTypeName: String!
|
||||
fieldValue: FieldValue
|
||||
fieldOptions: [FieldOptions!]
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type FieldValue{
|
||||
id: Int!
|
||||
fieldValue: String!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type FieldOptions{
|
||||
id: Int!
|
||||
optionName: String!
|
||||
optionValue: String!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBY: Int
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type CountUpdate{
|
||||
count: Int!
|
||||
status: Boolean!
|
||||
}
|
||||
|
||||
type Chunk{
|
||||
data: [String!]!
|
||||
length: Int!
|
||||
}
|
||||
|
||||
type MemberProfile{
|
||||
id: Int!
|
||||
memberId: Int!
|
||||
profileName: String!
|
||||
profileSlug: String!
|
||||
profilePage: String
|
||||
memberDetails: Any
|
||||
companyName: String
|
||||
companyLocation: String
|
||||
companyLogo: String
|
||||
about: String
|
||||
seoTitle: String
|
||||
seoDescription: String
|
||||
seoKeyword: String
|
||||
linkedin: String
|
||||
twitter: String
|
||||
website: String
|
||||
createdBy: Int
|
||||
createdOn: Time
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
claimStatus: Int
|
||||
IsActive: Int
|
||||
tenantId: Int!
|
||||
claimDate: Time
|
||||
}
|
||||
|
||||
type MemberSettings {
|
||||
id: Int!
|
||||
allowRegistration: Int!
|
||||
memberLogin: String!
|
||||
modifiedBy: Int
|
||||
modifiedOn: Time
|
||||
notificationUsers: String!
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type Category{
|
||||
id: Int!
|
||||
categoryName: String!
|
||||
categorySlug: String!
|
||||
description: String!
|
||||
imagePath: String!
|
||||
createdOn: Time!
|
||||
createdBy: Int!
|
||||
modifiedOn: Time
|
||||
modifiedBy: Int
|
||||
parentId: Int!
|
||||
tenantId: Int!
|
||||
}
|
||||
|
||||
type CategoryDetails{
|
||||
categorylist: [Category!]!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type Query{
|
||||
ChannelList(filter: Filter,sort: Sort): ChannelDetails! @auth
|
||||
ChannelDetail(channelId: Int,channelSlug: String,isActive: Boolean): Channel @auth
|
||||
ChannelEntriesList(commonFilter: Filter,sort: Sort,entryFilter: EntriesFilter,AdditionalData: EntriesAdditionalData): ChannelEntryDetails! @auth
|
||||
ChannelEntryDetail(id: Int, slug: String,AdditionalData: EntriesAdditionalData): ChannelEntries! @auth
|
||||
CategoryList(categoryFilter: CategoryFilter,commonFilter: Filter): CategoryDetails! @auth
|
||||
}
|
||||
|
||||
type Mutation{
|
||||
UpdateEntryViewCount(id: Int,slug: String): CountUpdate! @auth
|
||||
memberRegister(input: MemberDetails!,arguments: MemberArguments):Boolean!
|
||||
}
|
||||
|
||||
input Filter{
|
||||
limit: Int
|
||||
offset: Int
|
||||
isActive: Boolean
|
||||
keyword: String
|
||||
}
|
||||
|
||||
input EntriesFilter{
|
||||
channelId: Int
|
||||
categoryId: Int
|
||||
categorySlug: String
|
||||
getChildCategories: Boolean
|
||||
Status: String
|
||||
}
|
||||
|
||||
input EntriesAdditionalData{
|
||||
authorDetails: Boolean
|
||||
memberProfile: Boolean
|
||||
additionalFields: Boolean
|
||||
categories: Boolean
|
||||
}
|
||||
|
||||
input Sort{
|
||||
sortBy: String
|
||||
order: Int
|
||||
}
|
||||
|
||||
input MemberDetails{
|
||||
firstName: String!
|
||||
lastName: String
|
||||
mobile: String
|
||||
email: String!
|
||||
password: String
|
||||
isActive: Int
|
||||
profileImage: String
|
||||
profileImagePath: String
|
||||
username: String
|
||||
groupId: Int
|
||||
}
|
||||
|
||||
input MemberArguments{
|
||||
module: Int
|
||||
tenantId: Int
|
||||
}
|
||||
|
||||
input CategoryFilter{
|
||||
categoryGroupId: Int
|
||||
hierarchyLevel: Int
|
||||
excludeGroup: Boolean
|
||||
excludeParent: Boolean
|
||||
exactLevelOnly: Boolean
|
||||
checkEntriesPresence: Boolean
|
||||
categoryGroupSlug: String
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
//go:build tools
|
||||
|
||||
package tools
|
||||
|
||||
import (
|
||||
_ "github.com/99designs/gqlgen"
|
||||
_ "github.com/99designs/gqlgen/graphql/introspection"
|
||||
)
|
||||
@@ -1 +0,0 @@
|
||||
package helper
|
||||
-2096
File diff suppressed because it is too large
Load Diff
+190
-189
@@ -152,9 +152,9 @@
|
||||
"getsupport": "Get SpurtCMS Pro",
|
||||
"explore": "Explore",
|
||||
"aiwritingheading": "Generate AI-powered content with customization.",
|
||||
"selling":"Selling",
|
||||
"courses":"Courses",
|
||||
"listing":"Listing",
|
||||
"selling": "Selling",
|
||||
"courses": "Courses",
|
||||
"listing": "Listing",
|
||||
"Setting": {
|
||||
"title": "Settings",
|
||||
"manageroles": "Manage Roles",
|
||||
@@ -241,7 +241,7 @@
|
||||
"rolelable": "Your role in the system, assigned by the admin, defining your access level.",
|
||||
"emaillable": "Your registered email address for communication and login purposes.",
|
||||
"mobilelable": "Your Phone number that will be used for contact and communication.",
|
||||
"aimodule": "AI Module Settings"
|
||||
"aimodule": "AI Model Settings"
|
||||
},
|
||||
"Emailtemplate": {
|
||||
"searchtemplates": "Search Templates",
|
||||
@@ -1079,7 +1079,6 @@
|
||||
"Product Deleted Successfully": "Product deleted successfully",
|
||||
"Product Updated Successfully": "Product updated successfully",
|
||||
"memstatusnotify": "Member status updated successfully",
|
||||
"Order Deleted Successfully": "Order deleted successfully",
|
||||
"User access permission changed Successfully": "User access permission changed successfully",
|
||||
"User status changed Successfully": "User status changed successfully",
|
||||
"Product Status Changed Successfully": "Product status changed successfully",
|
||||
@@ -1148,38 +1147,38 @@
|
||||
"SubscriptionCreatedSuccessfully": "Subscription created successfully",
|
||||
"SubscriptionUpdaredSuccessfully": "Subscription updated successfully",
|
||||
"SubscriptionDeletedSuccessfully": "Subscription deleted successfully",
|
||||
"AI Module Created Successfully": "AI Module Created Successfully",
|
||||
"AI Module Created Successfully": "AI Model Created Successfully",
|
||||
"Status Changed Successfully": "Status Changed Successfully",
|
||||
"AI Module Updated Successfully": "AI Module Updated Successfully",
|
||||
"AI Module Deleted Successfully": "AI Module Deleted Successfully",
|
||||
"IntegrationUpdatedSuccessfully": "Integration Updated Successfully",
|
||||
"AI Module Updated Successfully": "AI Model Updated Successfully",
|
||||
"AI Module Deleted Successfully": "AI Model Deleted Successfully",
|
||||
"Integration Updated Successfully": "Integration Updated Successfully",
|
||||
"Course Created Successfully": "Course Created Successfully",
|
||||
"Course Deleted Successfully": "Course Deleted Successfully",
|
||||
"Section Created Successfully":"Section Created Successfully",
|
||||
"Section Updated Successfully":"Section Updated Successfully",
|
||||
"Section Deleted Successfully":"Section Deleted Successfully",
|
||||
"Lesson Created Successfully":"Lesson Created Successfully",
|
||||
"Lesson Updated Successfully":"Lesson Updated Successfully",
|
||||
"Lesson Deleted Successfully":"Lesson Deleted Successfully",
|
||||
"Course Published Successfully":"Course Published Successfully",
|
||||
"Course Unpublished Successfully":"Course Unpublished Successfully",
|
||||
"Course Settings Updated Successfully":"Course Settings Updated Successfully",
|
||||
"Integrationreapt":"This Integration Already existing ",
|
||||
"Menu Created Successfully":"Menu Created Successfully",
|
||||
"Menu Updated Successfully":"Menu Updated Successfully",
|
||||
"Menu Deleted Successfully":"Menu Deleted Successfully",
|
||||
"Template Updated Successfully":"Template Updated Successfully",
|
||||
"SEO Details Updated Successfully":"SEO Details Updated Successfully",
|
||||
"Settings Details Updated Successfully":"Settings Details Updated Successfully",
|
||||
"Listing Deleted Successfully":"Listing Deleted Successfully",
|
||||
"Listing Created Successfully":"Listing Created Successfully",
|
||||
"Listing Updated Successfully":"Listing Updated Successfully",
|
||||
"Website Deleted Successfully":"Website Deleted Successfully",
|
||||
"Website Created Successfully":"Website Created Successfully",
|
||||
"Website Updated Successfully":"Website Updated Successfully",
|
||||
"Page Created Successfully":"Page Created Successfully",
|
||||
"Page Updated Successfully":"Page Updated Successfully",
|
||||
"Page Deleted Successfully":"Page Deleted Successfully"
|
||||
"Section Created Successfully": "Section Created Successfully",
|
||||
"Section Updated Successfully": "Section Updated Successfully",
|
||||
"Section Deleted Successfully": "Section Deleted Successfully",
|
||||
"Lesson Created Successfully": "Lesson Created Successfully",
|
||||
"Lesson Updated Successfully": "Lesson Updated Successfully",
|
||||
"Lesson Deleted Successfully": "Lesson Deleted Successfully",
|
||||
"Course Published Successfully": "Course Published Successfully",
|
||||
"Course Unpublished Successfully": "Course Unpublished Successfully",
|
||||
"Course Settings Updated Successfully": "Course Settings Updated Successfully",
|
||||
"Integrationreapt": "This Integration Already existing ",
|
||||
"Menu Created Successfully": "Menu Created Successfully",
|
||||
"Menu Updated Successfully": "Menu Updated Successfully",
|
||||
"Menu Deleted Successfully": "Menu Deleted Successfully",
|
||||
"Template Updated Successfully": "Template Updated Successfully",
|
||||
"SEO Details Updated Successfully": "SEO Details Updated Successfully",
|
||||
"Settings Details Updated Successfully": "Settings Details Updated Successfully",
|
||||
"Listing Deleted Successfully": "Listing Deleted Successfully",
|
||||
"Listing Created Successfully": "Listing Created Successfully",
|
||||
"Listing Updated Successfully": "Listing Updated Successfully",
|
||||
"Website Deleted Successfully": "Website Deleted Successfully",
|
||||
"Website Created Successfully": "Website Created Successfully",
|
||||
"Website Updated Successfully": "Website Updated Successfully",
|
||||
"Page Created Successfully": "Page Created Successfully",
|
||||
"Page Updated Successfully": "Page Updated Successfully",
|
||||
"Page Deleted Successfully": "Page Deleted Successfully"
|
||||
},
|
||||
"DashBoard": {
|
||||
"lastactive": "Last Active",
|
||||
@@ -1705,7 +1704,7 @@
|
||||
"timezoneerror": "Please select the time zone",
|
||||
"countryhead": "Country",
|
||||
"countryplaceholder": "Enter your country",
|
||||
"countryerror": "Please select the country",
|
||||
"countryerror": "Please select the country",
|
||||
"dechead": "Describe",
|
||||
"decplaceholder": "Describe your needs for our precise assistance to you",
|
||||
"decerror": "Please enter the description",
|
||||
@@ -1965,7 +1964,7 @@
|
||||
"membershiplevelemptydesc": "No membership tiers found! Define and customize membership tiers with different access levels and subscription plans.",
|
||||
"deletemembershiplevel": "Delete Membership Level ?",
|
||||
"areyousure": "Are you sure you want to delete this Membership Level ?",
|
||||
"membershipdesc":"Description"
|
||||
"membershipdesc": "Description"
|
||||
},
|
||||
"subscriptions": {
|
||||
"create": "Create Subscription",
|
||||
@@ -2137,8 +2136,8 @@
|
||||
"AImodulesettings": {
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"create": "Create New AI Module",
|
||||
"aimodule": "AI Module",
|
||||
"create": "Create New AI Model",
|
||||
"aimodule": "AI Model",
|
||||
"description": "Description",
|
||||
"lastupdatedon": "Last Updated on",
|
||||
"status": "Status",
|
||||
@@ -2146,9 +2145,9 @@
|
||||
"action": "Action",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"aiemptytitle": "No AI Settings Module found?",
|
||||
"aiemptytitle": "No AI Settings Model found?",
|
||||
"aiemptydesc": "Enhance your system with AI-powered automation and intelligence.Choose a provider,configure settings,and get started today!",
|
||||
"selectmodule": "Select Module",
|
||||
"selectmodule": "Select Model",
|
||||
"selectmoduledesc": "Easily integrate AI capabilities by selecting a module, adding an API key, and defining the AI model.",
|
||||
"openai": "Open AI",
|
||||
"openaidesc": "Utilize state-of-the-art natural language processing for automated content creation and intelligent responses.",
|
||||
@@ -2161,7 +2160,7 @@
|
||||
"descriptionplaceholder": "Please Enter Description",
|
||||
"aimodel": "AI Model",
|
||||
"selectaimodel": "Select AI Model",
|
||||
"aimodelerr":"Please Select AI Model"
|
||||
"aimodelerr": "Please Select AI Model"
|
||||
},
|
||||
"Securitys": {
|
||||
"security": "Security",
|
||||
@@ -2175,49 +2174,49 @@
|
||||
"confirmpasswordinfo": "Re-enter the new password to ensure accuracy and prevent errors."
|
||||
},
|
||||
"Course": {
|
||||
"course":"Course",
|
||||
"manageandorganize":"Manage and organize educational content effortlessly.",
|
||||
"createcourse":"Create Course",
|
||||
"recordsavailable":"Records Available",
|
||||
"all":"All",
|
||||
"selectfilters":"Select Filters",
|
||||
"coursetitle":"Course Title",
|
||||
"entercoursetitle":"Enter Course Title",
|
||||
"status":"Status",
|
||||
"selectstatus":"Select Status",
|
||||
"pricing":"Pricing",
|
||||
"selectpricing":"Select Pricing",
|
||||
"clear":"Clear",
|
||||
"applyfilter":"Apply Filter",
|
||||
"sortby":"Sort By",
|
||||
"lastupdated":"Last Updated",
|
||||
"createddate":"Created Date",
|
||||
"ascending":"Ascending",
|
||||
"descending":"Descending",
|
||||
"createdBy":"Created By",
|
||||
"action":"Action",
|
||||
"lastupdatedon":"Last Updated on ",
|
||||
"createdon":"Created on",
|
||||
"publish":"Publish",
|
||||
"unpublish":"Unpublish",
|
||||
"delete":"Delete",
|
||||
"cancel":"Cancel",
|
||||
"save":"Save",
|
||||
"title":"Title",
|
||||
"enteryourtitle":"Enter Your Title",
|
||||
"titleinfo":"Enter a unique and descriptive title for your course.",
|
||||
"description":"Description",
|
||||
"enteryourdescription":"Enter Your Description",
|
||||
"descriptioninfo":"Provide a detailed summary of the course, highlighting key topics and objectives.",
|
||||
"category":"Category",
|
||||
"categoryinfo":"Select an appropriate category to organize your course for easy discoverability.",
|
||||
"selectcategory":"Select Category",
|
||||
"searchcategory":"Search Category",
|
||||
"uploadcoverimage":"Upload Cover Image",
|
||||
"uploadcoverimageinfo":"Choose an image to visually represent your course.",
|
||||
"browse":"Browse",
|
||||
"uploadnewfiles":"Upload new files or choose from directory",
|
||||
"chooseonly":"Choose only jpg/jpeg/png formats",
|
||||
"course": "Course",
|
||||
"manageandorganize": "Manage and organize educational content effortlessly.",
|
||||
"createcourse": "Create Course",
|
||||
"recordsavailable": "Records Available",
|
||||
"all": "All",
|
||||
"selectfilters": "Select Filters",
|
||||
"coursetitle": "Course Title",
|
||||
"entercoursetitle": "Enter Course Title",
|
||||
"status": "Status",
|
||||
"selectstatus": "Select Status",
|
||||
"pricing": "Pricing",
|
||||
"selectpricing": "Select Pricing",
|
||||
"clear": "Clear",
|
||||
"applyfilter": "Apply Filter",
|
||||
"sortby": "Sort By",
|
||||
"lastupdated": "Last Updated",
|
||||
"createddate": "Created Date",
|
||||
"ascending": "Ascending",
|
||||
"descending": "Descending",
|
||||
"createdBy": "Created By",
|
||||
"action": "Action",
|
||||
"lastupdatedon": "Last Updated on ",
|
||||
"createdon": "Created on",
|
||||
"publish": "Publish",
|
||||
"unpublish": "Unpublish",
|
||||
"delete": "Delete",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"title": "Title",
|
||||
"enteryourtitle": "Enter Your Title",
|
||||
"titleinfo": "Enter a unique and descriptive title for your course.",
|
||||
"description": "Description",
|
||||
"enteryourdescription": "Enter Your Description",
|
||||
"descriptioninfo": "Provide a detailed summary of the course, highlighting key topics and objectives.",
|
||||
"category": "Category",
|
||||
"categoryinfo": "Select an appropriate category to organize your course for easy discoverability.",
|
||||
"selectcategory": "Select Category",
|
||||
"searchcategory": "Search Category",
|
||||
"uploadcoverimage": "Upload Cover Image",
|
||||
"uploadcoverimageinfo": "Choose an image to visually represent your course.",
|
||||
"browse": "Browse",
|
||||
"uploadnewfiles": "Upload new files or choose from directory",
|
||||
"chooseonly": "Choose only jpg/jpeg/png formats",
|
||||
"nocoursesyet": "No Courses Yet!",
|
||||
"startcreating": "Start creating engaging learning experiences today! Add courses that are of a great learning experiences to your learners.",
|
||||
"deletecourse": "Delete Course?",
|
||||
@@ -2246,107 +2245,109 @@
|
||||
"createsection": "Create Section",
|
||||
"updatesection": "Update Section"
|
||||
},
|
||||
"Coursessettings":{
|
||||
"settings":"Settings",
|
||||
"details":"Details",
|
||||
"title":"Title",
|
||||
"titledesc":"Enter a clear and concise title for the course.",
|
||||
"description":"Description",
|
||||
"desccont":"Provide a detailed overview of the course, including key topics and learning outcomes.",
|
||||
"image":"Image",
|
||||
"imagedesc":"Upload a cover image that represents the course. Choose a high-quality image for better engagement.",
|
||||
"chooseimg":"Choose Image",
|
||||
"category":"Category",
|
||||
"catdesc":"Select the appropriate category to classify the course for easy discovery.",
|
||||
"searchcat":"Seach Categories",
|
||||
"options":"Options",
|
||||
"certificate":"Certificate",
|
||||
"cerdesc":"Enable this option if you want to provide a certificate upon course completion.",
|
||||
"cerstatus":"Provide Certificate for this course",
|
||||
"comments":"Comments",
|
||||
"commentsdesc":"Provide any information about pre-requisites for the study of this course or special instructions to the learners.",
|
||||
"active":"Active",
|
||||
"inactive":"In active",
|
||||
"pricing":"Pricing",
|
||||
"offer":"Offer",
|
||||
"offerdesc":"Select the pricing model for your course - free, waitlist, or paid.",
|
||||
"offerchange":"Change Offer Options",
|
||||
"free":"Free",
|
||||
"freedesc":"The course is available to learners at no cost.",
|
||||
"waitlist":"Waitlist",
|
||||
"waitlistdesc":"Learners can register, but access is provided later.",
|
||||
"paid":"Paid",
|
||||
"paiddesc":"The course requires a payment to enroll.",
|
||||
"availability":"Availability",
|
||||
"status":"Status",
|
||||
"statusdesc":"Set the course as active or inactive.",
|
||||
"visibility":"Visibility",
|
||||
"visibilitydesc":"Define who can view and enroll in the course.",
|
||||
"published":"Published",
|
||||
"unpublish":"Unpublished",
|
||||
"draft":"Draft",
|
||||
"selectvisible":"Select Visibility",
|
||||
"public":"Public",
|
||||
"private":"Private",
|
||||
"startdate":"Start Date",
|
||||
"datedesc":"Set a specific date when the course becomes available.",
|
||||
"singuplimit":"Sign-up limit",
|
||||
"singuplimitdesc":"Specify a maximum number of students allowed for the course.",
|
||||
"enterlimits":"Enter Limits",
|
||||
"duration":"Duration",
|
||||
"durationdesc":"Determine how long the course remains accessible after enrollment.",
|
||||
"selectduration":"Select Duration",
|
||||
"month":"Month",
|
||||
"year":"Year",
|
||||
"visiblityerr":"Please choose visibility",
|
||||
"dateerr":"Please choose specific date",
|
||||
"limiterr":"Please Enter Maximum SignUpLimits",
|
||||
"durationerr":"Please choose Course Duration",
|
||||
"pricemodelerr":"Please Select the pricing model for your course"
|
||||
},
|
||||
"Menu":{
|
||||
"website":"Website",
|
||||
"templates":"Templates",
|
||||
"seo":"SEO",
|
||||
"setting":"Setting",
|
||||
"webdesc":"Customize your website and let your brand shine",
|
||||
"bannertitle":"Powerful Website Management Tools",
|
||||
"bannerdesc":"Easily build and customize your website using intuitive controls and flexible templates. The Website tab lets you organize pages, set up navigation, and ensure your content is always up-to-date—helping you deliver a seamless experience for your visitors.",
|
||||
"menu":"Menu",
|
||||
"menuname":"Menu Name",
|
||||
"totalitems":"Total Items",
|
||||
"status":"Status",
|
||||
"lastmodified":"Last Modified",
|
||||
"action":"Action",
|
||||
"createmenu":"Create Menu",
|
||||
"createnewmenu":"Create New Menu",
|
||||
"description":"Description",
|
||||
"managemenu":"Manage Menu",
|
||||
"managemenudesc":"Manage menu options and settings",
|
||||
"choosemenuitem":"Choose Menu Items",
|
||||
"addmenuitems":"Add Menu Items",
|
||||
"addtomenu":"Add to menu",
|
||||
"mostrecent":"Most recent",
|
||||
"viewall":"View all",
|
||||
"selectall":"Select All",
|
||||
"addmenuitem":"Add Menu Item",
|
||||
"labelname":"Label Name",
|
||||
"labelnameplcholder":"Enter label name",
|
||||
"navigationpath":"Navigation path",
|
||||
"navplcholder":"Give link path",
|
||||
"additem":"Add item",
|
||||
"labelnameerr":"Please Enter Label Name",
|
||||
"linkpatherr":" Please Enter Link Path",
|
||||
"menunameerr":"Please Enter Menu Name",
|
||||
"nameduplicateerr":"Menu Name already exists",
|
||||
"descriptionerror":"Please Enter Menu Description",
|
||||
"namelimiterr":"Please Enter 15 Character only",
|
||||
"pathlimiterr":"Please Enter 30 Character only",
|
||||
"removeconfirmation":"Are you sure you want to remove this Menu",
|
||||
"deletemenu":"Delete Menu",
|
||||
"deselectall":"DeselectAll"
|
||||
},
|
||||
"Seo": {
|
||||
"Coursessettings": {
|
||||
"settings": "Settings",
|
||||
"details": "Details",
|
||||
"title": "Title",
|
||||
"titledesc": "Enter a clear and concise title for the course.",
|
||||
"description": "Description",
|
||||
"desccont": "Provide a detailed overview of the course, including key topics and learning outcomes.",
|
||||
"image": "Image",
|
||||
"imagedesc": "Upload a cover image that represents the course. Choose a high-quality image for better engagement.",
|
||||
"chooseimg": "Choose Image",
|
||||
"category": "Category",
|
||||
"catdesc": "Select the appropriate category to classify the course for easy discovery.",
|
||||
"searchcat": "Seach Categories",
|
||||
"options": "Options",
|
||||
"certificate": "Certificate",
|
||||
"cerdesc": "Enable this option if you want to provide a certificate upon course completion.",
|
||||
"cerstatus": "Provide Certificate for this course",
|
||||
"comments": "Comments",
|
||||
"commentsdesc": "Provide any information about pre-requisites for the study of this course or special instructions to the learners.",
|
||||
"active": "Active",
|
||||
"inactive": "In active",
|
||||
"pricing": "Pricing",
|
||||
"offer": "Offer",
|
||||
"offerdesc": "Select the pricing model for your course - free, waitlist, or paid.",
|
||||
"offerchange": "Change Offer Options",
|
||||
"free": "Free",
|
||||
"freedesc": "The course is available to learners at no cost.",
|
||||
"waitlist": "Waitlist",
|
||||
"waitlistdesc": "Learners can register, but access is provided later.",
|
||||
"paid": "Paid",
|
||||
"paiddesc": "The course requires a payment to enroll.",
|
||||
"availability": "Availability",
|
||||
"status": "Status",
|
||||
"statusdesc": "Set the course as active or inactive.",
|
||||
"visibility": "Visibility",
|
||||
"visibilitydesc": "Define who can view and enroll in the course.",
|
||||
"published": "Published",
|
||||
"unpublish": "Unpublished",
|
||||
"draft": "Draft",
|
||||
"selectvisible": "Select Visibility",
|
||||
"public": "Public",
|
||||
"private": "Private",
|
||||
"startdate": "Start Date",
|
||||
"datedesc": "Set a specific date when the course becomes available.",
|
||||
"singuplimit": "Sign-up limit",
|
||||
"singuplimitdesc": "Specify a maximum number of students allowed for the course.",
|
||||
"enterlimits": "Enter Limits",
|
||||
"duration": "Duration",
|
||||
"durationdesc": "Determine how long the course remains accessible after enrollment.",
|
||||
"selectduration": "Select Duration",
|
||||
"month": "Month",
|
||||
"year": "Year",
|
||||
"visiblityerr": "Please choose visibility",
|
||||
"dateerr": "Please choose specific date",
|
||||
"limiterr": "Please Enter Maximum SignUpLimits",
|
||||
"durationerr": "Please choose Course Duration",
|
||||
"pricemodelerr": "Please Select the pricing model for your course"
|
||||
},
|
||||
"Menu": {
|
||||
"website": "Website",
|
||||
"templates": "Templates",
|
||||
"seo": "SEO",
|
||||
"setting": "Setting",
|
||||
"webdesc": "Customize your website and let your brand shine",
|
||||
"bannertitle": "Powerful Website Management Tools",
|
||||
"bannerdesc": "Easily build and customize your website using intuitive controls and flexible templates. The Website tab lets you organize pages, set up navigation, and ensure your content is always up-to-date—helping you deliver a seamless experience for your visitors.",
|
||||
"menu": "Menu",
|
||||
"menuname": "Menu Name",
|
||||
"totalitems": "Total Items",
|
||||
"status": "Status",
|
||||
"lastmodified": "Last Modified",
|
||||
"action": "Action",
|
||||
"createmenu": "Create Menu",
|
||||
"createnewmenu": "Create New Menu",
|
||||
"description": "Description",
|
||||
"managemenu": "Manage Menu",
|
||||
"managemenudesc": "Manage menu options and settings",
|
||||
"choosemenuitem": "Choose Menu Items",
|
||||
"addmenuitems": "Add Menu Items",
|
||||
"addtomenu": "Add to menu",
|
||||
"mostrecent": "Most recent",
|
||||
"viewall": "View all",
|
||||
"selectall": "Select All",
|
||||
"addmenuitem": "Add Menu Item",
|
||||
"labelname": "Menu Item Name",
|
||||
"labelnameplcholder": "Enter Menu Item name",
|
||||
"navigationpath": "Navigation path",
|
||||
"navplcholder": "Give link path",
|
||||
"additem": "Add Item",
|
||||
"labelnameerr": "Please Enter Menu Item Name",
|
||||
"linkpatherr": " Please Enter Link Path",
|
||||
"menunameerr": "Please Enter Menu Name",
|
||||
"nameduplicateerr": "Menu Name already exists",
|
||||
"descriptionerror": "Please Enter Menu Description",
|
||||
"namelimiterr": "Please Enter 35 Character only",
|
||||
"pathlimiterr": "Please Enter 30 Character only",
|
||||
"removeconfirmation": "Are you sure you want to remove this Menu",
|
||||
"deletemenu": "Delete Menu",
|
||||
"deselectall": "DeselectAll",
|
||||
"separatewindow":"Open as seperate window"
|
||||
|
||||
},
|
||||
"Seo": {
|
||||
"homepage": "Home Page",
|
||||
"pagetitle": "Page Title",
|
||||
"homepagetitle": "Home Page Title",
|
||||
@@ -2369,9 +2370,9 @@
|
||||
"pleaseentertitle": "Please Enter Title",
|
||||
"pleaseenterdescripion": "Please Enter Description",
|
||||
"pleaseenterkeyword": "Please Enter Keyword",
|
||||
"titlemustnotexceed55characters": "Title must not exceed 55 characters",
|
||||
"descriptionmustnotexceed155characters": "Description must not exceed 155 characters",
|
||||
"keywordmustnotexceed155characters": "Keyword must not exceed 155 characters",
|
||||
"titlemustnotexceed55characters": "Title must not exceed 95 characters",
|
||||
"descriptionmustnotexceed155characters": "Description must not exceed 250 characters",
|
||||
"keywordmustnotexceed155characters": "Keyword must not exceed 250 characters",
|
||||
"pleasechooseimage": "Please Choose Image"
|
||||
},
|
||||
"WebsiteSettings": {
|
||||
@@ -2385,6 +2386,6 @@
|
||||
"pleaseenteryoursitename": "Please Enter Your SiteName",
|
||||
"maximumlength20": "Maximum length must be 20 characters",
|
||||
"pleaseenteryourwebsiteurl": "Please Enter Your Website URL",
|
||||
"onlylowercaselettersandnumbersareallowed":"Only lowercase letters and numbers are allowed"
|
||||
"onlylowercaselettersandnumbersareallowed": "Only lowercase letters and numbers are allowed"
|
||||
}
|
||||
}
|
||||
+5
-4
@@ -2319,6 +2319,7 @@
|
||||
"labelname": "Nombre de la Etiqueta",
|
||||
"labelnameplcholder": "Ingrese el nombre de la etiqueta",
|
||||
"navigationpath": "Ruta de navegación",
|
||||
"separatewindow":"Abrir como ventana separada",
|
||||
"navplcholder": "Ingrese la ruta del enlace",
|
||||
"additem": "Agregar elemento",
|
||||
"labelnameerr": "Por favor, ingrese el nombre de la etiqueta",
|
||||
@@ -2326,7 +2327,7 @@
|
||||
"menunameerr": "Por favor, ingrese el nombre del menú",
|
||||
"nameduplicateerr": "El nombre del menú ya existe",
|
||||
"descriptionerror": "Por favor, ingrese la descripción del menú",
|
||||
"namelimiterr": "Por favor, ingrese solo 15 caracteres",
|
||||
"namelimiterr": "Por favor, ingrese solo 35 caracteres",
|
||||
"pathlimiterr": "Por favor, ingrese solo 30 caracteres",
|
||||
"removeconfirmation": "¿Está seguro de que desea eliminar este menú?",
|
||||
"deletemenu": "Eliminar menú",
|
||||
@@ -2355,9 +2356,9 @@
|
||||
"pleaseentertitle": "Por Favor Ingrese el Título",
|
||||
"pleaseenterdescripion": "Por Favor Ingrese la Descripción",
|
||||
"pleaseenterkeyword": "Por Favor Ingrese la Palabra Clave",
|
||||
"titlemustnotexceed55characters": "El Título No Debe Exceder los 55 Caracteres",
|
||||
"descriptionmustnotexceed155characters": "La Descripción No Debe Exceder los 155 Caracteres",
|
||||
"keywordmustnotexceed155characters": "La Palabra Clave No Debe Exceder los 155 Caracteres",
|
||||
"titlemustnotexceed55characters": "El Título No Debe Exceder los 95 Caracteres",
|
||||
"descriptionmustnotexceed155characters": "La Descripción No Debe Exceder los 250 Caracteres",
|
||||
"keywordmustnotexceed155characters": "La Palabra Clave No Debe Exceder los 250 Caracteres",
|
||||
"pleasechooseimage": "Por Favor Elija una Imagen"
|
||||
},
|
||||
"WebsiteSettings": {
|
||||
|
||||
+5
-4
@@ -2317,6 +2317,7 @@
|
||||
"labelname": "Nom de l'Étiquette",
|
||||
"labelnameplcholder": "Entrez le nom de l'étiquette",
|
||||
"navigationpath": "Chemin de navigation",
|
||||
"separatewindow":"Ouvrir comme fenêtre séparée",
|
||||
"navplcholder": "Indiquez le chemin du lien",
|
||||
"additem": "Ajouter un élément",
|
||||
"labelnameerr": "Veuillez entrer le nom de l'étiquette",
|
||||
@@ -2324,7 +2325,7 @@
|
||||
"menunameerr": "Veuillez entrer le nom du menu",
|
||||
"nameduplicateerr": "Le nom du menu existe déjà",
|
||||
"descriptionerror": "Veuillez entrer la description du menu",
|
||||
"namelimiterr": "Veuillez entrer seulement 15 caractères",
|
||||
"namelimiterr": "Veuillez entrer seulement 35 caractères",
|
||||
"pathlimiterr": "Veuillez entrer seulement 30 caractères",
|
||||
"removeconfirmation": "Êtes-vous sûr de vouloir supprimer ce menu ?",
|
||||
"deletemenu": "Supprimer le menu",
|
||||
@@ -2353,9 +2354,9 @@
|
||||
"pleaseentertitle": "Por Favor Ingrese el Título",
|
||||
"pleaseenterdescripion": "Por Favor Ingrese la Descripción",
|
||||
"pleaseenterkeyword": "Por Favor Ingrese la Palabra Clave",
|
||||
"titlemustnotexceed55characters": "El Título No Debe Exceder los 55 Caracteres",
|
||||
"descriptionmustnotexceed155characters": "La Descripción No Debe Exceder los 155 Caracteres",
|
||||
"keywordmustnotexceed155characters": "La Palabra Clave No Debe Exceder los 155 Caracteres",
|
||||
"titlemustnotexceed55characters": "El Título No Debe Exceder los 95 Caracteres",
|
||||
"descriptionmustnotexceed155characters": "La Descripción No Debe Exceder los 250 Caracteres",
|
||||
"keywordmustnotexceed155characters": "La Palabra Clave No Debe Exceder los 250 Caracteres",
|
||||
"pleasechooseimage": "Por Favor Elija una Imagen"
|
||||
},
|
||||
"WebsiteSettings": {
|
||||
|
||||
+2373
-2372
File diff suppressed because it is too large
Load Diff
@@ -1,74 +0,0 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
var LogFilePath = "logs/error.log"
|
||||
|
||||
const (
|
||||
InfoLevel = iota
|
||||
WarningLevel
|
||||
ErrorLevel
|
||||
)
|
||||
|
||||
type Logger struct {
|
||||
Level int
|
||||
InfoLogger *log.Logger
|
||||
WarnLogger *log.Logger
|
||||
ErrorLogger *log.Logger
|
||||
}
|
||||
|
||||
var logger *Logger
|
||||
|
||||
func init() {
|
||||
|
||||
_, err := os.Stat(LogFilePath)
|
||||
|
||||
var LogFile *os.File
|
||||
|
||||
if os.IsNotExist(err) {
|
||||
|
||||
makErr := os.MkdirAll("logs/", 0777)
|
||||
|
||||
if makErr != nil {
|
||||
|
||||
fmt.Println(makErr)
|
||||
|
||||
}
|
||||
|
||||
_, err = os.Create(LogFilePath)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Printf("failed to create log file: %v\n",err)
|
||||
}
|
||||
|
||||
fmt.Println("Created a new log file")
|
||||
}
|
||||
|
||||
LogFile, err = os.OpenFile(LogFilePath, os.O_APPEND|os.O_WRONLY, 0666)
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Printf("failed to open log file: %v\n",err)
|
||||
}
|
||||
|
||||
logger = &Logger{
|
||||
Level: InfoLevel,
|
||||
InfoLogger: log.New(LogFile, "INFO ", log.LstdFlags|log.Lshortfile),
|
||||
WarnLogger: log.New(LogFile, "WARN ", log.LstdFlags|log.Lshortfile),
|
||||
ErrorLogger: log.New(LogFile, "ERROR ", log.LstdFlags|log.Lshortfile),
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func ErrorLog()*log.Logger{
|
||||
return logger.ErrorLogger
|
||||
}
|
||||
|
||||
func WarnLog()*log.Logger{
|
||||
return logger.ErrorLogger
|
||||
}
|
||||
-356
@@ -1,356 +0,0 @@
|
||||
ERROR 2025/10/04 10:12:43 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 10:18:34 template_menu_controller.go:432: checkmenugroupname error: record not found
|
||||
ERROR 2025/10/04 11:11:00 auth_controller.go:947: set new password error: record not found
|
||||
ERROR 2025/10/04 11:13:42 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/04 11:28:38 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/04 11:29:44 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/04 11:30:58 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/04 11:31:19 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 14:59:45 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 14:59:55 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 15:41:46 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 15:41:57 category_controller.go:679: checkcategorygroupname error: record not found
|
||||
ERROR 2025/10/04 15:42:11 category_controller.go:721: CheckSubCategoryName error: record not found
|
||||
ERROR 2025/10/04 15:42:42 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 15:51:48 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 15:52:15 entries_controller.go:1175: edit entry get member details error: record not found
|
||||
ERROR 2025/10/04 15:52:15 entries_controller.go:1181: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/04 15:59:50 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/04 16:17:08 general_settings.go:58: Getting data from general settings Error:record not found
|
||||
ERROR 2025/10/04 18:36:21 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/06 10:34:23 category_controller.go:679: checkcategorygroupname error: record not found
|
||||
ERROR 2025/10/06 10:34:40 category_controller.go:721: CheckSubCategoryName error: record not found
|
||||
ERROR 2025/10/06 10:34:47 category_controller.go:721: CheckSubCategoryName error: record not found
|
||||
ERROR 2025/10/06 10:34:47 category_controller.go:721: CheckSubCategoryName error: record not found
|
||||
ERROR 2025/10/06 10:35:44 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/06 10:35:44 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/06 10:36:43 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 10:36:50 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 10:36:56 forms_builder.go:1098: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 10:37:09 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 10:37:19 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 14:03:16 category_controller.go:679: checkcategorygroupname error: record not found
|
||||
ERROR 2025/10/06 14:03:31 category_controller.go:721: CheckSubCategoryName error: record not found
|
||||
ERROR 2025/10/06 14:03:47 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/06 14:03:47 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/06 14:11:11 channels_controller.go:452: getchannel error: %!s(<nil>)
|
||||
ERROR 2025/10/06 14:11:11 entries_controller.go:1175: edit entry get member details error: record not found
|
||||
ERROR 2025/10/06 14:37:54 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 14:40:03 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 14:40:23 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 14:41:18 template_menu_controller.go:162: courselist error :Error 1146 (42S02): Table 'Community.tbl_courses' doesn't exist
|
||||
ERROR 2025/10/06 14:41:31 template_menu_controller.go:162: courselist error :Error 1146 (42S02): Table 'Community.tbl_courses' doesn't exist
|
||||
ERROR 2025/10/06 14:41:31 template_menu_controller.go:162: courselist error :Error 1146 (42S02): Table 'Community.tbl_courses' doesn't exist
|
||||
ERROR 2025/10/06 15:14:44 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/06 15:21:38 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/06 15:22:11 auth_controller.go:177: CheckLogin error: invalid password
|
||||
ERROR 2025/10/06 15:27:59 ai_assistance_controller.go:340: createEntry channel data error: record not found
|
||||
ERROR 2025/10/06 16:49:06 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 16:58:20 category_controller.go:679: checkcategorygroupname error: record not found
|
||||
ERROR 2025/10/06 16:58:33 category_controller.go:721: CheckSubCategoryName error: record not found
|
||||
ERROR 2025/10/06 16:58:47 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/06 16:58:47 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/06 16:59:38 channels_controller.go:452: getchannel error: %!s(<nil>)
|
||||
ERROR 2025/10/06 16:59:38 entries_controller.go:1146: edit entry get member details error: record not found
|
||||
ERROR 2025/10/06 16:59:40 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 16:59:54 forms_builder.go:1098: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/06 17:00:27 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/13 17:54:02 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/13 17:55:07 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 17:56:29 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 17:56:42 entries_controller.go:855: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 17:56:42 entries_controller.go:557: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 17:56:44 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:02:55 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:02:55 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:03:16 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/13 18:03:25 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/13 18:03:28 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:09:44 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:09:44 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:13:07 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:13:07 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:13:28 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/13 18:13:33 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:13:48 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:13:48 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:13:53 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:14:01 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:14:29 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:14:35 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:16:37 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:16:37 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:16:52 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:16:55 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:16:58 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:17:42 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:18:22 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:22:01 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:22:47 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:22:47 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:24:11 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:24:11 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:24:31 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:24:31 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:24:44 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:24:44 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:25:16 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:25:16 channels_controller.go:1478: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 18:35:32 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/13 18:35:43 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:31 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:31 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:31 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:43 entries_controller.go:857: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:41:43 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:43:05 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:43:05 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:43:55 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:43:55 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:44:19 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:44:39 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:46:39 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:46:48 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:47:02 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:47:06 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:47:06 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:47:06 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:47:06 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:51:26 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:51:27 entries_controller.go:1195: channelfield error: Unauthorized
|
||||
ERROR 2025/10/13 18:51:32 entries_controller.go:857: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:51:32 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:51:41 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:51:41 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:51:41 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:51:41 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:58:29 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:30 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:30 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:58:30 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:58:42 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:43 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:43 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:58:43 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:58:44 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:48 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:49 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:49 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:58:49 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:58:53 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:55 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:55 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:58:55 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:58:55 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 18:59:13 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:16 entries_controller.go:1030: edit entry page authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:19 channels_controller.go:438: getfieldata authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:19 entries_controller.go:1195: channelfield error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:19 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:19 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:59:22 entries_controller.go:857: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:22 entries_controller.go:559: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:34 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:35 entries_controller.go:1116: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 18:59:35 entries_controller.go:1152: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 18:59:35 entries_controller.go:1158: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 19:03:40 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 19:03:43 entries_controller.go:1115: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/13 19:03:43 entries_controller.go:1151: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 19:03:43 entries_controller.go:1157: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/13 19:03:44 entries_controller.go:558: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/13 19:03:51 entries_controller.go:1151: edit entry get member details error: record not found
|
||||
ERROR 2025/10/13 19:15:11 channels_controller.go:1207: Channels checkname error: record not found
|
||||
ERROR 2025/10/13 19:15:11 channels_controller.go:1207: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 10:29:50 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 10:31:18 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 10:42:39 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 10:45:12 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 10:45:12 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 10:45:35 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 10:45:53 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 10:45:53 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 10:46:26 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 10:47:15 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 10:47:15 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 10:47:41 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 10:59:02 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 10:59:09 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 10:59:16 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 10:59:28 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 10:59:35 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 10:59:55 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 11:00:07 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 11:00:29 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 11:00:44 auth_controller.go:177: CheckLogin error: record not found
|
||||
ERROR 2025/10/14 11:02:56 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:49:50 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 11:50:13 user_controller.go:323: check email error: record not found
|
||||
ERROR 2025/10/14 11:50:13 user_controller.go:342: check number error: record not found
|
||||
ERROR 2025/10/14 11:50:14 user_controller.go:305: Create Team email notification status not enabled
|
||||
ERROR 2025/10/14 11:50:32 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:50:32 entries_controller.go:257: createEntry channel data error: record not found
|
||||
ERROR 2025/10/14 11:50:32 entries_controller.go:298: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:50:32 entries_controller.go:302: block authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:52:59 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:52:59 entries_controller.go:298: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:52:59 entries_controller.go:302: block authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:56:04 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:56:04 entries_controller.go:298: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:56:04 entries_controller.go:302: block authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:57:25 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:57:25 entries_controller.go:298: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 11:57:25 entries_controller.go:302: block authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:00:47 entries_controller.go:239: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:00:47 entries_controller.go:293: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:00:47 entries_controller.go:297: block authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:01:31 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:01:31 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:01:31 entries_controller.go:296: block authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:02:18 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:02:18 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:02:18 entries_controller.go:296: block authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:03:07 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 12:03:12 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:10:27 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 12:10:36 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:10:36 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:11:02 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:11:02 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:11:33 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:11:33 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:11:40 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:11:40 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:16:16 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 12:16:20 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:16:20 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:16:47 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 12:16:56 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 12:17:00 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:17:00 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:43 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:43 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:44 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:44 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:46 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:49 entries_controller.go:824: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:49 entries_controller.go:526: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:58 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:58 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:18:59 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:20 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 12:19:23 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:23 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:24 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:24 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:26 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:30 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:30 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:31 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:31 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:34 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:41 entries_controller.go:824: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:41 entries_controller.go:526: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:52 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:19:52 entries_controller.go:256: createEntry channel data error: record not found
|
||||
ERROR 2025/10/14 12:19:52 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:21:38 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:21:38 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:21:39 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:21:55 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 12:21:55 channels_controller.go:1213: Channels checkname error: record not found
|
||||
ERROR 2025/10/14 12:22:26 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 12:22:31 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:22:31 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:22:33 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:22:34 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:22:34 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:22:36 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:22:40 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:23:09 entries_controller.go:526: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:23:54 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:23:54 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:23:56 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:23:58 channels_controller.go:234: createchannel authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:24:00 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:24:00 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:24:02 entries_controller.go:1162: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:18 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:18 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:19 entries_controller.go:1144: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:24 entries_controller.go:806: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:24 entries_controller.go:526: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:30 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:30 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:28:32 entries_controller.go:1144: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:41:12 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:41:12 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 12:41:13 entries_controller.go:1144: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 12:45:42 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
ERROR 2025/10/14 13:04:13 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 13:04:38 user_controller.go:323: check email error: record not found
|
||||
ERROR 2025/10/14 13:04:38 user_controller.go:342: check number error: record not found
|
||||
ERROR 2025/10/14 13:04:39 user_controller.go:305: Create Team email notification status not enabled
|
||||
ERROR 2025/10/14 13:05:24 auth_controller.go:177: CheckLogin error: user disabled please contact admin
|
||||
ERROR 2025/10/14 13:08:08 channels_controller.go:395: editchannel authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:13 channels_controller.go:395: editchannel authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:17 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:17 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:18 entries_controller.go:1144: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:31 entries_controller.go:806: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:31 entries_controller.go:526: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:34 entries_controller.go:979: edit entry page authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:36 channels_controller.go:438: getfieldata authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:36 entries_controller.go:1065: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:36 entries_controller.go:1144: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:36 entries_controller.go:1101: edit entry get member details error: record not found
|
||||
ERROR 2025/10/14 13:08:39 entries_controller.go:806: publish entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:08:40 entries_controller.go:526: all entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:09:10 entries_controller.go:147: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:09:11 entries_controller.go:1065: edit entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 13:09:11 entries_controller.go:1101: edit entry get member details error: record not found
|
||||
ERROR 2025/10/14 13:09:11 entries_controller.go:1107: edit entry get channeldetails error: record not found
|
||||
ERROR 2025/10/14 14:29:44 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 14:30:32 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:30:32 entries_controller.go:256: createEntry channel data error: record not found
|
||||
ERROR 2025/10/14 14:30:32 entries_controller.go:292: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:36:13 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 14:36:46 user_controller.go:323: check email error: record not found
|
||||
ERROR 2025/10/14 14:36:46 user_controller.go:342: check number error: record not found
|
||||
ERROR 2025/10/14 14:36:47 user_controller.go:305: Create Team email notification status not enabled
|
||||
ERROR 2025/10/14 14:39:17 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:39:17 entries_controller.go:242: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:39:31 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 14:39:36 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:39:36 entries_controller.go:242: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:39:39 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:39:39 entries_controller.go:242: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:45:16 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:45:17 entries_controller.go:290: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:45:18 entries_controller.go:1142: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 14:45:28 channels_controller.go:234: createchannel authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:45:44 entries_controller.go:238: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:45:44 entries_controller.go:290: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:45:45 entries_controller.go:1142: channelfield error: Unauthorized
|
||||
ERROR 2025/10/14 14:47:39 roles_permission_controller.go:326: check roles error: record not found
|
||||
ERROR 2025/10/14 14:47:42 entries_controller.go:237: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:47:42 entries_controller.go:295: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:47:46 entries_controller.go:237: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:47:46 entries_controller.go:295: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:47:52 entries_controller.go:237: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:47:52 entries_controller.go:242: Entries authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:48:13 entries_controller.go:237: create Entry authorization error: Unauthorized
|
||||
ERROR 2025/10/14 14:48:13 entries_controller.go:295: block collection list authorization error: Unauthorized
|
||||
ERROR 2025/10/14 15:20:29 auth_controller.go:177: CheckLogin error: user disabled please contact admin
|
||||
ERROR 2025/10/14 15:21:07 auth_controller.go:177: CheckLogin error: user disabled please contact admin
|
||||
ERROR 2025/10/14 17:27:30 user_controller.go:323: check email error: record not found
|
||||
ERROR 2025/10/14 17:27:30 user_controller.go:342: check number error: record not found
|
||||
ERROR 2025/10/14 18:31:53 general_settings.go:58: Getting data from general settings Error:record not found
|
||||
ERROR 2025/10/23 12:16:21 forms_builder.go:109: unable to fetch the template module list: record not found
|
||||
@@ -1,52 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"spurt-cms/controllers"
|
||||
"spurt-cms/graphql"
|
||||
"spurt-cms/migration"
|
||||
templateview "spurt-cms/page-view"
|
||||
"spurt-cms/routes"
|
||||
storagecontroller "spurt-cms/storage-controller"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func RunAdminPanel(wg *sync.WaitGroup) {
|
||||
|
||||
defer wg.Done()
|
||||
|
||||
r := routes.SetupRoutes() // setup routes
|
||||
|
||||
err := r.Run(":" + os.Getenv("PORT"))
|
||||
|
||||
if err != nil {
|
||||
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
migration.TableMigration() //migration all spurtcms related tables
|
||||
|
||||
migration.InsertDefaultValues() //insert default values....
|
||||
|
||||
storagecontroller.LocalStorageCreation() //create all project related files and folders
|
||||
|
||||
controllers.PackageInitialize() //initialize all spurtcms packages
|
||||
|
||||
controllers.LastUpdated()
|
||||
|
||||
var wg sync.WaitGroup
|
||||
|
||||
wg.Add(4)
|
||||
|
||||
go RunAdminPanel(&wg)
|
||||
|
||||
go templateview.RunTemplateView(&wg)
|
||||
|
||||
go graphql.RunGraphqlServer(&wg)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
}
|
||||
-4169
File diff suppressed because it is too large
Load Diff
@@ -1,220 +0,0 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"spurt-cms/config"
|
||||
"spurt-cms/controllers"
|
||||
"spurt-cms/models"
|
||||
|
||||
// "strconv"
|
||||
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// check the jwt token with authorized
|
||||
func JWTAuth() gin.HandlerFunc {
|
||||
|
||||
return func(c *gin.Context) {
|
||||
|
||||
c.Header("Cache-Control", "no-store, no-cache, must-revalidate, private")
|
||||
c.Header("Pragma", "no-cache")
|
||||
c.Header("Expires", "0")
|
||||
|
||||
session, _ := controllers.Store.Get(c.Request, os.Getenv("SESSION_KEY"))
|
||||
|
||||
tkn := session.Values["token"]
|
||||
|
||||
if tkn == nil {
|
||||
c.Abort()
|
||||
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
|
||||
c.Redirect(301, "/")
|
||||
|
||||
} else {
|
||||
|
||||
session.Values["token"] = tkn
|
||||
|
||||
session.Options.MaxAge = 60 * 60 * 24 * 90 //90 days
|
||||
|
||||
session.Save(c.Request, c.Writer)
|
||||
|
||||
token := tkn.(string)
|
||||
|
||||
userid, _, err := controllers.NewAuth.VerifyToken(token, os.Getenv("JWT_SECRET"))
|
||||
|
||||
if err != nil {
|
||||
controllers.ErrorLog.Println("err", err)
|
||||
}
|
||||
|
||||
Claims := jwt.MapClaims{}
|
||||
tkn, err := jwt.ParseWithClaims(token, Claims, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(os.Getenv("JWT_SECRET")), nil
|
||||
})
|
||||
if err != nil {
|
||||
if err == jwt.ErrSignatureInvalid {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println(err)
|
||||
c.Abort()
|
||||
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
|
||||
session.Options.MaxAge = -1
|
||||
|
||||
session.Save(c.Request, c.Writer)
|
||||
|
||||
for _, cookie := range c.Request.Cookies() {
|
||||
c.SetCookie(cookie.Name, "", -1, "/", "", false, true)
|
||||
}
|
||||
|
||||
c.Redirect(301, "/")
|
||||
return
|
||||
}
|
||||
if !tkn.Valid {
|
||||
fmt.Println(tkn)
|
||||
return
|
||||
}
|
||||
|
||||
// userid := Claims["user_id"]
|
||||
|
||||
// var user models.TblUser
|
||||
|
||||
controllers.Token = token
|
||||
|
||||
controllers.NewTeam.Auth.UserId = userid
|
||||
|
||||
user, _, _ := controllers.NewTeamWP.GetUserById(userid, []int{})
|
||||
|
||||
if user.Id == 0 {
|
||||
|
||||
c.Abort()
|
||||
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
|
||||
session.Options.MaxAge = -1
|
||||
|
||||
session.Save(c.Request, c.Writer)
|
||||
|
||||
for _, cookie := range c.Request.Cookies() {
|
||||
c.SetCookie(cookie.Name, "", -1, "/", "", false, true)
|
||||
}
|
||||
|
||||
c.Redirect(301, "/")
|
||||
|
||||
}
|
||||
|
||||
c.Set("default_language_id", user.DefaultLanguageId)
|
||||
|
||||
c.Set("tenant_id", user.TenantId)
|
||||
|
||||
c.Set("userDetails", user)
|
||||
|
||||
c.Set("go_template_default", user.GoTemplateDefault)
|
||||
|
||||
// host := c.Request.Host
|
||||
|
||||
// if strings.Contains(host, "spurtcms.com") {
|
||||
|
||||
// sub := strings.Split(host, ".")[0]
|
||||
|
||||
// if sub != "" {
|
||||
|
||||
// if sub != user.Subdomain {
|
||||
// c.HTML(404, "nodata.html", nil)
|
||||
// c.Abort()
|
||||
// return
|
||||
// }
|
||||
|
||||
// }
|
||||
// } else if strings.Contains(host, "lvh.me") {
|
||||
|
||||
// sub := strings.Split(host, ".")[0]
|
||||
|
||||
// if sub != "" {
|
||||
|
||||
// if sub != user.Subdomain {
|
||||
// c.HTML(404, "nodata.html", nil)
|
||||
// c.Abort()
|
||||
// return
|
||||
// }
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
controllers.Tenant_Id(c)
|
||||
|
||||
//set middleware user datas
|
||||
session.Values["userName"] = user.FirstName
|
||||
|
||||
session.Save(c.Request, c.Writer)
|
||||
|
||||
c.Set("username", user.FirstName)
|
||||
|
||||
c.Set("userid", user.Id)
|
||||
|
||||
c.Set("role", user.RoleId)
|
||||
|
||||
c.Set("dataaccess", user.DataAccess)
|
||||
|
||||
controllers.NewAuth.RoleId = user.RoleId
|
||||
|
||||
c.Header("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||
|
||||
c.Header("Pragma", "no-cache")
|
||||
|
||||
c.Header("Expires", "0")
|
||||
|
||||
c.Next()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var db = config.SetupDB()
|
||||
|
||||
/*initial route call*/
|
||||
func InitialPermissionsRoute(tblmodper *[]controllers.TblModulePermission, roleid int) error {
|
||||
|
||||
if err := db.Table("tbl_module_permissions").Select("route_name,display_name").Joins("inner join tbl_modules on tbl_modules.id=tbl_module_permissions.module_id").Joins("inner join tbl_role_permissions on tbl_role_permissions.permission_id=tbl_module_permissions.id").Where("tbl_role_permissions.role_id=? and tbl_module_permissions.display_name='View' or tbl_module_permissions.display_name='Member Access'", roleid).Find(&tblmodper).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetModulePermissionByUserId(role *[]models.TblUser, id int) error {
|
||||
|
||||
if err := db.Table("tbl_users").Select("mpermission.display_name", "mpermission.module_id", "mpermission.route_name").Joins("inner join tbl_role_permissions on tbl_role_permissions.role_id = tbl_users.role_id").Joins("inner join tbl_module_permissions as mpermission on mpermission.id = tbl_role_permissions.permission_id").Where("tbl_users.id=?", id).Find(&role).Error; err != nil {
|
||||
|
||||
return err
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetModuleIndividualAccessPermissionByUserId(role *[]models.TblUser, id int) error {
|
||||
|
||||
if err := db.Debug().Table("tbl_users").Select("mpermission.display_name", "mpermission.module_id", "mpermission.route_name", "mpermission.full_access_permission").Joins("inner join tbl_role_permissions on tbl_role_permissions.role_id = tbl_users.role_id").Joins("inner join tbl_module_permissions as mpermission on mpermission.id = tbl_role_permissions.permission_id").Where("tbl_users.id=?", id).Find(&role).Error; err != nil {
|
||||
|
||||
return err
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetModuleFullAccessPermissionByUserId(role *[]models.TblUser, id int) error {
|
||||
|
||||
if err := db.Table("tbl_users").Select("mpermission.slug_name as display_name", "mpermission.module_id", "mpermission.route_name", "mpermission.full_access_permission").Joins("inner join tbl_role_permissions on tbl_role_permissions.role_id = tbl_users.role_id").Joins("inner join tbl_module_permissions as mpermission on mpermission.id = tbl_role_permissions.permission_id").Where("mpermission.full_access_permission = 1 and tbl_users.id=?", id).Find(&role).Error; err != nil {
|
||||
|
||||
return err
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"spurt-cms/controllers"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
csrf "github.com/utrack/gin-csrf"
|
||||
)
|
||||
|
||||
func CSRFAuth() gin.HandlerFunc {
|
||||
|
||||
return csrf.Middleware(csrf.Options{
|
||||
|
||||
Secret: fmt.Sprintf("%8d", time.Now().Unix()),
|
||||
IgnoreMethods: []string{"GET"},
|
||||
ErrorFunc: func(c *gin.Context) {
|
||||
|
||||
csrftoken := c.PostForm("csrf")
|
||||
|
||||
if csrftoken != csrf.GetToken(c) {
|
||||
|
||||
sess, err := controllers.Store.Get(c.Request, os.Getenv("SESSION_KEY"))
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
sess.Values["token"] = ""
|
||||
|
||||
sess.Options.MaxAge = -1
|
||||
|
||||
er := sess.Save(c.Request, c.Writer)
|
||||
if er != nil {
|
||||
fmt.Println(er)
|
||||
}
|
||||
c.Abort()
|
||||
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
|
||||
c.SetCookie("Alert-msg", "Internal Server Error", 3600, "", "", false, false)
|
||||
|
||||
fmt.Println("csrf token mismatch")
|
||||
|
||||
c.Redirect(301, "/")
|
||||
|
||||
} else {
|
||||
|
||||
c.Next()
|
||||
}
|
||||
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func CorsMiddleware() gin.HandlerFunc {
|
||||
|
||||
return func(c *gin.Context) {
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
|
||||
|
||||
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")
|
||||
|
||||
if c.Request.Method == "OPTIONS" {
|
||||
|
||||
c.AbortWithStatus(204)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"spurt-cms/controllers"
|
||||
"strconv"
|
||||
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func DashBoardAuth() gin.HandlerFunc {
|
||||
|
||||
return func(c *gin.Context) {
|
||||
|
||||
session, _ := controllers.Store.Get(c.Request, os.Getenv("SESSION_KEY"))
|
||||
|
||||
tkn := session.Values["token"]
|
||||
|
||||
if tkn != "" && tkn != nil {
|
||||
|
||||
tkn := session.Values["token"].(string)
|
||||
|
||||
claims := jwt.MapClaims{}
|
||||
token, err := jwt.ParseWithClaims(tkn, claims, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(os.Getenv("JWT_SECRET")), nil
|
||||
})
|
||||
if err != nil || !token.Valid {
|
||||
c.Redirect(http.StatusFound, "/")
|
||||
return
|
||||
}
|
||||
|
||||
userIDFloat, ok := claims["user_id"].(float64)
|
||||
if !ok {
|
||||
|
||||
c.Redirect(http.StatusFound, "/")
|
||||
return
|
||||
}
|
||||
userID := int(userIDFloat)
|
||||
|
||||
user, _, _ := controllers.NewTeamWP.GetUserById(userID, []int{})
|
||||
|
||||
host := c.Request.Host
|
||||
|
||||
var redirectURL string
|
||||
|
||||
if host == "spurtcms.com" {
|
||||
|
||||
redirectURL = fmt.Sprintf("https://%s.spurtcms.com/admin/dashboard", user.FirstName+strconv.Itoa(user.Id))
|
||||
|
||||
} else {
|
||||
redirectURL = fmt.Sprintf("http://%s.lvh.me:8080/admin/dashboard", user.Subdomain)
|
||||
}
|
||||
|
||||
c.Writer.Header().Set("Pragma", "no-cache")
|
||||
|
||||
c.Redirect(301, redirectURL)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,526 +0,0 @@
|
||||
package migration
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"spurt-cms/config"
|
||||
"spurt-cms/migration/mysql"
|
||||
"spurt-cms/migration/postgres"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func TableMigration() {
|
||||
|
||||
if os.Getenv("DATABASE_TYPE") == "postgres" {
|
||||
|
||||
postgres.MigrationTables() //auto migrate table
|
||||
|
||||
} else if os.Getenv("DATABASE_TYPE") == "mysql" {
|
||||
|
||||
mysql.MigrationTables() //auto migrate table
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func InsertDefaultValues() {
|
||||
|
||||
// Open the SQL file
|
||||
file, err := os.Open("cms.sql")
|
||||
|
||||
if err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
|
||||
// Start a transaction
|
||||
db := config.SetupDB()
|
||||
|
||||
// Create a new scanner to read the SQL file line by line
|
||||
scanner := bufio.NewScanner(file)
|
||||
|
||||
for scanner.Scan() {
|
||||
|
||||
query := scanner.Text()
|
||||
|
||||
// Skip empty lines and comments
|
||||
if len(strings.TrimSpace(query)) == 0 || strings.HasPrefix(query, "--") {
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
currentTime, _ := time.Parse("2006-01-02 15:04:05", time.Now().UTC().Format("2006-01-02 15:04:05"))
|
||||
|
||||
parts := strings.Fields(fmt.Sprint(currentTime))
|
||||
|
||||
timeStamp := fmt.Sprintf("%s %s", parts[0], parts[1])
|
||||
|
||||
uuid := (uuid.New()).String()
|
||||
|
||||
arr := strings.Split(uuid, "-")
|
||||
|
||||
Uuid := arr[len(arr)-1]
|
||||
|
||||
query = strings.ReplaceAll(query, "current_time", timeStamp)
|
||||
|
||||
baseurl := os.Getenv("BASE_URL")
|
||||
baseurl = strings.TrimPrefix(baseurl, "https://")
|
||||
baseurl = strings.TrimPrefix(baseurl, "http://")
|
||||
baseurl = strings.TrimSuffix(baseurl, "/")
|
||||
|
||||
query = strings.ReplaceAll(query, "base_url", baseurl)
|
||||
|
||||
if strings.Contains(query, "tbl_forms") {
|
||||
|
||||
query = strings.ReplaceAll(query, "uu_id", Uuid)
|
||||
}
|
||||
|
||||
if strings.Contains(query, "tbl_block_tags") {
|
||||
|
||||
var defBlockIds []int
|
||||
|
||||
if err = db.Table("tbl_blocks").Select("id").Where("is_deleted=0 and tenant_id is NULL and block_description=?", "spurtcms").Scan(&defBlockIds).Error; err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
for _, val := range defBlockIds {
|
||||
modifiedQuery := strings.ReplaceAll(query, "blo_id", strconv.Itoa(val))
|
||||
|
||||
var exists bool
|
||||
db.Table("tbl_block_tags").Select("count(*) > 0").Where("block_id = ?", val).Scan(&exists)
|
||||
|
||||
if !exists {
|
||||
|
||||
err := db.Exec(modifiedQuery).Error
|
||||
if err != nil {
|
||||
fmt.Println("Error executing query: \nQuery:", modifiedQuery, "\nError:", err)
|
||||
}
|
||||
} else {
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
err := db.Exec(query).Error
|
||||
|
||||
if err != nil {
|
||||
|
||||
fmt.Println("Error executing query: \nQuery:", err, query)
|
||||
}
|
||||
}
|
||||
|
||||
if os.Getenv("DATABASE_TYPE") == "postgres" {
|
||||
|
||||
var (
|
||||
module_count, mod_perm_count, role_count int64
|
||||
|
||||
user_count, channel_count, category_count int64
|
||||
|
||||
language_count, chancat_count, memgroup_count int64
|
||||
|
||||
personalize_count, block_count, blockmstrTag_count int64
|
||||
|
||||
blocktag_count, blockcolln_count, gensetting_count int64
|
||||
|
||||
template_count, tempmodule_count, emailConf_count, emailTemp_count, form_count, website_count, gotemp_count, Subscription_count int64
|
||||
)
|
||||
|
||||
if err := db.Table("tbl_modules").Count(&module_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_module_permissions").Count(&mod_perm_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_roles").Count(&role_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_users").Count(&user_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_channels").Count(&channel_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_categories").Count(&category_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_channel_categories").Count(&chancat_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_member_groups").Count(&memgroup_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_user_personalizes").Count(&personalize_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_blocks").Count(&block_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_block_mstr_tags").Count(&blockmstrTag_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_block_tags").Count(&blocktag_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_block_collections").Count(&blockcolln_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_general_settings").Count(&gensetting_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_templates").Count(&template_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_template_modules").Count(&tempmodule_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_email_configurations").Count(&emailConf_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_email_templates").Count(&emailTemp_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
if err := db.Table("tbl_forms").Count(&form_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err := db.Table("tbl_mstr_membershiplevels").Count(&Subscription_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
if err := db.Table("tbl_websites").Count(&website_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
if err := db.Table("tbl_go_templates").Count(&gotemp_count).Error; err != nil {
|
||||
|
||||
log.Println(err)
|
||||
}
|
||||
if module_count > 0 {
|
||||
|
||||
var moduleId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_modules").Row().Scan(&moduleId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_modules_id_seq RESTART WITH %d", moduleId+1))
|
||||
|
||||
}
|
||||
|
||||
if mod_perm_count > 0 {
|
||||
|
||||
var permissionmaxID int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_module_permissions").Row().Scan(&permissionmaxID); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_module_permissions_id_seq RESTART WITH %d", permissionmaxID+1))
|
||||
|
||||
}
|
||||
|
||||
if role_count > 0 {
|
||||
|
||||
var rolemaxID int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_roles").Row().Scan(&rolemaxID); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_roles_id_seq RESTART WITH %d", rolemaxID+1))
|
||||
|
||||
}
|
||||
|
||||
if user_count > 0 {
|
||||
|
||||
var usermaxID int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_users").Row().Scan(&usermaxID); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_users_id_seq RESTART WITH %d", usermaxID+1))
|
||||
|
||||
}
|
||||
|
||||
if channel_count > 0 {
|
||||
|
||||
var ChannelMaxid int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_channels").Row().Scan(&ChannelMaxid); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_channels_id_seq RESTART WITH %d", ChannelMaxid+1))
|
||||
|
||||
}
|
||||
|
||||
if category_count > 0 {
|
||||
|
||||
var CategoriesMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_categories").Row().Scan(&CategoriesMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_categories_id_seq RESTART WITH %d", CategoriesMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if language_count > 0 {
|
||||
|
||||
var LangMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_languages").Row().Scan(&LangMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_languages_id_seq RESTART WITH %d", LangMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if chancat_count > 0 {
|
||||
|
||||
var ChannelCatMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_channel_categories").Row().Scan(&ChannelCatMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_channel_categories_id_seq RESTART WITH %d", ChannelCatMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if memgroup_count > 0 {
|
||||
|
||||
var GroupMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_member_groups").Row().Scan(&GroupMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_member_groups_id_seq RESTART WITH %d", GroupMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if personalize_count > 0 {
|
||||
|
||||
var UserPersonalizeId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_user_personalizes").Row().Scan(&UserPersonalizeId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_user_personalizes_id_seq RESTART WITH %d", UserPersonalizeId+1))
|
||||
|
||||
}
|
||||
|
||||
if block_count > 0 {
|
||||
|
||||
var BlockMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_blocks").Row().Scan(&BlockMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_blocks_id_seq RESTART WITH %d", BlockMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if blockmstrTag_count > 0 {
|
||||
|
||||
var MstrTagMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_block_mstr_tags").Row().Scan(&MstrTagMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_block_mstr_tags_id_seq RESTART WITH %d", MstrTagMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if blocktag_count > 0 {
|
||||
|
||||
var TagMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_block_tags").Row().Scan(&TagMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_block_tags_id_seq RESTART WITH %d", TagMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if blockcolln_count > 0 {
|
||||
|
||||
var CollectionMaxId int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_block_collections").Row().Scan(&CollectionMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_block_collections_id_seq RESTART WITH %d", CollectionMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if gensetting_count > 0 {
|
||||
|
||||
var GenSettingMaxId int
|
||||
|
||||
if err := db.Raw("SELECT COALESCE((select max(id) from tbl_general_settings),0)").Scan(&GenSettingMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_general_settings_id_seq RESTART WITH %v", GenSettingMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if template_count > 0 {
|
||||
|
||||
var TemplateMaxId int
|
||||
|
||||
if err := db.Raw("SELECT COALESCE((select max(id) from tbl_templates),0)").Scan(&TemplateMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_templates_id_seq RESTART WITH %v", TemplateMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if tempmodule_count > 0 {
|
||||
|
||||
var templateModuleMaxId int
|
||||
|
||||
if err := db.Raw("SELECT COALESCE((select max(id) from tbl_template_modules),0)").Scan(&templateModuleMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_template_modules_id_seq RESTART WITH %v", templateModuleMaxId+1))
|
||||
|
||||
}
|
||||
|
||||
if emailConf_count > 0 {
|
||||
|
||||
var emailConfMaxId int
|
||||
|
||||
if err := db.Raw("SELECT COALESCE((select max(id) from tbl_email_configurations),0)").Scan(&emailConfMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_email_configurations_id_seq RESTART WITH %v", emailConfMaxId+1))
|
||||
}
|
||||
|
||||
if emailTemp_count > 0 {
|
||||
|
||||
var emailTempMaxId int
|
||||
|
||||
if err := db.Raw("SELECT COALESCE((select max(id) from tbl_email_templates),0)").Scan(&emailTempMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_email_templates_id_seq RESTART WITH %v", emailTempMaxId+1))
|
||||
}
|
||||
|
||||
if Subscription_count > 0 {
|
||||
|
||||
var subscriptionMaxId int
|
||||
|
||||
if err := db.Raw("SELECT COALESCE((select max(id) from tbl_mstr_membershiplevels),0)").Scan(&subscriptionMaxId); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_mstr_membershiplevels_id_seq RESTART WITH %v", subscriptionMaxId+1))
|
||||
}
|
||||
if website_count > 0 {
|
||||
|
||||
var WebsiteMaxid int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_websites").Row().Scan(&WebsiteMaxid); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_websites_id_seq RESTART WITH %d", WebsiteMaxid+1))
|
||||
|
||||
}
|
||||
|
||||
if gotemp_count > 0 {
|
||||
|
||||
var gotempMaxid int
|
||||
|
||||
if err := db.Raw("SELECT max(id) FROM tbl_go_templates").Row().Scan(&gotempMaxid); err != nil {
|
||||
// Handle error
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
db.Exec(fmt.Sprintf("ALTER SEQUENCE tbl_go_templates_id_seq RESTART WITH %d", gotempMaxid+1))
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fmt.Println("SQL file loaded successfully.")
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,113 +0,0 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type TblMstrBlocks struct {
|
||||
Id int `gorm:"primaryKey;auto_increment;type:serial"`
|
||||
Title string `gorm:"type:character varying"`
|
||||
SlugName string `gorm:"type:character varying"`
|
||||
ChannelSlugname string `gorm:"type:character varying"`
|
||||
BlockDescription string `gorm:"type:text"`
|
||||
BlockContent string `gorm:"type:text"`
|
||||
BlockCss string `gorm:"type:text"`
|
||||
CoverImage string `gorm:"type:character varying"`
|
||||
IconImage string `gorm:"type:character varying"`
|
||||
TenantId int `gorm:"type:integer"`
|
||||
Prime int `gorm:"type:integer"`
|
||||
IsActive int `gorm:"type:integer"`
|
||||
CreatedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
CreatedBy int `gorm:"type:integer"`
|
||||
ModifiedBy int `gorm:"type:integer"`
|
||||
ModifiedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
DeletedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
DeletedBy int `gorm:"type:integer;DEFAULT:NULL"`
|
||||
IsDeleted int `gorm:"type:integer;DEFAULT:0"`
|
||||
ProfileImagePath string `gorm:"<-:false"`
|
||||
FirstName string `gorm:"<-:false"`
|
||||
LastName string `gorm:"<-:false"`
|
||||
Username string `gorm:"<-:false"`
|
||||
TagValueArr []string `gorm:"-"`
|
||||
TagValue string `gorm:"<-:false;"`
|
||||
NameString string `gorm:"-"`
|
||||
Actions string `gorm:"<-:false"`
|
||||
CreatedDate string `gorm:"-:migration;<-:false"`
|
||||
ModifiedDate string `gorm:"-:migration;<-:false"`
|
||||
ChannelID string `gorm:"type:character varying"`
|
||||
ChannelNames []string `gorm:"-"`
|
||||
}
|
||||
|
||||
type TblMstrForms struct {
|
||||
Id int `gorm:"primaryKey;auto_increment;type:serial"`
|
||||
FormTitle string `gorm:"type:character varying"`
|
||||
FormSlug string `gorm:"type:character varying"`
|
||||
FormData string `gorm:"type:character varying"`
|
||||
Status int `gorm:"type:integer"`
|
||||
IsActive int `gorm:"type:integer"`
|
||||
CreatedBy int `gorm:"type:integer"`
|
||||
CreatedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
ModifiedBy int `gorm:"type:integer;DEFAULT:NULL"`
|
||||
ModifiedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
DeletedBy int `gorm:"type:integer;DEFAULT:NULL"`
|
||||
DeletedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
IsDeleted int `gorm:"type:integer;DEFAULT:0"`
|
||||
TenantId int `gorm:"type:integer"`
|
||||
Uuid string `gorm:"type:character varying"`
|
||||
Username string `gorm:"<-:false"`
|
||||
ProfileImagePath string `gorm:"<-:false"`
|
||||
NameString string `gorm:"<-:false"`
|
||||
FirstName string `gorm:"<-:false"`
|
||||
LastName string `gorm:"<-:false"`
|
||||
DateString string `gorm:"-"`
|
||||
CreatedDate string `gorm:"-:migration;<-:false"`
|
||||
ModifiedDate string `gorm:"-:migration;<-:false"`
|
||||
FormImagePath string `gorm:"type:character varying"`
|
||||
FormDescription string `gorm:"type:character varying"`
|
||||
ChannelId string `gorm:"type:character varying"`
|
||||
ChannelName string `gorm:"type:character varying"`
|
||||
Channelnamearr []string `gorm:"-"`
|
||||
FormPreviewImagepath string `gorm:"type:character varying"`
|
||||
FormPreviewImagename string `gorm:"type:character varying"`
|
||||
}
|
||||
type TblMstrchannel struct {
|
||||
Id int `gorm:"column:id"`
|
||||
ChannelName string `gorm:"column:channel_name"`
|
||||
ChannelDescription string `gorm:"column:channel_description"`
|
||||
SlugName string `gorm:"column:slug_name"`
|
||||
FieldGroupId int `gorm:"column:field_group_id"`
|
||||
IsActive int `gorm:"column:is_active"`
|
||||
IsDeleted int `gorm:"column:is_deleted"`
|
||||
CreatedOn time.Time `gorm:"column:created_on"`
|
||||
CreatedBy int `gorm:"column:created_by"`
|
||||
ModifiedOn time.Time `gorm:"column:modified_on;DEFAULT:NULL"`
|
||||
ModifiedBy int `gorm:"column:modified_by;DEFAULT:NULL"`
|
||||
DateString string `gorm:"-"`
|
||||
ProfileImagePath string `gorm:"<-:false"`
|
||||
AuthorDetails TblUser `gorm:"foreignKey:Id;references:CreatedBy"`
|
||||
ChannelType string `gorm:"column:channel_type"`
|
||||
TenantId int `gorm:"column:tenant_id"`
|
||||
Username string `gorm:"<-:false"`
|
||||
FirstName string `gorm:"<-:false"`
|
||||
LastName string `gorm:"<-:false"`
|
||||
NameString string `gorm:"<-:false"`
|
||||
ImagePath string `gorm:"column:image_path"`
|
||||
}
|
||||
|
||||
type TblMstrIntegration struct {
|
||||
Id int `gorm:"primaryKey;auto_increment;type:serial"`
|
||||
ClientId string `gorm:"type:character varying"`
|
||||
ClientSecret string `gorm:"type:character varying"`
|
||||
CoverImage string `gorm:"type:character varying"`
|
||||
GatewayName string `gorm:"type:character varying"`
|
||||
GatewayDesc string `gorm:"type:character varying"`
|
||||
IsActive int `gorm:"type:integer"`
|
||||
CreatedOn time.Time `gorm:"type:timestamp without time zone"`
|
||||
CreatedBy int `gorm:"type:integer"`
|
||||
IsDeleted int `gorm:"type:integer"`
|
||||
DeletedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
DeletedBy int `gorm:"DEFAULT:NULL"`
|
||||
ModifiedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
ModifiedBy int `gorm:"DEFAULT:NULL"`
|
||||
TenantId string `gorm:"type:character varying"`
|
||||
}
|
||||
@@ -1,134 +0,0 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
chn "github.com/spurtcms/channels"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var IST, _ = time.LoadLocation("Asia/Kolkata")
|
||||
|
||||
type TblCategory struct {
|
||||
Id int
|
||||
CategoryName string
|
||||
CategorySlug string
|
||||
Description string
|
||||
ImagePath string
|
||||
CreatedOn time.Time
|
||||
CreatedBy int
|
||||
ModifiedOn time.Time `gorm:"DEFAULT:NULL"`
|
||||
ModifiedBy int `gorm:"DEFAULT:NULL"`
|
||||
IsDeleted int
|
||||
DeletedOn time.Time `gorm:"DEFAULT:NULL"`
|
||||
DeletedBy int `gorm:"DEFAULT:NULL"`
|
||||
ParentId int
|
||||
CreatedDate string `gorm:"-"`
|
||||
ModifiedDate string `gorm:"-"`
|
||||
DateString string `gorm:"-"`
|
||||
ParentCategoryName string `gorm:"-"`
|
||||
Parent []string `gorm:"-"`
|
||||
ParentWithChild []Result `gorm:"-"`
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
CategoryName string
|
||||
}
|
||||
|
||||
type TblChannelEntries struct {
|
||||
Id int
|
||||
Title string `form:"title" binding:"required"`
|
||||
Slug string `form:"slug" binding:"required"`
|
||||
Description string
|
||||
UserId int
|
||||
ChannelId int
|
||||
Status int //0-draft 1-publish 2-unpublish
|
||||
IsActive int
|
||||
IsDeleted int `gorm:"DEFAULT:0"`
|
||||
DeletedBy int `gorm:"DEFAULT:NULL"`
|
||||
DeletedOn time.Time `gorm:"DEFAULT:NULL"`
|
||||
CreatedOn time.Time
|
||||
CreatedBy int
|
||||
ModifiedBy int `gorm:"DEFAULT:NULL"`
|
||||
ModifiedOn time.Time `gorm:"DEFAULT:NULL"`
|
||||
CoverImage string
|
||||
ThumbnailImage string
|
||||
MetaTitle string `form:"metatitle" binding:"required"`
|
||||
MetaDescription string `form:"metadesc" binding:"required"`
|
||||
Keyword string `form:"keywords" binding:"required"`
|
||||
CategoriesId string
|
||||
RelatedArticles string
|
||||
CreatedDate string `gorm:"-"`
|
||||
ModifiedDate string `gorm:"-"`
|
||||
Username string `gorm:"<-:false"`
|
||||
TblChannelEntryField []TblChannelEntryField `gorm:"<-:false; foreignKey:ChannelEntryId"`
|
||||
Category []TblCategory `gorm:"<-:false; foreignKey:Id"`
|
||||
CategoryGroup string `gorm:"<-:false"`
|
||||
ChannelName string `gorm:"<-:false"`
|
||||
Cno int `gorm:"<-:false"`
|
||||
}
|
||||
|
||||
type TblChannelEntryField struct {
|
||||
Id int
|
||||
FieldName string
|
||||
FieldValue string
|
||||
ChannelEntryId int
|
||||
FieldId int
|
||||
CreatedOn time.Time
|
||||
CreatedBy int
|
||||
ModifiedOn time.Time `gorm:"DEFAULT:NULL"`
|
||||
ModifiedBy int `gorm:"DEFAULT:NULL"`
|
||||
FieldTypeId int `gorm:"<-:false"`
|
||||
}
|
||||
|
||||
type ExportData struct {
|
||||
Title string
|
||||
CreatedBy string
|
||||
CreatedDate string
|
||||
Status string
|
||||
}
|
||||
|
||||
type TblModule struct {
|
||||
Id int
|
||||
ModuleName string
|
||||
IsActive int
|
||||
CreatedBy int
|
||||
CreatedOn time.Time
|
||||
CreatedDate string `gorm:"<-:false"`
|
||||
DefaultModule int
|
||||
ParentId int
|
||||
IconPath string
|
||||
OrderIndex int
|
||||
Description string
|
||||
DisplayName string `gorm:"column:display_name;<-:false"`
|
||||
RouteName string `gorm:"column:route_name;<-:false"`
|
||||
RouteParentId int `gorm:"column:parent_id;<-:false"`
|
||||
FullAccessPermission int
|
||||
GroupFlg int
|
||||
}
|
||||
|
||||
func Exportentriesdata(exportdata *[]chn.Tblchannelentries, id []int, tenantid string) error {
|
||||
|
||||
if err := DB.Table("tbl_channel_entries").Select("tbl_channel_entries.*,tbl_users.username,tbl_channels.channel_name").Joins("inner join tbl_users on tbl_users.id = tbl_channel_entries.created_by").Joins("inner join tbl_channels on tbl_channels.id = tbl_channel_entries.channel_id").Where("tbl_channel_entries.is_deleted=0 and tbl_channel_entries.id IN ? and (tbl_channel_entries.tenant_id is NULL or tbl_channel_entries.tenant_id = ?)", id, tenantid).Order("tbl_channel_entries.id desc").Preload("TblChannelEntryField", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Select("tbl_channel_entry_fields.*,tbl_fields.field_type_id").Joins("inner join tbl_fields on tbl_fields.Id = tbl_channel_entry_fields.field_id")
|
||||
|
||||
}).Find(&exportdata).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func Entryid(entry string, tenantid string) (Id int, err error) {
|
||||
|
||||
var modules TblModule
|
||||
|
||||
if err := DB.Table("tbl_modules").Where("module_name=? and parent_id!=?", entry, 0).First(&modules).Error; err != nil {
|
||||
|
||||
return 0, err
|
||||
}
|
||||
|
||||
id := modules.Id
|
||||
|
||||
return id, nil
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
|
||||
type TblCountrie struct {
|
||||
Id int `gorm:"primaryKey;auto_increment;type:serial"`
|
||||
CountryCode string `gorm:"type:character varying"`
|
||||
CountryName string `gorm:"type:character varying"`
|
||||
IsActive int `gorm:"type:integer"`
|
||||
CreatedOn time.Time `gorm:"type:timestamp without time zone"`
|
||||
CreatedBy int `gorm:"type:integer"`
|
||||
IsDeleted int `gorm:"type:integer"`
|
||||
DeletedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
DeletedBy int `gorm:"DEFAULT:NULL"`
|
||||
ModifiedOn time.Time `gorm:"type:timestamp without time zone;DEFAULT:NULL"`
|
||||
ModifiedBy int `gorm:"DEFAULT:NULL"`
|
||||
TenantId int `gorm:"type:integer"`
|
||||
}
|
||||
|
||||
|
||||
func GetCountryLIst()([]TblCountrie,error){
|
||||
|
||||
var CountryList []TblCountrie
|
||||
if err := DB.Table("tbl_countries").Find(&CountryList).Error; err != nil {
|
||||
|
||||
return []TblCountrie{},err
|
||||
}
|
||||
|
||||
return CountryList,nil
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user