Package omeroweb :: Package webadmin :: Module views
[hide private]
[frames] | no frames]

Source Code for Module omeroweb.webadmin.views

  1  #!/usr/bin/env python 
  2  #  
  3  #  
  4  #  
  5  # Copyright (c) 2008 University of Dundee.  
  6  #  
  7  # This program is free software: you can redistribute it and/or modify 
  8  # it under the terms of the GNU Affero General Public License as 
  9  # published by the Free Software Foundation, either version 3 of the 
 10  # License, or (at your option) any later version. 
 11  #  
 12  # This program is distributed in the hope that it will be useful, 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 15  # GNU Affero General Public License for more details. 
 16  #  
 17  # You should have received a copy of the GNU Affero General Public License 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 19  #  
 20  # Author: Aleksandra Tarkowska <A(dot)Tarkowska(at)dundee(dot)ac(dot)uk>, 2008. 
 21  #  
 22  # Version: 1.0 
 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()) 
81 82 ################################################################################ 83 # decorators 84 85 -def isAdminConnected (f):
86 def wrapped (request, *args, **kwargs): 87 #this check the connection exist, if not it will redirect to login page 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
113 -def isOwnerConnected (f):
114 def wrapped (request, *args, **kwargs): 115 #this check the connection exist, if not it will redirect to login page 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
145 -def isUserConnected (f):
146 def wrapped (request, *args, **kwargs): 147 #this check connection exist, if not it will redirect to login page 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
172 -def isAnythingCreated(f):
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 #return HttpResponseRedirect(reverse(viewname="wamanagegroupid", args=["new"])) 178 return f(request, *args, **kwargs)
179 180 return wrapped 181
182 ################################################################################ 183 # views controll 184 185 -def forgotten_password(request, **kwargs):
186 request.session.modified = True 187 188 template = "webadmin/forgotten_password.html" 189 190 conn = None 191 error = None 192 blitz = None 193 194 if request.method == 'POST': 195 form = ForgottonPasswordForm(data=request.REQUEST.copy()) 196 if form.is_valid(): 197 blitz = settings.SERVER_LIST.get(pk=request.REQUEST.get('server')) 198 try: 199 conn = getGuestConnection(blitz.host, blitz.port) 200 if not conn.isForgottenPasswordSet(): 201 error = "This server cannot reset password. Please contact your administrator." 202 conn = None 203 except Exception, x: 204 logger.error(traceback.format_exc()) 205 error = "Internal server error, please contact administrator." 206 207 if conn is not None: 208 try: 209 conn.reportForgottenPassword(smart_str(request.REQUEST.get('username')), smart_str(request.REQUEST.get('email'))) 210 error = "Password was reseted. Check you mailbox." 211 form = None 212 except Exception, x: 213 logger.error(traceback.format_exc()) 214 error = "Internal server error, please contact administrator." 215 else: 216 form = ForgottonPasswordForm() 217 218 context = {'error':error, 'form':form} 219 t = template_loader.get_template(template) 220 c = Context(request, context) 221 rsp = t.render(c) 222 return HttpResponse(rsp)
223
224 -def login(request):
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 # TODO: version check should be done on the low level, see #5983 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):
305 _session_logout(request, request.session.get('server')) 306 #request.session.set_expiry(1) 307 return HttpResponseRedirect(reverse("waindex"))
308
309 @isAdminConnected 310 @isAnythingCreated 311 -def experimenters(request, **kwargs):
312 experimenters = True 313 template = "webadmin/experimenters.html" 314 315 conn = None 316 try: 317 conn = kwargs["conn"] 318 except: 319 logger.error(traceback.format_exc()) 320 321 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'experimenters':experimenters} 322 if kwargs['firsttime']: 323 info['message'] = kwargs["msg"] 324 325 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')} 326 controller = BaseExperimenters(conn) 327 328 context = {'info':info, 'eventContext':eventContext, 'controller':controller} 329 330 t = template_loader.get_template(template) 331 c = Context(request, context) 332 rsp = t.render(c) 333 return HttpResponse(rsp)
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
458 @isUserConnected 459 -def manage_password(request, eid, **kwargs):
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 #available = form.cleaned_data['available'] 598 available = request.POST.getlist('available') 599 #members = form.cleaned_data['members'] 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
617 @isOwnerConnected 618 -def manage_group_owner(request, action, gid, **kwargs):
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):
658 scripts = True 659 template = "webadmin/ldap_search.html" 660 661 conn = None 662 try: 663 conn = kwargs["conn"] 664 except: 665 logger.error(traceback.format_exc()) 666 667 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'scripts':scripts} 668 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')} 669 controller = None 670 671 context = {'info':info, 'eventContext':eventContext, 'controller':controller} 672 673 t = template_loader.get_template(template) 674 c = Context(request, context) 675 rsp = t.render(c) 676 return HttpResponse(rsp)
677
678 #@isAdminConnected 679 #def enums(request, **kwargs): 680 # enums = True 681 # template = "webadmin/enums.html" 682 # error = request.REQUEST.get('error') and request.REQUEST.get('error').replace("_", " ") or None 683 # 684 # conn = None 685 # try: 686 # conn = kwargs["conn"] 687 # except: 688 # logger.error(traceback.format_exc()) 689 # 690 # info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'enums':enums, 'error':error} 691 # eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')} 692 # 693 # controller = BaseEnums(conn) 694 # 695 # context = {'info':info, 'eventContext':eventContext, 'controller':controller} 696 # t = template_loader.get_template(template) 697 # c = Context(request, context) 698 # rsp = t.render(c) 699 # return HttpResponse(rsp) 700 701 #@isAdminConnected 702 #def manage_enum(request, action, klass, eid=None, **kwargs): 703 # enums = True 704 # template = "webadmin/enum_form.html" 705 # 706 # conn = None 707 # try: 708 # conn = kwargs["conn"] 709 # except: 710 # logger.error(traceback.format_exc()) 711 # 712 # info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'enums':enums} 713 # eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')} 714 # 715 # controller = BaseEnums(conn, klass) 716 # if action == "save": 717 # form = EnumerationEntries(entries=controller.entries, data=request.POST.copy()) 718 # if form.is_valid(): 719 # controller.saveEntries(form.data) 720 # return HttpResponseRedirect(reverse(viewname="wamanageenum", args=["edit", klass])) 721 # elif action == "delete" and eid is not None: 722 # controller.deleteEntry(eid) 723 # return HttpResponseRedirect(reverse(viewname="wamanageenum", args=["edit", klass])) 724 # elif action == "new": 725 # if request.method == "POST": 726 # form = EnumerationEntry(data=request.POST.copy()) 727 # if form.is_valid(): 728 # new_entry = form.cleaned_data['new_entry] 729 # controller.saveEntry(new_entry) 730 # return HttpResponseRedirect(reverse(viewname="wamanageenum", args=["edit", klass])) 731 # else: 732 # form = EnumerationEntry() 733 # elif action == "reset": 734 # try: 735 # controller.resetEnumerations() 736 # except: 737 # logger.error(traceback.format_exc()) 738 # return HttpResponseRedirect(reverse(viewname="waenums")+("?error=Enumeration_%s_cannot_be_reset" % (klass))) 739 # else: 740 # return HttpResponseRedirect(reverse("waenums")) 741 # else: 742 # form = EnumerationEntries(entries=controller.entries, initial={'entries':True}) 743 # 744 # context = {'info':info, 'eventContext':eventContext, 'controller':controller, 'action':action, 'form':form} 745 # t = template_loader.get_template(template) 746 # c = Context(request, context) 747 # rsp = t.render(c) 748 # return HttpResponse(rsp) 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):
831 conn = None 832 try: 833 conn = kwargs["conn"] 834 except: 835 logger.error(traceback.format_exc()) 836 photo = conn.getExperimenterPhoto() 837 return HttpResponse(photo, mimetype='image/jpeg')
838
839 @isUserConnected 840 -def drivespace(request, **kwargs):
841 drivespace = True 842 template = "webadmin/drivespace.html" 843 844 conn = None 845 try: 846 conn = kwargs["conn"] 847 except: 848 logger.error(traceback.format_exc()) 849 850 info = {'today': _("Today is %(tday)s") % {'tday': datetime.date.today()}, 'drivespace':drivespace} 851 eventContext = {'userName':conn.getEventContext().userName, 'isAdmin':conn.getEventContext().isAdmin, 'version': request.session.get('version')} 852 controller = BaseDriveSpace(conn) 853 854 context = {'info':info, 'eventContext':eventContext, 'driveSpace': {'free':controller.freeSpace, 'used':controller.usedSpace }} 855 856 t = template_loader.get_template(template) 857 c = Context(request, context) 858 rsp = t.render(c) 859 return HttpResponse(rsp)
860
861 862 @isUserConnected 863 -def load_drivespace(request, **kwargs):
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