Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab
authorJordan Augé <jordan.auge@lip6.fr>
Wed, 6 Aug 2014 09:37:26 +0000 (11:37 +0200)
committerJordan Augé <jordan.auge@lip6.fr>
Wed, 6 Aug 2014 09:37:26 +0000 (11:37 +0200)
29 files changed:
activity/__init__.py
activity/user.py [new file with mode: 0644]
auth/views.py
myslice/myslice.ini.localhost
myslice/theme.py
myslice/urls.py
plugins/apply/templates/apply.html
plugins/querytable/templates/querytable.html
plugins/scheduler2/static/js/scheduler2.js
plugins/scheduler2/templates/scheduler.html
portal/homeview.py
portal/managementtababout.py
portal/registrationview.py
portal/static/css/onelab.css
portal/templates/base.html
portal/templates/management-tab-requests.html
portal/templates/onelab/onelab_about.html
portal/templates/onelab/onelab_account-view.html
portal/templates/onelab/onelab_management-tab-requests.html
portal/templates/onelab/onelab_news.html
portal/templates/onelab/onelab_registration_view.html
portal/templates/onelab/onelab_slice-view.html
portal/templates/onelab/onelab_supportview.html
portal/templates/onelab/onelab_user_request_email.html
portal/templates/onelab/onelab_user_request_email.txt
portal/templates/onelab/onelab_widget-login-user.html
portal/templates/onelab/onelab_widget-slice-sections.html
portal/templates/onelab/onelab_widget-topmenu.html
portal/templates/slice-resource-view.html

index d570662..677424f 100644 (file)
@@ -1,61 +1,82 @@
 #
 # Activity monitor
 #
+# Client is authenticated with an API key and a secret
+# The API key is a 64 chars string (digits and letters) that is passed to the request
+# The secret is a 64 chars string that is used to sign the request
+# The generated signature is a SHA256 hes digest
 
 import urllib, urllib2
 import threading
-from datetime import datetime
+import hmac
+import hashlib
+import base64
+import time
+import datetime
+from myslice.configengine import ConfigEngine
 
+config = ConfigEngine()
+if config.activity and config.activity.apikey :
+    apikey = config.activity.apikey
+else :
+    # apikey will be necessary
+    apikey = None
+
+if config.activity and config.activity.secret :
+    secret = config.activity.secret
+else :
+    # secret will be necessary
+    secret = None
+
+if config.activity and config.activity.server :
+    server = config.activity.server
+else :
+    # secret will be necessary
+    server = "http://athos.ipv6.lip6.fr/log"
 
 def logWrite(request, action, message):
-    url = "http://localhost:5000/log"
+    
+    if not apikey :
+        print "===============>> activity: no apikey"
+        return
+    if not secret :
+        print "===============>> activity: no secret"
+        return
+    
+    timestamp = time.mktime(datetime.datetime.today().timetuple())
+    ip = getClientIp(request)
     log = {
-        "date" : datetime.today(),
-        "client_ip" : getClientIp(request),
-        "host" : request.get_host(),
-        "referrer" : request.META.get('HTTP_REFERER'),
-        "user" : request.user
+        "timestamp" : timestamp,
+        "client_ip" : ip,
+        "host"      : request.get_host(),
+        "referrer"  : request.META.get('HTTP_REFERER'),
+        "user"      : request.user,
+        "action"    : action,
+        "message"   : message,
+        "apikey"    : apikey,
+        "signature" : sign(secret, "%s%s%s%s" % (timestamp, ip, request.user, action))
     }
-    
     try :
-        result = urllib2.urlopen(url, urllib.urlencode(log))
+        result = urllib2.urlopen(server, urllib.urlencode(log))
         content = result.read()
     except urllib2.URLError as e:
-        print "Error: connection to " + url + " impossible, logging disabled"
+        print "Warning: connection to " + url + " impossible, could not log action"
 
-def spawnThread(request, action, message):
-    print "aaaaaaaaa"
+def log(request, action, message):
     # Create a new thread in Daemon mode to send the log entry
     t = threading.Thread(target=logWrite, args=(request, action, message))
     t.setDaemon(True)
     t.start()
 
-def userLogin(request):
-    spawnThread(request, 'userlogin', 'User logged in')
-
-def userLogout(request):
-    spawnThread(request, 'userlogout', 'User logged out')
-
-def userRegistration(request):
-    spawnThread(request, 'userregistration', 'User registered')
-
-def userSliceRequest(request):
-    spawnThread(request, 'userslicerequest', 'User requested a slice')
-
-def userContactSupport(request):
-    spawnThread(request, 'usercontactsupport', 'User contacted suppport')
-
-def userAddResource(request):
-    spawnThread(request, 'useraddresource', 'User added resource to slice')
-
-def userDelResource(request):
-    spawnThread(request, 'userdelresource', 'User removed resource from slice')
-
-
 def getClientIp(request):
     x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
     if x_forwarded_for:
         ip = x_forwarded_for.split(',')[0]
     else:
         ip = request.META.get('REMOTE_ADDR')
-    return ip
\ No newline at end of file
+    return ip
+
+#
+# sign the request with the secret key
+def sign(secret, message):
+    return hmac.new(secret, msg=message, digestmod=hashlib.sha256).hexdigest()
\ No newline at end of file
diff --git a/activity/user.py b/activity/user.py
new file mode 100644 (file)
index 0000000..216180e
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# log functions for user activity
+#
+
+import activity
+
+def login(request):
+    activity.log(request, "user.login", "User log in")
+    
+def logout(request):
+    activity.log(request, "user.logout", "User log out")
+
+def signup(request):
+    activity.log(request, "user.signup", "User sign up")
+
+def register(request):
+    activity.log(request, "user.register", "User registered")
\ No newline at end of file
index 104d11c..b959e73 100644 (file)
@@ -1,12 +1,18 @@
 from django.contrib.auth import logout
 from django.http import HttpResponseRedirect
 
+import activity.user
+
 # hard question : where should we redirect requests to logout if user is not logged in ?
 def logout_user (request):
     # check that we're indeed logged in
     if not request.user.is_authenticated():
         return HttpResponseRedirect ('/')
     print "LOGGING OUT"
+    
+    # log user activity
+    activity.user.logout(request)
+    
     logout(request)
     return HttpResponseRedirect ('/')
         
index 0467c0b..524e7be 100644 (file)
@@ -2,3 +2,6 @@
 url = https://localhost:7080
 admin_user = admin
 admin_password = admin
+
+[myslice]
+theme = onelab
index d44b854..e16326b 100644 (file)
@@ -14,12 +14,12 @@ class ThemeView (object):
     def template(self):
         # Load a template from the theme directory if it exists
         # else load it from the common templates dir
-        print "THEME = ",self.theme
-        print "TEMPLATE = ",self.template_name
-        print "TEMPLATE_DIRS = ",TEMPLATE_DIRS
+        #print "THEME = ",self.theme
+        #print "TEMPLATE = ",self.template_name
+        #print "TEMPLATE_DIRS = ",TEMPLATE_DIRS
         filename = self.theme + '_' + self.template_name
-        print any(os.path.exists(os.path.join(d,filename)) for d in TEMPLATE_DIRS)
-        print (os.path.exists(os.path.join(d,filename)) for d in TEMPLATE_DIRS)
+        #print any(os.path.exists(os.path.join(d,filename)) for d in TEMPLATE_DIRS)
+        #print (os.path.exists(os.path.join(d,filename)) for d in TEMPLATE_DIRS)
         if any(os.path.exists(os.path.join(d,filename)) for d in TEMPLATE_DIRS):
             return filename
         else:
index fa72cb9..e64eb59 100644 (file)
@@ -17,7 +17,12 @@ import portal.dashboardview
 import portal.homeview
 import portal.newsview
 
+from portal.about                   import AboutView
 from portal.registrationview        import RegistrationView
+from portal.accountview             import AccountView, account_process
+from portal.institution             import InstitutionView
+
+from portal.supportview             import SupportView
 from portal.contactview             import ContactView
 
 from portal.termsview               import TermsView
@@ -101,13 +106,19 @@ urls = [
     (r'^testbeds/(?P<slicename>[^/]+)/?$', portal.slicetabtestbeds.SliceTabTestbeds.as_view()),
     (r'^measurements/(?P<slicename>[^/]+)/?$', portal.slicetabmeasurements.SliceTabMeasurements.as_view()),
     (r'^experiment/(?P<slicename>[^/]+)/?$', portal.slicetabexperiment.ExperimentView.as_view()),
-    #
+    
+    url(r'^about/?$', AboutView.as_view(), name='about'),
+    
+    url(r'^institution/?$', InstitutionView.as_view(), name='institution'),
     (r'^management/requests/?$', portal.managementtabrequests.ManagementRequestsView.as_view()),
     (r'^management/about/?$', portal.managementtababout.ManagementAboutView.as_view()),
     #
     url(r'^register/?$', RegistrationView.as_view(), name='registration'),
+    url(r'^account/?$', AccountView.as_view(), name='account'),
+    url(r'^account/account_process/?$', account_process),
     url(r'^contact/?$', ContactView.as_view(), name='contact'),
     url(r'^terms/?$', TermsView.as_view(), name='terms'),
+    url(r'^support/?$', SupportView.as_view(), name='support'),
     #
     url(r'^portal/', include('portal.urls')),
 
index 1a9e805..f05af49 100644 (file)
@@ -6,11 +6,10 @@
         <div class="modal-header">
           <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
             <h4 class="modal-title" id="{{domid}}__apply__label">
-               Applying pending changes...
-               &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-               <img id="applyloading" src="/static/img/loading.gif" />
+                Applying pending changes...                    
             </h4>
             <div>
+               <img id="applyloading" src="/static/img/loading.gif" /> &nbsp;&nbsp;
                Please be patient, this operation can take a minute or two.
             </div>
         </div>
@@ -43,6 +42,6 @@
 
   
   <!-- Button toolbar -->
-  <button class="btn btn-onelab btn-sm"  id="{{domid}}__apply" data-toggle="modal" data-target="#{{domid}}__apply__window">Apply</button>
+  <button class="btn btn-onelab btn-apply"  id="{{domid}}__apply" data-toggle="modal" data-target="#{{domid}}__apply__window">Apply</button>
   <!-- <button class="btn btn-default btn-sm" id="{{domid}}__cancel">Cancel</button> -->
 </div> 
index c843926..8da79d4 100644 (file)
@@ -2,7 +2,7 @@
   <table class="table dataTable" id="{{domid}}__table" width="100%">
     <thead>
       <tr>
-       {% if checkboxes %}<th class="checkbox"><input type="checkbox" disabled/></th>{% endif %}
+       {% if checkboxes %}<th><input type="checkbox" disabled/></th>{% endif %}
         <th>&#9888;</th>
         {% for column, field in columns.items %} <th>{{ column }}</th> {% endfor %} 
         {% for column, field in hidden_columns.items %} <th>{{ column }}</th> {% endfor %}
index 04665c6..6b55b92 100755 (executable)
@@ -815,6 +815,7 @@ var SCHEDULER_COLWIDTH = 50;
                 var num_hidden_cells;\r
 \r
                 $("#DateToRes").datepicker({\r
+                       dateFormat: "D, d M yy",\r
                     onRender: function(date) {\r
                         return date.valueOf() < now.valueOf() ? 'disabled' : '';\r
                     }\r
index 7c29877..928b2da 100755 (executable)
@@ -8,22 +8,28 @@
 </div>\r
 <div id="plugin-{{ domid }}" class="">\r
     <div class="row m-b">\r
-        <div class="col-md-2">\r
-            <label for="inputEmail3" class="col-sm-2 control-label">Day:</label>\r
-        </div>\r
-        <div class="col-md-10">\r
-            <label for="inputEmail3" class="col-sm-2 control-label">Time of day:</label>\r
-        </div>\r
-    </div>\r
-    <div class="row m-b">\r
-               <div class="col-md-2">\r
-               <input id="DateToRes" type="text" placeholder="Reservation Date">\r
-               <!-- <input id="DateToRes" type="text" class="form-control" placeholder="Reservation Date"> -->\r
-               <span class="glyphicon glyphicon-calendar"></span>\r
+        <div class="col-md-4">\r
+               <div class="row">\r
+                       <div class="col-md-1">\r
+                       <label for="inputEmail3" class="control-label">Day:</label>\r
+                       </div>\r
+                               <div class="col-md-11">\r
+                                       <input id="DateToRes" type="text" placeholder="Reservation Date">\r
+                                       <span class="glyphicon glyphicon-calendar" style="position:absolute;margin-left:-20px;margin-top:4px;"></span>\r
+                                       <!-- <input id="DateToRes" type="text" class="form-control" placeholder="Reservation Date"> -->\r
+                               </div>\r
+                       </div>\r
                </div>\r
-               <div class="col-md-10">\r
-                       <div class="sliderContainer">\r
-                               <div id="tblSlider"></div>\r
+        <div class="col-md-8">\r
+               <div class="row">\r
+                       <div class="col-md-2">\r
+                       <label for="inputEmail3" class="control-label">Time of day:</label>\r
+                       </div>\r
+                       <div class="col-md-10">\r
+                                       <div class="sliderContainer">\r
+                                               <div id="tblSlider"></div>\r
+                                       </div>\r
+                               </div>\r
                        </div>\r
                </div>\r
     </div>\r
index b4faa8e..f830cc1 100644 (file)
@@ -5,6 +5,7 @@ from django.contrib.auth import authenticate, login, logout
 from django.template import RequestContext
 from django.shortcuts import render_to_response
 from django.shortcuts import render
+
 import json
 
 from unfold.loginrequired import FreeAccessView
@@ -18,6 +19,8 @@ from myslice.configengine import ConfigEngine
 
 from myslice.theme import ThemeView
 
+import activity.user
+
 class HomeView (FreeAccessView, ThemeView):
     template_name = 'home-view.html'
         
@@ -62,6 +65,9 @@ class HomeView (FreeAccessView, ThemeView):
                     env['person'] = self.request.user
                     env['username'] = self.request.user
                     
+                    # log user activity
+                    activity.user.login(self.request)
+                    
                     ## check user is pi or not
                     platform_query  = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled')
                     account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
index 899fbfd..cee9311 100644 (file)
@@ -16,15 +16,11 @@ from myslice.configengine import ConfigEngine
 from myslice.theme import ThemeView
 import json
 
-import activity
-
 class ManagementAboutView (FreeAccessView, ThemeView):
     template_name = 'management-tab-about.html'
 
     def get (self, request):
         
-        activity.userLogin(request)
-        
         if request.user.is_authenticated(): 
             user_query  = Query().get('user').select('user_hrn','parent_authority').filter_by('user_hrn','==','$user_hrn')
             user_details = execute_query(self.request, user_query)
index e0a1ddf..c24fda6 100644 (file)
@@ -5,6 +5,7 @@ from hashlib    import md5
 
 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 django.contrib.sites.models import Site
@@ -21,6 +22,8 @@ from portal.actions             import create_pending_user
 
 from myslice.theme import ThemeView
 
+import activity.user
+
 # since we inherit from FreeAccessView we cannot redefine 'dispatch'
 # so let's override 'get' and 'post' instead
 #
@@ -43,12 +46,13 @@ class RegistrationView (FreeAccessView, ThemeView):
         if authorities is not None:
             authorities = sorted(authorities)
         
+        print "############ BREAKPOINT 1 #################"
         # Page rendering
         page = Page(wsgi_request)
         page.add_js_files  ( [ "js/jquery.validate.js", "js/my_account.register.js", "js/jquery.qtip.min.js","js/jquery-ui.js" ] )
         page.add_css_files ( [ "css/onelab.css", "css/registration.css", "css/jquery.qtip.min.css" ] )
         page.add_css_files ( [ "https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ] )
-
+        print "############ BREAKPOINT 2 #################"
         if method == 'POST':
             reg_form = {}
             # The form has been submitted
@@ -56,7 +60,9 @@ class RegistrationView (FreeAccessView, ThemeView):
             # get the domain url
             current_site = Site.objects.get_current()
             current_site = current_site.domain
-
+            
+            print "############ BREAKPOINT 3 #################"
+            
             for authority in authorities:
                 if authority['name'] == wsgi_request.POST.get('org_name', ''):
                     authority_hrn = authority['authority_hrn']     
@@ -64,7 +70,9 @@ class RegistrationView (FreeAccessView, ThemeView):
             # Handle the case when the template uses only hrn and not name
             if authority_hrn is None:
                 authority_hrn = wsgi_request.POST.get('org_name', '')
-
+            
+            print "############ BREAKPOINT 4 #################"
+            
             post_email = wsgi_request.POST.get('email','').lower()
             salt = randint(1,100000)
             email_hash = md5(str(salt)+post_email).hexdigest()
@@ -81,7 +89,9 @@ class RegistrationView (FreeAccessView, ThemeView):
                 'pi'            : '',
                 'validation_link': 'http://' + current_site + '/portal/email_activation/'+ email_hash
             }
-
+            
+            print "############ BREAKPOINT 5 #################"
+            
             # Construct user_hrn from email (XXX Should use common code)
             split_email = user_request['email'].split("@")[0] 
             split_email = split_email.replace(".", "_")
@@ -155,9 +165,12 @@ class RegistrationView (FreeAccessView, ThemeView):
             if not errors:
                 create_pending_user(wsgi_request, user_request, user_detail)
                 self.template_name = 'user_register_complete.html'
+                # log user activity
+                activity.user.register(self.request)
                 return render(wsgi_request, self.template, {'theme': self.theme}) 
 
         else:
+            print "############ BREAKPOINT A #################"
             user_request = {}
             ## this is coming from onelab website onelab.eu
             reg_form = {
@@ -165,6 +178,9 @@ class RegistrationView (FreeAccessView, ThemeView):
                 'last_name': wsgi_request.GET.get('last_name', ''),
                 'email': wsgi_request.GET.get('email', ''),
                 }
+            # log user activity
+            activity.user.signup(self.request)
+            print "############ BREAKPOINT B #################"
 
         template_env = {
           'topmenu_items': topmenu_items_live('Register', page),
@@ -175,4 +191,5 @@ class RegistrationView (FreeAccessView, ThemeView):
         template_env.update(user_request)
         template_env.update(reg_form)
         template_env.update(page.prelude_env ())
+        print "############ BREAKPOINT C #################"
         return render(wsgi_request, self.template,template_env)
index 6fcb05b..a6f9af8 100644 (file)
@@ -72,6 +72,12 @@ div.breadcrumbs {
     color:gray;
     font-size:10pt;
 }
+div.breadcrumbs a {
+    color:gray;
+}
+div.breadcrumbs a:hover {
+    text-decoration:underline;
+}
 .tab-pane {
     padding-top:15px;
 }
@@ -383,7 +389,9 @@ a.sl-resources, a.sl-resources:hover {
     padding:2px 4px;
     -moz-border-radius: 4px;
     border-radius: 4px;
-    width:125px;
+    width:105px;
+    margin-left:4px;
+    margin-bottom:8px;
     text-align: center;
 }
 a.sl-resources.active, a.sl-resources.active:hover, a.sl-resources.active:focus {
@@ -391,7 +399,13 @@ a.sl-resources.active, a.sl-resources.active:hover, a.sl-resources.active:focus
     -moz-border-radius: 4px;
     border-radius: 4px;
 }
-
+a.sl-resources:first-child {
+    margin-left:12px;
+}
+button.btn-apply {
+    font-size:13px;
+    padding:2px 8px;
+}
 div#slice-info {
     margin-top:25px;
 }
@@ -470,6 +484,8 @@ div#slice-info td {
     padding:3px 5px;
 }
 .slice-pending button.apply {
+    font-size:14px;
+    padding:2px 5px;
 }
 .slice-pending button.clear {
 }
@@ -618,6 +634,45 @@ div.secondary .account span {
 div.secondary .account a {
     color:black;
 }
+
+
+div.footer {
+    padding-top:15px;
+    
+}
+div.footer div.bottom {
+    position:absolute;
+    bottom:0;
+}
+div.footer ul {
+   margin:6px 0 0 0;
+   padding:0;
+}
+
+div.footer li {
+    font-size:9pt;
+    display:inline;
+    list-style:none;
+    margin:0px;
+    padding:0;
+    margin-right:15px;
+    color:#747474;
+    letter-spacing:0.4px;
+}
+
+div.footer li a {
+    color:#747474;
+}
+div.footer li a:hover {
+    text-decoration:underline;
+}
+div.copy {
+    font-size:8pt;
+    color:gray;
+    padding-top:15px;
+    padding-bottom:15px;
+}
+
 div.home {
     font-size:11pt;
     line-height:1.2em;
@@ -709,3 +764,7 @@ div.slogan {
     padding-top:60px;
     text-shadow: 1px 1px #013540;
 }
+
+th {
+    border:0 !important;
+}
index 1b83737..268c9aa 100644 (file)
@@ -88,10 +88,25 @@ $(document).ready(function() {
        {% block topmenu %}
        {% widget "_widget-topmenu.html" %}
        {% endblock topmenu %}
-       {% include 'messages-transient.html' %}
        {% block base_content %}
        {% endblock %}
 {% endblock container %}
+<div class="footer">
+<div class="container">
+       <div class="row">
+               <div class="col-md-12">
+                       <ul>
+                               <li><a href="/terms">Terms and Conditions</a></li>
+                       </ul>
+               </div>
+       </div>
+       <div class="row">
+               <div class="col-md-12 copy">
+                       Copyright © UPMC Sorbonne Universités, on behalf of the OneLab consortium
+               </div>
+       </div>
+</div>
+</div>
 <div class="loading">
        <div><img src="{{ STATIC_URL }}/img/loading.gif" /> Loading...</div>
        <div>&nbsp;</div>
index d534915..2270a3b 100644 (file)
@@ -44,7 +44,7 @@
 </script>
 
 <div class="col-md-12">
-       <h2>Authorities</h2>
+       <h2>From your authorities</h2>
 </div>
 {% if my_authorities %}
        
 {% endif %}
 <br />
 <div class="col-md-12">
-       <h2>Sub-Authorities</h2>
+       <h2>From your sub-authorities</h2>
 </div>
 {% if sub_authorities %}
        
 {% endif %}
 <br />
 <div class="col-md-12">
-       <h2>Authorities with delegation</h2>
+       <h2>From your authorities with delegation</h2>
 </div>
 
 {% if delegation_authorities %}
index 5b7eb96..40fb258 100644 (file)
@@ -1,44 +1,35 @@
-{% extends "layout.html" %}
+{% extends "layout_wide.html" %}
 
 {% block content %}
-<div class="row">
-       <div class="col-md-12">
-                <div class="breadcrumbs">
-                </div>
-       </div>
-</div>
-<div class="row">
-    <div class="col-md-12">
-        <ul class="nav nav-tabs nav-section">
-            <li class="active"><a href="#about">About</a></li>
-            <li><a href="#components">Underlying technologies</a></li>
-        </ul>
+<div class="container">
+    <div class="row">
+        <div class="col-md-12">
+               <h1><img src="{{ STATIC_URL }}icons/support-xs.png" alt="About" />About</h1>
+        </div>
     </div>
-</div>
-
-
-<div class="tab-content">
-    <div class="tab-pane active row" id="about">
-               <div class="col-md-12">
+       <div class="row">
+        <div class="col-md-12">
                        <p>
-                               OneLab Portal is a central place to get acess to all OneLab testbeds.In order to get access to the portal,
-                               an experimenter needs to  <a href="/portal/register">register</a> to the portal. The portal administrative body
+                               OneLab Portal is a central place to get acess to all OneLab testbeds. In order to get access to the portal,
+                               an experimenter needs to  <a href="/register">register</a> to the portal. The portal administrative body
                                is responsible to accept or reject newly registered users.   
                        </p>
                        <p>
-                               To learn more about OneLab visit:  <a href="http://onelab.eu/" target="_blank">http://onelab.eu/</a>                    
+                               To learn more about OneLab visit:  <a href="http://onelab.eu" target="_blank">onelab.eu</a>                     
                        </p>
                        <p>
-                               If you have any questions regarding using the portal visit: <a href="/portal/support">OneLab support</a>
+                               If you have any questions regarding using the portal visit: <a href="/support">OneLab support</a>
                        </p>
                        <p>
                                OneLab portal is a community effot. To get more information about OneLab portal team visit: 
-                               <a href="http://myslice.info/community" target="_blank">http://myslice.info/community</a>
+                               <a href="http://myslice.info/community" target="_blank">myslice.info/community</a>
                        </p>
                </div>
        </div>
-       <div class="tab-pane row" id="components">
+       <div class="row">
                <div class="col-md-12">
+                       <br />
                        <h3>A ready-made and easily customisable user interface for your testbed.</h3>
                                <p>
                                        MySlice is an ambitious project aiming to support researchers throughout the lifecycle of experiments that can run on a variety 
@@ -63,6 +54,7 @@
                                </p>
                </div>
                <div class="col-md-12">
+                       <br />
                        <h3>Portal Components</h3>
                                <h5>Myslice (Web Frontend)</h5>
                                        <p>
        </div>
    </div>
 </div>
-
-<script>
-$(document).ready(function() {
-    $('.nav-tabs a').click(function (e) {
-        e.preventDefault();
-        $(this).tab('show');
-    });
-});
-</script>
-
-
-{% endblock %}
+{% endblock %}
\ No newline at end of file
index 9941e97..585e39b 100644 (file)
@@ -4,7 +4,7 @@
 <div class="row">
        <div class="col-md-12">
                 <div class="breadcrumbs">
-                        Account &nbsp;>&nbsp; {{ person.email }}
+                        Account &nbsp;>&nbsp; <a href="/account">{{ person.email }}</a>
                 </div>
        </div>
 </div>
index 488e63e..87b8e8e 100644 (file)
@@ -42,7 +42,7 @@
 </script>
 
 <div class="col-md-12">
-       <h2>Authorities</h2>
+       <h2>From your authorities</h2>
 </div>
 {% if my_authorities %}
        
 {% endif %}
 <div>nnllknjkn<br /><br /></div>
 <div class="col-md-12">
-       <h2>Sub-Authorities</h2>
+       <h2>From your sub-authorities</h2>
 </div>
 {% if sub_authorities %}
        
 {% endif %}
 
 <div class="col-md-12">
-       <h2>Authorities with delegation</h2>
+       <h2>From your authorities with delegation</h2>
 </div>
 
 {% if delegation_authorities %}
index 69b417d..b46eab1 100644 (file)
@@ -5,13 +5,12 @@
     <div class="row">
         <div class="col-md-12">
                <h1><img src="{{ STATIC_URL }}icons/slices-xs.png" alt="News" />News</h1>
-               <br />
         </div>
     </div>
  
        <div class="row">
         <div class="col-md-12">
-               <b>15 July 2014</b> - The <b>OneLab</b> Portal opens with the <b>PlanetLab Europe</b>, <b>IOTLab</b> and <b>NITOS</b> testbeds!
+               <b>1 August 2014</b> - The <b>OneLab</b> Portal opens for beta test with the <b>PlanetLab Europe</b>, <b>IOTLab</b> and <b>NITOS</b> testbeds!
                <p>
                        Existing PlanetLab users will be able to open an account with their existing PLE credentials.
                </p>
index 295fe80..9e76323 100644 (file)
@@ -17,7 +17,7 @@
        <div class="col-md-12">
                <ul>
                  {% for error in errors %}
-                 <li>{{ error }}</li>
+                 <li style="color:white;">{{ error }}</li>
                  {% endfor %}
                </ul>
        </div>
@@ -489,9 +489,6 @@ $(document).ready(function(){
         {% for authority in authorities %}
             {% if authority.name %}
                 {value:"{{ authority.name }}",label:"{{authority.name}}"},
-                       // to show only full name
-           // {% else %}
-           //     {value:"{{ authority.authority_hrn }}",label:"{{authority.authority_hrn}}"},
             {% endif %}
         {% endfor %}    
     {% else %}
@@ -515,15 +512,10 @@ $(document).ready(function(){
       minLength: 0,
       change: function (event, ui) {
           if(!ui.item){
-              //http://api.jqueryui.com/autocomplete/#event-change -
-              // The item selected from the menu, if any. Otherwise the property is null
-              //so clear the item for force selection
               jQuery("#authority_hrn").val("");
           }
       }
-      //select: function( event, ui ) {console.log(jQuery(this))}
     });
-       // for hover texts
        $('[title!=""]').qtip();
        $("form").validate();
        $("form").submit(function() {
index 8057609..c2d52c3 100644 (file)
@@ -1,11 +1,9 @@
 {% extends "layout_wide.html" %}
 
 {% block head %}
-
 {% endblock %}
 
 {% block content %}
-
 {% include theme|add:"_widget-slice-sections.html" %}
          
 <div class="container-fluid tab-content container-slice">
index eb2a8de..9f311a4 100644 (file)
@@ -14,8 +14,7 @@
        <div class="row">
                <div class="col-md-12">
                        <ul class="nav nav-tabs nav-section">
-                               <li class="active"><a href="#support">Tickets</a></li>
-                               <li><a href="#faq">FAQ</a></li>
+                               <li class="active"><a href="#faq">FAQ</a></li>
                                <li><a href="#contact">Contact</a></li>
                        </ul>
            </div>
 </div>
 
 <div class="container tab-content">
-       <div class="tab-pane active row" id="support">
-               <div class="col-md-12">
-                       <h2>Report a Bug</h2>
-                       <p>If you have found a bug or having difficulties accesing some features or found some anomalies, please report it using our ticketing system.</p>
-                       <button id="ticketbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> Create Ticket</button>
-<!--                   <h3>Unresolved Tickets</h3>
-                       <table class="mytable table table-bordered table-hover">
-                       <tr>
-                           <th>Ticket No</th>
-                                       <th>Reported By</th>
-                                       <th>Description</th>
-                           <th>Status</th>
-                       </tr>
-                       <tr>
-                           <td>1</td>
-                                       <td>yasin.upmc@gmail.com</td>
-                                       <td> Slice_request page is not working </td>
-                                       <td> Unresolved</td>
-                       </tr>
-                               <tr>
-                                       <td>2</td>
-                                       <td>azerty@lip6.fr</td>
-                                       <td>Unable to Register</td>
-                                       <td>Unresolved</td>
-                               </tr> 
-               
-                   </table> -->
-               </div>
-         </div>
-       <div class="tab-pane row" id="faq">
+       <div class="tab-pane active row" id="faq">
                <div class="col-md-12">
                        <h2>Frequently Asked Questions (FAQs)<h2>
 
                </div>
          </div>
 
-       <div class="tab-pane row" id="contact">
-               <div class="col-md-12">
-                       <h2>Contact Us</h2>
-               
-                       <h3>Mailing List</h3>
-                       <p>You can subscribe to our mailing list by sending a request to: <b>support</b> (AT) <b>onelab</b> (DOT) <b>eu</b></p>
-                       <p>Also you can adress any issues in the same email address.</p>
-                       
-                       <h3>Mailing Address</h3>
-                       <address>
-                       UPMC - LIP6<br> 
-                       Boîte courrier 16 <br>
-                       Couloir 26-00, Etage 01, Bureau 102<br>
-                       4 place Jussieu<br>
-                       75252 PARIS CEDEX 05<br>
-                       France<br> 
-                       </address>
-               </div>
-         </div>
+       <div class="tab-pane" id="contact">
+               <div class="row">
+                       <div class="col-md-12">
+                               <h2>Contact Us</h2>
+                               <div class="row">
+                                       <div class="col-md-6">
+                                               <h3>Mailing List</h3>
+                                               <p>&nbsp;</p>
+                                               <p>You can subscribe to our mailing list by sending a request at the following E-Mail address:</p>
+                                               <p class="address">
+                                                       <a href="mailto:contact@onelab.eu">contact@onelab.eu</a>
+                                               </p>
+                                               <p>Also you can adress any issues in the same email address.</p>
+                                       </div>
+                                       <div class="col-md-6">
+                                               <h3>Mailing Address</h3>
+                                               <p>&nbsp;</p>
+                                               <p class="address">
+                                                       <b>OneLab Team</b><br />
+                                                       UPMC - Laboratoire d'Informatique de Paris 6<br />
+                                                       Boite courrier 169<br />
+                                                       4 place Jussieu<br />
+                                                       75252 PARIS cedex 05<br />
+                                                       FRANCE
+                                               </p>
+                                               
+                                               
+                                       </div>
+                               </div>
+                               <div class="row">
+                                       <div class="col-md-6">
+                                               <h3>Report a Bug</h3>
+                                               <p>If you have found a bug or having difficulties accesing some features or found some anomalies, 
+                                                       please report it using our ticketing system.
+                                               </p>
+                                               <button id="ticketbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> Create Ticket</button>
+                                       </div>
+                               </div>
+                       </div>
+               </div>
+       </div>
 </div>
 
 <script>
 $(document).ready(function() {
     $('button#ticketbtn').click(function() {
-        window.location="/portal/contact/";
+        window.location="/contact/";
     });
        $('.nav-tabs a').click(function (e) {
                e.preventDefault();
index fa0e896..4786a5c 100644 (file)
@@ -14,5 +14,9 @@
 <b>User hrn     :</b> {{user_hrn}}<br>
 <b>Portal url  :</b> {{ current_site }}<br>
 <p></p>
-<p>You can validate the user <a href="http://{{current_site}}/portal/validate">here</a>.<p>
-<p>Please note that the validation request will only become visible to you on the OneLab portal once the user has confirmed his/her email address.</p>
+<p>You can see new user request <a href="http://{{current_site}}/portal/validate">in the portal.</a><p>
+<p>Please note that the request will only become visible to you on the OneLab portal once the user has confirmed his/her email address.</p>
+<p>Please only validate users who you know for whose actions you are prepared to take responsibility, as described in the 
+<a href="http://{{current_site}}/terms">OneLab terms and conditions.</a> If you find any anomalies in the request 
+(mistakes/spam/unauthorized persons) please <a href="mailto:support@onelab.eu">notify us.</a></p>
+
index b782e71..83ec9d3 100644 (file)
@@ -12,8 +12,10 @@ Email        : {{email}}
 User hrn     : {{user_hrn}}
 Portal url   : {{ current_site }}
 
-You can validate the user here: http://{{current_site}}/portal/validate
+You can see new user request in the portal: http://{{current_site}}/portal/validate
 
-Please note that the validation request will only become visible to you on the OneLab portal once the user has confirmed his/her email address.
+Please note that the request will only become visible to you on the OneLab portal once the user has confirmed his/her email address.
 
+Please only validate users who you know for whose actions you are prepared to take responsibility, as described in the OneLab terms and conditions. 
+If you find any anomalies in the request (mistakes/spam/unauthorized persons)  please notify us at support@onelab.eu.
 
index d7342f8..790c720 100644 (file)
@@ -20,7 +20,7 @@
        <div class="login-signup">
                You don't have yet an account? 
                
-               <a href="/portal/register">Sign Up!</a>
+               <a href="/register">Sign Up!</a>
        </div>
        </form>
 </div>
index 01c8d82..40761b5 100644 (file)
@@ -2,7 +2,7 @@
        <div class="row">
                <div class="col-md-12">
                         <div class="breadcrumbs">
-                                Experiment &nbsp;>&nbsp; {{ slice }}
+                                Experiment &nbsp;>&nbsp; Slice: {{ slice }}
                         </div>
                </div>
        </div>
                <div class="col-md-12">
 {% if section == "resources" %}
 <ul class="nav nav-tabs nav-section">
-       <li><a href="/slice/{{ slice }}#info">Information</a></li>
+       
        <!-- <li><a href="/slice/{{ slice }}#testbeds">Testbeds</a></li> -->
        <li class="active"><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li><a href="/slice/{{ slice }}#users">Users</a></li>
+       <li><a href="/slice/{{ slice }}#info">Information</a></li>
        <!-- <li><a href="/slice/{{ slice }}#experiment">Statistics</a></li> -->
        <!-- <li><a href="/slice/{{ slice }}#experiment">Measurements</a></li> -->
        <li><a href="/slice/{{ slice }}#experiment">Tools</a></li>
 </ul>
 {% else %}
 <ul class="nav nav-tabs nav-section">
-       <li class="active"><a href="#info">Information</a></li>
        <!-- <li class="testbeds"><a href="#testbeds">Testbeds</a></li> -->
        <li><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li class="users"><a href="#users">Users</a></li>
+       <li class="active"><a href="#info">Information</a></li>
        <!-- <li class="statistics"><a href="#experiment">Statistics</a></li> -->
        <!-- <li class="measurements"><a href="#experiment">Measurements</a></li> -->
        <li class="experiment"><a href="#experiment">Tools</a></li>
index a4fae39..cfb9abb 100644 (file)
@@ -20,9 +20,9 @@
                                        </div>
                                </li>
                                {%if 'is_pi'  in pi %}  
-                               <li id="nav-institution" class=""><a href="/portal/institution">MANAGEMENT</a></li>
+                               <li id="nav-institution" class=""><a href="/institution">MANAGEMENT</a></li>
                                 {%endif%}
-                               <li><a href="/portal/support/">SUPPORT</a></li>
+                               <li><a href="/support/">SUPPORT</a></li>
                        </ul>
                </div>
                {% else %}
                <div class="col-sm-5 col-md-5 secondary">
                        <ul>
                                <li><a href="/news">News</a></li>
-                               <li><a href="/portal/about">About</a></li>
+                               <li><a href="/about">About</a></li>
                                <li><a target="_blank" href="http://new.onelab.eu">Public Website</a></li>
                                <li><a target="_blank" href="http://intranet.onelab.eu">Intranet</a></li>
                        </ul>
                        {% if username %}
-                       <div class="account">You are logged in as &nbsp;<a href="/portal/account/">{{ username }}</a> &nbsp;&nbsp;|&nbsp;&nbsp; <a id="logout" style="cursor:pointer;" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> Logout</a></div>
+                       <div class="account">You are logged in as &nbsp;<a href="/account/">{{ username }}</a> &nbsp;&nbsp;|&nbsp;&nbsp; <a id="logout" style="cursor:pointer;" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> Logout</a></div>
                        {% endif %}
                </div>
        </div>
index 3355e0c..3fefedf 100644 (file)
@@ -26,20 +26,6 @@ $(document).ready(function() {
                {{filter_testbeds}}
        </div>
        <div class="col-md-10" style="height:100%;">
-               <!-- <div class="row slice-pending">
-                       <ul class="nav nav-pills">
-                               <li><a href="">Unreserved</a></li>
-                               <li><a href="">Reserved</a></li>
-                               <li><a href="">Pending<span class="badge" id="badge-pending" style="display:none;"></span></a></li>
-                               <li>
-                                       <button type="button" class="btn btn-primary apply" id="ApplyPendind">Apply</button>
-                                       <button type="button" class="btn btn-default clear">Clear</button>
-                               </li>
-                               <li>
-                                       <div id="loading" style="display:none;"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading" /></div>
-                               </li>
-                       </ul>
-               </div> -->
                <div class="row">
                        {% if msg %}
                        <div class="col-md-12"><p class="alert-success">{{ msg }}</p></div>
@@ -50,7 +36,7 @@ $(document).ready(function() {
                        <div class="col-md-6">
                                {{ filter_status }}
                        </div>
-                       <div class="col-md-2">
+                       <div class="col-md-1">
                                {{ apply }}
                        </div>
                </div>
@@ -97,7 +83,7 @@ $(document).ready(function() {
                        <div class="tab-content" style="height:100%;">
                                <div class="tab-pane active" id="resourcelist">
                                         <!-- Button trigger modal - columns selector -->
-                                       <button class="btn btn-primary btn-sm" style="float:right;" data-toggle="modal" data-target="#myModal">...</button>
+                                       <button class="btn btn-default btn-sm" style="float:right;" data-toggle="modal" data-target="#myModal">...</button>
                        {{list_resources}}
                                        <!-- <table cellpadding="0" cellspacing="0" border="0" class="table" id="objectList"></table> -->
                                </div>