tagliatelle

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

include-general.go (2071B)


      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 	return PageData{Title: title, Data: data, Tags: tagMap, GallerySize: config.GallerySize,}
     55 }
     56 
     57 func getTagData() (map[string][]TagDisplay, error) {
     58 	rows, err := db.Query(`
     59 		SELECT c.name, t.value, COUNT(ft.file_id)
     60 		FROM tags t
     61 		JOIN categories c ON c.id = t.category_id
     62 		LEFT JOIN file_tags ft ON ft.tag_id = t.id
     63 		GROUP BY t.id
     64 		HAVING COUNT(ft.file_id) > 0
     65 		ORDER BY c.name, t.value`)
     66 	if err != nil {
     67 		return nil, err
     68 	}
     69 	defer rows.Close()
     70 
     71 	tagMap := make(map[string][]TagDisplay)
     72 	for rows.Next() {
     73 		var cat, val string
     74 		var count int
     75 		rows.Scan(&cat, &val, &count)
     76 		tagMap[cat] = append(tagMap[cat], TagDisplay{Value: val, Count: count})
     77 	}
     78 	return tagMap, nil
     79 }
     80 
     81 func tagsHandler(w http.ResponseWriter, r *http.Request) {
     82 	pageData := buildPageData("All Tags", nil)
     83 	pageData.Data = pageData.Tags
     84 	renderTemplate(w, "tags.html", pageData)
     85 }