fullstack-cms 0.2.5 → 0.2.6

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.
data/Gemfile CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  source "http://rubygems.org"
6
6
 
7
- gem "fullstack-admin", '~> 0.1.40'
7
+ gem "fullstack-admin", '~> 0.1.42'
8
8
 
9
9
  gem "ars-permalink"
10
10
  gem "has-attached"
data/Gemfile.lock CHANGED
@@ -20,7 +20,7 @@ GEM
20
20
  rack-cache (~> 1.2)
21
21
  rack-test (~> 0.6.1)
22
22
  sprockets (~> 2.1.3)
23
- active_record_schema (0.5.12)
23
+ active_record_schema (0.5.13)
24
24
  rails
25
25
  activemodel (3.2.8)
26
26
  activesupport (= 3.2.8)
@@ -66,7 +66,7 @@ GEM
66
66
  railties (~> 3.0)
67
67
  thor (~> 0.14)
68
68
  chronic (0.6.7)
69
- ckeditor (3.7.2)
69
+ ckeditor (3.7.3)
70
70
  mime-types
71
71
  orm_adapter
72
72
  cocaine (0.2.1)
@@ -126,7 +126,7 @@ GEM
126
126
  remotipart
127
127
  resource-presentation-helpers
128
128
  squeel
129
- fullstack-admin (0.1.40)
129
+ fullstack-admin (0.1.42)
130
130
  bootstrap-datepicker-rails
131
131
  bootstrap-helpers
132
132
  bootstrap-wysihtml5-rails
@@ -165,10 +165,9 @@ GEM
165
165
  railties (>= 3.1.0, < 5.0)
166
166
  thor (~> 0.14)
167
167
  json (1.7.4)
168
- kaminari (0.13.0)
168
+ kaminari (0.14.0)
169
169
  actionpack (>= 3.0.0)
170
170
  activesupport (>= 3.0.0)
171
- railties (>= 3.0.0)
172
171
  kaminari-i18n (0.1.3)
173
172
  rails
174
173
  less (2.2.1)
@@ -262,7 +261,7 @@ GEM
262
261
  hike (~> 1.2)
263
262
  rack (~> 1.0)
264
263
  tilt (~> 1.1, != 1.3.0)
265
- squeel (1.0.9)
264
+ squeel (1.0.11)
266
265
  activerecord (~> 3.0)
267
266
  activesupport (~> 3.0)
268
267
  polyamorous (~> 0.5.0)
@@ -290,7 +289,7 @@ DEPENDENCIES
290
289
  ars-permalink
291
290
  awesome_nested_set
292
291
  bluecloth
293
- fullstack-admin (~> 0.1.40)
292
+ fullstack-admin (~> 0.1.42)
294
293
  has-attached
295
294
  jeweler
296
295
  rails_i18n_gettext
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.5
1
+ 0.2.6
@@ -2,8 +2,14 @@ class Admin::MenusController < Admin::BaseController
2
2
  respond_to :html, :js
3
3
 
4
4
  def index
5
- @search = Menu.search(params[:search])
6
- @menus = @search.page(params[:page] || 1)
5
+ @skip_filter = true
6
+ @menus = Menu.order(:uid)
7
+
8
+ if Fullstack::Cms.localized?
9
+ @menus = @menus.where(:locale => params[:locale])
10
+ @locale = params[:locale]
11
+ end
12
+
7
13
  end
8
14
 
9
15
  def new
@@ -2,7 +2,12 @@ class Admin::PagesController < Admin::BaseController
2
2
  respond_to :html, :js
3
3
 
4
4
  def index
5
- @pages = Page.all
5
+ @pages = Page.order("created_at")
6
+ if Fullstack::Cms.localized?
7
+ @pages = @pages.where(:locale => params[:locale])
8
+ @locale = params[:locale]
9
+ end
10
+
6
11
  @skip_filter = true
7
12
  end
8
13
 
@@ -4,6 +4,32 @@ class Admin::SettingsController < Admin::BaseController
4
4
  def index
5
5
  @skip_filter = true
6
6
  @settings = Setting.order("key")
7
+
8
+ if Fullstack::Cms.localized?
9
+ @settings = @settings.where(:locale => params[:locale])
10
+ @locale = params[:locale]
11
+ end
12
+
13
+ @groups = {}
14
+
15
+ @settings.each {|s|
16
+ @groups[s.group] ||= []
17
+ @groups[s.group] << s
18
+ }
19
+
20
+
21
+ @groups = @groups.to_a
22
+
23
+ @groups.sort! do |g1, g2|
24
+ if g1.first.to_s == "global"
25
+ -1
26
+ elsif g2.first.to_s == "global"
27
+ 1
28
+ else
29
+ g1.first.to_s <=> g2.first.to_s
30
+ end
31
+ end
32
+
7
33
  end
8
34
 
9
35
  def new
@@ -1,14 +1,55 @@
1
1
  module MenusHelper
2
+
3
+ def menu(uid, options = {}, &block)
4
+ options.reverse_merge({:locale => Fullstack::Cms.localized, :wrap => true})
5
+ locale = options.delete(:locale)
6
+ wrap = options.delete(:wrap)
7
+ wrapper_options = options.delete(:wrapper_html) || {}
8
+ link_options = options.delete(:link_html) || {}
9
+
10
+ menu = fetch_menu!(uid, locale)
11
+
12
+ if wrap
13
+ content_tag :ul, wrapper_options, false do
14
+ menu_links_for(menu, link_options)
15
+ end
16
+ else
17
+ menu_links_for(menu, link_options)
18
+ end
19
+
20
+ end
21
+
22
+ def menu_link(link, options = {})
23
+ options.reverse_merge({:rel => link.nofollow ? "nofollow" : nil})
24
+ link_to(link.label, menu_link_url(link), options)
25
+ end
26
+
27
+ def menu_link_url(link)
28
+ link.url.present? ? CGI::escape(link.url) : (link.linked ? page_path_for(link.linked) : "#")
29
+ end
30
+
31
+
32
+ # ======================
33
+ # = Deprecated Methods =
34
+ # ======================
35
+
36
+ def link_url(link)
37
+ ActiveSupport::Deprecation.warn("This method is deprecated use 'menu_link_url(link)' instead")
38
+ menu_link_url(link)
39
+ end
2
40
 
3
41
  def find_or_create_menu(uid, locale = nil)
42
+ ActiveSupport::Deprecation.warn("This method is deprecated use 'menu(uid, :locale => locale_name)' instead")
4
43
  if locale
5
44
  Menu.find_or_create_by_uid_and_locale(uid, locale.to_s, :name => "#{uid}".gsub("-", "_").humanize)
6
45
  else
7
46
  Menu.find_or_create_by_uid(uid, :name => "#{uid}".gsub("-", "_").humanize)
8
47
  end
9
48
  end
10
-
49
+
11
50
  def nav_items_for(uid, locale = nil)
51
+ ActiveSupport::Deprecation.warn("This method is deprecated use 'menu(uid, :locale => locale_name, :wrap => false)' instead")
52
+
12
53
  menu = find_or_create_menu(uid, locale)
13
54
  html = ""
14
55
 
@@ -24,13 +65,38 @@ module MenusHelper
24
65
  end
25
66
 
26
67
  def render_menu(uid, options = nil, &block)
68
+ ActiveSupport::Deprecation.warn("This method is deprecated use 'menu(uid, :locale => locale_name)' instead")
27
69
  content_tag :ul, nav_items_for(uid, &block), options, false
28
- end
29
-
30
-
31
- def link_url(link)
32
- link.url.present? ? CGI::escape(link.url) : (link.linked ? page_path_for(link.linked) : "#")
33
70
  end
34
71
 
72
+ # ===================
73
+ # = Private Methods =
74
+ # ===================
75
+
76
+ def menu_links_for(menu, link_options = {})
77
+
78
+ menu.links.each do |link|
79
+ unless block_given?
80
+ html << menu_link(link, link_options)
81
+ else
82
+ html << yield(link)
83
+ end
84
+ end
85
+
86
+ end
35
87
 
88
+ def fetch_menu!(uid, locale)
89
+
90
+ query = Menu.where(:uid => uid.to_s)
91
+ if locale
92
+ query = query.where(:locale => locale.to_s)
93
+ end
94
+ menu = query.first
95
+ raise "Menu '#{uid}' not found for locale '#{locale}'" if menu.nil?
96
+
97
+ menu
98
+
99
+ end
100
+
101
+
36
102
  end
@@ -2,7 +2,7 @@ module SettingsHelper
2
2
 
3
3
  # eg.
4
4
  # setting("blog/per_page", 20, :kind => :integer)
5
- def get_setting(namespaced_key, *args)
5
+ def setting(namespaced_key, *args)
6
6
  namespace_separator = "/"
7
7
 
8
8
  opts = args.extract_options!
@@ -10,10 +10,11 @@ module SettingsHelper
10
10
  namespaced_key = namespaced_key.to_s
11
11
  group, key = namespaced_key.include?(namespace_separator) ? namespaced_key.split(namespace_separator) : [nil, namespaced_key]
12
12
 
13
- Setting.global("#{key}", :autocreate => (opts[:autocreate].nil? ? true : opts[:autocreate]), :kind => opts[:kind], :default => value, :group => group, :options => opts[:options])
13
+ s = Setting.global("#{key}", :autocreate => false, :default => value, :group => group, :options => opts[:options], :locale => opts[:locale])
14
+
14
15
  end
15
-
16
- alias :setting :get_setting
16
+
17
+ alias :get_setting :setting
17
18
 
18
19
  end
19
20
 
data/app/models/menu.rb CHANGED
@@ -1,14 +1,15 @@
1
1
  class Menu < ActiveRecord::Base
2
2
  include Uid
3
3
  include Localized if Fullstack::Cms.config.localize
4
-
5
- field :name, :string
6
4
 
7
5
  has_many :links, :as => :link_owner, :dependent => :delete_all, :order=>'position ASC'
8
6
  accepts_nested_attributes_for :links, :allow_destroy => true
9
-
10
- validates_presence_of :name
11
- validates_presence_of :uid
7
+
8
+
9
+ alias_attribute :name, :uid
10
+ def name
11
+ I18n.t("fullstack.cms.menus.#{uid}", :default => uid.to_s.humanize)
12
+ end
12
13
 
13
14
  timestamps
14
15
  end
@@ -1,8 +1,13 @@
1
1
  class Setting < ActiveRecord::Base
2
+
3
+ class SettingNotFound < StandardError
4
+ end
5
+
2
6
  belongs_to :settable, :polymorphic => true
3
7
 
8
+ include Localized
4
9
  validates_presence_of :key, :kind
5
- validates :key, :uniqueness => {:scope => [:settable_id, :settable_type]}
10
+ validates :key, :uniqueness => {:scope => [:settable_id, :settable_type, :locale]}
6
11
 
7
12
  field :key
8
13
  index :key
@@ -45,16 +50,33 @@ class Setting < ActiveRecord::Base
45
50
  # eg. Setting.global("site-name")
46
51
 
47
52
  def self.global(key, opts = {})
48
- autocreate = opts.delete(:autocreate)
49
- kind = opts.delete(:kind) || :string
50
- default = opts.delete(:default)
51
- group = opts.delete(:group) || "global"
52
- options = opts.delete(:options)
53
+ key = key.to_s
54
+ autocreate = opts.delete(:autocreate)
55
+ kind = opts.delete(:kind) || :string
56
+ default = opts.delete(:default)
57
+ group = (opts.delete(:group) || "global").to_s
58
+ options = opts.delete(:options)
59
+ locale = opts.delete(:locale).try(:to_s)
53
60
 
54
- s = autocreate ? self.find_or_create_by_key_and_settable_id(key.to_s, nil, :kind => kind, :"#{kind}_value" => default, :group => group, :options => options) : self.find_by_key_and_settable_id(key.to_s, nil)
55
- if s
56
- s.value || default
61
+ query = where(:key => key, :group => group, :settable_id => nil)
62
+
63
+ if locale
64
+ query = query.where(:locale => locale)
57
65
  end
66
+
67
+ setting = query.first || ( autocreate && create(
68
+ :key => key,
69
+ :locale => locale,
70
+ :kind => kind,
71
+ :"#{kind}_value" => default,
72
+ :group => group,
73
+ :options => options
74
+ )
75
+ )
76
+
77
+ raise SettingNotFound.new("Setting `#{[group, key].join('/')}` not found for locale `#{locale || 'any'}`") if !setting
78
+ setting.value || default
79
+
58
80
  end
59
81
 
60
82
  def self.update_global(key, value)
@@ -0,0 +1,27 @@
1
+ <% if Fullstack::Cms.localized? %>
2
+
3
+ <%= nav :class => "nav-pills" do %>
4
+
5
+ <%= content_tag :li, :class => (:active if @locale.blank?) do %>
6
+ <%= link_to t("fullstack.cms.commons", :default => "Commons"), request.path %>
7
+ <% end %>
8
+
9
+ <% I18n.available_locales.each do |locale| %>
10
+ <%= content_tag :li, :class => (:active if @locale == locale.to_s) do %>
11
+ <%= link_to t("locale_names.#{locale}", :default => "#{locale}".humanize), "?locale=#{locale}" %>
12
+ <% end %>
13
+ <% end %>
14
+ <% end %>
15
+
16
+ <% end %>
17
+
18
+ <table class="table table-bordered table-striped">
19
+ <tr><th><%= t('fullstack.admin.resources.menus', :default => "Menus") %></th><th><%= t('fullstack.admin.actions', :default => "Actions") %></th></tr>
20
+ <% @menus.each do |content| %>
21
+ <tr><td>
22
+ <%= content.name %>
23
+ </td>
24
+ <td><%= default_collection_actions_for(content) %></td>
25
+ </tr>
26
+ <% end %>
27
+ </table>
@@ -1,17 +1,26 @@
1
- <%= tabs do |t| %>
2
- <% I18n.available_locales.each do |locale| %>
3
- <%= t.pane t("locale_names.#{locale}", :default => "#{locale}".humanize) do %>
4
-
5
-
6
- <ul class="nav">
7
- <% Page.where(:locale => "#{locale}").roots.each do |root| %>
8
- <% Page.each_with_level(root.self_and_descendants) do |page, level| %>
9
- <%= nav_item page.name, edit_admin_page_path(page), :icon => (page.root? ? "home" : "file"), :style => "line-height: 36px; padding-left:#{20 * level}px" %>
10
- <% end %>
11
- <% end %>
12
- </ul>
13
-
1
+ <% if Fullstack::Cms.localized? %>
2
+
3
+ <%= nav :class => "nav-pills" do %>
4
+
5
+ <%= content_tag :li, :class => (:active if @locale.blank?) do %>
6
+ <%= link_to t("fullstack.cms.commons", :default => "Commons"), request.path %>
7
+ <% end %>
8
+
9
+ <% I18n.available_locales.each do |locale| %>
10
+ <%= content_tag :li, :class => (:active if @locale == locale.to_s) do %>
11
+ <%= link_to t("locale_names.#{locale}", :default => "#{locale}".humanize), "?locale=#{locale}" %>
12
+ <% end %>
13
+ <% end %>
14
+ <% end %>
15
+
16
+ <% end %>
17
+
14
18
 
15
- <% end %>
19
+ <ul class="nav">
20
+ <% @pages.roots.each do |root| %>
21
+ <% Page.each_with_level(root.self_and_descendants) do |page, level| %>
22
+ <%= nav_item page.name, edit_admin_page_path(page), :icon => (page.root? ? "home" : "file"), :style => "line-height: 36px; padding-left:#{20 * level}px" %>
16
23
  <% end %>
17
24
  <% end %>
25
+ </ul>
26
+
@@ -1,39 +1,58 @@
1
1
  <% if Setting.any? %>
2
2
 
3
- <%
3
+ <% if Fullstack::Cms.localized? %>
4
+
5
+ <%= nav :class => "nav-pills" do %>
6
+
7
+ <%= content_tag :li, :class => (:active if @locale.blank?) do %>
8
+ <%= link_to t("fullstack.cms.commons", :default => "Commons"), request.path %>
9
+ <% end %>
4
10
 
5
- @groups = {}
6
-
7
- @settings.each {|s|
8
- @groups[s.group] ||= []
9
- @groups[s.group] << s
10
- }
11
+ <% I18n.available_locales.each do |locale| %>
12
+ <%= content_tag :li, :class => (:active if @locale == locale.to_s) do %>
13
+ <%= link_to t("locale_names.#{locale}", :default => "#{locale}".humanize), "?locale=#{locale}" %>
14
+ <% end %>
15
+ <% end %>
16
+ <% end %>
17
+
18
+ <% end %>
11
19
 
12
- @groups = @groups.to_a
20
+ <%= tabs :class => "tabs-left" do |t| %>
21
+
22
+ <% @groups.each do |g,settings| %>
23
+ <%= t.pane t(g, :scope => "fullstack.admin.groups", :default => g.to_s.humanize) do %>
24
+
25
+
26
+ <table class="table table-striped table-bordered">
27
+ <% settings.each do |stg| %>
28
+
29
+ <tr>
30
+ <th style="width: 20%">
31
+ <%= link_to t(stg.key, :scope => "helpers.label", :default => stg.key.to_s.humanize), [:edit, :admin, stg] %>
32
+ </th>
33
+ <td style="width: 10%">
34
+ <%= locale ? t("locale_names.#{locale}", :default => "#{locale}".humanize) : "-" %>
35
+ </td>
36
+ <td>
37
+ <% if stg.value %>
38
+ <%= truncate stg.options[:markup] ? "#markup" : "#{stg.value}" %>
39
+ <% else %>
40
+ (<%= t('fullstack.cms.empty', :default => "Empty") %>)
41
+ <% end %>
42
+ </td>
43
+ </tr>
44
+
45
+ <% end %>
46
+ </table>
47
+
48
+
13
49
 
14
- @groups.sort! do |g1, g2|
15
- if g1.first.to_s == "global"
16
- -1
17
- elsif g2.first.to_s == "global"
18
- 1
19
- else
20
- g1.first.to_s <=> g2.first.to_s
21
- end
22
- end
23
-
24
- nil
25
- %>
26
-
27
- <%= tabs do |t| %>
28
-
29
- <% @groups.each do |g,settings| %>
30
- <%= t.pane t(g, :scope => "fullstack.admin.groups", :default => g.to_s.humanize) do %>
31
- <% settings.each do |stg| %>
32
- <p><%= link_to t(stg.key, :scope => "helpers.label", :default => stg.key.to_s.humanize), [:edit, :admin, stg] %></p>
33
50
  <% end %>
34
51
  <% end %>
35
- <% end %>
36
52
 
37
- <% end %>
53
+ <% end %>
38
54
 
39
55
  <% end %>
56
+
57
+
58
+
@@ -6,6 +6,7 @@
6
6
 
7
7
 
8
8
  <%= f.inputs do %>
9
+ <%= f.input :locale, :input_html => {:readonly => true} %>
9
10
  <%= f.input :key, :input_html => {:readonly => true} %>
10
11
  <% if current_resource.kind.to_s == "text" && current_resource.options[:markup] %>
11
12
  <%= f.input :"#{current_resource.kind}_value", :label => t('fullstack.admin.value', :default => "Value"), :as => :markup %>
@@ -5,6 +5,8 @@ it:
5
5
  link_resource_or_url: "Collega una risorsa o un indirizzo"
6
6
  type_the_title_name_of_the_resource_to_link: "Digita il titolo/nome della risorsa da collegare"
7
7
  url: "Indirizzo"
8
+ commons: "Comuni"
9
+ empty: "Vuoto"
8
10
  admin:
9
11
  groups:
10
12
  global: "Generale"
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fullstack-cms"
8
- s.version = "0.2.5"
8
+ s.version = "0.2.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mcasimir"]
12
- s.date = "2012-09-03"
12
+ s.date = "2012-09-04"
13
13
  s.description = "CMS system built on fullstack"
14
14
  s.email = "maurizio.cas@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -58,6 +58,7 @@ Gem::Specification.new do |s|
58
58
  "app/views/admin/linkables/_fields.html.erb",
59
59
  "app/views/admin/linkables/fields.js.coffee",
60
60
  "app/views/admin/links/_associated_fields.html.erb",
61
+ "app/views/admin/menus/_collection.html.erb",
61
62
  "app/views/admin/pages/_collection.html.erb",
62
63
  "app/views/admin/pages/_form.html.erb",
63
64
  "app/views/admin/photos/_photo.html.erb",
@@ -101,9 +102,9 @@ Gem::Specification.new do |s|
101
102
  "lib/generators/fullstack/cms/templates/rails/app/views/site/_nav.html.erb",
102
103
  "lib/generators/fullstack/cms/templates/rails/app/views/site/_share_buttons_big.html.erb",
103
104
  "lib/generators/fullstack/cms/templates/rails/app/views/site/site/home.html.erb",
105
+ "lib/generators/fullstack/cms/templates/rails/config/fullstack.rb",
104
106
  "lib/generators/fullstack/cms/templates/rails/config/initializers/devise_controller.rb",
105
107
  "lib/generators/fullstack/cms/templates/rails/config/initializers/devise_mailer.rb",
106
- "lib/generators/fullstack/cms/templates/rails/config/initializers/fullstack.rb",
107
108
  "lib/generators/fullstack/cms/templates/rails/config/initializers/sitemap.rb",
108
109
  "lib/generators/fullstack/cms/templates/rails/config/schedule.rb",
109
110
  "lib/generators/fullstack/cms/templates/rails/config/sitemap.rb.tt",
@@ -132,7 +133,7 @@ Gem::Specification.new do |s|
132
133
  s.specification_version = 3
133
134
 
134
135
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
135
- s.add_runtime_dependency(%q<fullstack-admin>, ["~> 0.1.40"])
136
+ s.add_runtime_dependency(%q<fullstack-admin>, ["~> 0.1.42"])
136
137
  s.add_runtime_dependency(%q<ars-permalink>, [">= 0"])
137
138
  s.add_runtime_dependency(%q<has-attached>, [">= 0"])
138
139
  s.add_runtime_dependency(%q<acts-as-taggable-on>, [">= 0"])
@@ -145,7 +146,7 @@ Gem::Specification.new do |s|
145
146
  s.add_runtime_dependency(%q<bluecloth>, [">= 0"])
146
147
  s.add_development_dependency(%q<jeweler>, [">= 0"])
147
148
  else
148
- s.add_dependency(%q<fullstack-admin>, ["~> 0.1.40"])
149
+ s.add_dependency(%q<fullstack-admin>, ["~> 0.1.42"])
149
150
  s.add_dependency(%q<ars-permalink>, [">= 0"])
150
151
  s.add_dependency(%q<has-attached>, [">= 0"])
151
152
  s.add_dependency(%q<acts-as-taggable-on>, [">= 0"])
@@ -159,7 +160,7 @@ Gem::Specification.new do |s|
159
160
  s.add_dependency(%q<jeweler>, [">= 0"])
160
161
  end
161
162
  else
162
- s.add_dependency(%q<fullstack-admin>, ["~> 0.1.40"])
163
+ s.add_dependency(%q<fullstack-admin>, ["~> 0.1.42"])
163
164
  s.add_dependency(%q<ars-permalink>, [">= 0"])
164
165
  s.add_dependency(%q<has-attached>, [">= 0"])
165
166
  s.add_dependency(%q<acts-as-taggable-on>, [">= 0"])
@@ -1,24 +1,91 @@
1
- require 'ostruct'
2
-
3
1
  module Fullstack
4
2
  module Cms
5
-
6
- def config
7
- @config ||= OpenStruct.new
8
- @config.resources ||= []
9
- @config.linkables ||= []
10
- @config.localize = @config.localize.nil? ? true : @config.localize
11
- @config.localize_routes = @config.localize_routes.nil? ? true : @config.localize_routes
12
- @config.default_locale ||= "#{I18n.default_locale}" || "en"
13
- @config
3
+
4
+ class Configuration
5
+ attr_writer :linkables, :localized
6
+
7
+ def default_locale
8
+ "#{I18n.default_locale}" || "en"
9
+ end
10
+
11
+ def localized
12
+ @localized.nil? ? true : @localized
13
+ end
14
+ alias :localize :localized
15
+ alias :localized? :localized
16
+
17
+
18
+ def linkables
19
+ @linkables || []
20
+ end
21
+
22
+ def resources(&block)
23
+ Fullstack::Admin.resources(&block)
24
+ end
25
+
26
+ # config.menu( 'main', :localized => true )
27
+ #
28
+ # ...
29
+ # menu( 'main', :locale => I18n.locale )
30
+ # menu_items( 'main', :locale => I18n.locale )
31
+ #
32
+ #
33
+ #
34
+ def menu(uid, options = {})
35
+ return nil unless Menu.table_exists?
36
+ options = options.reverse_merge({:localized => localized?})
37
+ localized_menu = options.delete(:localized)
38
+
39
+ if localized_menu && localized? # ignores the option if CMS is not localized
40
+ I18n.available_locales.each do |locale|
41
+ m = Menu.find_or_create_by_uid_and_locale(uid.to_s, locale.to_s)
42
+ raise m.errors.full_messages.join("\n") if m.errors.any?
43
+
44
+ end
45
+ else
46
+ m = Menu.find_or_create_by_uid(uid.to_s)
47
+ raise m.errors.full_messages.join("\n") if m.errors.any?
48
+
49
+ end
50
+ end
51
+
52
+ # config.setting('description', :kind => :text, :localized => true, :group => group)
53
+ # setting('website/description', :locale => I18n.locale)
54
+ #
55
+ def setting(key, options = {})
56
+ return nil unless Setting.table_exists?
57
+
58
+ options = options.reverse_merge({ :localized => localized? }).merge({ :autocreate => true })
59
+ localized_setting = options.delete(:localized)
60
+
61
+ if localized_setting && localized? # ignores the option if CMS is not localized
62
+ I18n.available_locales.each do |locale|
63
+ Setting.global(key.to_s, options.merge(:locale => locale.to_s))
64
+ end
65
+ else
66
+ Setting.global(key.to_s, options)
67
+ end
68
+
69
+
70
+ end
71
+
14
72
  end
15
- module_function :config
73
+
74
+
75
+ class << self
76
+
77
+ def config
78
+ @config ||= ::Fullstack::Cms::Configuration.new
79
+ end
16
80
 
17
- def configure
18
- yield(config)
19
- config
81
+ def configure
82
+ yield(config)
83
+ config
84
+ end
85
+
86
+ delegate :linkables, :localized, :localized?, :resources, :to => :config
87
+
20
88
  end
21
- module_function :configure
22
89
 
23
90
  end
24
91
  end
@@ -3,7 +3,9 @@ require 'rails'
3
3
  module Fullstack
4
4
  module Cms
5
5
  class Engine < ::Rails::Engine
6
-
6
+ config.after_initialize do
7
+ load(Rails.root.join("config", "fullstack.rb").to_s)
8
+ end
7
9
  end
8
10
  end
9
11
  end
@@ -1,3 +1,10 @@
1
1
  <footer class="footer">
2
- <%= get_setting(:copyright) %>
2
+ <address>
3
+ <strong><%= setting(:title) %></strong>
4
+ <p><%= simple_format setting("contacts/address") %></p>
5
+ <p><%= link_to setting("contacts/email"), "mailto:#{setting("contacts/email")}"%><br/>
6
+ <%= setting("contacts/phone") %>
7
+ </p>
8
+
9
+ </address>
3
10
  </footer>
@@ -1,5 +1,5 @@
1
1
  <script>
2
- var _gaq=[['_setAccount','<%= get_setting("google_analytics_code", "UA-xxxxxx-x") %>'],['_trackPageview']];
2
+ var _gaq=[['_setAccount','<%= setting("google_analytics_code", "UA-xxxxxx-x") %>'],['_trackPageview']];
3
3
  (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
4
4
  g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
5
5
  s.parentNode.insertBefore(g,s)}(document,'script'));
@@ -3,9 +3,8 @@
3
3
  <%= yield :meta %>
4
4
  <% else %>
5
5
  <%
6
- site_title = get_setting(:site_title) || Settings.app.title
7
- site_description = get_setting(:site_description) || Settings.app.slogan
8
- site_slogan = get_setting(:site_slogan) || Settings.app.slogan
6
+ site_title = get_setting(:title, Settings.app.title)
7
+ site_description = get_setting(:description, Settings.app.slogan)
9
8
  %>
10
9
 
11
10
  <% if home? %>
@@ -0,0 +1,51 @@
1
+ Fullstack::Cms.configure do |config|
2
+
3
+ # =============
4
+ # = Resources =
5
+ # =============
6
+
7
+ config.resources do |admin|
8
+ admin.group :website do |g|
9
+ g.resource :pages
10
+ g.resource :menus
11
+ g.resource :settings
12
+ end
13
+
14
+ admin.group :contents do |g|
15
+ g.resource :texts
16
+ g.resource :prices
17
+ end
18
+
19
+ admin.group :users do |g|
20
+ g.resource :users
21
+ end
22
+ end
23
+
24
+ # =============
25
+ # = Linkables =
26
+ # =============
27
+
28
+ config.linkables = %w(pages texts)
29
+
30
+ # =========
31
+ # = Menus =
32
+ # =========
33
+
34
+ config.menu(:main)
35
+
36
+ # ============
37
+ # = Settings =
38
+ # ============
39
+
40
+ config.setting(:google_analytics_code, :localized => false)
41
+ config.setting(:facebook_app_id, :localized => false)
42
+
43
+ config.setting(:title)
44
+ config.setting(:slogan)
45
+ config.setting(:description, :text)
46
+
47
+ config.setting(:address, :text, :group => :contacts)
48
+ config.setting(:phone, :group => :contacts)
49
+ config.setting(:email, :group => :contacts)
50
+
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fullstack-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-03 00:00:00.000000000 Z
12
+ date: 2012-09-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fullstack-admin
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.1.40
21
+ version: 0.1.42
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.1.40
29
+ version: 0.1.42
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: ars-permalink
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -252,6 +252,7 @@ files:
252
252
  - app/views/admin/linkables/_fields.html.erb
253
253
  - app/views/admin/linkables/fields.js.coffee
254
254
  - app/views/admin/links/_associated_fields.html.erb
255
+ - app/views/admin/menus/_collection.html.erb
255
256
  - app/views/admin/pages/_collection.html.erb
256
257
  - app/views/admin/pages/_form.html.erb
257
258
  - app/views/admin/photos/_photo.html.erb
@@ -295,9 +296,9 @@ files:
295
296
  - lib/generators/fullstack/cms/templates/rails/app/views/site/_nav.html.erb
296
297
  - lib/generators/fullstack/cms/templates/rails/app/views/site/_share_buttons_big.html.erb
297
298
  - lib/generators/fullstack/cms/templates/rails/app/views/site/site/home.html.erb
299
+ - lib/generators/fullstack/cms/templates/rails/config/fullstack.rb
298
300
  - lib/generators/fullstack/cms/templates/rails/config/initializers/devise_controller.rb
299
301
  - lib/generators/fullstack/cms/templates/rails/config/initializers/devise_mailer.rb
300
- - lib/generators/fullstack/cms/templates/rails/config/initializers/fullstack.rb
301
302
  - lib/generators/fullstack/cms/templates/rails/config/initializers/sitemap.rb
302
303
  - lib/generators/fullstack/cms/templates/rails/config/schedule.rb
303
304
  - lib/generators/fullstack/cms/templates/rails/config/sitemap.rb.tt
@@ -330,7 +331,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
330
331
  version: '0'
331
332
  segments:
332
333
  - 0
333
- hash: 293567694538273846
334
+ hash: 12527057176936080
334
335
  required_rubygems_version: !ruby/object:Gem::Requirement
335
336
  none: false
336
337
  requirements:
@@ -1,20 +0,0 @@
1
- Fullstack::Admin.resources do |admin|
2
-
3
- admin.group :website do |g|
4
- g.resource :pages
5
- g.resource :menus
6
- g.resource :settings
7
- end
8
-
9
- admin.group :contents do |g|
10
- end
11
-
12
- admin.group :users do |g|
13
- g.resource :users
14
- end
15
-
16
- end
17
-
18
- Fullstack::Cms.configure do |config|
19
- config.linkables = %w(pages)
20
- end