camaleon_cms 0.1.9 → 0.2.0
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.
Potentially problematic release.
This version of camaleon_cms might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/admin/core.scss +4 -0
- data/app/controllers/admin/plugins_controller.rb +8 -0
- data/app/decorators/post_decorator.rb +8 -0
- data/app/decorators/term_taxonomy_decorator.rb +8 -0
- data/app/helpers/plugins_helper.rb +13 -0
- data/app/models/plugin.rb +21 -0
- data/app/views/admin/plugins/_plugins_list.html.erb +5 -4
- data/app/views/admin/plugins/index.html.erb +3 -1
- data/config/initializers/rufus_cron.rb +9 -12
- data/config/locales/admin/en.yml +2 -0
- data/config/locales/admin/es.yml +2 -0
- data/config/locales/admin/it.yml +2 -0
- data/config/locales/common.yml +3 -0
- data/config/routes/admin.rb +1 -0
- data/lib/camaleon_cms/engine.rb +24 -28
- data/lib/camaleon_cms/version.rb +1 -1
- data/lib/ext/string.rb +7 -1
- data/lib/generators/camaleon_cms/install_template/plugin_routes.rb +11 -277
- data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/config/config.json +3 -0
- data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/main_helper.rb +5 -0
- data/lib/plugin_routes.rb +290 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 418b31e8a9007f20ed7e54b748b16b7edd8b0c6d
|
4
|
+
data.tar.gz: a7f16254d383c954d350d7f23b6f1d56bc16e0ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b550adda1b21074dd7118693739e0a87c72ed76edafe9ac7fc7ab361882c035bbfd61eab6c545eff7311a016d13ca1317e17d898abbf05c135d5e6ecef09b7b
|
7
|
+
data.tar.gz: 9f89b6a54b89da1e76db22ea6d45a425304cdfacb859f6be332c78d2a3f2feb4bf1903b5fd13b367d23107df96c63c85657bc3721ae0555a3e0cdeff73f6825d
|
@@ -27,6 +27,14 @@ class Admin::PluginsController < AdminController
|
|
27
27
|
redirect_to action: :index
|
28
28
|
end
|
29
29
|
|
30
|
+
# permit to upgrade a plugin for a new version
|
31
|
+
def upgrade
|
32
|
+
plugin = plugin_upgrade(params[:plugin_id])
|
33
|
+
flash[:notice] = "Plugin \"#{plugin.title}\" #{t('admin.message.was_upgraded')}"
|
34
|
+
PluginRoutes.reload
|
35
|
+
redirect_to action: :index
|
36
|
+
end
|
37
|
+
|
30
38
|
def destroy
|
31
39
|
plugin = plugin_destroy(params[:id])
|
32
40
|
if plugin.error
|
@@ -72,6 +72,14 @@ class PostDecorator < ApplicationDecorator
|
|
72
72
|
h.edit_admin_post_type_post_url(object.post_type.id, object)
|
73
73
|
end
|
74
74
|
|
75
|
+
# create the html link with edit link
|
76
|
+
# return html link
|
77
|
+
# attrs: Hash of link tag attributes, sample: {id: "myid", class: "sss" }
|
78
|
+
def the_edit_link(title = nil, attrs = { })
|
79
|
+
attrs = {target: "_blank", style: "font-size:11px !important;cursor:pointer;"}.merge(attrs)
|
80
|
+
h.link_to("→ #{title || h.ct("edit")}", the_edit_url, *attrs)
|
81
|
+
end
|
82
|
+
|
75
83
|
# show thumbnail image as html
|
76
84
|
def the_thumb(img_args = {})
|
77
85
|
r = {image: h.image_tag(the_thumb_url, img_args), post: object}
|
@@ -77,6 +77,14 @@ class TermTaxonomyDecorator < ApplicationDecorator
|
|
77
77
|
link
|
78
78
|
end
|
79
79
|
|
80
|
+
# create the html link with edit link
|
81
|
+
# return html link
|
82
|
+
# attrs: Hash of link tag attributes, sample: {id: "myid", class: "sss" }
|
83
|
+
def the_edit_link(title = nil, attrs = { })
|
84
|
+
attrs = {target: "_blank", style: "font-size:11px !important;cursor:pointer;"}.merge(attrs)
|
85
|
+
h.link_to("→ #{title || h.ct("edit")}", the_edit_url, *attrs)
|
86
|
+
end
|
87
|
+
|
80
88
|
# cache identifier, the format is: [current-site-prefix]/[object-id]-[object-last_updated]/[current locale]
|
81
89
|
# key: additional key for the model
|
82
90
|
def cache_prefix(key = "")
|
@@ -21,11 +21,23 @@ module PluginsHelper
|
|
21
21
|
(klass || self).send :extend, mod
|
22
22
|
end
|
23
23
|
|
24
|
+
# upgrade installed plugin in current site for a new version
|
25
|
+
# plugin_key: key of the plugin
|
26
|
+
# trigger hook "on_upgrade"
|
27
|
+
# return model of the plugin
|
28
|
+
def plugin_upgrade(plugin_key)
|
29
|
+
plugin_model = current_site.plugins.where(slug: plugin_key).first!
|
30
|
+
hook_run(plugin_model.settings, "on_upgrade", plugin_model)
|
31
|
+
plugin_model.installed_version= plugin_model.settings["version"]
|
32
|
+
plugin_model
|
33
|
+
end
|
34
|
+
|
24
35
|
# install a plugin for current site
|
25
36
|
# plugin_key: key of the plugin
|
26
37
|
# return model of the plugin
|
27
38
|
def plugin_install(plugin_key)
|
28
39
|
plugin_model = current_site.plugins.where(slug: plugin_key).first_or_create!
|
40
|
+
plugin_model.installed_version= plugin_model.settings["version"]
|
29
41
|
return plugin_model if plugin_model.active?
|
30
42
|
plugin_model.active
|
31
43
|
PluginRoutes.reload
|
@@ -51,6 +63,7 @@ module PluginsHelper
|
|
51
63
|
# plugin_key: key of the plugin
|
52
64
|
# return model of the plugin removed
|
53
65
|
def plugin_destroy(plugin_key)
|
66
|
+
# return
|
54
67
|
plugin_model = current_site.plugins.where(slug: plugin_key).first_or_create
|
55
68
|
if !plugin_can_be_deleted?(params[:id]) || true
|
56
69
|
plugin_model.error = false
|
data/app/models/plugin.rb
CHANGED
@@ -41,6 +41,27 @@ class Plugin < TermTaxonomy
|
|
41
41
|
PluginRoutes.plugin_info(self.slug)
|
42
42
|
end
|
43
43
|
|
44
|
+
# check if current installation version is older
|
45
|
+
# return boolean
|
46
|
+
def old_version?
|
47
|
+
self.installed_version.to_s != self.settings["version"].to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
# set a new installation version for this plugin
|
51
|
+
def installed_version=(version)
|
52
|
+
self.set_option("version_installed", version)
|
53
|
+
end
|
54
|
+
|
55
|
+
# return gem installed version
|
56
|
+
def installed_version
|
57
|
+
res = self.get_option("version_installed")
|
58
|
+
unless res.present? # fix for old installations
|
59
|
+
res = self.settings["version"]
|
60
|
+
self.installed_version= res
|
61
|
+
end
|
62
|
+
res
|
63
|
+
end
|
64
|
+
|
44
65
|
def title
|
45
66
|
PluginRoutes.plugin_info(self.slug)["title"]
|
46
67
|
end
|
@@ -13,12 +13,12 @@
|
|
13
13
|
</tr>
|
14
14
|
</thead>
|
15
15
|
<tbody>
|
16
|
-
<% plugins.each do |plugin| status = enabled_plugins.include?(plugin); r = {links: []}; %>
|
16
|
+
<% plugins.each do |plugin| status = enabled_plugins.include?(plugin); r = {links: ["Version: #{plugin["version"]}"]}; %>
|
17
17
|
<tr>
|
18
18
|
<td>
|
19
|
-
|
19
|
+
<b><%= plugin["title"] %></b>
|
20
20
|
<br>
|
21
|
-
<% r[:links] << (link_to("#{t('admin.sidebar.information')}", "http://camaleon.tuzitio.com/store/plugins/info/#{plugin["key"]}", target: "_blank", title: "#{
|
21
|
+
<% r[:links] << (link_to("#{t('admin.sidebar.information')}", "http://camaleon.tuzitio.com/store/plugins/info/#{plugin["key"]}", target: "_blank", title: "Plugin #{t('admin.sidebar.information')}")) %>
|
22
22
|
<% hook_run(plugin, "plugin_options", r) if status %>
|
23
23
|
<%= raw r[:links].join(" | ") %>
|
24
24
|
</td>
|
@@ -26,7 +26,8 @@
|
|
26
26
|
<td><%= plugin["version"] %></td>
|
27
27
|
<td><%= t("admin.plugins.status_#{status}") %></td>
|
28
28
|
<td>
|
29
|
-
<%= link_to raw("<i class='fa fa-#{status ? "check-square" : "square"}'></i>"), {action: :toggle, id: plugin["key"], status: status }, class: "btn btn-default btn-xs", title: "#{status ? t('admin.button.disable_plugin') : t('admin.button.activate_plugin') }" %>
|
29
|
+
<%= link_to raw("<i class='fa fa-#{status ? "check-square" : "square"}'></i>"), {action: :toggle, id: plugin["key"], status: status }, class: "btn btn-default btn-xs", title: "#{status ? t('admin.button.disable_plugin') : t('admin.button.activate_plugin') }", data: { confirm: "#{"#{status ? t('admin.button.disable_plugin') : t('admin.button.activate_plugin') }"}?" } %>
|
30
|
+
<%= link_to("<i class='fa fa-arrow-circle-o-up'></i>".html_safe, admin_plugin_upgrade_path(plugin["key"]), class: "btn btn-info btn-xs", title: "#{t("admin.plugins.upgrade_to")} #{plugin["version"]}") if status && current_site.get_plugin(plugin["key"]).old_version? %>
|
30
31
|
</td>
|
31
32
|
</tr>
|
32
33
|
<% end %>
|
@@ -19,18 +19,15 @@ if loaded_rufus
|
|
19
19
|
system("rake camaleon_cms:sitemap")
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@_hooks_skip = []
|
30
|
-
end
|
31
|
-
r = {site: site, eval: nil}; c.hooks_run("cron", r)
|
32
|
-
r[:eval].call(r) if r[:eval].present? # evaluate the cron job created by plugin or theme
|
22
|
+
sites = Site.all rescue []
|
23
|
+
sites.each do |site|
|
24
|
+
# triggering cron hooks
|
25
|
+
c = CamaleonController.new
|
26
|
+
c.instance_eval do
|
27
|
+
@current_site = site
|
28
|
+
@_hooks_skip = []
|
33
29
|
end
|
34
|
-
|
30
|
+
r = {site: site, eval: nil}; c.hooks_run("cron", r)
|
31
|
+
r[:eval].call(r) if r[:eval].present? # evaluate the cron job created by plugin or theme
|
35
32
|
end
|
36
33
|
end
|
data/config/locales/admin/en.yml
CHANGED
@@ -177,6 +177,7 @@ en:
|
|
177
177
|
quick_info: 'Some quick info about this user'
|
178
178
|
was_inactivated: 'was inactivated.'
|
179
179
|
was_activated: 'was activated.'
|
180
|
+
was_upgraded: 'was updated.'
|
180
181
|
can_not_be_removed: 'can not be removed.'
|
181
182
|
was_removed: 'was removed.'
|
182
183
|
processing: 'Procesando...'
|
@@ -273,6 +274,7 @@ en:
|
|
273
274
|
status_false: 'Inactive'
|
274
275
|
status_true: 'Active'
|
275
276
|
type_contents: 'Type Contents'
|
277
|
+
upgrade_to: "Upgrade to"
|
276
278
|
settings:
|
277
279
|
activate_create_account: 'Activate Create Account'
|
278
280
|
activate_login_social_networks: 'Activate Login Social Networks'
|
data/config/locales/admin/es.yml
CHANGED
@@ -177,6 +177,7 @@ es:
|
|
177
177
|
quick_info: 'Algo de información rápida acerca de este usuario'
|
178
178
|
was_inactivated: 'fue desactivado.'
|
179
179
|
was_activated: 'fue activado.'
|
180
|
+
was_upgraded: 'fue actualizado.'
|
180
181
|
can_not_be_removed: 'no puede ser eliminado.'
|
181
182
|
was_removed.: 'fue eliminado.'
|
182
183
|
processing: 'Processing...'
|
@@ -273,6 +274,7 @@ es:
|
|
273
274
|
status_false: 'Inactivo'
|
274
275
|
status_true: 'Activo'
|
275
276
|
type_contents: 'Tipo de Contenidos'
|
277
|
+
upgrade_to: "Actualizar a"
|
276
278
|
settings:
|
277
279
|
activate_create_account: 'Activar Crear Cuenta'
|
278
280
|
activate_login_social_networks: 'Activar Iniciar sesión con Redes Sociales'
|
data/config/locales/admin/it.yml
CHANGED
@@ -178,6 +178,7 @@ it:
|
|
178
178
|
quick_info: "Informazioni veloci sull'utente"
|
179
179
|
was_inactivated: 'è stato disattivato.'
|
180
180
|
was_activated: 'è stato attivato.'
|
181
|
+
was_upgraded: "E 'stato aggiornato."
|
181
182
|
can_not_be_removed: 'Non può essere rimosso.'
|
182
183
|
was_removed: 'è stato rimosso.'
|
183
184
|
processing: 'Caricamento...'
|
@@ -274,6 +275,7 @@ it:
|
|
274
275
|
status_false: 'Inattivo'
|
275
276
|
status_true: 'Attivo'
|
276
277
|
type_contents: 'Type Contents'
|
278
|
+
upgrade_to: "Aggiornamento a"
|
277
279
|
settings:
|
278
280
|
activate_create_account: 'Attiva account creato'
|
279
281
|
activate_login_social_networks: 'Attiva i Login con i Social Network'
|
data/config/locales/common.yml
CHANGED
@@ -20,6 +20,7 @@ en:
|
|
20
20
|
comment_saved: "Your comment was saved"
|
21
21
|
comment_error: "An error was occurred on save comment"
|
22
22
|
comment_reply: "Reply"
|
23
|
+
edit: "Edit"
|
23
24
|
|
24
25
|
recent_posts: "Recent Posts"
|
25
26
|
|
@@ -81,6 +82,7 @@ es:
|
|
81
82
|
comment_saved: "Su comentario se a guardado"
|
82
83
|
comment_error: "Ocurrió un error al enviar su comentario"
|
83
84
|
comment_reply: "Respuesta"
|
85
|
+
edit: "Editar"
|
84
86
|
|
85
87
|
recent_posts: "Artículos Recientes"
|
86
88
|
|
@@ -142,6 +144,7 @@ it:
|
|
142
144
|
comment_saved: "Il tuo commento è stato salvato"
|
143
145
|
comment_error: "C'è stato un errore durante il salvataggio del commento"
|
144
146
|
comment_reply: "Rispondi"
|
147
|
+
edit: "Modifica"
|
145
148
|
|
146
149
|
recent_posts: "Articoli recenti"
|
147
150
|
|
data/config/routes/admin.rb
CHANGED
data/lib/camaleon_cms/engine.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
$camaleon_engine_dir = File.expand_path("../../../", __FILE__)
|
2
|
+
require File.join($camaleon_engine_dir, "lib", "plugin_routes").to_s
|
2
3
|
Dir[File.join($camaleon_engine_dir, "lib", "ext", "**", "*.rb")].each{ |f| require f }
|
3
4
|
module CamaleonCms
|
4
5
|
class Engine < ::Rails::Engine
|
@@ -6,43 +7,38 @@ module CamaleonCms
|
|
6
7
|
if app.respond_to?(:console)
|
7
8
|
app.console do
|
8
9
|
puts "******** Camaleon CMS: To use custom models and helpers of installed plugins, write this: ********"
|
9
|
-
puts "include SiteHelper
|
10
|
-
puts "
|
10
|
+
puts "- include SiteHelper"
|
11
|
+
puts "- site_console_switch(Site.first.decorate)"
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
initializer :append_migrations do |app|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
engine_dir = File.expand_path("../../../", __FILE__)
|
21
|
-
app.config.i18n.load_path += Dir[File.join($camaleon_engine_dir, 'config', 'locales', '**', '*.{rb,yml}')]
|
22
|
-
app.config.i18n.enforce_available_locales = false
|
23
|
-
PluginRoutes.all_apps.each{ |info| app.config.i18n.load_path += Dir[File.join(info["path"], "config", "locales", '*.{rb,yml}')] }
|
17
|
+
engine_dir = File.expand_path("../../../", __FILE__)
|
18
|
+
app.config.i18n.load_path += Dir[File.join($camaleon_engine_dir, 'config', 'locales', '**', '*.{rb,yml}')]
|
19
|
+
app.config.i18n.enforce_available_locales = false
|
20
|
+
PluginRoutes.all_apps.each{ |info| app.config.i18n.load_path += Dir[File.join(info["path"], "config", "locales", '*.{rb,yml}')] }
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
# assets
|
23
|
+
app.config.assets.paths << Rails.root.join("app", "apps")
|
24
|
+
app.config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
|
25
|
+
app.config.assets.paths << File.join($camaleon_engine_dir, "app", "apps")
|
26
|
+
app.config.assets.paths << File.join($camaleon_engine_dir, 'app', 'assets', 'fonts')
|
27
|
+
app.config.encoding = "utf-8"
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
#multiple route files
|
30
|
+
app.routes_reloader.paths.push(File.join(engine_dir, "config", "routes", "admin.rb"))
|
31
|
+
app.routes_reloader.paths.push(File.join(engine_dir, "config", "routes", "frontend.rb"))
|
32
|
+
# Dir[File.join(engine_dir, "config", "routes", "*.rb")].each{|r| app.routes_reloader.paths.unshift(r) }
|
36
33
|
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
# extra configuration for plugins
|
35
|
+
app.config.autoload_paths += %W{#{app.config.root}/app/apps/**/}
|
36
|
+
PluginRoutes.all_plugins.each{ |plugin| app.config.paths["db/migrate"] << File.join(plugin["path"], "migrate") if Dir.exist?(File.join(plugin["path"], "migrate")) }
|
40
37
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
38
|
+
# migrations checking
|
39
|
+
unless app.root.to_s.match root.to_s
|
40
|
+
config.paths["db/migrate"].expanded.each do |expanded_path|
|
41
|
+
app.config.paths["db/migrate"] << expanded_path
|
46
42
|
end
|
47
43
|
end
|
48
44
|
end
|
data/lib/camaleon_cms/version.rb
CHANGED
data/lib/ext/string.rb
CHANGED
@@ -16,6 +16,10 @@ class String
|
|
16
16
|
return /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/.match(self).present?
|
17
17
|
end
|
18
18
|
|
19
|
+
def is_float?
|
20
|
+
self.to_f.to_s == self.to_s
|
21
|
+
end
|
22
|
+
|
19
23
|
def is_number?
|
20
24
|
self.to_f.to_s == self.to_s || self.to_i.to_s == self.to_s
|
21
25
|
end
|
@@ -25,7 +29,9 @@ class String
|
|
25
29
|
end
|
26
30
|
|
27
31
|
def to_var
|
28
|
-
if
|
32
|
+
if is_float?
|
33
|
+
self.to_f
|
34
|
+
elsif is_number?
|
29
35
|
self.to_i
|
30
36
|
elsif is_bool?
|
31
37
|
self.to_bool
|
@@ -1,239 +1,23 @@
|
|
1
1
|
require 'json'
|
2
2
|
class PluginRoutes
|
3
|
-
@@_vars = []
|
4
|
-
# load plugin routes if it is enabled
|
5
|
-
def self.load(env = "admin")
|
6
|
-
plugins = all_enabled_plugins
|
7
|
-
res = ""
|
8
|
-
if env == "front"
|
9
|
-
res << "namespace :plugins do \n"
|
10
|
-
plugins.each do |plugin|
|
11
|
-
res << "namespace '#{plugin["key"]}' do \n"
|
12
|
-
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
13
|
-
res << "end\n"
|
14
|
-
end
|
15
|
-
res << "end\n"
|
16
|
-
|
17
|
-
elsif env == "admin" # admin
|
18
|
-
res << "scope 'admin', as: 'admin' do \n"
|
19
|
-
res << "namespace :plugins do \n"
|
20
|
-
plugins.each do |plugin|
|
21
|
-
res << "namespace '#{plugin["key"]}' do \n"
|
22
|
-
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
23
|
-
res << "end\n"
|
24
|
-
end
|
25
|
-
res << "end\n"
|
26
|
-
res << "end\n"
|
27
|
-
else # main
|
28
|
-
plugins.each do |plugin|
|
29
|
-
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
30
|
-
end
|
31
|
-
end
|
32
|
-
res + load_themes(env)
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.load_themes(env = "admin")
|
36
|
-
plugins = all_enabled_themes
|
37
|
-
res = ""
|
38
|
-
if env == "front"
|
39
|
-
res << "namespace :themes do \n"
|
40
|
-
plugins.each do |plugin|
|
41
|
-
res << "namespace '#{plugin["key"]}' do \n"
|
42
|
-
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
43
|
-
res << "end\n"
|
44
|
-
end
|
45
|
-
res << "end\n"
|
46
|
-
|
47
|
-
elsif env == "admin" # admin
|
48
|
-
res << "scope 'admin', as: 'admin' do \n"
|
49
|
-
res << "namespace :themes do \n"
|
50
|
-
plugins.each do |plugin|
|
51
|
-
res << "namespace '#{plugin["key"]}' do \n"
|
52
|
-
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
53
|
-
res << "end\n"
|
54
|
-
end
|
55
|
-
res << "end\n"
|
56
|
-
res << "end\n"
|
57
|
-
else # main
|
58
|
-
plugins.each do |plugin|
|
59
|
-
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
60
|
-
end
|
61
|
-
end
|
62
|
-
res
|
63
|
-
end
|
64
|
-
|
65
|
-
# return plugin information
|
66
|
-
def self.plugin_info(plugin_key)
|
67
|
-
self.all_plugins.each{|p| return p if p["key"] == plugin_key }
|
68
|
-
nil
|
69
|
-
end
|
70
|
-
|
71
|
-
# return theme information
|
72
|
-
# if theme_name is nil, the use current site theme
|
73
|
-
def self.theme_info(theme_name)
|
74
|
-
self.all_themes.each{|p| return p if p["key"] == theme_name }
|
75
|
-
nil
|
76
|
-
end
|
77
|
-
|
78
|
-
# return system information
|
79
|
-
def self.system_info
|
80
|
-
camaleon_gem = get_gem('camaleon_cms')
|
81
|
-
return {} if !camaleon_gem
|
82
|
-
r = cache_variable("system_info"); return r unless r.nil?
|
83
|
-
res = JSON.parse(File.read(File.join(camaleon_gem.gem_dir, "config", "system.json")))
|
84
|
-
res = res.with_indifferent_access rescue res
|
85
|
-
return cache_variable("system_info", res) unless File.exist?(system_file = File.join(apps_dir, "..", '..', "config", "system.json"))
|
86
|
-
res = res.merge(JSON.parse(File.read(system_file)).with_indifferent_access).with_indifferent_access
|
87
|
-
res["key"] = "system"
|
88
|
-
res["path"] = ''
|
89
|
-
res["kind"] = "system"
|
90
|
-
res["hooks"] = {} unless res["hooks"].present?
|
91
|
-
res["hooks"]["on_notification"] = (res["hooks"]["on_notification"] || []) + ["admin_system_notifications"]
|
92
|
-
cache_variable("system_info", res)
|
93
|
-
end
|
94
|
-
|
95
|
-
# update a system value
|
96
|
-
# key: attribute name
|
97
|
-
# value: new value for attribute
|
98
|
-
def self.system_info_set(key, val)
|
99
|
-
ff = File.read(File.join(apps_dir, "..", '..', "config", "system.json"))
|
100
|
-
File.open(File.join(apps_dir, "..", '..', "config", "system.json"), "w") do |f|
|
101
|
-
f.write(ff.sub(/"#{key}": ?\"(.*)\"/, "\"#{key}\": \"#{val}\""))
|
102
|
-
end
|
103
|
-
self.reload
|
104
|
-
end
|
105
|
-
|
106
|
-
# reload routes
|
107
|
-
def self.reload
|
108
|
-
@@_vars.each {|v| class_variable_set("@@cache_#{v}", nil) }
|
109
|
-
# WPRails::Application.routes_reloader.reload!
|
110
|
-
Rails.application.reload_routes!
|
111
|
-
end
|
112
|
-
|
113
|
-
# return all enabled plugins []
|
114
|
-
def self.enabled_plugins(site)
|
115
|
-
r = cache_variable("enable_plugins_site_#{site.id}"); return r unless r.nil?
|
116
|
-
res = []
|
117
|
-
enabled_ps = site.plugins.active.pluck(:slug)
|
118
|
-
all_plugins.each do |plugin|
|
119
|
-
res << plugin if enabled_ps.include?(plugin["key"])
|
120
|
-
end
|
121
|
-
res = res.sort_by{|e| e["position"] || 10 }
|
122
|
-
cache_variable("enable_plugins_site_#{site.id}", res)
|
123
|
-
end
|
124
|
-
|
125
|
-
# return all enabled apps for site (themes + system + plugins) []
|
126
|
-
# theme_slug: current theme slug
|
127
|
-
def self.enabled_apps(site, theme_slug = nil)
|
128
|
-
theme_slug = theme_slug || site.get_theme_slug
|
129
|
-
r = cache_variable("enabled_apps_#{site.id}_#{theme_slug}"); return r unless r.nil?
|
130
|
-
res = [system_info()] + enabled_plugins(site) + [theme_info(theme_slug)]
|
131
|
-
cache_variable("enabled_apps_#{site.id}_#{theme_slug}", res)
|
132
|
-
end
|
133
|
-
|
134
|
-
# return all enabled apps as []: system, themes, plugins
|
135
|
-
def self.all_enabled_apps
|
136
|
-
[system_info()] + all_enabled_themes + all_enabled_plugins
|
137
|
-
end
|
138
|
-
|
139
|
-
# return all enabled themes (a theme is enabled if at least one site is assigned)
|
140
|
-
def self.all_enabled_themes
|
141
|
-
r = cache_variable("all_enabled_themes"); return r unless r.nil?
|
142
|
-
res = []
|
143
|
-
get_sites.each do |site|
|
144
|
-
i = theme_info(site.get_theme_slug)
|
145
|
-
res << i if i.present?
|
146
|
-
end
|
147
|
-
cache_variable("all_enabled_themes", res)
|
148
|
-
end
|
149
|
-
|
150
|
-
# return all enabled plugins (a theme is enabled if at least one site has installed)
|
151
|
-
def self.all_enabled_plugins
|
152
|
-
r = cache_variable("all_enabled_plugins"); return r unless r.nil?
|
153
|
-
res, enabled_ps = [], []
|
154
|
-
get_sites.each { |site| enabled_ps += site.plugins.active.pluck(:slug) }
|
155
|
-
all_plugins.each do |plugin|
|
156
|
-
if enabled_ps.include?(plugin["key"])
|
157
|
-
res << plugin
|
158
|
-
end
|
159
|
-
end
|
160
|
-
cache_variable("all_enabled_plugins", res)
|
161
|
-
end
|
162
|
-
|
163
|
-
# all helpers of enabled plugins for site
|
164
|
-
def self.site_plugin_helpers(site)
|
165
|
-
r = cache_variable("site_plugin_helpers"); return r unless r.nil?
|
166
|
-
res = []
|
167
|
-
enabled_apps(site).each do |settings|
|
168
|
-
res += settings["helpers"] if settings["helpers"].present?
|
169
|
-
end
|
170
|
-
cache_variable("site_plugin_helpers", res)
|
171
|
-
end
|
172
|
-
|
173
|
-
# all helpers of enabled plugins
|
174
|
-
def self.plugin_helpers
|
175
|
-
r = cache_variable("plugins_helper"); return r unless r.nil?
|
176
|
-
res = []
|
177
|
-
all_enabled_apps.each do |settings|
|
178
|
-
res += settings["helpers"] if settings["helpers"].present?
|
179
|
-
end
|
180
|
-
cache_variable("plugins_helper", res)
|
181
|
-
end
|
182
|
-
|
183
|
-
# destroy plugin
|
184
|
-
def self.destroy_plugin(plugin_key)
|
185
|
-
FileUtils.rm_r(Rails.root.join("app", "apps", "plugins", plugin_key)) rescue ""
|
186
|
-
PluginRoutes.reload
|
187
|
-
end
|
188
|
-
|
189
|
-
# destroy theme
|
190
|
-
def self.destroy_theme(theme_key)
|
191
|
-
FileUtils.rm_r(Rails.root.join("app", "apps", "themes", theme_key)) rescue ""
|
192
|
-
PluginRoutes.reload
|
193
|
-
end
|
194
|
-
|
195
|
-
def self.cache_variable(var_name, value=nil)
|
196
|
-
@@_vars.push(var_name).uniq
|
197
|
-
cache = class_variable_get("@@cache_#{var_name}") rescue nil
|
198
|
-
return cache if value.nil?
|
199
|
-
class_variable_set("@@cache_#{var_name}", value)
|
200
|
-
value
|
201
|
-
end
|
202
|
-
|
203
|
-
# return all sites registered for Plugin routes
|
204
|
-
def self.get_sites
|
205
|
-
r = cache_variable("site_get_sites"); return r unless r.nil?
|
206
|
-
res = {}
|
207
|
-
begin
|
208
|
-
res = Site.eager_load(:metas).order(term_group: :desc).all
|
209
|
-
rescue
|
210
|
-
end
|
211
|
-
cache_variable("site_get_sites", res)
|
212
|
-
end
|
213
|
-
|
214
|
-
# return all locales for all sites joined by |
|
215
|
-
def self.all_locales
|
216
|
-
r = cache_variable("site_all_locales"); return r unless r.nil?
|
217
|
-
res = []
|
218
|
-
get_sites.each do |s|
|
219
|
-
res += s.get_languages
|
220
|
-
end
|
221
|
-
cache_variable("site_all_locales", res.uniq.join("|"))
|
222
|
-
end
|
223
|
-
|
224
3
|
# draw "all" gems registered for the plugins or themes and camaleon gems
|
225
4
|
def self.draw_gems
|
226
5
|
res = []
|
6
|
+
dirs = [] + Dir["#{apps_dir}/plugins/*"] + Dir["#{apps_dir}/themes/*"]
|
227
7
|
# recovering gem dependencies
|
228
8
|
if camaleon_gem = get_gem('camaleon_cms')
|
229
|
-
|
9
|
+
gem_file = File.join(camaleon_gem.gem_dir, "lib", "Gemfile")
|
10
|
+
res << File.read(gem_file).gsub("source 'https://rubygems.org'", "") if File.exist?(gem_file)
|
230
11
|
else
|
231
|
-
|
232
|
-
|
12
|
+
# recover cached gemfile
|
13
|
+
gem_file = File.join(apps_dir, "..", "..", "lib", "Gemfile_camaleon")
|
14
|
+
res << File.read(gem_file).gsub("source 'https://rubygems.org'", "") if File.exist?(gem_file)
|
233
15
|
end
|
234
|
-
|
235
|
-
|
236
|
-
|
16
|
+
|
17
|
+
dirs.each do |path|
|
18
|
+
next if [".", ".."].include?(path)
|
19
|
+
g = File.join(path, "config", "Gemfile")
|
20
|
+
res << File.read(g) if File.exist?(g)
|
237
21
|
end
|
238
22
|
res.join("\n")
|
239
23
|
end
|
@@ -245,56 +29,6 @@ class PluginRoutes
|
|
245
29
|
dir.join("/")+ '/app/apps'
|
246
30
|
end
|
247
31
|
|
248
|
-
# return all plugins located in cms and in this project
|
249
|
-
def self.all_plugins
|
250
|
-
camaleon_gem = get_gem('camaleon_cms')
|
251
|
-
return [] if !camaleon_gem
|
252
|
-
r = cache_variable("all_plugins"); return r unless (r.nil? || r == [])
|
253
|
-
res = []
|
254
|
-
entries = [".", ".."]
|
255
|
-
(Dir["#{apps_dir}/plugins/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/plugins/*"]).each do |path|
|
256
|
-
entry = path.split("/").last
|
257
|
-
config = File.join(path, "config", "config.json")
|
258
|
-
next if entries.include?(entry) || !File.directory?(path) || !File.exist?(config)
|
259
|
-
p = JSON.parse(File.read(config))
|
260
|
-
p = p.with_indifferent_access rescue p
|
261
|
-
p["key"] = entry
|
262
|
-
p["path"] = path
|
263
|
-
p["kind"] = "plugin"
|
264
|
-
res << p
|
265
|
-
entries << entry
|
266
|
-
end
|
267
|
-
cache_variable("all_plugins", res)
|
268
|
-
end
|
269
|
-
|
270
|
-
# return an array of all themes installed for all sites
|
271
|
-
def self.all_themes
|
272
|
-
camaleon_gem = get_gem('camaleon_cms')
|
273
|
-
return [] if !camaleon_gem
|
274
|
-
r = cache_variable("all_themes"); return r unless (r.nil? || r == [])
|
275
|
-
res = []
|
276
|
-
entries = [".", ".."]
|
277
|
-
(Dir["#{apps_dir}/themes/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/themes/*"]).each do |path|
|
278
|
-
entry = path.split("/").last
|
279
|
-
config = File.join(path, "config", "config.json")
|
280
|
-
next if entries.include?(entry) || !File.directory?(path) || !File.exist?(config)
|
281
|
-
p = JSON.parse(File.read(config))
|
282
|
-
p = p.with_indifferent_access rescue p
|
283
|
-
p["key"] = entry
|
284
|
-
p["path"] = path
|
285
|
-
p["kind"] = "theme"
|
286
|
-
p["title"] = p["name"]
|
287
|
-
res << p
|
288
|
-
entries << entry
|
289
|
-
end
|
290
|
-
cache_variable("all_themes", res)
|
291
|
-
end
|
292
|
-
|
293
|
-
# return all apps loaded
|
294
|
-
def self.all_apps
|
295
|
-
all_plugins+all_themes
|
296
|
-
end
|
297
|
-
|
298
32
|
# check if a gem is available or not
|
299
33
|
# Arguemnts:
|
300
34
|
# name: name of the gem
|
@@ -0,0 +1,290 @@
|
|
1
|
+
require 'json'
|
2
|
+
class PluginRoutes
|
3
|
+
@@_vars = []
|
4
|
+
# load plugin routes if it is enabled
|
5
|
+
def self.load(env = "admin")
|
6
|
+
plugins = all_enabled_plugins
|
7
|
+
res = ""
|
8
|
+
if env == "front"
|
9
|
+
res << "namespace :plugins do \n"
|
10
|
+
plugins.each do |plugin|
|
11
|
+
res << "namespace '#{plugin["key"]}' do \n"
|
12
|
+
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
13
|
+
res << "end\n"
|
14
|
+
end
|
15
|
+
res << "end\n"
|
16
|
+
|
17
|
+
elsif env == "admin" # admin
|
18
|
+
res << "scope 'admin', as: 'admin' do \n"
|
19
|
+
res << "namespace :plugins do \n"
|
20
|
+
plugins.each do |plugin|
|
21
|
+
res << "namespace '#{plugin["key"]}' do \n"
|
22
|
+
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
23
|
+
res << "end\n"
|
24
|
+
end
|
25
|
+
res << "end\n"
|
26
|
+
res << "end\n"
|
27
|
+
else # main
|
28
|
+
plugins.each do |plugin|
|
29
|
+
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
30
|
+
end
|
31
|
+
end
|
32
|
+
res + load_themes(env)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.load_themes(env = "admin")
|
36
|
+
plugins = all_enabled_themes
|
37
|
+
res = ""
|
38
|
+
if env == "front"
|
39
|
+
res << "namespace :themes do \n"
|
40
|
+
plugins.each do |plugin|
|
41
|
+
res << "namespace '#{plugin["key"]}' do \n"
|
42
|
+
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
43
|
+
res << "end\n"
|
44
|
+
end
|
45
|
+
res << "end\n"
|
46
|
+
|
47
|
+
elsif env == "admin" # admin
|
48
|
+
res << "scope 'admin', as: 'admin' do \n"
|
49
|
+
res << "namespace :themes do \n"
|
50
|
+
plugins.each do |plugin|
|
51
|
+
res << "namespace '#{plugin["key"]}' do \n"
|
52
|
+
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
53
|
+
res << "end\n"
|
54
|
+
end
|
55
|
+
res << "end\n"
|
56
|
+
res << "end\n"
|
57
|
+
else # main
|
58
|
+
plugins.each do |plugin|
|
59
|
+
res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
|
60
|
+
end
|
61
|
+
end
|
62
|
+
res
|
63
|
+
end
|
64
|
+
|
65
|
+
# return plugin information
|
66
|
+
def self.plugin_info(plugin_key)
|
67
|
+
self.all_plugins.each{|p| return p if p["key"] == plugin_key }
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
|
71
|
+
# return theme information
|
72
|
+
# if theme_name is nil, the use current site theme
|
73
|
+
def self.theme_info(theme_name)
|
74
|
+
self.all_themes.each{|p| return p if p["key"] == theme_name }
|
75
|
+
nil
|
76
|
+
end
|
77
|
+
|
78
|
+
# return system information
|
79
|
+
def self.system_info
|
80
|
+
camaleon_gem = get_gem('camaleon_cms')
|
81
|
+
return {} if !camaleon_gem
|
82
|
+
r = cache_variable("system_info"); return r unless r.nil?
|
83
|
+
res = JSON.parse(File.read(File.join(camaleon_gem.gem_dir, "config", "system.json")))
|
84
|
+
res = res.with_indifferent_access rescue res
|
85
|
+
return cache_variable("system_info", res) unless File.exist?(system_file = File.join(apps_dir, "..", '..', "config", "system.json"))
|
86
|
+
res = res.merge(JSON.parse(File.read(system_file)).with_indifferent_access).with_indifferent_access
|
87
|
+
res["key"] = "system"
|
88
|
+
res["path"] = ''
|
89
|
+
res["kind"] = "system"
|
90
|
+
res["hooks"] = {} unless res["hooks"].present?
|
91
|
+
res["hooks"]["on_notification"] = (res["hooks"]["on_notification"] || []) + ["admin_system_notifications"]
|
92
|
+
cache_variable("system_info", res)
|
93
|
+
end
|
94
|
+
|
95
|
+
# update a system value
|
96
|
+
# key: attribute name
|
97
|
+
# value: new value for attribute
|
98
|
+
def self.system_info_set(key, val)
|
99
|
+
ff = File.read(File.join(apps_dir, "..", '..', "config", "system.json"))
|
100
|
+
File.open(File.join(apps_dir, "..", '..', "config", "system.json"), "w") do |f|
|
101
|
+
f.write(ff.sub(/"#{key}": ?\"(.*)\"/, "\"#{key}\": \"#{val}\""))
|
102
|
+
end
|
103
|
+
self.reload
|
104
|
+
end
|
105
|
+
|
106
|
+
# reload routes
|
107
|
+
def self.reload
|
108
|
+
@@_vars.each {|v| class_variable_set("@@cache_#{v}", nil) }
|
109
|
+
# WPRails::Application.routes_reloader.reload!
|
110
|
+
Rails.application.reload_routes!
|
111
|
+
end
|
112
|
+
|
113
|
+
# return all enabled plugins []
|
114
|
+
def self.enabled_plugins(site)
|
115
|
+
r = cache_variable("enable_plugins_site_#{site.id}"); return r unless r.nil?
|
116
|
+
res = []
|
117
|
+
enabled_ps = site.plugins.active.pluck(:slug)
|
118
|
+
all_plugins.each do |plugin|
|
119
|
+
res << plugin if enabled_ps.include?(plugin["key"])
|
120
|
+
end
|
121
|
+
res = res.sort_by{|e| e["position"] || 10 }
|
122
|
+
cache_variable("enable_plugins_site_#{site.id}", res)
|
123
|
+
end
|
124
|
+
|
125
|
+
# return all enabled apps for site (themes + system + plugins) []
|
126
|
+
# theme_slug: current theme slug
|
127
|
+
def self.enabled_apps(site, theme_slug = nil)
|
128
|
+
theme_slug = theme_slug || site.get_theme_slug
|
129
|
+
r = cache_variable("enabled_apps_#{site.id}_#{theme_slug}"); return r unless r.nil?
|
130
|
+
res = [system_info()] + enabled_plugins(site) + [theme_info(theme_slug)]
|
131
|
+
cache_variable("enabled_apps_#{site.id}_#{theme_slug}", res)
|
132
|
+
end
|
133
|
+
|
134
|
+
# return all enabled apps as []: system, themes, plugins
|
135
|
+
def self.all_enabled_apps
|
136
|
+
[system_info()] + all_enabled_themes + all_enabled_plugins
|
137
|
+
end
|
138
|
+
|
139
|
+
# return all enabled themes (a theme is enabled if at least one site is assigned)
|
140
|
+
def self.all_enabled_themes
|
141
|
+
r = cache_variable("all_enabled_themes"); return r unless r.nil?
|
142
|
+
res = []
|
143
|
+
get_sites.each do |site|
|
144
|
+
i = theme_info(site.get_theme_slug)
|
145
|
+
res << i if i.present?
|
146
|
+
end
|
147
|
+
cache_variable("all_enabled_themes", res)
|
148
|
+
end
|
149
|
+
|
150
|
+
# return all enabled plugins (a theme is enabled if at least one site has installed)
|
151
|
+
def self.all_enabled_plugins
|
152
|
+
r = cache_variable("all_enabled_plugins"); return r unless r.nil?
|
153
|
+
res, enabled_ps = [], []
|
154
|
+
get_sites.each { |site| enabled_ps += site.plugins.active.pluck(:slug) }
|
155
|
+
all_plugins.each do |plugin|
|
156
|
+
if enabled_ps.include?(plugin["key"])
|
157
|
+
res << plugin
|
158
|
+
end
|
159
|
+
end
|
160
|
+
cache_variable("all_enabled_plugins", res)
|
161
|
+
end
|
162
|
+
|
163
|
+
# all helpers of enabled plugins for site
|
164
|
+
def self.site_plugin_helpers(site)
|
165
|
+
r = cache_variable("site_plugin_helpers"); return r unless r.nil?
|
166
|
+
res = []
|
167
|
+
enabled_apps(site).each do |settings|
|
168
|
+
res += settings["helpers"] if settings["helpers"].present?
|
169
|
+
end
|
170
|
+
cache_variable("site_plugin_helpers", res)
|
171
|
+
end
|
172
|
+
|
173
|
+
# all helpers of enabled plugins
|
174
|
+
def self.plugin_helpers
|
175
|
+
r = cache_variable("plugins_helper"); return r unless r.nil?
|
176
|
+
res = []
|
177
|
+
all_enabled_apps.each do |settings|
|
178
|
+
res += settings["helpers"] if settings["helpers"].present?
|
179
|
+
end
|
180
|
+
cache_variable("plugins_helper", res)
|
181
|
+
end
|
182
|
+
|
183
|
+
# destroy plugin
|
184
|
+
def self.destroy_plugin(plugin_key)
|
185
|
+
FileUtils.rm_r(Rails.root.join("app", "apps", "plugins", plugin_key)) rescue ""
|
186
|
+
PluginRoutes.reload
|
187
|
+
end
|
188
|
+
|
189
|
+
# destroy theme
|
190
|
+
def self.destroy_theme(theme_key)
|
191
|
+
FileUtils.rm_r(Rails.root.join("app", "apps", "themes", theme_key)) rescue ""
|
192
|
+
PluginRoutes.reload
|
193
|
+
end
|
194
|
+
|
195
|
+
def self.cache_variable(var_name, value=nil)
|
196
|
+
@@_vars.push(var_name).uniq
|
197
|
+
cache = class_variable_get("@@cache_#{var_name}") rescue nil
|
198
|
+
return cache if value.nil?
|
199
|
+
class_variable_set("@@cache_#{var_name}", value)
|
200
|
+
value
|
201
|
+
end
|
202
|
+
|
203
|
+
# return all sites registered for Plugin routes
|
204
|
+
def self.get_sites
|
205
|
+
r = cache_variable("site_get_sites"); return r unless r.nil?
|
206
|
+
res = {}
|
207
|
+
begin
|
208
|
+
res = Site.eager_load(:metas).order(term_group: :desc).all
|
209
|
+
rescue
|
210
|
+
end
|
211
|
+
cache_variable("site_get_sites", res)
|
212
|
+
end
|
213
|
+
|
214
|
+
# return all locales for all sites joined by |
|
215
|
+
def self.all_locales
|
216
|
+
r = cache_variable("site_all_locales"); return r unless r.nil?
|
217
|
+
res = []
|
218
|
+
get_sites.each do |s|
|
219
|
+
res += s.get_languages
|
220
|
+
end
|
221
|
+
cache_variable("site_all_locales", res.uniq.join("|"))
|
222
|
+
end
|
223
|
+
|
224
|
+
# return apps directory path
|
225
|
+
def self.apps_dir
|
226
|
+
Rails.root.join("app", "apps").to_s
|
227
|
+
end
|
228
|
+
|
229
|
+
# return all plugins located in cms and in this project
|
230
|
+
def self.all_plugins
|
231
|
+
camaleon_gem = get_gem('camaleon_cms')
|
232
|
+
return [] if !camaleon_gem
|
233
|
+
r = cache_variable("all_plugins"); return r unless (r.nil? || r == [])
|
234
|
+
res = []
|
235
|
+
entries = [".", ".."]
|
236
|
+
(Dir["#{apps_dir}/plugins/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/plugins/*"]).each do |path|
|
237
|
+
entry = path.split("/").last
|
238
|
+
config = File.join(path, "config", "config.json")
|
239
|
+
next if entries.include?(entry) || !File.directory?(path) || !File.exist?(config)
|
240
|
+
p = JSON.parse(File.read(config))
|
241
|
+
p = p.with_indifferent_access rescue p
|
242
|
+
p["key"] = entry
|
243
|
+
p["path"] = path
|
244
|
+
p["kind"] = "plugin"
|
245
|
+
res << p
|
246
|
+
entries << entry
|
247
|
+
end
|
248
|
+
cache_variable("all_plugins", res)
|
249
|
+
end
|
250
|
+
|
251
|
+
# return an array of all themes installed for all sites
|
252
|
+
def self.all_themes
|
253
|
+
camaleon_gem = get_gem('camaleon_cms')
|
254
|
+
return [] if !camaleon_gem
|
255
|
+
r = cache_variable("all_themes"); return r unless (r.nil? || r == [])
|
256
|
+
res = []
|
257
|
+
entries = [".", ".."]
|
258
|
+
(Dir["#{apps_dir}/themes/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/themes/*"]).each do |path|
|
259
|
+
entry = path.split("/").last
|
260
|
+
config = File.join(path, "config", "config.json")
|
261
|
+
next if entries.include?(entry) || !File.directory?(path) || !File.exist?(config)
|
262
|
+
p = JSON.parse(File.read(config))
|
263
|
+
p = p.with_indifferent_access rescue p
|
264
|
+
p["key"] = entry
|
265
|
+
p["path"] = path
|
266
|
+
p["kind"] = "theme"
|
267
|
+
p["title"] = p["name"]
|
268
|
+
res << p
|
269
|
+
entries << entry
|
270
|
+
end
|
271
|
+
cache_variable("all_themes", res)
|
272
|
+
end
|
273
|
+
|
274
|
+
# return all apps loaded
|
275
|
+
def self.all_apps
|
276
|
+
all_plugins+all_themes
|
277
|
+
end
|
278
|
+
|
279
|
+
# check if a gem is available or not
|
280
|
+
# Arguemnts:
|
281
|
+
# name: name of the gem
|
282
|
+
# return (Boolean) true/false
|
283
|
+
def self.get_gem(name)
|
284
|
+
Gem::Specification.find_by_name(name)
|
285
|
+
rescue Gem::LoadError
|
286
|
+
false
|
287
|
+
rescue
|
288
|
+
Gem.available?(name)
|
289
|
+
end
|
290
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camaleon_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Owen Peredo Diaz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Camaleon CMS is a dynamic and advanced content management system based
|
14
14
|
on Ruby on Rails 4 as an alternative to Wordpress.
|
@@ -653,6 +653,7 @@ files:
|
|
653
653
|
- lib/generators/ctheme_template/app/apps/themes/my_theme/views/index.html.erb
|
654
654
|
- lib/generators/ctheme_template/app/apps/themes/my_theme/views/layouts/index.html.erb
|
655
655
|
- lib/generators/ctheme_template/app/apps/themes/my_theme/views/partials/readme.txt
|
656
|
+
- lib/plugin_routes.rb
|
656
657
|
- lib/tasks/camaleon_cms_tasks.rake
|
657
658
|
- test/camaleon_cms_test.rb
|
658
659
|
- test/integration/navigation_test.rb
|
@@ -669,13 +670,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
669
670
|
requirements:
|
670
671
|
- - ">="
|
671
672
|
- !ruby/object:Gem::Version
|
672
|
-
version:
|
673
|
+
version: 1.9.3
|
673
674
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
674
675
|
requirements:
|
675
676
|
- - ">="
|
676
677
|
- !ruby/object:Gem::Version
|
677
678
|
version: '0'
|
678
|
-
requirements:
|
679
|
+
requirements:
|
680
|
+
- rails >= 4.1
|
681
|
+
- ruby >= 1.9.3
|
682
|
+
- imagemagick
|
679
683
|
rubyforge_project:
|
680
684
|
rubygems_version: 2.4.8
|
681
685
|
signing_key:
|