def secr_add_group(request): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied if request.method == 'POST': form = AddGroupForm(request.POST) if form.is_valid(): fd = form.cleaned_data nm = fd['name'] g = Es.Group({ 'types': ['group', 'tag'], 'names': [nm], 'use_mailman_list': fd['true_group'], 'has_unix_group': fd['true_group'], 'humanNames': [{ 'name': nm, 'human': fd['humanName'], 'genitive_prefix': fd['genitive_prefix'] }], 'description': fd['description'], 'tags': [_id(fd['parent'])] }) logging.info("Added group %s" % nm) g.save() Es.notify_informacie('addgroup', request.user, entity=g._id) giedo.sync_async(request) messages.info(request, 'Groep toegevoegd.') return HttpResponseRedirect(reverse('group-by-name', args=(nm, ))) else: form = AddGroupForm() return render(request, 'leden/secr_add_group.html', {'form': form})
def secr_add_group(request): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied if request.method == 'POST': form = AddGroupForm(request.POST) if form.is_valid(): fd = form.cleaned_data nm = fd['name'] g = Es.Group({ 'types': ['group', 'tag'], 'names': [nm], 'use_mailman_list': fd['true_group'], 'has_unix_group': fd['true_group'], 'humanNames': [{'name': nm, 'human': fd['humanName'], 'genitive_prefix': fd['genitive_prefix']}], 'description': fd['description'], 'tags': [_id(fd['parent'])]}) logging.info("Added group %s" % nm) g.save() Es.notify_informacie("De groep %s is opgericht." % ( unicode(g.humanName))) giedo.sync_async(request) request.user.push_message("Groep toegevoegd.") return HttpResponseRedirect(reverse('group-by-name', args=(nm,))) else: form = AddGroupForm() return render_to_response('leden/secr_add_group.html', {'form': form}, context_instance=RequestContext(request))
def relation_begin(request): # TODO We should use Django forms, or better: use sweet Ajax d = {} for t in ('who', 'with', 'how'): if t not in request.POST: raise ValueError, "Missing attr %s" % t if t == 'how' and (not request.POST[t] or request.POST[t] == 'null'): d[t] = None else: d[t] = _id(request.POST[t]) if not Es.user_may_begin_relation(request.user, d['who'], d['with'], d['how']): raise PermissionDenied # Check whether such a relation already exists dt = now() ok = False try: next(Es.query_relations(who=d['who'], _with=d['with'], how=d['how'], _from=dt, until=DT_MAX)) except StopIteration: ok = True if not ok: raise ValueError, "This relation already exists" # Add the relation! relation_id = Es.add_relation(d['who'], d['with'], d['how'], dt, DT_MAX) # Notify informacie # TODO (rik) leave out 'als lid' Es.notify_informacie('relation_begin', request.user, relation=relation_id) giedo.sync_async(request) return redirect_to_referer(request)
def secr_add_group(request): if "secretariaat" not in request.user.cached_groups_names: raise PermissionDenied if request.method == "POST": form = AddGroupForm(request.POST) if form.is_valid(): fd = form.cleaned_data nm = fd["name"] g = Es.Group( { "types": ["group", "tag"], "names": [nm], "use_mailman_list": fd["true_group"], "has_unix_group": fd["true_group"], "humanNames": [{"name": nm, "human": fd["humanName"], "genitive_prefix": fd["genitive_prefix"]}], "description": fd["description"], "tags": [_id(fd["parent"])], } ) logging.info("Added group %s" % nm) g.save() Es.notify_informacie("addgroup", request.user, entity=g._id) giedo.sync_async(request) messages.info(request, "Groep toegevoegd.") return HttpResponseRedirect(reverse("group-by-name", args=(nm,))) else: form = AddGroupForm() return render_to_response("leden/secr_add_group.html", {"form": form}, context_instance=RequestContext(request))
def untag(request): group, tag = _get_group_and_tag(request) if not Es.user_may_untag(request.user, group, tag): raise PermissionDenied group.untag(tag) Es.notify_informacie('untag', request.user, entity=group, tag=tag) giedo.sync_async(request) return redirect_to_referer(request)
def entity_update_primary(data, request): """ Updates an entity >> (see below) << {ok: true} ( << {ok: false, error: "Permission denied"} ) """ if 'id' not in data or not isinstance(data['id'], basestring): return {'ok': False, 'error': 'Missing argument "id"'} if 'type' not in data or not isinstance(data['type'], basestring): return {'ok': False, 'error': 'Missing argument "type"'} if 'new' not in data: return {'ok': False, 'error': 'Missing argument "new"'} new = data['new'] typ = data['type'] is_secretariaat = 'secretariaat' in request.user.cached_groups_names if not is_secretariaat: return {'ok': False, 'error': 'Permission denied'} if typ in ('email', 'telephone'): if not isinstance(new, basestring): return {'ok': False, 'error': '"new" should be a string'} elif typ == 'address': if not isinstance(new, dict): return {'ok': False, 'error': '"new" should be a dict'} for attr in ('street', 'number', 'zip', 'city'): if attr not in new or not isinstance(new[attr], basestring): return { 'ok': False, 'error': 'Missing argument "new.%s"' % attr } else: return {'ok': False, 'error': 'Unknown update type: "%s"' % typ} e = Es.by_id(data['id']) if e is None: return {'ok': False, 'error': 'Entity not found'} if (typ == 'email'): """ >> {action:"entity_update_primary_email",id:"4e6fcc85e60edf3dc0000270", new:"*****@*****.**"} """ if not email_re.match(new): return {'ok': False, 'error': 'Not valid e-mail address'} e.update_primary_email(new) elif (typ == 'telephone'): """ >> {action:"entity_update_primary_telephone",id:"4e6fcc85e60edf3dc0000270", new:"+31611223344"} """ if not len(new) > 9: return {'ok': False, 'error': 'Phone number is too short'} e.update_primary_telephone(new) elif (typ == 'address'): """ >> {action:"entity_update_address",id:"4e6fcc85e60edf3dc0000270", street:"Street", number:"23", zip:"1234AA", city:"Amsterdam"} """ e.update_address(new['street'], new['number'], new['zip'], new['city']) else: return {'ok': False, 'error': 'Unknown update type: "%s"' % typ} giedo.sync_async(request) return {'ok': True}
def entity_update_primary(data, request): """ Updates an entity >> (see below) << {ok: true} ( << {ok: false, error: "Permission denied"} ) """ if 'id' not in data or not isinstance(data['id'], six.string_types): return {'ok': False, 'error': 'Missing argument "id"'} if 'type' not in data or not isinstance(data['type'], six.string_types): return {'ok': False, 'error': 'Missing argument "type"'} if 'new' not in data: return {'ok': False, 'error': 'Missing argument "new"'} new = data['new'] typ = data['type'] is_secretariaat = 'secretariaat' in request.user.cached_groups_names if not is_secretariaat: return {'ok': False, 'error': 'Permission denied'} if typ in ('email', 'telephone'): if not isinstance(new, six.string_types): return {'ok': False, 'error': '"new" should be a string'} elif typ == 'address': if not isinstance(new, dict): return {'ok': False, 'error': '"new" should be a dict'} for attr in ('street', 'number', 'zip', 'city'): if attr not in new or not isinstance(new[attr], six.string_types): return { 'ok': False, 'error': 'Missing argument "new.%s"' % attr} else: return {'ok': False, 'error': 'Unknown update type: "%s"' % typ} e = Es.by_id(data['id']) if e is None: return {'ok': False, 'error': 'Entity not found'} if (typ == 'email'): """ >> {action:"entity_update_email",id:"4e6fcc85e60edf3dc0000270", new:"*****@*****.**"} """ if not email_re.match(new): return {'ok': False, 'error': 'Not valid e-mail address'} e.update_email(new) elif (typ == 'telephone'): """ >> {action:"entity_update_telephone",id:"4e6fcc85e60edf3dc0000270", new:"+31611223344"} """ if not len(new) > 9: return {'ok': False, 'error': 'Phone number is too short'} e.update_telephone(new) elif (typ == 'address'): """ >> {action:"entity_update_address",id:"4e6fcc85e60edf3dc0000270", street:"Street", number:"23", zip:"1234AA", city:"Amsterdam"} """ e.update_address(new['street'], new['number'], new['zip'], new['city']) else: return {'ok': False, 'error': 'Unknown update type: "%s"' % typ} giedo.sync_async(request) return {'ok': True}
def relation_end(request, _id): rel = Es.relation_by_id(_id) if rel is None: raise Http404 if not Es.user_may_end_relation(request.user, rel): raise PermissionDenied Es.end_relation(_id) # Notify informacie # TODO (rik) leave out 'als lid' Es.notify_informacie('relation_end', request.user, relation=_id) giedo.sync_async(request) return redirect_to_referer(request)
def relation_end(request, _id): rel = Es.relation_by_id(_id) if rel is None: raise Http404 if not Es.relation_is_active(rel): messages.info(request, _("Relatie was al beƫindigd.")) return redirect_to_referer(request) if not Es.user_may_end_relation(request.user, rel): raise PermissionDenied Es.end_relation(_id) # Notify informacie # TODO (rik) leave out 'als lid' Es.notify_informacie('relation_end', request.user, relation=_id) giedo.sync_async(request) return redirect_to_referer(request)
def relation_end(request, _id): rel = Es.relation_by_id(_id) if rel is None: raise Http404 if not Es.user_may_end_relation(request.user, rel): raise PermissionDenied Es.end_relation(_id) # Notify informacie if request.user == rel['who']: Es.notify_informacie('relation_ended', relation=_id) else: # TODO (rik) leave out 'als lid' Es.notify_informacie('relation_end', relation=_id) giedo.sync_async(request) return redirect_to_referer(request)
def relation_end(request, _id): rel = Es.relation_by_id(_id) if rel is None: raise Http404 if not Es.user_may_end_relation(request.user, rel): raise PermissionDenied Es.end_relation(_id) # Notify informacie if request.user == rel['who']: Es.notify_informacie("%s heeft zich uitgeschreven als %s %s" % ( request.user.full_name, rel['how'].humanName if rel['how'] else 'lid', rel['with'].humanName.genitive)) else: # TODO (rik) leave out 'als lid' Es.notify_informacie("%s is geen %s meer %s" % ( rel['who'].humanName, rel['how'].humanName if rel['how'] else 'lid', rel['with'].humanName.genitive)) giedo.sync_async(request) return redirect_to_referer(request)
def relation_begin(request): # TODO We should use Django forms, or better: use sweet Ajax d = {} for t in ('who', 'with', 'how'): if t not in request.POST: raise ValueError("Missing attr %s" % t) if t == 'how' and (not request.POST[t] or request.POST[t] == 'null'): d[t] = None else: d[t] = _id(request.POST[t]) if not Es.user_may_begin_relation(request.user, d['who'], d['with'], d['how']): raise PermissionDenied # Check whether such a relation already exists dt = now() ok = False try: next( Es.query_relations(who=d['who'], _with=d['with'], how=d['how'], _from=dt, until=DT_MAX)) except StopIteration: ok = True if not ok: messages.info(request, _("Deze relatie bestaat al")) return redirect_to_referer(request) # Add the relation! relation_id = Es.add_relation(d['who'], d['with'], d['how'], dt, DT_MAX) # Notify informacie # TODO (rik) leave out 'als lid' Es.notify_informacie('relation_begin', request.user, relation=relation_id) giedo.sync_async(request) return redirect_to_referer(request)
def entity_update_visibility(data, request): """ Updates the visibility of a part of an entity (e.g. email, phone number...) Example: >> {action:"entity_update_visibility", id:"4e6fcc85e60edf3dc0000270", property: "telephone", visible: False} << {ok: true} or: << {ok: false, error: "Permission denied"} """ if 'id' not in data or not isinstance(data['id'], six.string_types): return {'ok': False, 'error': 'Missing argument "id"'} if 'property' not in data or not isinstance(data['property'], six.string_types): return {'ok': False, 'error': 'Missing argument "property"'} if 'visible' not in data or not isinstance(data['visible'], bool): return {'ok': False, 'error': 'Missing argument "visible"'} is_secretariaat = 'secretariaat' in request.user.cached_groups_names is_user = data['id'] == request.user.id if not (is_secretariaat or is_user): return {'ok': False, 'error': 'Permission denied'} property = data['property'] visible = data['visible'] if property not in ['telephone']: return {'ok': False, 'error': 'Unknown property "%s"' % property} e = Es.by_id(data['id']) if e is None: return {'ok': False, 'error': 'Entity not found'} e.update_visibility_preference(property, visible) giedo.sync_async(request) return {'ok': True}
def entity_update_visibility(data, request): """ Updates the visibility of a part of an entity (e.g. email, phone number...) Example: >> {action:"entity_update_visibility",id:"4e6fcc85e60edf3dc0000270", property: "telephone", visible: False} << {ok: true} or: << {ok: false, error: "Permission denied"} """ if 'id' not in data or not isinstance(data['id'], basestring): return {'ok': False, 'error': 'Missing argument "id"'} if 'property' not in data or not isinstance(data['property'], basestring): return {'ok': False, 'error': 'Missing argument "property"'} if 'visible' not in data or not isinstance(data['visible'], bool): return {'ok': False, 'error': 'Missing argument "visible"'} is_secretariaat = 'secretariaat' in request.user.cached_groups_names is_user = data['id'] == request.user.id if not (is_secretariaat or is_user): return {'ok': False, 'error': 'Permission denied'} property = data['property'] visible = data['visible'] if property not in ['telephone']: return {'ok': False, 'error': 'Unknown property "%s"' % property} e = Es.by_id(data['id']) if e is None: return {'ok': False, 'error': 'Entity not found'} e.update_visibility_preference(property, visible) giedo.sync_async(request) return {'ok': True}
def secr_add_user(request): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied if request.method == 'POST': form = AddUserForm(request.POST) if form.is_valid(): fd = form.cleaned_data nm = find_name_for_user(fd['first_name'], fd['last_name']) u = Es.User({ 'types': ['user'], 'names': [nm], 'humanNames': [{'human': fd['first_name']+' '+ fd['last_name']}], 'person': { 'titles': [], 'nick': fd['first_name'], 'given': None, 'family': fd['last_name'], 'gender': fd['sex'], 'dateOfBirth': date_to_dt( fd['dateOfBirth']) }, 'emailAddresses': [ {'email': fd['email'], 'from': DT_MIN, 'until': DT_MAX}], 'addresses': [ {'street': fd['addr_street'], 'number': fd['addr_number'], 'zip': fd['addr_zip'], 'city': fd['addr_city'], 'from': DT_MIN, 'until': DT_MAX}], 'telephones': [ {'number': fd['telephone'], 'from': DT_MIN, 'until': DT_MAX}], 'studies': [ {'institute': _id(fd['study_inst']), 'study': _id(fd['study']), 'from': DT_MIN, 'until': DT_MAX, 'number': fd['study_number']}], 'is_active': True, 'password': None }) logging.info("Added user %s" % nm) u.save() Es.add_relation(u, Es.id_by_name('leden', use_cache=True), _from=date_to_dt(fd['dateJoined'])) for l in fd['addToList']: Es.add_relation(u, Es.id_by_name(l, use_cache=True), _from=now()) Es.notify_informacie("%s is ingeschreven als lid." % ( u.humanName)) giedo.sync_async(request) request.user.push_message("Gebruiker toegevoegd. "+ "Let op: hij heeft geen wachtwoord "+ "en hij moet nog gemaild worden.") return HttpResponseRedirect(reverse('user-by-name', args=(nm,))) else: form = AddUserForm() return render_to_response('leden/secr_add_user.html', {'form': form}, context_instance=RequestContext(request))