[Git][noosfero/noosfero][master] 13 commits: Adds exportable fields and a related hotspost

Rodrigo Souto gitlab at mg.gitlab.com
Wed Jun 27 17:35:53 BRT 2018


Rodrigo Souto pushed to branch master at Noosfero / noosfero


Commits:
d701928f by Gabriel Silva at 2018-06-08T18:49:44Z
Adds exportable fields and a related hotspost

Signed-off-by: Gabriel Silva <gabriel93.silva at gmail.com>

- - - - -
3384150f by Gabriel Silva at 2018-06-08T18:49:44Z
[CustomForms] Adds field selector to export page

Signed-off-by: Gabriel Silva <gabriel93.silva at gmail.com>

- - - - -
fe8c8f29 by Matheus Richard at 2018-06-13T15:30:20Z
Updates user list exportation layout

- - - - -
595f6379 by Matheus Richard at 2018-06-14T14:42:27Z
Updates download users action to use selected fields

- - - - -
c074e21a by Matheus Richard at 2018-06-14T15:30:02Z
Adds test to export fields selection

- - - - -
b7e5754f by Matheus Richard at 2018-06-15T12:44:25Z
Merge branch 'master' of https://gitlab.com/noosfero/noosfero into custom-export-users

- - - - -
e4fb58e0 by Matheus Richard at 2018-06-18T14:44:08Z
Removes unnecessary tests

- - - - -
a2b8408c by Matheus Richard at 2018-06-22T01:45:39Z
Merge branch 'custom-export-2' of https://gitlab.com/gabrielssilva/noosfero into custom-export-users

- - - - -
96339a48 by Matheus Richard at 2018-06-25T14:55:52Z
Changes user fields selector description

- - - - -
2897968a by Matheus Richard at 2018-06-26T13:30:01Z
Orders exportable_fields before returning

- - - - -
111ff36d by Matheus Richard at 2018-06-26T16:03:20Z
Merge branch 'master' of https://gitlab.com/noosfero/noosfero into custom-export-users

- - - - -
ed42b14f by Matheus Richard at 2018-06-27T12:58:52Z
Merge branch 'master' of https://gitlab.com/noosfero/noosfero into custom-export-users

- - - - -
29514280 by Rodrigo Souto at 2018-06-27T20:35:48Z
Merge branch 'custom-export-users' into 'master'

Custom export users list

See merge request noosfero/noosfero!1528
- - - - -


10 changed files:

- app/controllers/admin/users_controller.rb
- app/models/person.rb
- app/models/profile.rb
- app/views/users/_index_buttons.html.erb
- public/javascripts/application.js
- + public/javascripts/manage-users.js
- public/stylesheets/application.scss
- + public/stylesheets/manage-users.scss
- test/functional/users_controller_test.rb
- test/unit/person_test.rb


Changes:

=====================================
app/controllers/admin/users_controller.rb
=====================================
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -44,18 +44,17 @@ class UsersController < AdminController
   end
 
   def download
+    fields = { base: params[:fields], user: %w[last_login_at] }
     users = filter_users(per_page: environment.users.count, page: nil)
-    exporter = Exporter.new(users, Person.exportable_fields(environment))
+    exporter = Exporter.new(users, fields)
     date = Time.current.strftime('%Y-%m-%d %Hh%Mm')
     filename = _('%s people list - %s') % [environment.name, date]
 
-    respond_to do |format|
-      format.xml do
-        send_data exporter.to_xml, type: 'text/xml', filename: "#{filename}.xml"
-      end
-      format.csv do
-        send_data exporter.to_csv, type: 'text/csv', filename: "#{filename}.csv"
-      end
+    case params[:format]
+    when 'csv'
+      send_data exporter.to_csv, type: 'text/csv', filename: "#{filename}.csv"
+    when 'xml'
+      send_data exporter.to_xml, type: 'text/xml', filename: "#{filename}.xml"
     end
   end
 


=====================================
app/models/person.rb
=====================================
--- a/app/models/person.rb
+++ b/app/models/person.rb
@@ -672,10 +672,4 @@ class Person < Profile
   def pending_tasks
     Task.to(self).pending
   end
-
-  def self.exportable_fields(environment)
-    active_fields = environment.active_person_fields
-    { base: %w[name updated_at created_at identifier lat lng] + active_fields,
-      user: %w[email last_login_at] }
-  end
 end


=====================================
app/models/profile.rb
=====================================
--- a/app/models/profile.rb
+++ b/app/models/profile.rb
@@ -1325,7 +1325,11 @@ private :generate_url, :url_options
 
   def exportable_fields
     plugin_extra_fields = plugins.dispatch(:extra_exportable_fields, self)
-    active_fields + DEFAULT_EXPORTABLE_FIELDS + plugin_extra_fields
+    fields = active_fields + DEFAULT_EXPORTABLE_FIELDS + plugin_extra_fields
+    first_fields = %w(id name email)
+    fields -= first_fields
+    fields.sort!
+    ordered_fields = first_fields + fields
   end
 
   private


=====================================
app/views/users/_index_buttons.html.erb
=====================================
--- a/app/views/users/_index_buttons.html.erb
+++ b/app/views/users/_index_buttons.html.erb
@@ -1,10 +1,25 @@
 <%= button_bar do %>
-  <%= button 'file-alt', _('People list [CSV]'),
-             { action: 'download.csv', filter: @filter, q: @q },
-             { id: "convert-csv" } %>
-  <%= button 'file-code', _('People list [XML]'),
-             { action: 'download.xml', filter: @filter, q: @q },
-             { :id => "convert-xml" }  %>
+  <%= button 'sort-amount-down', _('Export People list'), '#!', {class: 'export-people-list'} %>
   <%= button :send, _('Send e-mail to users'), :action => 'send_mail' %>
   <%= button :back, _('Back'), :controller => 'admin_panel' %>
 <% end %>
+
+<div class="export-people-field" >
+  <%= form_tag({action: 'download', controller: 'users'}) do %>
+    <label>Select the file format</label>
+    <div class="download-format">
+      <label><%= radio_button_tag('format', 'xml', true) %> XML </label>
+      <label><%= radio_button_tag('format', 'csv', false) %> CSV </label>
+    </div>
+
+    <%= exportable_fields_selector(
+          "fields[]",
+          _('Select the fields to be included in the people list'),
+          current_person,
+          %w(name email)
+        ) %>
+
+    <%= submit_button 'download', _('Download') %>
+    <%= button('ban', _('Cancel'), '#!', {id: 'cancel-exportation'}) %>
+  <% end %>
+</div>
\ No newline at end of file


=====================================
public/javascripts/application.js
=====================================
--- a/public/javascripts/application.js
+++ b/public/javascripts/application.js
@@ -37,6 +37,7 @@
 *= require add-and-join.js
 *= require followers.js
 *= require manage-followers.js
+*= require manage-users.js
 *= require report-abuse.js
 *= require require_login.js
 *= require block-store.js


=====================================
public/javascripts/manage-users.js
=====================================
--- /dev/null
+++ b/public/javascripts/manage-users.js
@@ -0,0 +1,7 @@
+jQuery(function ($) {
+  $(".export-people-field").hide();
+  
+  $(".export-people-list, #cancel-exportation").click(function () {
+    $(".export-people-field").slideToggle();
+  });
+});


=====================================
public/stylesheets/application.scss
=====================================
--- a/public/stylesheets/application.scss
+++ b/public/stylesheets/application.scss
@@ -56,6 +56,7 @@
 @import 'admin-panel';
 @import 'manage-plugins';
 @import 'manage-fields';
+ at import 'manage-users';
 @import 'environment-users';
 @import 'quotas';
 @import 'features';


=====================================
public/stylesheets/manage-users.scss
=====================================
--- /dev/null
+++ b/public/stylesheets/manage-users.scss
@@ -0,0 +1,3 @@
+.download-format {
+  margin: 5px 0 10px 0;
+}
\ No newline at end of file


=====================================
test/functional/users_controller_test.rb
=====================================
--- a/test/functional/users_controller_test.rb
+++ b/test/functional/users_controller_test.rb
@@ -113,14 +113,14 @@ class UsersControllerTest < ActionController::TestCase
 
   should 'response as XML to export users' do
     create_user('maryjane')
-    get :download, :format => 'xml'
+    get :download, :format => 'xml', :fields => ['name']
     assert_equal 'text/xml', @response.content_type
     assert_match 'maryjane', @response.body
   end
 
   should 'response as CSV to export users' do
     create_user('maryjane')
-    get :download, :format => 'csv'
+    get :download, :format => 'csv', :fields => ['name']
     assert_equal 'text/csv', @response.content_type
     assert_match 'maryjane', @response.body
   end
@@ -130,12 +130,21 @@ class UsersControllerTest < ActionController::TestCase
     create_user('jhonbaz')
     create_user('maryjane')
 
-    get :download, format: 'csv', q: 'jhon'
+    get :download, format: 'csv', :fields => ['name'], q: 'jhon'
     assert_match 'jhondoe', @response.body
     assert_match 'jhonbaz', @response.body
     assert_no_match 'maryjane', @response.body
   end
 
+  should 'include only selected fields' do
+    create_user('jhondoe')
+
+    get :download, :format => 'csv', :fields => ['email']
+    assert_match 'jhondoe at noosfero.org', @response.body
+    assert_match 'last_login_at', @response.body
+    assert_no_match 'name', @response.body
+  end
+
   should 'be able to remove a person' do
     person = fast_create(Person, :environment_id => environment.id)
     assert_difference 'Person.count', -1 do
@@ -182,5 +191,4 @@ class UsersControllerTest < ActionController::TestCase
       process_delayed_job_queue
     end
   end
-
 end


=====================================
test/unit/person_test.rb
=====================================
--- a/test/unit/person_test.rb
+++ b/test/unit/person_test.rb
@@ -2102,16 +2102,4 @@ class PersonTest < ActiveSupport::TestCase
     person = create_user('mytestuser').person
     assert_includes profile.available_blocks(person), CommunitiesBlock
   end
-
-  should 'return field as exportable if it is enabled in the environment' do
-    env = Environment.default
-    env.stubs(:active_person_fields).returns(%w[location])
-    assert_includes Person.exportable_fields(env)[:base], 'location'
-  end
-
-  should 'not return field as exportable if it is disabled in the environment' do
-    env = Environment.default
-    env.stubs(:active_person_fields).returns([])
-    assert_not_includes Person.exportable_fields(env)[:base], 'location'
-  end
 end



View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/c6c3da8c691f52ce5fffe39d93099afc0db3d7c6...2951428051d6a939b40939e225abf28acbb14ed1

-- 
View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/c6c3da8c691f52ce5fffe39d93099afc0db3d7c6...2951428051d6a939b40939e225abf28acbb14ed1
You're receiving this email because of your account on gitlab.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20180627/9d82ad8b/attachment-0001.html>


More information about the Noosfero-dev mailing list