udongo 6.2.1 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29dca730c80a434de4529256c7c66f2a7aeface9
4
- data.tar.gz: 34415ad5601d4798303e198d6222d930927d8bc4
3
+ metadata.gz: e38f8e29debafdfa34fa918c39c0b455a98fdfe3
4
+ data.tar.gz: 86ad83a3e6098a11ab2a415a47a0ddc17e312950
5
5
  SHA512:
6
- metadata.gz: 47da2600be3624a3c92576caff5df06d634926e83fa0ad5ff8b06c372d309379aeeebf5c00ed334466d2844bb7a2ceba6419441b2d35c7044df26c76ca21496e
7
- data.tar.gz: f1bdfd297a917f5f57dcd8e387b41be876798b58a2195b9494d364fe5692b125935b88e852de609da17c91d3748e85a3bc9e899b59e81bc0c1a22851cef944c2
6
+ metadata.gz: 7aa4bee65d5e3855210ec61792837f9491bb86cc57e14bfc4a6b5480fe5ca344f3363b737b77582c80e63e747a395a4358874892e634ad5b82db3d6ff16ede45
7
+ data.tar.gz: 92ff03bbd6e0ca03dd8e65e3f67971b767d472dbdc1335015db7ed7455b55c7590f6e55827ef9cb4fc9f775987c7e229bbb9a2ded6b067404cb2a8d9b2f59ee5
@@ -1,6 +1,6 @@
1
1
  class Backend::TagboxController < Backend::BaseController
2
2
  def index
3
- tags = Tag.by_locale(locale).pluck(:name).map do |name|
3
+ tags = Tag.by_locale(locale).order(:name).pluck(:name).map do |name|
4
4
  { label: name, value: name }
5
5
  end
6
6
 
@@ -0,0 +1,52 @@
1
+ class Backend::TagsController < Backend::BaseController
2
+ include Concerns::PaginationController
3
+
4
+ before_action -> { breadcrumb.add t('b.tags'), backend_tags_path }
5
+ before_action :find_model, only: [:show, :edit, :update, :destroy]
6
+
7
+ def index
8
+ @search = Tag.ransack params[:q]
9
+ @tags = @search.result(distinct: true).order(:name).page(page_number).per_page(15)
10
+ end
11
+
12
+ def show
13
+ redirect_to edit_backend_tag_path(@tag)
14
+ end
15
+
16
+ def new
17
+ @tag = Tag.new
18
+ end
19
+
20
+ def create
21
+ @tag = Tag.new(allowed_params)
22
+
23
+ if @tag.save
24
+ redirect_to backend_tags_path, notice: translate_notice(:added, :tag)
25
+ else
26
+ render :new
27
+ end
28
+ end
29
+
30
+ def destroy
31
+ @tag.destroy
32
+ redirect_to backend_tags_path, notice: translate_notice(:deleted, :tag)
33
+ end
34
+
35
+ def update
36
+ if @tag.update_attributes allowed_params
37
+ redirect_to backend_tags_path, notice: translate_notice(:edited, :tag)
38
+ else
39
+ render :edit
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def allowed_params
46
+ params.require(:tag).permit(:locale, :name, :slug)
47
+ end
48
+
49
+ def find_model
50
+ @tag = Tag.find params[:id]
51
+ end
52
+ end
@@ -7,6 +7,17 @@ module LinkHelper
7
7
  )
8
8
  end
9
9
 
10
+ # Say you have a page with a title: 'Foo'. When calling this method with that
11
+ # page object, you would get a link to /backend/pages/edit/1 with the title
12
+ # as label.
13
+ def link_to_edit_with_label(value, locale)
14
+ link_to(
15
+ object_label(value, locale),
16
+ path_from_string_or_object(value, 'edit_'),
17
+ title: t('b.edit')
18
+ )
19
+ end
20
+
10
21
  def link_to_edit(value)
11
22
  link_to(
12
23
  icon(:pencil_square_o),
@@ -32,12 +43,23 @@ module LinkHelper
32
43
  )
33
44
  end
34
45
 
35
- private
36
-
37
46
  def path_from_string_or_object(value, prefix = nil)
38
47
  return value if value.is_a?(String)
39
48
 
40
49
  str = "#{prefix}#{Udongo::ObjectPath.find(value)}"
41
50
  send(str, *Udongo::ObjectPath.remove_symbols(value))
42
51
  end
52
+
53
+ def object_label(value, locale)
54
+ obj = Udongo::ObjectPath.remove_symbols(value)
55
+ obj = obj.last if obj.is_a?(Array)
56
+
57
+ I18n.with_locale(locale) do
58
+ return obj.title if obj.respond_to?(:title)
59
+ return obj.name if obj.respond_to?(:name)
60
+ return obj.description if obj.respond_to?(:description)
61
+ end
62
+
63
+ "#{I18n.t("b.#{obj.class.name.underscore}")}: #{obj.id}"
64
+ end
43
65
  end
@@ -3,7 +3,7 @@ module Concerns
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- has_many :images, as: :imageable
6
+ has_many :images, as: :imageable, dependent: :destroy
7
7
  end
8
8
 
9
9
  def imageable?
@@ -3,7 +3,7 @@ module Concerns
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- has_many :tagged_items, as: :taggable
6
+ has_many :tagged_items, as: :taggable, dependent: :destroy
7
7
  end
8
8
 
9
9
  def related(locale = I18n.locale)
data/app/models/tag.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  class Tag < ApplicationRecord
2
2
  include Concerns::Locale
3
3
 
4
+ has_many :tagged_items, dependent: :destroy
5
+
4
6
  validates :locale, :name, :slug, presence: true
5
7
  validates :slug, uniqueness: { case_sensitive: false, scope: :locale }
6
8
  end
@@ -0,0 +1,36 @@
1
+ <% count = asset.images.count + asset.content_pictures.count %>
2
+ <% lbl = "#{t(true.to_s)} (#{count})" %>
3
+ <%= link_to icon(:search, lbl), '#', data: { toggle: 'modal', target: "#asset-usages-#{asset.id}" }%>
4
+
5
+ <div class="modal fade" id="asset-usages-<%= asset.id %>" tabindex="-1" role="dialog" aria-labelledby="asset-usages-title" aria-hidden="true">
6
+ <div class="modal-dialog modal-lg" role="document">
7
+ <div class="modal-content">
8
+ <div class="modal-header">
9
+ <h5 class="modal-title" id="asset-usages-title"><%= asset.description %></h5>
10
+ <button type="button" class="close" data-dismiss="modal" aria-label="<%= t 'b.close' %>">
11
+ <span aria-hidden="true">&times;</span>
12
+ </button>
13
+ </div>
14
+ <div class="modal-body">
15
+ <ul>
16
+ <% asset.images.each do |img| %>
17
+ <li>
18
+ <%= t "b.#{img.imageable.class.name.underscore}" %> &gt;
19
+ <%= link_to_edit_with_label [:backend, img.imageable], default_app_locale %>
20
+ </li>
21
+ <% end %>
22
+
23
+ <% asset.content_pictures.each do |picture| %>
24
+ <li>
25
+ <%= t "b.#{picture.parent.class.name.underscore}" %> &gt; <%= t 'b.flexible_content' %> &gt;
26
+ <%= link_to_edit_with_label [:backend, picture.parent], default_app_locale %>
27
+ </li>
28
+ <% end %>
29
+ </ul>
30
+ </div>
31
+ <div class="modal-footer">
32
+ <button type="button" class="btn btn-secondary" data-dismiss="modal"><%= t 'b.close' %></button>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </div>
@@ -13,6 +13,7 @@
13
13
  <th><%= t 'b.type' %></th>
14
14
  <th><%= t 'b.size' %></th>
15
15
  <th><%= t 'b.description' %></th>
16
+ <th><%= t 'b.used' %></th>
16
17
  <th><%= t 'b.last_changed_at' %></th>
17
18
  <th>&nbsp;</th>
18
19
  </tr>
@@ -31,6 +32,13 @@
31
32
  <td><%= a.actual_filename.split('.').last.upcase %></td>
32
33
  <td><%= number_to_human_size a.filesize %></td>
33
34
  <td><%= simple_format a.description %></td>
35
+ <td>
36
+ <% if a.deletable? %>
37
+ <%= t false.to_s %>
38
+ <% else %>
39
+ <%= render 'asset_usages', asset: a %>
40
+ <% end %>
41
+ </td>
34
42
  <td><%= l a.updated_at, format: :short %></td>
35
43
  <td class="text-right">
36
44
  <%= link_to_edit [:backend, a] %>
@@ -0,0 +1,24 @@
1
+ <div class="card filter">
2
+ <div class="card-block">
3
+ <%= search_form_for [:backend, @search] do |f| %>
4
+ <div class="row">
5
+ <div class="col-md-4 form-group">
6
+ <%= f.search_field :name_cont, placeholder: t('b.name'), class: 'form-control' %>
7
+ </div>
8
+
9
+ <div class="col-md-4 form-group">
10
+ <% selected_locale = params[:q] ? params[:q][:locale_eq] : nil %>
11
+ <% options = Udongo.config.i18n.app.locales %>
12
+ <%= f.select :locale_eq, options_for_select(options, selected_locale), { prompt: t('b.locale') }, class: 'form-control' %>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="row">
17
+ <div class="col-md-6">
18
+ <%= f.submit class: 'btn btn-primary btn-sm' %>
19
+ <%= link_to t('b.erase_filters'), backend_tags_path, class: 'btn btn-link' %>
20
+ </div>
21
+ </div>
22
+ <% end %>
23
+ </div>
24
+ </div>
@@ -0,0 +1,21 @@
1
+ <%= render 'backend/general_form_error', object: model %>
2
+
3
+ <%= simple_form_for [:backend, model] do |f| %>
4
+ <div class="row">
5
+ <div class="col-md-6">
6
+ <div class="card">
7
+ <div class="card-header">
8
+ <%= t 'b.general' %>
9
+ </div>
10
+
11
+ <div class="card-block">
12
+ <%= f.input :locale, collection: Udongo.config.i18n.app.locales, include_blank: false %>
13
+ <%= f.input :name %>
14
+ <%= f.input :slug %>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+
20
+ <%= render 'backend/form_actions', cancel_url: backend_tags_path %>
21
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <div class="modal fade" id="tag-usages-<%= tag.id %>" tabindex="-1" role="dialog" aria-labelledby="tag-usages-title" aria-hidden="true">
2
+ <div class="modal-dialog modal-lg" role="document">
3
+ <div class="modal-content">
4
+ <div class="modal-header">
5
+ <h5 class="modal-title" id="tag-usages-title"><%= tag.name %></h5>
6
+ <button type="button" class="close" data-dismiss="modal" aria-label="<%= t 'b.close' %>">
7
+ <span aria-hidden="true">&times;</span>
8
+ </button>
9
+ </div>
10
+ <div class="modal-body">
11
+ <ul>
12
+ <% tag.tagged_items.order(:taggable_type).each do |obj| %>
13
+ <li>
14
+ <%= t "b.#{obj.taggable.class.name.underscore}" %> &gt;
15
+ <%= link_to_edit_with_label [:backend, obj.taggable], tag.locale %>
16
+ </li>
17
+ <% end %>
18
+ </ul>
19
+ </div>
20
+ <div class="modal-footer">
21
+ <button type="button" class="btn btn-secondary" data-dismiss="modal"><%= t 'b.close' %></button>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
@@ -0,0 +1,4 @@
1
+ <% breadcrumb.add @tag.name %>
2
+ <% breadcrumb.add t('b.edit') %>
3
+ <%= render 'backend/breadcrumbs' %>
4
+ <%= render 'form', model: @tag %>
@@ -0,0 +1,47 @@
1
+ <%= render 'backend/breadcrumbs' %>
2
+ <%= render 'filter' %>
3
+
4
+ <p class="text-right">
5
+ <%= link_to icon(:plus, t('b.add')), new_backend_tag_path, class: 'btn btn-primary btn-sm' %>
6
+ </p>
7
+
8
+ <% if @tags.any? %>
9
+ <table class="table table-striped table-hover">
10
+ <thead class="thead-inverse">
11
+ <tr>
12
+ <th><%= t 'b.name' %></th>
13
+ <th><%= t 'b.locale' %></th>
14
+ <th><%= t 'b.used' %></th>
15
+ <th>&nbsp;</th>
16
+ </tr>
17
+ </thead>
18
+
19
+ <tbody>
20
+ <% @tags.each do |tag| %>
21
+ <tr>
22
+ <td><%= tag.name %></td>
23
+ <td><%= tag.locale.to_s.upcase %></td>
24
+ <td>
25
+ <% if tag.tagged_items.any? %>
26
+ <% lbl = "#{t(true.to_s)} (#{tag.tagged_items.count})" %>
27
+ <%= link_to icon(:search, lbl), '#', data: { toggle: 'modal', target: "#tag-usages-#{tag.id}" }%>
28
+
29
+ <%= render 'tag_usages', tag: tag %>
30
+
31
+ <% else %>
32
+ <%= t false.to_s %>
33
+ <% end %>
34
+ </td>
35
+ <td class="text-right">
36
+ <%= link_to_edit [:backend, tag] %>
37
+ <%= link_to_delete [:backend, tag] %>
38
+ </td>
39
+ </tr>
40
+ <% end %>
41
+ </tbody>
42
+ </table>
43
+
44
+ <%= udongo_paginate @tags %>
45
+ <% else %>
46
+ <p><%= t 'b.msg.no_items' %></p>
47
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% breadcrumb.add t('b.new') %>
2
+ <%= render 'backend/breadcrumbs' %>
3
+ <%= render 'form', model: @tag %>
@@ -8,6 +8,7 @@
8
8
  <%= link_to t('b.snippets'), backend_snippets_path, class: 'dropdown-item' %>
9
9
  <%= link_to t('b.files'), backend_assets_path, class: 'dropdown-item' %>
10
10
  <%= link_to t('b.forms'), backend_forms_path, class: 'dropdown-item' %>
11
+ <%= link_to t('b.tags'), backend_tags_path, class: 'dropdown-item' %>
11
12
  </div>
12
13
  </li>
13
14
 
data/changelog.md CHANGED
@@ -1,3 +1,13 @@
1
+ 6.3.0 - 2017-06-05
2
+ --
3
+ * The tagbox autocomplete now orders its results alphabetically.
4
+ * A general tag module was added. This allows you to see which tags have been
5
+ used throughout the system and add new ones.
6
+ * Bugfix: when a taggable item is deleted, it's tagged items are now destroyed.
7
+ * When checking the overview of files, you can now see if those assets are used.
8
+ * Bugfix: the images relation was not dependent destroy.
9
+
10
+
1
11
  6.2.1 - 2017-06-04
2
12
  --
3
13
  * Added email and tel as valid form types for FormField.
@@ -8,9 +8,12 @@ en:
8
8
  advanced: Advanced
9
9
  article: Article
10
10
  articles: Articles
11
+ asset: Asset
12
+ assets: Assets
11
13
  author: Author
12
14
  cancel: Cancel
13
15
  choose_an_existing_image: Choose an existing image
16
+ close: Close
14
17
  content: Content
15
18
  current_image: Current image
16
19
  custom_title: Custom title
@@ -27,6 +30,7 @@ en:
27
30
  email_template: E-mail template
28
31
  email_templates: E-mail templates
29
32
  enabled: Enabled
33
+ erase_filters: Erase filters
30
34
  extra: Extra
31
35
  file: File
32
36
  files: Files
@@ -84,6 +88,7 @@ en:
84
88
  status_code: Status code
85
89
  subject: Subject
86
90
  synonyms: Synonyms
91
+ tag: Tag
87
92
  tags: Tags
88
93
  telephone: Telephone
89
94
  title: Title
@@ -46,6 +46,8 @@ en:
46
46
  seo_description: Description
47
47
  seo_keywords: Keywords
48
48
  seo_custom: Extra meta-tags
49
+ sitemap: Sitemap?
50
+ slug: Slug
49
51
  subject: Subject
50
52
  subtitle: Subtitle
51
53
  summary: Summary
@@ -8,9 +8,12 @@ nl:
8
8
  advanced: Geavanceerd
9
9
  article: Artikel
10
10
  articles: Artikels
11
+ asset: Bestand
12
+ assets: Bestanden
11
13
  author: Auteur
12
14
  cancel: Annuleren
13
15
  choose_an_existing_image: Kies bestaande afbeelding
16
+ close: Sluiten
14
17
  content: Inhoud
15
18
  current_image: Huidige afbeelding
16
19
  custom_title: Aangepaste titel
@@ -27,6 +30,7 @@ nl:
27
30
  email_template: E-mail template
28
31
  email_templates: E-mail templates
29
32
  enabled: Ingeschakeld
33
+ erase_filters: Wis filters
30
34
  extra: Extra
31
35
  file: Bestand
32
36
  files: Bestanden
@@ -84,6 +88,7 @@ nl:
84
88
  status_code: Statuscode
85
89
  subject: Onderwerp
86
90
  synonyms: Synoniemen
91
+ tag: Tag
87
92
  tags: Tags
88
93
  telephone: Telefoonnummer
89
94
  title: Titel
@@ -47,6 +47,7 @@ nl:
47
47
  seo_keywords: Sleutelwoorden
48
48
  seo_custom: Extra meta-tags
49
49
  sitemap: Sitemap?
50
+ slug: Slug
50
51
  subject: Onderwerp
51
52
  subtitle: Subtitel
52
53
  success_message: Melding bij succesvolle verzending
data/config/routes.rb CHANGED
@@ -17,12 +17,12 @@ Rails.application.routes.draw do
17
17
  get 'search' => 'search#query'
18
18
  get 'seo/slugify' => 'seo#slugify'
19
19
 
20
-
21
20
  resources :sessions, only: [:new, :create, :destroy]
22
21
  resources :admins
23
22
  resources :users
24
23
  resources :redirects, except: :show
25
24
  resources :search_synonyms, except: :show
25
+ resources :tags
26
26
 
27
27
  resources :pages, except: [:show] do
28
28
  concerns :translatable
@@ -1,3 +1,3 @@
1
1
  module Udongo
2
- VERSION = '6.2.1'
2
+ VERSION = '6.3.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: udongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.1
4
+ version: 6.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davy Hellemans
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-04 00:00:00.000000000 Z
12
+ date: 2017-06-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -486,6 +486,7 @@ files:
486
486
  - app/controllers/backend/sessions_controller.rb
487
487
  - app/controllers/backend/snippets_controller.rb
488
488
  - app/controllers/backend/tagbox_controller.rb
489
+ - app/controllers/backend/tags_controller.rb
489
490
  - app/controllers/backend/users/base_controller.rb
490
491
  - app/controllers/backend/users_controller.rb
491
492
  - app/controllers/catch_all_controller.rb
@@ -621,6 +622,7 @@ files:
621
622
  - app/views/backend/articles/images/index.html.erb
622
623
  - app/views/backend/articles/index.html.erb
623
624
  - app/views/backend/articles/new.html.erb
625
+ - app/views/backend/assets/_asset_usages.html.erb
624
626
  - app/views/backend/assets/_filter.html.erb
625
627
  - app/views/backend/assets/_form.html.erb
626
628
  - app/views/backend/assets/edit.html.erb
@@ -700,6 +702,12 @@ files:
700
702
  - app/views/backend/snippets/edit_translation.html.erb
701
703
  - app/views/backend/snippets/index.html.erb
702
704
  - app/views/backend/snippets/new.html.erb
705
+ - app/views/backend/tags/_filter.html.erb
706
+ - app/views/backend/tags/_form.html.erb
707
+ - app/views/backend/tags/_tag_usages.html.erb
708
+ - app/views/backend/tags/edit.html.erb
709
+ - app/views/backend/tags/index.html.erb
710
+ - app/views/backend/tags/new.html.erb
703
711
  - app/views/backend/users/_filter.html.erb
704
712
  - app/views/backend/users/_form.html.erb
705
713
  - app/views/backend/users/_tabs.html.erb