Exemple #1
0
 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)
Exemple #2
0
 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')
Exemple #3
0
    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)
Exemple #4
0
 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}
Exemple #5
0
 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}
Exemple #6
0
 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)
Exemple #7
0
 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'}
Exemple #8
0
    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)
Exemple #9
0
 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'}
Exemple #10
0
 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)
Exemple #11
0
    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)
Exemple #12
0
 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)
Exemple #13
0
    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)
Exemple #14
0
 def favourites(self, page=1):
     authorize()
     c.paginator = self._create_paginator(c.user.favourites, page)
     c.page = 'favourites'
     return render('/browse.mako')
Exemple #15
0
 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')
Exemple #16
0
 def favourites(self, page=1):
     authorize()
     c.paginator = self._create_paginator(c.user.favourites, page)
     c.page = 'favourites'
     return render('/browse.mako')
Exemple #17
0
 def favourites(self, page=1):
     authorize()
     c.paginator = self._create_paginator(c.user.favourites, page)
     c.page = 'favourites'
     return render(self._get_template_name())