goldencobra 1.3.4 → 1.4.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.
@@ -72,6 +72,7 @@ module Goldencobra
72
72
  has_many :vita_steps, :as => :loggable, :class_name => Goldencobra::Vita
73
73
  has_many :comments, :class_name => Goldencobra::Comment
74
74
  has_many :permissions, :class_name => Goldencobra::Permission, :foreign_key => "subject_id", :conditions => {:subject_class => "Goldencobra::Article"}
75
+ belongs_to :articletype, :class_name => Goldencobra::Articletype, :foreign_key => "article_type", :primary_key => "name"
75
76
 
76
77
  belongs_to :author
77
78
 
@@ -151,6 +152,10 @@ module Goldencobra
151
152
  # **************************
152
153
  # **************************
153
154
 
155
+ def parent_path
156
+ self.path.map(&:title).join(" / ")
157
+ end
158
+
154
159
  #scope for index articles, display show articles, index articless or both articles of an current type
155
160
  def self.articletype_for_index(current_article)
156
161
  if current_article.display_index_types == "show"
@@ -483,7 +488,11 @@ module Goldencobra
483
488
 
484
489
  def selected_layout
485
490
  if self.template_file.blank?
486
- "application"
491
+ if self.articletype.present? && self.articletype.default_template_file.present?
492
+ self.articletype.default_template_file
493
+ else
494
+ "application"
495
+ end
487
496
  else
488
497
  self.template_file
489
498
  end
@@ -652,7 +661,11 @@ module Goldencobra
652
661
 
653
662
  def set_standard_application_template
654
663
  if self.template_file.blank?
655
- self.template_file = "application"
664
+ if self.articletype.present? && self.articletype.default_template_file.present?
665
+ self.template_file = self.articletype.default_template_file
666
+ else
667
+ self.template_file = "application"
668
+ end
656
669
  end
657
670
  end
658
671
 
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ module Goldencobra
4
+ class Articletype < ActiveRecord::Base
5
+ attr_accessible :default_template_file, :name, :fieldgroups_attributes
6
+ has_many :articles, :class_name => Goldencobra::Article, :foreign_key => :article_type, :primary_key => :name
7
+ validates_uniqueness_of :name
8
+
9
+ has_many :fieldgroups, :class_name => Goldencobra::ArticletypeGroup
10
+ accepts_nested_attributes_for :fieldgroups, :allow_destroy => true
11
+
12
+ ArticleFieldOptions = {
13
+ :title => %{<% f.input :title, :label => "Titel", :hint => "Der Titel/die Überschrift des Artikels/der Seite, hier können Leerzeichen und Sonderzeichen verwendet werden" %>},
14
+ :subtitle => %{<% f.input :subtitle, :label => "Untertitel" %>},
15
+ :content => %{<% f.input :content, :label => "Haupt-Textfeld", :input_html => { :class => "tinymce" } %>},
16
+ :teaser => %{<% f.input :teaser, :hint => "Dieser Text beschreibt den Artikel auf Übersichtsseiten kurz, außerdem wird er für die Beschreibung bei Google & Facebook genutzt", :input_html => { :rows => 5 } %>},
17
+ :summary => %{<% f.input :summary, :label => "Zusammenfassung", hint: "Dient einer zusammenfassenden Einleitung in den Haupttext und wird hervorgehoben dargestellt", :input_html => { :rows => 5 } %>},
18
+ :tag_list => %{<% f.input :tag_list, :label => "Liste von internen Tags", :hint => "Tags sind komma-getrennte Werte, mit denen sich ein Artikel intern gruppiern l&auml;sst", :wrapper_html => { class: 'expert' } %>},
19
+ :frontend_tag_list => %{<% f.input :frontend_tag_list, label: "Filterkriterium", hint: "Hier eingetragene Begriffe werden auf &Uuml;bersichtsseiten als Filteroptionen angeboten.", :wrapper_html => { class: 'expert' } %>},
20
+ :active => %{<% f.input :active, :label => "Aktiv?", :hint => "Soll dieser Artikel im System aktiv und online sichtbar sein?", :wrapper_html => { class: 'expert' } %>},
21
+ :active_since => %{<% f.input :active_since, :label => "Online seit", :hint => "Wenn der Artikel online ist, seit wann ist er online? Bsp: 02.10.2011 15:35", as: :string, :input_html => { class: "", :size => "20" }, :wrapper_html => { class: 'expert' } %>},
22
+ :context_info => %{<% f.input :context_info, :label => "Weiterer Inhalt", :input_html => { :class => "tinymce" }, :hint => "Dieser Text ist f&uuml;r eine Sidebar gedacht" %>},
23
+ :metatags => %{<% f.has_many :metatags do |m|
24
+ m.input :name, :label => "Art", :as => :select, :collection => Goldencobra::Article::MetatagNames, :input_html => { :class => 'metatag_names'}, :hint => "Hier k&ouml;nnen Sie die verschiedenen Metatags definieren, sowie alle Einstellungen f&uuml;r den OpenGraph vonehmen"
25
+ m.input :value, :label => "Wert", :input_html => { :class => 'metatag_values'}
26
+ m.input :_destroy, :label => "entfernen/zurücksetzen", :hint => "hiermit werden die Werte entfernt bzw. auf ihren Ursprung zurückgesetzt", :as => :boolean
27
+ end %>},
28
+ :breadcrumb => %{<% f.input :breadcrumb, :label => "Breadcrumb-Titel", :hint => "Kurzer Titel f&uuml;r die Breadcrumb-Navigation" %>},
29
+ :url_name => %{<% f.input :url_name, :label => "Website-Adresse des Artikels", :hint => "Nicht mehr als 64 Zeichen, sollte keine Umlaute, Sonderzeichen oder Leerzeichen enthalten. Wenn die Seite unter 'http://meine-seite.de/mein-artikel' erreichbar sein soll, tragen Sie hier 'mein-artikel' ein.", required: false %>},
30
+ :parent_id => %{<% f.input :parent_id, :label => "Übergeordneter Artikel", :hint => "Auswahl des Artikels, der in der Seitenstruktur _oberhalb_ liegen soll. Beispiel: http://www.meine-seite.de/der-oberartikel/mein-artikel", :as => :select, :collection => Goldencobra::Article.all.map{|c| [c.parent_path, c.id]}.sort{|a,b| a[0] <=> b[0]}, :include_blank => true, :input_html => { :class => 'chzn-select-deselect', :style => 'width: 70%;', 'data-placeholder' => 'Elternelement auswählen' } %>},
31
+ :canonical_url => %{<% f.input :canonical_url, :label => "Canonical URL", :hint => "Falls auf dieser Seite Inhalte erscheinen, die vorher schon auf einer anderen Seite erschienen sind, sollte hier die URL der Quellseite eingetragen werden, um von Google nicht f&uuml;r doppelten Inhalt abgestraft zu werden" %>},
32
+ :enable_social_sharing => %{<% f.input :enable_social_sharing, :label => "'Social Sharing'-Aktionen anzeigen", :hint => "Sollen Besucher Aktionen angezeigt bekommen, um diesen Artikel in den sozialen Netzwerken zu verbreiten?" %>},
33
+ :robots_no_index => %{<% f.input :robots_no_index, :label => "Artikel nicht durch Suchmaschinen finden lassen", :hint => "Um bei Google nicht in Konkurrenz zu anderen wichtigen Einzelseiten der eigenen Webseite zu treten, kann hier Google mitgeteilt werden, diese Seite nicht zu indizieren" %>},
34
+ :cacheable => %{<% f.input :cacheable, :label => "Artikel cachebar", :as => :boolean, :hint => "Dieser Artikel darf im Cache liegen" %>},
35
+ :commentable => %{<% f.input :commentable, :label => "Artikel kommentierbar", :as => :boolean, :hint => "Kommentarfunktion für diesen Artikel aktivieren?" %>},
36
+ :dynamic_redirection => %{<% f.input :dynamic_redirection, :label => "Automatische Weiterleitung", :as => :select, :collection => Goldencobra::Article::DynamicRedirectOptions.map{|a| [a[1], a[0]]}, :include_blank => false %>},
37
+ :external_url_redirect => %{<% f.input :external_url_redirect, :label => "Weiterleitung zu externer URL" %>},
38
+ :redirect_link_title => %{<% f.input :redirect_link_title, :label => "Name des externen Links" %>},
39
+ :redirection_target_in_new_window => %{<% f.input :redirection_target_in_new_window, :label => "Weiterleitung in neuem Fenster öffnen?" %>},
40
+ :author => %{<% f.input :author, :label => "Autor", :hint => "Wer ist der Verfasser dieses Artikels?" %>},
41
+ :permissions => %{<% f.has_many :permissions do |p|
42
+ p.input :role, :include_blank => "Alle"
43
+ p.input :action, :as => :select, :collection => Goldencobra::Permission::PossibleActions, :include_blank => false
44
+ p.input :_destroy, :as => :boolean
45
+ end %>},
46
+ :article_images => %{<% f.has_many :article_images do |ai|
47
+ ai.input :image, :as => :select, :collection => Goldencobra::Upload.order("updated_at DESC").map{|c| [c.complete_list_name, c.id]}, :input_html => { :class => 'article_image_file chzn-select', :style => 'width: 70%;', 'data-placeholder' => 'Medium auswählen' }, :label => "Medium wählen"
48
+ ai.input :position, :as => :select, :collection => Goldencobra::Setting.for_key("goldencobra.article.image_positions").split(",").map(&:strip), :include_blank => false
49
+ ai.input :_destroy, :as => :boolean
50
+ end %>}
51
+ }
52
+
53
+ end
54
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ module Goldencobra
4
+ class ArticletypeField < ActiveRecord::Base
5
+ attr_accessible :articletype_group_id, :class_name, :fieldname, :sorter
6
+
7
+ belongs_to :group, :class_name => Goldencobra::ArticletypeGroup, :foreign_key => :articletype_group_id
8
+
9
+ default_scope order(:sorter)
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ module Goldencobra
4
+ class ArticletypeGroup < ActiveRecord::Base
5
+ attr_accessible :closed, :expert, :foldable, :sorter, :title, :fields_attributes, :position
6
+
7
+ belongs_to :articletype, :class_name => Goldencobra::Articletype, :foreign_key => :articletype_id
8
+ has_many :fields, :class_name => Goldencobra::ArticletypeField, :dependent => :delete_all
9
+ accepts_nested_attributes_for :fields, :allow_destroy => true
10
+
11
+ default_scope order(:sorter)
12
+ end
13
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+ Rails.application.config.to_prepare do
3
+ if ActiveRecord::Base.connection.table_exists?("goldencobra_articles") && ActiveRecord::Base.connection.table_exists?("goldencobra_articletypes")
4
+ Goldencobra::Article.scoped.pluck(:article_type).uniq.each do |at|
5
+ if Goldencobra::Articletype.find_by_name(at).blank?
6
+ Goldencobra::Articletype.create(:name => at, :default_template_file => "application")
7
+ end
8
+ end
9
+ Goldencobra::Articletype.scoped.each do |at|
10
+ #install Basik set of Fieldgroups and Fields if no one is set up
11
+ if !at.fieldgroups.any?
12
+ a1 = at.fieldgroups.create(:title => "Allgemein", :position => "first_block", :foldable => false, :closed => false, :expert => false, :sorter => 1)
13
+ a1.fields.create(:fieldname => "title", :sorter => 1)
14
+ a1.fields.create(:fieldname => "content", :sorter => 2)
15
+ a1.fields.create(:fieldname => "teaser", :sorter => 3)
16
+ a1.fields.create(:fieldname => "tag_list", :sorter => 4)
17
+ a1.fields.create(:fieldname => "frontend_tag_list", :sorter => 5)
18
+ a1.fields.create(:fieldname => "active", :sorter => 6)
19
+
20
+ a2 = at.fieldgroups.create(:title => "Weiterer Inhalt", :position => "last_block", :foldable => true, :closed => true, :expert => false, :sorter => 2)
21
+ a2.fields.create(:fieldname => "subtitle", :sorter => 1)
22
+ a2.fields.create(:fieldname => "context_info", :sorter => 2)
23
+ a2.fields.create(:fieldname => "summary", :sorter => 3)
24
+
25
+ a3 = at.fieldgroups.create(:title => "Metadescriptions", :position => "last_block", :foldable => true, :closed => true, :expert => true, :sorter => 3)
26
+ a3.fields.create(:fieldname => "metatags", :sorter => 1)
27
+
28
+ a4 = at.fieldgroups.create(:title => "Einstellungen", :position => "last_block", :foldable => true, :closed => true, :expert => true, :sorter => 4)
29
+ a4.fields.create(:fieldname => "breadcrumb", :sorter => 1)
30
+ a4.fields.create(:fieldname => "url_name", :sorter => 2)
31
+ a4.fields.create(:fieldname => "parent_id", :sorter => 3)
32
+ a4.fields.create(:fieldname => "canonical_url", :sorter => 4)
33
+ a4.fields.create(:fieldname => "active_since", :sorter => 5)
34
+ a4.fields.create(:fieldname => "enable_social_sharing", :sorter => 6)
35
+ a4.fields.create(:fieldname => "robots_no_index", :sorter => 7)
36
+ a4.fields.create(:fieldname => "cacheable", :sorter => 8)
37
+ a4.fields.create(:fieldname => "commentable", :sorter => 9)
38
+ a4.fields.create(:fieldname => "dynamic_redirection", :sorter => 10)
39
+ a4.fields.create(:fieldname => "external_url_redirect", :sorter => 11)
40
+ a4.fields.create(:fieldname => "redirect_link_title", :sorter => 12)
41
+ a4.fields.create(:fieldname => "redirection_target_in_new_window", :sorter => 13)
42
+ a4.fields.create(:fieldname => "author", :sorter => 14)
43
+
44
+ a5 = at.fieldgroups.create(:title => "Zugriffsrechte", :position => "last_block", :foldable => true, :closed => true, :expert => true, :sorter => 5)
45
+ a5.fields.create(:fieldname => "permissions", :sorter => 1)
46
+
47
+ a6 = at.fieldgroups.create(:title => "Medien", :position => "last_block", :foldable => true, :closed => true, :expert => false, :sorter => 6)
48
+ a6.fields.create(:fieldname => "article_images", :sorter => 1)
49
+ puts "Default Fieldoptions recreated for #{at.name}"
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,6 +1,9 @@
1
1
  de:
2
2
  activerecord:
3
3
  models:
4
+ articletype:
5
+ one: "Artikeltyp"
6
+ other: "Artikeltypen"
4
7
  link-checker:
5
8
  one: "Link-Checker"
6
9
  other: "Link-Checker"
@@ -1,6 +1,9 @@
1
1
  en:
2
2
  activerecord:
3
3
  models:
4
+ articletype:
5
+ one: "articletype"
6
+ other: "articletypes"
4
7
  link-checker:
5
8
  one: "Link-Checker"
6
9
  other: "Link-Checker"
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ class CreateGoldencobraArticletypes < ActiveRecord::Migration
4
+ def up
5
+ create_table :goldencobra_articletypes do |t|
6
+ t.string :name
7
+ t.string :default_template_file
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+
13
+ def down
14
+ drop_table :goldencobra_articletypes
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ class CreateGoldencobraArticletypeGroups < ActiveRecord::Migration
4
+ def change
5
+ create_table :goldencobra_articletype_groups do |t|
6
+ t.string :title
7
+ t.boolean :expert, :default => false
8
+ t.boolean :foldable, :default => true
9
+ t.boolean :closed, :default => true
10
+ t.integer :sorter, :default => 0
11
+ t.integer :articletype_id
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+
3
+ class CreateGoldencobraArticletypeFields < ActiveRecord::Migration
4
+ def change
5
+ create_table :goldencobra_articletype_fields do |t|
6
+ t.integer :articletype_group_id
7
+ t.string :fieldname
8
+ t.integer :sorter, :default => 0
9
+ t.string :class_name
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ class AddPositionToGoldencobraArticletypeGroup < ActiveRecord::Migration
4
+ def change
5
+ add_column :goldencobra_articletype_groups, :position, :string, :default => "first_block"
6
+ end
7
+ end
@@ -16,6 +16,7 @@ module Goldencobra
16
16
  copy_file 'index.html.erb', "app/views/articletypes/#{name.underscore}/_index.html.erb"
17
17
  copy_file 'show.html.erb', "app/views/articletypes/#{name.underscore}/_show.html.erb"
18
18
  template 'edit_show.html.erb', "app/views/articletypes/#{name.underscore}/_edit_show.html.erb"
19
+ copy_file 'edit_articletype.html.erb', "app/views/articletypes/#{name.underscore}/_edit_articletype.html.erb"
19
20
  copy_file 'edit_index.html.erb', "app/views/articletypes/#{name.underscore}/_edit_index.html.erb"
20
21
  template 'initializer.rb', "config/initializers/goldencobra_#{name.underscore}.rb"
21
22
  end
@@ -0,0 +1,3 @@
1
+ <% f.inputs "Options for Articletype" do %>
2
+ <% # f.input :some_dynamic_articletype_option %>
3
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Goldencobra
4
- VERSION = "1.3.4"
4
+ VERSION = "1.4.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goldencobra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-01-25 00:00:00.000000000 Z
13
+ date: 2014-01-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: coffee-script-source
@@ -2184,6 +2184,9 @@ files:
2184
2184
  - app/models/goldencobra/article.rb
2185
2185
  - app/models/goldencobra/article_image.rb
2186
2186
  - app/models/goldencobra/article_widget.rb
2187
+ - app/models/goldencobra/articletype.rb
2188
+ - app/models/goldencobra/articletype_field.rb
2189
+ - app/models/goldencobra/articletype_group.rb
2187
2190
  - app/models/goldencobra/author.rb
2188
2191
  - app/models/goldencobra/comment.rb
2189
2192
  - app/models/goldencobra/domain.rb
@@ -2249,6 +2252,7 @@ files:
2249
2252
  - config/initializers/acts_as_taggable.rb
2250
2253
  - config/initializers/articles_controller_hooks.rb
2251
2254
  - config/initializers/check_for_migrations.rb
2255
+ - config/initializers/check_for_missing_articletypes.rb
2252
2256
  - config/initializers/compass.rb
2253
2257
  - config/initializers/devise.rb
2254
2258
  - config/initializers/geocoder.rb
@@ -2384,8 +2388,13 @@ files:
2384
2388
  - db/migrate/20131018111343_add_cache_to_goldencobra_menues.rb
2385
2389
  - db/migrate/20131129143509_add_remote_to_goldencobra_menues.rb
2386
2390
  - db/migrate/20131216110750_add_main_to_goldencobra_domains.rb
2391
+ - db/migrate/20140127084929_create_goldencobra_articletypes.rb
2392
+ - db/migrate/20140128091516_create_goldencobra_articletype_groups.rb
2393
+ - db/migrate/20140128104519_create_goldencobra_articletype_fields.rb
2394
+ - db/migrate/20140128112747_add_position_to_goldencobra_articletype_group.rb
2387
2395
  - db/seeds.rb
2388
2396
  - lib/generators/goldencobra/articletype/articletype_generator.rb
2397
+ - lib/generators/goldencobra/articletype/templates/edit_articletype.html.erb
2389
2398
  - lib/generators/goldencobra/articletype/templates/edit_index.html.erb
2390
2399
  - lib/generators/goldencobra/articletype/templates/edit_show.html.erb
2391
2400
  - lib/generators/goldencobra/articletype/templates/index.html.erb