Whew. This is a big update. I did some significant keeping work. I moved all of
[mediagoblin:mediagoblin.git] / mediagoblin / user_pages / lib.py
1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 from mediagoblin.tools.mail import send_email
18 from mediagoblin.tools.template import render_template
19 from mediagoblin.tools.translate import pass_to_ugettext as _
20 from mediagoblin import mg_globals
21 from mediagoblin.db.base import Session
22 from mediagoblin.db.models import (CollectionItem, MediaReport, CommentReport, 
23                                   MediaComment, MediaEntry)
24 from mediagoblin.user_pages import forms as user_forms
25
26
27 def send_comment_email(user, comment, media, request):
28     """
29     Sends comment email to user when a comment is made on their media.
30
31     Args:
32     - user: the user object to whom the email is sent
33     - comment: the comment object referencing user's media
34     - media: the media object the comment is about
35     - request: the request
36     """
37
38     comment_url = request.urlgen(
39                     'mediagoblin.user_pages.media_home.view_comment',
40                     comment=comment.id,
41                     user=media.get_uploader.username,
42                     media=media.slug_or_id,
43                     qualified=True) + '#comment'
44
45     comment_author = comment.get_author.username
46
47     rendered_email = render_template(
48         request, 'mediagoblin/user_pages/comment_email.txt',
49         {'username': user.username,
50          'comment_author': comment_author,
51          'comment_content': comment.content,
52          'comment_url': comment_url})
53
54     send_email(
55         mg_globals.app_config['email_sender_address'],
56         [user.email],
57         '{instance_title} - {comment_author} '.format(
58             comment_author=comment_author,
59             instance_title=mg_globals.app_config['html_title']) \
60                     + _('commented on your post'),
61         rendered_email)
62
63
64 def add_media_to_collection(collection, media, note=None, commit=True):
65     collection_item = CollectionItem()
66     collection_item.collection = collection.id
67     collection_item.media_entry = media.id
68     if note:
69         collection_item.note = note
70     Session.add(collection_item)
71
72     collection.items = collection.items + 1
73     Session.add(collection)
74
75     media.collected = media.collected + 1
76     Session.add(media)
77
78     if commit:
79         Session.commit()
80
81 def build_report_table(form_dict):
82     """
83     This function is used to convert a form dictionary (from a User filing a 
84         report) into either a MediaReport or CommentReport object.
85
86     :param form_dict should be an ImmutableMultiDict object as is returned from
87         'request.form.' The Object should have valid keys matching the fields 
88         in either MediaReportForm or CommentReportForm
89
90     :returns either of MediaReport or a CommentReport object that has not been 
91         saved. In case of an improper form_dict, returns None
92     """
93     if 'comment_id' in form_dict.keys():
94         report_form = user_forms.CommentReportForm(form_dict)
95     elif 'media_entry_id' in form_dict.keys():
96         report_form = user_forms.MediaReportForm(form_dict)
97     else:
98         return None
99
100     if report_form.validate() and 'comment_id' in form_dict.keys():
101         report_model = CommentReport()
102         report_model.comment_id = report_form.comment_id.data
103         report_model.reported_user_id = MediaComment.query.get(
104             report_model.comment_id).get_author.id
105     elif report_form.validate() and 'media_entry_id' in form_dict.keys():
106         report_model = MediaReport()
107         report_model.media_entry_id = report_form.media_entry_id.data
108         report_model.reported_user_id = MediaEntry.query.get(
109             report_model.media_entry_id).get_uploader.id
110     else:
111         return None
112
113     report_model.report_content = report_form.report_reason.data or u''
114     report_model.reporter_id = report_form.reporter_id.data
115     return report_model
116