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, _("Deze relatie bestaat al") # 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 ik_chsmoel(request): if 'smoel' not in request.FILES: raise ValueError(_("Missende `smoel' in FILES")) if 'id' not in request.POST: raise ValueError(_("Missende `id' in POST")) user = Es.by_id(request.POST['id']) if not user.name: raise ValueError(_("Entiteit heeft geen naam")) if not request.user.may_upload_smoel_for(request.user): raise PermissionDenied original = default_storage.open( os.path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".orig", 'wb+') for chunk in request.FILES['smoel'].chunks(): original.write(chunk) original.seek(0) img = PIL.Image.open(original) if hasattr(img, '_getexif') and img._getexif() is not None: orientation = int(img._getexif().get(274, '1')) # Orientation if orientation == 3: img = img.transpose(PIL.Image.ROTATE_180) elif orientation == 6: img = img.transpose(PIL.Image.ROTATE_270) elif orientation == 8: img = img.transpose(PIL.Image.ROTATE_90) width, height = resize_proportional(img.size[0], img.size[1], settings.SMOELEN_WIDTH * 2, settings.SMOELEN_HEIGHT * 2) img = img.resize((width, height), PIL.Image.ANTIALIAS) img.save( default_storage.open( os.path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".jpg", 'w'), "JPEG") Es.notify_informacie('set_smoel', request.user, entity=user) return redirect_to_referer(request)
def ik_chsmoel(request): if not "smoel" in request.FILES: raise ValueError, _("Missende `smoel' in FILES") if not "id" in request.POST: raise ValueError, _("Missende `id' in POST") user = Es.by_id(request.POST["id"]) if not user.name: raise ValueError, _("Entiteit heeft geen naam") if not request.user.may_upload_smoel_for(request.user): raise PermissionDenied original = default_storage.open(path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".orig", "wb+") for chunk in request.FILES["smoel"].chunks(): original.write(chunk) original.seek(0) img = Image.open(original) if hasattr(img, "_getexif") and img._getexif() is not None: orientation = int(img._getexif().get(274, "1")) # Orientation if orientation == 3: img = img.transpose(Image.ROTATE_180) elif orientation == 6: img = img.transpose(Image.ROTATE_270) elif orientation == 8: img = img.transpose(Image.ROTATE_90) width, height = resize_proportional( img.size[0], img.size[1], settings.SMOELEN_WIDTH * 2, settings.SMOELEN_HEIGHT * 2 ) img = img.resize((width, height), Image.ANTIALIAS) img.save(default_storage.open(path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".jpg", "w"), "JPEG") Es.notify_informacie("set_smoel", request.user, entity=user) return redirect_to_referer(request)
def ik_chsmoel(request): if not 'smoel' in request.FILES: raise ValueError, "Missing `smoel' in FILES" if not 'id' in request.POST: raise ValueError, "Missing `id' in POST" user = Es.by_id(request.POST['id']) if not request.user.may_upload_smoel_for(request.user): raise PermissionDenied original = default_storage.open(path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".orig", 'wb+') for chunk in request.FILES['smoel'].chunks(): original.write(chunk) original.seek(0) img = Image.open(original) if img._getexif() is not None: orientation = int(img._getexif().get(274, '1')) # Orientation if orientation == 3: img = img.transpose(Image.ROTATE_180) elif orientation == 6: img = img.transpose(Image.ROTATE_270) elif orientation == 8: img = img.transpose(Image.ROTATE_90) width, height = resize_proportional(img.size[0], img.size[1], settings.SMOELEN_WIDTH*2, settings.SMOELEN_HEIGHT*2) img = img.resize((width, height), Image.ANTIALIAS) img.save(default_storage.open(path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".jpg", 'w'), "JPEG") Es.notify_informacie('set_smoel', request.user, entity=user) 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 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! Es.add_relation(d['who'], d['with'], d['how'], dt, DT_MAX) giedo.sync() 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) giedo.sync() return redirect_to_referer(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 user_reset_password(request, _id): if not "secretariaat" in request.user.cached_groups_names: raise PermissionDenied u = Es.by_id(_id).as_user() if not u.is_active: raise ValueError, _("Gebruiker is niet geactiveerd") pwd = pseudo_randstr() u.set_password(pwd) giedo.change_password(str(u.name), pwd, pwd) render_then_email("leden/reset-password.mail.txt", u, {"user": u, "password": pwd}) messages.info(request, _("Wachtwoord gereset!")) return redirect_to_referer(request)
def user_reset_password(request, _id): if not 'secretariaat' in request.user.cached_groups_names: raise PermissionDenied u = Es.by_id(_id).as_user() pwd = pseudo_randstr() u.set_password(pwd) giedo.change_password(str(u.name), pwd, pwd) render_then_email("leden/reset-password.mail.txt", u.canonical_full_email, { 'user': u, 'password': pwd}) request.user.push_message("Wachtwoord gereset!") 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 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 note_add(request): if not 'secretariaat' in request.user.cached_groups_names: raise PermissionDenied if 'on' not in request.POST or 'note' not in request.POST: raise ValueError, "missing `on' or `note'" on = Es.by_id(_id(request.POST['on'])) if on is None: raise Http404 on.add_note(request.POST['note'], request.user) render_then_email("leden/new-note.mail.txt", Es.by_name('secretariaat').canonical_full_email, { 'user': request.user, 'note': request.POST['note'], 'on': on}) return redirect_to_referer(request)
def user_reset_password(request, _id): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied u = Es.by_id(_id).as_user() if not u.is_active: raise ValueError(_("Gebruiker is niet geactiveerd")) pwd = pseudo_randstr() u.set_password(pwd) giedo.change_password(str(u.name), pwd, pwd) render_then_email("leden/reset-password.mail.html", u, { 'user': u, 'password': pwd }) messages.info(request, _("Wachtwoord gereset!")) return redirect_to_referer(request)
def note_add(request): if not "secretariaat" in request.user.cached_groups_names: raise PermissionDenied if "on" not in request.POST or "note" not in request.POST: raise ValueError, _("missende `on' of `note'") on = Es.by_id(_id(request.POST["on"])) if on is None: raise Http404 on.add_note(request.POST["note"], request.user) render_then_email( "leden/new-note.mail.txt", Es.by_name("secretariaat").canonical_full_email, {"user": request.user, "note": request.POST["note"], "on": on}, ) return redirect_to_referer(request)
def ik_chsmoel(request): if not 'secretariaat' in request.user.cached_groups_names: raise PermissionDenied if not 'id' in request.POST: raise ValueError, "Missing `id' in POST" if not 'smoel' in request.FILES: raise ValueError, "Missing `smoel' in FILES" user = Es.by_id(request.POST['id']) img = Image.open(request.FILES['smoel']) img = img.resize((settings.SMOELEN_WIDTH, int(float(settings.SMOELEN_WIDTH) / img.size[0] * img.size[1])), Image.ANTIALIAS) img.save(default_storage.open(path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".jpg", 'w'), "JPEG") return redirect_to_referer(request)
def ik_chsmoel(request): if not 'secretariaat' in request.user.cached_groups_names: raise PermissionDenied if not 'id' in request.POST: raise ValueError, "Missing `id' in POST" if not 'smoel' in request.FILES: raise ValueError, "Missing `smoel' in FILES" user = Es.by_id(request.POST['id']) img = Image.open(request.FILES['smoel']) smoelen_width = settings.SMOELEN_WIDTH * 2 img = img.resize((smoelen_width, int(float(smoelen_width) / img.size[0] * img.size[1])), Image.ANTIALIAS) img.save(default_storage.open(path.join(settings.SMOELEN_PHOTOS_PATH, str(user.name)) + ".jpg", 'w'), "JPEG") 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 note_add(request): if not 'secretariaat' in request.user.cached_groups_names: raise PermissionDenied if 'on' not in request.POST or 'note' not in request.POST: raise ValueError, "missing `on' or `note'" on = Es.by_id(_id(request.POST['on'])) if on is None: raise Http404 on.add_note(request.POST['note'], request.user) email = EmailMessage( "Nieuwe notitie", "Door %s is de volgende notitie geplaatst op %s:\r\n\r\n%s" % ( request.user.full_name, unicode(on.humanName), request.POST['note']), 'Karpe Noktem\'s ledenadministratie <*****@*****.**>', [Es.by_name('secretariaat').canonical_email]).send() return redirect_to_referer(request)
def note_add(request): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied if 'on' not in request.POST or 'note' not in request.POST: raise ValueError(_("missende `on' of `note'")) on = Es.by_id(_id(request.POST['on'])) if on is None: raise Http404 note = on.add_note(request.POST['note'], request.user) render_then_email("leden/new-note.mail.html", Es.by_name('secretariaat').canonical_full_email, { 'user': request.user, 'note': request.POST['note'], 'on': on}, headers={ 'In-Reply-To': note.messageId, 'References': note.messageId}) return redirect_to_referer(request)
def _user_detail(request, user): ctx = _entity_detail(request, user) ctx["photosUrl"] = reverse("fotos", kwargs={"path": ""}) + "?q=tag:" + str(user.name) ctx["addStudyFormOpen"] = False if request.method == "POST": addStudyForm = AddStudyForm(request.POST) if "action" in request.POST and request.POST["action"] == "add-study": if "secretariaat" not in request.user.cached_groups_names: raise PermissionDenied ctx["addStudyFormOpen"] = True if addStudyForm.is_valid(): fd = addStudyForm.cleaned_data # TODO: catch error when study start overlaps with last study user.study_start(fd["study"], fd["study_inst"], fd["study_number"], fd["study_from"]) return redirect_to_referer(request) else: addStudyForm = AddStudyForm() if user.last_study_end_date < DT_MAX: ctx["addStudyForm"] = addStudyForm return render_to_response("leden/user_detail.html", ctx, context_instance=RequestContext(request))
def note_add(request): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied if 'on' not in request.POST or 'note' not in request.POST: raise ValueError(_("missende `on' of `note'")) on = Es.by_id(_id(request.POST['on'])) if on is None: raise Http404 note = on.add_note(request.POST['note'], request.user) render_then_email("leden/new-note.mail.html", Es.by_name('secretariaat').canonical_full_email, { 'user': request.user, 'note': request.POST['note'], 'on': on }, headers={ 'In-Reply-To': note.messageId, 'References': note.messageId }) 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 user_reset_password(request, _id): if not 'secretariaat' in request.user.cached_groups_names: raise PermissionDenied u = Es.by_id(_id).as_user() pwd = pseudo_randstr() u.set_password(pwd) giedo.change_password(str(u.name), pwd, pwd) email = EmailMessage( "[KN] Nieuw wachtwoord", ("Beste %s,\n\n"+ "Jouw wachtwoord is gereset. Je kunt inloggen met:\n"+ " gebruikersnaam %s\n"+ " wachtwoord %s\n\n"+ "Met een vriendelijke groet,\n\n"+ " Het Karpe Noktem Smoelenboek") % ( u.first_name, str(u.name), pwd), 'Karpe Noktem\'s ledenadministratie <*****@*****.**>', [u.canonical_email]) email.send() request.user.push_message("Wachtwoord gereset!") 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: raise ValueError, "This relation already exists" # Add the relation! Es.add_relation(d['who'], d['with'], d['how'], dt, DT_MAX) # Notify informacie if request.user._id == d['who']: Es.notify_informacie("%s heeft zich ingeschreven als %s %s" % ( request.user.full_name, Es.by_id(d['how']).humanName if d['how'] else 'lid', Es.by_id(d['with']).humanName.genitive)) else: # TODO (rik) leave out 'als lid' Es.notify_informacie("%s is nu %s %s" % ( Es.by_id(d['who']).humanName, Es.by_id(d['how']).humanName if d['how'] else 'lid', Es.by_id(d['with']).humanName.genitive)) giedo.sync_async(request) return redirect_to_referer(request)
def _user_detail(request, user): ctx = _entity_detail(request, user) ctx['photosUrl'] = (reverse('fotos', kwargs={'path': ''}) + '?q=tag:' + str(user.name)) ctx['addStudyFormOpen'] = False if request.method == 'POST': addStudyForm = AddStudyForm(request.POST) if 'action' in request.POST and request.POST['action'] == 'add-study': if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied ctx['addStudyFormOpen'] = True if addStudyForm.is_valid(): fd = addStudyForm.cleaned_data # TODO: catch error when study start overlaps with last study user.study_start(fd['study'], fd['study_inst'], fd['study_number'], fd['study_from']) return redirect_to_referer(request) else: addStudyForm = AddStudyForm() if user.last_study_end_date < DT_MAX: ctx['addStudyForm'] = addStudyForm return render(request, 'leden/user_detail.html', ctx)
def secr_update_site_agenda(request): if "secretariaat" not in request.user.cached_groups_names: raise PermissionDenied giedo.update_site_agenda() messages.info(request, _("Agenda geupdate!")) return redirect_to_referer(request)
def secr_update_site_agenda(request): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied giedo.update_site_agenda() messages.info(request, _("Agenda geupdate!")) return redirect_to_referer(request)
def secr_update_site_agenda(request): if 'secretariaat' not in request.user.cached_groups_names: raise PermissionDenied giedo.update_site_agenda() request.user.push_message("Agenda geupdate!") return redirect_to_referer(request)