rxcms-compliance_plugin 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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +29 -0
- data/app/assets/javascripts/compliance_plugin/configure.js +147 -0
- data/app/assets/javascripts/compliance_plugin/index.js +3 -0
- data/app/assets/javascripts/compliance_plugin/installer.js +19 -0
- data/app/assets/javascripts/compliance_services.js +2 -0
- data/app/assets/stylesheets/compliance_engine.css +4 -0
- data/app/assets/stylesheets/compliance_installer.css +4 -0
- data/app/assets/stylesheets/compliance_services.css +4 -0
- data/app/controllers/compliance_engine_controller.rb +69 -0
- data/app/controllers/compliance_installer_controller.rb +91 -0
- data/app/controllers/compliance_services_controller.rb +86 -0
- data/app/helpers/compliance_engine_helper.rb +2 -0
- data/app/helpers/compliance_installer_helper.rb +2 -0
- data/app/helpers/compliance_plugin_helper.rb +30 -0
- data/app/helpers/compliance_services_helper.rb +2 -0
- data/app/views/compliance_engine/configure.html.erb +46 -0
- data/app/views/compliance_engine/index.html.erb +1 -0
- data/app/views/compliance_engine/installer.html.erb +7 -0
- data/config/compliance/compliance_config.yml +3 -0
- data/config/routes.rb +17 -0
- data/lib/rxcms-compliance_plugin/classes/compliance_operations.rb +218 -0
- data/lib/rxcms-compliance_plugin/classes/executor.rb +9 -0
- data/lib/rxcms-compliance_plugin/classes/status.rb +18 -0
- data/lib/rxcms-compliance_plugin/engine.rb +21 -0
- data/lib/rxcms-compliance_plugin/version.rb +3 -0
- data/lib/rxcms-compliance_plugin.rb +7 -0
- data/lib/tasks/rxcms-compliance_plugin_tasks.rake +4 -0
- metadata +219 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: d126beb04ddef40a0b16b56d93b52867c35042c2
|
|
4
|
+
data.tar.gz: 201f47d9366cbc06124c462e9fba40ebf3c1235d
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0d3ddffee0d989b330c391e45bed98ff54e18664ff99d436ac359ebcb072d2b5df8f3034cdb7005e506a69f390a1047e147347c14503ecc123a6ed0f2e0614d1
|
|
7
|
+
data.tar.gz: b6d5300fad750487f2ee58296abedcff337b2781b1f17eaeb139d50bff5058f9671f4f460c3a85910d10ac1409bad07b3d104b67a6f17b471ba7f4f4d291c516
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2013 YOURNAME
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env rake
|
|
2
|
+
begin
|
|
3
|
+
require 'bundler/setup'
|
|
4
|
+
rescue LoadError
|
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
6
|
+
end
|
|
7
|
+
begin
|
|
8
|
+
require 'rdoc/task'
|
|
9
|
+
rescue LoadError
|
|
10
|
+
require 'rdoc/rdoc'
|
|
11
|
+
require 'rake/rdoctask'
|
|
12
|
+
RDoc::Task = Rake::RDocTask
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
17
|
+
rdoc.title = 'RxcmsCompliancePlugin'
|
|
18
|
+
rdoc.options << '--line-numbers'
|
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
|
24
|
+
load 'rails/tasks/engine.rake'
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
Bundler::GemHelper.install_tasks
|
|
29
|
+
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
function getComplianceFeatureStatus()
|
|
2
|
+
{
|
|
3
|
+
$.get("/compliance/services/feature/status", function(response){
|
|
4
|
+
if (response.status == "success")
|
|
5
|
+
{
|
|
6
|
+
if (response.data == "yes")
|
|
7
|
+
{
|
|
8
|
+
$("input[name=complianceFeature][value=on]").prop("checked",true);
|
|
9
|
+
} else if (response.data == "no")
|
|
10
|
+
{
|
|
11
|
+
$("input[name=complianceFeature][value=off]").prop("checked",true);
|
|
12
|
+
}
|
|
13
|
+
} else
|
|
14
|
+
{
|
|
15
|
+
Messenger().post("unable to get compliance feature status");
|
|
16
|
+
}
|
|
17
|
+
}).error(function(){
|
|
18
|
+
Messenger().post("unable to contact server");
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getVersioningFeatureStatus()
|
|
23
|
+
{
|
|
24
|
+
$.get("/compliance/services/feature/versioning/status", function(response){
|
|
25
|
+
if (response.status == "success")
|
|
26
|
+
{
|
|
27
|
+
if (response.data == "yes")
|
|
28
|
+
{
|
|
29
|
+
$("input[name=versioningFeature][value=on]").prop("checked",true);
|
|
30
|
+
$("input[name=complianceFeature]").removeAttr("disabled")
|
|
31
|
+
} else if (response.data == "no")
|
|
32
|
+
{
|
|
33
|
+
$("input[name=versioningFeature][value=off]").prop("checked",true);
|
|
34
|
+
|
|
35
|
+
$("input[name=complianceFeature]").attr("disabled","disabled");
|
|
36
|
+
$("input[name=complianceFeature][value=off]").prop("checked",true);
|
|
37
|
+
}
|
|
38
|
+
} else
|
|
39
|
+
{
|
|
40
|
+
Messenger().post("unable to get versioning feature status");
|
|
41
|
+
}
|
|
42
|
+
}).error(function(){
|
|
43
|
+
Messenger().post("unable to contact server");
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
$(function(){
|
|
48
|
+
|
|
49
|
+
Messenger.options = {
|
|
50
|
+
extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',
|
|
51
|
+
theme: 'air'
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// Automatically load compliance feature status on page load
|
|
55
|
+
getComplianceFeatureStatus();
|
|
56
|
+
getVersioningFeatureStatus();
|
|
57
|
+
|
|
58
|
+
// Track value of input[name=complianceFeature]
|
|
59
|
+
$("input[name=complianceFeature]").on("change", function(e){
|
|
60
|
+
e.stopPropagation();
|
|
61
|
+
|
|
62
|
+
var value = $(this).val() == "on" ? "yes" : "no";
|
|
63
|
+
var versioningValue = $("input[name=versioningFeature]:checked").val() == "on" ? "yes" : "no"
|
|
64
|
+
|
|
65
|
+
if (versioningValue == "no")
|
|
66
|
+
{
|
|
67
|
+
Messenger().post("versioning is required, please activate it");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
$("input[name=complianceFeature]").attr("disabled","disabled");
|
|
72
|
+
$.post("/compliance/services/feature/status/set",
|
|
73
|
+
{
|
|
74
|
+
"value" : value
|
|
75
|
+
}
|
|
76
|
+
,function(response){
|
|
77
|
+
if (response.status == "success")
|
|
78
|
+
{
|
|
79
|
+
$("input[name=complianceFeature]").removeAttr("disabled");
|
|
80
|
+
Messenger().post("compliance status is set successfully");
|
|
81
|
+
} else
|
|
82
|
+
{
|
|
83
|
+
$("input[name=complianceFeature]").removeAttr("disabled");
|
|
84
|
+
Messenger().post("unable to set compliance feature status");
|
|
85
|
+
}
|
|
86
|
+
}).error(function(){
|
|
87
|
+
$("input[name=complianceFeature]").removeAttr("disabled");
|
|
88
|
+
Messenger().post("unable to contact server");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
$("input[name=versioningFeature]").on("change", function(e){
|
|
93
|
+
e.stopPropagation();
|
|
94
|
+
|
|
95
|
+
var value = $(this).val() == "on" ? "yes" : "no";
|
|
96
|
+
|
|
97
|
+
if (value == "no")
|
|
98
|
+
{
|
|
99
|
+
$("input[name=complianceFeature][value=off]").prop("checked",true)
|
|
100
|
+
$("input[name=complianceFeature]").attr("disabled","disabled");
|
|
101
|
+
}
|
|
102
|
+
else if (value == "yes")
|
|
103
|
+
{
|
|
104
|
+
$("input[name=complianceFeature]").removeAttr("disabled");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
$("input[name=versioningFeature]").attr("disabled","disabled");
|
|
108
|
+
$.post("/compliance/services/feature/versioning/status/set",
|
|
109
|
+
{
|
|
110
|
+
"value" : value
|
|
111
|
+
}, function(response){
|
|
112
|
+
if (response.status == "success")
|
|
113
|
+
{
|
|
114
|
+
$("input[name=versioningFeature]").removeAttr("disabled");
|
|
115
|
+
Messenger().post("versioning status is set successfully");
|
|
116
|
+
} else
|
|
117
|
+
{
|
|
118
|
+
$("input[name=versioningFeature]").removeAttr("disabled");
|
|
119
|
+
Messenger().post("unable to set versioning feature status");
|
|
120
|
+
}
|
|
121
|
+
}).error(function(){
|
|
122
|
+
$("input[name=versioningFeature]").removeAttr("disabled");
|
|
123
|
+
Messenger().post("unable to contact server");
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// Uninstall
|
|
128
|
+
$("#uninstallBtn").on("click", function(){
|
|
129
|
+
var $this = $(this);
|
|
130
|
+
$this.attr("disabled","disabled");
|
|
131
|
+
$.post("/compliance/installer/uninstall", function(response){
|
|
132
|
+
if (response.status == "success")
|
|
133
|
+
{
|
|
134
|
+
Messenger().post("Successfully uninstalled, redirecting...");
|
|
135
|
+
location.reload();
|
|
136
|
+
}
|
|
137
|
+
else
|
|
138
|
+
{
|
|
139
|
+
$this.removeAttr("disabled");
|
|
140
|
+
Messenger().post("Unable to uninstall component");
|
|
141
|
+
}
|
|
142
|
+
}).error(function(){
|
|
143
|
+
Messenger().post("Unable to contact server");
|
|
144
|
+
$this.removeAttr("disabled");
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
$(function(){
|
|
2
|
+
// Automatically perform installation
|
|
3
|
+
$("#installationBtn").on("click", function(e){
|
|
4
|
+
e.stopPropagation();
|
|
5
|
+
|
|
6
|
+
$("#installationStatus").text("Installation process is under way, please wait...");
|
|
7
|
+
$.post("/compliance/installer/before_process", function(response){
|
|
8
|
+
if (response.status == "success")
|
|
9
|
+
{
|
|
10
|
+
location.reload();
|
|
11
|
+
} else
|
|
12
|
+
{
|
|
13
|
+
$("#installationStatus").text("Installation failed, please contact extension developer for more information!");
|
|
14
|
+
}
|
|
15
|
+
}).error(function(){
|
|
16
|
+
$("#installationStatus").text("Installation failed because the server is down. Please try again later");
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
class ComplianceEngineController < ApplicationController
|
|
2
|
+
include CompliancePluginHelper
|
|
3
|
+
|
|
4
|
+
layout false
|
|
5
|
+
|
|
6
|
+
before_filter :get_current_user_role, :except => [
|
|
7
|
+
:index
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
# Load configuration items (MANDATORY, must be included)
|
|
11
|
+
APP_CONFIG = HashWithIndifferentAccess.new(YAML.load(File.read(File.expand_path('../../../config/compliance/compliance_config.yml', __FILE__))))
|
|
12
|
+
|
|
13
|
+
# Allow all to access index
|
|
14
|
+
# Disallow all to access configure and installer, except for admin
|
|
15
|
+
|
|
16
|
+
# Write your readme here
|
|
17
|
+
def index
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def configure
|
|
22
|
+
# Check access
|
|
23
|
+
if (@curUserRole == 'contentadmin' ||
|
|
24
|
+
@curUserRole == 'user' ||
|
|
25
|
+
@curUserRole == 'loggedin' ||
|
|
26
|
+
@curUserRole == 'anonymous')
|
|
27
|
+
raise 'unauthorized access'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
config = Metadata.first({ :conditions => ['sites_id = ? and cat = ? and key = ?', session[:accessible_appid], APP_CONFIG[:COMPLIANCE_CAT_CONFIG], APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG]]})
|
|
31
|
+
|
|
32
|
+
if (!defined?(PaperTrail))
|
|
33
|
+
raise 'paper_trail gem is required for this gem to work'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
if (config.nil?)
|
|
37
|
+
raise 'configuration item for compliance plugin is not present'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
if request.xhr?
|
|
41
|
+
respond_to do |t|
|
|
42
|
+
t.html
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
raise 'unauthorized access'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def installer
|
|
50
|
+
# Check access
|
|
51
|
+
if (@curUserRole == 'contentadmin' ||
|
|
52
|
+
@curUserRole == 'user' ||
|
|
53
|
+
@curUserRole == 'loggedin' ||
|
|
54
|
+
@curUserRole == 'anonymous')
|
|
55
|
+
raise 'unauthorized access'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if request.xhr?
|
|
59
|
+
respond_to do |t|
|
|
60
|
+
t.html
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
raise 'unauthorized access'
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
class ComplianceInstallerController < ApplicationController
|
|
2
|
+
include CompliancePluginHelper
|
|
3
|
+
|
|
4
|
+
layout false
|
|
5
|
+
|
|
6
|
+
before_filter :get_current_user_role
|
|
7
|
+
|
|
8
|
+
# Load configuration items (MANDATORY, must be included)
|
|
9
|
+
APP_CONFIG = HashWithIndifferentAccess.new(YAML.load(File.read(File.expand_path('../../../config/compliance/compliance_config.yml', __FILE__))))
|
|
10
|
+
|
|
11
|
+
# Each step should return JSON status "success", "failure" or "unimplemented"
|
|
12
|
+
|
|
13
|
+
# Used for initializing and creating database entries
|
|
14
|
+
def before_process
|
|
15
|
+
SymmetricEncryption.load!
|
|
16
|
+
|
|
17
|
+
begin
|
|
18
|
+
# Check access
|
|
19
|
+
if (@curUserRole == 'contentadmin' ||
|
|
20
|
+
@curUserRole == 'user' ||
|
|
21
|
+
@curUserRole == 'loggedin' ||
|
|
22
|
+
@curUserRole == 'anonymous')
|
|
23
|
+
raise 'unauthorized access'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
if !Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG], session[:accessible_appid]]}).nil?
|
|
27
|
+
Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG], session[:accessible_appid]]}).destroy
|
|
28
|
+
end
|
|
29
|
+
if !Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG], session[:accessible_appid]]}).nil?
|
|
30
|
+
Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG], session[:accessible_appid]]}).destroy
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Metadata.create!({
|
|
34
|
+
:key => APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG],
|
|
35
|
+
:value => 'no',
|
|
36
|
+
:cat => APP_CONFIG[:COMPLIANCE_CAT_CONFIG],
|
|
37
|
+
:mime => "text/plain",
|
|
38
|
+
:sites_id => session[:accessible_appid]
|
|
39
|
+
})
|
|
40
|
+
Metadata.create!({
|
|
41
|
+
:key => APP_CONFIG[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG],
|
|
42
|
+
:value => 'no',
|
|
43
|
+
:cat => APP_CONFIG[:COMPLIANCE_CAT_CONFIG],
|
|
44
|
+
:mime => "text/plain",
|
|
45
|
+
:sites_id => session[:accessible_appid]
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
render :json => {:status => 'success'}
|
|
49
|
+
rescue Exception => ex
|
|
50
|
+
render :json => {:status => 'failure', :message => ex.message}
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Used for logical processing
|
|
55
|
+
def core_process
|
|
56
|
+
render :json => {:status => 'unimplemented'}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Used for configuring data
|
|
60
|
+
def post_process
|
|
61
|
+
render :json => {:status => 'unimplemented'}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Uninstaller
|
|
65
|
+
def uninstall
|
|
66
|
+
begin
|
|
67
|
+
# Check access
|
|
68
|
+
if (@curUserRole == 'contentadmin' ||
|
|
69
|
+
@curUserRole == 'user' ||
|
|
70
|
+
@curUserRole == 'loggedin' ||
|
|
71
|
+
@curUserRole == 'anonymous')
|
|
72
|
+
raise 'unauthorized access'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Delete all configuration items
|
|
76
|
+
if !Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG], session[:accessible_appid]]}).nil?
|
|
77
|
+
Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG], session[:accessible_appid]]}).destroy
|
|
78
|
+
end
|
|
79
|
+
if !Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG], session[:accessible_appid]]}).nil?
|
|
80
|
+
Metadata.first({:conditions => ['key = ? and sites_id = ?', APP_CONFIG[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG], session[:accessible_appid]]}).destroy
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
render :json => {:status => 'success'}
|
|
84
|
+
rescue Exception => ex
|
|
85
|
+
render :json => {:status => 'failure', :message => ex.message}
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
class ComplianceServicesController < ApplicationController
|
|
2
|
+
include CompliancePluginHelper
|
|
3
|
+
|
|
4
|
+
layout false
|
|
5
|
+
|
|
6
|
+
before_filter :get_current_user_role
|
|
7
|
+
|
|
8
|
+
# Load configuration items (MANDATORY, must be included)
|
|
9
|
+
APP_CONFIG = HashWithIndifferentAccess.new(YAML.load(File.read(File.expand_path('../../../config/compliance/compliance_config.yml', __FILE__))))
|
|
10
|
+
|
|
11
|
+
# Get compliance feature status
|
|
12
|
+
def get_compliance_feature_status
|
|
13
|
+
begin
|
|
14
|
+
|
|
15
|
+
status = Metadata.first({ :conditions => ['sites_id = ? and key = ?', session[:accessible_appid], APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG]] })
|
|
16
|
+
if (!status.nil?)
|
|
17
|
+
render :json => { :status => 'success', :data => status.value }
|
|
18
|
+
else
|
|
19
|
+
raise "status doesn't exist"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
rescue Exception => ex
|
|
23
|
+
render :json => { :status => 'failure', :message => ex.message }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def get_versioning_status
|
|
28
|
+
begin
|
|
29
|
+
|
|
30
|
+
status = Metadata.first({ :conditions => ['sites_id = ? and key = ?', session[:accessible_appid], APP_CONFIG[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG]] })
|
|
31
|
+
if (!status.nil?)
|
|
32
|
+
render :json => { :status => 'success', :data => status.value }
|
|
33
|
+
else
|
|
34
|
+
raise "status doesn't exist"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
rescue Exception => ex
|
|
38
|
+
render :json => { :status => 'failure', :message => ex.message }
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Set compliance feature status
|
|
43
|
+
def set_compliance_feature_status
|
|
44
|
+
begin
|
|
45
|
+
|
|
46
|
+
status = Metadata.first({ :conditions => ['sites_id = ? and key = ?', session[:accessible_appid], APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG]] })
|
|
47
|
+
if (!status.nil?)
|
|
48
|
+
Metadata.update(status.id, { :value => params[:value] })
|
|
49
|
+
render :json => { :status => 'success' }
|
|
50
|
+
else
|
|
51
|
+
raise "compliance status doesn't exist"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
rescue Exception => ex
|
|
55
|
+
render :json => { :status => 'failure', :message => ex.message }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def set_versioning_status
|
|
60
|
+
begin
|
|
61
|
+
|
|
62
|
+
status = Metadata.first({ :conditions => ['sites_id = ? and key = ?', session[:accessible_appid], APP_CONFIG[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG]] })
|
|
63
|
+
if (!status.nil?)
|
|
64
|
+
if (params[:value] == 'no')
|
|
65
|
+
Metadata.paper_trail_off
|
|
66
|
+
complianceStatus = Metadata.first({ :conditions => ['sites_id = ? and key = ?', session[:accessible_appid], APP_CONFIG[:COMPLIANCE_ACTIVATION_CONFIG]] })
|
|
67
|
+
if (!complianceStatus.nil?)
|
|
68
|
+
Metadata.update(complianceStatus.id, { :value => 'no' })
|
|
69
|
+
end
|
|
70
|
+
else
|
|
71
|
+
Metadata.paper_trail_on
|
|
72
|
+
end
|
|
73
|
+
Metadata.update(status.id, { :value => params[:value] })
|
|
74
|
+
render :json => { :status => 'success' }
|
|
75
|
+
else
|
|
76
|
+
raise "versioning status doesn't exist"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
rescue Exception => ex
|
|
80
|
+
render :json => { :status => 'failure', :message => ex.message }
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module CompliancePluginHelper
|
|
2
|
+
|
|
3
|
+
def current_user
|
|
4
|
+
if UserSession.find.nil?
|
|
5
|
+
@current_user ||= nil
|
|
6
|
+
else
|
|
7
|
+
@current_user ||= User.find(UserSession.find.record.id)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Get current user's role
|
|
12
|
+
def get_current_user_role
|
|
13
|
+
@current_user = current_user
|
|
14
|
+
if (!@current_user.nil?)
|
|
15
|
+
siteId = session[:accessible_appid]
|
|
16
|
+
roleId = session[:accessible_roleid]
|
|
17
|
+
|
|
18
|
+
if (!siteId.nil? && !roleId.nil?)
|
|
19
|
+
userRole = Role.find(roleId)
|
|
20
|
+
@curUserRole = userRole.name
|
|
21
|
+
else
|
|
22
|
+
@curUserRole = 'loggedin'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
else
|
|
26
|
+
@curUserRole = 'anonymous'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<div class="container">
|
|
2
|
+
<ul id="complianceConfigureTabs" class="nav nav-tabs">
|
|
3
|
+
<li class="active"><a href="#configure" data-toggle="tab">Configuration</a></li>
|
|
4
|
+
<li><a href="#uninstall" data-toggle="tab">Uninstall</a></li>
|
|
5
|
+
</ul>
|
|
6
|
+
|
|
7
|
+
<div id="myTabContent" class="tab-content">
|
|
8
|
+
|
|
9
|
+
<div class="tab-pane fade in active" id="configure">
|
|
10
|
+
<div class="row-fluid">
|
|
11
|
+
<div class="span3">
|
|
12
|
+
<div style="margin:5px;">
|
|
13
|
+
<h5>Compliance Feature</h5>
|
|
14
|
+
<label for="complianceFeatureOn">
|
|
15
|
+
<input type="radio" name="complianceFeature" id="complianceFeatureOn" value="on" disabled="disabled" /> on
|
|
16
|
+
</label>
|
|
17
|
+
<label for="complianceFeatureOff">
|
|
18
|
+
<input type="radio" name="complianceFeature" id="complianceFeatureOff" value="off" disabled="disabled" /> off
|
|
19
|
+
</label>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="span3">
|
|
24
|
+
<div style="margin:5px;">
|
|
25
|
+
<h5>Versioning Feature</h5>
|
|
26
|
+
<label for="complianceFeatureOn">
|
|
27
|
+
<input type="radio" name="versioningFeature" id="versioningFeatureOn" value="on" /> on
|
|
28
|
+
</label>
|
|
29
|
+
<label for="complianceFeatureOff">
|
|
30
|
+
<input type="radio" name="versioningFeature" id="versioningFeatureOff" value="off" /> off
|
|
31
|
+
</label>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="tab-pane fade" id="uninstall">
|
|
38
|
+
<div>
|
|
39
|
+
<button id="uninstallBtn" type="button" class="btn btn-danger">Uninstall</button>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<%= javascript_include_tag "compliance_plugin/configure" %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<h1>This is the readme page of Alliance CMS Compliance Plugin</h1>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div class="container">
|
|
2
|
+
<div style="text-align:center;margin:64px 0 0 0;">
|
|
3
|
+
<h4 id="installationStatus">Click <a id="installationBtn" href="javascript:void(0);">here</a> to install</h4>
|
|
4
|
+
</div>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<%= javascript_include_tag "compliance_plugin/installer" %>
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Rails.application.routes.draw do
|
|
2
|
+
|
|
3
|
+
get "/compliance/engine/readme" => "compliance_engine#index"
|
|
4
|
+
get "/compliance/engine/configure" => "compliance_engine#configure"
|
|
5
|
+
get "/compliance/engine/installer" => "compliance_engine#installer"
|
|
6
|
+
|
|
7
|
+
post "/compliance/installer/before_process" => "compliance_installer#before_process"
|
|
8
|
+
post "/compliance/installer/core_process" => "compliance_installer#core_process"
|
|
9
|
+
post "/compliance/installer/post_process" => "compliance_installer#post_process"
|
|
10
|
+
post "/compliance/installer/uninstall" => "compliance_installer#uninstall"
|
|
11
|
+
|
|
12
|
+
# Services
|
|
13
|
+
get "/compliance/services/feature/status" => "compliance_services#get_compliance_feature_status"
|
|
14
|
+
get "/compliance/services/feature/versioning/status" => "compliance_services#get_versioning_status"
|
|
15
|
+
post "/compliance/services/feature/status/set" => "compliance_services#set_compliance_feature_status"
|
|
16
|
+
post "/compliance/services/feature/versioning/status/set" => "compliance_services#set_versioning_status"
|
|
17
|
+
end
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
module RxcmsCompliancePlugin
|
|
2
|
+
|
|
3
|
+
class ComplianceOperations
|
|
4
|
+
# Used for enforcing compliance of metadata
|
|
5
|
+
|
|
6
|
+
def self.process_content(siteid, obj)
|
|
7
|
+
if (getFeatureStatus(siteid, 'compliance') == "yes")
|
|
8
|
+
if (!obj.nil?)
|
|
9
|
+
if (obj.archived?)
|
|
10
|
+
raise
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
release = Release.find_by_metadata_id(obj.id)
|
|
14
|
+
if (release.nil?)
|
|
15
|
+
raise
|
|
16
|
+
else
|
|
17
|
+
# check versions and return the right content
|
|
18
|
+
if (release.date_time.nil?)
|
|
19
|
+
else
|
|
20
|
+
obj = obj.version_at(release.date_time)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
return obj
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.process_content_with_flag(siteid, obj)
|
|
30
|
+
cFlag = true
|
|
31
|
+
if (getFeatureStatus(siteid, 'compliance') == "yes")
|
|
32
|
+
if (!obj.nil?)
|
|
33
|
+
if (obj.archived?)
|
|
34
|
+
cFlag = false
|
|
35
|
+
else
|
|
36
|
+
release = Release.find_by_metadata_id(obj.id)
|
|
37
|
+
if (release.nil?)
|
|
38
|
+
cFlag = false
|
|
39
|
+
else
|
|
40
|
+
# check versions and return the right content
|
|
41
|
+
if (release.date_time.nil?)
|
|
42
|
+
else
|
|
43
|
+
obj = obj.version_at(release.date_time)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
else
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
return { :data => obj, :flag => cFlag }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.create
|
|
56
|
+
# Do nothing
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.update(id, dataObj, current_user_id, affectedCategory, siteid, time)
|
|
60
|
+
status = getFeatureStatus(siteid, 'compliance')
|
|
61
|
+
versioningStatus = getFeatureStatus(siteid, 'versioning')
|
|
62
|
+
|
|
63
|
+
if (!status.nil? && !versioningStatus.nil?)
|
|
64
|
+
|
|
65
|
+
if (versioningStatus == "yes")
|
|
66
|
+
#---
|
|
67
|
+
Metadata.paper_trail_on
|
|
68
|
+
if (status == "yes")
|
|
69
|
+
if (affectedCategory.include?(Metadata.find(id.to_i).cat))
|
|
70
|
+
Metadata.update(id, dataObj)
|
|
71
|
+
|
|
72
|
+
if (time != "current")
|
|
73
|
+
# Allow update changes but doesn't allow publishing
|
|
74
|
+
modifier = Version.select("whodunnit").where("created_at >= ? and created_at <= ?", DateTime.parse(time) - 1.second, DateTime.parse(time) + 1.second).first()
|
|
75
|
+
|
|
76
|
+
if (modifier[:whodunnit].to_i != current_user_id)
|
|
77
|
+
release = Release.first({:conditions => ['metadata_id = ?', id]})
|
|
78
|
+
if (!release.nil?)
|
|
79
|
+
release.destroy
|
|
80
|
+
end
|
|
81
|
+
Release.create({
|
|
82
|
+
:metadata_id => id,
|
|
83
|
+
:date_time => DateTime.parse(time),
|
|
84
|
+
:users_id => current_user_id
|
|
85
|
+
})
|
|
86
|
+
else
|
|
87
|
+
raise "own-change"
|
|
88
|
+
end
|
|
89
|
+
else
|
|
90
|
+
# raise "the content is current"
|
|
91
|
+
release = Release.first({:conditions => ['metadata_id = ?', id]})
|
|
92
|
+
if (!release.nil?)
|
|
93
|
+
if (release.users_id != current_user_id)
|
|
94
|
+
release.destroy
|
|
95
|
+
Release.create({
|
|
96
|
+
:metadata_id => id,
|
|
97
|
+
:date_time => DateTime.now,
|
|
98
|
+
:users_id => current_user_id
|
|
99
|
+
})
|
|
100
|
+
else
|
|
101
|
+
raise "own-change"
|
|
102
|
+
end
|
|
103
|
+
else
|
|
104
|
+
Release.create({
|
|
105
|
+
:metadata_id => id,
|
|
106
|
+
:date_time => DateTime.now,
|
|
107
|
+
:users_id => current_user_id
|
|
108
|
+
})
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
return "saved_published"
|
|
114
|
+
else
|
|
115
|
+
# if not in affected category, should not be tracking
|
|
116
|
+
Metadata.update(id, dataObj)
|
|
117
|
+
end
|
|
118
|
+
else
|
|
119
|
+
raise "fallback"
|
|
120
|
+
end
|
|
121
|
+
#---
|
|
122
|
+
else
|
|
123
|
+
# raise "versioning feature status is not found"
|
|
124
|
+
Metadata.paper_trail_off
|
|
125
|
+
Metadata.update(id, dataObj)
|
|
126
|
+
return "saved"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
else
|
|
130
|
+
# raise "compliance feature bundle status is not found"
|
|
131
|
+
Metadata.paper_trail_off
|
|
132
|
+
Metadata.update(id, dataObj)
|
|
133
|
+
return "saved"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def self.destroy(siteid, affectedCategory, metadata)
|
|
139
|
+
versioningStatus = getFeatureStatus(siteid, 'versioning')
|
|
140
|
+
|
|
141
|
+
if (!versioningStatus.nil?)
|
|
142
|
+
if (versioningStatus == "yes")
|
|
143
|
+
if (affectedCategory.include?(metadata.cat))
|
|
144
|
+
metadata.archived = true
|
|
145
|
+
metadata.save
|
|
146
|
+
else
|
|
147
|
+
Metadata.paper_trail_on
|
|
148
|
+
metadata.destroy
|
|
149
|
+
end
|
|
150
|
+
else
|
|
151
|
+
Metadata.paper_trail_off
|
|
152
|
+
metadata.destroy
|
|
153
|
+
end
|
|
154
|
+
else
|
|
155
|
+
Metadata.paper_trail_off
|
|
156
|
+
metadata.destroy
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def self.destroy_permanently(id)
|
|
162
|
+
begin
|
|
163
|
+
# Destroy item in metadata
|
|
164
|
+
metadata = Metadata.first({ :conditions => ['id = ?', id] })
|
|
165
|
+
if (!metadata.nil?)
|
|
166
|
+
Metadata.paper_trail_off
|
|
167
|
+
metadata.destroy
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
release = Release.first({ :conditions => ['metadata_id = ?', id]})
|
|
171
|
+
if (!release.nil?)
|
|
172
|
+
release.destroy
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# And, destroy item in versions
|
|
176
|
+
Version.destroy_all(:item_id => id)
|
|
177
|
+
|
|
178
|
+
rescue Exception => ex
|
|
179
|
+
raise ex.message
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def self.restore(id)
|
|
184
|
+
begin
|
|
185
|
+
item = Metadata.find(id)
|
|
186
|
+
item.archived = false
|
|
187
|
+
item.save
|
|
188
|
+
rescue Exception => ex
|
|
189
|
+
raise ex.message
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def self.getFeatureStatus(siteid, type)
|
|
194
|
+
app_config = HashWithIndifferentAccess.new(YAML.load(File.read(File.expand_path('../../../../config/compliance/compliance_config.yml', __FILE__))))
|
|
195
|
+
|
|
196
|
+
if (type == 'compliance')
|
|
197
|
+
status = Metadata.first({:conditions => ['sites_id = ? and key = ?', siteid, app_config[:COMPLIANCE_ACTIVATION_CONFIG]]})
|
|
198
|
+
if (!status.nil?)
|
|
199
|
+
return status.value
|
|
200
|
+
else
|
|
201
|
+
return nil
|
|
202
|
+
end
|
|
203
|
+
elsif (type == 'versioning')
|
|
204
|
+
status = Metadata.first({:conditions => ['sites_id = ? and key = ?', siteid, app_config[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG]]})
|
|
205
|
+
if (!status.nil?)
|
|
206
|
+
return status.value
|
|
207
|
+
else
|
|
208
|
+
return nil
|
|
209
|
+
end
|
|
210
|
+
else
|
|
211
|
+
return nil
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
private_class_method :getFeatureStatus
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module RxcmsCompliancePlugin
|
|
2
|
+
|
|
3
|
+
class Status
|
|
4
|
+
|
|
5
|
+
def self.isEnabled?(siteid)
|
|
6
|
+
app_config = HashWithIndifferentAccess.new(YAML.load(File.read(File.expand_path('../../../../config/compliance/compliance_config.yml', __FILE__))))
|
|
7
|
+
|
|
8
|
+
tHash = Hash.new
|
|
9
|
+
|
|
10
|
+
tHash['compliance'] = Metadata.first({:conditions => ['sites_id = ? and key = ?', siteid, app_config[:COMPLIANCE_ACTIVATION_CONFIG]]}).value
|
|
11
|
+
tHash['versioning'] = Metadata.first({:conditions => ['sites_id = ? and key = ?', siteid, app_config[:COMPLIANCE_VERSIONING_ACTIVATION_CONFIG]]}).value
|
|
12
|
+
|
|
13
|
+
return tHash
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'flag_shih_tzu'
|
|
3
|
+
require 'paper_trail'
|
|
4
|
+
|
|
5
|
+
module RxcmsCompliancePlugin
|
|
6
|
+
extend ::ActiveSupport::Autoload
|
|
7
|
+
|
|
8
|
+
autoload :PaperTrail
|
|
9
|
+
autoload :FlagShihTzu
|
|
10
|
+
|
|
11
|
+
class Engine < ::Rails::Engine
|
|
12
|
+
|
|
13
|
+
config.generators do |g|
|
|
14
|
+
g.test_framework :rspec
|
|
15
|
+
# g.fixture_replacement :factory_girl, :dir => 'spec/factories'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
config.autoload_paths += Dir["#{config.root}/lib/rxcms-compliance_plugin/classes/**/"]
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rxcms-compliance_plugin
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Anh Nguyen
|
|
8
|
+
- Julian Cowan
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2013-10-21 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rails
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
requirements:
|
|
18
|
+
- - ~>
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: 3.2.13
|
|
21
|
+
type: :runtime
|
|
22
|
+
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - ~>
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: 3.2.13
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: sqlite3
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - '>='
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '0'
|
|
35
|
+
type: :runtime
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - '>='
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
42
|
+
- !ruby/object:Gem::Dependency
|
|
43
|
+
name: mysql2
|
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - '>='
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '0'
|
|
49
|
+
type: :runtime
|
|
50
|
+
prerelease: false
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - '>='
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: '0'
|
|
56
|
+
- !ruby/object:Gem::Dependency
|
|
57
|
+
name: pg
|
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - '>='
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0'
|
|
63
|
+
type: :runtime
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - '>='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
70
|
+
- !ruby/object:Gem::Dependency
|
|
71
|
+
name: paper_trail
|
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ~>
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: 3.0.0.beta1
|
|
77
|
+
type: :runtime
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - ~>
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 3.0.0.beta1
|
|
84
|
+
- !ruby/object:Gem::Dependency
|
|
85
|
+
name: flag_shih_tzu
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - '>='
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '0'
|
|
91
|
+
type: :runtime
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - '>='
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '0'
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: sqlite3
|
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - '>='
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: '0'
|
|
105
|
+
type: :development
|
|
106
|
+
prerelease: false
|
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
108
|
+
requirements:
|
|
109
|
+
- - '>='
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '0'
|
|
112
|
+
- !ruby/object:Gem::Dependency
|
|
113
|
+
name: paper_trail
|
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - ~>
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: 3.0.0.beta1
|
|
119
|
+
type: :development
|
|
120
|
+
prerelease: false
|
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - ~>
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: 3.0.0.beta1
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: flag_shih_tzu
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - '>='
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: '0'
|
|
133
|
+
type: :development
|
|
134
|
+
prerelease: false
|
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - '>='
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: '0'
|
|
140
|
+
- !ruby/object:Gem::Dependency
|
|
141
|
+
name: rspec-rails
|
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
|
143
|
+
requirements:
|
|
144
|
+
- - '>='
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
version: '0'
|
|
147
|
+
type: :development
|
|
148
|
+
prerelease: false
|
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
150
|
+
requirements:
|
|
151
|
+
- - '>='
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: '0'
|
|
154
|
+
description: Plugin Extension for RXCMS that provides versioning and peer review capability
|
|
155
|
+
for all content.
|
|
156
|
+
email:
|
|
157
|
+
- rxcms@ngonluakiko.com
|
|
158
|
+
executables: []
|
|
159
|
+
extensions: []
|
|
160
|
+
extra_rdoc_files: []
|
|
161
|
+
files:
|
|
162
|
+
- app/views/compliance_engine/configure.html.erb
|
|
163
|
+
- app/views/compliance_engine/installer.html.erb
|
|
164
|
+
- app/views/compliance_engine/index.html.erb
|
|
165
|
+
- app/controllers/compliance_installer_controller.rb
|
|
166
|
+
- app/controllers/compliance_services_controller.rb
|
|
167
|
+
- app/controllers/compliance_engine_controller.rb
|
|
168
|
+
- app/assets/javascripts/compliance_services.js
|
|
169
|
+
- app/assets/javascripts/compliance_plugin/installer.js
|
|
170
|
+
- app/assets/javascripts/compliance_plugin/index.js
|
|
171
|
+
- app/assets/javascripts/compliance_plugin/configure.js
|
|
172
|
+
- app/assets/stylesheets/compliance_services.css
|
|
173
|
+
- app/assets/stylesheets/compliance_installer.css
|
|
174
|
+
- app/assets/stylesheets/compliance_engine.css
|
|
175
|
+
- app/helpers/compliance_services_helper.rb
|
|
176
|
+
- app/helpers/compliance_plugin_helper.rb
|
|
177
|
+
- app/helpers/compliance_installer_helper.rb
|
|
178
|
+
- app/helpers/compliance_engine_helper.rb
|
|
179
|
+
- config/compliance/compliance_config.yml
|
|
180
|
+
- config/routes.rb
|
|
181
|
+
- lib/rxcms-compliance_plugin/classes/compliance_operations.rb
|
|
182
|
+
- lib/rxcms-compliance_plugin/classes/executor.rb
|
|
183
|
+
- lib/rxcms-compliance_plugin/classes/status.rb
|
|
184
|
+
- lib/rxcms-compliance_plugin/engine.rb
|
|
185
|
+
- lib/rxcms-compliance_plugin/version.rb
|
|
186
|
+
- lib/rxcms-compliance_plugin.rb
|
|
187
|
+
- lib/tasks/rxcms-compliance_plugin_tasks.rake
|
|
188
|
+
- MIT-LICENSE
|
|
189
|
+
- Rakefile
|
|
190
|
+
- README.rdoc
|
|
191
|
+
homepage: https://bitbucket.org/kikoflame/rxcms-compliance-plugin
|
|
192
|
+
licenses:
|
|
193
|
+
- MIT
|
|
194
|
+
metadata:
|
|
195
|
+
compatCode: 2dd89a9ecdeb920d539954fd9fb3da7de9f52a61ee9895d06e4bc1bab11a598b
|
|
196
|
+
fullName: Compliance Plugin
|
|
197
|
+
mountPoint: /compliance/engine/configure
|
|
198
|
+
installerPoint: /compliance/engine/installer
|
|
199
|
+
post_install_message:
|
|
200
|
+
rdoc_options: []
|
|
201
|
+
require_paths:
|
|
202
|
+
- lib
|
|
203
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
|
+
requirements:
|
|
205
|
+
- - '>='
|
|
206
|
+
- !ruby/object:Gem::Version
|
|
207
|
+
version: '0'
|
|
208
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
|
+
requirements:
|
|
210
|
+
- - '>='
|
|
211
|
+
- !ruby/object:Gem::Version
|
|
212
|
+
version: '0'
|
|
213
|
+
requirements: []
|
|
214
|
+
rubyforge_project:
|
|
215
|
+
rubygems_version: 2.0.6
|
|
216
|
+
signing_key:
|
|
217
|
+
specification_version: 4
|
|
218
|
+
summary: Versioning and peer review capability.
|
|
219
|
+
test_files: []
|