rxcms-dbms_plugin 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|