One flag per user

This commit is contained in:
Las Zenow 2014-09-07 21:13:52 -05:00
parent f5363e17bc
commit deece4f5d0
5 changed files with 64 additions and 34 deletions

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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>

View file

@ -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)
} }