Fix modpanel torrent edit (#328)
* Fix modpanel torrent edits breaking torrents * Fix hash not being monospace anymore * Fix modpanel torrent edit strings * Fix modpanel torrent edit creating a new user (wtf GORM)
Cette révision appartient à :
Parent
70795078df
révision
7bc395068d
6 fichiers modifiés avec 91 ajouts et 39 suppressions
|
@ -1,5 +1,3 @@
|
|||
// hurry mod panel to get it faaaaaaaaaaaast
|
||||
|
||||
package router
|
||||
|
||||
import (
|
||||
|
@ -9,9 +7,7 @@ import (
|
|||
"net/http"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/ewhal/nyaa/config"
|
||||
"github.com/ewhal/nyaa/db"
|
||||
"github.com/ewhal/nyaa/model"
|
||||
"github.com/ewhal/nyaa/service"
|
||||
|
@ -186,6 +182,7 @@ func CommentsListPanel(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
func TorrentEditModPanel(w http.ResponseWriter, r *http.Request) {
|
||||
currentUser := GetUser(r)
|
||||
if userPermission.HasAdmin(currentUser) {
|
||||
|
@ -197,7 +194,6 @@ func TorrentEditModPanel(w http.ResponseWriter, r *http.Request) {
|
|||
uploadForm := NewUploadForm()
|
||||
uploadForm.Name = torrentJson.Name
|
||||
uploadForm.Category = torrentJson.Category + "_" + torrentJson.SubCategory
|
||||
uploadForm.Magnet = string(torrentJson.Magnet)
|
||||
uploadForm.Status = torrentJson.Status
|
||||
uploadForm.Description = string(torrentJson.Description)
|
||||
htv := PanelTorrentEdVbs{uploadForm, NewSearchForm(), currentUser, form.NewErrors(), form.NewInfos(), r.URL}
|
||||
|
@ -209,11 +205,11 @@ func TorrentEditModPanel(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
func TorrentPostEditModPanel(w http.ResponseWriter, r *http.Request) {
|
||||
currentUser := GetUser(r)
|
||||
if userPermission.HasAdmin(currentUser) {
|
||||
if config.UploadsDisabled {
|
||||
http.Error(w, "Error uploads are disabled", http.StatusInternalServerError)
|
||||
if !userPermission.HasAdmin(currentUser) {
|
||||
http.Error(w, "admins only", http.StatusForbidden)
|
||||
return
|
||||
}
|
||||
var uploadForm UploadForm
|
||||
|
@ -222,32 +218,25 @@ func TorrentPostEditModPanel(w http.ResponseWriter, r *http.Request) {
|
|||
infos := form.NewInfos()
|
||||
torrent, _ := torrentService.GetTorrentById(id)
|
||||
if (torrent.ID > 0) {
|
||||
// validation is done in ExtractInfo()
|
||||
errUp := uploadForm.ExtractInfo(r)
|
||||
errUp := uploadForm.ExtractEditInfo(r)
|
||||
if errUp != nil {
|
||||
err["errors"] = append(err["errors"], "Failed to upload!")
|
||||
err["errors"] = append(err["errors"], "Failed to update torrent!")
|
||||
}
|
||||
if (len(err) == 0) {
|
||||
// update some (but not all!) values
|
||||
torrent.Name = uploadForm.Name
|
||||
torrent.Category = uploadForm.CategoryID
|
||||
torrent.SubCategory = uploadForm.SubCategoryID
|
||||
torrent.Status = uploadForm.Status
|
||||
torrent.Description = uploadForm.Description
|
||||
torrent.Uploader = nil // GORM will create a new user otherwise (wtf?!)
|
||||
db.ORM.Save(&torrent)
|
||||
infos["infos"] = append(infos["infos"], "Torrent details updated.")
|
||||
}
|
||||
if (len(err) > 0) {
|
||||
//add to db and redirect depending on result
|
||||
torrent.Name= uploadForm.Name
|
||||
torrent.Category= uploadForm.CategoryID
|
||||
torrent.SubCategory=uploadForm.SubCategoryID
|
||||
torrent.Status= uploadForm.Status
|
||||
torrent.Hash= uploadForm.Infohash
|
||||
torrent.Date= time.Now()
|
||||
torrent.Filesize= uploadForm.Filesize
|
||||
torrent.Description= uploadForm.Description
|
||||
db.ORM.Save(&torrent)
|
||||
infos["infos"] = append(infos["infos"], "Torrent details updated!")
|
||||
}
|
||||
}
|
||||
languages.SetTranslationFromRequest(panelTorrentEd, r, "en-us")
|
||||
htv := PanelTorrentEdVbs{uploadForm, NewSearchForm(), currentUser, err, infos, r.URL}
|
||||
_ = panelTorrentEd.ExecuteTemplate(w, "admin_index.html", htv)
|
||||
} else {
|
||||
http.Error(w, "admins only", http.StatusForbidden)
|
||||
}
|
||||
|
||||
languages.SetTranslationFromRequest(panelTorrentEd, r, "en-us")
|
||||
htv := PanelTorrentEdVbs{uploadForm, NewSearchForm(), currentUser, err, infos, r.URL}
|
||||
_ = panelTorrentEd.ExecuteTemplate(w, "admin_index.html", htv)
|
||||
}
|
||||
|
||||
func CommentDeleteModPanel(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
|
@ -193,6 +193,36 @@ func (f *UploadForm) ExtractInfo(r *http.Request) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (f *UploadForm) ExtractEditInfo(r *http.Request) error {
|
||||
f.Name = r.FormValue(UploadFormName)
|
||||
f.Category = r.FormValue(UploadFormCategory)
|
||||
f.Description = r.FormValue(UploadFormDescription)
|
||||
f.Status, _ = strconv.Atoi(r.FormValue(UploadFormStatus))
|
||||
|
||||
// trim whitespace
|
||||
f.Name = util.TrimWhitespaces(f.Name)
|
||||
f.Description = p.Sanitize(util.TrimWhitespaces(f.Description))
|
||||
|
||||
catsSplit := strings.Split(f.Category, "_")
|
||||
// need this to prevent out of index panics
|
||||
if len(catsSplit) == 2 {
|
||||
CatID, err := strconv.Atoi(catsSplit[0])
|
||||
if err != nil {
|
||||
return ErrInvalidTorrentCategory
|
||||
}
|
||||
SubCatID, err := strconv.Atoi(catsSplit[1])
|
||||
if err != nil {
|
||||
return ErrInvalidTorrentCategory
|
||||
}
|
||||
|
||||
f.CategoryID = CatID
|
||||
f.SubCategoryID = SubCatID
|
||||
} else {
|
||||
return ErrInvalidTorrentCategory
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func WriteTorrentToDisk(file multipart.File, name string, fullpath *string) error {
|
||||
_, seekErr := file.Seek(0, io.SeekStart)
|
||||
if seekErr != nil {
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
<label for="name">{{T "name"}}</label>
|
||||
<input type="text" name="name" class="form-control" placeholder="File Name" value="{{.Name}}" required>
|
||||
</div>
|
||||
<!--
|
||||
<div class="form-group">
|
||||
<label for="torrent">{{T "torrent_file"}}</label>
|
||||
<input type="file" name="torrent" id="torrent" accept=".torrent">
|
||||
|
@ -21,7 +22,7 @@
|
|||
<label for="magnet">{{T "magnet_link"}}</label>
|
||||
<input type="text" name="magnet" class="form-control"
|
||||
style="width:60rem" placeholder="{{T "magnet_link"}}" value="{{.Magnet}}">
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="form-group">
|
||||
<label for="c">{{T "category"}}</label>
|
||||
<select name="c" class="form-control input-sm">
|
||||
|
@ -47,11 +48,11 @@
|
|||
<div class="form-group">
|
||||
<label for="Status">{{T "torrent_status"}}</label>
|
||||
<select name="status" class="form-control input-sm">
|
||||
<option value="0" {{if eq .Status 0}}selected{{end}}>{{T "mark_as_hidden"}}</option>
|
||||
<option value="1" {{if eq .Status 1}}selected{{end}}>{{T "mark_as_normal"}}</option>
|
||||
<option value="2" {{if eq .Status 2}}selected{{end}}>{{T "mark_as_remake"}}</option>
|
||||
<option value="3" {{if eq .Status 3}}selected{{end}}>{{T "mark_as_trusted"}}</option>
|
||||
<option value="4" {{if eq .Status 4}}selected{{end}}>{{T "mark_as_aplus"}}</option>
|
||||
<option value="0" {{if eq .Status 0}}selected{{end}}>{{T "torrent_status_hidden"}}</option>
|
||||
<option value="1" {{if eq .Status 1}}selected{{end}}>{{T "torrent_status_normal"}}</option>
|
||||
<option value="2" {{if eq .Status 2}}selected{{end}}>{{T "torrent_status_remake"}}</option>
|
||||
<option value="3" {{if eq .Status 3}}selected{{end}}>{{T "trusted"}}</option>
|
||||
<option value="4" {{if eq .Status 4}}selected{{end}}>A+</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
</div>
|
||||
<div class="col-md-4">
|
||||
<h4>{{T "hash"}}</h4>
|
||||
<p>{{.Hash}}</p>
|
||||
<p class="torrent-hash">{{.Hash}}</p>
|
||||
<hr>
|
||||
<h4>{{T "date"}}</h4>
|
||||
<p class="date-full">{{.Date}}</p>
|
||||
|
|
|
@ -574,5 +574,21 @@
|
|||
{
|
||||
"id": "email_changed",
|
||||
"translation": "E-Mail erfolgreich geändert! Bitte bestätige die Änderung mit dem Bestätigungs-Link (an %s gesendet)"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status",
|
||||
"translation": "Torrent-Status"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status_hidden",
|
||||
"translation": "Versteckt"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status_normal",
|
||||
"translation": "Normal"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status_remake",
|
||||
"translation": "Remake"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -582,5 +582,21 @@
|
|||
{
|
||||
"id": "email_changed",
|
||||
"translation": "Email changed successfully! You will have, however, to confirm it by clicking to the link sent to: %s"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status",
|
||||
"translation": "Torrent status"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status_hidden",
|
||||
"translation": "Hidden"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status_normal",
|
||||
"translation": "Normal"
|
||||
},
|
||||
{
|
||||
"id": "torrent_status_remake",
|
||||
"translation": "Remake"
|
||||
}
|
||||
]
|
||||
|
|
Référencer dans un nouveau ticket