def report(self, quote_id): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID.', 'status': 'error'} if request.environ['REQUEST_METHOD'] == 'POST': if self._has_made_too_many_reports(): # TODO: This should return a HTTP 429! But pylons.controllers.util.abort() # doesn't seem to support it :/ return {'msg': 'You are reporting quotes too fast. Slow down!', 'status': 'error'} if db.query(ReportedQuotes).filter_by(user_id=c.user.id).\ filter_by(quote_id=quote.id).first(): return {'msg': 'You already reported this quote in the past. Ignored.', 'status': 'error'} if not quote.status == QSTATUS['approved']: return {'msg': 'Quote is not approved, therefore cannot be reported.', 'status': 'error'} if db.query(ReportedQuotes).filter_by(user_id=c.user.id).\ filter_by(quote_id=quote.id).first(): return {'msg': 'You already reported this quote in the past. Ignored.', 'status': 'error'} c.user.reported_quotes.append(quote) quote.status = QSTATUS['reported'] db.commit() return {'msg': 'Quote reported.', 'status': 'success'} else: abort(405)
def disapproved(self, page=1): authorize() quotes = db.query(Quote).filter( Quote.status == QSTATUS['disapproved']).order_by( Quote.submitted.desc()).all() c.paginator = self._create_paginator(quotes, page) c.page = 'disapproved' return render('/browse.mako')
def vote(self, direction, quote_id): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if request.environ['REQUEST_METHOD'] == 'PUT': if not quote: return {'msg': 'Invalid quote ID', 'status': 'error'} already_voted = '' for assoc in quote.voters: if assoc.user == c.user: already_voted = True # cancel the last vote: if assoc.direction == 'up': quote.rating -= 1 elif assoc.direction == 'down': quote.rating += 1 db.delete(assoc) assoc = VoteToUser(direction=direction) assoc.user = c.user quote.voters.append(assoc) if direction == 'up': quote.rating += 1 elif direction == 'down': quote.rating -= 1 else: return {'msg': 'Invalid vote direction', 'status': 'error'} if not already_voted: quote.votes += 1 db.commit() return {'status': 'success', 'msg': 'Vote cast!'} elif request.environ['REQUEST_METHOD'] == 'DELETE': for assoc in quote.voters: if assoc.user == c.user: db.delete(assoc) if direction == 'up': quote.rating -= 1 elif direction == 'down': quote.rating += 1 else: return {'msg': 'Invalid vote direction', 'status': 'error'} quote.votes -= 1 db.commit() return {'status': 'success', 'msg': 'Vote annulled!!'} else: abort(405)
def _is_deleteable_or_disapprovable(self, quote_id): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID.', 'status': 'error'} if not h.quote_is_deleteable(quote): return {'msg': 'You do not have permission to delete this quote.', 'status': 'error'} c.user.deleted_quotes.append(quote) return {'status': 'success', 'quote': quote}
def _is_deleteable_or_disapprovable(self, quote_id): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID.', 'status': 'error'} if not h.quote_is_deleteable(quote): return { 'msg': 'You do not have permission to delete this quote.', 'status': 'error' } c.user.deleted_quotes.append(quote) return {'status': 'success', 'quote': quote}
def approve(self, quote_id): authorize() if not h.is_admin(): abort(401) if request.environ['REQUEST_METHOD'] == 'POST': quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID.', 'status': 'error'} quote.status = QSTATUS['approved'] db.commit() return {'msg': 'Quote approved.', 'status': 'success'} else: abort(405)
def approve(self, quote_id): authorize() if not h.is_admin(): abort(401) if request.environ['REQUEST_METHOD'] == 'POST': quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID', 'status': 'error'} quote.approved = 1 db.commit() return {'msg': 'Quote approved', 'status': 'success'}
def vote(self, quote_id, direction): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if request.environ['REQUEST_METHOD'] == 'POST': if not quote: return {'msg': 'Invalid quote ID.', 'status': 'error'} already_voted = '' for assoc in quote.voters: if assoc.user == c.user: already_voted = True # cancel the last vote: if assoc.direction == 'up': quote.rating -= 1 elif assoc.direction == 'down': quote.rating += 1 db.delete(assoc) assoc = VoteToUser(direction=direction) assoc.user = c.user quote.voters.append(assoc) if direction == 'up': quote.rating += 1 elif direction == 'down': quote.rating -= 1 else: return {'msg': 'Invalid vote direction.', 'status': 'error'} if not already_voted: quote.votes += 1 db.commit() return {'status': 'success', 'msg': 'Vote cast!'} elif request.environ['REQUEST_METHOD'] == 'DELETE': for assoc in quote.voters: if assoc.user == c.user: db.delete(assoc) if direction == 'up': quote.rating -= 1 elif direction == 'down': quote.rating += 1 else: return {'msg': 'Invalid vote direction.', 'status': 'error'} quote.votes -= 1 db.commit() return {'status': 'success', 'msg': 'Vote annulled!'} else: abort(405)
def favourite(self, quote_id): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID', 'status': 'error'} if request.environ['REQUEST_METHOD'] == 'PUT': c.user.favourites.append(quote) db.commit() return {'msg': 'Quote favourited', 'status': 'success'} elif request.environ['REQUEST_METHOD'] == 'DELETE': if not quote in c.user.favourites: return {'msg': "Can't remove: This quote isn't in your favourites", 'status': 'error'} c.user.favourites.remove(quote) db.commit() return {'msg': 'Removed favourite', 'status': 'success'}
def quote(self): authorize() c.page = 'new quote' if request.environ['REQUEST_METHOD'] == 'GET': return render('/create/form.mako') elif request.environ['REQUEST_METHOD'] == 'POST': quote_body = request.params.get('quote_body', '') if not quote_body: abort(400) notes = request.params.get('notes', '') tags = request.params.get('tags', '').split(' ') result = create_quote(quote_body, notes, tags) if result: return render('/create/success.mako') else: abort(500) else: abort(400)
def quote(self): authorize() c.page = 'new quote' if request.environ['REQUEST_METHOD'] == 'GET': return render('/create/form.mako') elif request.environ['REQUEST_METHOD'] == 'POST': quote_body = request.params.get('quote_body', '') if not quote_body: abort(400) notes = request.params.get('notes', '') tags = filter( None, request.params.get('tags', '').replace(',', ' ').split(' ')) result = create_quote(quote_body, notes, tags) if result: return render('/create/success.mako') else: abort(500) else: abort(400)
def favourite(self, quote_id): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID.', 'status': 'error'} if request.environ['REQUEST_METHOD'] == 'POST': c.user.favourites.append(quote) db.commit() return {'msg': 'Quote favourited.', 'status': 'success'} elif request.environ['REQUEST_METHOD'] == 'DELETE': if not quote in c.user.favourites: return { 'msg': "Can't remove: This quote isn't in your favourites.", 'status': 'error' } c.user.favourites.remove(quote) db.commit() return {'msg': 'Removed favourite.', 'status': 'success'} else: abort(405)
def report(self, quote_id): authorize() quote = db.query(Quote).filter(Quote.id == quote_id).first() if not quote: return {'msg': 'Invalid quote ID.', 'status': 'error'} if request.environ['REQUEST_METHOD'] == 'POST': if self._has_made_too_many_reports(): # TODO: This should return a HTTP 429! But pylons.controllers.util.abort() # doesn't seem to support it :/ return { 'msg': 'You are reporting quotes too fast. Slow down!', 'status': 'error' } if db.query(ReportedQuotes).filter_by(user_id=c.user.id).\ filter_by(quote_id=quote.id).first(): return { 'msg': 'You already reported this quote in the past. Ignored.', 'status': 'error' } if not quote.status == QSTATUS['approved']: return { 'msg': 'Quote is not approved, therefore cannot be reported.', 'status': 'error' } if db.query(ReportedQuotes).filter_by(user_id=c.user.id).\ filter_by(quote_id=quote.id).first(): return { 'msg': 'You already reported this quote in the past. Ignored.', 'status': 'error' } c.user.reported_quotes.append(quote) quote.status = QSTATUS['reported'] db.commit() return {'msg': 'Quote reported.', 'status': 'success'} else: abort(405)
def favourites(self, page=1): authorize() c.paginator = self._create_paginator(c.user.favourites, page) c.page = 'favourites' return render('/browse.mako')
def disapproved(self, page=1): authorize() quotes = db.query(Quote).filter(Quote.status == QSTATUS['disapproved']).order_by(Quote.submitted.desc()).all() c.paginator = self._create_paginator(quotes, page) c.page = 'disapproved' return render('/browse.mako')
def favourites(self, page=1): authorize() c.paginator = self._create_paginator(c.user.favourites, page) c.page = 'favourites' return render(self._get_template_name())