]> git.openstreetmap.org Git - osqa.git/blob - forum/activity.py
ALteration of the schema to a single content model. As a bonus there is a complete...
[osqa.git] / forum / activity.py
1 import datetime\r
2 from django.db.models.signals import post_save\r
3 from forum.models import *\r
4 from forum.models.base import marked_deleted\r
5 from forum.models.meta import vote_canceled\r
6 from forum.authentication import user_updated\r
7 from forum.const import *\r
8 \r
9 def record_ask_event(instance, created, **kwargs):\r
10     if created:\r
11         activity = Activity(user=instance.author, active_at=instance.added_at, content_object=instance, activity_type=TYPE_ACTIVITY_ASK_QUESTION)\r
12         activity.save()\r
13 \r
14 post_save.connect(record_ask_event, sender=Question)\r
15 \r
16 \r
17 def record_answer_event(instance, created, **kwargs):\r
18     if created:\r
19         activity = Activity(user=instance.author, active_at=instance.added_at, content_object=instance, activity_type=TYPE_ACTIVITY_ANSWER)\r
20         activity.save()\r
21 \r
22 post_save.connect(record_answer_event, sender=Answer)\r
23 \r
24 \r
25 def record_comment_event(instance, created, **kwargs):\r
26     if created:\r
27         act_type = (instance.content_object.__class__ is Question) and TYPE_ACTIVITY_COMMENT_QUESTION or TYPE_ACTIVITY_COMMENT_ANSWER\r
28         activity = Activity(user=instance.user, active_at=instance.added_at, content_object=instance, activity_type=act_type)\r
29         activity.save()\r
30 \r
31 post_save.connect(record_comment_event, sender=Comment)\r
32 \r
33 \r
34 def record_revision_event(instance, created, **kwargs):\r
35     if created and instance.revision <> 1 and instance.node.node_type in ('question', 'answer',):\r
36         activity_type = instance.node == 'question' and TYPE_ACTIVITY_UPDATE_QUESTION or TYPE_ACTIVITY_UPDATE_ANSWER\r
37         activity = Activity(user=instance.author, active_at=instance.revised_at, content_object=instance, activity_type=activity_type)\r
38         activity.save()\r
39 \r
40 post_save.connect(record_revision_event, sender=NodeRevision)\r
41 \r
42 \r
43 def record_award_event(instance, created, **kwargs):\r
44     if created:\r
45         activity = Activity(user=instance.user, active_at=instance.awarded_at, content_object=instance,\r
46             activity_type=TYPE_ACTIVITY_PRIZE)\r
47         activity.save()\r
48 \r
49 post_save.connect(record_award_event, sender=Award)\r
50 \r
51 \r
52 def record_answer_accepted(instance, created, **kwargs):\r
53     if not created and 'accepted' in instance.get_dirty_fields() and instance.accepted:\r
54         activity = Activity(user=instance.question.author, active_at=datetime.datetime.now(), \\r
55             content_object=instance, activity_type=TYPE_ACTIVITY_MARK_ANSWER)\r
56         activity.save()\r
57 \r
58 post_save.connect(record_answer_accepted, sender=Answer)\r
59 \r
60 \r
61 def update_last_seen(instance, **kwargs):\r
62     user = instance.user\r
63     user.last_seen = datetime.datetime.now()\r
64     user.save()\r
65 \r
66 post_save.connect(update_last_seen, sender=Activity)\r
67 \r
68 \r
69 def record_vote(instance, created, **kwargs):\r
70     if created:\r
71         act_type = (instance.vote == 1) and TYPE_ACTIVITY_VOTE_UP or TYPE_ACTIVITY_VOTE_DOWN\r
72 \r
73         activity = Activity(user=instance.user, active_at=instance.voted_at, content_object=instance, activity_type=act_type)\r
74         activity.save()\r
75 \r
76 post_save.connect(record_vote, sender=Vote)\r
77 \r
78 \r
79 def record_cancel_vote(instance, **kwargs):\r
80     act_type = (instance.vote == 1) and TYPE_ACTIVITY_CANCEL_VOTE_UP or TYPE_ACTIVITY_CANCEL_VOTE_DOWN\r
81     activity = Activity(user=instance.user, active_at=datetime.datetime.now(), content_object=instance, activity_type=act_type)\r
82     activity.save()\r
83 \r
84 vote_canceled.connect(record_cancel_vote)\r
85 \r
86 \r
87 def record_delete_post(instance, **kwargs):\r
88     act_type = (instance.__class__ is Question) and TYPE_ACTIVITY_DELETE_QUESTION or TYPE_ACTIVITY_DELETE_ANSWER\r
89     activity = Activity(user=instance.deleted_by, active_at=datetime.datetime.now(), content_object=instance, activity_type=act_type)\r
90     activity.save()\r
91 \r
92 marked_deleted.connect(record_delete_post, sender=Question)\r
93 marked_deleted.connect(record_delete_post, sender=Answer)\r
94 \r
95 \r
96 def record_update_tags(instance, created, **kwargs):\r
97     if not created and 'tagnames' in instance.get_dirty_fields():\r
98         activity = Activity(user=instance.author, active_at=datetime.datetime.now(), content_object=instance, activity_type=TYPE_ACTIVITY_UPDATE_TAGS)\r
99         activity.save()\r
100 \r
101 post_save.connect(record_update_tags, sender=Question)\r
102 \r
103 \r
104 def record_mark_offensive(instance, created, **kwargs):\r
105     if created:\r
106         activity = Activity(user=instance.user, active_at=datetime.datetime.now(), content_object=instance.content_object, activity_type=TYPE_ACTIVITY_MARK_OFFENSIVE)\r
107         activity.save()\r
108 \r
109 post_save.connect(record_mark_offensive, sender=FlaggedItem)\r
110 \r
111 \r
112 def record_favorite_question(instance, created, **kwargs):\r
113     if created:\r
114         activity = Activity(user=instance.user, active_at=datetime.datetime.now(), content_object=instance, activity_type=TYPE_ACTIVITY_FAVORITE)\r
115         activity.save()\r
116 \r
117 post_save.connect(record_favorite_question, sender=FavoriteQuestion)\r
118 \r
119 \r
120 def record_user_full_updated(instance, **kwargs):\r
121     activity = Activity(user=instance, active_at=datetime.datetime.now(), content_object=instance, activity_type=TYPE_ACTIVITY_USER_FULL_UPDATED)\r
122     activity.save()\r
123 \r
124 user_updated.connect(record_user_full_updated, sender=User)\r
125 \r