Implement unit property for flags
This commit is contained in:
parent
c3742ade4e
commit
61fccca070
7 changed files with 17 additions and 7 deletions
|
@ -46,6 +46,7 @@ type ExerciceFlag struct {
|
||||||
LockedFile []ExerciceUnlockFile `toml:"unlock_file,omitempty"`
|
LockedFile []ExerciceUnlockFile `toml:"unlock_file,omitempty"`
|
||||||
NeedFlag []ExerciceDependency `toml:"need_flag,omitempty"`
|
NeedFlag []ExerciceDependency `toml:"need_flag,omitempty"`
|
||||||
NoShuffle bool
|
NoShuffle bool
|
||||||
|
Unit string `toml:"unit,omitempty"`
|
||||||
NumberMin interface{} `toml:"min,omitempty"`
|
NumberMin interface{} `toml:"min,omitempty"`
|
||||||
NumberMax interface{} `toml:"max,omitempty"`
|
NumberMax interface{} `toml:"max,omitempty"`
|
||||||
NumberStep interface{} `toml:"step,omitempty"`
|
NumberStep interface{} `toml:"step,omitempty"`
|
||||||
|
|
|
@ -136,6 +136,7 @@ func buildKeyFlag(exercice fic.Exercice, flag ExerciceFlag, flagline int, defaul
|
||||||
Label: flag.Label,
|
Label: flag.Label,
|
||||||
Placeholder: flag.Placeholder,
|
Placeholder: flag.Placeholder,
|
||||||
Help: flag.Help,
|
Help: flag.Help,
|
||||||
|
Unit: flag.Unit,
|
||||||
IgnoreCase: !flag.CaseSensitive,
|
IgnoreCase: !flag.CaseSensitive,
|
||||||
Multiline: flag.Type == "text",
|
Multiline: flag.Type == "text",
|
||||||
ValidatorRegexp: validatorRegexp(flag.ValidatorRe),
|
ValidatorRegexp: validatorRegexp(flag.ValidatorRe),
|
||||||
|
|
|
@ -171,6 +171,9 @@
|
||||||
<Icon name="plus" />
|
<Icon name="plus" />
|
||||||
</Button>
|
</Button>
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if flag.unit}
|
||||||
|
<span class="input-group-text">{flag.unit}</span>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
{#if flag.help}
|
{#if flag.help}
|
||||||
|
|
|
@ -186,6 +186,7 @@ CREATE TABLE IF NOT EXISTS exercice_flags(
|
||||||
type VARCHAR(255) NOT NULL,
|
type VARCHAR(255) NOT NULL,
|
||||||
placeholder VARCHAR(255) NOT NULL,
|
placeholder VARCHAR(255) NOT NULL,
|
||||||
help VARCHAR(255) NOT NULL,
|
help VARCHAR(255) NOT NULL,
|
||||||
|
unit VARCHAR(255) NOT NULL,
|
||||||
ignorecase BOOLEAN NOT NULL DEFAULT 0,
|
ignorecase BOOLEAN NOT NULL DEFAULT 0,
|
||||||
multiline BOOLEAN NOT NULL DEFAULT 0,
|
multiline BOOLEAN NOT NULL DEFAULT 0,
|
||||||
validator_regexp VARCHAR(255) NULL,
|
validator_regexp VARCHAR(255) NULL,
|
||||||
|
|
|
@ -330,7 +330,7 @@ func (f EFile) GetDepends() ([]Flag, error) {
|
||||||
if err := rows.Scan(&d); err != nil {
|
if err := rows.Scan(&d); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
deps = append(deps, FlagKey{d, f.IdExercice, 0, "", "", "", "", false, false, nil, []byte{}, 0})
|
deps = append(deps, FlagKey{d, f.IdExercice, 0, "", "", "", "", "", false, false, nil, []byte{}, 0})
|
||||||
}
|
}
|
||||||
if err := rows.Err(); err != nil {
|
if err := rows.Err(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -25,6 +25,8 @@ type FlagKey struct {
|
||||||
Placeholder string `json:"placeholder"`
|
Placeholder string `json:"placeholder"`
|
||||||
// Help is a description of the flag
|
// Help is a description of the flag
|
||||||
Help string `json:"help"`
|
Help string `json:"help"`
|
||||||
|
// Unit is another indication appended to the input
|
||||||
|
Unit string `json:"unit"`
|
||||||
// IgnoreCase indicates if the case is sensitive to case or not
|
// IgnoreCase indicates if the case is sensitive to case or not
|
||||||
IgnoreCase bool `json:"ignorecase"`
|
IgnoreCase bool `json:"ignorecase"`
|
||||||
// Multiline indicates if the flag is stored on multiple lines
|
// Multiline indicates if the flag is stored on multiple lines
|
||||||
|
@ -39,7 +41,7 @@ type FlagKey struct {
|
||||||
|
|
||||||
// GetFlagKeys returns a list of key's flags comming with the challenge.
|
// GetFlagKeys returns a list of key's flags comming with the challenge.
|
||||||
func (e Exercice) GetFlagKeys() ([]FlagKey, error) {
|
func (e Exercice) GetFlagKeys() ([]FlagKey, error) {
|
||||||
if rows, err := DBQuery("SELECT id_flag, id_exercice, ordre, label, type, placeholder, help, ignorecase, multiline, validator_regexp, cksum, choices_cost FROM exercice_flags WHERE id_exercice = ?", e.Id); err != nil {
|
if rows, err := DBQuery("SELECT id_flag, id_exercice, ordre, label, type, placeholder, help, unit, ignorecase, multiline, validator_regexp, cksum, choices_cost FROM exercice_flags WHERE id_exercice = ?", e.Id); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
@ -49,7 +51,7 @@ func (e Exercice) GetFlagKeys() ([]FlagKey, error) {
|
||||||
var k FlagKey
|
var k FlagKey
|
||||||
k.IdExercice = e.Id
|
k.IdExercice = e.Id
|
||||||
|
|
||||||
if err := rows.Scan(&k.Id, &k.IdExercice, &k.Order, &k.Label, &k.Type, &k.Placeholder, &k.Help, &k.IgnoreCase, &k.Multiline, &k.ValidatorRegexp, &k.Checksum, &k.ChoicesCost); err != nil {
|
if err := rows.Scan(&k.Id, &k.IdExercice, &k.Order, &k.Label, &k.Type, &k.Placeholder, &k.Help, &k.Unit, &k.IgnoreCase, &k.Multiline, &k.ValidatorRegexp, &k.Checksum, &k.ChoicesCost); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,13 +67,13 @@ func (e Exercice) GetFlagKeys() ([]FlagKey, error) {
|
||||||
|
|
||||||
// GetFlagKey returns a list of flags comming with the challenge.
|
// GetFlagKey returns a list of flags comming with the challenge.
|
||||||
func GetFlagKey(id int) (k FlagKey, err error) {
|
func GetFlagKey(id int) (k FlagKey, err error) {
|
||||||
err = DBQueryRow("SELECT id_flag, id_exercice, ordre, label, type, placeholder, help, ignorecase, multiline, validator_regexp, cksum, choices_cost FROM exercice_flags WHERE id_flag = ?", id).Scan(&k.Id, &k.IdExercice, &k.Order, &k.Label, &k.Type, &k.Placeholder, &k.Help, &k.IgnoreCase, &k.Multiline, &k.ValidatorRegexp, &k.Checksum, &k.ChoicesCost)
|
err = DBQueryRow("SELECT id_flag, id_exercice, ordre, label, type, placeholder, help, unit, ignorecase, multiline, validator_regexp, cksum, choices_cost FROM exercice_flags WHERE id_flag = ?", id).Scan(&k.Id, &k.IdExercice, &k.Order, &k.Label, &k.Type, &k.Placeholder, &k.Help, &k.Unit, &k.IgnoreCase, &k.Multiline, &k.ValidatorRegexp, &k.Checksum, &k.ChoicesCost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFlagKeyByLabel returns a flag matching the given label.
|
// GetFlagKeyByLabel returns a flag matching the given label.
|
||||||
func (e Exercice) GetFlagKeyByLabel(label string) (k FlagKey, err error) {
|
func (e Exercice) GetFlagKeyByLabel(label string) (k FlagKey, err error) {
|
||||||
err = DBQueryRow("SELECT id_flag, id_exercice, ordre, label, type, placeholder, help, ignorecase, multiline, validator_regexp, cksum, choices_cost FROM exercice_flags WHERE type LIKE ? AND id_exercice = ?", label, e.Id).Scan(&k.Id, &k.IdExercice, &k.Order, &k.Label, &k.Type, &k.Placeholder, &k.Help, &k.IgnoreCase, &k.Multiline, &k.ValidatorRegexp, &k.Checksum, &k.ChoicesCost)
|
err = DBQueryRow("SELECT id_flag, id_exercice, ordre, label, type, placeholder, help, unit, ignorecase, multiline, validator_regexp, cksum, choices_cost FROM exercice_flags WHERE type LIKE ? AND id_exercice = ?", label, e.Id).Scan(&k.Id, &k.IdExercice, &k.Order, &k.Label, &k.Type, &k.Placeholder, &k.Help, &k.Unit, &k.IgnoreCase, &k.Multiline, &k.ValidatorRegexp, &k.Checksum, &k.ChoicesCost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,7 +157,7 @@ func (k FlagKey) Create(e Exercice) (Flag, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if res, err := DBExec("INSERT INTO exercice_flags (id_exercice, ordre, label, type, placeholder, help, ignorecase, multiline, validator_regexp, cksum, choices_cost) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", e.Id, k.Order, k.Label, k.Type, k.Placeholder, k.Help, k.IgnoreCase, k.Multiline, k.ValidatorRegexp, k.Checksum, k.ChoicesCost); err != nil {
|
if res, err := DBExec("INSERT INTO exercice_flags (id_exercice, ordre, label, type, placeholder, help, unit, ignorecase, multiline, validator_regexp, cksum, choices_cost) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", e.Id, k.Order, k.Label, k.Type, k.Placeholder, k.Help, k.Unit, k.IgnoreCase, k.Multiline, k.ValidatorRegexp, k.Checksum, k.ChoicesCost); err != nil {
|
||||||
return k, err
|
return k, err
|
||||||
} else if kid, err := res.LastInsertId(); err != nil {
|
} else if kid, err := res.LastInsertId(); err != nil {
|
||||||
return k, err
|
return k, err
|
||||||
|
@ -180,7 +182,7 @@ func (k FlagKey) Update() (int64, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if res, err := DBExec("UPDATE exercice_flags SET id_exercice = ?, ordre = ?, label = ?, type = ?, placeholder = ?, help = ?, ignorecase = ?, multiline = ?, validator_regexp = ?, cksum = ?, choices_cost = ? WHERE id_flag = ?", k.IdExercice, k.Order, k.Label, k.Type, k.Placeholder, k.Help, k.IgnoreCase, k.Multiline, k.ValidatorRegexp, k.Checksum, k.ChoicesCost, k.Id); err != nil {
|
if res, err := DBExec("UPDATE exercice_flags SET id_exercice = ?, ordre = ?, label = ?, type = ?, placeholder = ?, help = ?, unit = ?, ignorecase = ?, multiline = ?, validator_regexp = ?, cksum = ?, choices_cost = ? WHERE id_flag = ?", k.IdExercice, k.Order, k.Label, k.Type, k.Placeholder, k.Help, k.Unit, k.IgnoreCase, k.Multiline, k.ValidatorRegexp, k.Checksum, k.ChoicesCost, k.Id); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
} else if nb, err := res.RowsAffected(); err != nil {
|
} else if nb, err := res.RowsAffected(); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
|
|
@ -34,6 +34,7 @@ type myTeamFlag struct {
|
||||||
Type string `json:"type,omitempty"`
|
Type string `json:"type,omitempty"`
|
||||||
Placeholder string `json:"placeholder,omitempty"`
|
Placeholder string `json:"placeholder,omitempty"`
|
||||||
Help string `json:"help,omitempty"`
|
Help string `json:"help,omitempty"`
|
||||||
|
Unit string `json:"unit,omitempty"`
|
||||||
Separator string `json:"separator,omitempty"`
|
Separator string `json:"separator,omitempty"`
|
||||||
NbLines uint64 `json:"nb_lines,omitempty"`
|
NbLines uint64 `json:"nb_lines,omitempty"`
|
||||||
IgnoreOrder bool `json:"ignore_order,omitempty"`
|
IgnoreOrder bool `json:"ignore_order,omitempty"`
|
||||||
|
@ -205,6 +206,7 @@ func MyJSONTeam(t *Team, started bool) (interface{}, error) {
|
||||||
Type: k.Type,
|
Type: k.Type,
|
||||||
order: k.Order,
|
order: k.Order,
|
||||||
Help: k.Help,
|
Help: k.Help,
|
||||||
|
Unit: k.Unit,
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.HasPrefix(flag.Type, "number") {
|
if strings.HasPrefix(flag.Type, "number") {
|
||||||
|
|
Reference in a new issue