import json
+ import os.path
+
# this is for django objects only
#from django.core import serializers
-from django.http import HttpResponse, HttpResponseForbidden
+from django.http import HttpResponse, HttpResponseForbidden
#from manifold.manifoldquery import ManifoldQuery
-from manifold.core.query import Query
+from manifold.core.query import Query
from manifold.core.result_value import ResultValue
-from manifold.manifoldapi import ManifoldAPI
-from manifold.manifoldresult import ManifoldException
+from manifold.manifoldapi import ManifoldAPI
+from manifold.manifoldresult import ManifoldException
+from manifold.util.log import Log
debug=False
debug=True
manifold_query = Query()
#manifold_query = ManifoldQuery()
manifold_query.fill_from_POST(request.POST)
- offline_filename="offline-%s-%s.json"%(manifold_query.action,manifold_query.object)
+ offline_filename="%s/../offline-%s-%s.json"%(os.path.dirname(__file__),manifold_query.action,manifold_query.object)
# retrieve session for request
# We allow some requests to use the ADMIN user account
# for the benefit of the python code, manifoldAPI raises an exception if something is wrong
# however in this case we want to propagate the complete manifold result to the js world
-
result = manifold_api.forward(manifold_query.to_dict())
# XXX TEMP HACK
] ,
'css_files': [
'css/query_editor.css',
--# 'css/jquery-ui.css',
++ 'css/jquery-ui.css',
# 'css/demo_page.css',
# 'css/demo_table.css',
]
event_filter_added: function(op, suffix) {
suffix = (typeof suffix === 'undefined') ? '' : manifold.separator + suffix;
var self = this;
-- return function(e) {
++ return function(e, ui) {
var array = self.array_from_id(e.target.id);
var key = self.field_from_id(array); // No need to remove suffix...
-- var value = e.target.value;
++
++ // using autocomplete ui
++ if(typeof(ui) != "undefined"){
++ var value = ui.item.value;
++ }else{
++ var value = e.target.value;
++ }
if (value) {
// XXX This should be handled by manifold
init: function(options, element) {
this._super(options, element);
--
++ console.log("init Query_Editor");
this.listen_query(options.query_uuid);
this.elts('queryeditor-auto-filter').change(this.event_filter_added('='));
]
});
-- var self = this;
// Actions on the newly added fields
this.elmt('table tbody td span').on('click', function() {
var nTr = this.parentNode.parentNode;
'padding-top' : '0em',
'padding-bottom': '0em'
});
++
++ // autocomplete list of tags
++ this.availableTags = {};
}, // init
on_field_added: function(field)
{
++ console.log("on_field_added : "+field);
this.check_field(field);
},
this.uncheck_field(field);
},
++ /* RECORD HANDLERS */
++ on_query_done: function()
++ {
++ //console.log("Query_Editor: query_done!");
++ //console.log(this.availableTags);
++ },
++ on_new_record: function(record)
++ {
++ //console.log("Query_Editor: new_record!");
++ //console.log(record);
++ availableTags = this.availableTags;
++ jQuery.each(record,function(key,value){
++ value = get_value(value);
++ if(!availableTags.hasOwnProperty(key)){availableTags[key]=new Array();}
++ //availableTags[key].push(value);
++ var currentArray = availableTags[key];
++ if(value!=null){
++ if(jQuery.inArray(value,currentArray)==-1){availableTags[key].push(value);}
++ }
++ });
++ this.availableTags = availableTags;
++ this.update_autocomplete(availableTags);
++ },
++
/* Former code not used at the moment */
print_field_description: function(field_header, div_id)
return output;
},
++ update_autocomplete: function(availableTags)
++ {
++ var self = this;
++ var domid = this.options.plugin_uuid;
++
++ jQuery.each(availableTags, function(key, value){
++ value.sort();
++ jQuery("#"+domid+"__field__"+key).autocomplete({
++ source: value,
++ selectFirst: true,
++ minLength: 0, // allows to browse items with no value typed in
++ select: self.event_filter_added('=')
++ });
++ });
++ }, // update_autocomplete
++
++/*
update_autocomplete: function(e, rows, current_query)
{
var d = data;
});
});
}, // update_autocomplete
--
++*/
fnFormatDetails: function( metaTable, nTr, div_id )
{
var aData = metaTable.fnGetData( nTr );
from manifold.manifoldapi import execute_query
from manifold.core.query import Query
+ from portal.models import PendingUser
+ from portal.actions import authority_get_pi_emails
+
# This is a rough porting from views.py
# the former function-based view is now made a class
# we redefine dispatch as it is simple
errors = []
- authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn')
- #authorities_query = Query.get('authority').select('authority_hrn')
+ #authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn')
+ authorities_query = Query.get('authority').select('authority_hrn')
authorities = execute_query(request, authorities_query)
+ authorities = sorted(authorities)
if request.method == 'POST':
# We shall use a form here
# Send email
ctx = {
- first_name : reg_fname,
- last_name : reg_lname,
- #affiliation : reg_aff,
- authority_hrn: reg_auth,
- email : reg_email,
- keypair : keypair,
- cc_myself : True # form.cleaned_data['cc_myself']
+ 'first_name' : reg_fname,
+ 'last_name' : reg_lname,
+ 'authority_hrn': reg_auth,
+ 'email' : reg_email,
+ 'keypair' : keypair,
+ 'cc_myself' : True # form.cleaned_data['cc_myself']
}
- recipients = authority_get_pi_emails(authority_hrn)
+ recipients = authority_get_pi_emails(request,reg_auth)
if ctx['cc_myself']:
recipients.append(ctx['email'])
msg = render_to_string('user_request_email.txt', ctx)
- send_mail("Onelab New User request for %s submitted"%email, msg, email, recipients)
+ send_mail("Onelab New User request for %s submitted"%reg_email, msg, reg_email, recipients)
return render(request, 'user_register_complete.html')
'authority_hrn': request.POST.get('authority_hrn', ''),
'email': request.POST.get('email', ''),
'password': request.POST.get('password', ''),
- 'authorities': authorities
+ 'authorities': authorities,
})
class SliceRequestView (LoginRequiredAutoLogoutView):
def authority_hrn_initial (self, request):
- authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn')
-# authorities_query = Query.get('authority').select('authority_hrn')
+# authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn')
+ authorities_query = Query.get('authority').select('authority_hrn')
authorities = execute_query(request, authorities_query)
+ authorities = sorted(authorities)
authority_hrn_tuples = [ (authority['authority_hrn'], authority['name'],) for authority in authorities ]
return {'authority_hrn': authority_hrn_tuples}
if cc_myself:
recipients.append(email)
msg = render_to_string('slice-request-email.txt', form.cleaned_data)
- send_mail("Onelab New Slice request form submitted", msg, email, recipients)
+ send_mail("Onelab user %s requested a slice"%email , msg, email, recipients)
return render(request,'slice-request-ack-view.html') # Redirect after POST
else:
tmp_default_slice='ple.upmc.myslicedemo'
# temporary : turn off the users part to speed things up
--do_query_users=True
++#do_query_users=True
++do_query_users=False
class SliceView (LoginRequiredAutoLogoutView):
page = Page(request)
page.add_css_files ('css/slice-view.css')
++ page.add_js_files ( [ "js/common.functions.js" ] )
page.add_js_chunks ('$(function() { console.log("sliceview: jQuery version " + $.fn.jquery); });')
page.add_js_chunks ('$(function() { console.log("sliceview: users turned %s"); });'%("on" if do_query_users else "off"))
page.expose_js_metadata()
resources_query_editor = QueryEditor(
page = page,
-- query = sq_resource,
++ query = query_resource_all,
title = "Select Columns",
)
resources_active_filters = ActiveFilters(
<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" />
- <script type="text/javascript" src="{{STATIC_URL}}/jquery.validate.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}/my_account.register.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}/js/jquery.validate.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}/js/my_account.register.js"></script>
{% endblock %}
{% block unfold1_main %}
+ <div class="onelab-title well well-lg">
+ <h2>OneLab Experimenter Registration</h2>
+ <h4>For First Line Support please <a href="/portal/contact" >Contact Support</a></h3>
+ </div>
{% if errors %}
<ul>
{% endfor %}
</ul>
{% endif %}
-
-
- <div class="onelab-title well well-lg">
- <h2>OneLab Experimenter Registration</h2>
- <h4>For First Line Support please <a href="/portal/contact" >Contact Support</a></h3>
- </div>
<div class="well">
- <form class="cmxform" id="commentForm" method="post" action="" enctype="multipart/form-data" >
- {% csrf_token %}
- <fieldset>
- <div class="field">
- <label for="cname">First Name</label>
- <input type="text" id="firstname" name="firstname" size="25" class="required" minlength="2" value="{{ firstname}}" />
- <p class="hint">Enter your first name</p>
- <?php echo $errfName;?>
- </div>
- <div class="field">
- <label for="lname">Last Name</label>
- <input type="text" id="lastname" name="lastname" size="25" class="required" minlength="2" value="{{ lastname }}"/>
- <p class="hint">Enter your last name</p>
- <?php echo $errlName;?>
- </div>
- <!-- DEPRECATED
- <div class="field">
- <label for="aff_list">Affiliation</label>
- <input type="text" id="aff_list" name="affiliation" size="25" class="required" value="{{ affiliation }}"/>
- <p class="hint">Enter your Institution name</p>
- <?php echo $erraffiliation;?>
- </div>
- -->
- <div class="field">
- <label for="auth_list">Authority</label>
- <select id="auth_list" name="authority_hrn" size="1" class="required">
- {% for authority in authorities %}
- <option value="{{ authority.authority_hrn }}"/>{{authority.authority_hrn}}</option>
- {% endfor %}
- </select>
- <p class="hint">Please select an authority responsible for vetting your account</p>
- </div>
-
- <div class="field">
- <label for="cemail">Email</label>
- <input type="text" id="email" name="email" size="25" class="required email" value="{{ email }}"/>
- <p class="hint">Enter a valid email address</p>
- <?php echo $errEmail; ?>
- </div>
- <div class="field">
- <label for="password">Password</label>
- <input type="password" id="password" name="password" class="required" minlength="4" value="{{ password }}"/>
- <p class="hint">Enter password</p>
- <?php //echo $errPass;?>
- </div>
- <div class="field">
- <label for="password">Confirm Password</label>
- <input type="password" id="confirmpassword" name="confirmpassword" minlength="4" class="required" value=""/>
- <p class="hint">Retype the password</p>
- </div>
- <div class="field">
- <label for="question">My Keys</label>
- <select name="question" class="required" id="question">
- <option value="generate">Generate key pairs for me </option>
- <option value="upload">Upload my public key </option>
- </select>
- <p class="hint">Genkey: Account Delegation Automatic (Recommended)</p>
- <?php echo $errFile; ?>
- </div>
- <div class="field" style="display:none;" id="upload_key">
- <label for="file">Upload public key</label>
- <input type="file" name="user_public_key" class="required" id="user_public_key"/>
- <p class="hint">Account Delegation: Manual (Advanced Users)</p>
- <p class="warning" id="pkey_del_msg">Once your account is validated, you will have to delegate your credentials manually using SFA [Advanced users only]</p>
-
- </div>
- <div class="field" id="register">
- <input class="submit btn" type="submit" name="submit" value="Register"/>
- </div>
- </fieldset>
- </form>
- <form class="cmxform form-horizontal" id="registrationForm" method="post" action="" enctype="multipart/form-data" role="form">
++ <form class="cmxform form-horizontal" id="registrationForm" method="post" action="" enctype="multipart/form-data" role="form">
+ <fieldset>
+ {% csrf_token %}
+ <div class="form-group">
+ <label for="firstname" class="col-md-4 control-label">First Name</label>
+ <div class="col-md-4">
+ <input type="text" name="firstname" class="form-control" minlength="2" value="{{ firstname }}" placeholder="First Name" required />
+ </div>
+ <div class="col-md-4"> <p class="form-hint">Enter your first name</p> </div>
+ </div>
+ <div class="form-group">
+ <label for="lastname" class="col-md-4 control-label">Last Name</label>
+ <div class="col-md-4">
+ <input type="text" name="lastname" size="25" class="form-control" minlength="2" value="{{ lastname }}" placeholder="Last Name" required />
+ </div>
+ <div class="col-md-4"><p class="form-hint">Enter your last name</p></div>
+ </div>
+ <div class="form-group">
+ <label for="auth_list" class="col-md-4 control-label">Authority</label>
+ <div class="col-md-4">
+ <select id="auth_list" name="authority_hrn" size="1" class="form-control" required>
+ {% if authorities %}
+ {% for authority in authorities %}
- <option value="{{ authority.authority_hrn }}">{{authority.name}} ({{authority.authority_hrn}})</option>
++ <option value="{{ authority.authority_hrn }}"/>{{authority.authority_hrn}}</option>
++ <!-- <option value="{{ authority.authority_hrn }}">{{authority.name}} ({{authority.authority_hrn}})</option> -->
+ {% endfor %}
+ {% else %} <!-- should not happen -->
+ <option value="test">No authority found !!! </option>
+ {% endif %}
+ </select>
+ </div>
+ <div class="col-md-4"><p class="form-hint">Please select an authority responsible for vetting your account</p></div>
+ </div>
+
+ <div class="form-group">
+ <label for="email" class="col-md-4 control-label">Email</label>
+ <div class="col-md-4">
+ <input type="email" name="email" size="25" class="form-control" value="{{ email }}" required/>
+ </div>
+ <div class="col-md-4"><p class="form-hint">Enter a valid email address</p></div>
+ </div>
+ <div class="form-group">
+ <label for="password" class="col-md-4 control-label">Password</label>
+ <div class="col-md-4">
+ <input type="password" id="password" name="password" class="form-control" minlength="4" value="{{ password }}" required/>
+ </div>
+ <div class="col-md-4"><p class="form-hint">Enter password</p></div>
+ </div>
+ <div class="form-group">
+ <label for="password" class="col-md-4 control-label">Confirm Password</label>
+ <div class="col-md-4">
+ <input type="password" id="confirmpassword" name="confirmpassword" minlength="4" class="form-control"
+ value="" placeholder="Confirm Password" required/>
+ </div>
+ <div class="col-md-4"><p class="form-hint">Retype the password</p></div>
+ </div>
+ <div class="form-group">
+ <label for="question" class="col-md-4 control-label">My Keys</label>
+ <div class="col-md-4">
+ <select name="question" class="form-control" id="key-policy" required>
+ <option value="generate">Generate key pairs for me </option>
+ <option value="upload">Upload my public key </option>
+ </select>
+ </div>
+ <div class="col-md-4"><p class="form-hint">Genkey: Account Delegation Automatic (Recommended)</p> </div>
+ </div>
+ <div class="form-group" style="display:none;" id="upload_key">
+ <label for="file" class="col-md-4 control-label">Upload public key</label>
+ <div class="col-md-4">
+ <input type="file" name="user_public_key" class="form-control" id="user_public_key" required/>
+ <p class="warning" id="pkey_del_msg">Once your account is validated, you will have to delegate your credentials manually using SFA [Advanced users only]</p>
+ </div>
+ <div class="col-md-4"><p class="form-hint">Account Delegation: Manual (Advanced Users)</p></div>
+ </div>
+ <div class="form-group" id="register">
+ <div class="col-md-offset-4 col-md-4">
+ <button class="submit btn btn-default" type="submit">Register</button>
+ </div>
+ </div>
+ </fieldset>
+ </form>
++>>>>>>> abb43f86edd5a2888cb96ca92a58350db9e32fcf
</div>
{% endblock %}
},
escape_id: function(id) {
-- return id.replace( /(:|\.|\[|\])/g, "\\$1" );
++ if(typeof id != 'undefined'){
++ return id.replace( /(:|\.|\[|\])/g, "\\$1" );
++ }else{
++ return "fake-id";
++ }
}
} // global unfold