goldencobra 1.3.4 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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