From: Michael Tremer Date: Sun, 18 Nov 2018 16:04:28 +0000 (+0000) Subject: people: Try to store address better in LDAP X-Git-Url: http://git.ipfire.org/?p=ipfire.org.git;a=commitdiff_plain;h=0099c2a7abdb6a6baf36c0e4e2abc977cd8b10db people: Try to store address better in LDAP Signed-off-by: Michael Tremer --- diff --git a/src/backend/accounts.py b/src/backend/accounts.py index a1b6ee21..0d767ee4 100644 --- a/src/backend/accounts.py +++ b/src/backend/accounts.py @@ -14,6 +14,7 @@ import urllib.parse import urllib.request import zxcvbn +from . import countries from . import util from .decorators import * from .misc import Object @@ -440,20 +441,63 @@ class Account(Object): # Address - def get_address(self): - address = self._get_string("homePostalAddress") + @property + def address(self): + address = [] - if address: - return (line.strip() for line in address.split(",")) + if self.street: + address += self.street.splitlines() + + if self.postal_code and self.city: + if self.country_code in ("AT", "DE"): + address.append("%s %s" % (self.postal_code, self.city)) + else: + address.append("%s, %s" % (self.city, self.postal_code)) + else: + address.append(self.city or self.postal_code) + + if self.country_name: + address.append(self.country_name) + + return address + + def get_street(self): + return self._get_string("street") or self._get_string("homePostalAddress") + + def set_street(self, street): + self._set_string("street", street) - return [] + street = property(get_street, set_street) - def set_address(self, address): - data = ", ".join(address.splitlines()) + def get_city(self): + return self._get_string("l") or "" - self._set_bytes("homePostalAddress", data.encode()) + def set_city(self, city): + self._set_string("l", city) - address = property(get_address, set_address) + city = property(get_city, set_city) + + def get_postal_code(self): + return self._get_string("postalCode") or "" + + def set_postal_code(self, postal_code): + self._set_string("postalCode", postal_code) + + postal_code = property(get_postal_code, set_postal_code) + + # XXX This should be c + def get_country_code(self): + return self._get_string("st") + + def set_country_code(self, country_code): + self._set_string("st", country_code) + + country_code = property(get_country_code, set_country_code) + + @property + def country_name(self): + if self.country_code: + return countries.get_name(self.country_code) @property def email(self): diff --git a/src/templates/people/user-edit.html b/src/templates/people/user-edit.html index 8cb66d17..d006d824 100644 --- a/src/templates/people/user-edit.html +++ b/src/templates/people/user-edit.html @@ -27,12 +27,36 @@
- + +
- - {{ _("Enter your full address including your country") }} - +
+
+ + + +
+ +
+ + + +
+
+ +
+ + +
diff --git a/src/web/people.py b/src/web/people.py index e47a82d4..e8e8d6b5 100644 --- a/src/web/people.py +++ b/src/web/people.py @@ -6,6 +6,8 @@ import logging import sshpubkeys import tornado.web +from .. import countries + from . import auth from . import base from . import ui_modules @@ -259,7 +261,7 @@ class UserEditHandler(auth.CacheMixin, base.BaseHandler): if not account.can_be_managed_by(self.current_user): raise tornado.web.HTTPError(403, "%s cannot manage %s" % (self.current_user, account)) - self.render("people/user-edit.html", account=account) + self.render("people/user-edit.html", account=account, countries=countries.get_all()) @tornado.web.authenticated def post(self, uid): @@ -273,9 +275,12 @@ class UserEditHandler(auth.CacheMixin, base.BaseHandler): # Unfortunately this cannot be wrapped into a transaction try: - account.first_name = self.get_argument("first_name") - account.last_name = self.get_argument("last_name") - account.address = self.get_argument("address") + account.first_name = self.get_argument("first_name") + account.last_name = self.get_argument("last_name") + account.street = self.get_argument("street", None) + account.city = self.get_argument("city", None) + account.postal_code = self.get_argument("postal_code", None) + account.country_code = self.get_argument("country_code", None) # Avatar try: