X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=portal%2Fviews.py;h=4f1ea08dffb55bfff89aa98f62d922ad614bd5bf;hb=db29e23d289c0edd696b8c6445765a908d59058c;hp=4c4157e7cfe2df91e113c356af8e843b74812b0c;hpb=af7c18aea18be19b7227b25a019af4d257cee7dd;p=unfold.git diff --git a/portal/views.py b/portal/views.py index 4c4157e7..9596b177 100644 --- a/portal/views.py +++ b/portal/views.py @@ -1,86 +1,224 @@ -from portal.portalpage import PortalPage -from plugins.wizard import Wizard -from plugins.form import CreateForm -from plugins.raw.raw import Raw # XXX - -from myslice.viewutils import the_user - -from django.template.loader import render_to_string -from django.template import RequestContext - -def index(request): - - WIZARD_TITLE = 'User registration' - STEP1_TITLE = 'Enter your details' - STEP2_TITLE = 'Select your institution' - STEP3_TITLE = 'Authentication' - STEP4_TITLE = 'Request a slice (optional)' - STEP5_TITLE = 'Waiting for validation' - STEP6_TITLE = 'Account validated' - - STEP0 = render_to_string('account_validated.html', context_instance=RequestContext(request)) - STEP2_HTML = """ - coucou - """ - STEP4 = """ - mede - """ - STEP5 = render_to_string('account_validated.html', context_instance=RequestContext(request)) - - p = PortalPage(request) - - # This is redundant with the Wizard title - p << "

User registration

" - - sons = [] - # STEP 1 - # If the user already exists (is logged), let's display a summary of his account details - # Otherwise propose a form to fill in - if the_user(request): - # Fill a disabled form with user info - # Please logout to register another user - sons.append(Raw(page=p, title=STEP1_TITLE, togglable=False, html=STEP0)) +# -*- coding: utf-8 -*- +# +# portal/views.py: views for the portal application +# This file is part of the Manifold project. +# +# Authors: +# Jordan Augé +# Mohammed Yasin Rahman +# Loic Baron +# Copyright 2013, UPMC Sorbonne Universités / LIP6 +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; see the file COPYING. If not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +import json + +from django.http import HttpResponseRedirect, HttpResponse +from django.shortcuts import render +from django.template.loader import render_to_string + +from unfold.loginrequired import FreeAccessView +from ui.topmenu import topmenu_items_live, the_user + +from portal.event import Event +# presview is put in observation for now +#from plugins.pres_view import PresView +from plugins.raw import Raw + +# these seem totally unused for now +#from portal.util import RegistrationView, ActivationView + +from portal.models import PendingUser, PendingSlice +from portal.actions import get_request_by_authority +from manifold.manifoldapi import execute_query +from manifold.core.query import Query +from unfold.page import Page + +# NOTE +# initially all the portal views were defined in this single file +# all the other ones have now migrated into separate classes/files for more convenience +# I'm leaving these ones here for now as I could not exactly figure what the purpose was +# (i.e. what the correct name should be, as presviewview was a bit cryptic) +class PresViewView(FreeAccessView): + template_name = "view-unfold1.html" + + def get_context_data(self, **kwargs): + + page = Page(self.request) + +# pres_view = PresView(page = page) + pres_view = Raw(page = page,html="

PresView needs to be integrated

") + + context = super(PresViewView, self).get_context_data(**kwargs) + + #context['ALL_STATIC'] = "all_static" + context['unfold_main'] = pres_view.render(self.request) + + # XXX This is repeated in all pages + # more general variables expected in the template + context['title'] = 'Test view that combines various plugins' + # the menu items on the top + context['topmenu_items'] = topmenu_items_live('PresView', page) + # so we can sho who is logged + context['username'] = the_user(self.request) + + prelude_env = page.prelude_env() + context.update(prelude_env) + + return context + +def json_me(config_file,type): + json_answer = '' + for ligne in config_file: + if not ligne.startswith('#'): + args = ligne.split(';') + json_answer += str('{ "name": "' + args[0] + '" ,"id":"' + args[1] + '" ,"descriptif":"' + args[2]+'"') + if type!="dynamic": + json_answer += str(',"contraints":') + if args[3]=="": + json_answer += str('""') + else: + json_answer += str(args[3]) + json_answer += str('},') + return json_answer[:-1] + + +DIR = '/var/myslice/' +STATIC = '%s/config_method_static' % DIR +DYNAMIC = '%s/config_method_dynamic' % DIR +ANIMATION = '%s/config_method_animation' % DIR + +def pres_view_methods(request, type): + + if type ==None: + return 0 + elif type =="static": + config = open(STATIC, "r") + json_answer = str('{ "options": [') + json_answer += str(json_me(config,"static")) + json_answer += str('] }') + config.close() + elif type =="dynamic": + config = open(DYNAMIC, "r") + json_answer = str('{ "options": [') + json_answer += str(json_me(config,"dynamic")) + json_answer += str('] }') + config.close() + elif type =="animation": + config = open(ANIMATION, "r") + json_answer = str('{ "options": [') + json_answer += str(json_me(config,"animation")) + json_answer += str('] }') + config.close() + elif type =="all": + config = open(STATIC, "r") + json_answer = str('{ "static": [') + json_answer += str(json_me(config,"static")) + json_answer += str('],') + json_answer += str('"dynamic": [') + config.close() + config = open(DYNAMIC, "r") + json_answer += str(json_me(config,"dynamic")) + json_answer += str('],') + json_answer += str('"animation": [') + config.close() + config = open(ANIMATION, "r") + json_answer += str(json_me(config,"animation")) + json_answer += str('] }') + config.close() else: - # XXX This should become local:user - sons.append(CreateForm(page = p, title = STEP1_TITLE, togglable = False, object = 'user')) - - # STEP 2 - # If the user already exists (is logged), let's display a summary of its institution - # Otherwise propose a form to fill in (we should base our selection on the email) - if the_user(request): - # Fill a disabled form with institution - # Please logout to register another user - sons.append(Raw(page=p, title=STEP2_TITLE, togglable=False, html="User created")) - else: - sons.append(CreateForm(page = p, title = STEP2_TITLE, togglable = False, object = 'institution')) - - # STEP3 - # Please should your prefered authentication method - # This step should allow the user to either choose the user or managed mode in MySlice - sons.append(Raw(page = p, title = STEP3_TITLE, togglable = False, html = STEP2_HTML)) - - # Step 4: Request a slice (optional) - sons.append(CreateForm(page = p, title = STEP4_TITLE, togglable = False, object = 'slice')) - - # Step 5: Your request is waiting for validation - # Periodic refresh - sons.append(Raw(page = p, title = STEP5_TITLE, togglable = False, html = STEP4)) - - # Step 6: Account validation = welcome for newly validated users - # . delegation - # . platforms - # . slice - # . pointers - sons.append(Raw(page = p, title = STEP6_TITLE, togglable = False, html = STEP5)) - - wizard = Wizard( - page = p, - title = WIZARD_TITLE, - togglable = False, - sons = sons, - start_step = 2, - ) - - p << wizard.render(request) # in portal page if possible - - return p.render() + return 0 + return HttpResponse (json_answer, mimetype="application/json") + +def pres_view_animation(request, constraints, id): + +# sites crees depuis 2008 +# static.py?contraints=']date_created':1262325600&id='name_id"' + + # method = request.getvalue('method') #ex : GetSites + #constraints = "']date_created':1262325600" + #id = "2" + + if id == None: + return 0 + + # method = 'GetSites'#request.getvalue('method') #ex : GetSites + # constraints = {}#request.getvalue('constraints') // nul = {} + # response_field = "'site_id','name','date_created'"#request.getvalue('response_field') + + config_file = open(ANIMATION, "r") + for ligne in config_file: + if not ligne.startswith('#'): + ligne = ligne.split('\n') + first = ligne[0].split(';') + if (str(first[1]) == str(id)): + save = first + config_file.close() + + #Les print_method, print_option sont definis par le client (js) + #Les animations acceptent que les connexions anonymous + # args = "postmsg;animation;;;anonymous;https://www.planet-lab.eu/PLCAPI/;" + args = ";;"+str(save[8])+";"+str(save[9])+";anonymous;"+str(save[5])+";"+str(save[6])+";{"+str(constraints)+"};"+str(save[7])+";" + + + #Creation d'un objet event + event = Event(args) + cmd = [{"params": { + "data": { + "print_options": event.print_options, + "print_method": event.print_method, + "message": event.data + } + } + }] + + json_answer = json.dumps(cmd) + return HttpResponse (json_answer, mimetype="application/json") + +def pres_view_static(request, constraints, id): + #constraints = "']date_created':1262325600" + #id = "2" + + # method = 'GetSites'#request.getvalue('method') #ex : GetSites + # constraints = {}#request.getvalue('constraints') // nul = {} + # response_field = "'site_id','name','date_created'"#request.getvalue('response_field') + + config_file = open(STATIC, "r") + for ligne in config_file: + if not ligne.startswith('#'): + ligne = ligne.split('\n') + first = ligne[0].split(';') + if (str(first[1]) == str(id)): + save = first + config_file.close() + + #Les print_method, print_option sont definis par le client (js) + #Les animations acceptent que les connexions anonymous + # args = "postmsg;animation;;;anonymous;https://www.planet-lab.eu/PLCAPI/;" + args = ";;"+str(save[8])+";"+str(save[9])+";anonymous;"+str(save[5])+";"+str(save[6])+";{"+str(constraints)+"};"+str(save[7])+";" + + + #Creation d'un objet event + event = Event(args) + cmd = [{"params": { + "data": { + "print_options": event.print_options, + "print_method": event.print_method, + "message": event.data + } + } + }] + + json_answer = json.dumps(cmd) + return HttpResponse (json_answer, mimetype="application/json")