]> git.ipfire.org Git - ipfire.org.git/commitdiff
people: Try to store address better in LDAP
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 18 Nov 2018 16:04:28 +0000 (16:04 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 18 Nov 2018 16:04:28 +0000 (16:04 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/accounts.py
src/templates/people/user-edit.html
src/web/people.py

index a1b6ee212a590c4b3c577b9bf955fb4831af709b..0d767ee474f18f0cc532e99b686155b0f16428e3 100644 (file)
@@ -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):
index 8cb66d17bf0f1ebc35aad5bb082a6d88431703e9..d006d824bfcbb1cd44d6ab2a6242fe74ad6d76a9 100644 (file)
                <div class="form-group">
                        <label>{{ _("Address") }}</label>
 
-                       <textarea type="text" class="form-control" name="address" rows="5" required
-                               placeholder="{{ _("Address") }}">{{ "\n".join(account.address) }}</textarea>
+                       <textarea type="text" class="form-control" name="street" rows="3"
+                               placeholder="{{ _("Address") }}">{{ account.street }}</textarea>
+               </div>
 
-                       <small class="form-text text-muted">
-                               {{ _("Enter your full address including your country") }}
-                       </small>
+               <div class="form-row mb-3">
+                       <div class="col">
+                               <label>{{ _("City") }}</label>
+
+                               <input type="text" class="form-control" name="city"
+                                       placeholder="{{ _("City") }}" value="{{ account.city }}">
+                       </div>
+
+                       <div class="col">
+                               <label>{{ _("Postal Code") }}</label>
+
+                               <input type="text" class="form-control" name="postal_code"
+                                       placeholder="{{ _("Postal Code") }}" value="{{ account.postal_code }}">
+                       </div>
+               </div>
+
+               <div class="form-group">
+                       <label>{{ _("Country") }}</label>
+
+                       <select class="form-control" name="country_code">
+                               <option value="">{{ _("- Please Select -") }}</option>
+
+                               {% for c in countries %}
+                                       <option value="{{ c.alpha2 }}" {% if account.country_code == c.alpha2 %}selected{% end %}>{{ c.name }}</option>
+                               {% end %}
+                       </select>
                </div>
 
                <div class="form-group">
index e47a82d4e933b341c27429d4aca5765aaa8b4585..e8e8d6b5f898f0dd7f5501a7b41c15cc437d362a 100644 (file)
@@ -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: