Merge remote-tracking branch 'refs/remotes/breton/new_gst10'
[mediagoblin.git] / mediagoblin / user_pages / lib.py
index 557c4853c4004c0c6b8ba7e95f5fb722ff05c8ee..5b411a8268bd5785f38910eac7517f91b52225b4 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+from mediagoblin import mg_globals
+from mediagoblin.db.base import Session
+from mediagoblin.db.models import (CollectionItem, MediaReport, CommentReport,
+                                   MediaComment, MediaEntry)
 from mediagoblin.tools.mail import send_email
+from mediagoblin.tools.pluginapi import hook_runall
 from mediagoblin.tools.template import render_template
 from mediagoblin.tools.translate import pass_to_ugettext as _
-from mediagoblin import mg_globals
-from mediagoblin.db.base import Session
-from mediagoblin.db.models import CollectionItem, MediaReport, CommentReport
-from mediagoblin.user_pages import forms as user_forms
 
 
 def send_comment_email(user, comment, media, request):
@@ -70,42 +71,50 @@ def add_media_to_collection(collection, media, note=None, commit=True):
 
     collection.items = collection.items + 1
     Session.add(collection)
-
-    media.collected = media.collected + 1
     Session.add(media)
 
+    hook_runall('collection_add_media', collection_item=collection_item)
+
     if commit:
         Session.commit()
 
-def build_report_form(form_dict):
+
+def build_report_object(report_form, media_entry=None, comment=None):
     """
-    This function is used to convert a form dictionary (from a User filing a 
+    This function is used to convert a form object (from a User filing a
         report) into either a MediaReport or CommentReport object.
 
-    :param form_dict should be an ImmutableMultiDict object as is returned from
-        'request.form.' The Object should have valid keys matching the fields 
-        in either MediaReportForm or CommentReportForm
-
-    :returns either of MediaReport or a CommentReport object that has not been 
-        saved. In case of an improper form_dict, returns None
+    :param report_form          A MediaReportForm or a CommentReportForm object
+                                  with valid information from a POST request.
+    :param media_entry          A MediaEntry object. The MediaEntry being repo-
+                                  -rted by a MediaReport. In a CommentReport,
+                                  this will be None.
+    :param comment              A MediaComment object. The MediaComment being
+                                  reported by a CommentReport. In a MediaReport
+                                  this will be None.
+
+    :returns                A MediaReport object if a valid MediaReportForm is
+                              passed as kwarg media_entry. This MediaReport has
+                              not been saved.
+    :returns                A CommentReport object if a valid CommentReportForm
+                              is passed as kwarg comment. This CommentReport
+                              has not been saved.
+    :returns                None if the form_dict is invalid.
     """
-    if 'comment_id' in form_dict.keys():
-        report_form = user_forms.CommentReportForm(form_dict)
-    elif 'media_entry_id' in form_dict.keys():
-        report_form = user_forms.MediaReportForm(form_dict)
-    else:
-        return None
 
-    if report_form.validate() and 'comment_id' in form_dict.keys():
-        report_model = CommentReport()
-        report_model.comment_id = report_form.comment_id.data
-    elif report_form.validate() and 'media_entry_id' in form_dict.keys():
-        report_model = MediaReport()
-        report_model.media_entry_id = report_form.media_entry_id.data
+    if report_form.validate() and comment is not None:
+        report_object = CommentReport()
+        report_object.comment_id = comment.id
+        report_object.reported_user_id = MediaComment.query.get(
+            comment.id).get_author.id
+    elif report_form.validate() and media_entry is not None:
+        report_object = MediaReport()
+        report_object.media_entry_id = media_entry.id
+        report_object.reported_user_id = MediaEntry.query.get(
+            media_entry.id).get_uploader.id
     else:
         return None
 
-    report_model.report_content = report_form.report_reason.data or u''
-    report_model.reporter_id = report_form.reporter_id.data
-    return report_model
-
+    report_object.report_content = report_form.report_reason.data
+    report_object.reporter_id = report_form.reporter_id.data
+    return report_object