rxcms-dbms_plugin 0.3.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/alliance_dbms_plugin/configure.js +555 -0
- data/app/assets/javascripts/alliance_dbms_plugin/index.js +7 -0
- data/app/assets/javascripts/alliance_dbms_plugin/installer.js +101 -0
- data/app/assets/stylesheets/dbms_engine.css +4 -0
- data/app/assets/stylesheets/dbms_installer.css +4 -0
- data/app/controllers/dbms_connection_controller.rb +291 -0
- data/app/controllers/dbms_engine_controller.rb +70 -0
- data/app/controllers/dbms_installer_controller.rb +138 -0
- data/app/controllers/dbms_services_controller.rb +33 -0
- data/app/helpers/dbms_engine_helper.rb +49 -0
- data/app/helpers/dbms_installer_helper.rb +2 -0
- data/app/helpers/dbms_plugin_helper.rb +30 -0
- data/app/models/database.rb +47 -0
- data/app/views/dbms_engine/configure.html.erb +165 -0
- data/app/views/dbms_engine/index.html.erb +1 -0
- data/app/views/dbms_engine/installer.html.erb +55 -0
- data/config/dbms/dbms_config.yml +8 -0
- data/config/routes.rb +25 -0
- data/db/migrate/20130828071533_create_databases.rb +8 -0
- data/lib/rxcms-dbms_plugin/classes/executor.rb +153 -0
- data/lib/rxcms-dbms_plugin/engine.rb +14 -0
- data/lib/rxcms-dbms_plugin/version.rb +3 -0
- data/lib/rxcms-dbms_plugin.rb +5 -0
- data/lib/tasks/rxcms-dbms_plugin_tasks.rake +4 -0
- metadata +174 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
module DbmsEngineHelper
|
2
|
+
|
3
|
+
def persist_connection
|
4
|
+
SymmetricEncryption.load!
|
5
|
+
|
6
|
+
if (ActiveRecord::Base.connection == Database.connection)
|
7
|
+
adapter = !Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_ADAPTER], session[:accessible_appid]] }).nil? ? Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_ADAPTER], session[:accessible_appid]] }).value : nil
|
8
|
+
|
9
|
+
if (!adapter.nil?)
|
10
|
+
if (adapter == 'sqlite')
|
11
|
+
if (Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_DATABASE], session[:accessible_appid]] }).nil?)
|
12
|
+
raise "database malformed"
|
13
|
+
end
|
14
|
+
|
15
|
+
connectionResult = Database.connect_sqlite(Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_DATABASE], session[:accessible_appid]] }).value)
|
16
|
+
|
17
|
+
if (!connectionResult)
|
18
|
+
raise "connection malformed or altered"
|
19
|
+
end
|
20
|
+
else
|
21
|
+
if (Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_HOST], session[:accessible_appid]] }).nil? ||
|
22
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PORT], session[:accessible_appid]] }).nil? ||
|
23
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_DATABASE], session[:accessible_appid]] }).nil? ||
|
24
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_USER], session[:accessible_appid]] }).nil? ||
|
25
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PASSWORD], session[:accessible_appid]] }).nil?)
|
26
|
+
raise "host, database, user or password malformed"
|
27
|
+
end
|
28
|
+
|
29
|
+
connectionResult = Database.connect_sql(Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_ADAPTER], session[:accessible_appid]] }).value,
|
30
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_HOST], session[:accessible_appid]] }).value,
|
31
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PORT], session[:accessible_appid]] }).value,
|
32
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_USER], session[:accessible_appid]] }).value,
|
33
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PASSWORD], session[:accessible_appid]] }).value,
|
34
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_DATABASE], session[:accessible_appid]] }).value)
|
35
|
+
|
36
|
+
if (!connectionResult)
|
37
|
+
raise "connection malformed or altered"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
else
|
41
|
+
raise "adapter malformed"
|
42
|
+
end
|
43
|
+
else
|
44
|
+
logger.debug("[dbms-plugin] Not persisting connection")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module DbmsPluginHelper
|
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,47 @@
|
|
1
|
+
class Database < ActiveRecord::Base
|
2
|
+
@@conn = nil
|
3
|
+
|
4
|
+
def self.connect_sql(adapter, host, port, username, password, database)
|
5
|
+
SymmetricEncryption.load!
|
6
|
+
# Load configuration items (MANDATORY, must be included)
|
7
|
+
app_config = HashWithIndifferentAccess.new(YAML.load(File.read(File.expand_path('../../../config/dbms/dbms_config.yml', __FILE__))))
|
8
|
+
|
9
|
+
begin
|
10
|
+
decryptedPassword = SymmetricEncryption.decrypt(password)
|
11
|
+
|
12
|
+
establish_connection(
|
13
|
+
:adapter => adapter,
|
14
|
+
:host => host,
|
15
|
+
:port => port.to_i,
|
16
|
+
:username => username,
|
17
|
+
:password => decryptedPassword,
|
18
|
+
:database => database
|
19
|
+
)
|
20
|
+
|
21
|
+
if (self.connection.nil?)
|
22
|
+
return false
|
23
|
+
else
|
24
|
+
return true
|
25
|
+
end
|
26
|
+
rescue
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.connect_sqlite(path)
|
32
|
+
begin
|
33
|
+
establish_connection(
|
34
|
+
:adapter => "sqlite3",
|
35
|
+
:database => path
|
36
|
+
)
|
37
|
+
|
38
|
+
if (self.connection.nil?)
|
39
|
+
return false
|
40
|
+
else
|
41
|
+
return true
|
42
|
+
end
|
43
|
+
rescue
|
44
|
+
return false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
<!-- Store Query Modal -->
|
2
|
+
<div id="storeQueryModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
3
|
+
<div class="modal-header">
|
4
|
+
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
5
|
+
<h3 id="myModalLabel">Save Query</h3>
|
6
|
+
</div>
|
7
|
+
<div class="modal-body">
|
8
|
+
<div class="row-fluid">
|
9
|
+
<div class="span3">
|
10
|
+
<div style="padding:2px 0 2px 0;">Stored Query Key</div>
|
11
|
+
</div>
|
12
|
+
<div class="span8">
|
13
|
+
<input type="text" id="storedQueryKey" />
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="modal-footer">
|
18
|
+
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
19
|
+
<button class="btn btn-primary" id="processStoreQueryModalBtn">process...</button>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<!-- Language Modal -->
|
24
|
+
<div id="storeQueryLanguageModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
25
|
+
<div class="modal-header">
|
26
|
+
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
27
|
+
<h3 id="myModalLabel">Change locale for query</h3>
|
28
|
+
</div>
|
29
|
+
<div class="modal-body">
|
30
|
+
<p><select id="storeQueryLanguageSelect">
|
31
|
+
|
32
|
+
</select></p>
|
33
|
+
</div>
|
34
|
+
<div class="modal-footer">
|
35
|
+
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class="container">
|
40
|
+
<ul id="dbmsConfigureTabs" class="nav nav-tabs">
|
41
|
+
<li class="active"><a href="#home" data-toggle="tab">Configuration</a></li>
|
42
|
+
<li id="dataManagementConsole" class="dropdown">
|
43
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Operations <b class="caret"></b></a>
|
44
|
+
<ul class="dropdown-menu">
|
45
|
+
<li><a href="#dataMapping" data-toggle="tab">Data Mapping</a></li>
|
46
|
+
</ul>
|
47
|
+
</li>
|
48
|
+
<li><a href="#uninstall" data-toggle="tab">Uninstall</a></li>
|
49
|
+
</ul>
|
50
|
+
|
51
|
+
<div id="myTabContent" class="tab-content">
|
52
|
+
<div class="tab-pane fade in active" id="home">
|
53
|
+
|
54
|
+
<h4>Please provide your database connection and credentials</h4>
|
55
|
+
|
56
|
+
<div class="input-prepend">
|
57
|
+
<span class="add-on">DBMS Type</span>
|
58
|
+
<select id="dbmsTypeSelect" style="margin-left:5px;">
|
59
|
+
<option value=""></option>
|
60
|
+
<option value="mysql2">MySQL</option>
|
61
|
+
<!--<option value="sqlite">SQLite</option>-->
|
62
|
+
<option value="postgresql">PostgreSQL</option>
|
63
|
+
</select>
|
64
|
+
</div>
|
65
|
+
<br />
|
66
|
+
<div class="connectorContainer" id="sql" style="display:none;">
|
67
|
+
<div class="input-prepend">
|
68
|
+
<span class="add-on">Connection URL</span>
|
69
|
+
<input class="span2" id="hostTxt" type="text" placeholder="host...">
|
70
|
+
</div>
|
71
|
+
<br />
|
72
|
+
<div class="input-prepend">
|
73
|
+
<span class="add-on">Connection Host</span>
|
74
|
+
<input class="span2" id="portTxt" type="text" placeholder="port...">
|
75
|
+
</div>
|
76
|
+
<br />
|
77
|
+
<div class="input-prepend">
|
78
|
+
<span class="add-on">Database Name</span>
|
79
|
+
<input class="span2" id="dbTxt" type="text" placeholder="database name...">
|
80
|
+
</div>
|
81
|
+
<br />
|
82
|
+
<div class="input-prepend">
|
83
|
+
<span class="add-on">Login</span>
|
84
|
+
<input class="span2" id="userTxt" type="text" placeholder="username">
|
85
|
+
</div>
|
86
|
+
<br />
|
87
|
+
<div class="input-prepend">
|
88
|
+
<span class="add-on">Password</span>
|
89
|
+
<input class="span2" id="passwordTxt" type="password" placeholder="password">
|
90
|
+
</div>
|
91
|
+
<br />
|
92
|
+
<button type="button" id="sqlProceedBtn" class="btn btn-danger sqlProceedBtn">proceed</button>
|
93
|
+
</div>
|
94
|
+
|
95
|
+
<!--<div class="connectorContainer" id="sqlite" style="display:none;">
|
96
|
+
<div class="input-prepend">
|
97
|
+
<span class="add-on">Database</span>
|
98
|
+
<input class="span2" id="prependedInput" type="text" placeholder="url to your sqlite db">
|
99
|
+
</div>
|
100
|
+
<br />
|
101
|
+
<button type="button" id="sqliteProceedBtn" class="btn btn-danger sqlProceedBtn">proceed</button>
|
102
|
+
</div>-->
|
103
|
+
|
104
|
+
</div>
|
105
|
+
|
106
|
+
<div class="tab-pane fade" id="dataMapping">
|
107
|
+
|
108
|
+
<div class="row-fluid">
|
109
|
+
<div class="span3">
|
110
|
+
|
111
|
+
<label class="control-label">Stored Queries</label>
|
112
|
+
<ul class="nav nav-tabs nav-stacked" id="storeQueryList">
|
113
|
+
<li id="storeQueryDummy" style="display:none;"><a href="#"><input type="checkbox" style="margin:-2px 5px 0 0;" /><span></span> <span>(x)</span></a></li>
|
114
|
+
</ul>
|
115
|
+
|
116
|
+
</div>
|
117
|
+
<div class="span9">
|
118
|
+
<div>
|
119
|
+
<!-- Textarea -->
|
120
|
+
<div class="control-group">
|
121
|
+
<label class="control-label">SQL Command</label>
|
122
|
+
<div class="controls">
|
123
|
+
<textarea id="sqlQueryTxt" name="textarea" style="width:97%;height:96px;font-family:'Courier New', sans-serif;" placeholder="SQL Query here"></textarea>
|
124
|
+
</div>
|
125
|
+
</div>
|
126
|
+
|
127
|
+
<!-- Button -->
|
128
|
+
<div class="control-group">
|
129
|
+
<div class="controls">
|
130
|
+
<button id="executeSqlBtn" name="singlebutton" class="btn btn-primary">test</button>
|
131
|
+
<button id="saveSqlBtn" name="singlebutton" class="btn btn-primary" disabled="disabled">save query</button>
|
132
|
+
<button id="updateSqlBtn" name="singlebutton" class="btn btn-primary" disabled="disabled" style="display:none;">update query</button>
|
133
|
+
<button id="localeSqlBtn" name="singlebutton" class="btn btn-primary" style="display:none;">language</button>
|
134
|
+
</div>
|
135
|
+
</div>
|
136
|
+
</div>
|
137
|
+
|
138
|
+
<div>
|
139
|
+
<table class="table table-striped" id="resultTable">
|
140
|
+
<thead>
|
141
|
+
<tr>
|
142
|
+
<!-- HEADER GOES HERE -->
|
143
|
+
</tr>
|
144
|
+
</thead>
|
145
|
+
<tbody>
|
146
|
+
<!-- BODY GOES HERE -->
|
147
|
+
</tbody>
|
148
|
+
</table>
|
149
|
+
</div>
|
150
|
+
</div>
|
151
|
+
</div>
|
152
|
+
|
153
|
+
</div>
|
154
|
+
|
155
|
+
<div class="tab-pane fade" id="uninstall" >
|
156
|
+
<div>
|
157
|
+
<button id="uninstallBtn" type="button" class="btn btn-danger">Uninstall</button>
|
158
|
+
</div>
|
159
|
+
</div>
|
160
|
+
|
161
|
+
</div>
|
162
|
+
|
163
|
+
</div>
|
164
|
+
|
165
|
+
<%= javascript_include_tag "alliance_dbms_plugin/configure" %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>This is the readme page of Alliance CMS DBMS Plugin</h1>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<div>
|
3
|
+
<h4>Please provide your database connection and credentials</h4>
|
4
|
+
|
5
|
+
<div class="input-prepend">
|
6
|
+
<span class="add-on">DBMS Type</span>
|
7
|
+
<select id="dbmsTypeSelect" style="margin-left:5px;">
|
8
|
+
<option value=""></option>
|
9
|
+
<option value="mysql2">MySQL</option>
|
10
|
+
<!--<option value="sqlite">SQLite</option>-->
|
11
|
+
<option value="postgresql">PostgreSQL</option>
|
12
|
+
</select>
|
13
|
+
</div>
|
14
|
+
<br />
|
15
|
+
<div class="connectorContainer" id="sql" style="display:none;">
|
16
|
+
<div class="input-prepend">
|
17
|
+
<span class="add-on">Connection URL</span>
|
18
|
+
<input class="span2" id="hostTxt" type="text" placeholder="host...">
|
19
|
+
</div>
|
20
|
+
<br />
|
21
|
+
<div class="input-prepend">
|
22
|
+
<span class="add-on">Connection Port</span>
|
23
|
+
<input class="span2" id="portTxt" type="text" placeholder="port...">
|
24
|
+
</div>
|
25
|
+
<br />
|
26
|
+
<div class="input-prepend">
|
27
|
+
<span class="add-on">Database Name</span>
|
28
|
+
<input class="span2" id="dbTxt" type="text" placeholder="database name...">
|
29
|
+
</div>
|
30
|
+
<br />
|
31
|
+
<div class="input-prepend">
|
32
|
+
<span class="add-on">Login</span>
|
33
|
+
<input class="span2" id="userTxt" type="text" placeholder="username">
|
34
|
+
</div>
|
35
|
+
<br />
|
36
|
+
<div class="input-prepend">
|
37
|
+
<span class="add-on">Password</span>
|
38
|
+
<input class="span2" id="passwordTxt" type="password" placeholder="password">
|
39
|
+
</div>
|
40
|
+
<br />
|
41
|
+
<button type="button" id="sqlProceedBtn" class="btn btn-danger sqlProceedBtn">proceed</button>
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<!--<div class="connectorContainer" id="sqlite" style="display:none;">
|
45
|
+
<div class="input-prepend">
|
46
|
+
<span class="add-on">Database</span>
|
47
|
+
<input class="span2" id="dbTxtSqlite" type="text" placeholder="url to your sqlite db">
|
48
|
+
</div>
|
49
|
+
<br />
|
50
|
+
<button type="button" id="sqliteProceedBtn" class="btn btn-danger sqlProceedBtn">proceed</button>
|
51
|
+
</div>-->
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
|
55
|
+
<%= javascript_include_tag "alliance_dbms_plugin/installer" %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
DBMS_CURRENT_ADAPTER : dbmsCurrentAdapter
|
2
|
+
DBMS_CURRENT_HOST : dbmsCurrentHost
|
3
|
+
DBMS_CURRENT_PORT : dbmsCurrentPort
|
4
|
+
DBMS_CURRENT_DATABASE : dbmsCurrentDatabase
|
5
|
+
DBMS_CURRENT_USER : dbmsCurrentUser
|
6
|
+
DBMS_CURRENT_PASSWORD : dbmsCurrentPassword
|
7
|
+
DBMS_CAT_CONFIG : dbms_config
|
8
|
+
DBMS_CAT_STORED_QUERY : dbms_stored_query
|
data/config/routes.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
|
3
|
+
get "/dbms/engine/readme" => "dbms_engine#index"
|
4
|
+
get "/dbms/engine/configure" => "dbms_engine#configure"
|
5
|
+
get "/dbms/engine/installer" => "dbms_engine#installer"
|
6
|
+
|
7
|
+
post "/dbms/installer/before_process" => "dbms_installer#before_process"
|
8
|
+
post "/dbms/installer/core_process" => "dbms_installer#core_process"
|
9
|
+
post "/dbms/installer/post_process" => "dbms_installer#post_process"
|
10
|
+
post "/dbms/installer/uninstall" => "dbms_installer#uninstall"
|
11
|
+
|
12
|
+
get "/dbms/connection/status" => "dbms_connection#getConnectionStatus"
|
13
|
+
post "/dbms/connection/make" => "dbms_connection#makeNewConnection"
|
14
|
+
get "/dbms/connection/tables" => "dbms_connection#getListOfTables"
|
15
|
+
post "/dbms/connection/sql" => "dbms_connection#executeSQL"
|
16
|
+
post "/dbms/connection/query/store" => "dbms_connection#addStoredQuery"
|
17
|
+
get "/dbms/connection/query/all" => "dbms_connection#getListOfStoredQueries"
|
18
|
+
get "/dbms/connection/query/one/:id/:cat" => "dbms_connection#getOneStoredQueryInfos"
|
19
|
+
put "/dbms/connection/query/update/:id" => "dbms_connection#updateStoredQuery"
|
20
|
+
delete "/dbms/connection/query/delete/:id" => "dbms_connection#deleteStoredQuery"
|
21
|
+
|
22
|
+
# Service Route
|
23
|
+
get "/ext/dbms/:key" => "dbms_services#execute"
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
module RxcmsDbmsPlugin
|
2
|
+
|
3
|
+
class Executor
|
4
|
+
|
5
|
+
# Tag syntax [[<<placeholder>>? &type="stored-query" &data="<<data-source>>" &attrs="<<attr-data>>"...]]
|
6
|
+
def self.execute(placeholder, attrs, exts)
|
7
|
+
begin
|
8
|
+
|
9
|
+
dbms_config = HashWithIndifferentAccess.new(YAML.load(File.read(File.expand_path("../../../../config/dbms/dbms_config.yml", __FILE__))))
|
10
|
+
|
11
|
+
if attrs.has_key?('configs')
|
12
|
+
if attrs['configs'].has_key?('type')
|
13
|
+
if attrs['configs']['type'] == 'stored-query'
|
14
|
+
|
15
|
+
if (ActiveRecord::Base.connection == Database.connection)
|
16
|
+
if (!Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_HOST], ext[:appid]] }).nil? &&
|
17
|
+
!Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PORT], ext[:appid]] }).nil? &&
|
18
|
+
!Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_DATABASE], ext[:appid]] }).nil? &&
|
19
|
+
!Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_USER], ext[:appid]] }).nil? &&
|
20
|
+
!Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PASSWORD], ext[:appid]] }).nil?)
|
21
|
+
|
22
|
+
connectionResult = Database.connect_sql(Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_ADAPTER], ext[:appid]] }).value,
|
23
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_HOST], ext[:appid]] }).value,
|
24
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PORT], ext[:appid]] }).value,
|
25
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_USER], ext[:appid]] }).value,
|
26
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_PASSWORD], ext[:appid]] }).value,
|
27
|
+
Metadata.first({ :conditions => ['key = ? and sites_id = ?', dbms_config[:DBMS_CURRENT_DATABASE], ext[:appid]] }).value)
|
28
|
+
if (!connectionResult)
|
29
|
+
return "{{[alliance_dbms - #{placeholder.key}] Unable to establish connection to database}}"
|
30
|
+
end
|
31
|
+
else
|
32
|
+
return "{{[alliance_dbms - #{placeholder.key}] Missing important keys to establish connection}}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if attrs['configs'].has_key?('data')
|
37
|
+
tQueryItem = Metadata.all({ :conditions => ['key = ? and sites_id = ?', attrs['configs']['data'], ext[:appid]] })
|
38
|
+
languageSwitchable = Metadata.first({ :conditions => ['key = ? and sites_id = ?', 'autoLanguageSwitch'. ext[:appid]] })
|
39
|
+
queryItem = nil
|
40
|
+
|
41
|
+
tQueryItem.each do |query|
|
42
|
+
tQueryItemJsonObject = ActiveSupport::JSON.decode(SymmetricEncryption.decrypt(query.value))
|
43
|
+
tQueryItemJsonObjectLanguage = tQueryItemJsonObject['language'].scan(/^[a-z]{2}/).first
|
44
|
+
|
45
|
+
if (!languageSwitchable.nil?)
|
46
|
+
if (languageSwitchable.value == 'yes')
|
47
|
+
if (exts[:language] == tQueryItemJsonObjectLanguage)
|
48
|
+
queryItem = query
|
49
|
+
break
|
50
|
+
end
|
51
|
+
elsif (languageSwitchable.value == 'no')
|
52
|
+
if ('no' == tQueryItemJsonObjectLanguage)
|
53
|
+
queryItem = query
|
54
|
+
break
|
55
|
+
end
|
56
|
+
else
|
57
|
+
return "{{alliance-dbms - #{placeholder.key} the \"value\" for language switchability is invalid}}"
|
58
|
+
end
|
59
|
+
else
|
60
|
+
return "{{alliance-dbms - #{placeholder.key} Language switchability is not available}}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if (!queryItem.nil?)
|
65
|
+
|
66
|
+
queryItemJsonObject = ActiveSupport::JSON.decode(SymmetricEncryption.decrypt(queryItem.value))
|
67
|
+
queryItemJsonData = Database.connection.select_all(queryItemJsonObject['sql'])
|
68
|
+
|
69
|
+
if (attrs['configs'].has_key?('tple') && attrs['configs'].has_key?('tplo'))
|
70
|
+
# if it is alternate template
|
71
|
+
contentResult = ''
|
72
|
+
|
73
|
+
queryItemEvenTemplate = Metadata.find_by_key(attrs['configs']['tple'])
|
74
|
+
queryItemOddTemplate = Metadata.find_by_key(attrs['configs']['tplo'])
|
75
|
+
|
76
|
+
if (!queryItemEvenTemplate.nil? && !queryItemOddTemplate.nil?)
|
77
|
+
tplCount = 0
|
78
|
+
queryItemJsonData.each do |q|
|
79
|
+
itemTemplate = ''
|
80
|
+
|
81
|
+
if (tplCount % 2 == 0)
|
82
|
+
itemTemplate = queryItemEvenTemplate.value.strip
|
83
|
+
else
|
84
|
+
itemTemplate = queryItemOddTemplate.value.strip
|
85
|
+
end
|
86
|
+
parsedObjs = itemTemplate.scan(/\[\[\$[a-zA-Z\-_]+\]\]/)
|
87
|
+
|
88
|
+
parsedObjs.each do |p|
|
89
|
+
tpObj = p.gsub(/[^a-zA-Z\-_]/, '')
|
90
|
+
|
91
|
+
if (!q[tpObj].nil?)
|
92
|
+
itemTemplate = itemTemplate.gsub(p, q[tpObj].to_s.strip)
|
93
|
+
else
|
94
|
+
itemTemplate = itemTemplate.gsub(p, '')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
contentResult << itemTemplate
|
99
|
+
tplCount = tplCount + 1
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# Content should be empty if even and odd template don't exist
|
104
|
+
contentResult
|
105
|
+
elsif (attrs['configs'].keys.grep(/^tpl[0-9]+$/).size > 0)
|
106
|
+
# if it is multiple template
|
107
|
+
"{{[alliance-dbms - #{placeholder.key}] multiple template is not supported}}"
|
108
|
+
else
|
109
|
+
# if it is single template
|
110
|
+
contentResult = ''
|
111
|
+
|
112
|
+
queryItemJsonData.each do |q|
|
113
|
+
queryItemTemplate = placeholder.value.strip
|
114
|
+
parsedObjs = queryItemTemplate.scan(/\[\[\$[a-zA-Z\-_]+\]\]/)
|
115
|
+
|
116
|
+
parsedObjs.each do |p|
|
117
|
+
tpObj = p.gsub(/[^a-zA-Z\-_]/, '')
|
118
|
+
|
119
|
+
if (!q[tpObj].nil?)
|
120
|
+
queryItemTemplate = queryItemTemplate.gsub(p, q[tpObj].to_s.strip)
|
121
|
+
else
|
122
|
+
queryItemTemplate = queryItemTemplate.gsub(p, '')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
contentResult << queryItemTemplate
|
127
|
+
end
|
128
|
+
|
129
|
+
# Content should be empty if db returns no data
|
130
|
+
contentResult
|
131
|
+
end
|
132
|
+
else
|
133
|
+
placeholder.value.strip.html_safe
|
134
|
+
end
|
135
|
+
else
|
136
|
+
placeholder.value.strip.html_safe
|
137
|
+
end
|
138
|
+
else
|
139
|
+
placeholder.value.strip.html_safe
|
140
|
+
end
|
141
|
+
else
|
142
|
+
placeholder.value.strip.html_safe
|
143
|
+
end
|
144
|
+
else
|
145
|
+
placeholder.value.strip.html_safe
|
146
|
+
end
|
147
|
+
rescue Exception => ex
|
148
|
+
"{{[alliance-dbms - #{placeholder.key}] #{ex.message}}}"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "mysql2"
|
3
|
+
require "pg"
|
4
|
+
|
5
|
+
module RxcmsDbmsPlugin
|
6
|
+
extend ::ActiveSupport::Autoload
|
7
|
+
|
8
|
+
autoload :Mysql2
|
9
|
+
autoload :PG
|
10
|
+
|
11
|
+
class Engine < ::Rails::Engine
|
12
|
+
config.autoload_paths += Dir["#{config.root}/lib/rxcms-dbms_plugin/classes/**/"]
|
13
|
+
end
|
14
|
+
end
|