diff --git a/app/assets/javascripts/repositories/repository_datatable.js.erb b/app/assets/javascripts/repositories/repository_datatable.js.erb index 0544fa549..e3197df3c 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js.erb +++ b/app/assets/javascripts/repositories/repository_datatable.js.erb @@ -47,7 +47,7 @@ var RepositoryDatatable = (function(global) { originalHeader = $(TABLE_ID + ' thead').children().clone(); viewAssigned = 'assigned'; TABLE = $(TABLE_ID).DataTable({ - order: [[2, 'desc']], + order: [[3, 'desc']], dom: "R<'row'<'col-sm-9-custom toolbar'l><'col-sm-3-custom'f>>tpi", stateSave: true, processing: true, @@ -84,7 +84,12 @@ var RepositoryDatatable = (function(global) { orderable: true, sWidth: '1%' }, { - targets: 2, + targets: 2, + searchable: true, + orderable: true, + sWidth: '1%' + }, { + targets: 3, render: function(data, type, row) { return "" + data + ''; @@ -255,15 +260,18 @@ var RepositoryDatatable = (function(global) { case 'assigned': val = -2; break; - case 'row-name': + case 'row-id': val = -3; - break; - case 'added-by': + break + case 'row-name': val = -4; break; - case 'added-on': + case 'added-by': val = -5; break; + case 'added-on': + val = -6; + break; default: val = th.attr('id'); } diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index f07546648..ba0175cc5 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -10,9 +10,10 @@ module RepositoryDatatableHelper row = { 'DT_RowId': record.id, '1': assigned_row(record, assigned_rows), - '2': escape_input(record.name), - '3': I18n.l(record.created_at, format: :full), - '4': escape_input(record.created_by.full_name), + '2': record.id, + '3': escape_input(record.name), + '4': I18n.l(record.created_at, format: :full), + '5': escape_input(record.created_by.full_name), 'recordEditUrl': Rails.application.routes.url_helpers .edit_repository_repository_row_path( repository, diff --git a/app/models/concerns/searchable_model.rb b/app/models/concerns/searchable_model.rb index 76f0aa89e..20d80fed9 100644 --- a/app/models/concerns/searchable_model.rb +++ b/app/models/concerns/searchable_model.rb @@ -68,14 +68,25 @@ module SearchableModel end else unless attrs.empty? + # quick fix to enable searching by repositoy_row id + id_index = { present: false } where_str = (attrs.map.with_index do |a, i| - "(trim_html_tags(#{a})) #{like} :t#{i} OR " + if a == 'repository_rows.id' + id_index = { present: true, val: i } + "(#{a}) = :t#{i} OR " + else + "(trim_html_tags(#{a})) #{like} :t#{i} OR " + end end ).join[0..-5] vals = ( attrs.map.with_index do |_, i| - ["t#{i}".to_sym, "%#{sanitize_sql_like(query.to_s)}%"] + if id_index[:present] && id_index[:val] == i + ["t#{i}".to_sym, sanitize_sql_like(query).to_i] + else + ["t#{i}".to_sym, "%#{sanitize_sql_like(query.to_s)}%"] + end end ).to_h diff --git a/app/models/my_module.rb b/app/models/my_module.rb index e4677a97f..f38fa7b5e 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -343,6 +343,7 @@ class MyModule < ApplicationRecord .where(repository_id: repository_id) .order(created_at: order).find_each do |row| row_json = [] + row_json << row.id row_json << row.name row_json << I18n.l(row.created_at, format: :full) row_json << row.created_by.full_name @@ -351,6 +352,7 @@ class MyModule < ApplicationRecord # Prepare column headers headers = [ + I18n.t('repositories.table.id'), I18n.t('repositories.table.row_name'), I18n.t('repositories.table.added_on'), I18n.t('repositories.table.added_by') diff --git a/app/services/repository_datatable_service.rb b/app/services/repository_datatable_service.rb index 55b815812..48c9935db 100644 --- a/app/services/repository_datatable_service.rb +++ b/app/services/repository_datatable_service.rb @@ -55,7 +55,9 @@ class RepositoryDatatableService def search(value) includes_json = { repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES } - searchable_attributes = ['repository_rows.name', 'users.full_name'] + + searchable_attributes = ['repository_rows.name', + 'users.full_name', + 'repository_rows.id'] + Extends::REPOSITORY_EXTRA_SEARCH_ATTR RepositoryRow.left_outer_joins(:created_by) @@ -76,6 +78,7 @@ class RepositoryDatatableService def sortable_columns array = [ 'assigned', + 'repository_rows.id', 'repository_rows.name', 'repository_rows.created_at', 'users.full_name' diff --git a/app/services/repository_zip_export.rb b/app/services/repository_zip_export.rb index e192540fc..7ca6cda00 100644 --- a/app/services/repository_zip_export.rb +++ b/app/services/repository_zip_export.rb @@ -24,10 +24,12 @@ module RepositoryZipExport when -1, -2 next when -3 - I18n.t('repositories.table.row_name') + I18n.t('repositories.table.id') when -4 - I18n.t('repositories.table.added_by') + I18n.t('repositories.table.row_name') when -5 + I18n.t('repositories.table.added_by') + when -6 I18n.t('repositories.table.added_on') else column = RepositoryColumn.find_by_id(c_id) @@ -44,10 +46,12 @@ module RepositoryZipExport when -1, -2 next when -3 - row.name + row.id when -4 - row.created_by.full_name + row.name when -5 + row.created_by.full_name + when -6 I18n.l(row.created_at, format: :full) else cell = row.repository_cells diff --git a/app/views/repositories/_repository_row_info_modal.html.erb b/app/views/repositories/_repository_row_info_modal.html.erb index 7f321e2c4..0747a9ccc 100644 --- a/app/views/repositories/_repository_row_info_modal.html.erb +++ b/app/views/repositories/_repository_row_info_modal.html.erb @@ -13,12 +13,17 @@

- <%= t "repository_row.modal_info.added_on" %> + <%=t 'repository_row.modal_info.ID' %> + <%= @repository_row.id %> + +
+ + <%= t "repository_row.modal_info.added_on" %>: <%= l @repository_row.created_at, format: :full %>
- <%= t "repository_row.modal_info.added_by" %> + <%= t "repository_row.modal_info.added_by" %>: <%= @repository_row.created_by.full_name %> <% @repository_row.repository_cells.each do |repository_cell| %> diff --git a/app/views/repositories/_repository_table.html.erb b/app/views/repositories/_repository_table.html.erb index 85dfe7d57..aad7bcc3c 100644 --- a/app/views/repositories/_repository_table.html.erb +++ b/app/views/repositories/_repository_table.html.erb @@ -3,7 +3,7 @@ data-current-uri="<%= request.original_url %>" data-repository-id="<%= repository.id %>" data-source="<%= repository_index_link %>" - data-num-columns="<%= 5 + repository.repository_columns.count %>" + data-num-columns="<%= 6 + repository.repository_columns.count %>" data-create-record="<%= repository_repository_rows_path(repository) %>" data-delete-record="<%= repository_delete_records_path(repository) %>" data-max-dropdown-length="<%= Constants::NAME_TRUNCATION_LENGTH_DROPDOWN %>" @@ -16,6 +16,7 @@ <%= t("repositories.table.assigned") %> + <%= t("repositories.table.id") %> <%= t("repositories.table.row_name") %> <%= t("repositories.table.added_on") %> <%= t("repositories.table.added_by") %> diff --git a/app/views/search/results/_repositories.html.erb b/app/views/search/results/_repositories.html.erb index d403afe90..6bddd47f9 100644 --- a/app/views/search/results/_repositories.html.erb +++ b/app/views/search/results/_repositories.html.erb @@ -6,13 +6,11 @@

- <% repository_row.repository_cells.each do |cell| %> - - <%=t "search.index.repositories.custom_column", column: cell.repository_column.name %> - <%= highlight cell.value.data, search_query.strip.split(/\s+/) %> - -
- <% end %> + + <%=t 'repository_row.modal_info.ID' %> + <%= repository_row.id %> + +
<%=t "search.index.repositories.added_on" %> <%=l repository_row.created_at, format: :full %> @@ -22,6 +20,13 @@ <%=t "search.index.repositories.added_by" %> <%= highlight repository_row.created_by.full_name, search_query.strip.split(/\s+/) %> + <% repository_row.repository_cells.each do |cell| %> + + <%=t "search.index.repositories.custom_column", column: cell.repository_column.name %> + <%= highlight cell.value.data, search_query.strip.split(/\s+/) %> + +
+ <% end %>

diff --git a/config/initializers/constants.rb b/config/initializers/constants.rb index 6b0322c74..c3e67cd58 100644 --- a/config/initializers/constants.rb +++ b/config/initializers/constants.rb @@ -158,7 +158,7 @@ class Constants COLOR_DOVE_GRAY = '#666666'.freeze # $color-dove-gray COLOR_EMPEROR = '#555555'.freeze # $color-emperor COLOR_BLACK = '#000000'.freeze # $color-black - + #============================================================================= # External URLs @@ -842,17 +842,17 @@ class Constants REPOSITORY_TABLE_DEFAULT_STATE = { 'time' => 0, 'start' => 0, - 'length' => 5, - 'order' => [[2, 'desc']], + 'length' => 6, + 'order' => [[3, 'desc']], 'search' => { 'search' => '', 'smart' => true, 'regex' => false, 'caseInsensitive' => true }, 'columns' => [], 'assigned' => 'assigned', - 'ColReorder' => [*0..4] + 'ColReorder' => [*0..5] } - 5.times do + 6.times do REPOSITORY_TABLE_DEFAULT_STATE['columns'] << { 'visible' => true, 'search' => { 'search' => '', diff --git a/config/locales/en.yml b/config/locales/en.yml index cb41cdfe5..94fb52966 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -918,6 +918,7 @@ en: breadcrumbs: repositories: "Repositories" table: + id: 'ID' assigned: "Assigned" row_name: "Name" added_on: "Added on" @@ -1003,6 +1004,7 @@ en: head_title: "Inventories | %{library}" repository_row: modal_info: + ID: 'ID:' head_title: "Information for item '%{repository_row}'" added_on: "Added on" added_by: "Added by" diff --git a/spec/controllers/repository_rows_controller_spec.rb b/spec/controllers/repository_rows_controller_spec.rb index 0ee849e91..feb487cb0 100644 --- a/spec/controllers/repository_rows_controller_spec.rb +++ b/spec/controllers/repository_rows_controller_spec.rb @@ -62,7 +62,7 @@ describe RepositoryRowsController, type: :controller do describe 'json object' do it 'returns a valid object' do - params = { order: { 0 => { column: '3', dir: 'asc' } }, + params = { order: { 0 => { column: '4', dir: 'asc' } }, drow: '0', search: { value: '' }, length: '10', @@ -77,7 +77,7 @@ describe RepositoryRowsController, type: :controller do describe 'pagination' do it 'returns first 10 records' do - params = { order: { 0 => { column: '3', dir: 'asc' } }, + params = { order: { 0 => { column: '4', dir: 'asc' } }, drow: '0', search: { value: '' }, length: '10', @@ -86,11 +86,11 @@ describe RepositoryRowsController, type: :controller do get :index, params: params, format: :json response_body = JSON.parse(response.body) expect(response_body['data'].length).to eq 10 - expect(response_body['data'].first['2']).to eq 'row (0)' + expect(response_body['data'].first['3']).to eq 'row (0)' end it 'returns next 10 records' do - params = { order: { 0 => { column: '3', dir: 'asc' } }, + params = { order: { 0 => { column: '4', dir: 'asc' } }, drow: '0', search: { value: '' }, length: '10', @@ -99,11 +99,11 @@ describe RepositoryRowsController, type: :controller do get :index, params: params, format: :json response_body = JSON.parse(response.body) expect(response_body['data'].length).to eq 10 - expect(response_body['data'].first['2']).to eq 'row (10)' + expect(response_body['data'].first['3']).to eq 'row (10)' end it 'returns first 25 records' do - params = { order: { 0 => { column: '2', dir: 'desc' } }, + params = { order: { 0 => { column: '4', dir: 'desc' } }, drow: '0', search: { value: '' }, length: '25', diff --git a/spec/services/repository_datatable_service_spec.rb b/spec/services/repository_datatable_service_spec.rb index e32b13f19..2a5f9816a 100644 --- a/spec/services/repository_datatable_service_spec.rb +++ b/spec/services/repository_datatable_service_spec.rb @@ -52,7 +52,7 @@ describe RepositoryDatatableService do context 'object' do let(:params) do - { order: { 0 => { column: '2', dir: 'asc' } }, + { order: { 0 => { column: '3', dir: 'asc' } }, search: { value: 'row' } } end @@ -65,7 +65,7 @@ describe RepositoryDatatableService do contitions = subject.send(:build_conditions, params) expect(contitions[:search_value]).to eq 'row' expect(contitions[:order_by_column]).to eq( - { column: 2, dir: 'asc' } + { column: 3, dir: 'asc' } ) end end @@ -73,7 +73,7 @@ describe RepositoryDatatableService do describe '#sortable_columns' do it 'returns an array of all columns that are sortable' do columns = subject.send(:sortable_columns) - expect(columns.length).to eq 5 + expect(columns.length).to eq 6 end end @@ -92,7 +92,7 @@ describe RepositoryDatatableService do describe 'ordering' do it 'is ordered by row name asc' do - params = { order: { 0 => { column: '2', dir: 'asc' } }, + params = { order: { 0 => { column: '3', dir: 'asc' } }, search: { value: '' } } subject = RepositoryDatatableService.new(repository, params, @@ -102,7 +102,7 @@ describe RepositoryDatatableService do end it 'is ordered by row name desc' do - params = { order: { 0 => { column: '2', dir: 'desc' } }, + params = { order: { 0 => { column: '3', dir: 'desc' } }, search: { value: '' } } subject = RepositoryDatatableService.new(repository, params, @@ -121,7 +121,7 @@ describe RepositoryDatatableService do end it 'returns only the searched entity' do - params = { order: { 0 => { column: '2', dir: 'desc' } }, + params = { order: { 0 => { column: '4', dir: 'desc' } }, search: { value: 'test' } } subject = RepositoryDatatableService.new(repository, params, diff --git a/spec/support/api/schemas/repository_row_datatables.json b/spec/support/api/schemas/repository_row_datatables.json index 0a73d82f6..5c209e998 100644 --- a/spec/support/api/schemas/repository_row_datatables.json +++ b/spec/support/api/schemas/repository_row_datatables.json @@ -8,13 +8,14 @@ "data": { "type": "array", "items":{ - "required": ["DT_RowId", "1", "2", "3", "4", "recordEditUrl", "recordUpdateUrl", "recordInfoUrl"], + "required": ["DT_RowId", "1", "2", "3", "4", "5", "recordEditUrl", "recordUpdateUrl", "recordInfoUrl"], "properties": { "DT_RowId": { "type": "integer" }, "1": { "type": "string" }, - "2": { "type": "string" }, + "2": { "type": "integer" }, "3": { "type": "string" }, "4": { "type": "string" }, + "5": { "type": "string" }, "recordEditUrl": { "type": "string" }, "recordUpdateUrl": { "type": "string" }, "recordInfoUrl": { "type": "string" }