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

@ -37,6 +37,7 @@ type Book struct {
Cover bool Cover bool
Active bool Active bool
BadQuality int `bad_quality` BadQuality int `bad_quality`
BadQualityReporters []string `bad_quality_reporters`
Keywords []string Keywords []string
} }
@ -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

@ -43,6 +43,7 @@ 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)
} }