Merge branch 'master' of ssh://git.onelab.eu/git/myslice
authorLoic Baron <loic.baron@lip6.fr>
Thu, 16 Jan 2014 16:38:29 +0000 (17:38 +0100)
committerLoic Baron <loic.baron@lip6.fr>
Thu, 16 Jan 2014 16:38:29 +0000 (17:38 +0100)
Conflicts:
portal/templates/registration_view.html

portal/django_passresetview.py
portal/registrationview.py
portal/templates/password_reset_complete.html [moved from ui/templates/registration/password_reset_complete.html with 100% similarity]
portal/templates/password_reset_confirm.html [moved from ui/templates/registration/password_reset_confirm.html with 100% similarity]
portal/templates/password_reset_done.html [moved from ui/templates/registration/password_reset_done.html with 100% similarity]
portal/templates/password_reset_email.html [moved from ui/templates/registration/password_reset_email.html with 100% similarity]
portal/templates/password_reset_form.html [moved from ui/templates/registration/password_reset_form.html with 100% similarity]
portal/templates/slicerequest_view.html [new file with mode: 0644]
portal/templates/user_request_email.txt
portal/urls.py

index 56f03ba..adf6239 100644 (file)
@@ -99,8 +99,8 @@ from portal.actions             import manifold_update_user
 
 @csrf_protect
 def password_reset(request, is_admin_site=False,
-                   template_name='registration/password_reset_form.html',
-                   email_template_name='registration/password_reset_email.html',
+                   template_name='password_reset_form.html',
+                   email_template_name='password_reset_email.html',
                    subject_template_name='registration/password_reset_subject.txt',
                    password_reset_form=PasswordResetForm,
                    token_generator=default_token_generator,
@@ -126,7 +126,7 @@ def password_reset(request, is_admin_site=False,
                     
             if flag == 0:
                 messages.error(request, 'Sorry, this email is not registered.')
-                return render(request, 'registration/password_reset_form.html', {
+                return render(request, 'password_reset_form.html', {
                     'form': form,
                     })
             ### end of email check in manifold  ### 
@@ -155,7 +155,7 @@ def password_reset(request, is_admin_site=False,
 
 
 def password_reset_done(request,
-                        template_name='registration/password_reset_done.html',
+                        template_name='password_reset_done.html',
                         current_app=None, extra_context=None):
     context = {}
     if extra_context is not None:
@@ -168,7 +168,7 @@ def password_reset_done(request,
 @sensitive_post_parameters()
 @never_cache
 def password_reset_confirm(request, uidb36=None, token=None,
-                           template_name='registration/password_reset_confirm.html',
+                           template_name='password_reset_confirm.html',
                            token_generator=default_token_generator,
                            set_password_form=SetPasswordForm,
                            post_reset_redirect=None,
@@ -225,7 +225,7 @@ def password_reset_confirm(request, uidb36=None, token=None,
 
 
 def password_reset_complete(request,
-                            template_name='registration/password_reset_complete.html',
+                            template_name='password_reset_complete.html',
                             current_app=None, extra_context=None):
     context = {
         'login_url': resolve_url(settings.LOGIN_URL)
index b3633bf..9cc0cc3 100644 (file)
@@ -6,6 +6,7 @@ from django.contrib.auth.models import User
 from django.views.generic       import View
 from django.template.loader     import render_to_string
 from django.shortcuts           import render
+from django.contrib.auth        import get_user_model
 
 from unfold.page                import Page
 from unfold.loginrequired       import FreeAccessView
@@ -73,18 +74,22 @@ class RegistrationView (FreeAccessView):
             split_email = reg_email.split("@")[0] 
             split_email = split_email.replace(".", "_")
             user_hrn = reg_auth + '.' + split_email
+            
+            UserModel = get_user_model()
 
             #POST value validation  
             if (re.search(r'^[\w+\s.@+-]+$', reg_fname)==None):
                 errors.append('First Name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
             if (re.search(r'^[\w+\s.@+-]+$', reg_lname) == None):
                 errors.append('Last Name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
-            # XXX validate authority hrn !!
+            # checking in django_db !!
             if PendingUser.objects.filter(email__iexact=reg_email):
                 errors.append('Email is pending for validation. Please provide a new email address.')
+            if UserModel._default_manager.filter(email__iexact=reg_email): 
+                errors.append('This email is not usable. Please contact the administrator or try with another email.')
             for user_detail in user_details:
                 if user_detail['email']==reg_email:
-                    errors.append('Email already exists in Manifold. Please provide a new email address.')
+                    errors.append('Email already registered in Manifold. Please provide a new email address.')
 
 # XXX TODO: Factorize with portal/accountview.py
             if 'generate' in request.POST['question']:
@@ -162,7 +167,7 @@ class RegistrationView (FreeAccessView):
                     'authority_hrn' : reg_auth,
                     'email'         : reg_email,
                     'user_hrn'      : user_hrn,
-                    'keypair'       : 'Public Key: ' + public_key,
+                    'public_key'    : public_key,
                     'cc_myself'     : True # form.cleaned_data['cc_myself']
                     }
                 recipients = authority_get_pi_emails(request,reg_auth)
@@ -171,7 +176,7 @@ class RegistrationView (FreeAccessView):
                     recipients.append(ctx['email'])
 
                 msg = render_to_string('user_request_email.txt', ctx)
-                send_mail("Onelab New User request for %s submitted"%reg_email, msg, reg_email, recipients)
+                send_mail("Onelab New User request for %s submitted"%reg_email, msg, 'support@myslice.info', recipients)
                 return render(request, 'user_register_complete.html') 
 
         template_env = {
diff --git a/portal/templates/slicerequest_view.html b/portal/templates/slicerequest_view.html
new file mode 100644 (file)
index 0000000..af787c2
--- /dev/null
@@ -0,0 +1,99 @@
+{% extends "layout-unfold1.html" %}
+{% load i18n %}
+
+{% block head %}
+{{ wizard.form.media }}
+{% endblock %}
+
+{% block unfold_main %}
+
+<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/onelab.css" />
+<!-- xxx ideally only onelab.css but ... xxx -->
+<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/registration.css" />
+
+<div class="onelab-title well-lg">
+  <h2>Request a Slice</h2>
+</div>
+
+{% if errors %}
+<ul>
+  {% for error in errors %}
+  <li>{{ error }}</li>
+  {% endfor %}
+</ul>
+{% endif %}
+
+<div class='well'>
+  <form id="commentForm" class="form-horizontal" action="" method="post" role="form">{% csrf_token %}
+  <fieldset>
+
+   <div class="form-group">
+     <label for="email" class="col-xs-2 control-label">Experimenter</label>
+     <div class="col-xs-4">
+        <label class="col-xs-2 control-label" style="height:34px;">{{ email }}</label>
+     </div>
+     <div class="col-xs-6"> <p class="form-hint">Experimenter requesting a Slice</p> </div>
+   </div>
+
+   <div class="form-group">
+     <label for="slice_name" class="col-xs-2 control-label">Slice Name</label>
+     <div class="col-xs-4">
+        <input type="text" name="slice_name" class="form-control" minlength="2" value="{{ slice_name }}" placeholder="Slice Name" required />
+     </div>
+     <div class="col-xs-6"> <p class="form-hint">The name of the slice you wish to create</p> </div>
+   </div>
+
+   <div class="form-group">
+     <label for="authority_hrn" class="col-xs-2 control-label">Authority</label>
+     <div class="col-xs-4">
+       <div class="ui-widget">
+           <input id="authority_hrn" name="authority_hrn" class="form-control" value="{{ authority_hrn }}" placeholder="Authority" required />
+       </div>
+    </div>
+     <div class="col-xs-6"><p class="form-hint">An authority responsible for vetting your slice</p></div>
+   </div>
+
+   <div class="form-group">
+     <label for="number_of_nodes" class="col-xs-2 control-label">Number of nodes</label>
+     <div class="col-xs-4">
+       <div class="ui-widget">
+           <input id="number_of_nodes" name="number_of_nodes" class="form-control" value="{{ number_of_nodes }}" />
+       </div>
+    </div>
+     <div class="col-xs-6"><p class="form-hint">Number of nodes you expect to request (informative)</p></div>
+   </div>
+
+   <div class="form-group">
+     <label for="purpose" class="col-xs-2 control-label">Experiment purpose</label>
+     <div class="col-xs-4">
+       <div class="ui-widget">
+           <textarea id="purpose" name="purpose" class="form-control" style="height:110px;" placeholder="Purpose" required>{{ purpose }}</textarea>
+       </div>
+    </div>
+     <div class="col-xs-6"><p class="form-hint">Purpose of your experiment (informative)</p></div>
+   </div>
+
+   <button class="submit btn btn-default col-xs-12" type="submit">Request Slice</button>
+  </fieldset>
+  </form>
+</div>
+
+<script>
+jQuery(document).ready(function(){
+    var availableTags = [
+    {% if authorities %}
+        {% for authority in authorities %}
+        {value:"{{ authority.authority_hrn }}",label:"{{authority.name}}"},
+        {% endfor %}    
+    {% else %}
+        {value:"",label:"No authority found !!!"}
+    {% endif %}
+    ];
+    $( "#authority_hrn" ).autocomplete({
+      source: availableTags,
+      select: function( event, ui ) {console.log(jQuery(this))}
+    });
+});
+</script>
+{% endblock %}
+
index 3e18d0e..ba37c38 100644 (file)
@@ -1,9 +1,8 @@
 NEW USER REQUEST
 
-first_name   : {{first_name}}
-last_name    : {{last_name}} 
-authority_hrn: {{authority_hrn}}
-keypair      : {{keypair}}
+First Name   : {{first_name}}
+Last Name    : {{last_name}} 
+Authority hrn: {{authority_hrn}}
+Public key   : {{public_key}}
 email        : {{email}}
-cc myself    : {{cc_myself}}
 
index bcd56e5..d1e088c 100644 (file)
@@ -32,7 +32,6 @@ from portal.contactview         import ContactView
 from portal.slicerequestview    import SliceRequestView
 from portal.registrationview    import RegistrationView
 from portal.sliceview           import SliceView
-from portal.passresetview       import PassResetView
 
 # hopefully these should move in dedicated source files too
 from portal.views               import PresViewView, pres_view_static, pres_view_methods, pres_view_animation