This is an automated email from the ASF dual-hosted git repository. gcruz pushed a commit to branch gc/8484 in repository https://gitbox.apache.org/repos/asf/allura.git
commit 5b7f443ce11aeeea47282cfc128497257a54633d Author: Guillermo Cruz <[email protected]> AuthorDate: Fri Dec 9 16:35:56 2022 -0600 [#8484] added fediverse and instagram form fields for projects --- Allura/allura/ext/admin/admin_main.py | 11 +++++++++++ Allura/allura/ext/admin/widgets.py | 6 ++++++ Allura/allura/lib/validators.py | 19 +++++++++++++++++++ Allura/allura/model/project.py | 13 +++++++++++++ .../admin/templates/admin_widgets/metadata_admin.html | 8 ++++++++ 5 files changed, 57 insertions(+) diff --git a/Allura/allura/ext/admin/admin_main.py b/Allura/allura/ext/admin/admin_main.py index d40d9b9b0..0a9ef9a61 100644 --- a/Allura/allura/ext/admin/admin_main.py +++ b/Allura/allura/ext/admin/admin_main.py @@ -319,6 +319,8 @@ class ProjectAdminController(BaseController): support_page_url='', twitter_handle='', facebook_page='', + fediverse_address='', + instagram_page='', removal='', moved_to_url='', tracking_id='', @@ -385,6 +387,15 @@ class ProjectAdminController(BaseController): M.AuditLog.log( 'change project facebook page to %s', facebook_page) c.project.set_social_account('Facebook', facebook_page) + old_fediverse = c.project.social_account('Fediverse') + if not old_fediverse or fediverse_address != old_fediverse.accounturl: + M.AuditLog.log('change project fediverse username to %s', + fediverse_address) + c.project.set_social_account('Fediverse', fediverse_address) + old_instagram = c.project.social_account('Instagram') + if not old_instagram or instagram_page != old_instagram: + M.AuditLog.log('change project instagram page to %s', instagram_page) + c.project.set_social_account('Instagram', instagram_page) if support_page_url != c.project.support_page_url: M.AuditLog.log('change project support page url to %s', support_page_url) diff --git a/Allura/allura/ext/admin/widgets.py b/Allura/allura/ext/admin/widgets.py index 5a2e0e3cb..fe8c48a0a 100644 --- a/Allura/allura/ext/admin/widgets.py +++ b/Allura/allura/ext/admin/widgets.py @@ -224,6 +224,12 @@ class MetadataAdmin(ff.AdminForm): field_type="text", label='Twitter Handle') facebook_page = ew.InputField(field_type="text", label='Facebook page', validator=fev.URL(add_http=True)) + instagram_page = ew.InputField( + field_type="text", label='Instagram page', validator=fev.URL(add_http=True)) + fediverse_address = ew.InputField(field_type="text", label="Mastodon address", + validator=V.FediverseAddressValidator) + + class AuditLog(ew_core.Widget): diff --git a/Allura/allura/lib/validators.py b/Allura/allura/lib/validators.py index b7e56d7ba..ea2ad9ddd 100644 --- a/Allura/allura/lib/validators.py +++ b/Allura/allura/lib/validators.py @@ -487,3 +487,22 @@ class IconValidator(fev.FancyValidator): value, state) return value + +class FediverseAddressValidator(fev.FancyValidator): + REGEX = r'^@[a-zA-Z_]*@[a-zA-Z_]*\.{1}[A-Za-z]{0,10}$' + + def to_python(self, value, state): + match = re.match(FediverseAddressValidator.REGEX, value) + if not match: + raise fe.Invalid('Address format must be @your username@your server', value, state) + + return value.lower() + +class InstagramValidator(fev.FancyValidator): + REGEX = r'^[a-zA-Z0-9_.]+' + def to_python(self, value, state): + match = re.match(InstagramValidator.REGEX, value) + if not match: + raise fe.Invalid("Username is not valid", value, state) + + return value \ No newline at end of file diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py index fad47aefc..743384775 100644 --- a/Allura/allura/model/project.py +++ b/Allura/allura/model/project.py @@ -1134,6 +1134,19 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject): def facebook_page(self): return self.social_account('Facebook').accounturl + @property + def fediverse_address(self): + return self.social_account('Fediverse').accounturl + + @classmethod + def fediverse_parse_address(cls, username): + pieces = username.split('@') + return f'https://{pieces[-1]}/@{pieces[1]}' + + @property + def instagram_page(self): + return self.social_account('Instagram').accounturl + def social_account(self, socialnetwork): try: account = next( diff --git a/Allura/allura/templates_responsive/override/allura/ext/admin/templates/admin_widgets/metadata_admin.html b/Allura/allura/templates_responsive/override/allura/ext/admin/templates/admin_widgets/metadata_admin.html index b47b0cce3..68ac3c213 100644 --- a/Allura/allura/templates_responsive/override/allura/ext/admin/templates/admin_widgets/metadata_admin.html +++ b/Allura/allura/templates_responsive/override/allura/ext/admin/templates/admin_widgets/metadata_admin.html @@ -97,6 +97,14 @@ {{ widget.display_label(widget.fields.facebook_page) }} {{widget.display_field(widget.fields.facebook_page) }} </div> + <div class="field"> + {{ widget.display_label(widget.fields.instagram_page) }} + {{ widget.display_field(widget.fields.instagram_page) }} + </div> + <div class="field"> + {{ widget.display_label(widget.fields.fediverse_address) }} + {{ widget.display_field(widget.fields.fediverse_address) }} + </div> </div> {% if c.project.neighborhood.features['google_analytics'] %}
