tagliatelle

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

include-general.go (2158B)


      1 package main
      2 
      3 import (
      4     "net/http"
      5     "net/url"
      6     "strings"
      7 )
      8 
      9 func sanitizeFilename(filename string) string {
     10 	if filename == "" {
     11 		return "file"
     12 	}
     13 	filename = strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(filename, "/", "_"), "\\", "_"), "..", "_")
     14 	if filename == "" {
     15 		return "file"
     16 	}
     17 	return filename
     18 }
     19 
     20 func renderError(w http.ResponseWriter, message string, statusCode int) {
     21 	http.Error(w, message, statusCode)
     22 }
     23 
     24 func renderTemplate(w http.ResponseWriter, tmplName string, data PageData) {
     25 	if err := tmpl.ExecuteTemplate(w, tmplName, data); err != nil {
     26 		renderError(w, "Template rendering failed", http.StatusInternalServerError)
     27 	}
     28 }
     29 
     30 func redirectWithWarning(w http.ResponseWriter, r *http.Request, baseURL, warningMsg string) {
     31 	redirectURL := baseURL
     32 	if warningMsg != "" {
     33 		redirectURL += "?warning=" + url.QueryEscape(warningMsg)
     34 	}
     35 	http.Redirect(w, r, redirectURL, http.StatusSeeOther)
     36 }
     37 
     38 func errorString(err error) string {
     39 	if err != nil {
     40 		return err.Error()
     41 	}
     42 	return ""
     43 }
     44 
     45 func successString(err error, msg string) string {
     46 	if err == nil {
     47 		return msg
     48 	}
     49 	return ""
     50 }
     51 
     52 func buildPageData(title string, data interface{}) PageData {
     53 	tagMap, _ := getTagData()
     54 	propMap, _ := getPropertyNav()
     55 	return PageData{
     56 		Title:       title,
     57 		Data:        data,
     58 		Tags:        tagMap,
     59 		Properties:  propMap,
     60 		GallerySize: config.GallerySize,
     61 	}
     62 }
     63 
     64 func getTagData() (map[string][]TagDisplay, error) {
     65 	rows, err := db.Query(`
     66 		SELECT c.name, t.value, COUNT(ft.file_id)
     67 		FROM tags t
     68 		JOIN categories c ON c.id = t.category_id
     69 		LEFT JOIN file_tags ft ON ft.tag_id = t.id
     70 		GROUP BY t.id
     71 		HAVING COUNT(ft.file_id) > 0
     72 		ORDER BY c.name, t.value`)
     73 	if err != nil {
     74 		return nil, err
     75 	}
     76 	defer rows.Close()
     77 
     78 	tagMap := make(map[string][]TagDisplay)
     79 	for rows.Next() {
     80 		var cat, val string
     81 		var count int
     82 		rows.Scan(&cat, &val, &count)
     83 		tagMap[cat] = append(tagMap[cat], TagDisplay{Value: val, Count: count})
     84 	}
     85 	return tagMap, nil
     86 }
     87 
     88 func tagsHandler(w http.ResponseWriter, r *http.Request) {
     89 	pageData := buildPageData("All Tags", nil)
     90 	pageData.Data = pageData.Tags
     91 	renderTemplate(w, "tags.html", pageData)
     92 }