Accept uploaders' email addresses
authorCharles Connell <charles@connells.org>
Fri, 20 Dec 2013 02:50:07 +0000 (21:50 -0500)
committerCharles Connell <charles@connells.org>
Fri, 20 Dec 2013 02:50:19 +0000 (21:50 -0500)
karmaworld/apps/document_upload/models.py
karmaworld/apps/document_upload/views.py
karmaworld/apps/notes/models.py
karmaworld/apps/users/__init__.py [new file with mode: 0644]
karmaworld/apps/users/models.py [new file with mode: 0644]
karmaworld/settings/common.py
karmaworld/templates/partial/filepicker.html

index 876ee41d7f710f1045466fa9709eb425be77150f..d44bdd258e3e8442b071cfb7132453c259235410 100644 (file)
@@ -32,7 +32,8 @@ class RawDocument(Document):
                 slug=self.slug,
                 ip=self.ip,
                 uploaded_at=self.uploaded_at,
-                fp_file=self.fp_file)
+                fp_file=self.fp_file,
+                user=self.user)
         note.save()
         for tag in self.tags.all():
             note.tags.add(tag)
index a72d271d910c3c48259d0147c10dc465832c5ead..1b256432e12dae4159cd021e117e0122f24a1420 100644 (file)
@@ -5,12 +5,9 @@
 import datetime
 
 from django.http import HttpResponse
-from django.views.generic import CreateView
-from django.views.generic.edit import ProcessFormView
-from django.views.generic.edit import ModelFormMixin
-
-from karmaworld.apps.document_upload.models import RawDocument
 from karmaworld.apps.document_upload.forms import RawDocumentForm
+from karmaworld.apps.users.models import KarmaUser
+
 
 def save_fp_upload(request):
     """ ajax endpoint for saving a FilePicker uploaded file form
@@ -27,6 +24,8 @@ def save_fp_upload(request):
         delta = time_b - time_a
         raw_document.ip = request.META['REMOTE_ADDR']
         raw_document.uploaded_at = datetime.datetime.utcnow()
+        if request.POST['email'] != '':
+            raw_document.user = KarmaUser.objects.get_or_create(email=request.POST['email'])[0]
         time_c = datetime.datetime.now()
         # note that .save() has the side-effect of kicking of a celery processing task
         raw_document.save()
index 47b95c8de436e81432953d66bad2db71f2dda16c..db5b3560c212598d53d29c2a60f9f53554b72a5d 100644 (file)
@@ -21,6 +21,7 @@ from oauth2client.client import Credentials
 from taggit.managers import TaggableManager
 
 from karmaworld.apps.courses.models import Course
+from karmaworld.apps.users.models import KarmaUser
 
 try:
     from secrets.drive import GOOGLE_USER
@@ -49,8 +50,9 @@ class Document(models.Model):
     slug            = models.SlugField(max_length=255, null=True)
 
     # metadata relevant to the Upload process
-    ip      = models.IPAddressField(blank=True, null=True,
-                help_text=u"IP address of the uploader")
+    user            = models.ForeignKey('users.KarmaUser', null=True)
+    ip              = models.IPAddressField(blank=True, null=True,
+                        help_text=u"IP address of the uploader")
     uploaded_at     = models.DateTimeField(null=True, default=datetime.datetime.utcnow)
 
 
@@ -60,7 +62,7 @@ class Document(models.Model):
 
     fp_file = django_filepicker.models.FPFileField(
             upload_to=_choose_upload_to,
-            storage=fs,                 \
+            storage=fs,
             null=True, blank=True,
             help_text=u"An uploaded file reference from Filepicker.io")
     mimetype = models.CharField(max_length=255, blank=True, null=True)
diff --git a/karmaworld/apps/users/__init__.py b/karmaworld/apps/users/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/karmaworld/apps/users/models.py b/karmaworld/apps/users/models.py
new file mode 100644 (file)
index 0000000..7fb50c3
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+# -*- coding:utf8 -*-
+# Copyright (C) 2013  FinalsClub Foundation
+
+from django.db import models
+
+class KarmaUser(models.Model):
+    email = models.EmailField(blank=False, null=False, unique=True)
+
+    def __unicode__(self):
+        return u'{e}'.format(e=self.email)
index e64d4e55806a6bfb01b2435f7b0f45d4640b191c..692e3be54055456b261fcd02ea9b4432e5148a3d 100644 (file)
@@ -211,8 +211,9 @@ THIRD_PARTY_APPS = (
 LOCAL_APPS = (
     # file handling app
     'karmaworld.apps.notes',
-    'karmaworld.apps.courses',\
+    'karmaworld.apps.courses',
     'karmaworld.apps.document_upload',
+    'karmaworld.apps.users'
 )
 
 # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
index 615b95d8813ce95fcbe7d7089123f3c2e18debdb..a09e60786940a759dd55c8fd21771244694981e7 100644 (file)
     <div class="small-10 small-offset-1 columns">
       <div id="forms_container">
       </div>
-      <div id="success" style="display: none;">
-          <p>Thank you for sharing:</p>
-          <ul id="uploaded_files">
-          </ul>
-          <p>Your files are being processed and should be viewable within a few minutes.</p>
-          <p>If you'd like to share again, please <a href="">click here</a>.</p>
+      <div id="success" class="hide">
+        <p>Thank you for sharing:</p>
+        <ul id="uploaded_files">
+        </ul>
+        <p>Your files are being processed and should be viewable within a few minutes.</p>
+        <p>If you'd like to share again, please <a href="">click here</a>.</p>
       </div>
     </div>
 
       </form>
     </div>
   </div>
-  <div class="small-8 small-offset-3 columns large-2">
-    <div id="save-btn" style="display:none">
-      <i class=icon-save></i> Save
+  <div id="save-btn-wrapper" class="hide row">
+    <div class="small-10 small-offset-1 columns">
+        <div class="row" style="display: inline;">
+          <form class="inline-form" method="POST" action="{% url 'upload_post' %}">
+            <div class="small-11 large-6 columns">
+                <legend>Your Email Address (Optional)</legend>
+                <input type="text" class="intext" id="id_email" name="email"
+                      placeholder="">
+              </div>
+          </form>
+        </div>
+        <div class="row">
+          <div class="small-8 large-6 columns">
+            <div id="save-btn" class="action-btn">
+              <i class=icon-save></i> Save
+            </div>
+          </div>
+        </div>
     </div>
   </div>
 
             console.log($(this).parent().parent());
             $(this).parent().parent().remove();
         });
-        
-        document.getElementById('save-btn').style.display = 'inline';
+
+        $('#save-btn-wrapper').show();
       }
 
       $('#save-btn').on('click', function(e){
             tags = $(el).find('.taggit-tags').val();
             course = $(el).find('.course_id').val();
             csrf = $(el).find('.csrf').val();
+            email = $('#id_email').val();
             mimetype = $(el).find('.mimetype').val();
 
             $.post('{% url 'upload_post' %}', {
               'tags': tags,
               'course': course,
               'csrfmiddlewaretoken': csrf,
-              'mimetype': mimetype
+              'mimetype': mimetype,
+              'email': email
             }, function(data){
               if (data === 'success') {
                 // For multiple uploads, we may end up clearing and re-
                   $('#uploaded_files').append($('<li>', {text: uploaded_files[i]}));
                 }
                 $('#success').show();
-                document.getElementById('save-btn').style.display = 'none';
+                $('#save-btn-wrapper').show();
                 $('#forms_container .inline-form').remove();
                 _gat._getTracker()._trackEvent('upload', 'upload form submitted');
                 setTimeout(function(){