goldencobra 1.3.4 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/models/goldencobra/article.rb +15 -2
- data/app/models/goldencobra/articletype.rb +54 -0
- data/app/models/goldencobra/articletype_field.rb +11 -0
- data/app/models/goldencobra/articletype_group.rb +13 -0
- data/config/initializers/check_for_missing_articletypes.rb +53 -0
- data/config/locales/activerecord.de.yml +3 -0
- data/config/locales/activerecord.en.yml +3 -0
- data/db/migrate/20140127084929_create_goldencobra_articletypes.rb +16 -0
- data/db/migrate/20140128091516_create_goldencobra_articletype_groups.rb +16 -0
- data/db/migrate/20140128104519_create_goldencobra_articletype_fields.rb +14 -0
- data/db/migrate/20140128112747_add_position_to_goldencobra_articletype_group.rb +7 -0
- data/lib/generators/goldencobra/articletype/articletype_generator.rb +1 -0
- data/lib/generators/goldencobra/articletype/templates/edit_articletype.html.erb +3 -0
- data/lib/goldencobra/version.rb +1 -1
- metadata +11 -2
@@ -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
|
-
|
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.
|
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ässt", :wrapper_html => { class: 'expert' } %>},
|
19
|
+
:frontend_tag_list => %{<% f.input :frontend_tag_list, label: "Filterkriterium", hint: "Hier eingetragene Begriffe werden auf Ü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ü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önnen Sie die verschiedenen Metatags definieren, sowie alle Einstellungen fü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ü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ü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
|
@@ -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
|
@@ -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
|
data/lib/goldencobra/version.rb
CHANGED
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.
|
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-
|
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
|