1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 ''' A view functions is simply a Python function that takes a Web request and
26 returns a Web response. This response can be the HTML contents of a Web page,
27 or a redirect, or the 404 and 500 error, or an XML document, or an image...
28 or anything.'''
29
30 import os
31 import sys
32 import locale
33 import calendar
34 import datetime
35 import traceback
36 import logging
37 import re
38
39 from time import time
40
41 from omero_version import omero_version
42
43 from django.conf import settings
44 from django.contrib.sessions.backends.cache import SessionStore
45 from django.core import template_loader
46 from django.core.cache import cache
47 from django.core.urlresolvers import reverse
48 from django.http import HttpResponse, HttpRequest, HttpResponseRedirect, Http404
49 from django.shortcuts import render_to_response
50 from django.template import RequestContext as Context
51 from django.utils import simplejson
52 from django.utils.translation import ugettext as _
53 from django.views.defaults import page_not_found, server_error
54 from django.views import debug
55 from django.core.cache import cache
56 from django.utils.encoding import smart_str
57
58 from webclient.webclient_gateway import OmeroWebGateway
59
60 from forms import LoginForm, ForgottonPasswordForm, ExperimenterForm, \
61 GroupForm, GroupOwnerForm, MyAccountForm, ChangePassword, \
62 ContainedExperimentersForm, UploadPhotoForm, \
63 EnumerationEntry, EnumerationEntries
64
65 from controller import BaseController
66 from controller.experimenter import BaseExperimenters, BaseExperimenter
67 from controller.group import BaseGroups, BaseGroup
68 from controller.drivespace import BaseDriveSpace, usersData
69 from controller.uploadfile import BaseUploadFile
70 from controller.enums import BaseEnums
71
72 from omeroweb.webclient.views import _session_logout
73 from omeroweb.webadmin.webadmin_utils import _checkVersion, _isServerOn, toBoolean, upgradeCheck, getGuestConnection
74 from omeroweb.webgateway.views import getBlitzConnection
75
76 logger = logging.getLogger('views-admin')
77
78 connectors = {}
79
80 logger.info("INIT '%s'" % os.getpid())
86 def wrapped (request, *args, **kwargs):
87
88 url = request.REQUEST.get('url')
89 if url is None or len(url) == 0:
90 if request.META.get('QUERY_STRING'):
91 url = '%s?%s' % (request.META.get('PATH_INFO'), request.META.get('QUERY_STRING'))
92 else:
93 url = '%s' % (request.META.get('PATH_INFO'))
94
95 conn = None
96 try:
97 conn = getBlitzConnection(request, useragent="OMERO.webadmin")
98 except KeyError:
99 return HttpResponseRedirect(reverse("walogin")+(("?url=%s") % (url)))
100 except Exception, x:
101 logger.error(traceback.format_exc())
102 return HttpResponseRedirect(reverse("walogin")+(("?error=%s&url=%s") % (str(x),url)))
103 if conn is None:
104 return HttpResponseRedirect(reverse("walogin")+(("?url=%s") % (url)))
105
106 if not conn.isAdmin():
107 return page_not_found(request, "404.html")
108 kwargs["conn"] = conn
109 return f(request, *args, **kwargs)
110
111 return wrapped
112
114 def wrapped (request, *args, **kwargs):
115
116 url = request.REQUEST.get('url')
117 if url is None or len(url) == 0:
118 if request.META.get('QUERY_STRING'):
119 url = '%s?%s' % (request.META.get('PATH_INFO'), request.META.get('QUERY_STRING'))
120 else:
121 url = '%s' % (request.META.get('PATH_INFO'))
122
123 conn = None
124 try:
125 conn = getBlitzConnection(request, useragent="OMERO.webadmin")
126 except KeyError:
127 return HttpResponseRedirect(reverse("walogin")+(("?url=%s") % (url)))
128 except Exception, x:
129 logger.error(traceback.format_exc())
130 return HttpResponseRedirect(reverse("walogin")+(("?error=%s&url=%s") % (str(x),url)))
131 if conn is None:
132 return HttpResponseRedirect(reverse("walogin")+(("?url=%s") % (url)))
133
134 if kwargs.get('gid') is not None:
135 if not conn.isOwner(kwargs.get('gid')):
136 return page_not_found(request, "404.html")
137 else:
138 if not conn.isOwner():
139 return page_not_found(request, "404.html")
140 kwargs["conn"] = conn
141 return f(request, *args, **kwargs)
142
143 return wrapped
144
146 def wrapped (request, *args, **kwargs):
147
148 url = request.REQUEST.get('url')
149 if url is None or len(url) == 0:
150 if request.META.get('QUERY_STRING'):
151 url = '%s?%s' % (request.META.get('PATH_INFO'), request.META.get('QUERY_STRING'))
152 else:
153 url = '%s' % (request.META.get('PATH_INFO'))
154
155 conn = None
156 try:
157 conn = getBlitzConnection(request, useragent="OMERO.webadmin")
158 except KeyError:
159 return HttpResponseRedirect(reverse("walogin")+(("?url=%s") % (url)))
160 except Exception, x:
161 logger.error(traceback.format_exc())
162 return HttpResponseRedirect(reverse("walogin")+(("?error=%s&url=%s") % (str(x),url)))
163 if conn is None:
164 return HttpResponseRedirect(reverse("walogin")+(("?url=%s") % (url)))
165
166 kwargs["conn"] = conn
167 kwargs["url"] = url
168 return f(request, *args, **kwargs)
169
170 return wrapped
171
173 def wrapped (request, *args, **kwargs):
174 kwargs["firsttime"] = kwargs["conn"].isAnythingCreated()
175 if kwargs['firsttime']:
176 kwargs['msg'] = _('User must be in a group - You have not created any groups yet. Click <a href="%s">here</a> to create a group') % (reverse(viewname="wamanagegroupid", args=["new"]))
177
178 return f(request, *args, **kwargs)
179
180 return wrapped
181
223
225 request.session.modified = True
226
227 if request.method == 'POST' and request.REQUEST.get('server'):
228 blitz = settings.SERVER_LIST.get(pk=request.REQUEST.get('server'))
229 request.session['server'] = blitz.id
230 request.session['host'] = blitz.host
231 request.session['port'] = blitz.port
232 request.session['username'] = smart_str(request.REQUEST.get('username'))
233 request.session['password'] = smart_str(request.REQUEST.get('password'))
234 request.session['ssl'] = (True, False)[request.REQUEST.get('ssl') is None]
235
236 error = request.REQUEST.get('error')
237
238 conn = None
239
240 if _checkVersion(request.session.get('host'), request.session.get('port')):
241 try:
242 conn = getBlitzConnection(request, useragent="OMERO.webadmin")
243 except Exception, x:
244 logger.error(traceback.format_exc())
245 error = str(x)
246
247 if conn is not None:
248 upgradeCheck()
249 request.session['version'] = conn.getServerVersion()
250 return HttpResponseRedirect(reverse("waindex"))
251 else:
252 if request.method == 'POST' and request.REQUEST.get('server'):
253 if not _isServerOn(request.session.get('host'), request.session.get('port')):
254 error = "Server is not responding, please contact administrator."
255 elif not _checkVersion(request.session.get('host'), request.session.get('port')):
256 error = "Client version does not match server, please contact administrator."
257 else:
258 error = "Connection not available, please check your user name and password."
259
260 request.session['server'] = request.REQUEST.get('server')
261
262 template = "webadmin/login.html"
263 if request.method == 'POST':
264 form = LoginForm(data=request.REQUEST.copy())
265 else:
266 blitz = settings.SERVER_LIST.get(pk=request.session.get('server'))
267 if blitz is not None:
268 initial = {'server': unicode(blitz.id)}
269 try:
270 if request.session.get('username'):
271 initial['username'] = unicode(request.session.get('username'))
272 form = LoginForm(data=initial)
273 else:
274 form = LoginForm(initial=initial)
275 except:
276 form = LoginForm(initial=initial)
277 else:
278 form = LoginForm()
279 context = {'version': omero_version, 'error':error, 'form':form}
280 t = template_loader.get_template(template)
281 c = Context(request, context)
282 rsp = t.render(c)
283 return HttpResponse(rsp)
284
285 @isUserConnected
286 @isAnythingCreated
287 -def index(request, **kwargs):
288 conn = None
289 try:
290 conn = kwargs["conn"]
291 except:
292 logger.error(traceback.format_exc())
293
294 if conn.isAdmin():
295 if kwargs["firsttime"]:
296 return HttpResponseRedirect(reverse("wagroups"))
297 else:
298 return HttpResponseRedirect(reverse("waexperimenters"))
299 else:
300 return HttpResponseRedirect(reverse("wamyaccount"))
301
302
303 @isUserConnected
304 -def logout(request, **kwargs):
308
309 @isAdminConnected
310 @isAnythingCreated
311 -def experimenters(request, **kwargs):
334
335 @isAdminConnected
336 @isAnythingCreated
337 -def manage_experimenter(request, action, eid=None, **kwargs):
338 experimenters = True
339 template = "webadmin/experimenter_form.html"
340
341 conn = None
342 try:
343 conn = kwargs["conn"]
344 except:
345 logger.error(traceback.format_exc())
346
347 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'experimenters':experimenters}
348 if kwargs['firsttime']:
349 info['message'] = kwargs["msg"]
350
351 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')}
352
353 controller = BaseExperimenter(conn, eid)
354
355 if action == 'new':
356 form = ExperimenterForm(initial={'with_password':True, 'active':True, 'available':controller.otherGroupsInitialList()})
357 context = {'info':info, 'eventContext':eventContext, 'form':form}
358 elif action == 'create':
359 if request.method != 'POST':
360 return HttpResponseRedirect(reverse(viewname="wamanageexperimenterid", args=["new"]))
361 else:
362 name_check = conn.checkOmeName(request.REQUEST.get('omename'))
363 email_check = conn.checkEmail(request.REQUEST.get('email'))
364
365 initial={'with_password':True}
366
367 exclude = list()
368 if len(request.REQUEST.getlist('other_groups')) > 0:
369 others = controller.getSelectedGroups(request.REQUEST.getlist('other_groups'))
370 initial['others'] = others
371 initial['default'] = [(g.id, g.name) for g in others]
372 exclude.extend([g.id for g in others])
373
374 available = controller.otherGroupsInitialList(exclude)
375 initial['available'] = available
376 form = ExperimenterForm(initial=initial, data=request.REQUEST.copy(), name_check=name_check, email_check=email_check)
377 if form.is_valid():
378 logger.debug("Create experimenter form:" + str(form.cleaned_data))
379 omename = form.cleaned_data['omename']
380 firstName = form.cleaned_data['first_name']
381 middleName = form.cleaned_data['middle_name']
382 lastName = form.cleaned_data['last_name']
383 email = form.cleaned_data['email']
384 institution = form.cleaned_data['institution']
385 admin = toBoolean(form.cleaned_data['administrator'])
386 active = toBoolean(form.cleaned_data['active'])
387 defaultGroup = form.cleaned_data['default_group']
388 otherGroups = form.cleaned_data['other_groups']
389 password = form.cleaned_data['password']
390 controller.createExperimenter(omename, firstName, lastName, email, admin, active, defaultGroup, otherGroups, password, middleName, institution)
391 return HttpResponseRedirect(reverse("waexperimenters"))
392 context = {'info':info, 'eventContext':eventContext, 'form':form}
393 elif action == 'edit' :
394 initial={'omename': controller.experimenter.omeName, 'first_name':controller.experimenter.firstName,
395 'middle_name':controller.experimenter.middleName, 'last_name':controller.experimenter.lastName,
396 'email':controller.experimenter.email, 'institution':controller.experimenter.institution,
397 'administrator': controller.experimenter.isAdmin(), 'active': controller.experimenter.isActive(),
398 'default_group': controller.defaultGroup, 'other_groups':controller.otherGroups}
399
400 initial['default'] = controller.default
401 others = controller.others
402 initial['others'] = others
403 if len(others) > 0:
404 exclude = [g.id.val for g in others]
405 else:
406 exclude = [controller.defaultGroup]
407 available = controller.otherGroupsInitialList(exclude)
408 initial['available'] = available
409 form = ExperimenterForm(initial=initial)
410
411 context = {'info':info, 'eventContext':eventContext, 'form':form, 'eid': eid, 'ldapAuth': controller.ldapAuth}
412 elif action == 'save':
413 if request.method != 'POST':
414 return HttpResponseRedirect(reverse(viewname="wamanageexperimenterid", args=["edit", controller.experimenter.id]))
415 else:
416 name_check = conn.checkOmeName(request.REQUEST.get('omename'), controller.experimenter.omeName)
417 email_check = conn.checkEmail(request.REQUEST.get('email'), controller.experimenter.email)
418 initial={'active':True}
419 exclude = list()
420
421 if len(request.REQUEST.getlist('other_groups')) > 0:
422 others = controller.getSelectedGroups(request.REQUEST.getlist('other_groups'))
423 initial['others'] = others
424 initial['default'] = [(g.id, g.name) for g in others]
425 exclude.extend([g.id for g in others])
426
427 available = controller.otherGroupsInitialList(exclude)
428 initial['available'] = available
429
430 form = ExperimenterForm(initial=initial, data=request.POST.copy(), name_check=name_check, email_check=email_check)
431
432 if form.is_valid():
433 logger.debug("Update experimenter form:" + str(form.cleaned_data))
434 omename = form.cleaned_data['omename']
435 firstName = form.cleaned_data['first_name']
436 middleName = form.cleaned_data['middle_name']
437 lastName = form.cleaned_data['last_name']
438 email = form.cleaned_data['email']
439 institution = form.cleaned_data['institution']
440 admin = toBoolean(form.cleaned_data['administrator'])
441 active = toBoolean(form.cleaned_data['active'])
442 defaultGroup = form.cleaned_data['default_group']
443 otherGroups = form.cleaned_data['other_groups']
444 controller.updateExperimenter(omename, firstName, lastName, email, admin, active, defaultGroup, otherGroups, middleName, institution)
445 return HttpResponseRedirect(reverse("waexperimenters"))
446 context = {'info':info, 'eventContext':eventContext, 'form':form, 'eid': eid, 'ldapAuth': controller.ldapAuth}
447 elif action == "delete":
448 controller.deleteExperimenter()
449 return HttpResponseRedirect(reverse("waexperimenters"))
450 else:
451 return HttpResponseRedirect(reverse("waexperimenters"))
452
453 t = template_loader.get_template(template)
454 c = Context(request, context)
455 rsp = t.render(c)
456 return HttpResponse(rsp)
457
460 experimenters = True
461 template = "webadmin/password.html"
462
463 conn = None
464 try:
465 conn = kwargs["conn"]
466 except:
467 logger.error(traceback.format_exc())
468
469 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'experimenters':experimenters}
470
471 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')}
472
473 error = None
474 if request.method != 'POST':
475 password_form = ChangePassword()
476 else:
477 password_form = ChangePassword(data=request.POST.copy())
478 if password_form.is_valid():
479 old_password = password_form.cleaned_data['old_password']
480 password = password_form.cleaned_data['password']
481 if conn.isAdmin():
482 exp = conn.getObject("Experimenter", eid)
483 try:
484 conn.changeUserPassword(exp.omeName, password, old_password)
485 except Exception, x:
486 error = x.message
487 else:
488 request.session['password'] = password
489 return HttpResponseRedirect(reverse(viewname="wamanageexperimenterid", args=["edit", eid]))
490 else:
491 try:
492 conn.changeMyPassword(password, old_password)
493 except Exception, x:
494 error = x.message
495 else:
496 request.session['password'] = password
497 return HttpResponseRedirect(reverse("wamyaccount"))
498
499 context = {'info':info, 'error':error, 'eventContext':eventContext, 'password_form':password_form, 'eid': eid}
500 t = template_loader.get_template(template)
501 c = Context(request, context)
502 rsp = t.render(c)
503 return HttpResponse(rsp)
504
505 @isAdminConnected
506 @isAnythingCreated
507 -def groups(request, **kwargs):
508 groups = True
509 template = "webadmin/groups.html"
510
511 conn = None
512 try:
513 conn = kwargs["conn"]
514 except:
515 logger.error(traceback.format_exc())
516
517 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'groups':groups}
518 if kwargs['firsttime']:
519 info['message'] = kwargs["msg"]
520
521 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')}
522 controller = BaseGroups(conn)
523
524 context = {'info':info, 'eventContext':eventContext, 'controller':controller}
525
526 t = template_loader.get_template(template)
527 c = Context(request, context)
528 rsp = t.render(c)
529 return HttpResponse(rsp)
530
531 @isAdminConnected
532 @isAnythingCreated
533 -def manage_group(request, action, gid=None, **kwargs):
534 groups = True
535 template = "webadmin/group_form.html"
536
537 conn = None
538 try:
539 conn = kwargs["conn"]
540 except:
541 logger.error(traceback.format_exc())
542
543 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'groups':groups}
544 if kwargs['firsttime']:
545 info['message'] = kwargs["msg"]
546
547 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')}
548
549 controller = BaseGroup(conn, gid)
550
551 if action == 'new':
552 form = GroupForm(initial={'experimenters':controller.experimenters, 'permissions': 0})
553 context = {'info':info, 'eventContext':eventContext, 'form':form}
554 elif action == 'create':
555 if request.method != 'POST':
556 return HttpResponseRedirect(reverse(viewname="wamanagegroupid", args=["new"]))
557 else:
558 name_check = conn.checkGroupName(request.REQUEST.get('name'))
559 form = GroupForm(initial={'experimenters':controller.experimenters}, data=request.POST.copy(), name_check=name_check)
560 if form.is_valid():
561 logger.debug("Create group form:" + str(form.cleaned_data))
562 name = form.cleaned_data['name']
563 description = form.cleaned_data['description']
564 owners = form.cleaned_data['owners']
565 permissions = form.cleaned_data['permissions']
566 readonly = toBoolean(form.cleaned_data['readonly'])
567 controller.createGroup(name, owners, permissions, readonly, description)
568 return HttpResponseRedirect(reverse("wagroups"))
569 context = {'info':info, 'eventContext':eventContext, 'form':form}
570 elif action == 'edit':
571 permissions = controller.getActualPermissions()
572 form = GroupForm(initial={'name': controller.group.name, 'description':controller.group.description,
573 'permissions': permissions, 'readonly': controller.isReadOnly(),
574 'owners': controller.owners, 'experimenters':controller.experimenters})
575 context = {'info':info, 'eventContext':eventContext, 'form':form, 'gid': gid, 'permissions': permissions}
576 elif action == 'save':
577 if request.method != 'POST':
578 return HttpResponseRedirect(reverse(viewname="wamanagegroupid", args=["edit", controller.group.id]))
579 else:
580 name_check = conn.checkGroupName(request.REQUEST.get('name'), controller.group.name)
581 form = GroupForm(initial={'experimenters':controller.experimenters}, data=request.POST.copy(), name_check=name_check)
582 if form.is_valid():
583 logger.debug("Update group form:" + str(form.cleaned_data))
584 name = form.cleaned_data['name']
585 description = form.cleaned_data['description']
586 owners = form.cleaned_data['owners']
587 permissions = form.cleaned_data['permissions']
588 readonly = toBoolean(form.cleaned_data['readonly'])
589 controller.updateGroup(name, owners, permissions, readonly, description)
590 return HttpResponseRedirect(reverse("wagroups"))
591 context = {'info':info, 'eventContext':eventContext, 'form':form, 'gid': gid}
592 elif action == "update":
593 template = "webadmin/group_edit.html"
594 controller.containedExperimenters()
595 form = ContainedExperimentersForm(initial={'members':controller.members, 'available':controller.available})
596 if not form.is_valid():
597
598 available = request.POST.getlist('available')
599
600 members = request.POST.getlist('members')
601 controller.setMembersOfGroup(available, members)
602 return HttpResponseRedirect(reverse("wagroups"))
603 context = {'info':info, 'eventContext':eventContext, 'form':form, 'controller': controller}
604 elif action == "members":
605 template = "webadmin/group_edit.html"
606 controller.containedExperimenters()
607 form = ContainedExperimentersForm(initial={'members':controller.members, 'available':controller.available})
608 context = {'info':info, 'eventContext':eventContext, 'form':form, 'controller': controller}
609 else:
610 return HttpResponseRedirect(reverse("wagroups"))
611
612 t = template_loader.get_template(template)
613 c = Context(request, context)
614 rsp = t.render(c)
615 return HttpResponse(rsp)
616
619 myaccount = True
620 template = "webadmin/group_form_owner.html"
621
622 conn = None
623 try:
624 conn = kwargs["conn"]
625 except:
626 logger.error(traceback.format_exc())
627
628 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'myaccount':myaccount}
629 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')}
630
631 controller = BaseGroup(conn, gid)
632
633 if action == 'edit':
634 permissions = controller.getActualPermissions()
635 form = GroupOwnerForm(initial={'permissions': permissions, 'readonly': controller.isReadOnly()})
636 context = {'info':info, 'eventContext':eventContext, 'form':form, 'gid': gid, 'permissions': permissions, 'group':controller.group, 'owners':controller.getOwnersNames()}
637 elif action == "save":
638 if request.method != 'POST':
639 return HttpResponseRedirect(reverse(viewname="wamyaccount", args=["edit", controller.group.id]))
640 else:
641 form = GroupOwnerForm(data=request.POST.copy())
642 if form.is_valid():
643 permissions = form.cleaned_data['permissions']
644 readonly = toBoolean(form.cleaned_data['readonly'])
645 controller.updatePermissions(permissions, readonly)
646 return HttpResponseRedirect(reverse("wamyaccount"))
647 context = {'info':info, 'eventContext':eventContext, 'form':form, 'gid': gid}
648 else:
649 return HttpResponseRedirect(reverse("wamyaccount"))
650
651 t = template_loader.get_template(template)
652 c = Context(request, context)
653 rsp = t.render(c)
654 return HttpResponse(rsp)
655
656 @isAdminConnected
657 -def ldap(request, **kwargs):
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750 @isAdminConnected
751 -def imports(request, **kwargs):
752 return HttpResponseRedirect(reverse("waindex"))
753
754 @isUserConnected
755 -def my_account(request, action=None, **kwargs):
756 myaccount = True
757 template = "webadmin/myaccount.html"
758
759 conn = None
760 try:
761 conn = kwargs["conn"]
762 except:
763 logger.error(traceback.format_exc())
764
765 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'myaccount':myaccount}
766 eventContext = {'userId':conn.getEventContext().userId,'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')}
767
768 myaccount = BaseExperimenter(conn)
769 myaccount.getMyDetails()
770 myaccount.getOwnedGroups()
771
772 edit_mode = False
773 photo_size = None
774 form = None
775 form_file = UploadPhotoForm()
776
777 if action == "save":
778 if request.method != 'POST':
779 return HttpResponseRedirect(reverse(viewname="wamyaccount", args=["edit"]))
780 else:
781 email_check = conn.checkEmail(request.REQUEST.get('email'), myaccount.experimenter.email)
782 form = MyAccountForm(data=request.POST.copy(), initial={'groups':myaccount.otherGroups}, email_check=email_check)
783 if form.is_valid():
784 firstName = form.cleaned_data['first_name']
785 middleName = form.cleaned_data['middle_name']
786 lastName = form.cleaned_data['last_name']
787 email = form.cleaned_data['email']
788 institution = form.cleaned_data['institution']
789 defaultGroup = form.cleaned_data['default_group']
790 myaccount.updateMyAccount(firstName, lastName, email, defaultGroup, middleName, institution)
791 return HttpResponseRedirect(reverse("wamyaccount"))
792
793 elif action == "upload":
794 if request.method == 'POST':
795 form_file = UploadPhotoForm(request.POST, request.FILES)
796 if form_file.is_valid():
797 controller = BaseUploadFile(conn)
798 controller.attach_photo(request.FILES['photo'])
799 return HttpResponseRedirect(reverse("wamyaccount"))
800 elif action == "crop":
801 x1 = long(request.REQUEST.get('x1'))
802 x2 = long(request.REQUEST.get('x2'))
803 y1 = long(request.REQUEST.get('y1'))
804 y2 = long(request.REQUEST.get('y2'))
805 box = (x1,y1,x2,y2)
806 conn.cropExperimenterPhoto(box)
807 return HttpResponseRedirect(reverse("wamyaccount"))
808 elif action == "editphoto":
809 form = MyAccountForm(initial={'omename': myaccount.experimenter.omeName, 'first_name':myaccount.experimenter.firstName,
810 'middle_name':myaccount.experimenter.middleName, 'last_name':myaccount.experimenter.lastName,
811 'email':myaccount.experimenter.email, 'institution':myaccount.experimenter.institution,
812 'default_group':myaccount.defaultGroup, 'groups':myaccount.otherGroups})
813
814 photo_size = conn.getExperimenterPhotoSize()
815 if photo_size is not None:
816 edit_mode = True
817
818 photo_size = conn.getExperimenterPhotoSize()
819 form = MyAccountForm(initial={'omename': myaccount.experimenter.omeName, 'first_name':myaccount.experimenter.firstName,
820 'middle_name':myaccount.experimenter.middleName, 'last_name':myaccount.experimenter.lastName,
821 'email':myaccount.experimenter.email, 'institution':myaccount.experimenter.institution,
822 'default_group':myaccount.defaultGroup, 'groups':myaccount.otherGroups})
823
824 context = {'info':info, 'eventContext':eventContext, 'form':form, 'form_file':form_file, 'ldapAuth': myaccount.ldapAuth, 'edit_mode':edit_mode, 'photo_size':photo_size, 'myaccount':myaccount}
825 t = template_loader.get_template(template)
826 c = Context(request,context)
827 return HttpResponse(t.render(c))
828
829 @isUserConnected
830 -def myphoto(request, **kwargs):
838
839 @isUserConnected
840 -def drivespace(request, **kwargs):
860
864 conn = None
865 try:
866 conn = kwargs["conn"]
867 except:
868 return handlerInternalError("Connection is not available. Please contact your administrator.")
869
870 offset = request.REQUEST.get('offset', 0)
871 rv = usersData(conn, offset)
872 return HttpResponse(simplejson.dumps(rv),mimetype='application/json')
873