This is an automated email from the ASF dual-hosted git repository.

gcruz pushed a commit to branch gc/8577
in repository https://gitbox.apache.org/repos/asf/allura.git

commit a2a0999d31b90154c57f0f3432bd1873a478c282
Author: Guillermo Cruz <[email protected]>
AuthorDate: Thu Apr 24 11:08:32 2025 -0600

    [#8577] notes can be added to a project in the new projects section
---
 Allura/allura/controllers/site_admin.py            | 12 +++++
 .../allura/templates/site_admin_new_projects.html  | 53 ++++++++++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/Allura/allura/controllers/site_admin.py 
b/Allura/allura/controllers/site_admin.py
index a4af8ecad..ec0b83194 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -213,6 +213,18 @@ def new_projects(self, **kwargs):
             'window_end': end_dt,
         }
 
+    @expose('json:')
+    @require_post()
+    def save_project_note(self, **kwargs):
+        shortname = kwargs.get('shortname')
+        note = kwargs.get('note')
+        nbhd = M.Neighborhood.query.get(name='Projects')
+        c.project = M.Project.query.get(shortname=shortname, 
neighborhood_id=nbhd._id)
+        if c.project and note:
+            c.project.set_tool_data('allura', notes=note)
+            return {'status': 'ok', 'message': 'Project note updated'}
+        return {'status': 'error', 'message': 'Project note not updated'}
+
     @expose('jinja:allura:templates/site_admin_reclone_repo.html')
     @without_trailing_slash
     @validate(dict(prefix=validators.NotEmpty(),
diff --git a/Allura/allura/templates/site_admin_new_projects.html 
b/Allura/allura/templates/site_admin_new_projects.html
index 413b43720..9ba018926 100644
--- a/Allura/allura/templates/site_admin_new_projects.html
+++ b/Allura/allura/templates/site_admin_new_projects.html
@@ -71,6 +71,15 @@
       <td><small>{{ p.external_homepage|urlize(22) }}</small></td>
       <td>{% for a in p.admins() %}<small><a href="/nf/admin/user/{{ 
a.username }}">{{ a.username }}</a></small> {% endfor %}</td>
     </tr>
+    <tr class="tablesorter-childRow">
+        <td colspan="8" class="child-row">
+            {% if p.get_tool_data('allura', 'notes') %}
+                <strong>Notes:</strong> {{ p.get_tool_data('allura', 'notes') 
}}
+            {% else %}
+                <a class="add-note" title="click to add a not for this 
project" data-project="{{ p.shortname }}" href="#"><i class="fa fa-edit"></i> 
add note</a>
+            {% endif %}
+        </td>
+    </tr>
     {% endfor %}
   </table>
   {{ _paging() }}
@@ -110,6 +119,11 @@
         background-position: 100% 50%;
         background-color: #6bb3fd;
     }
+    td.child-row{ text-align:center}
+    .note-buttons{
+        display: flex;
+        justify-content: center;
+    }
 </style>
 {% endblock %}
 
@@ -124,5 +138,44 @@
             sortRestart    : false
         });
     });
+    $('.add-note').each(function(el){
+        var el = $(this);
+        el.on('click', function(evt){
+            evt.preventDefault();
+            var project_shortname = el.data('project');
+            var form_exists = el.closest('tr').find('td:first').find('form');
+           if (form_exists.length > 0) {
+               return;
+           }
+            var form = $('<form></form>')
+            var textarea = $('<textarea class="note" rows="5" 
cols="100"></textarea>');
+            var submit_btn = $('<button type="submit" class="button blue 
right">Submit</button>');
+            var cancel_btn = $('<button class="" >Cancel</button>');
+            var div = $('<div class="note-buttons"></div>')
+            form.append(textarea)
+            div.append(submit_btn);
+            div.append(cancel_btn);
+            form.append(div);
+            el.closest('tr').find('td:first').append(form)
+            form.on('submit', function(evt){
+                evt.preventDefault();
+                var url = "{{ request.path.replace('new_projects', 
'save_project_note')}}";
+                var data = {'_csrf_token': $.cookie('_csrf_token'), 'note': 
textarea.val(), 'shortname': project_shortname}
+                $.post(url,data).done(function(response){
+                    flash(response.message, 'success');
+                    form.remove();
+                    var td = el.closest('tr').find('td:first');
+                    td.html('<p><strong>Notes:</strong>' + textarea.val() + 
'</p>');
+                    el.remove();
+                }).fail(function (response){
+                    flash(response.message, 'error');
+                })
+            })
+            cancel_btn.on('click', function(evt){
+                evt.preventDefault();
+                form.remove();
+            })
+        })
+    })
   } );</script>
 {% endblock %}

Reply via email to