Show More
@@ -1,108 +1,112 b'' | |||||
1 | from django.db import models |
|
1 | from django.db import models | |
2 | from django.db.models import Count |
|
2 | from django.db.models import Count | |
3 | from boards import settings |
|
3 | from boards import settings | |
4 | from boards.models import Post |
|
4 | from boards.models import Post | |
5 | from django.core.cache import cache |
|
5 | from django.core.cache import cache | |
6 |
|
6 | |||
7 | __author__ = 'neko259' |
|
7 | __author__ = 'neko259' | |
8 |
|
8 | |||
9 | RANK_ADMIN = 0 |
|
9 | RANK_ADMIN = 0 | |
10 | RANK_MODERATOR = 10 |
|
10 | RANK_MODERATOR = 10 | |
11 | RANK_USER = 100 |
|
11 | RANK_USER = 100 | |
12 |
|
12 | |||
13 | BAN_REASON_AUTO = 'Auto' |
|
13 | BAN_REASON_AUTO = 'Auto' | |
14 | BAN_REASON_MAX_LENGTH = 200 |
|
14 | BAN_REASON_MAX_LENGTH = 200 | |
15 |
|
15 | |||
16 |
|
16 | |||
17 | class User(models.Model): |
|
17 | class User(models.Model): | |
18 |
|
18 | |||
19 | class Meta: |
|
19 | class Meta: | |
20 | app_label = 'boards' |
|
20 | app_label = 'boards' | |
21 |
|
21 | |||
22 | user_id = models.CharField(max_length=50) |
|
22 | user_id = models.CharField(max_length=50) | |
23 | rank = models.IntegerField() |
|
23 | rank = models.IntegerField() | |
24 |
|
24 | |||
25 | registration_time = models.DateTimeField() |
|
25 | registration_time = models.DateTimeField() | |
26 |
|
26 | |||
27 | fav_tags = models.ManyToManyField('Tag', null=True, blank=True) |
|
27 | fav_tags = models.ManyToManyField('Tag', null=True, blank=True) | |
28 | fav_threads = models.ManyToManyField(Post, related_name='+', null=True, |
|
28 | fav_threads = models.ManyToManyField(Post, related_name='+', null=True, | |
29 | blank=True) |
|
29 | blank=True) | |
30 |
|
30 | |||
31 | def save_setting(self, name, value): |
|
31 | def save_setting(self, name, value): | |
32 | setting, created = Setting.objects.get_or_create(name=name, user=self) |
|
32 | setting, created = Setting.objects.get_or_create(name=name, user=self) | |
33 | setting.value = str(value) |
|
33 | setting.value = str(value) | |
34 | setting.save() |
|
34 | setting.save() | |
35 |
|
35 | |||
36 | return setting |
|
36 | return setting | |
37 |
|
37 | |||
38 | def get_setting(self, name): |
|
38 | def get_setting(self, name): | |
39 | if Setting.objects.filter(name=name, user=self).exists(): |
|
39 | if Setting.objects.filter(name=name, user=self).exists(): | |
40 | setting = Setting.objects.get(name=name, user=self) |
|
40 | setting = Setting.objects.get(name=name, user=self) | |
41 | setting_value = setting.value |
|
41 | setting_value = setting.value | |
42 | else: |
|
42 | else: | |
43 | setting_value = None |
|
43 | setting_value = None | |
44 |
|
44 | |||
45 | return setting_value |
|
45 | return setting_value | |
46 |
|
46 | |||
47 | def is_moderator(self): |
|
47 | def is_moderator(self): | |
48 | return RANK_MODERATOR >= self.rank |
|
48 | return RANK_MODERATOR >= self.rank | |
49 |
|
49 | |||
50 | def get_sorted_fav_tags(self): |
|
50 | def get_sorted_fav_tags(self): | |
51 | cache_key = self._get_tag_cache_key() |
|
51 | cache_key = self._get_tag_cache_key() | |
52 | fav_tags = cache.get(cache_key) |
|
52 | fav_tags = cache.get(cache_key) | |
53 | if fav_tags: |
|
53 | if fav_tags: | |
54 | return fav_tags |
|
54 | return fav_tags | |
55 |
|
55 | |||
56 | tags = self.fav_tags.annotate(Count('threads')) \ |
|
56 | tags = self.fav_tags.annotate(Count('threads')) \ | |
57 | .filter(threads__count__gt=0).order_by('name') |
|
57 | .filter(threads__count__gt=0).order_by('name') | |
58 |
|
58 | |||
59 |
if tags |
|
59 | if tags: | |
60 |
cache.set(cache_key, tags |
|
60 | cache.set(cache_key, tags) | |
61 |
|
61 | |||
62 | return tags |
|
62 | return tags | |
63 |
|
63 | |||
64 | def get_post_count(self): |
|
64 | def get_post_count(self): | |
65 | return Post.objects.filter(user=self).count() |
|
65 | return Post.objects.filter(user=self).count() | |
66 |
|
66 | |||
67 | def __unicode__(self): |
|
67 | def __unicode__(self): | |
68 | return self.user_id + '(' + str(self.rank) + ')' |
|
68 | return self.user_id + '(' + str(self.rank) + ')' | |
69 |
|
69 | |||
70 | def get_last_access_time(self): |
|
70 | def get_last_access_time(self): | |
|
71 | """ | |||
|
72 | Gets user's last post time. | |||
|
73 | """ | |||
|
74 | ||||
71 | posts = Post.objects.filter(user=self) |
|
75 | posts = Post.objects.filter(user=self) | |
72 |
if posts. |
|
76 | if posts.exists() > 0: | |
73 | return posts.latest('pub_time').pub_time |
|
77 | return posts.latest('pub_time').pub_time | |
74 |
|
78 | |||
75 | def add_tag(self, tag): |
|
79 | def add_tag(self, tag): | |
76 | self.fav_tags.add(tag) |
|
80 | self.fav_tags.add(tag) | |
77 | cache.delete(self._get_tag_cache_key()) |
|
81 | cache.delete(self._get_tag_cache_key()) | |
78 |
|
82 | |||
79 | def remove_tag(self, tag): |
|
83 | def remove_tag(self, tag): | |
80 | self.fav_tags.remove(tag) |
|
84 | self.fav_tags.remove(tag) | |
81 | cache.delete(self._get_tag_cache_key()) |
|
85 | cache.delete(self._get_tag_cache_key()) | |
82 |
|
86 | |||
83 | def _get_tag_cache_key(self): |
|
87 | def _get_tag_cache_key(self): | |
84 | return self.user_id + '_tags' |
|
88 | return self.user_id + '_tags' | |
85 |
|
89 | |||
86 |
|
90 | |||
87 | class Setting(models.Model): |
|
91 | class Setting(models.Model): | |
88 |
|
92 | |||
89 | class Meta: |
|
93 | class Meta: | |
90 | app_label = 'boards' |
|
94 | app_label = 'boards' | |
91 |
|
95 | |||
92 | name = models.CharField(max_length=50) |
|
96 | name = models.CharField(max_length=50) | |
93 | value = models.CharField(max_length=50) |
|
97 | value = models.CharField(max_length=50) | |
94 | user = models.ForeignKey(User) |
|
98 | user = models.ForeignKey(User) | |
95 |
|
99 | |||
96 |
|
100 | |||
97 | class Ban(models.Model): |
|
101 | class Ban(models.Model): | |
98 |
|
102 | |||
99 | class Meta: |
|
103 | class Meta: | |
100 | app_label = 'boards' |
|
104 | app_label = 'boards' | |
101 |
|
105 | |||
102 | ip = models.GenericIPAddressField() |
|
106 | ip = models.GenericIPAddressField() | |
103 | reason = models.CharField(default=BAN_REASON_AUTO, |
|
107 | reason = models.CharField(default=BAN_REASON_AUTO, | |
104 | max_length=BAN_REASON_MAX_LENGTH) |
|
108 | max_length=BAN_REASON_MAX_LENGTH) | |
105 | can_read = models.BooleanField(default=True) |
|
109 | can_read = models.BooleanField(default=True) | |
106 |
|
110 | |||
107 | def __unicode__(self): |
|
111 | def __unicode__(self): | |
108 | return self.ip |
|
112 | return self.ip |
General Comments 0
You need to be logged in to leave comments.
Login now