goldencobra 1.2.0 → 1.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/images/goldencobra/chosen-sprite.png +0 -0
- data/app/assets/javascripts/goldencobra/active_admin.js +14 -23
- data/app/assets/javascripts/goldencobra/chosen.jquery.min.js +2 -10
- data/app/assets/stylesheets/goldencobra/chosen.css +312 -274
- data/app/controllers/goldencobra/application_controller.rb +8 -1
- data/app/controllers/goldencobra/articles_controller.rb +2 -20
- data/app/controllers/goldencobra/manage_controller.rb +6 -2
- data/app/helpers/goldencobra/articles_helper.rb +20 -0
- data/app/helpers/goldencobra/navigation_helper.rb +39 -13
- data/app/models/ability.rb +2 -0
- data/app/models/goldencobra/article.rb +5 -6
- data/app/models/goldencobra/article_image.rb +2 -0
- data/app/models/goldencobra/article_widget.rb +2 -0
- data/app/models/goldencobra/author.rb +2 -0
- data/app/models/goldencobra/comment.rb +2 -0
- data/app/models/goldencobra/domain.rb +16 -0
- data/app/models/goldencobra/help.rb +2 -0
- data/app/models/goldencobra/import_metadata.rb +2 -0
- data/app/models/goldencobra/location.rb +3 -1
- data/app/models/goldencobra/menue.rb +2 -2
- data/app/models/goldencobra/metatag.rb +2 -0
- data/app/models/goldencobra/permission.rb +2 -0
- data/app/models/goldencobra/role.rb +2 -0
- data/app/models/goldencobra/role_user.rb +2 -0
- data/app/models/goldencobra/setting.rb +2 -0
- data/app/models/goldencobra/tracking.rb +2 -0
- data/app/models/goldencobra/upload.rb +4 -2
- data/app/models/goldencobra/vita.rb +2 -0
- data/app/models/translation.rb +2 -0
- data/app/models/user.rb +2 -0
- data/app/models/visitor.rb +2 -0
- data/app/views/goldencobra/admin/articles/_articles_index.html.erb +3 -3
- data/app/views/goldencobra/admin/articles/_image_module_sidebar.html.erb +2 -4
- data/app/views/goldencobra/admin/articles/_link_checker.html.erb +2 -1
- data/app/views/goldencobra/admin/articles/_link_checker_index.html.erb +1 -0
- data/app/views/goldencobra/admin/articles/_select_article_type.html.erb +12 -13
- data/app/views/goldencobra/admin/articles/_widgets_sidebar.html.erb +3 -2
- data/app/views/goldencobra/admin/shared/_help.html.erb +15 -0
- data/app/views/goldencobra/admin/shared/_item.html.erb +3 -3
- data/app/views/goldencobra/articles/_headers.html.erb +6 -1
- data/app/views/goldencobra/articles/_navigation_menue.html.erb +6 -0
- data/app/views/goldencobra/articles/_show.html.erb +5 -5
- data/app/worker/articles_cache_worker.rb +1 -1
- data/config/initializers/liquid_tags.rb +47 -4
- data/config/initializers/papertrail_versions.rb +1 -0
- data/config/locales/active_admin.de.yml +8 -8
- data/config/locales/active_admin.en.yml +0 -4
- data/config/locales/activerecord.de.yml +1 -1
- data/config/locales/activerecord.en.yml +5 -2
- data/config/locales/article_types.de.yml +3 -16
- data/config/locales/article_types.en.yml +23 -0
- data/config/locales/devise.de.yml +0 -1
- data/config/locales/devise.en.yml +0 -1
- data/config/locales/en.yml +7 -0
- data/config/locales/goldencobra.de.yml +37 -1
- data/config/settings.yml +2 -0
- data/db/migrate/20131129143509_add_remote_to_goldencobra_menues.rb +5 -0
- data/db/migrate/20131216110750_add_main_to_goldencobra_domains.rb +7 -0
- data/lib/generators/goldencobra/articletype/templates/edit_index.html.erb +7 -7
- data/lib/goldencobra/select_current_client.rb +1 -0
- data/lib/goldencobra/version.rb +3 -1
- data/lib/tasks/cap_info.rb +30 -0
- data/lib/tasks/goldencobra_tasks.rake +2 -0
- data/lib/tasks/i18n.rake +2 -0
- data/lib/tasks/import.rake +47 -9
- metadata +17 -10
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module Goldencobra
|
2
4
|
class ApplicationController < ::ApplicationController
|
3
5
|
before_filter :set_locale
|
@@ -53,9 +55,14 @@ module Goldencobra
|
|
53
55
|
meta_tags[:noindex] = current_article.robots_no_index
|
54
56
|
end
|
55
57
|
|
56
|
-
if
|
58
|
+
if current_article.canonical_url.present?
|
57
59
|
# with an canonical_url for rel="canonical"
|
58
60
|
meta_tags[:canonical] = current_article.canonical_url
|
61
|
+
else
|
62
|
+
d = Goldencobra::Domain.main
|
63
|
+
if d.present? && @current_client.present? && @current_client.id != d.id
|
64
|
+
meta_tags[:canonical] = "http://#{d.hostname}#{current_article.public_url}"
|
65
|
+
end
|
59
66
|
end
|
60
67
|
|
61
68
|
set_meta_tags meta_tags
|
@@ -12,13 +12,14 @@ module Goldencobra
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def show_cache_path
|
15
|
+
current_client_id = @current_client.try(:id).to_s
|
15
16
|
geo_cache = Goldencobra::Setting.for_key("goldencobra.geocode_ip_address") == "true" && session[:user_location].present? && session[:user_location].city.present? ? session[:user_location].city.parameterize.underscore : "no_geo"
|
16
17
|
date_cache = Goldencobra::Setting.for_key("goldencobra.article.max_cache_24h") == "true" ? Date.today.strftime("%Y%m%d") : "no_date"
|
17
18
|
art_cache = @article ? @article.cache_key : "no_art"
|
18
19
|
user_cache = current_user.present? ? current_user.id : "no_user"
|
19
20
|
flash_message = session.present? && session['flash'].present? ? Time.now.to_i : ""
|
20
21
|
auth_code = params[:auth_token].present? ? 'with_auth' : ''
|
21
|
-
"g/#{I18n.locale.to_s}/#{geo_cache}/#{user_cache}/#{date_cache}/#{params[:article_id]}/#{art_cache}_#{params[:pdf]}_#{params[:frontend_tags]}__#{params[:iframe]}#{flash_message}_#{auth_code}"
|
22
|
+
"c-#{current_client_id}/g/#{I18n.locale.to_s}/#{geo_cache}/#{user_cache}/#{date_cache}/#{params[:article_id]}/#{art_cache}_#{params[:pdf]}_#{params[:frontend_tags]}__#{params[:iframe]}#{flash_message}_#{auth_code}"
|
22
23
|
end
|
23
24
|
|
24
25
|
|
@@ -79,25 +80,6 @@ module Goldencobra
|
|
79
80
|
end
|
80
81
|
end
|
81
82
|
|
82
|
-
# def convert_to_pdf
|
83
|
-
# if @article
|
84
|
-
# require 'net/http'
|
85
|
-
# require "uri"
|
86
|
-
# uid = Goldencobra::Setting.for_key("goldencobra.html2pdf_uid")
|
87
|
-
# uri = URI.parse("http://html2pdf.ikusei.de/converter/new.xml?&print_layout=true&uid=#{uid}&url=#{@article.absolute_public_url}#{CGI::escape('?pdf=1')}")
|
88
|
-
# logger.debug(uri)
|
89
|
-
# http = Net::HTTP.new(uri.host, uri.port)
|
90
|
-
# request = Net::HTTP::Get.new(uri.request_uri)
|
91
|
-
# response = http.request(request)
|
92
|
-
# doc = Nokogiri::HTML(response.body)
|
93
|
-
# file = doc.at_xpath("//file-name").text
|
94
|
-
# redirect_to "http://html2pdf.ikusei.de#{file}"
|
95
|
-
# else
|
96
|
-
# render :text => "404", :status => 404
|
97
|
-
# end
|
98
|
-
# end
|
99
|
-
|
100
|
-
|
101
83
|
def sitemap
|
102
84
|
if Goldencobra::Setting.for_key("goldencobra.use_ssl") == "true"
|
103
85
|
@use_ssl = "s"
|
@@ -31,8 +31,12 @@ module Goldencobra
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def call_for_support
|
34
|
-
|
35
|
-
|
34
|
+
if current_user || current_visitor
|
35
|
+
Goldencobra::ConfirmationMailer.send_support_mail(params[:link]).deliver
|
36
|
+
render :text => "200"
|
37
|
+
else
|
38
|
+
render :text => "401"
|
39
|
+
end
|
36
40
|
end
|
37
41
|
|
38
42
|
end
|
@@ -19,6 +19,26 @@ module Goldencobra
|
|
19
19
|
end
|
20
20
|
|
21
21
|
|
22
|
+
#Parse text for a single Word and make a link to an Article to this Word as a Subarticle of a given Article
|
23
|
+
def parse_glossar_entries(content,tag_name, parent_article_id=nil)
|
24
|
+
glossar_parent = nil
|
25
|
+
if parent_article_id
|
26
|
+
glossar_parent = Goldencobra::Article.find_by_id(parent_article_id)
|
27
|
+
glossar_article = glossar_parent.children.where(:breadcrumb => tag_name).first
|
28
|
+
else
|
29
|
+
glossar_article = Goldencobra::Article.where(:breadcrumb => tag_name).first
|
30
|
+
end
|
31
|
+
unless glossar_article
|
32
|
+
glossar_article = Goldencobra::Article.create(:title => tag_name, :breadcrumb => tag_name, :article_type => "Default Show", :parent => glossar_parent)
|
33
|
+
end
|
34
|
+
|
35
|
+
if glossar_article.present?
|
36
|
+
replace_with = "<a href='#{glossar_article.public_url}' class='glossar'>#{tag_name}</a>"
|
37
|
+
content = content.gsub(/\b(?<!\/)#{tag_name}(?!<)\b/, "#{replace_with}")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
22
42
|
def render_article_image_gallery
|
23
43
|
if @article
|
24
44
|
result = ""
|
@@ -20,7 +20,6 @@ module Goldencobra
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
#
|
24
23
|
# navigation_menu("Hauptmenue", :depth => 1, :class => "top", :id => "menue1", :offset => 1 )
|
25
24
|
# depth: 0 = unlimited, 1 = self, 2 = self and children 1. grades, 3 = self and up to children 2.grades
|
26
25
|
# offset: number of levels to skip, 0 = none
|
@@ -58,19 +57,29 @@ module Goldencobra
|
|
58
57
|
|
59
58
|
current_depth = master_menue.ancestry_depth
|
60
59
|
#Check for Permission
|
61
|
-
|
62
|
-
|
60
|
+
begin
|
61
|
+
if params.present? && params[:frontend_tags].present? && params[:frontend_tags].class != String && params[:frontend_tags][:format] && params[:frontend_tags][:format] == "email"
|
62
|
+
#Wenn format email, dann gibt es keinen realen webseit besucher
|
63
|
+
ability = Ability.new()
|
64
|
+
else current_user.present? || current_visitor.present?
|
65
|
+
operator = current_user || current_visitor
|
66
|
+
ability = Ability.new(operator)
|
67
|
+
end
|
68
|
+
rescue
|
63
69
|
ability = Ability.new()
|
64
|
-
else
|
65
|
-
operator = current_user || current_visitor
|
66
|
-
ability = Ability.new(operator)
|
67
70
|
end
|
71
|
+
|
68
72
|
if !ability.can?(:read, master_menue)
|
69
73
|
return ""
|
70
74
|
end
|
75
|
+
|
71
76
|
if master_menue.present?
|
72
77
|
content = ""
|
73
|
-
|
78
|
+
if current_article.present?
|
79
|
+
subtree_menues = master_menue.subtree.after_depth(current_depth).to_depth(current_depth + depth).active.includes(:permissions).includes(:image)
|
80
|
+
else
|
81
|
+
subtree_menues = master_menue.subtree.after_depth(current_depth + offset).to_depth(current_depth + depth).active.includes(:permissions).includes(:image)
|
82
|
+
end
|
74
83
|
subtree_menues = subtree_menues.to_a.delete_if{|a| !ability.can?(:read, a)}
|
75
84
|
|
76
85
|
current_depth = 1
|
@@ -90,7 +99,7 @@ module Goldencobra
|
|
90
99
|
private
|
91
100
|
|
92
101
|
def menue_roots(menue_array)
|
93
|
-
min_of_layers = menue_array.map{|a| a.ancestry.split("/").count }.min
|
102
|
+
min_of_layers = menue_array.map{|a| a.ancestry.to_s.split("/").count }.min
|
94
103
|
return menue_array.select{|a| a.ancestry.to_s.split("/").count == min_of_layers }
|
95
104
|
end
|
96
105
|
|
@@ -104,13 +113,18 @@ module Goldencobra
|
|
104
113
|
else
|
105
114
|
child_target_link = child.target.gsub("\"",'')
|
106
115
|
end
|
107
|
-
|
116
|
+
if child.remote
|
117
|
+
link_options = {"data-remote" => "true",:href => child_target_link}
|
118
|
+
else
|
119
|
+
link_options = {:href => child_target_link}
|
120
|
+
end
|
121
|
+
child_link = content_tag(:a, child.title, link_options )
|
108
122
|
image_link = child.image.present? ? image_tag(child.image.image(:original)) : ""
|
109
|
-
child_link = child_link + content_tag(:a, image_link, :
|
110
|
-
child_link = child_link + content_tag(:a, child.description_title, :
|
123
|
+
child_link = child_link + content_tag(:a, image_link, link_options.merge(:class => "navigtion_link_imgage_wrapper")) unless options[:show_image] == false
|
124
|
+
child_link = child_link + content_tag(:a, child.description_title, link_options.merge(:class => "navigtion_link_description_title")) unless options[:show_description_title] == false
|
111
125
|
template = Liquid::Template.parse(child.description)
|
112
126
|
child_link = child_link + content_tag("div", raw(template.render(Goldencobra::Article::LiquidParser)), :class => "navigtion_link_description") unless options[:show_description] == false
|
113
|
-
child_link = child_link + content_tag(:a, child.call_to_action_name, :
|
127
|
+
child_link = child_link + content_tag(:a, child.call_to_action_name, link_options.merge(:class => "navigtion_link_call_to_action_name")) unless options[:show_call_to_action_name] == false
|
114
128
|
|
115
129
|
current_depth += 1
|
116
130
|
child_elements = menue_children(child, subtree_menues)
|
@@ -127,7 +141,19 @@ module Goldencobra
|
|
127
141
|
child_link = child_link + content_tag(:ul, raw(content_level), :class => "level_#{current_depth} children_#{visible_child_element_count}" )
|
128
142
|
end
|
129
143
|
end
|
130
|
-
|
144
|
+
|
145
|
+
# to have path from context, when liquid witohut request
|
146
|
+
# logger.info("-------------")
|
147
|
+
# logger.info(options[:liquid_url_path].present?)
|
148
|
+
# logger.info(options[:liquid_url_path])
|
149
|
+
# logger.info(request.blank?)
|
150
|
+
# logger.info("-------------")
|
151
|
+
# if options[:liquid_url_path].present? && request.blank?
|
152
|
+
# path_obj = Struct.new(:path)
|
153
|
+
# request = path_obj.new(options[:liquid_url_path])
|
154
|
+
# end
|
155
|
+
|
156
|
+
return content_tag(:li, raw(child_link), "data-id" => child.id, :class => "#{ visible_child_element_count > 0 ? 'has_children' : '' } #{ (child.has_active_child?(request, subtree_menues) ? 'has_active_child' : '') if request.present? } #{ (child.is_active?(request) ? 'active' : '') if request.present? } #{ child.css_class.gsub(/\W/,' ') }".squeeze(' ').strip)
|
131
157
|
end
|
132
158
|
|
133
159
|
end
|
data/app/models/ability.rb
CHANGED
@@ -77,6 +77,7 @@ module Goldencobra
|
|
77
77
|
|
78
78
|
accepts_nested_attributes_for :metatags, :allow_destroy => true, :reject_if => proc { |attributes| attributes['value'].blank? }
|
79
79
|
accepts_nested_attributes_for :article_images, :allow_destroy => true
|
80
|
+
accepts_nested_attributes_for :images, :allow_destroy => true
|
80
81
|
accepts_nested_attributes_for :permissions, :allow_destroy => true
|
81
82
|
accepts_nested_attributes_for :author, :allow_destroy => true
|
82
83
|
|
@@ -85,7 +86,7 @@ module Goldencobra
|
|
85
86
|
friendly_id :for_friendly_name, use: [:slugged] #, :history
|
86
87
|
web_url :external_url_redirect
|
87
88
|
has_paper_trail
|
88
|
-
liquid_methods :title, :created_at, :updated_at, :subtitle, :context_info, :id
|
89
|
+
liquid_methods :title, :created_at, :updated_at, :subtitle, :context_info, :id, :frontend_tags
|
89
90
|
|
90
91
|
validates_presence_of :title, :article_type
|
91
92
|
validates_format_of :url_name, :with => /\A[\w\d-]+\Z/, allow_blank: true
|
@@ -266,7 +267,6 @@ module Goldencobra
|
|
266
267
|
end
|
267
268
|
|
268
269
|
Goldencobra::Article.init_image_methods
|
269
|
-
|
270
270
|
def image(position="standard", size="original")
|
271
271
|
any_images = self.article_images.where(position: position)
|
272
272
|
if any_images.any? && any_images.first.image && any_images.first.image.image
|
@@ -276,6 +276,7 @@ module Goldencobra
|
|
276
276
|
end
|
277
277
|
end
|
278
278
|
|
279
|
+
|
279
280
|
def respond_to_all?(method_name)
|
280
281
|
begin
|
281
282
|
return eval("self.#{method_name}.present?")
|
@@ -342,9 +343,7 @@ module Goldencobra
|
|
342
343
|
@list_of_articles = @list_of_articles.flatten.shuffle
|
343
344
|
elsif self.sort_order == "Alphabetical"
|
344
345
|
@list_of_articles = @list_of_articles.flatten.sort_by{|article| article.title }
|
345
|
-
elsif self.sort_order
|
346
|
-
@list_of_articles = @list_of_articles.flatten.sort_by{|article| article.created_at.to_i }
|
347
|
-
elsif self.respond_to?(self.sort_order)
|
346
|
+
elsif self.respond_to?(self.sort_order.downcase)
|
348
347
|
sort_order = self.sort_order.downcase
|
349
348
|
@list_of_articles = @list_of_articles.flatten.sort_by{|article| article.respond_to?(sort_order) ? article.send(sort_order) : article }
|
350
349
|
elsif self.sort_order.include?(".")
|
@@ -693,7 +692,7 @@ module Goldencobra
|
|
693
692
|
else
|
694
693
|
Goldencobra::Article.active.each do |article|
|
695
694
|
article.updated_at = Time.now
|
696
|
-
article.save
|
695
|
+
article.without_versioning :save
|
697
696
|
end
|
698
697
|
end
|
699
698
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module Goldencobra
|
2
4
|
class Domain < ActiveRecord::Base
|
3
5
|
|
@@ -7,6 +9,20 @@ module Goldencobra
|
|
7
9
|
validates_presence_of :hostname
|
8
10
|
validates_uniqueness_of :hostname
|
9
11
|
|
12
|
+
before_save :mark_as_main
|
13
|
+
|
14
|
+
def self.main
|
15
|
+
Goldencobra::Domain.where(:main => true).first
|
16
|
+
end
|
17
|
+
|
18
|
+
def mark_as_main
|
19
|
+
if self.main == true
|
20
|
+
Goldencobra::Domain.where("id <> #{self.id.to_i}").each do |a|
|
21
|
+
a.main = false
|
22
|
+
a.save
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
10
26
|
|
11
27
|
def self.current
|
12
28
|
Thread.current[:current_client]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
# == Schema Information
|
2
4
|
#
|
3
5
|
# Table name: goldencobra_locations
|
@@ -39,7 +41,7 @@ module Goldencobra
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def skip_geocoding_once_or_always
|
42
|
-
self.skip_geocode || self.manual_geocoding
|
44
|
+
(Goldencobra::Setting.for_key("goldencobra.locations.geocoding") == "false" ) || self.skip_geocode || self.manual_geocoding
|
43
45
|
end
|
44
46
|
end
|
45
47
|
end
|
@@ -23,7 +23,7 @@ module Goldencobra
|
|
23
23
|
class Menue < ActiveRecord::Base
|
24
24
|
attr_accessible :title, :target, :css_class, :active, :ancestry, :parent_id,
|
25
25
|
:sorter, :description, :call_to_action_name, :description_title, :image_attributes, :image_id,
|
26
|
-
:permissions_attributes
|
26
|
+
:permissions_attributes, :remote
|
27
27
|
has_ancestry :orphan_strategy => :rootify, :cache_depth => true
|
28
28
|
belongs_to :image, :class_name => Goldencobra::Upload, :foreign_key => "image_id"
|
29
29
|
|
@@ -66,7 +66,7 @@ module Goldencobra
|
|
66
66
|
|
67
67
|
def has_active_child?(request, subtree_menues)
|
68
68
|
@has_active_child_result ||= {}
|
69
|
-
@has_active_child_result[request.path.squeeze("/").split("?")[0]] ||= has_active_descendant?(subtree_menues,request)
|
69
|
+
@has_active_child_result[request.path.squeeze("/").split("?")[0]] ||= has_active_descendant?(subtree_menues, request)
|
70
70
|
end
|
71
71
|
|
72
72
|
def has_active_descendant?(subtree_menues,request)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
# == Schema Information
|
2
4
|
#
|
3
5
|
# Table name: goldencobra_uploads
|
@@ -50,8 +52,8 @@ module Goldencobra
|
|
50
52
|
|
51
53
|
def unzip_files
|
52
54
|
if self.image_file_name.include?(".zip") && File.exists?(self.image.path)
|
53
|
-
require 'zip
|
54
|
-
zipped_files = Zip::
|
55
|
+
require 'zip'
|
56
|
+
zipped_files = Zip::File.open(self.image.path)
|
55
57
|
int = 0
|
56
58
|
zipped_files.each do |zipped_file|
|
57
59
|
int = int + 1
|
data/app/models/translation.rb
CHANGED
data/app/models/user.rb
CHANGED