import urllib.request
import zxcvbn
+from . import countries
from . import util
from .decorators import *
from .misc import 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):
<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">
import sshpubkeys
import tornado.web
+from .. import countries
+
from . import auth
from . import base
from . import ui_modules
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):
# 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: