Can lock theme
This commit is contained in:
parent
b8c5ec6725
commit
d4ce0dd474
9 changed files with 85 additions and 43 deletions
|
|
@ -87,6 +87,7 @@ CREATE TABLE IF NOT EXISTS events(
|
|||
CREATE TABLE IF NOT EXISTS themes(
|
||||
id_theme INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
locked BOOLEAN NOT NULL DEFAULT 0,
|
||||
url_id VARCHAR(191) NOT NULL UNIQUE,
|
||||
path VARCHAR(191) NOT NULL UNIQUE,
|
||||
headline TEXT NOT NULL,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ type Theme struct {
|
|||
Id int64 `json:"id"`
|
||||
Language string `json:"lang,omitempty"`
|
||||
Name string `json:"name"`
|
||||
Locked bool `json:"locked"`
|
||||
URLId string `json:"urlid"`
|
||||
Path string `json:"path"`
|
||||
Authors string `json:"authors,omitempty"`
|
||||
|
|
@ -25,7 +26,7 @@ func CmpTheme(t1 *Theme, t2 *Theme) bool {
|
|||
|
||||
// GetThemes returns a list of registered Themes from the database.
|
||||
func GetThemes() ([]*Theme, error) {
|
||||
if rows, err := DBQuery("SELECT id_theme, name, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes"); err != nil {
|
||||
if rows, err := DBQuery("SELECT id_theme, name, locked, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes"); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
defer rows.Close()
|
||||
|
|
@ -33,7 +34,7 @@ func GetThemes() ([]*Theme, error) {
|
|||
var themes []*Theme
|
||||
for rows.Next() {
|
||||
t := &Theme{}
|
||||
if err := rows.Scan(&t.Id, &t.Name, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText); err != nil {
|
||||
if err := rows.Scan(&t.Id, &t.Name, &t.Locked, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
themes = append(themes, t)
|
||||
|
|
@ -49,7 +50,7 @@ func GetThemes() ([]*Theme, error) {
|
|||
// GetTheme retrieves a Theme from its identifier.
|
||||
func GetTheme(id int64) (*Theme, error) {
|
||||
t := &Theme{}
|
||||
if err := DBQueryRow("SELECT id_theme, name, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes WHERE id_theme=?", id).Scan(&t.Id, &t.Name, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText); err != nil {
|
||||
if err := DBQueryRow("SELECT id_theme, name, locked, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes WHERE id_theme=?", id).Scan(&t.Id, &t.Name, &t.Locked, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText); err != nil {
|
||||
return t, err
|
||||
}
|
||||
|
||||
|
|
@ -59,7 +60,7 @@ func GetTheme(id int64) (*Theme, error) {
|
|||
// GetTheme retrieves a Theme from an given Exercice.
|
||||
func (e *Exercice) GetTheme() (*Theme, error) {
|
||||
t := &Theme{}
|
||||
if err := DBQueryRow("SELECT id_theme, name, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes WHERE id_theme=?", e.IdTheme).Scan(&t.Id, &t.Name, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText); err != nil {
|
||||
if err := DBQueryRow("SELECT id_theme, name, locked, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes WHERE id_theme=?", e.IdTheme).Scan(&t.Id, &t.Name, &t.Locked, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText); err != nil {
|
||||
return t, err
|
||||
}
|
||||
|
||||
|
|
@ -69,7 +70,7 @@ func (e *Exercice) GetTheme() (*Theme, error) {
|
|||
// GetThemeByName retrieves a Theme from its title
|
||||
func GetThemeByName(name string) (*Theme, error) {
|
||||
t := &Theme{}
|
||||
if err := DBQueryRow("SELECT id_theme, name, url_id, path, authors, intro, headline, image, partner_img, partner_text FROM themes WHERE name=?", name).Scan(&t.Id, &t.Name, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerText); err != nil {
|
||||
if err := DBQueryRow("SELECT id_theme, name, locked, url_id, path, authors, intro, headline, image, partner_img, partner_text FROM themes WHERE name=?", name).Scan(&t.Id, &t.Name, &t.Locked, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerText); err != nil {
|
||||
return t, err
|
||||
}
|
||||
|
||||
|
|
@ -79,14 +80,14 @@ func GetThemeByName(name string) (*Theme, error) {
|
|||
// GetThemeByPath retrieves a Theme from its dirname
|
||||
func GetThemeByPath(dirname string) (*Theme, error) {
|
||||
t := &Theme{}
|
||||
err := DBQueryRow("SELECT id_theme, name, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes WHERE path=?", dirname).Scan(&t.Id, &t.Name, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText)
|
||||
err := DBQueryRow("SELECT id_theme, name, locked, url_id, path, authors, intro, headline, image, partner_img, partner_href, partner_text FROM themes WHERE path=?", dirname).Scan(&t.Id, &t.Name, &t.Locked, &t.URLId, &t.Path, &t.Authors, &t.Intro, &t.Headline, &t.Image, &t.PartnerImage, &t.PartnerLink, &t.PartnerText)
|
||||
|
||||
return t, err
|
||||
}
|
||||
|
||||
// CreateTheme creates and fills a new struct Theme and registers it into the database.
|
||||
func CreateTheme(theme *Theme) (*Theme, error) {
|
||||
if res, err := DBExec("INSERT INTO themes (name, url_id, authors, path, intro, headline, image, partner_img, partner_href, partner_text) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", theme.Name, theme.URLId, theme.Authors, theme.Path, theme.Intro, theme.Headline, theme.Image, theme.PartnerImage, theme.PartnerLink, theme.PartnerText); err != nil {
|
||||
if res, err := DBExec("INSERT INTO themes (name, locked, url_id, authors, path, intro, headline, image, partner_img, partner_href, partner_text) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", theme.Name, theme.Locked, theme.URLId, theme.Authors, theme.Path, theme.Intro, theme.Headline, theme.Image, theme.PartnerImage, theme.PartnerLink, theme.PartnerText); err != nil {
|
||||
return nil, err
|
||||
} else if theme.Id, err = res.LastInsertId(); err != nil {
|
||||
return nil, err
|
||||
|
|
@ -107,7 +108,7 @@ func (t *Theme) FixURLId() bool {
|
|||
|
||||
// Update applies modifications back to the database.
|
||||
func (t *Theme) Update() (int64, error) {
|
||||
if res, err := DBExec("UPDATE themes SET name = ?, url_id = ?, authors = ?, path = ?, intro = ?, headline = ?, image = ?, partner_img = ?, partner_href = ?, partner_text = ? WHERE id_theme = ?", t.Name, t.URLId, t.Authors, t.Path, t.Intro, t.Headline, t.Image, t.PartnerImage, t.PartnerLink, t.PartnerText, t.Id); err != nil {
|
||||
if res, err := DBExec("UPDATE themes SET name = ?, locked = ?, url_id = ?, authors = ?, path = ?, intro = ?, headline = ?, image = ?, partner_img = ?, partner_href = ?, partner_text = ? WHERE id_theme = ?", t.Name, t.Locked, t.URLId, t.Authors, t.Path, t.Intro, t.Headline, t.Image, t.PartnerImage, t.PartnerLink, t.PartnerText, t.Id); err != nil {
|
||||
return 0, err
|
||||
} else if nb, err := res.RowsAffected(); err != nil {
|
||||
return 0, err
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ type exportedExercice struct {
|
|||
type exportedTheme struct {
|
||||
Name string `json:"name"`
|
||||
URLId string `json:"urlid"`
|
||||
Locked bool `json:"locked,omitempty"`
|
||||
Authors string `json:"authors"`
|
||||
Headline string `json:"headline,omitempty"`
|
||||
Intro string `json:"intro"`
|
||||
|
|
@ -42,11 +43,16 @@ func ExportThemes() (interface{}, error) {
|
|||
} else {
|
||||
ret := map[string]exportedTheme{}
|
||||
for _, theme := range themes {
|
||||
exos := []exportedExercice{}
|
||||
|
||||
if exercices, err := theme.GetExercices(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
exos := []exportedExercice{}
|
||||
for _, exercice := range exercices {
|
||||
if exercice.Disabled {
|
||||
continue
|
||||
}
|
||||
|
||||
tags, _ := exercice.GetTags()
|
||||
exos = append(exos, exportedExercice{
|
||||
exercice.Id,
|
||||
|
|
@ -60,29 +66,30 @@ func ExportThemes() (interface{}, error) {
|
|||
exercice.TriedTeamCount(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
imgpath := ""
|
||||
if len(theme.Image) > 0 {
|
||||
imgpath = path.Join(FilesDir, theme.Image)
|
||||
}
|
||||
imgpath := ""
|
||||
if len(theme.Image) > 0 {
|
||||
imgpath = path.Join(FilesDir, theme.Image)
|
||||
}
|
||||
|
||||
partnerImgpath := ""
|
||||
if len(theme.PartnerImage) > 0 {
|
||||
partnerImgpath = path.Join(FilesDir, theme.PartnerImage)
|
||||
}
|
||||
partnerImgpath := ""
|
||||
if len(theme.PartnerImage) > 0 {
|
||||
partnerImgpath = path.Join(FilesDir, theme.PartnerImage)
|
||||
}
|
||||
|
||||
ret[fmt.Sprintf("%d", theme.Id)] = exportedTheme{
|
||||
theme.Name,
|
||||
theme.URLId,
|
||||
theme.Authors,
|
||||
theme.Headline,
|
||||
strings.Replace(theme.Intro, "$FILES$", FilesDir, -1),
|
||||
imgpath,
|
||||
partnerImgpath,
|
||||
theme.PartnerLink,
|
||||
theme.PartnerText,
|
||||
exos,
|
||||
}
|
||||
ret[fmt.Sprintf("%d", theme.Id)] = exportedTheme{
|
||||
theme.Name,
|
||||
theme.URLId,
|
||||
theme.Locked,
|
||||
theme.Authors,
|
||||
theme.Headline,
|
||||
strings.Replace(theme.Intro, "$FILES$", FilesDir, -1),
|
||||
imgpath,
|
||||
partnerImgpath,
|
||||
theme.PartnerLink,
|
||||
theme.PartnerText,
|
||||
exos,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Reference in a new issue