aboutsummaryrefslogtreecommitdiff
blob: acf1c06296beb0fb4f18f6508517b97d8e46aa6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Used to show a specific package

package useflags

import (
	"html/template"
	"net/http"
	utils2 "soko/pkg/app/utils"
	"soko/pkg/database"
	"soko/pkg/models"
	"soko/pkg/utils"
	"strings"
)

// Show renders a template to show a given USE flag
func Show(w http.ResponseWriter, r *http.Request) {

	useflagName := r.URL.Path[len("/useflags/"):]

	var useflags []models.Useflag
	err := database.DBCon.Model(&useflags).Where("name = ? ", useflagName).Select()
	if err != nil || len(useflags) < 1 {
		http.NotFound(w,r)
		return
	}

	useflag := useflags[0]
	var localuseflags []models.Useflag

	for _, use := range useflags{
		if(use.Scope == "global"){
			useflag = use
		}else if(use.Scope == "local"){
			localuseflags = append(localuseflags, use)
		}else if(use.Scope == "use_expand"){
			ShowUseExpand(w, r, use)
			return
		}
	}

	var versions []models.Version
	err = database.DBCon.Model(&versions).Column("atom").Where("useflags::jsonb @> ?", "\"" + useflagName + "\"").Select()
	if err != nil {
		panic(err)
	}

	var packages []string
	for _, version := range versions{
		packages = append(packages, version.Atom)
	}

	packages = utils.Deduplicate(packages)


	data := struct {
		Page          string
		Useflag       models.Useflag
		LocalUseflags []models.Useflag
		Packages      []string
		Application   models.Application
	}{
		Page:     "useflags",
		Useflag: useflag,
		LocalUseflags: localuseflags,
		Packages:    packages,
		Application: utils2.GetApplicationData(),
	}

	templates :=	template.Must(
		template.Must(
			template.New("Show").ParseGlob("web/templates/layout/*.tmpl")).
			ParseGlob("web/templates/useflags/show.tmpl"))

	templates.ExecuteTemplate(w, "show.tmpl", data)
}

// ShowUseExpand renders a template to show a given use_expand
func ShowUseExpand(w http.ResponseWriter, r *http.Request, useExpand models.Useflag) {

	funcMap := template.FuncMap{
		"replaceall": strings.ReplaceAll,
	}

	var otheruseexpands []models.Useflag
	err := database.DBCon.Model(&otheruseexpands).Where("use_expand = ? ", useExpand.UseExpand).Select()
	if err != nil {
		panic(err)
	}

	var versions []models.Version
	err = database.DBCon.Model(&versions).Column("atom").Where("useflags::jsonb @> ?", "\"" + useExpand.Name + "\"").Select()
	if err != nil {
		panic(err)
	}

	var packages []string
	for _, version := range versions{
		packages = append(packages, version.Atom)
	}

	packages = utils.Deduplicate(packages)

	data := struct {
		Page          string
		Useflag       models.Useflag
		OtherUseExpands []models.Useflag
		Packages      []string
		Application models.Application
	}{
		Page:     "useflags",
		Useflag:  useExpand,
		OtherUseExpands: otheruseexpands,
		Packages: packages,
		Application: utils2.GetApplicationData(),
	}

	templates :=	template.Must(
		template.Must(
			template.New("Show").Funcs(funcMap).ParseGlob("web/templates/layout/*.tmpl")).
			ParseGlob("web/templates/useflags/showexpand.tmpl"))

	templates.ExecuteTemplate(w, "showexpand.tmpl", data)
}