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'] %}

Reply via email to