Browse Source

Let admins set the list of users to block on a project in the settings

Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
Pierre-Yves Chibon 5 years ago
parent
commit
e14a441821
2 changed files with 100 additions and 0 deletions
  1. 42 0
      pagure/templates/settings.html
  2. 58 0
      pagure/templates/settings_block_users.html

+ 42 - 0
pagure/templates/settings.html

@@ -79,6 +79,11 @@
           <a class="nav-item nav-link" id="regen" data-toggle="tab"
                 href="#regen-tab" role="tab" aria-controls="regen">Regenerate Repos</a>
 
+          {% if repo.user.user == g.fas_user.username or pagure_admin %}
+          <a class="nav-item nav-link" id="blockusers" data-toggle="tab"
+            href="#blockusers-tab" role="tab" aria-controls="blockusers">Block Users</a>
+          {% endif %}
+
           {% if config.get('ENABLE_GIVE_PROJECTS', True)
             and (repo.user.user == g.fas_user.username or pagure_admin)
             and not repo.is_fork %}
@@ -1034,6 +1039,10 @@
               </div>
           </div>
 
+          <div class="tab-pane fade" id="blockusers-tab" role="tabpanel" aria-labelledby="blockusers-tab">
+            {% include 'settings_block_users.html' %}
+          </div>
+
           {% if config.get('ENABLE_GIVE_PROJECTS', True)
           and (repo.user.user == g.fas_user.username or pagure_admin)
           and not repo.is_fork %}
@@ -1418,6 +1427,39 @@ $('#user').selectize({
   }
 });
 {% endif %}
+
+$('.ajaxed').click(function(e) {
+  _form = $(this).closest('form')
+  $.ajax({
+      url: _form.prop('action') ,
+      type: 'POST',
+      data: _form.serialize(),
+      dataType: 'json',
+      success: function(res) {
+        console.log(res);
+        if ( res.message ) {
+          var _html = '<div class="container pt-2">'
+              + '  <div class="alert alert-info border border-secondary bg-white alert-dismissible" role="alert">'
+              + '      <button type="button" class="close" data-dismiss="alert" aria-label="Close">'
+              + '      <span aria-hidden="true">×</span>'
+              + '      <span class="sr-only">Close</span>'
+              + '    </button>'
+              + '    <div class="text-info font-weight-bold">'
+              + '      <i class="fa fa-fw fa-info-circle"></i>' + res.message
+              + '    </div>'
+              + '  </div>'
+              + '</div>';
+          $('.bodycontent').prepend(_html)
+        }
+      },
+      error: function(res) {
+        console.log(res);
+        alert('Request failed');
+      }
+  });
+  return false;
+});
+
 </script>
 
 <script type="text/javascript">

+ 58 - 0
pagure/templates/settings_block_users.html

@@ -0,0 +1,58 @@
+
+<h3 class="font-weight-bold mb-3">
+    Block users
+</h3>
+<p>
+  You can block any users from interacting with your project. They will be able
+  to view but nothing more.
+</p>
+<form action="{{ url_for(
+  'api_ns.api_project_block_user',
+  repo=repo.name,
+  username=username,
+  namespace=repo.namespace) }}"
+    method="post" class="icon">
+    <div class="row">
+      <div class="col-sm-12">
+        <strong>Users</strong>
+      </div>
+    </div>
+  <div class="form-group settings-field-rows" id="blockusers-list">
+    <div class="row hidden blank-field">
+      <div class="col-sm-11" >
+        <input type="text" name="username"
+                value="" class="form-control"/>
+      </div>
+
+      <div class="col-sm-1">
+        <a href="javascript:void(0)" class="btn btn-outline-danger remove-settings-field-row"><i class="fa fa-trash"></i></a>
+      </div>
+    </div>
+    {% for user in repo.block_users | sort %}
+      <div class="row {{'hidden blank-field' if status == ''}}">
+        <div class="col-sm-11" >
+          <input type="text" name="username"
+                 value="{{ user }}" class="form-control"/>
+        </div>
+
+        <div class="col-sm-1">
+          <a href="javascript:void(0)" class="btn btn-outline-danger remove-settings-field-row"><i class="fa fa-trash"></i></a>
+        </div>
+      </div>
+    {% endfor %}
+  </div>
+  <a href="javascript:void(0)" class="btn btn-secondary pt-2 btn-sm btn-block add-settings-field-row" data-target="#blockusers-list">
+      <i class="fa fa-plus"></i> Add new user
+  </a>
+
+  <div class="row p-t-1">
+  </div>
+  <div class="row p-t-1">
+    <div class="col-sm-12">
+      <button class="btn btn-primary float-right mt-3 ajaxed" type="submit"
+          title="Update the blocked user">
+        Update
+      </button>
+    </div>
+  </div>
+</form>