diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-05-01 15:11:47 -0300 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-05-01 15:11:47 -0300 |
commit | 0f6f30f93436b8ce77fcad1c12391351eae36bcd (patch) | |
tree | 5a7d65e503212e7784e480a5632811f4627e2341 | |
parent | dcc992c34db1d22bb03296d2b61782ed5f85f0f2 (diff) | |
download | askbot-0f6f30f93436b8ce77fcad1c12391351eae36bcd.tar.gz askbot-0f6f30f93436b8ce77fcad1c12391351eae36bcd.tar.bz2 askbot-0f6f30f93436b8ce77fcad1c12391351eae36bcd.zip |
renamed PostRejectReason to PostFlagReason and merged two short model files into bigger ones
-rw-r--r-- | askbot/migrations/0119_auto__add_postflagreason.py (renamed from askbot/migrations/0119_auto__add_postrejectreason.py) | 16 | ||||
-rw-r--r-- | askbot/models/__init__.py | 10 | ||||
-rw-r--r-- | askbot/models/answer.py | 19 | ||||
-rw-r--r-- | askbot/models/base.py | 6 | ||||
-rw-r--r-- | askbot/models/meta.py | 89 | ||||
-rw-r--r-- | askbot/models/post.py | 28 | ||||
-rw-r--r-- | askbot/models/repute.py | 80 | ||||
-rw-r--r-- | askbot/views/commands.py | 6 | ||||
-rw-r--r-- | askbot/views/users.py | 2 |
9 files changed, 123 insertions, 133 deletions
diff --git a/askbot/migrations/0119_auto__add_postrejectreason.py b/askbot/migrations/0119_auto__add_postflagreason.py index 7bc89249..1e2aedb8 100644 --- a/askbot/migrations/0119_auto__add_postrejectreason.py +++ b/askbot/migrations/0119_auto__add_postflagreason.py @@ -8,19 +8,19 @@ from django.db import models class Migration(SchemaMigration): def forwards(self, orm): - # Adding model 'PostRejectReason' - db.create_table('askbot_postrejectreason', ( + # Adding model 'PostFlagReason' + db.create_table('askbot_postflagreason', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('added_at', self.gf('django.db.models.fields.DateTimeField')()), ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), ('title', self.gf('django.db.models.fields.CharField')(max_length=128)), ('details', self.gf('django.db.models.fields.related.ForeignKey')(related_name='post_reject_reasons', to=orm['askbot.Post'])), )) - db.send_create_signal('askbot', ['PostRejectReason']) + db.send_create_signal('askbot', ['PostFlagReason']) def backwards(self, orm): - # Deleting model 'PostRejectReason' - db.delete_table('askbot_postrejectreason') + # Deleting model 'PostFlagReason' + db.delete_table('askbot_postflagreason') models = { 'askbot.activity': { @@ -154,8 +154,8 @@ class Migration(SchemaMigration): 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) }, - 'askbot.postrejectreason': { - 'Meta': {'object_name': 'PostRejectReason'}, + 'askbot.postflagreason': { + 'Meta': {'object_name': 'PostFlagReason'}, 'added_at': ('django.db.models.fields.DateTimeField', [], {}), 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), 'details': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'post_reject_reasons'", 'to': "orm['askbot.Post']"}), @@ -314,4 +314,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['askbot']
\ No newline at end of file + complete_apps = ['askbot'] diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index bc9ddfbe..e50baf0f 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -26,16 +26,14 @@ from askbot.models.question import Thread from askbot.skins import utils as skin_utils from askbot.models.question import QuestionView, AnonymousQuestion from askbot.models.question import FavoriteQuestion -from askbot.models.answer import AnonymousAnswer from askbot.models.tag import Tag, MarkedTag -from askbot.models.meta import Vote, PostRejectReason from askbot.models.user import EmailFeedSetting, ActivityAuditStatus, Activity from askbot.models.user import GroupMembership, GroupProfile -from askbot.models.post import Post, PostRevision +from askbot.models.post import Post, PostRevision, PostFlagReason, AnonymousAnswer from askbot.models.reply_by_email import ReplyAddress from askbot.models import signals from askbot.models.badges import award_badges_signal, get_badge, BadgeData -from askbot.models.repute import Award, Repute +from askbot.models.repute import Award, Repute, Vote from askbot import auth from askbot.utils.decorators import auto_now_timestamp from askbot.utils.slug import slugify @@ -1521,7 +1519,7 @@ def user_create_post_reject_reason( self, title = None, details = None, timestamp = None ): """creates and returs the post reject reason""" - reason = PostRejectReason( + reason = PostFlagReason( title = title, added_at = timestamp, author = self @@ -3051,7 +3049,7 @@ __all__ = [ 'Tag', 'Vote', - 'PostRejectReason', + 'PostFlagReason', 'MarkedTag', 'BadgeData', diff --git a/askbot/models/answer.py b/askbot/models/answer.py deleted file mode 100644 index 8bed896f..00000000 --- a/askbot/models/answer.py +++ /dev/null @@ -1,19 +0,0 @@ -import datetime -from django.db import models -from askbot.models.base import AnonymousContent - - -class AnonymousAnswer(AnonymousContent): - question = models.ForeignKey('Post', related_name='anonymous_answers') - - def publish(self, user): - added_at = datetime.datetime.now() - from askbot import models - models.Post.objects.create_new_answer( - thread=self.question.thread, - author=user, - added_at=added_at, - wiki=self.wiki, - text=self.text - ) - self.delete() diff --git a/askbot/models/base.py b/askbot/models/base.py index 0686d50c..b3a12fbf 100644 --- a/askbot/models/base.py +++ b/askbot/models/base.py @@ -1,9 +1,7 @@ import datetime - from django.db import models from django.contrib.auth.models import User - class BaseQuerySetManager(models.Manager): """a base class that allows chainable qustom filters on the query sets @@ -44,9 +42,7 @@ class BaseQuerySetManager(models.Manager): class AnonymousContent(models.Model): - """ - Base class for AnonymousQuestion and AnonymousAnswer - """ + """Base class for AnonymousQuestion and AnonymousAnswer""" session_key = models.CharField(max_length=40) #session id for anonymous questions wiki = models.BooleanField(default=False) added_at = models.DateTimeField(default=datetime.datetime.now) diff --git a/askbot/models/meta.py b/askbot/models/meta.py deleted file mode 100644 index 7e210641..00000000 --- a/askbot/models/meta.py +++ /dev/null @@ -1,89 +0,0 @@ -import datetime -from django.db import models - - -class VoteManager(models.Manager): - def get_up_vote_count_from_user(self, user): - if user is not None: - return self.filter(user=user, vote=1).count() - else: - return 0 - - def get_down_vote_count_from_user(self, user): - if user is not None: - return self.filter(user=user, vote=-1).count() - else: - return 0 - - def get_votes_count_today_from_user(self, user): - if user is not None: - today = datetime.date.today() - return self.filter(user=user, voted_at__range=(today, today + datetime.timedelta(1))).count() - else: - return 0 - - -class Vote(models.Model): - VOTE_UP = +1 - VOTE_DOWN = -1 - VOTE_CHOICES = ( - (VOTE_UP, u'Up'), - (VOTE_DOWN, u'Down'), - ) - user = models.ForeignKey('auth.User', related_name='votes') - voted_post = models.ForeignKey('Post', related_name='votes') - - vote = models.SmallIntegerField(choices=VOTE_CHOICES) - voted_at = models.DateTimeField(default=datetime.datetime.now) - - objects = VoteManager() - - class Meta: - unique_together = ('user', 'voted_post') - app_label = 'askbot' - db_table = u'vote' - - def __unicode__(self): - return '[%s] voted at %s: %s' %(self.user, self.voted_at, self.vote) - - def __int__(self): - """1 if upvote -1 if downvote""" - return self.vote - - def is_upvote(self): - return self.vote == self.VOTE_UP - - def is_downvote(self): - return self.vote == self.VOTE_DOWN - - def is_opposite(self, vote_type): - assert(vote_type in (self.VOTE_UP, self.VOTE_DOWN)) - return self.vote != vote_type - - def cancel(self): - """cancel the vote - while taking into account whether vote was up - or down - - return change in score on the post - """ - #importing locally because of circular dependency - from askbot import auth - score_before = self.voted_post.score - if self.vote > 0: - # cancel upvote - auth.onUpVotedCanceled(self, self.voted_post, self.user) - else: - # cancel downvote - auth.onDownVotedCanceled(self, self.voted_post, self.user) - score_after = self.voted_post.score - - return score_after - score_before - -class PostRejectReason(models.Model): - added_at = models.DateTimeField() - author = models.ForeignKey('auth.User') - title = models.CharField(max_length=128) - details = models.ForeignKey('Post', related_name = 'post_reject_reasons') - class Meta: - app_label = 'askbot' diff --git a/askbot/models/post.py b/askbot/models/post.py index 64a24906..89763c1f 100644 --- a/askbot/models/post.py +++ b/askbot/models/post.py @@ -29,7 +29,7 @@ from askbot.conf import settings as askbot_settings from askbot import exceptions from askbot.utils import markup from askbot.utils.html import sanitize_html -from askbot.models.base import BaseQuerySetManager +from askbot.models.base import BaseQuerySetManager, AnonymousContent #todo: maybe merge askbot.utils.markup and forum.utils.html from askbot.utils.diff import textDiff as htmldiff @@ -1644,7 +1644,7 @@ class Post(models.Model): return self.parent.comments.filter(added_at__lt = self.added_at).count() + 1 def is_upvoted_by(self, user): - from askbot.models.meta import Vote + from askbot.models.repute import Vote return Vote.objects.filter(user=user, voted_post=self, vote=Vote.VOTE_UP).exists() def is_last(self): @@ -1872,3 +1872,27 @@ class PostRevision(models.Model): def get_snippet(self, max_length = 120): """same as Post.get_snippet""" return html_utils.strip_tags(self.html)[:max_length] + '...' + + +class PostFlagReason(models.Model): + added_at = models.DateTimeField() + author = models.ForeignKey('auth.User') + title = models.CharField(max_length=128) + details = models.ForeignKey(Post, related_name = 'post_reject_reasons') + class Meta: + app_label = 'askbot' + + +class AnonymousAnswer(AnonymousContent): + question = models.ForeignKey(Post, related_name='anonymous_answers') + + def publish(self, user): + added_at = datetime.datetime.now() + Post.objects.create_new_answer( + thread=self.question.thread, + author=user, + added_at=added_at, + wiki=self.wiki, + text=self.text + ) + self.delete() diff --git a/askbot/models/repute.py b/askbot/models/repute.py index c9c1b8bf..09e74067 100644 --- a/askbot/models/repute.py +++ b/askbot/models/repute.py @@ -7,6 +7,85 @@ import datetime from askbot import const from django.core.urlresolvers import reverse +class VoteManager(models.Manager): + def get_up_vote_count_from_user(self, user): + if user is not None: + return self.filter(user=user, vote=1).count() + else: + return 0 + + def get_down_vote_count_from_user(self, user): + if user is not None: + return self.filter(user=user, vote=-1).count() + else: + return 0 + + def get_votes_count_today_from_user(self, user): + if user is not None: + today = datetime.date.today() + return self.filter(user=user, voted_at__range=(today, today + datetime.timedelta(1))).count() + else: + return 0 + + +class Vote(models.Model): + VOTE_UP = +1 + VOTE_DOWN = -1 + VOTE_CHOICES = ( + (VOTE_UP, u'Up'), + (VOTE_DOWN, u'Down'), + ) + user = models.ForeignKey('auth.User', related_name='votes') + voted_post = models.ForeignKey('Post', related_name='votes') + + vote = models.SmallIntegerField(choices=VOTE_CHOICES) + voted_at = models.DateTimeField(default=datetime.datetime.now) + + objects = VoteManager() + + class Meta: + unique_together = ('user', 'voted_post') + app_label = 'askbot' + db_table = u'vote' + + def __unicode__(self): + return '[%s] voted at %s: %s' %(self.user, self.voted_at, self.vote) + + def __int__(self): + """1 if upvote -1 if downvote""" + return self.vote + + def is_upvote(self): + return self.vote == self.VOTE_UP + + def is_downvote(self): + return self.vote == self.VOTE_DOWN + + def is_opposite(self, vote_type): + assert(vote_type in (self.VOTE_UP, self.VOTE_DOWN)) + return self.vote != vote_type + + def cancel(self): + """cancel the vote + while taking into account whether vote was up + or down + + return change in score on the post + """ + #importing locally because of circular dependency + from askbot import auth + score_before = self.voted_post.score + if self.vote > 0: + # cancel upvote + auth.onUpVotedCanceled(self, self.voted_post, self.user) + else: + # cancel downvote + auth.onDownVotedCanceled(self, self.voted_post, self.user) + score_after = self.voted_post.score + + return score_after - score_before + + class BadgeData(models.Model): """Awarded for notable actions performed on the site by Users.""" slug = models.SlugField(max_length=50, unique=True) @@ -166,3 +245,4 @@ class Repute(models.Model): 'question_title': self.question.thread.title, 'link_title': link_title } + diff --git a/askbot/views/commands.py b/askbot/views/commands.py index 8fbcf3fd..497505c4 100644 --- a/askbot/views/commands.py +++ b/askbot/views/commands.py @@ -93,7 +93,7 @@ def manage_inbox(request): else: post = content_object request.user.delete_post(post) - reject_reason = models.PostRejectReason.objects.get( + reject_reason = models.PostFlagReason.objects.get( id = post_data['reject_reason_id'] ) body_text = string_concat( @@ -796,7 +796,7 @@ def delete_group_logo(request): def delete_post_reject_reason(request): from django.forms import IntegerField reason_id = IntegerField().clean(int(request.POST['reason_id'])) - reason = models.PostRejectReason.objects.get(id = reason_id) + reason = models.PostFlagReason.objects.get(id = reason_id) reason.delete() @csrf.csrf_exempt @@ -818,7 +818,7 @@ def save_post_reject_reason(request): ) else: reason_id = form.cleaned_data['reason_id'] - reason = models.PostRejectReason.objects.get(id = reason_id) + reason = models.PostFlagReason.objects.get(id = reason_id) request.user.edit_post_reject_reason( reason, title = title, details = details ) diff --git a/askbot/views/users.py b/askbot/views/users.py index c91f9a60..820f6e84 100644 --- a/askbot/views/users.py +++ b/askbot/views/users.py @@ -675,7 +675,7 @@ def user_responses(request, user, context): #6) sort responses by time filtered_response_list.sort(lambda x,y: cmp(y['timestamp'], x['timestamp'])) - reject_reasons = models.PostRejectReason.objects.all().order_by('title'); + reject_reasons = models.PostFlagReason.objects.all().order_by('title'); data = { 'active_tab':'users', 'page_class': 'user-profile-page', |