One flag per user
This commit is contained in:
parent
f5363e17bc
commit
deece4f5d0
5 changed files with 64 additions and 34 deletions
|
@ -16,28 +16,29 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Book struct {
|
type Book struct {
|
||||||
Id string
|
Id string
|
||||||
Title string
|
Title string
|
||||||
Author []string
|
Author []string
|
||||||
Contributor string
|
Contributor string
|
||||||
Publisher string
|
Publisher string
|
||||||
Description string
|
Description string
|
||||||
Subject []string
|
Subject []string
|
||||||
Date string
|
Date string
|
||||||
Lang []string
|
Lang []string
|
||||||
Isbn string
|
Isbn string
|
||||||
Type string
|
Type string
|
||||||
Format string
|
Format string
|
||||||
Source string
|
Source string
|
||||||
Relation string
|
Relation string
|
||||||
Coverage string
|
Coverage string
|
||||||
Rights string
|
Rights string
|
||||||
Meta string
|
Meta string
|
||||||
FileSize int
|
FileSize int
|
||||||
Cover bool
|
Cover bool
|
||||||
Active bool
|
Active bool
|
||||||
BadQuality int `bad_quality`
|
BadQuality int `bad_quality`
|
||||||
Keywords []string
|
BadQualityReporters []string `bad_quality_reporters`
|
||||||
|
Keywords []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func indexBooks(coll *mgo.Collection) {
|
func indexBooks(coll *mgo.Collection) {
|
||||||
|
@ -132,8 +133,24 @@ func updateBook(coll *mgo.Collection, id string, data map[string]interface{}) er
|
||||||
return coll.Update(bson.M{"id": id}, bson.M{"$set": data})
|
return coll.Update(bson.M{"id": id}, bson.M{"$set": data})
|
||||||
}
|
}
|
||||||
|
|
||||||
func flagBadQuality(coll *mgo.Collection, id string) error {
|
func flagBadQuality(coll *mgo.Collection, id string, user string) error {
|
||||||
return coll.Update(bson.M{"id": id}, bson.M{"$inc": bson.M{"bad_quality": 1}})
|
b, err := getBookId(coll, id)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, reporter := range b.BadQualityReporters {
|
||||||
|
if reporter == user {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return coll.Update(
|
||||||
|
bson.M{"id": id},
|
||||||
|
bson.M{
|
||||||
|
"$inc": bson.M{"bad_quality": 1},
|
||||||
|
"$addToSet": bson.M{"bad_quality_reporters": user},
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func activeBook(coll *mgo.Collection, id string) error {
|
func activeBook(coll *mgo.Collection, id string) error {
|
||||||
|
|
|
@ -101,9 +101,9 @@ func TestFlag(t *testing.T) {
|
||||||
}
|
}
|
||||||
db.ActiveBook(id3)
|
db.ActiveBook(id3)
|
||||||
|
|
||||||
db.FlagBadQuality(id)
|
db.FlagBadQuality(id, "1")
|
||||||
db.FlagBadQuality(id)
|
db.FlagBadQuality(id, "2")
|
||||||
db.FlagBadQuality(id3)
|
db.FlagBadQuality(id3, "1")
|
||||||
|
|
||||||
b, _ := db.GetBookId(id)
|
b, _ := db.GetBookId(id)
|
||||||
if b.BadQuality != 2 {
|
if b.BadQuality != 2 {
|
||||||
|
|
|
@ -85,9 +85,9 @@ func (db *DB) UpdateBook(id string, data map[string]interface{}) error {
|
||||||
return updateBook(booksColl, id, data)
|
return updateBook(booksColl, id, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) FlagBadQuality(id string) error {
|
func (db *DB) FlagBadQuality(id string, user string) error {
|
||||||
booksColl := db.session.DB(db.name).C(books_coll)
|
booksColl := db.session.DB(db.name).C(books_coll)
|
||||||
return flagBadQuality(booksColl, id)
|
return flagBadQuality(booksColl, id, user)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) ActiveBook(id string) error {
|
func (db *DB) ActiveBook(id string) error {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{{template "header.html" .S}}
|
{{template "header.html" .S}}
|
||||||
|
|
||||||
{{$isAdmin := .S.IsAdmin}}
|
{{$isAdmin := .S.IsAdmin}}
|
||||||
|
{{$flaggedBadQuality := .FlaggedBadQuality}}
|
||||||
{{with .Book}}
|
{{with .Book}}
|
||||||
<script>
|
<script>
|
||||||
function delBook(){
|
function delBook(){
|
||||||
|
@ -60,7 +61,7 @@ function delBook(){
|
||||||
{{end}}
|
{{end}}
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<br />
|
<br />
|
||||||
<a href="/flag/bad_quality/{{.Id}}" class="btn btn-small"><i class="icon-warning-sign"></i> Report bad quality</a>
|
<a href="{{if $flaggedBadQuality}}#{{else}}/flag/bad_quality/{{.Id}}{{end}}" class="btn btn-small{{if $flaggedBadQuality}} disabled{{end}}"><i class="icon-warning-sign"></i> Report bad quality</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
20
trantor.go
20
trantor.go
|
@ -40,9 +40,10 @@ func logoutHandler(h handler) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type bookData struct {
|
type bookData struct {
|
||||||
S Status
|
S Status
|
||||||
Book database.Book
|
Book database.Book
|
||||||
Description []string
|
Description []string
|
||||||
|
FlaggedBadQuality bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func bookHandler(h handler) {
|
func bookHandler(h handler) {
|
||||||
|
@ -56,6 +57,13 @@ func bookHandler(h handler) {
|
||||||
}
|
}
|
||||||
data.Book = book
|
data.Book = book
|
||||||
data.Description = strings.Split(data.Book.Description, "\n")
|
data.Description = strings.Split(data.Book.Description, "\n")
|
||||||
|
data.FlaggedBadQuality = false
|
||||||
|
for _, reporter := range book.BadQualityReporters {
|
||||||
|
if reporter == h.sess.User || reporter == h.sess.Id() {
|
||||||
|
data.FlaggedBadQuality = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
loadTemplate(h, "book", data)
|
loadTemplate(h, "book", data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +98,11 @@ func downloadHandler(h handler) {
|
||||||
|
|
||||||
func flagHandler(h handler) {
|
func flagHandler(h handler) {
|
||||||
id := mux.Vars(h.r)["id"]
|
id := mux.Vars(h.r)["id"]
|
||||||
err := h.db.FlagBadQuality(id)
|
user := h.sess.Id()
|
||||||
|
if h.sess.User != "" {
|
||||||
|
user = h.sess.User
|
||||||
|
}
|
||||||
|
err := h.db.FlagBadQuality(id, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("An error ocurred while flaging ", id, ": ", err)
|
log.Warn("An error ocurred while flaging ", id, ": ", err)
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue