From 417b9bff0a8fb20b6f1bb66a715bc6aa0b515ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Wed, 12 Oct 2022 11:31:01 +0200 Subject: [PATCH] New UI: Add additional filter 'Locked documents' #1124 --- app/models/dmsf_query.rb | 31 ++++++++++++++++++++++++++++--- config/locales/cs.yml | 5 +++-- config/locales/de.yml | 1 + config/locales/en.yml | 1 + config/locales/es.yml | 1 + config/locales/fa.yml | 1 + config/locales/fr.yml | 1 + config/locales/hu.yml | 1 + config/locales/it.yml | 1 + config/locales/ja.yml | 1 + config/locales/ko.yml | 1 + config/locales/nl.yml | 1 + config/locales/pl.yml | 1 + config/locales/pt-BR.yml | 1 + config/locales/sl.yml | 1 + config/locales/zh-TW.yml | 1 + config/locales/zh.yml | 1 + 17 files changed, 46 insertions(+), 5 deletions(-) diff --git a/app/models/dmsf_query.rb b/app/models/dmsf_query.rb index ce3e798a..7d05bebb 100644 --- a/app/models/dmsf_query.rb +++ b/app/models/dmsf_query.rb @@ -101,6 +101,7 @@ class DmsfQuery < Query # Returns the count of all items def dmsf_count + Rails.logger.info ">>> #{base_scope.where(statement).to_sql}" base_scope.where(statement).count rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new e.message @@ -110,6 +111,7 @@ class DmsfQuery < Query add_available_filter 'author', type: :list, values: lambda { author_values } add_available_filter 'title', type: :text add_available_filter 'updated', type: :date_past + add_available_filter 'locked', type: :list, values: [[l(:general_text_yes), '1'], [l(:general_text_no), '0']] add_custom_fields_filters DmsfFileRevisionCustomField.all end @@ -240,6 +242,15 @@ class DmsfQuery < Query end end + def now + case ActiveRecord::Base.connection.adapter_name.downcase + when 'sqlserver' + 'GETDATE()' + else + 'NOW()' + end + end + def get_cf_query(id, type, table) if Redmine::Database.mysql? || Redmine::Database.sqlite? aggr_func = 'GROUP_CONCAT(value)' @@ -277,6 +288,7 @@ class DmsfQuery < Query 0 AS customized_id, projects.description AS description, '' AS comment, + 0 AS locked, 0 AS sort#{cf_columns}}).visible if dmsf_folder_id || deleted scope.none @@ -313,8 +325,11 @@ class DmsfQuery < Query dmsf_folders.id AS customized_id, dmsf_folders.description AS description, '' AS comment, + (case when dmsf_locks.id IS NULL then 0 else 1 end) AS locked, 1 AS sort#{cf_columns}}). - joins('LEFT JOIN users ON dmsf_folders.user_id = users.id') + joins('LEFT JOIN users ON dmsf_folders.user_id = users.id'). + joins("LEFT JOIN dmsf_locks ON dmsf_folders.id = dmsf_locks.entity_id AND dmsf_locks.entity_type = 1 AND + (dmsf_locks.expires_at IS NULL OR dmsf_locks.expires_at > #{now})") return scope.none unless project if deleted scope = scope.deleted @@ -360,9 +375,12 @@ class DmsfQuery < Query dmsf_folders.id AS customized_id, dmsf_folders.description AS description, '' AS comment, + (case when dmsf_locks.id IS NULL then 0 else 1 end) AS locked, 1 AS sort#{cf_columns}}). joins('LEFT JOIN dmsf_folders ON dmsf_links.target_id = dmsf_folders.id'). - joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)') + joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)'). + joins("LEFT JOIN dmsf_locks ON dmsf_folders.id = dmsf_locks.entity_id AND dmsf_locks.entity_type = 1 AND + (dmsf_locks.expires_at IS NULL OR dmsf_locks.expires_at > #{now})") if deleted scope = scope.deleted else @@ -407,9 +425,12 @@ class DmsfQuery < Query dmsf_file_revisions.id AS customized_id, dmsf_file_revisions.description AS description, dmsf_file_revisions.comment AS comment, + (case when dmsf_locks.id IS NULL then 0 else 1 end) AS locked, 2 AS sort#{cf_columns}}). joins(:dmsf_file_revisions). joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id '). + joins("LEFT JOIN dmsf_locks ON dmsf_files.id = dmsf_locks.entity_id AND dmsf_locks.entity_type = 0 AND + (dmsf_locks.expires_at IS NULL OR dmsf_locks.expires_at > #{now})"). where(sub_query) if deleted scope = scope.deleted @@ -422,7 +443,7 @@ class DmsfQuery < Query if statement.present? || deleted scope.where dmsf_files: { project_id: project.id } else - scope.where dmsf_files: { project_id: project.id, dmsf_folder_id: nil } + scope.where(dmsf_files: { project_id: project.id, dmsf_folder_id: nil }) end end end @@ -455,10 +476,13 @@ class DmsfQuery < Query dmsf_file_revisions.id AS customized_id, dmsf_file_revisions.description AS description, dmsf_file_revisions.comment AS comment, + (case when dmsf_locks.id IS NULL then 0 else 1 end) AS locked, 2 AS sort#{cf_columns}}). joins('JOIN dmsf_files ON dmsf_files.id = dmsf_links.target_id'). joins('JOIN dmsf_file_revisions ON dmsf_file_revisions.dmsf_file_id = dmsf_files.id'). joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id '). + joins("LEFT JOIN dmsf_locks ON dmsf_files.id = dmsf_locks.entity_id AND dmsf_locks.entity_type = 0 AND + (dmsf_locks.expires_at IS NULL OR dmsf_locks.expires_at > #{now})"). where(sub_query) if deleted scope = scope.deleted @@ -505,6 +529,7 @@ class DmsfQuery < Query 0 AS customized_id, '' AS description, '' AS comment, + 0 AS locked, 2 AS sort#{cf_columns}}). joins('LEFT JOIN users ON dmsf_links.user_id = users.id ') if deleted diff --git a/config/locales/cs.yml b/config/locales/cs.yml index eee854f6..f220088e 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -404,6 +404,7 @@ cs: field_first_at: První field_last_at: Poslední field_size: Velikost + field_locked: Zamčen label_add_width: Přidat s @@ -459,8 +460,8 @@ cs: label_column_description: Popis label_column_comment: Komentář - label_dmsf_global_menu_disabled: Global DMS menu disabled - note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu. + label_dmsf_global_menu_disabled: Globální DMS menu zakázáno + note_dmsf_global_menu_disabled: Pokud je zašrtnuto, tak položka DMS není v hlavním menu. easy_pages: modules: diff --git a/config/locales/de.yml b/config/locales/de.yml index ea57b990..38c08328 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -400,6 +400,7 @@ de: field_first_at: Erste field_last_at: Letzte field_size: Größe + field_locked: Gesperrt label_add_width: Zugeben mit diff --git a/config/locales/en.yml b/config/locales/en.yml index 00da2821..ee8ab184 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -404,6 +404,7 @@ en: field_first_at: First field_last_at: Last field_size: Size + field_locked: Locked label_add_width: Add with diff --git a/config/locales/es.yml b/config/locales/es.yml index 805083a4..99a130b8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -404,6 +404,7 @@ es: field_first_at: First field_last_at: Last field_size: Tamaño + field_locked: Bloqueado label_add_width: Add with diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 6efc6045..08eee264 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -385,6 +385,7 @@ fa: field_first_at: اولین field_last_at: آخرین field_size: حجم + field_locked: Locked label_add_width: اضافه با diff --git a/config/locales/fr.yml b/config/locales/fr.yml index af7c46e3..9408e1ba 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -404,6 +404,7 @@ fr: field_first_at: First field_last_at: Last field_size: Taille + field_locked: Verrouillé label_add_width: Add with diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 8b0ca9bc..a5a3b9e9 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -403,6 +403,7 @@ hu: field_first_at: First field_last_at: Last field_size: Méret + field_locked: Lezárták label_add_width: Add with diff --git a/config/locales/it.yml b/config/locales/it.yml index 199423bc..8e6b36fe 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -404,6 +404,7 @@ it: # Italian strings thx 2 Matteo Arceci! field_first_at: First field_last_at: Last field_size: Dydis + field_locked: Bloccato label_add_width: Add with diff --git a/config/locales/ja.yml b/config/locales/ja.yml index f336d0ab..a24094e8 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -405,6 +405,7 @@ ja: field_first_at: First field_last_at: Last field_size: サイズ + field_locked: Locked label_add_width: Add with diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 63a41cb0..aa42153a 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -404,6 +404,7 @@ ko: field_first_at: 처음 field_last_at: 마지막 field_size: 크기 + field_locked: Locked label_add_width: Add with diff --git a/config/locales/nl.yml b/config/locales/nl.yml index aa15e577..e2b7fa74 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -404,6 +404,7 @@ nl: field_first_at: First field_last_at: Last field_size: Grootte + field_locked: Vergrendeld label_add_width: Add with diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 3a0fc422..c74ce554 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -404,6 +404,7 @@ pl: field_first_at: First field_last_at: Last field_size: Rozmiar + field_locked: Zablokowany label_add_width: Add with diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index d9db5a24..cdc2476c 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -404,6 +404,7 @@ pt-BR: field_first_at: First field_last_at: Last field_size: Tamanho + field_locked: Bloqueado label_add_width: Add with diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 406b4992..e1ee796c 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -404,6 +404,7 @@ sl: field_first_at: First field_last_at: Last field_size: Velikost + field_locked: Zaklenjena label_add_width: Add with diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 14862916..9f7d89e8 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -403,6 +403,7 @@ zh-TW: field_first_at: First field_last_at: Last field_size: 大小 + field_locked: Locked label_add_width: Add with diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 2a79255e..4ac65a5b 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -404,6 +404,7 @@ zh: field_first_at: First field_last_at: Last field_size: 大小 + field_locked: Locked label_add_width: Add with