diff --git a/aleksis/core/models.py b/aleksis/core/models.py index c03b9338b0d393ed0be2f0bf8bd40af5e20db897..92b73948b652ac4edc019f9e9c4e81e5d726f41e 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -283,6 +283,23 @@ class Person(ExtensibleModel): if force or not self.primary_group: self.primary_group = self.member_of.filter(**{f"{field}__regex": pattern}).first() + def update_geolocation(self) -> None: + """ Update coordinates if postal address is given """ + + if config.ENABLE_GEOLOCATION_OF_PERSONS: + + # Get API key from settings + nominatim = OpenMapQuest(api_key=getattr(config, "MAPQUEST_API_KEY", None), + user_agent="AlekSIS") + + if self.full_address: + try: + location = nominatim.geocode(self.full_address) + except GeocoderServiceError: + location = None + + if location: + self.latitude, self.longitude = location.latitude, location.longitude class DummyPerson(Person): """A dummy person that is not stored into the database. diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py index 197dfc3b8bd6ac72b273c02c77a63990913ea5cf..ad5d7077eba8bccb0981f70b2ea7fffce7c9474c 100644 --- a/aleksis/core/settings.py +++ b/aleksis/core/settings.py @@ -392,35 +392,6 @@ DYNAMIC_PREFERENCES = { "REGISTRY_MODULE": "preferences", } -CONSTANCE_CONFIG = { - "SITE_TITLE": ("AlekSIS", _("Site title"), "char_field"), - "SITE_DESCRIPTION": ("The Free School Information System", _("Site description")), - "COLOUR_PRIMARY": ("#0d5eaf", _("Primary colour"), "colour_field"), - "COLOUR_SECONDARY": ("#0d5eaf", _("Secondary colour"), "colour_field"), - "MAIL_OUT_NAME": ("AlekSIS", _("Mail out name")), - "MAIL_OUT": (DEFAULT_FROM_EMAIL, _("Mail out address"), "email_field"), - "PRIVACY_URL": ("", _("Link to privacy policy"), "url_field"), - "IMPRINT_URL": ("", _("Link to imprint"), "url_field"), - "ADRESSING_NAME_FORMAT": ("german", _("Name format of adresses"), "adressing-select"), - "NOTIFICATION_CHANNELS": (["email"], _("Channels to allow for notifications"), "notifications-select"), - "PRIMARY_GROUP_PATTERN": ("", _("Regular expression to match primary group, e.g. '^Class .*'"), str), - "ENABLE_GEOLOCATION_OF_PERSONS": (False, _("Enable "), bool), - "MAPQUEST_API_KEY": ("", _("MAPQuest api key "), str), -} -CONSTANCE_CONFIG_FIELDSETS = { - "General settings": ("SITE_TITLE", "SITE_DESCRIPTION"), - "Theme settings": ("COLOUR_PRIMARY", "COLOUR_SECONDARY"), - "Mail settings": ("MAIL_OUT_NAME", "MAIL_OUT"), - "Notification settings": ("NOTIFICATION_CHANNELS", "ADRESSING_NAME_FORMAT"), - "Footer settings": ("PRIVACY_URL", "IMPRINT_URL"), - "Account settings": ("PRIMARY_GROUP_PATTERN",), - "Geolocation settings": ("ENABLE_GEOLOCATION_OF_PERSONS", "MAPQUEST_API_KEY"), -} - -merge_app_settings("CONSTANCE_ADDITIONAL_FIELDS", CONSTANCE_ADDITIONAL_FIELDS, False) -merge_app_settings("CONSTANCE_CONFIG", CONSTANCE_CONFIG, False) -merge_app_settings("CONSTANCE_CONFIG_FIELDSETS", CONSTANCE_CONFIG_FIELDSETS, False) - MAINTENANCE_MODE = _settings.get("maintenance.enabled", None) MAINTENANCE_MODE_IGNORE_IP_ADDRESSES = _settings.get( "maintenance.ignore_ips", _settings.get("maintenance.internal_ips", []) diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index 785d4e6505455d653ec0586d33c7a2f0ab439ef3..484aec62c67f0db38dbc90a95fae141897d2a873 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -334,25 +334,6 @@ def now_tomorrow() -> datetime: return timezone.now() + timedelta(days=1) -def update_geolocation(person) -> None: - """ Update coordinates if postal address is given """ - - if config.ENABLE_GEOLOCATION_OF_PERSONS: - - # Get API key from settings - nominatim = OpenMapQuest(api_key=getattr(config, "MAPQUEST_API_KEY", None), - user_agent="AlekSIS") - - if person.full_address: - try: - location = nominatim.geocode(person.full_address) - except GeocoderServiceError: - location = None - - if location: - person.latitude, person.longitude = location.latitude, location.longitude - - def objectgetter_optional( model: Model, default: Optional[Any] = None, default_eval: bool = False ) -> Callable[[HttpRequest, Optional[int]], Model]: