Merge branch '0.6.4' into dev
authorSofia Papagiannaki <papagian@gmail.com>
Tue, 25 Sep 2012 13:12:17 +0000 (16:12 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Tue, 25 Sep 2012 13:12:17 +0000 (16:12 +0300)
Conflicts:
snf-astakos-app/astakos/im/forms.py
snf-astakos-app/astakos/im/views.py

snf-astakos-app/astakos/im/api/__init__.py
snf-astakos-app/astakos/im/forms.py
snf-astakos-app/astakos/im/functions.py
snf-astakos-app/astakos/im/management/commands/user_add.py
snf-astakos-app/astakos/im/migrations/0023_populate_resource_data.py
snf-astakos-app/astakos/im/models.py
snf-astakos-app/astakos/im/static/im/js/common.js
snf-astakos-app/astakos/im/templates/im/astakosgroup_list.html
snf-astakos-app/astakos/im/templates/im/timeline.html [new file with mode: 0644]
snf-astakos-app/astakos/im/urls.py
snf-astakos-app/astakos/im/views.py

index 2334b67..c9cc87d 100644 (file)
@@ -172,87 +172,55 @@ def get_menu(request, with_extra_links=False, with_signout=True):
         append = l.append
         item = MenuItem
         item.current_path = absolute(request, request.path)
-        append(
-            item(
+        append(item(
                 url=absolute(request, reverse('index')),
-                name=user.email
-            )
-        )
-        append(
-            item(
-                url=absolute(request, reverse('edit_profile')),
-                name="My account"
-            )
-        )
+                name=user.email))
+        append(item(url=absolute(request, reverse('edit_profile')),
+               name="My account"))
         if with_extra_links:
             if user.has_usable_password() and user.provider in ('local', ''):
-                append(
-                    item(
+                append(item(
                         url=absolute(request, reverse('password_change')),
-                        name="Change password"
-                    )
-                )
+                        name="Change password"))
             if EMAILCHANGE_ENABLED:
-                append(
-                    item(
+                append(item(
                         url=absolute(request, reverse('email_change')),
-                        name="Change email"
-                    )
-                )
+                        name="Change email"))
             if INVITATIONS_ENABLED:
-                append(
-                    item(
+                append(item(
                         url=absolute(request, reverse('invite')),
-                        name="Invitations"
-                    )
-                )
-            append(
-                item(
+                        name="Invitations"))
+            append(item(
                     url=absolute(request, reverse('feedback')),
-                    name="Feedback"
-                )
-            )
-            append(
-                item(
+                    name="Feedback"))
+            append(item(
                     url=absolute(request, reverse('group_list')),
                     name="Groups",
-                    submenu=(
-                        item(
-                            url=absolute(request, reverse('group_list')),
-                            name="Overview"
-                        ),
-                        item(
-                            url=absolute(request,
-                                         reverse('group_create_list')
-                                         ),
-                            name="Create"
-                        ),
-                        item(
-                            url=absolute(request, reverse('group_search')),
-                            name="Join"
-                        ),
-                    )
-                )
-            )
-            append(
-                item(
+                    submenu=(item(
+                                url=absolute(request,
+                                             reverse('group_list')),
+                                name="Overview"),
+                            item(
+                                url=absolute(request,
+                                             reverse('group_create_list')),
+                                name="Create"),
+                            item(
+                                url=absolute(request,
+                                             reverse('group_search')),
+                                name="Join"),)))
+            append(item(
                     url=absolute(request, reverse('resource_list')),
-                    name="Resources"
-                )
-            )
-            append(
-                item(
+                    name="Resources"))
+            append(item(
                     url=absolute(request, reverse('billing')),
-                    name="Billing"
-                )
-            )
+                    name="Billing"))
+            append(item(
+                    url=absolute(request, reverse('timeline')),
+                    name="Timeline"))
         if with_signout:
-            append(
-                item(
+            append(item(
                     url=absolute(request, reverse('logout')),
-                    name="Sign out"
-                )
-            )
+                    name="Sign out"))
 
     callback = request.GET.get('callback', None)
     data = json.dumps(tuple(l))
index eb28578..d90fe74 100644 (file)
@@ -47,14 +47,12 @@ from django.utils.encoding import smart_str
 from django.forms.extras.widgets import SelectDateWidget
 from django.conf import settings
 
-from astakos.im.models import (
-    AstakosUser, EmailChange, AstakosGroup, Invitation,
-    Membership, GroupKind, get_latest_terms
-)
+from astakos.im.models import (AstakosUser, EmailChange, AstakosGroup,
+                               Invitation, Membership, GroupKind, Resource,
+                               get_latest_terms)
 from astakos.im.settings import (INVITATIONS_PER_LEVEL, BASEURL, SITENAME,
-                                 RECAPTCHA_PRIVATE_KEY, RECAPTCHA_ENABLED, DEFAULT_CONTACT_EMAIL,
-                                 LOGGING_LEVEL
-                                 )
+                                 RECAPTCHA_PRIVATE_KEY, RECAPTCHA_ENABLED,
+                                 DEFAULT_CONTACT_EMAIL, LOGGING_LEVEL)
 
 from astakos.im.widgets import DummyWidget, RecaptchaWidget
 from astakos.im.functions import send_change_email
@@ -525,8 +523,6 @@ class ExtendedPasswordChangeForm(PasswordChangeForm):
 
 
 class AstakosGroupCreationForm(forms.ModelForm):
-#     issue_date = forms.DateField(widget=SelectDateWidget())
-#     expiration_date = forms.DateField(widget=SelectDateWidget())
     kind = forms.ModelChoiceField(
         queryset=GroupKind.objects.all(),
         label="",
@@ -599,6 +595,27 @@ class AddGroupMembersForm(forms.Form):
 class AstakosGroupSearchForm(forms.Form):
     q = forms.CharField(max_length=200, label='Search group')
 
+class TimelineForm(forms.Form):
+    entity = forms.CharField(
+        widget=forms.HiddenInput(), label='')
+    resource = forms.ModelChoiceField(
+        queryset=Resource.objects.all()
+    )
+    start_date = forms.DateTimeField()
+    end_date = forms.DateTimeField()
+    action = forms.ChoiceField(choices=(), required=False)
+    
+    def clean(self):
+        super(TimelineForm, self).clean()
+        d = self.cleaned_data
+        if 'resource' in d:
+            d['resource'] = str(d['resource'])
+        if 'start_date' in d:
+            d['start_date'] = d['start_date'].strftime("%Y-%m-%dT%H:%M:%S.%f")
+        if 'end_date' in d:
+            d['end_date'] = d['end_date'].strftime("%%Y-%m-%dT%H:%M:%S.%f")
+        return d
+
 class AstakosGroupSortForm(forms.Form):
     sort_by = forms.ChoiceField(label='Sort by',
                                 choices=(('groupname', 'Name'), ('kindname', 'Type')),
index 1d13659..d28c57e 100644 (file)
@@ -51,8 +51,7 @@ from datetime import datetime
 from functools import wraps
 
 from astakos.im.settings import (DEFAULT_CONTACT_EMAIL, SITENAME, BASEURL,
-                                 LOGGING_LEVEL
-                                 )
+                                 LOGGING_LEVEL)
 from astakos.im.models import AstakosUser
 
 logger = logging.getLogger(__name__)
index e3f7a26..8f3486c 100644 (file)
@@ -81,10 +81,10 @@ class Command(BaseCommand):
         args = [a.decode('utf8') for a in args]
         email, first, last, affiliation = args
 
-        try:
-            validate_email(email)
-        except ValidationError:
-            raise CommandError("Invalid email")
+        #try:
+        #    validate_email(email)
+        #except ValidationError:
+        #    raise CommandError("Invalid email")
 
         username = uuid4().hex[:30]
         password = options.get('password')
index 9e467ab..0f1d1ad 100644 (file)
@@ -37,7 +37,8 @@ class Migration(DataMigration):
                 q, created = orm.AstakosGroupQuota.objects.get_or_create(
                     group=default,
                     resource=r,
-                    uplimit=l)
+                    uplimit=l,
+                    limit=0)
         map(create_policies, SERVICES.iteritems())
 
     def backwards(self, orm):
index 70ccf2d..e0db115 100644 (file)
@@ -104,7 +104,7 @@ class Resource(models.Model):
     service = models.ForeignKey(Service)
 
     def __str__(self):
-        return '%s : %s' % (self.service, self.name)
+        return '%s.%s' % (self.service, self.name)
 
 
 class GroupKind(models.Model):
index 5b2df99..d4e7fbf 100644 (file)
@@ -175,6 +175,19 @@ $(document).ready(function() {
                                }\r
                        });\r
                }\r
+               $( "#id_start_date" ).datepicker({\r
+            dateFormat: "yy-mm-dd",\r
+            onSelect: function( selectedDate ) {\r
+                $( "#id_start_date" ).datepicker( "option", "maxDate", selectedDate );\r
+            }\r
+        });\r
+        \r
+        $( "#id_end_date" ).datepicker({\r
+            dateFormat: "yy-mm-dd",\r
+            onSelect: function( selectedDate ) {\r
+                $( "#id_end_date" ).datepicker( "option", "maxDate", selectedDate );\r
+            }\r
+        });\r
        });\r
        \r
        \r
index 2bf0cf7..180e5c1 100644 (file)
                {% endif %}
                {% if other %}  
                        <div class="full-dotted">
-                               <form method="GET" class="minimal" action=""> 
+                               <form method="GET" class="minimal" action="">
                                                <div class="form-row">
                                                        <select name="other_sorting" onchange="this.form.submit();">
                                                            <option value="">Sort by</option>
diff --git a/snf-astakos-app/astakos/im/templates/im/timeline.html b/snf-astakos-app/astakos/im/templates/im/timeline.html
new file mode 100644 (file)
index 0000000..516f06e
--- /dev/null
@@ -0,0 +1,21 @@
+{% extends "im/account_base.html" %}
+
+{% block page.body %}
+<div class="projects">
+       <div class="maincol {% block innerpage.class %}{% endblock %}">
+           <form action="" method="post"
+                   class="withlabels">{% csrf_token %}
+                   {% include "im/form_render.html" %}
+                   <div class="form-row submit">
+                       <input type="submit" class="submit altcol" value="SUBMIT" />
+                   </div>
+           </form>
+       </div>
+</div>
+{% for o in l %}
+    {% for i in o %}
+        {{i}}
+    {% endfor %}
+    <br>
+{% endfor %}
+{% endblock %}
index 86ba91f..bc164da 100644 (file)
@@ -60,6 +60,7 @@ urlpatterns = patterns('astakos.im.views',
                        url(r'^resources/?$',
                            'resource_list', {}, name='resource_list'),
                        url(r'^billing/?$', 'billing', {}, name='billing'),
+                       url(r'^timeline/?$', 'timeline', {}, name='timeline'),
                        url(r'^group/add/(?P<kind_name>\w+)?$',
                            'group_add', {}, name='group_add'),
                        url(r'^group/list/?$',
index 0e2bfd5..a578df5 100644 (file)
@@ -69,7 +69,7 @@ from astakos.im.forms import (LoginForm, InvitationForm, ProfileForm,
                               ExtendedPasswordChangeForm, EmailChangeForm,
                               AstakosGroupCreationForm, AstakosGroupSearchForm,
                               AstakosGroupUpdateForm, AddGroupMembersForm,
-                              AstakosGroupSortForm)
+                              AstakosGroupSortForm, TimelineForm)
 from astakos.im.functions import (send_feedback, SendMailError,
                                   invite as invite_func, logout as auth_logout,
                                   activate as activate_func,
@@ -1094,3 +1094,34 @@ def clear_billing_data(data):
     data['bill_addcredits'] = filter(servicefilter('addcredits'), data['bill'])
         
     return data    
+
+@signed_terms_required
+@login_required
+def timeline(request):
+    data = {'entity':request.user.email}
+    l = []
+    if request.method == 'POST':
+        data = request.POST
+        l =[(u'test/apples', u'2012-09-20T11:39:53.1797', 192172055040L, 25569215632749L),
+            (u'test/pears/kate.jpg', u'2012-09-20T11:45:14.1153', 381640896L, 25626036449581L),
+            (u'test/pears/kate_beckinsale.jpg', u'2012-09-20T11:45:14.5830', 0L, 25626036449581L),
+            (u'test/pears/How To Win Friends And Influence People.pdf', u'2012-09-20T11:45:15.0694', 0L, 25626036449581L),
+            (u'test/pears/moms_birthday.jpg', u'2012-09-20T11:45:15.5615', 0L, 25626036449581L),
+            (u'test/pears/poodle_strut.mov', u'2012-09-20T11:45:16.0290', 0L, 25626036449581L),
+            (u'test/pears/Disturbed - Down With The Sickness.mp3', u'2012-09-20T11:45:16.4950', 0L, 25626036449581L),
+            (u'test/pears/army_of_darkness.avi', u'2012-09-20T11:45:16.9844', 0L, 25626036449581L),
+            (u'test/pears/the_mad.avi', u'2012-09-20T11:45:17.4516', 0L, 25626036449581L),
+            (u'test/apples/photos/animals/dogs/poodle.jpg', u'2012-09-20T11:45:17.9281', 0L, 25626036449581L),
+            (u'test/apples/photos/animals/dogs/terrier.jpg', u'2012-09-20T11:45:18.3918', 0L, 25626036449581L),
+            (u'test/apples/photos/animals/cats/persian.jpg', u'2012-09-20T11:45:18.8626', 0L, 25626036449581L),
+            (u'test/apples/photos/animals/cats/siamese.jpg', u'2012-09-20T11:45:19.3686', 0L, 25626036449581L),
+            (u'test/apples/photos/plants/fern.jpg', u'2012-09-20T11:45:19.8464', 0L, 25626036449581L),
+            (u'test/apples/photos/plants/rose.jpg', u'2012-09-20T11:45:20.7334', 0L, 25626036449581L)]
+    
+    form = TimelineForm(data)
+    if form.is_valid():
+        print '>>>', form.cleaned_data
+    return render_response(template='im/timeline.html',
+                           context_instance=get_context(request),
+                           form=form,
+                           l=l)