spree_essential_cms 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +23 -0
- data/README.md +78 -0
- data/Rakefile +21 -0
- data/app/controllers/admin/contents_controller.rb +41 -0
- data/app/controllers/admin/page_images_controller.rb +37 -0
- data/app/controllers/admin/pages_controller.rb +38 -0
- data/app/controllers/page_controller.rb +19 -0
- data/app/controllers/pages_controller.rb +28 -0
- data/app/controllers/spree_base_controller_decorator.rb +11 -0
- data/app/models/content.rb +82 -0
- data/app/models/page.rb +61 -0
- data/app/models/page_image.rb +40 -0
- data/app/views/admin/contents/_form.html.erb +74 -0
- data/app/views/admin/contents/edit.html.erb +16 -0
- data/app/views/admin/contents/index.html.erb +59 -0
- data/app/views/admin/contents/new.html.erb +18 -0
- data/app/views/admin/contents/show.html.erb +11 -0
- data/app/views/admin/page_images/_form.html.erb +8 -0
- data/app/views/admin/page_images/edit.html.erb +20 -0
- data/app/views/admin/page_images/index.html.erb +42 -0
- data/app/views/admin/page_images/new.html.erb +20 -0
- data/app/views/admin/pages/_form.html.erb +73 -0
- data/app/views/admin/pages/edit.html.erb +14 -0
- data/app/views/admin/pages/index.html.erb +62 -0
- data/app/views/admin/pages/new.html.erb +16 -0
- data/app/views/admin/pages/show.html.erb +23 -0
- data/app/views/admin/shared/_page_tabs.html.erb +23 -0
- data/app/views/pages/home.html.erb +28 -0
- data/app/views/pages/show.html.erb +3 -0
- data/app/views/shared/_content.html.erb +33 -0
- data/app/views/shared/_main_menu.html.erb +7 -0
- data/app/views/shared/_slideshow.html.erb +8 -0
- data/config/locales/en.yml +55 -0
- data/config/routes.rb +38 -0
- data/lib/dummy_hooks/after_migrate.rb +1 -0
- data/lib/dummy_hooks/after_migrate.rb.sample +1 -0
- data/lib/dummy_hooks/before_migrate.rb +6 -0
- data/lib/generators/essentials_base.rb +23 -0
- data/lib/generators/spree_essentials/cms_generator.rb +17 -0
- data/lib/generators/templates/db/migrate/create_contents.rb +27 -0
- data/lib/generators/templates/db/migrate/create_pages.rb +24 -0
- data/lib/spree_essential_cms/version.rb +3 -0
- data/lib/spree_essential_cms.rb +43 -0
- metadata +236 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/contents_sub_menu' %>
|
2
|
+
|
3
|
+
<%= render :partial => 'admin/shared/page_tabs', :locals => {:current => "Images"} %>
|
4
|
+
|
5
|
+
<% if @page_image.try(:errors).present? %>
|
6
|
+
<%= render 'shared/error_messages', :target => @page_image %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= form_for([:admin, @page.id, @page_image], :url => admin_page_image_url(@page, @page_image), :html => { :multipart => true }) do |f| %>
|
10
|
+
<p>
|
11
|
+
<%= label_tag ("thumbnail") %>:<br/>
|
12
|
+
<%= link_to(image_tag(@page_image.attachment.url(:mini)), @page_image.attachment.url(:product)) %>
|
13
|
+
</p>
|
14
|
+
<%= render "form", :form => f %>
|
15
|
+
</table>
|
16
|
+
<p class="form-buttons">
|
17
|
+
<%= button t("update") %>
|
18
|
+
or <%= link_to t("cancel"), admin_page_images_url(@page), :id => "cancel_link" %>
|
19
|
+
</p>
|
20
|
+
<% end %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/page_tabs', :locals => {:current => "Images"} %>
|
2
|
+
|
3
|
+
<table class="index sortable">
|
4
|
+
<tr>
|
5
|
+
<th><%= t("thumbnail") %></th>
|
6
|
+
<th><%= t("alt_text") %></th>
|
7
|
+
<th><%= t("action") %></th>
|
8
|
+
</tr>
|
9
|
+
|
10
|
+
<% @page.images.each do |image| %>
|
11
|
+
<tr id="<%= dom_id(image).sub('page_', '') %>">
|
12
|
+
<td><span class="handle"> </span> <%= link_to(image_tag(image.attachment.url(:mini)), image.attachment.url(:large)) %></td>
|
13
|
+
<td><%= image.alt %></td>
|
14
|
+
<td class="actions">
|
15
|
+
<%= link_to_with_icon('edit', t("edit"), edit_admin_page_image_url(@page, image)) %>
|
16
|
+
|
17
|
+
<%= link_to_delete image, {:url => admin_page_image_url(@page, image) }%>
|
18
|
+
</td>
|
19
|
+
</tr>
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
</table>
|
23
|
+
|
24
|
+
<div id="images"></div>
|
25
|
+
<br/>
|
26
|
+
<p>
|
27
|
+
<%= link_to icon('add') + ' ' + t("new_image"), new_admin_page_image_url(@page), :id => "new_image_link" %>
|
28
|
+
</p>
|
29
|
+
|
30
|
+
<% content_for :head do %>
|
31
|
+
<script type="text/javascript">
|
32
|
+
jQuery(document).ready(function(){
|
33
|
+
|
34
|
+
jQuery('#new_image_link').click(function (event) {
|
35
|
+
event.preventDefault();
|
36
|
+
jQuery(this).hide();
|
37
|
+
jQuery.ajax({type: 'GET', url: this.href, data: ({authenticity_token: AUTH_TOKEN}), success: function(r){ jQuery('#images').html(r);} });
|
38
|
+
});
|
39
|
+
|
40
|
+
});
|
41
|
+
</script>
|
42
|
+
<% end %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<h3><%= t("new_image") %></h3>
|
2
|
+
|
3
|
+
<%= render 'shared/error_messages', :target => @page_image %>
|
4
|
+
|
5
|
+
<%= form_for(@page_image, :url => admin_page_images_path(@page), :html => { :multipart => true }) do |form| %>
|
6
|
+
<table class="basic-table">
|
7
|
+
<%= render "form", :form => form %>
|
8
|
+
</table>
|
9
|
+
<p class="form-buttons">
|
10
|
+
<%= button t("create") %>
|
11
|
+
or <%= link_to t("cancel"), "#", :id => "cancel_link" %>
|
12
|
+
</p>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<script type="text/javascript">
|
16
|
+
jQuery('#cancel_link').click(function (event) {
|
17
|
+
jQuery('#new_image_link').show();
|
18
|
+
jQuery('#images').html('');
|
19
|
+
});
|
20
|
+
</script>
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<%= form.field_container :title do %>
|
2
|
+
<%= form.label :title, t('page.title') %> <span class="required">*</span><br />
|
3
|
+
<%= form.text_field :title, :class => "title" %>
|
4
|
+
<%= error_message_on :page, :title %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= form.field_container :meta_title do %>
|
8
|
+
<%= form.label :meta_title, t('page.meta_title') %><br />
|
9
|
+
<%= form.text_field :meta_title, :class => "text" %>
|
10
|
+
<%= error_message_on :page, :meta_title %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<%= form.field_container :meta_description do %>
|
14
|
+
<%= form.label :meta_description, t('page.meta_description') %><br />
|
15
|
+
<%= form.text_field :meta_description, :class => "text" %>
|
16
|
+
<%= error_message_on :page, :meta_description %>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<%= form.field_container :meta_keywords do %>
|
20
|
+
<%= form.label :meta_keywords, t('page.meta_keywords') %><br />
|
21
|
+
<%= form.text_field :meta_keywords, :class => "text" %>
|
22
|
+
<%= error_message_on :page, :meta_keywords %>
|
23
|
+
<% end %>
|
24
|
+
|
25
|
+
<%= form.field_container :accessible do %>
|
26
|
+
<%= form.check_box :accessible, :class => "text" %>
|
27
|
+
<%= form.label :accessible, t('page.accessible') %>
|
28
|
+
– <em><%= t('page.explain_accessible') %></em>
|
29
|
+
<%= error_message_on :page, :accessible %>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
<div id="field_path">
|
33
|
+
|
34
|
+
<%= form.field_container :path do %>
|
35
|
+
<%= form.label :path, t('page.path') %><br />
|
36
|
+
<%= form.text_field :path, :class => "text" %>
|
37
|
+
<%= error_message_on :page, :path %>
|
38
|
+
<% end %>
|
39
|
+
|
40
|
+
<%= form.field_container :visible do %>
|
41
|
+
<%= form.check_box :visible, :class => "text" %>
|
42
|
+
<%= form.label :visible, t('page.visible') %>
|
43
|
+
– <em><%= t('page.explain_visible') %></em>
|
44
|
+
<%= error_message_on :page, :visible %>
|
45
|
+
<% end %>
|
46
|
+
|
47
|
+
<div id="field_nav_title">
|
48
|
+
<%= form.field_container :nav_title do %>
|
49
|
+
<%= form.label :nav_title, t('page.nav_title') %><br />
|
50
|
+
<%= form.text_field :nav_title, :class => "text" %>
|
51
|
+
<%= error_message_on :page, :nav_title %>
|
52
|
+
<% end %>
|
53
|
+
</div>
|
54
|
+
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<script type="text/javascript">
|
58
|
+
//<![CDATA[
|
59
|
+
|
60
|
+
$(document).ready(function() {
|
61
|
+
|
62
|
+
$('#page_accessible').change(function(evt) {
|
63
|
+
$('#field_path').toggle(this.checked);
|
64
|
+
}).change();
|
65
|
+
|
66
|
+
$('#page_visible').change(function(evt) {
|
67
|
+
$('#field_nav_title').toggle(this.checked);
|
68
|
+
}).change();
|
69
|
+
|
70
|
+
});
|
71
|
+
|
72
|
+
//]]>
|
73
|
+
</script>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/contents_sub_menu' %>
|
2
|
+
|
3
|
+
<%= render :partial => 'admin/shared/page_tabs', :locals => {:current => 'Page Details'} %>
|
4
|
+
|
5
|
+
<% if @page.try(:errors).present? %>
|
6
|
+
<%= render 'shared/error_messages', :target => @page %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= form_for([:admin, @page]) do |f| %>
|
10
|
+
<%= render "form", :form => f %>
|
11
|
+
<p class="form-buttons">
|
12
|
+
<%= button t("update") %> <%= t('or') %> <%= link_to t('cancel'), collection_url %>
|
13
|
+
</p>
|
14
|
+
<% end %>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/contents_sub_menu' %>
|
2
|
+
|
3
|
+
<div class='toolbar'>
|
4
|
+
<ul class='actions'>
|
5
|
+
<li>
|
6
|
+
<p><%= button_link_to t('.new_page'), new_object_url, :icon => 'add' %></p>
|
7
|
+
</li>
|
8
|
+
</ul>
|
9
|
+
<br class='clear' />
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<h1><%= t('.listing_pages') %></h1>
|
13
|
+
|
14
|
+
<table class="index sortable">
|
15
|
+
<thead>
|
16
|
+
<tr>
|
17
|
+
<th><%= sort_link @search, :title, t("page.title") %></th>
|
18
|
+
<th><%= sort_link @search, :path, t("page.path") %></th>
|
19
|
+
<th><%= sort_link @search, :accessible, t("page.accessible") %></th>
|
20
|
+
<th><%= sort_link @search, :visible, t("page.visible") %></th>
|
21
|
+
<th><%= t("action") %></th>
|
22
|
+
</tr>
|
23
|
+
</thead>
|
24
|
+
<tbody>
|
25
|
+
<%- @collection.each do |page|%>
|
26
|
+
<tr id="<%= dom_id page %>">
|
27
|
+
<td><span class="handle"> </span> <%=link_to page.title, object_url(page) %></td>
|
28
|
+
<td><%= page.path %></td>
|
29
|
+
<td><%= page.accessible %></td>
|
30
|
+
<td><%= page.visible %></td>
|
31
|
+
<td>
|
32
|
+
<%= link_to_with_icon :accept, t('preview'), page.path, :onclick => 'window.open(this.href);return false;' %>
|
33
|
+
<%= link_to_with_icon :pages, t('page.contents'), admin_page_contents_path(page) %>
|
34
|
+
<%= link_to_edit page %>
|
35
|
+
<%= link_to_delete page %>
|
36
|
+
</td>
|
37
|
+
</tr>
|
38
|
+
<% end %>
|
39
|
+
</tbody>
|
40
|
+
</table>
|
41
|
+
|
42
|
+
<%= will_paginate(:prev => "« #{t('previous')}", :next => "#{t('next')} »") %>
|
43
|
+
|
44
|
+
<% content_for :sidebar do %>
|
45
|
+
<div class="box">
|
46
|
+
<h3><%= t(:search) %></h3>
|
47
|
+
|
48
|
+
<% @page = Page.metasearch %>
|
49
|
+
<%= form_for [:admin, @page] do |f| %>
|
50
|
+
<%- locals = {:f => f} %>
|
51
|
+
<%= hook :admin_pages_index_search, locals do %>
|
52
|
+
<p>
|
53
|
+
<label><%= t '.title_contains' %></label><br />
|
54
|
+
<%= f.text_field :title_contains, :size => 25 %>
|
55
|
+
</p>
|
56
|
+
<% end %>
|
57
|
+
<%= hook :admin_pages_index_search_buttons, locals do %>
|
58
|
+
<p><%= button t("search") %></p>
|
59
|
+
<% end %>
|
60
|
+
<% end %>
|
61
|
+
</div>
|
62
|
+
<% end %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/contents_sub_menu' %>
|
2
|
+
|
3
|
+
<% if @page.try(:errors).present? %>
|
4
|
+
<%= render 'shared/error_messages', :target => @page %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<h1><%= t('.new_page') %></h1>
|
8
|
+
|
9
|
+
<% form_for([:admin, @page], :html => { :multipart => true }) do |f| %>
|
10
|
+
<%= render "form", :form => f %>
|
11
|
+
|
12
|
+
<p class="form-buttons">
|
13
|
+
<%= button t('create') %> <%= t('or') %> <%= link_to t('cancel'), collection_url %>
|
14
|
+
</p>
|
15
|
+
<% end %>
|
16
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/contents_sub_menu' %>
|
2
|
+
|
3
|
+
<%= render :partial => 'admin/shared/page_tabs', :locals => {:current => "Page Details"} %>
|
4
|
+
|
5
|
+
<h3>Meta Data:</h3>
|
6
|
+
<p>
|
7
|
+
<b><%= t('page.meta_title') %>:</b> <%= @page.meta_title %><br/>
|
8
|
+
<b><%= t('page.meta_description') %>:</b> <%= @page.meta_description %><br/>
|
9
|
+
<b><%= t('page.meta_keywords') %>:</b> <%= @page.meta_keywords %>
|
10
|
+
</p>
|
11
|
+
|
12
|
+
<hr/>
|
13
|
+
|
14
|
+
<% @page.contents.each do |content| %>
|
15
|
+
|
16
|
+
<%= content.title %>
|
17
|
+
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<p>
|
21
|
+
<%= link_to_edit @page %>
|
22
|
+
<%= link_to t('back'), collection_url %>
|
23
|
+
</p>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1><%= (t('.editing_page') + " “#{@page.title}”").html_safe %></h1>
|
2
|
+
|
3
|
+
<% content_for :sidebar do %>
|
4
|
+
|
5
|
+
<h3 class="name"><%= @page.title %></h3>
|
6
|
+
<br clear="clear" />
|
7
|
+
|
8
|
+
<ul class="sidebar post-menu">
|
9
|
+
<%= hook :admin_page_tabs, {:current => current} do %>
|
10
|
+
<li<%== ' class="active"' if current == t('.page_details') %>>
|
11
|
+
<%= link_to t('.page_details'), edit_admin_page_url(@page) %>
|
12
|
+
</li>
|
13
|
+
<li<%== ' class="active"' if current == "Contents" %>>
|
14
|
+
<%= link_to t('.contents'), admin_page_contents_url(@page) %>
|
15
|
+
</li>
|
16
|
+
<li<%== ' class="active"' if current == "Images" %>>
|
17
|
+
<%= link_to t('.images'), admin_page_images_url(@page) %>
|
18
|
+
</li>
|
19
|
+
<% end %>
|
20
|
+
</ul>
|
21
|
+
<br clear="clear" />
|
22
|
+
|
23
|
+
<% end %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% unless @page.images.empty? %>
|
2
|
+
<%= render 'shared/slideshow', :images => @page.images, :size => :slide %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% if @page.has_context?('intro') %>
|
6
|
+
<div class="intro">
|
7
|
+
<%= render 'shared/content', :content => @page.for_context('intro').first %>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<div class="left">
|
12
|
+
<%= render :partial => 'shared/content', :collection => @page.for_context("") %>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class="right">
|
16
|
+
<% if defined?(SpreeEssentialBlog) && !@posts.blank? %>
|
17
|
+
<div class="home-posts">
|
18
|
+
<h1><%= t('blog.home.title') %></h1>
|
19
|
+
<%= render :partial => 'blog/posts/preview', :collection => @posts, :as => :post %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
<% if defined?(SpreeEssentialNews) && !@articles.blank? %>
|
23
|
+
<div class="home-articles">
|
24
|
+
<h1><%= t('news.home.title') %></h1>
|
25
|
+
<%= render :partial => 'news/articles/preview', :collection => @articles, :as => :article %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<% content ||= @content %>
|
2
|
+
<% html ||= false %>
|
3
|
+
<% content_counter ||= 0 %>
|
4
|
+
|
5
|
+
<% unless content.nil? %>
|
6
|
+
|
7
|
+
<div class="content<%= ' alt' if content_counter % 2 == 0 %>" id="<%= dom_id(content) %>">
|
8
|
+
|
9
|
+
<% if content.has_image? %>
|
10
|
+
<div class="content-left">
|
11
|
+
<%= image_tag content.attachment.url(:medium), :alt => content.title, :class => 'in-content' %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<div class="<%= content.has_image? ? "content-right" : "content-main" %>">
|
16
|
+
<% unless content.hide_title? %>
|
17
|
+
<h1 class="title"><%= content.title %></h1>
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<%= content.rendered_body %>
|
21
|
+
|
22
|
+
<% if content.has_full_link? %>
|
23
|
+
<%= link_to content.link_text || 'read more', content.link %>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<br class="clear"/>
|
28
|
+
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<br class="clear"/>
|
32
|
+
|
33
|
+
<% end %>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
en:
|
2
|
+
page:
|
3
|
+
contents: Contents
|
4
|
+
title: Title
|
5
|
+
nav_title: Navigation Title
|
6
|
+
path: Path
|
7
|
+
meta_title: Meta Title
|
8
|
+
meta_description: Meta Description
|
9
|
+
meta_keywords: Meta Keywords
|
10
|
+
accessible: Accessible
|
11
|
+
visible: Visible
|
12
|
+
explain_accessible: non-accessible pages must be coded into a custom controller.
|
13
|
+
explain_visible: visible pages will show up in the main menu.
|
14
|
+
|
15
|
+
content:
|
16
|
+
page_title: Page Title
|
17
|
+
page: Page
|
18
|
+
title: Title
|
19
|
+
body: Body
|
20
|
+
attachment: Attachment
|
21
|
+
link: Link URL
|
22
|
+
link_text: Link Text
|
23
|
+
context: Context
|
24
|
+
hide_title: Hide Title
|
25
|
+
|
26
|
+
pages: Pages
|
27
|
+
|
28
|
+
admin:
|
29
|
+
subnav:
|
30
|
+
pages: Pages
|
31
|
+
shared:
|
32
|
+
contents_tab:
|
33
|
+
content: Content
|
34
|
+
page_tabs:
|
35
|
+
editing_page: Editing Page
|
36
|
+
page_details: Page Details
|
37
|
+
contents: Contents
|
38
|
+
images: Images
|
39
|
+
pages:
|
40
|
+
index:
|
41
|
+
title: Title
|
42
|
+
listing_pages: Listing Pages
|
43
|
+
new_page: New Page
|
44
|
+
title_contains: Title
|
45
|
+
new:
|
46
|
+
new_page: New Page
|
47
|
+
|
48
|
+
contents:
|
49
|
+
index:
|
50
|
+
new_content: New Content
|
51
|
+
listing_contents: Listing Contents
|
52
|
+
new:
|
53
|
+
new_content: New Content
|
54
|
+
edit:
|
55
|
+
edit_content: Edit Content
|
data/config/routes.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
class PossiblePage
|
2
|
+
def self.matches?(request)
|
3
|
+
path = request.fullpath
|
4
|
+
return false if path =~ /(^\/(admin|account|cart|checkout|content|login|pg\/|orders|products|s\/|session|signup|shipments|states|t\/|tax_categories|user))/
|
5
|
+
count = Page.active.where(:path => path).count
|
6
|
+
0 < count
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
Rails.application.routes.draw do
|
11
|
+
|
12
|
+
namespace :admin do
|
13
|
+
|
14
|
+
resources :pages do
|
15
|
+
collection do
|
16
|
+
post :update_positions
|
17
|
+
end
|
18
|
+
|
19
|
+
resources :contents do
|
20
|
+
collection do
|
21
|
+
post :update_positions
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
resources :images, :controller => "page_images" do
|
26
|
+
collection do
|
27
|
+
post :update_positions
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
constraints(PossiblePage) do
|
35
|
+
get '(:page_path)', :to => 'pages#show', :page_path => /.*/, :as => :page
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
rake "db:migrate db:seed db:admin:create", :env => "development"
|
@@ -0,0 +1 @@
|
|
1
|
+
rake "db:migrate db:seed db:admin:create", :env => "development"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SpreeEssentials
|
2
|
+
module Generators
|
3
|
+
class EssentialsBase < Rails::Generators::Base
|
4
|
+
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
|
7
|
+
def self.count!
|
8
|
+
@count ||= 0
|
9
|
+
(@count += 1) * 3
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.next_migration_number(path)
|
13
|
+
@time ||= Time.new.utc
|
14
|
+
if ActiveRecord::Base.timestamped_migrations
|
15
|
+
(@time + self.count!).strftime("%Y%m%d%H%M%S")
|
16
|
+
else
|
17
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'generators/essentials_base'
|
2
|
+
|
3
|
+
module SpreeEssentials
|
4
|
+
module Generators
|
5
|
+
class CmsGenerator < SpreeEssentials::Generators::EssentialsBase
|
6
|
+
|
7
|
+
desc "Installs required migrations for spree_essentials"
|
8
|
+
source_root File.expand_path("../../templates/db/migrate", __FILE__)
|
9
|
+
|
10
|
+
def copy_migrations
|
11
|
+
migration_template "create_pages.rb", "db/migrate/create_pages.rb"
|
12
|
+
migration_template "create_contents.rb", "db/migrate/create_contents.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class CreateContents < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :contents do |t|
|
4
|
+
t.references :page
|
5
|
+
t.string :title
|
6
|
+
t.text :body
|
7
|
+
t.string :link
|
8
|
+
t.string :link_text
|
9
|
+
t.string :context
|
10
|
+
t.boolean :hide_title, :default => false
|
11
|
+
|
12
|
+
t.integer :position, :default => 999
|
13
|
+
|
14
|
+
t.string :attachment_file_name
|
15
|
+
t.string :attachment_content_type
|
16
|
+
t.integer :attachment_file_size
|
17
|
+
t.datetime :attachment_updated_at
|
18
|
+
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.down
|
25
|
+
drop_table :contents
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class CreatePages < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :pages do |t|
|
4
|
+
t.string :title
|
5
|
+
t.string :nav_title
|
6
|
+
t.string :path
|
7
|
+
|
8
|
+
t.string :meta_title
|
9
|
+
t.string :meta_description
|
10
|
+
t.string :meta_keywords
|
11
|
+
|
12
|
+
t.integer :position, :default => 999
|
13
|
+
t.boolean :accessible, :default => true
|
14
|
+
t.boolean :visible, :default => true
|
15
|
+
|
16
|
+
t.timestamps
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.down
|
22
|
+
drop_table :pages
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spree_essentials'
|
2
|
+
|
3
|
+
module SpreeEssentialCms
|
4
|
+
|
5
|
+
def self.tab
|
6
|
+
[:pages, { :route => :admin_pages_index }]
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.sub_tab
|
10
|
+
[:pages, { :route => :admin_pages_index, :label => 'admin.subnav.pages', :match_path => '/pages' }]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.independent?
|
14
|
+
return true unless defined?(SpreeEssentials)
|
15
|
+
!SpreeEssentials.respond_to?(:register)
|
16
|
+
end
|
17
|
+
|
18
|
+
class Engine < Rails::Engine
|
19
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
20
|
+
|
21
|
+
initializer "static assets" do |app|
|
22
|
+
app.middleware.insert_before ::Rack::Lock, ::ActionDispatch::Static, "#{config.root}/public"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.activate
|
26
|
+
|
27
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator.rb")) do |c|
|
28
|
+
Rails.env.production? ? require(c) : load(c)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
config.to_prepare &method(:activate).to_proc
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
if SpreeEssentialCms.independent?
|
40
|
+
require 'spree_essential_press/custom_hooks'
|
41
|
+
else
|
42
|
+
SpreeEssentials.register :cms, SpreeEssentialCms
|
43
|
+
end
|