X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/076007f066cf39f55b375900c2e7d14692182932..31f67094578292b834139406a9aaea3a15123218:/forum/models/action.py diff --git a/forum/models/action.py b/forum/models/action.py index c951a58..b3cfd26 100644 --- a/forum/models/action.py +++ b/forum/models/action.py @@ -1,4 +1,6 @@ from django.utils.translation import ugettext as _ +from django.utils.encoding import smart_unicode + from utils import PickledObjectField from threading import Thread from forum.utils import html @@ -16,7 +18,7 @@ class ActionQuerySet(CachedQuerySet): return super(ActionQuerySet, self).obj_from_datadict(datadict) def get(self, *args, **kwargs): - action = super(ActionQuerySet, self).get(*args, **kwargs).leaf() + action = super(ActionQuerySet, self).get(*args, **kwargs).leaf if not isinstance(action, self.model): raise self.model.DoesNotExist() @@ -26,7 +28,7 @@ class ActionQuerySet(CachedQuerySet): class ActionManager(CachedManager): use_for_related_fields = True - def get_query_set(self): + def get_queryset(self): qs = ActionQuerySet(self.model) if self.model is not Action: @@ -41,9 +43,10 @@ class ActionManager(CachedManager): class Action(BaseModel): user = models.ForeignKey('User', related_name="actions") - ip = models.CharField(max_length=16) + real_user = models.ForeignKey('User', related_name="proxied_actions", null=True) + ip = models.CharField(max_length=39) node = models.ForeignKey('Node', null=True, related_name="actions") - action_type = models.CharField(max_length=16) + action_type = models.CharField(max_length=32) action_date = models.DateTimeField(default=datetime.datetime.now) extra = PickledObjectField() @@ -51,7 +54,7 @@ class Action(BaseModel): canceled = models.BooleanField(default=False) canceled_by = models.ForeignKey('User', null=True, related_name="canceled_actions") canceled_at = models.DateTimeField(null=True) - canceled_ip = models.CharField(max_length=16) + canceled_ip = models.CharField(max_length=39) hooks = {} @@ -100,6 +103,7 @@ class Action(BaseModel): cancel = ActionRepute(action=self, user=repute.user, value=(-repute.value), by_canceled=True) cancel.save() + @property def leaf(self): leaf_cls = ActionProxyMetaClass.types.get(self.action_type, None) @@ -211,10 +215,10 @@ class ActionProxy(Action): __metaclass__ = ActionProxyMetaClass def friendly_username(self, viewer, user): - return (viewer == user) and _('You') or user.username + return (viewer == user) and _('You') or smart_unicode(user.username) def friendly_ownername(self, owner, user): - return (owner == user) and _('your') or user.username + return (owner == user) and _('your') or smart_unicode(user.username) def viewer_or_user_verb(self, viewer, user, viewer_verb, user_verb): return (viewer == user) and viewer_verb or user_verb @@ -236,6 +240,9 @@ class ActionProxy(Action): 'node_desc': node_desc, } + def affected_links(self, viewer): + return ", ".join([self.hyperlink(u.get_profile_url(), self.friendly_username(viewer, u)) for u in set([r.user for r in self.reputes.all()])]) + class Meta: proxy = True @@ -295,7 +302,7 @@ class ActionRepute(models.Model): return 0 def _add_to_rep(self, value): - if self.user.reputation + value < 0: + if int(self.user.reputation + value) < 1 and not settings.ALLOW_NEGATIVE_REPUTATION: return 0 else: return models.F('reputation') + value