widget_list 1.0.6 → 1.0.7
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.
- data/.gitignore +10 -0
- data/.idea/workspace.xml +116 -62
- data/README.md +250 -108
- data/lib/widget_list.rb +706 -403
- data/lib/widget_list/railtie.rb +11 -1
- data/lib/widget_list/sequel.rb +95 -35
- data/lib/widget_list/version.rb +1 -1
- data/publish_gem.sh +1 -1
- data/vendor/assets/javascripts/widget_list.js +69 -4
- data/vendor/assets/stylesheets/widget_list.css +4 -4
- data/widget_list.gemspec +1 -1
- metadata +2 -2
data/lib/widget_list.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'widget_list/sequel'
|
2
1
|
require 'widget_list/version'
|
3
2
|
require 'widget_list/hash'
|
4
3
|
require 'widget_list/string'
|
@@ -10,8 +9,6 @@ require 'csv'
|
|
10
9
|
require 'json'
|
11
10
|
require 'uri'
|
12
11
|
require 'extensions/action_controller_base'
|
13
|
-
require 'sequel'
|
14
|
-
|
15
12
|
|
16
13
|
module WidgetList
|
17
14
|
|
@@ -27,192 +24,143 @@ module WidgetList
|
|
27
24
|
|
28
25
|
include ActionView::Helpers::SanitizeHelper
|
29
26
|
|
30
|
-
def self.determine_db_type(db_type)
|
31
|
-
the_type, void = db_type.split("://")
|
32
|
-
if the_type == 'sqlite:/'
|
33
|
-
the_type = 'sqlite'
|
34
|
-
end
|
35
|
-
return the_type.downcase
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.connect
|
39
|
-
|
40
|
-
begin
|
41
|
-
if Rails.root.join("config", "widget-list.yml").file?
|
42
|
-
config = YAML.load(ERB.new(File.new(Rails.root.join("config", "widget-list.yml")).read).result)[Rails.env]
|
43
|
-
if config.nil?
|
44
|
-
throw 'Configuration file widget-list.yml has no data. Check that (' + Rails.env + ') Rails.env matches the pointers in the file'
|
45
|
-
end
|
46
|
-
@primary_conn = config[:primary]
|
47
|
-
@secondary_conn = config[:secondary]
|
48
|
-
else
|
49
|
-
throw 'widget-list.yml not found'
|
50
|
-
end
|
51
|
-
|
52
|
-
$DATABASE = Sequel.connect(@primary_conn) if @primary_conn != 'false' and @primary_conn != false
|
53
|
-
$DATABASE2 = Sequel.connect(@secondary_conn) if @secondary_conn != 'false' and @secondary_conn != false
|
54
|
-
|
55
|
-
if @primary_conn.class.name != 'false' and @primary_conn != false
|
56
|
-
$DATABASE.db_type = determine_db_type(@primary_conn)
|
57
|
-
end
|
58
|
-
|
59
|
-
if @primary_conn.class.name != 'false' and @secondary_conn != false
|
60
|
-
$DATABASE2.db_type = determine_db_type(@secondary_conn)
|
61
|
-
end
|
62
|
-
rescue Exception => e
|
63
|
-
p "widget-list.yml and connection to \$DATABASE failed. Please fix and try again (" + e.to_s + ")"
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.get_database
|
69
|
-
case $current_db_selection
|
70
|
-
when 'primary'
|
71
|
-
$DATABASE
|
72
|
-
when 'secondary'
|
73
|
-
$DATABASE2
|
74
|
-
else
|
75
|
-
$DATABASE
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
27
|
# @param [Hash] list
|
80
28
|
def initialize(list={})
|
81
29
|
|
30
|
+
# Defaults for all configs
|
31
|
+
# See https://github.com/davidrenne/widget_list/blob/master/README.md#feature-configurations
|
82
32
|
@items = {
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
'searchClearAll' => false, # build a custom conditional for each page to clear session
|
111
|
-
'showPagination' => true,
|
112
|
-
'searchSession' => true, #on list render use last filter
|
33
|
+
'errors' => [],
|
34
|
+
'name' => ([*('A'..'Z'),*('0'..'9')]-%w(0 1 I O)).sample(16).join,
|
35
|
+
'database' => 'primary', #
|
36
|
+
'title' => '',
|
37
|
+
'listDescription' => '',
|
38
|
+
'pageId' => $_SERVER['PATH_INFO'],
|
39
|
+
'view' => '',
|
40
|
+
'data' => {},
|
41
|
+
'collClass' => '',
|
42
|
+
'collAlign' => '',
|
43
|
+
'fields' => {},
|
44
|
+
'fieldsHidden' => [],
|
45
|
+
'bindVars' => [],
|
46
|
+
'bindVarsLegacy' => {},
|
47
|
+
'links' => {},
|
48
|
+
'buttons' => {},
|
49
|
+
'inputs' => {},
|
50
|
+
'filter' => [],
|
51
|
+
'groupBy' => '',
|
52
|
+
'rowStart' => 0,
|
53
|
+
'rowLimit' => 10,
|
54
|
+
'orderBy' => '',
|
55
|
+
'allowHTML' => true,
|
56
|
+
'searchClear' => false,
|
57
|
+
'searchClearAll' => false,
|
58
|
+
'showPagination' => true,
|
59
|
+
'searchSession' => true,
|
113
60
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
'force_query_sql' => '',
|
61
|
+
#
|
62
|
+
# carryOverRequests will allow you to post custom things from request to all sort/paging URLS for each ajax
|
63
|
+
#
|
64
|
+
'carryOverRequsts' => ['switch_grouping'],
|
119
65
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
'ajax_action' => '',
|
124
|
-
'ajax_function' => 'ListJumpMin',
|
125
|
-
'ajax_search_function'=> 'ListJumpMin',
|
66
|
+
#
|
67
|
+
# Head/Foot
|
68
|
+
#
|
126
69
|
|
127
|
-
|
128
|
-
|
129
|
-
#
|
130
|
-
'showSearch' => true,
|
131
|
-
'searchOnkeyup' => '',
|
132
|
-
'searchOnclick' => '',
|
133
|
-
'searchIdCol' => 'id', #By default `id` column is here because typically if you call your PK's id and are auto-increment
|
134
|
-
'searchInputLegacyCSS'=> false,
|
135
|
-
'searchBtnName' => 'Search by Id or a list of Ids and more',
|
136
|
-
'searchTitle' => '',
|
137
|
-
'searchFieldsIn' => {}, #White list of fields to include in a alpha-numeric based search
|
138
|
-
'searchFieldsOut' => {'id'=>true}, #Black list of fields to include in a alpha-numeric based search (default `id` to NEVER search when alpha seach)
|
70
|
+
'customFooter' => '',
|
71
|
+
'customHeader' => '',
|
139
72
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
73
|
+
#
|
74
|
+
# Ajax
|
75
|
+
#
|
76
|
+
'ajaxFunctionAll' => '',
|
77
|
+
'ajaxFunction' => 'ListJumpMin',
|
144
78
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
79
|
+
#
|
80
|
+
# Search
|
81
|
+
#
|
82
|
+
'showSearch' => true,
|
83
|
+
'searchOnkeyup' => '',
|
84
|
+
'searchOnclick' => '',
|
85
|
+
'searchIdCol' => 'id',
|
86
|
+
'searchTitle' => 'Search by Id or a list of Ids and more',
|
87
|
+
'searchFieldsIn' => {},
|
88
|
+
'searchFieldsOut' => {'id'=>true},
|
89
|
+
'templateFilter' => '',
|
151
90
|
|
91
|
+
#
|
92
|
+
# Export
|
93
|
+
#
|
94
|
+
'showExport' => true,
|
95
|
+
'exportButtonTitle' => 'Export CSV',
|
152
96
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
97
|
+
#
|
98
|
+
# Group By Box
|
99
|
+
#
|
100
|
+
'groupByItems' => [],
|
101
|
+
'groupBySelected' => false,
|
102
|
+
'groupByLabel' => 'Group By',
|
103
|
+
'groupByClick' => '',
|
104
|
+
'groupByClickDefault' => "ListChangeGrouping('<!--NAME-->', this);",
|
158
105
|
|
159
|
-
#
|
160
|
-
# Column Specific
|
161
|
-
#
|
162
|
-
'columnStyle' => {},
|
163
|
-
'columnClass' => {},
|
164
|
-
'columnPopupTitle' => {},
|
165
|
-
'columnSort' => {},
|
166
|
-
'columnWidth' => {},
|
167
|
-
'columnNoSort' => {},
|
168
|
-
'columnFilter' => {},
|
169
106
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
'borderColumnStyle' => '1px solid #CCCCCC',
|
107
|
+
#
|
108
|
+
# Advanced searching
|
109
|
+
#
|
110
|
+
'listSearchForm' => '',
|
175
111
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
'class' => 'listContainerPassive',
|
187
|
-
'tableclass' => 'tableBlowOutPreventer',
|
188
|
-
'noDataMessage' => 'Currently no data.',
|
189
|
-
'useSort' => true,
|
190
|
-
'headerClass' => {},
|
191
|
-
'groupBy' => '',
|
192
|
-
'fieldFunction' => {},
|
193
|
-
'buttonVal' => 'templateListJump',
|
194
|
-
'linkFunction' => 'ButtonLinkPost',
|
195
|
-
'template' => '',
|
196
|
-
'templateFilter' => '',
|
197
|
-
'pagerFull' => true,
|
198
|
-
'LIST_COL_SORT_ORDER' => 'ASC',
|
199
|
-
'LIST_COL_SORT' => '',
|
200
|
-
'LIST_FILTER_ALL' => '',
|
201
|
-
'ROW_LIMIT' => '',
|
202
|
-
'LIST_SEQUENCE' => 1,
|
203
|
-
'NEW_SEARCH' => false,
|
112
|
+
#
|
113
|
+
# Column Specific
|
114
|
+
#
|
115
|
+
'columnStyle' => {},
|
116
|
+
'columnClass' => {},
|
117
|
+
'columnPopupTitle' => {},
|
118
|
+
'columnSort' => {},
|
119
|
+
'columnWidth' => {},
|
120
|
+
'columnNoSort' => {},
|
204
121
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
122
|
+
#
|
123
|
+
# Column Border (on right)
|
124
|
+
#
|
125
|
+
'borderedColumns' => false,
|
126
|
+
'borderColumnStyle' => '1px solid #CCCCCC',
|
210
127
|
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
128
|
+
#
|
129
|
+
# Row specifics
|
130
|
+
#
|
131
|
+
'rowClass' => '',
|
132
|
+
'rowColorByStatus' => {},
|
133
|
+
'rowStylesByStatus' => {},
|
134
|
+
'rowOffsets' => ['FFFFFF','FFFFFF'],
|
135
|
+
|
136
|
+
'class' => 'listContainerPassive',
|
137
|
+
'tableclass' => 'tableBlowOutPreventer',
|
138
|
+
'noDataMessage' => 'Currently no data.',
|
139
|
+
'useSort' => true,
|
140
|
+
'headerClass' => {},
|
141
|
+
'fieldFunction' => {},
|
142
|
+
'buttonVal' => 'templateListJump',
|
143
|
+
'linkFunction' => 'ButtonLinkPost',
|
144
|
+
'template' => '',
|
145
|
+
'LIST_COL_SORT_ORDER' => 'ASC',
|
146
|
+
'LIST_COL_SORT' => '',
|
147
|
+
'LIST_FILTER_ALL' => '',
|
148
|
+
'ROW_LIMIT' => '',
|
149
|
+
'LIST_SEQUENCE' => 1,
|
150
|
+
'NEW_SEARCH' => false,
|
151
|
+
|
152
|
+
#
|
153
|
+
# Checkbox
|
154
|
+
#
|
155
|
+
'checkedClass' => 'widgetlist-checkbox',
|
156
|
+
'checkedFlag' => {},
|
157
|
+
'storeSessionChecks' => false,
|
158
|
+
|
159
|
+
#
|
160
|
+
# Hooks
|
161
|
+
#
|
162
|
+
'columnHooks' => {},
|
163
|
+
'rowHooks' => {}
|
216
164
|
}
|
217
165
|
|
218
166
|
@csv = []
|
@@ -233,9 +181,10 @@ module WidgetList
|
|
233
181
|
|
234
182
|
#the main template and outer shell
|
235
183
|
@items.deep_merge!({'template' =>
|
236
|
-
|
184
|
+
'
|
237
185
|
<!--WRAP_START-->
|
238
186
|
<!--HEADER-->
|
187
|
+
<!--CUSTOM_CONTENT_TOP-->
|
239
188
|
<div class="<!--CLASS-->" id="<!--NAME-->">
|
240
189
|
<table class="widget_list <!--TABLE_CLASS-->" style="<!--INLINE_STYLE-->" border="0" width="100%" cellpadding="0" cellspacing="0">
|
241
190
|
<!--LIST_TITLE-->
|
@@ -243,7 +192,7 @@ module WidgetList
|
|
243
192
|
<!--DATA-->
|
244
193
|
<tr>
|
245
194
|
<td colspan="<!--COLSPAN_FULL-->" align="left" style="padding:0px;margin:0px;text-align:left">
|
246
|
-
<div style="background-color:#ECECEC;height:50px;"><div style="padding:10px"><!--
|
195
|
+
<div style="background-color:#ECECEC;height:50px;"><div style="padding:10px"><!--CUSTOM_CONTENT_BOTTOM--></div>
|
247
196
|
</td>
|
248
197
|
</tr>
|
249
198
|
</table>
|
@@ -256,69 +205,69 @@ module WidgetList
|
|
256
205
|
})
|
257
206
|
|
258
207
|
@items.deep_merge!({'row' =>
|
259
|
-
|
208
|
+
'
|
260
209
|
<tr style="background-color:<!--BGCOLOR-->;<!--ROWSTYLE-->" class="<!--ROWCLASS-->"><!--CONTENT--></tr>
|
261
210
|
'
|
262
211
|
})
|
263
212
|
|
264
213
|
@items.deep_merge!({'list_description' =>
|
265
|
-
|
214
|
+
'
|
266
215
|
<tr class="summary">
|
267
|
-
<td id="<!--LIST_NAME-->_list_description" class="header" style="text-align: left;padding-bottom: 2px;padding-top: 7px;font-size:
|
216
|
+
<td id="<!--LIST_NAME-->_list_description" class="header" style="text-align: left;padding-bottom: 2px;padding-top: 7px;font-size: 14px;" colspan="<!--COLSPAN-->"><!--LIST_DESCRIPTION--></td>
|
268
217
|
</tr>
|
269
218
|
'
|
270
219
|
})
|
271
220
|
|
272
221
|
@items.deep_merge!({'col' =>
|
273
|
-
|
222
|
+
'
|
274
223
|
<td class="<!--CLASS-->" align="<!--ALIGN-->" title="<!--TITLE-->" onclick="<!--ONCLICK-->" style="<!--STYLE-->"><!--CONTENT--></td>
|
275
224
|
'
|
276
225
|
})
|
277
226
|
|
278
227
|
@items.deep_merge!({'templateSequence' =>
|
279
|
-
|
228
|
+
'
|
280
229
|
<!--LIST_SEQUENCE--> of <!--TOTAL_PAGES-->
|
281
230
|
'
|
282
231
|
})
|
283
232
|
#Sorting
|
284
233
|
#
|
285
234
|
@items.deep_merge!({'templateSortColumn' =>
|
286
|
-
|
287
|
-
<td style="font-weight:bold;<!--INLINE_STYLE--><!--INLINE_STYLE-->" id="<!--COL_HEADER_ID-->" class="<!--COL_HEADER_CLASS-->" valign="middle"><span onclick="<!--FUNCTION-->(\'<!--COLSORTURL-->\',\'<!--NAME-->\')" style="cursor:pointer;background:none;"
|
235
|
+
'
|
236
|
+
<td style="font-weight:bold;<!--INLINE_STYLE--><!--INLINE_STYLE-->" id="<!--COL_HEADER_ID-->" class="<!--COL_HEADER_CLASS-->" title="<!--TITLE_POPUP-->" valign="middle"><span onclick="<!--FUNCTION-->(\'<!--COLSORTURL-->\',\'<!--NAME-->\');<!--FUNCTION_ALL-->" style="cursor:pointer;background:none;"><!--TITLE--><!--COLSORTICON-></span></td>
|
288
237
|
'
|
289
238
|
})
|
290
239
|
|
291
240
|
@items.deep_merge!({'templateNoSortColumn' =>
|
292
|
-
|
241
|
+
'
|
293
242
|
<td style="font-weight:bold;<!--INLINE_STYLE-->" title="<!--TITLE_POPUP-->" id="<!--COL_HEADER_ID-->" class="<!--COL_HEADER_CLASS-->" valign="middle"><span style="background:none;"><!--TITLE--></span></td>
|
294
243
|
'
|
295
244
|
})
|
296
245
|
|
297
246
|
@items.deep_merge!({'statement' =>
|
298
|
-
|
299
|
-
|
300
|
-
|
247
|
+
{'select'=>
|
248
|
+
{'view' =>
|
249
|
+
'
|
301
250
|
SELECT <!--FIELDS--> FROM <!--SOURCE--> <!--WHERE--> <!--GROUPBY--> <!--ORDERBY--> <!--LIMIT-->
|
302
251
|
'
|
303
|
-
|
304
|
-
|
252
|
+
}
|
253
|
+
}
|
305
254
|
})
|
306
255
|
|
307
256
|
@items.deep_merge!({'statement' =>
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
SELECT count(1) total FROM <!--VIEW--> <!--WHERE-->
|
312
|
-
|
313
|
-
|
314
|
-
|
257
|
+
{'count'=>
|
258
|
+
{'view' =>
|
259
|
+
'
|
260
|
+
SELECT count(1) total FROM <!--VIEW--> <!--WHERE--> <!--GROUPBY-->
|
261
|
+
'
|
262
|
+
}
|
263
|
+
}
|
315
264
|
})
|
316
265
|
|
317
266
|
#Pagintion
|
318
267
|
#
|
319
268
|
|
320
269
|
@items.deep_merge!({'template_pagination_wrapper' =>
|
321
|
-
|
270
|
+
'
|
322
271
|
<ul id="pagination" class="page_legacy">
|
323
272
|
Page <!--PREVIOUS_BUTTON-->
|
324
273
|
<input type="text" value="<!--SEQUENCE-->" size="1" style="width:15px;padding:0px;font-size:10px;" onblur="">
|
@@ -330,55 +279,55 @@ module WidgetList
|
|
330
279
|
})
|
331
280
|
|
332
281
|
@items.deep_merge!({'template_pagination_next_active' =>
|
333
|
-
|
334
|
-
<li><span onclick=\"<!--FUNCTION-->('<!--NEXT_URL-->','<!--LIST_NAME-->')
|
282
|
+
"
|
283
|
+
<li><span onclick=\"<!--FUNCTION-->('<!--NEXT_URL-->','<!--LIST_NAME-->');<!--FUNCTION_ALL-->\" style=\"cursor:pointer;background: transparent url(<!--HTTP_SERVER-->images/page-next.gif) no-repeat\"> </span></li>
|
335
284
|
"
|
336
285
|
})
|
337
286
|
|
338
287
|
@items.deep_merge!({'template_pagination_next_disabled' =>
|
339
|
-
|
288
|
+
"
|
340
289
|
<li><span style=\"opacity:0.4;filter:alpha(opacity=40);background: transparent url(<!--HTTP_SERVER-->images/page-next.gif) no-repeat\"> </span></li>
|
341
290
|
"
|
342
291
|
})
|
343
292
|
|
344
293
|
@items.deep_merge!({'template_pagination_previous_active' =>
|
345
|
-
|
346
|
-
<li><span onclick=\"<!--FUNCTION-->('<!--PREVIOUS_URL-->','<!--LIST_NAME-->')
|
294
|
+
"
|
295
|
+
<li><span onclick=\"<!--FUNCTION-->('<!--PREVIOUS_URL-->','<!--LIST_NAME-->');<!--FUNCTION_ALL-->\" style=\"cursor:pointer;background: transparent url(<!--HTTP_SERVER-->images/page-back.gif) no-repeat\"> </span></li>
|
347
296
|
"
|
348
297
|
})
|
349
298
|
|
350
299
|
@items.deep_merge!({'template_pagination_previous_disabled' =>
|
351
|
-
|
300
|
+
"
|
352
301
|
<li><span style=\"opacity:0.4;filter:alpha(opacity=40);background: transparent url(<!--HTTP_SERVER-->images/page-back.gif) no-repeat\"> </span></li>
|
353
302
|
"
|
354
303
|
})
|
355
304
|
|
356
305
|
@items.deep_merge!({'template_pagination_jump_active' =>
|
357
|
-
|
306
|
+
'
|
358
307
|
<li><div class="active"><!--SEQUENCE--></div></li>
|
359
308
|
'
|
360
309
|
})
|
361
310
|
|
362
311
|
@items.deep_merge!({'template_pagination_jump_unactive' =>
|
363
|
-
|
364
|
-
<li onclick="<!--FUNCTION-->(\'<!--JUMP_URL-->\',\'<!--LIST_NAME-->\')"><div><!--SEQUENCE--></div></li>
|
312
|
+
'
|
313
|
+
<li onclick="<!--FUNCTION-->(\'<!--JUMP_URL-->\',\'<!--LIST_NAME-->\');<!--FUNCTION_ALL-->"><div><!--SEQUENCE--></div></li>
|
365
314
|
'
|
366
315
|
})
|
367
316
|
|
368
317
|
@items = WidgetList::Widgets::populate_items(list,@items)
|
369
318
|
|
370
319
|
# current_db is a flag of the last known primary or secondary YML used or defaulted when running a list
|
371
|
-
|
320
|
+
@current_db_selection = @items['database']
|
372
321
|
|
373
|
-
if
|
322
|
+
if get_database.db_type == 'oracle'
|
374
323
|
@items.deep_merge!({'statement' =>
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
SELECT <!--
|
379
|
-
|
380
|
-
|
381
|
-
|
324
|
+
{'select'=>
|
325
|
+
{'view' =>
|
326
|
+
'
|
327
|
+
SELECT <!--FIELDS_PLAIN--> FROM ( SELECT a.*, DENSE_RANK() over (<!--ORDERBY-->) rn FROM ( SELECT ' + ( (!get_view().include?('(')) ? '<!--SOURCE-->' : get_view().strip.split(" ").last ) + '.* FROM <!--SOURCE--> ) a <!--WHERE--> <!--ORDERBY--> ) <!--LIMIT--> ' + ((!@active_record_model) ? '<!--GROUPBY-->' : '') + '
|
328
|
+
'
|
329
|
+
}
|
330
|
+
}
|
382
331
|
})
|
383
332
|
|
384
333
|
end
|
@@ -421,13 +370,13 @@ module WidgetList
|
|
421
370
|
|
422
371
|
clear_sort_get_vars()
|
423
372
|
|
424
|
-
if $_REQUEST.key?('list_action') && $_REQUEST['list_action'] == 'ajax_widgetlist_checks'
|
373
|
+
if $_REQUEST.key?('list_action') && $_REQUEST['list_action'] == 'ajax_widgetlist_checks' && @items['storeSessionChecks']
|
425
374
|
ajax_maintain_checks()
|
426
375
|
end
|
427
376
|
|
428
377
|
end
|
429
378
|
|
430
|
-
@items['groupByClick'] =
|
379
|
+
@items['groupByClick'] = WidgetList::Utils::fill({'<!--NAME-->' => @items['name']}, @items['groupByClickDefault'] + @items['groupByClick'])
|
431
380
|
|
432
381
|
if $_REQUEST.key?('searchClear')
|
433
382
|
clear_search_session()
|
@@ -464,11 +413,17 @@ module WidgetList
|
|
464
413
|
@items['filter'] << filterString
|
465
414
|
end
|
466
415
|
|
467
|
-
fieldsToSearch = @items['fields']
|
416
|
+
fieldsToSearch = @items['fields'].dup
|
468
417
|
|
469
|
-
@items['
|
470
|
-
|
471
|
-
|
418
|
+
if @items['fieldsHidden'].class.name == 'Array'
|
419
|
+
@items['fieldsHidden'].each { |columnPivot|
|
420
|
+
fieldsToSearch[columnPivot] = strip_aliases(columnPivot)
|
421
|
+
}
|
422
|
+
elsif @items['fieldsHidden'].class.name == 'Hash'
|
423
|
+
@items['fieldsHidden'].each { |columnPivot|
|
424
|
+
fieldsToSearch[columnPivot[0]] = strip_aliases(columnPivot[0])
|
425
|
+
}
|
426
|
+
end
|
472
427
|
|
473
428
|
searchCriteria = searchFilter.strip_or_self()
|
474
429
|
searchSQL = []
|
@@ -545,10 +500,15 @@ module WidgetList
|
|
545
500
|
|
546
501
|
fieldsToSearch.each { |fieldName,fieldTitle|
|
547
502
|
|
503
|
+
fieldName = strip_aliases(fieldName)
|
548
504
|
# new lodgette. if fieldFunction exists, find all matches and skip them
|
549
505
|
|
550
506
|
if @items['fieldFunction'].key?(fieldName)
|
551
|
-
|
507
|
+
if get_database.db_type == 'oracle'
|
508
|
+
theField = fieldName
|
509
|
+
else
|
510
|
+
theField = @items['fieldFunction'][fieldName] + cast_col()
|
511
|
+
end
|
552
512
|
else
|
553
513
|
theField = tick_field() + "#{fieldName}" + cast_col() + tick_field()
|
554
514
|
end
|
@@ -607,7 +567,7 @@ module WidgetList
|
|
607
567
|
|
608
568
|
if ! $_REQUEST.key?('BUTTON_VALUE') && !@items['title'].empty?
|
609
569
|
@items['templateHeader'] = '
|
610
|
-
<h1><!--TITLE--></h1><div class="horizontal_rule"></div>
|
570
|
+
<h1 style="font-size:24px;"><!--TITLE--></h1><div class="horizontal_rule"></div>
|
611
571
|
<!--FILTER_HEADER-->
|
612
572
|
'
|
613
573
|
elsif !$_REQUEST.key?('BUTTON_VALUE')
|
@@ -674,7 +634,7 @@ module WidgetList
|
|
674
634
|
end
|
675
635
|
|
676
636
|
def tick_field()
|
677
|
-
case
|
637
|
+
case get_database.db_type
|
678
638
|
when 'postgres'
|
679
639
|
when 'oracle'
|
680
640
|
''
|
@@ -684,7 +644,7 @@ module WidgetList
|
|
684
644
|
end
|
685
645
|
|
686
646
|
def cast_col()
|
687
|
-
case
|
647
|
+
case get_database.db_type
|
688
648
|
when 'postgres'
|
689
649
|
'::char(1000)'
|
690
650
|
else
|
@@ -694,12 +654,17 @@ module WidgetList
|
|
694
654
|
|
695
655
|
def ajax_maintain_checks()
|
696
656
|
|
657
|
+
if !$_SESSION.key?('list_checks')
|
658
|
+
$_SESSION['list_checks'] = {}
|
659
|
+
end
|
660
|
+
|
697
661
|
#
|
698
662
|
# A list must be provided
|
699
663
|
#
|
700
664
|
if $_REQUEST.key?('LIST_NAME')
|
701
|
-
listName
|
702
|
-
sqlHash
|
665
|
+
listName = $_REQUEST['LIST_NAME']
|
666
|
+
sqlHash = $_REQUEST['SQL_HASH']
|
667
|
+
sequence = $_REQUEST['LIST_SEQUENCE'].to_s
|
703
668
|
|
704
669
|
#
|
705
670
|
# The placeholder is created when the list initially forms. This validates it and makes it so
|
@@ -729,18 +694,18 @@ module WidgetList
|
|
729
694
|
#
|
730
695
|
# Check All
|
731
696
|
#
|
732
|
-
if $_REQUEST.key?('checked_all')
|
697
|
+
if $_REQUEST.key?('checked_all') && $_REQUEST['checked_all'] == '1'
|
733
698
|
if $_SESSION.key?('list_checks')
|
734
699
|
|
735
|
-
if $_SESSION['list_checks'].key?('check_all_' + sqlHash +
|
700
|
+
if $_SESSION['list_checks'].key?('check_all_' + sqlHash + listName + sequence)
|
736
701
|
if $_REQUEST['checked_all'].empty?
|
737
|
-
$_SESSION['list_checks'].delete('check_all_' + sqlHash +
|
702
|
+
$_SESSION['list_checks'].delete('check_all_' + sqlHash + listName + sequence)
|
738
703
|
else
|
739
|
-
$_SESSION.deep_merge!({'list_checks' => { 'check_all_' + sqlHash +
|
704
|
+
$_SESSION.deep_merge!({'list_checks' => { 'check_all_' + sqlHash + listName + sequence => true } })
|
740
705
|
end
|
741
706
|
else
|
742
707
|
if ! $_REQUEST['checked_all'].empty?
|
743
|
-
$_SESSION.deep_merge!({'list_checks' => { 'check_all_' + sqlHash +
|
708
|
+
$_SESSION.deep_merge!({'list_checks' => { 'check_all_' + sqlHash + listName + $_REQUEST['LIST_SEQUENCE'] => true } })
|
744
709
|
end
|
745
710
|
end
|
746
711
|
end
|
@@ -758,6 +723,12 @@ module WidgetList
|
|
758
723
|
$_SESSION.delete('DRILL_DOWNS')
|
759
724
|
end
|
760
725
|
|
726
|
+
$_SESSION['list_checks'].keys.each { |key|
|
727
|
+
if key.include?(name)
|
728
|
+
$_SESSION['list_checks'].delete(key)
|
729
|
+
end
|
730
|
+
} if $_SESSION.key?('list_checks')
|
731
|
+
|
761
732
|
end
|
762
733
|
|
763
734
|
def clear_search_session(all=false)
|
@@ -852,12 +823,14 @@ module WidgetList
|
|
852
823
|
|
853
824
|
if @sequence.to_i > 1 && ! @items['NEW_SEARCH']
|
854
825
|
subtractLimit = 0
|
855
|
-
if
|
826
|
+
if get_database.db_type != 'oracle'
|
856
827
|
subtractLimit = @items['rowLimit']
|
857
828
|
end
|
858
829
|
@items['bindVarsLegacy']['LOW'] = (((@sequence * @items['rowLimit']) - subtractLimit))
|
859
|
-
if
|
830
|
+
if get_database.db_type == 'oracle'
|
860
831
|
@items['bindVarsLegacy']['HIGH'] = ((((@sequence + 1) * @items['rowLimit'])))
|
832
|
+
@items['bindVarsLegacy']['LOW'] = @items['bindVarsLegacy']['LOW'] - @items['rowLimit']
|
833
|
+
@items['bindVarsLegacy']['HIGH'] = @items['bindVarsLegacy']['HIGH'] - @items['rowLimit']
|
861
834
|
end
|
862
835
|
|
863
836
|
end
|
@@ -909,44 +882,39 @@ module WidgetList
|
|
909
882
|
listJumpUrl['LIST_NAME'] = @items['name']
|
910
883
|
listJumpUrl['SQL_HASH'] = @sqlHash
|
911
884
|
|
912
|
-
if @items.key?('ajax_action')
|
913
|
-
listJumpUrl['list_action'] = @items['ajax_action']
|
914
|
-
end
|
915
|
-
|
916
885
|
if $_REQUEST.key?('switch_grouping')
|
917
886
|
listJumpUrl['switch_grouping'] = $_REQUEST['switch_grouping']
|
918
887
|
end
|
919
888
|
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
@templateFill['<!--
|
924
|
-
@templateFill['<!--WRAP_END-->'] = ''
|
889
|
+
@templateFill['<!--CUSTOM_CONTENT_BOTTOM-->']= @items['customFooter']
|
890
|
+
@templateFill['<!--CUSTOM_CONTENT_TOP-->'] = @items['customHeader']
|
891
|
+
@templateFill['<!--WRAP_START-->'] = ''
|
892
|
+
@templateFill['<!--WRAP_END-->'] = ''
|
925
893
|
if !$_REQUEST.key?('BUTTON_VALUE')
|
926
|
-
@templateFill['<!--WRAP_START-->']
|
894
|
+
@templateFill['<!--WRAP_START-->'] = '<div class="widget_list_outer">
|
927
895
|
<input type="hidden" id="<!--NAME-->_jump_url_original" value="<!--JUMP_URL-->"/>'
|
928
|
-
@templateFill['<!--WRAP_END-->']
|
896
|
+
@templateFill['<!--WRAP_END-->'] = '</div>'
|
929
897
|
end
|
930
898
|
|
931
|
-
@templateFill['<!--HEADER-->']
|
932
|
-
@templateFill['<!--TITLE-->']
|
933
|
-
@templateFill['<!--NAME-->']
|
934
|
-
@templateFill['<!--JUMP_URL-->']
|
935
|
-
@templateFill['<!--JUMP_URL_NAME-->']
|
936
|
-
@templateFill['<!--CLASS-->']
|
899
|
+
@templateFill['<!--HEADER-->'] = @items['templateHeader']
|
900
|
+
@templateFill['<!--TITLE-->'] = @items['title']
|
901
|
+
@templateFill['<!--NAME-->'] = @items['name']
|
902
|
+
@templateFill['<!--JUMP_URL-->'] = WidgetList::Utils::build_url(@items['pageId'],listJumpUrl,(!$_REQUEST.key?('BUTTON_VALUE')))
|
903
|
+
@templateFill['<!--JUMP_URL_NAME-->'] = @items['name'] + '_jump_url'
|
904
|
+
@templateFill['<!--CLASS-->'] = @items['class']
|
937
905
|
|
938
906
|
if @totalRowCount > 0
|
939
|
-
@templateFill['<!--INLINE_STYLE-->']
|
940
|
-
@templateFill['<!--TABLE_CLASS-->']
|
907
|
+
@templateFill['<!--INLINE_STYLE-->'] = ''
|
908
|
+
@templateFill['<!--TABLE_CLASS-->'] = @items['tableclass']
|
941
909
|
else
|
942
|
-
@templateFill['<!--INLINE_STYLE-->']
|
910
|
+
@templateFill['<!--INLINE_STYLE-->'] = 'table-layout:auto;'
|
943
911
|
end
|
944
912
|
|
945
913
|
#Filter form
|
946
914
|
#
|
947
915
|
if @items['showSearch'] === true
|
948
916
|
if ! @items['templateFilter'].empty?
|
949
|
-
@templateFill['<!--FILTER_HEADER-->']
|
917
|
+
@templateFill['<!--FILTER_HEADER-->'] = @items['templateFilter']
|
950
918
|
else
|
951
919
|
if !$_REQUEST.key?('search_filter') && !@isJumpingList
|
952
920
|
|
@@ -966,13 +934,13 @@ module WidgetList
|
|
966
934
|
filterParameters['PAGE_ID'] = @items['pageId']
|
967
935
|
filterParameters['LIST_NAME'] = @items['name']
|
968
936
|
filterParameters['SQL_HASH'] = @sqlHash
|
969
|
-
if @items.key?('ajax_action') && ! @items['ajax_action'].empty?
|
970
|
-
filterParameters['list_action'] = @items['ajax_action']
|
971
|
-
end
|
972
937
|
|
973
|
-
|
974
|
-
|
975
|
-
|
938
|
+
@items['carryOverRequsts'].each { |value|
|
939
|
+
if $_REQUEST.key?(value)
|
940
|
+
filterParameters[value] = $_REQUEST[value]
|
941
|
+
end
|
942
|
+
}
|
943
|
+
|
976
944
|
searchUrl = WidgetList::Utils::build_url(@items['pageId'], filterParameters, (!$_REQUEST.key?('BUTTON_VALUE')))
|
977
945
|
|
978
946
|
list_search = {}
|
@@ -993,17 +961,17 @@ module WidgetList
|
|
993
961
|
list_search['list-search'] = true
|
994
962
|
list_search['width'] = '500'
|
995
963
|
list_search['input_class'] = 'info-input'
|
996
|
-
list_search['title'] =
|
964
|
+
list_search['title'] = @items['searchTitle']
|
997
965
|
list_search['id'] = 'list_search_id_' + @items['name']
|
998
966
|
list_search['name'] = 'list_search_name_' + @items['name']
|
999
967
|
list_search['class'] = 'inputOuter widget-search-outer ' + @items['name'].downcase + '-search'
|
1000
968
|
list_search['search_ahead'] = {
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
969
|
+
'url' => searchUrl,
|
970
|
+
'skip_queue' => false,
|
971
|
+
'target' => @items['name'],
|
972
|
+
'search_form' => @items['listSearchForm'],
|
973
|
+
'onclick' => (! @items['searchOnclick'].empty? && ! @items['listSearchForm'].empty?) ? @items['searchOnclick'] : '',
|
974
|
+
'onkeyup' => (! @items['searchOnkeyup'].empty?) ? @items['searchOnkeyup'] : ''
|
1007
975
|
}
|
1008
976
|
|
1009
977
|
@templateFill['<!--FILTER_HEADER-->'] = WidgetList::Widgets::widget_input(list_search)
|
@@ -1038,21 +1006,23 @@ module WidgetList
|
|
1038
1006
|
className = 'widget-search-results-row-selected'
|
1039
1007
|
end
|
1040
1008
|
|
1009
|
+
num = 1
|
1041
1010
|
@items['groupByItems'].each { |grouping|
|
1042
1011
|
if @items['groupBySelected'] && @items['groupBySelected'] === grouping
|
1043
1012
|
className = 'widget-search-results-row-selected'
|
1044
1013
|
end
|
1045
|
-
groupRows << '<div class="widget-search-results-row ' + className + '" title="' + grouping + '" onmouseover="jQuery(\'.widget-search-results-row\').removeClass(\'widget-search-results-row-selected\')" onclick="SelectBoxSetValue(\'' + grouping + '\',\'' + @items['name'] + '\');' + @items['groupByClick'] + '">' + grouping + '</div>'
|
1014
|
+
groupRows << '<div class="widget-search-results-row ' + className + '" id="' + @items['name'] + '_row_' + num.to_s + '" title="' + grouping + '" onmouseover="jQuery(\'.widget-search-results-row\').removeClass(\'widget-search-results-row-selected\')" onclick="SelectBoxSetValue(\'' + grouping + '\',\'' + @items['name'] + '\');' + @items['groupByClick'] + '">' + grouping + '</div>'
|
1046
1015
|
className = ''
|
1016
|
+
num = num + 1
|
1047
1017
|
}
|
1048
1018
|
|
1049
1019
|
list_group['search_ahead'] = {
|
1050
|
-
|
1051
|
-
|
1020
|
+
'skip_queue' => false,
|
1021
|
+
'search_form'=> '
|
1052
1022
|
<div id="advanced-search-container" style="height:100% !important;">
|
1053
1023
|
' + groupRows.join("\n") + '
|
1054
1024
|
</div>',
|
1055
|
-
|
1025
|
+
'onclick' => @items['searchOnclick']
|
1056
1026
|
}
|
1057
1027
|
if !@templateFill.key?('<!--FILTER_HEADER-->')
|
1058
1028
|
@templateFill['<!--FILTER_HEADER-->'] = ''
|
@@ -1060,7 +1030,7 @@ module WidgetList
|
|
1060
1030
|
@templateFill['<!--FILTER_HEADER-->'] += '<div class="fake-select"><div class="label">' + @items['groupByLabel'] + ':</div> ' + WidgetList::Widgets::widget_input(list_group) + '</div>'
|
1061
1031
|
|
1062
1032
|
if @items['showExport']
|
1063
|
-
@templateFill['<!--FILTER_HEADER-->'] += WidgetList::Widgets::widget_button('
|
1033
|
+
@templateFill['<!--FILTER_HEADER-->'] += WidgetList::Widgets::widget_button(@items['exportButtonTitle'], {'onclick' => 'ListExport(\'' + @items['name'] + '\');'}, true)
|
1064
1034
|
end
|
1065
1035
|
|
1066
1036
|
end
|
@@ -1124,14 +1094,11 @@ module WidgetList
|
|
1124
1094
|
}
|
1125
1095
|
end
|
1126
1096
|
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
urlTags['switch_grouping'] = $_REQUEST['switch_grouping']
|
1133
|
-
end
|
1134
|
-
|
1097
|
+
@items['carryOverRequsts'].each { |value|
|
1098
|
+
if $_REQUEST.key?(value)
|
1099
|
+
urlTags[value] = $_REQUEST[value]
|
1100
|
+
end
|
1101
|
+
}
|
1135
1102
|
if (@sequence == @totalPages || ! (@totalPages > 0))
|
1136
1103
|
showNext = false
|
1137
1104
|
else
|
@@ -1157,11 +1124,12 @@ module WidgetList
|
|
1157
1124
|
#Assemble navigation buttons
|
1158
1125
|
#
|
1159
1126
|
pieces = {
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1127
|
+
'<!--NEXT_URL-->' => nextUrl,
|
1128
|
+
'<!--LIST_NAME-->' => @items['name'],
|
1129
|
+
'<!--HTTP_SERVER-->' => $_SERVER['rack.url_scheme'] + '://' + $_SERVER['HTTP_HOST'] + '/assets/',
|
1130
|
+
'<!--PREVIOUS_URL-->' => prevUrl,
|
1131
|
+
'<!--FUNCTION-->' => @items['ajaxFunction'],
|
1132
|
+
'<!--FUNCTION_ALL-->' => @items['ajaxFunctionAll'],
|
1165
1133
|
}
|
1166
1134
|
|
1167
1135
|
templates['btn_next'] = WidgetList::Utils::fill(pieces,templates['btn_next'])
|
@@ -1175,9 +1143,11 @@ module WidgetList
|
|
1175
1143
|
urlTags['LIST_SEQUENCE'] = @sequence
|
1176
1144
|
urlTags['ROW_LIMIT'] = 10
|
1177
1145
|
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1146
|
+
@items['carryOverRequsts'].each { |value|
|
1147
|
+
if $_REQUEST.key?(value)
|
1148
|
+
urlTags[value] = $_REQUEST[value]
|
1149
|
+
end
|
1150
|
+
}
|
1181
1151
|
|
1182
1152
|
# Automate select box and rules
|
1183
1153
|
#
|
@@ -1204,7 +1174,7 @@ module WidgetList
|
|
1204
1174
|
|
1205
1175
|
# WidgetSelect( todo)
|
1206
1176
|
pageSelect = <<-EOD
|
1207
|
-
<select onchange="#{@items['
|
1177
|
+
<select onchange="#{@items['ajaxFunction']}(this.value,'#{@items['name']}');#{@items['ajaxFunctionAll']}" style="width:58px">
|
1208
1178
|
#{options}
|
1209
1179
|
</select>
|
1210
1180
|
EOD
|
@@ -1261,18 +1231,24 @@ module WidgetList
|
|
1261
1231
|
jumpTemplate = @items['template_pagination_jump_unactive']
|
1262
1232
|
end
|
1263
1233
|
|
1264
|
-
jumpSection << WidgetList::Utils::fill({
|
1234
|
+
jumpSection << WidgetList::Utils::fill({
|
1235
|
+
'<!--SEQUENCE-->' => page,
|
1236
|
+
'<!--JUMP_URL-->' => jumpUrl,
|
1237
|
+
'<!--LIST_NAME-->' => @items['name'],
|
1238
|
+
'<!--FUNCTION-->' => @items['ajaxFunction'],
|
1239
|
+
'<!--FUNCTION_ALL-->' => @items['ajaxFunctionAll'],
|
1240
|
+
}, jumpTemplate)
|
1265
1241
|
end
|
1266
1242
|
|
1267
1243
|
pieces = {
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1244
|
+
'<!--PREVIOUS_BUTTON-->' => templates['btn_previous'],
|
1245
|
+
'<!--SEQUENCE-->' => @sequence,
|
1246
|
+
'<!--NEXT_BUTTON-->' => templates['btn_next'],
|
1247
|
+
'<!--TOTAL_PAGES-->' => @totalPages,
|
1248
|
+
'<!--TOTAL_ROWS-->' => @totalRows,
|
1249
|
+
'<!--PAGE_SEQUENCE_JUMP_LIST-->' => pageSelect,
|
1250
|
+
'<!--JUMP-->' => jumpSection.join(''),
|
1251
|
+
'<!--LIST_NAME-->' => @items['name'],
|
1276
1252
|
}
|
1277
1253
|
|
1278
1254
|
paginationOutput = WidgetList::Utils::fill(pieces,@items['template_pagination_wrapper'])
|
@@ -1389,7 +1365,7 @@ module WidgetList
|
|
1389
1365
|
|
1390
1366
|
if (
|
1391
1367
|
( (@items.key?('LIST_COL_SORT') && !@items['LIST_COL_SORT'].empty?) && @items['LIST_COL_SORT'] == colSort['LIST_COL_SORT']) ||
|
1392
|
-
|
1368
|
+
( $_SESSION.key?('LIST_COL_SORT') && $_SESSION['LIST_COL_SORT'].key?(@sqlHash) && $_SESSION['LIST_COL_SORT'][@sqlHash].key?(field))
|
1393
1369
|
)
|
1394
1370
|
changedSession = false
|
1395
1371
|
if @items.key?('LIST_COL_SORT') && !@items['LIST_COL_SORT'].empty?
|
@@ -1428,13 +1404,12 @@ module WidgetList
|
|
1428
1404
|
end
|
1429
1405
|
end
|
1430
1406
|
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1407
|
+
@items['carryOverRequsts'].each { |value|
|
1408
|
+
if $_REQUEST.key?(value)
|
1409
|
+
colSort[value] = $_REQUEST[value]
|
1410
|
+
end
|
1411
|
+
}
|
1434
1412
|
|
1435
|
-
if @items.key?('ajax_action') && ! @items['ajax_action'].empty?
|
1436
|
-
colSort['list_action'] = @items['ajax_action']
|
1437
|
-
end
|
1438
1413
|
colSort['SQL_HASH'] = @sqlHash
|
1439
1414
|
|
1440
1415
|
pieces = { '<!--COLSORTURL-->' => WidgetList::Utils::build_url(@items['pageId'],colSort,(!$_REQUEST.key?('BUTTON_VALUE'))),
|
@@ -1445,7 +1420,8 @@ module WidgetList
|
|
1445
1420
|
'<!--TITLE_POPUP-->' => popupTitle,
|
1446
1421
|
'<!--COL_HEADER_CLASS-->' => colClass,
|
1447
1422
|
'<!--TITLE-->' => fieldTitle,
|
1448
|
-
'<!--FUNCTION-->' => @items['
|
1423
|
+
'<!--FUNCTION-->' => @items['ajaxFunction'],
|
1424
|
+
'<!--FUNCTION_ALL-->' => @items['ajaxFunctionAll'],
|
1449
1425
|
}
|
1450
1426
|
headers << WidgetList::Utils::fill(pieces, @items[templateIdx])
|
1451
1427
|
else
|
@@ -1463,13 +1439,6 @@ module WidgetList
|
|
1463
1439
|
|
1464
1440
|
@templateFill['<!--COLSPAN_FULL-->'] = headers.count()
|
1465
1441
|
|
1466
|
-
if @items['mode'] != 'passive'
|
1467
|
-
pieces = {'<!--LIST_SEQUENCE-->' => @sequence,
|
1468
|
-
'<!--TOTAL_PAGES-->' => @totalPages}
|
1469
|
-
|
1470
|
-
@templateFill['<!--PAGE_SEQUENCE_DISPLAY-->'] = WidgetList::Utils::fill(pieces, @items['templateSequence'])
|
1471
|
-
end
|
1472
|
-
|
1473
1442
|
@templateFill['<!--PAGINATION_LIST-->'] = build_pagination()
|
1474
1443
|
@templateFill['<!--HEADERS-->'] = headers.join('')
|
1475
1444
|
|
@@ -1566,9 +1535,9 @@ module WidgetList
|
|
1566
1535
|
#
|
1567
1536
|
# Checkbox is checked or not per query value
|
1568
1537
|
#
|
1569
|
-
if ! @items['
|
1570
|
-
if @items['
|
1571
|
-
input['checked'] = !!@results[ @items['
|
1538
|
+
if ! @items['checkedFlag'].empty?
|
1539
|
+
if @items['checkedFlag'].key?(column)
|
1540
|
+
input['checked'] = !!@results[ @items['checkedFlag'][column].upcase ][row]
|
1572
1541
|
end
|
1573
1542
|
end
|
1574
1543
|
|
@@ -1596,24 +1565,118 @@ module WidgetList
|
|
1596
1565
|
return content
|
1597
1566
|
end
|
1598
1567
|
|
1568
|
+
# build_list controls a default AJAX/Export and full HTML return output
|
1569
|
+
# in some cases you should copy and paste this logic for custom scenarios in your controller, but in most cases, this is okay
|
1570
|
+
|
1571
|
+
def self.build_list(list_parms)
|
1572
|
+
|
1573
|
+
list = WidgetList::List.new(list_parms)
|
1574
|
+
|
1575
|
+
#
|
1576
|
+
# If AJAX, send back JSON
|
1577
|
+
#
|
1578
|
+
if $_REQUEST.key?('BUTTON_VALUE') && $_REQUEST['LIST_NAME'] == list_parms['name']
|
1579
|
+
|
1580
|
+
if $_REQUEST.key?('export_widget_list')
|
1581
|
+
return ['export',list.render()]
|
1582
|
+
end
|
1583
|
+
|
1584
|
+
ret = {}
|
1585
|
+
|
1586
|
+
if $_REQUEST['list_action'] != 'ajax_widgetlist_checks'
|
1587
|
+
ret['list'] = list.render()
|
1588
|
+
ret['list_id'] = list_parms['name']
|
1589
|
+
ret['callback'] = 'ListSearchAheadResponse'
|
1590
|
+
end
|
1591
|
+
|
1592
|
+
return ['json',WidgetList::Utils::json_encode(ret)]
|
1593
|
+
else
|
1594
|
+
#
|
1595
|
+
# Else assign to variable for view
|
1596
|
+
#
|
1597
|
+
return ['html', list.render() ]
|
1598
|
+
end
|
1599
|
+
|
1600
|
+
end
|
1601
|
+
|
1602
|
+
# checkbox_helper just builds the proper Hashes to setup a checkbox widget row
|
1603
|
+
# it assumes you have a fake column called '' AS checkbox to fill in with the widget_check
|
1604
|
+
|
1605
|
+
def self.checkbox_helper(list_parms,primary_key)
|
1606
|
+
|
1607
|
+
list_parms.deep_merge!({'inputs' =>
|
1608
|
+
{'checkbox'=>
|
1609
|
+
{'type' => 'checkbox'
|
1610
|
+
}
|
1611
|
+
}
|
1612
|
+
})
|
1613
|
+
|
1614
|
+
list_parms.deep_merge!({'inputs' =>
|
1615
|
+
{'checkbox'=>
|
1616
|
+
{'items' =>
|
1617
|
+
{
|
1618
|
+
'name' => list_parms['name'] + '_visible_checks[]',
|
1619
|
+
'value' => primary_key, #the value should be a column name mapping
|
1620
|
+
'class_handle' => list_parms['name'] + '_info_tables',
|
1621
|
+
}
|
1622
|
+
}
|
1623
|
+
}
|
1624
|
+
})
|
1625
|
+
|
1626
|
+
list_parms.deep_merge!({'inputs' =>
|
1627
|
+
{'checkbox_header'=>
|
1628
|
+
{'type' => 'checkbox'
|
1629
|
+
}
|
1630
|
+
}
|
1631
|
+
})
|
1632
|
+
|
1633
|
+
list_parms.deep_merge!({'inputs' =>
|
1634
|
+
{'checkbox_header'=>
|
1635
|
+
{'items' =>
|
1636
|
+
{
|
1637
|
+
'check_all' => true,
|
1638
|
+
'id' => list_parms['name'] + '_info_tables_check_all',
|
1639
|
+
'class_handle' => list_parms['name'] + '_info_tables',
|
1640
|
+
}
|
1641
|
+
}
|
1642
|
+
}
|
1643
|
+
})
|
1644
|
+
return list_parms
|
1645
|
+
end
|
1646
|
+
|
1599
1647
|
def self.drill_down_back(list_name='')
|
1600
1648
|
'<div class="goback" onclick="ListHome(\'' + list_name + '\');" title="Go Back"></div>'
|
1601
1649
|
end
|
1602
1650
|
|
1603
|
-
def self.build_drill_down_link(listId,drillDownName,dataToPassFromView,columnToShow,columnAlias='',functionName='ListDrillDown',columnClass='',color='blue')
|
1651
|
+
def self.build_drill_down_link(listId,drillDownName,dataToPassFromView,columnToShow,columnAlias='',extraFunction='',functionName='ListDrillDown',columnClass='',color='blue',extraJSFunctionParams='',primary=true)
|
1604
1652
|
if columnAlias.empty?
|
1605
1653
|
columnAlias = columnToShow
|
1606
1654
|
end
|
1607
1655
|
|
1608
1656
|
if !columnClass.empty?
|
1609
|
-
columnClass = ' "' + WidgetList::List::concat_string() + columnClass + WidgetList::List::concat_string() + '"'
|
1657
|
+
columnClass = ' "' + WidgetList::List::concat_string(primary) + columnClass + WidgetList::List::concat_string(primary) + '"'
|
1658
|
+
end
|
1659
|
+
|
1660
|
+
if WidgetList::List.get_db_type(primary) == 'oracle'
|
1661
|
+
if $_REQUEST.key?('export_widget_list')
|
1662
|
+
link = "#{columnToShow} #{WidgetList::List::is_sequel(primary) ? " as #{columnAlias} " : ""}"
|
1663
|
+
else
|
1664
|
+
link = %[q'[<a style='cursor:pointer;color:#{color};' class='#{columnAlias}_drill#{columnClass}' onclick='#{functionName}("#{drillDownName}", ListDrillDownGetRowValue(this) ,"#{listId}"#{extraJSFunctionParams});#{extraFunction}'>]' #{WidgetList::List::concat_string(primary)}#{columnToShow}#{WidgetList::List::concat_string(primary)}q'[</a><script class='val-db' type='text'>]' #{WidgetList::List::concat_string(primary)} #{dataToPassFromView} #{WidgetList::List::concat_string(primary)} q'[</script>]' #{WidgetList::List::concat_outer(primary)} #{WidgetList::List::is_sequel(primary) ? " as #{columnAlias} " : ""}]
|
1665
|
+
end
|
1666
|
+
else
|
1667
|
+
if $_REQUEST.key?('export_widget_list')
|
1668
|
+
link = "#{columnToShow} #{WidgetList::List::is_sequel(primary) ? " as #{columnAlias} " : ""}"
|
1669
|
+
else
|
1670
|
+
link = %[#{WidgetList::List::concat_inner(primary)}"<a style='cursor:pointer;color:#{color};' class='#{columnAlias}_drill#{columnClass}' onclick='#{functionName}(#{WidgetList::List::double_quote(primary)}#{drillDownName}#{WidgetList::List::double_quote(primary)}, ListDrillDownGetRowValue(this) ,#{WidgetList::List::double_quote(primary)}#{listId}#{WidgetList::List::double_quote(primary)}#{extraJSFunctionParams});#{extraFunction}'>"#{WidgetList::List::concat_string(primary)}#{columnToShow}#{WidgetList::List::concat_string(primary)}"</a><script class='val-db' type='text'>"#{WidgetList::List::concat_string(primary)} #{dataToPassFromView} #{WidgetList::List::concat_string(primary)}"</script>"#{WidgetList::List::concat_outer(primary)} #{WidgetList::List::is_sequel(primary) ? " as #{columnAlias} " : ""}]
|
1671
|
+
end
|
1610
1672
|
end
|
1611
1673
|
|
1612
|
-
|
1674
|
+
|
1613
1675
|
end
|
1614
1676
|
|
1615
|
-
def self.concat_string
|
1616
|
-
|
1677
|
+
def self.concat_string(primary)
|
1678
|
+
|
1679
|
+
case WidgetList::List.get_db_type(primary)
|
1617
1680
|
when 'mysql'
|
1618
1681
|
' , '
|
1619
1682
|
when 'oracle','sqlite'
|
@@ -1623,8 +1686,8 @@ module WidgetList
|
|
1623
1686
|
end
|
1624
1687
|
end
|
1625
1688
|
|
1626
|
-
def self.double_quote
|
1627
|
-
case WidgetList::List.
|
1689
|
+
def self.double_quote(primary)
|
1690
|
+
case WidgetList::List.get_db_type(primary)
|
1628
1691
|
when 'mysql'
|
1629
1692
|
'\\"'
|
1630
1693
|
when 'oracle','sqlite'
|
@@ -1634,8 +1697,8 @@ module WidgetList
|
|
1634
1697
|
end
|
1635
1698
|
end
|
1636
1699
|
|
1637
|
-
def self.concat_outer
|
1638
|
-
case WidgetList::List.
|
1700
|
+
def self.concat_outer(primary)
|
1701
|
+
case WidgetList::List.get_db_type(primary)
|
1639
1702
|
when 'mysql'
|
1640
1703
|
')'
|
1641
1704
|
else
|
@@ -1643,8 +1706,8 @@ module WidgetList
|
|
1643
1706
|
end
|
1644
1707
|
end
|
1645
1708
|
|
1646
|
-
def self.concat_inner
|
1647
|
-
case WidgetList::List.
|
1709
|
+
def self.concat_inner(primary)
|
1710
|
+
case WidgetList::List.get_db_type(primary)
|
1648
1711
|
when 'mysql'
|
1649
1712
|
'CONCAT('
|
1650
1713
|
else
|
@@ -1673,15 +1736,15 @@ module WidgetList
|
|
1673
1736
|
if @results.key?(tag.upcase) && @results[tag.upcase][j]
|
1674
1737
|
|
1675
1738
|
buttonAttribs.deep_merge!({'args' =>
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1739
|
+
{
|
1740
|
+
tagName => @results[tag.upcase][j]
|
1741
|
+
}
|
1679
1742
|
})
|
1680
1743
|
else
|
1681
1744
|
buttonAttribs.deep_merge!({'args' =>
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1745
|
+
{
|
1746
|
+
tagName => tag
|
1747
|
+
}
|
1685
1748
|
})
|
1686
1749
|
end
|
1687
1750
|
}
|
@@ -1722,18 +1785,6 @@ module WidgetList
|
|
1722
1785
|
function = @items['linkFunction']
|
1723
1786
|
parameters = ''
|
1724
1787
|
|
1725
|
-
if links.key?('PAGE_ID') && ! links['PAGE_ID'].empty?
|
1726
|
-
url['PAGE_ID'] = links['PAGE_ID']
|
1727
|
-
end
|
1728
|
-
|
1729
|
-
if links.key?('ACTION') && ! links['ACTION'].empty?
|
1730
|
-
url['list_action'] = links['ACTION']
|
1731
|
-
end
|
1732
|
-
|
1733
|
-
if links.key?('BUTTON_VALUE') && ! links['BUTTON_VALUE'].empty?
|
1734
|
-
url['BUTTON_VALUE'] = links['BUTTON_VALUE']
|
1735
|
-
end
|
1736
|
-
|
1737
1788
|
#todo unit test this and all of column links
|
1738
1789
|
if links.key?('tags')
|
1739
1790
|
links['tags'].each { | tagName, tag |
|
@@ -1759,12 +1810,8 @@ module WidgetList
|
|
1759
1810
|
end
|
1760
1811
|
end
|
1761
1812
|
|
1762
|
-
if @items.key?('ajax_action') && !@items['ajax_action'].empty?
|
1763
|
-
url['list_action'] = @items['ajax_action']
|
1764
|
-
end
|
1765
|
-
|
1766
1813
|
url['SQL_HASH'] = @sqlHash
|
1767
|
-
linkUrl = WidgetList::Utils::build_url(@items['pageId'],(!$_REQUEST.key?('BUTTON_VALUE')))
|
1814
|
+
linkUrl = WidgetList::Utils::build_url(@items['pageId'], url, (!$_REQUEST.key?('BUTTON_VALUE')))
|
1768
1815
|
|
1769
1816
|
"#{function}('#{linkUrl}'#{parameters})"
|
1770
1817
|
end
|
@@ -1775,12 +1822,12 @@ module WidgetList
|
|
1775
1822
|
if @items['data'].empty?
|
1776
1823
|
#Run the actual statement
|
1777
1824
|
#
|
1778
|
-
@totalRowCount =
|
1825
|
+
@totalRowCount = get_database._select(sql , @items['bindVars'], @items['bindVarsLegacy'], @active_record_model)
|
1779
1826
|
end
|
1780
1827
|
|
1781
1828
|
if @totalRowCount > 0
|
1782
1829
|
if @items['data'].empty?
|
1783
|
-
@results =
|
1830
|
+
@results = get_database.final_results
|
1784
1831
|
else
|
1785
1832
|
@results = @items['data']
|
1786
1833
|
end
|
@@ -1801,6 +1848,8 @@ module WidgetList
|
|
1801
1848
|
#
|
1802
1849
|
|
1803
1850
|
@items['fields'].each { |column , fieldTitle|
|
1851
|
+
column = strip_aliases(column)
|
1852
|
+
|
1804
1853
|
colPieces = {}
|
1805
1854
|
colClasses = []
|
1806
1855
|
theStyle = ''
|
@@ -1833,7 +1882,7 @@ module WidgetList
|
|
1833
1882
|
# Column is an input
|
1834
1883
|
#
|
1835
1884
|
elsif @items['inputs'].key?(column) && @items['inputs'][column].class.name == 'Hash'
|
1836
|
-
colClasses << @items['
|
1885
|
+
colClasses << @items['checkedClass']
|
1837
1886
|
content = build_column_input(column, j)
|
1838
1887
|
|
1839
1888
|
|
@@ -1861,7 +1910,7 @@ module WidgetList
|
|
1861
1910
|
content = strip_tags(content)
|
1862
1911
|
end
|
1863
1912
|
|
1864
|
-
content =
|
1913
|
+
content = get_database._bind(content, @items['bindVarsLegacy'])
|
1865
1914
|
|
1866
1915
|
# Column color
|
1867
1916
|
#
|
@@ -1958,14 +2007,11 @@ module WidgetList
|
|
1958
2007
|
if @items['rowColorByStatus'].empty? && @items['rowStylesByStatus'].empty?
|
1959
2008
|
#Set the row color
|
1960
2009
|
#
|
1961
|
-
rowColor = @items['rowColor']
|
1962
2010
|
|
1963
|
-
if
|
1964
|
-
|
1965
|
-
|
1966
|
-
|
1967
|
-
rowColor = @items['rowOffsets'][0]
|
1968
|
-
end
|
2011
|
+
if( j % 2 ==0)
|
2012
|
+
rowColor = @items['rowOffsets'][1]
|
2013
|
+
else
|
2014
|
+
rowColor = @items['rowOffsets'][0]
|
1969
2015
|
end
|
1970
2016
|
|
1971
2017
|
#Draw default color
|
@@ -1986,7 +2032,7 @@ module WidgetList
|
|
1986
2032
|
|
1987
2033
|
else
|
1988
2034
|
|
1989
|
-
err_message = (
|
2035
|
+
err_message = (get_database.errors) ? @items['noDataMessage'] + ' <span style="color:red">(An error occurred)</span>' : @items['noDataMessage']
|
1990
2036
|
|
1991
2037
|
@templateFill['<!--DATA-->'] = '<tr><td colspan="50"><div id="noListResults">' + generate_error_output() + err_message + '</div></td></tr>'
|
1992
2038
|
|
@@ -1994,7 +2040,7 @@ module WidgetList
|
|
1994
2040
|
|
1995
2041
|
else
|
1996
2042
|
|
1997
|
-
err_message = (
|
2043
|
+
err_message = (get_database.errors) ? @items['noDataMessage'] + ' <span style="color:red">(An error occurred)</span>' : @items['noDataMessage']
|
1998
2044
|
|
1999
2045
|
@templateFill['<!--DATA-->'] = '<tr><td colspan="50"><div id="noListResults">' + generate_error_output() + err_message + '</div></td></tr>'
|
2000
2046
|
end
|
@@ -2003,50 +2049,91 @@ module WidgetList
|
|
2003
2049
|
|
2004
2050
|
def generate_error_output(ex='')
|
2005
2051
|
sqlDebug = ""
|
2052
|
+
|
2053
|
+
if !@items['errors'].empty?
|
2054
|
+
sqlDebug += "<br/><br/><strong style='color:red'>(" + @items['errors'].join(', ') + ")</strong>"
|
2055
|
+
end
|
2056
|
+
|
2006
2057
|
if Rails.env == 'development'
|
2007
|
-
sqlDebug += "<br/><br/><textarea style='width:100%;height:400px;'>" +
|
2058
|
+
sqlDebug += "<br/><br/><textarea style='width:100%;height:400px;'>" + get_database.last_sql.to_s + "</textarea>"
|
2008
2059
|
end
|
2009
2060
|
|
2010
|
-
if Rails.env == 'development' &&
|
2011
|
-
sqlDebug += "<br/><br/><strong style='color:red'>(" +
|
2061
|
+
if Rails.env == 'development' && get_database.errors
|
2062
|
+
sqlDebug += "<br/><br/><strong style='color:red'>(" + get_database.last_error.to_s + ")</strong>"
|
2012
2063
|
end
|
2013
2064
|
|
2014
2065
|
if Rails.env == 'development' && ex != ''
|
2015
2066
|
sqlDebug += "<br/><br/><strong style='color:red'>(" + ex.to_s + ") <pre>" + $!.backtrace.join("\n\n") + "</pre></strong>"
|
2016
2067
|
end
|
2068
|
+
Rails.logger.info sqlDebug
|
2017
2069
|
|
2018
2070
|
sqlDebug
|
2019
2071
|
end
|
2020
2072
|
|
2021
2073
|
def build_statement()
|
2022
|
-
statement
|
2023
|
-
|
2024
|
-
|
2025
|
-
|
2026
|
-
'<!--
|
2027
|
-
'<!--
|
2028
|
-
'<!--
|
2074
|
+
statement = ''
|
2075
|
+
@fieldList = []
|
2076
|
+
@fieldListPlain = []
|
2077
|
+
pieces = { '<!--FIELDS_PLAIN-->' => '',
|
2078
|
+
'<!--FIELDS-->' => '',
|
2079
|
+
'<!--SOURCE-->' => '',
|
2080
|
+
'<!--WHERE-->' => '',
|
2081
|
+
'<!--GROUPBY-->' => '',
|
2082
|
+
'<!--ORDERBY-->' => '',
|
2083
|
+
'<!--LIMIT-->' => ''}
|
2029
2084
|
|
2030
2085
|
#Build out a list of columns to select from
|
2031
2086
|
#
|
2087
|
+
|
2032
2088
|
@items['fields'].each { |column, fieldTitle|
|
2089
|
+
@fieldListPlain << strip_aliases(column)
|
2033
2090
|
if @items['fieldFunction'].key?(column) && !@items['fieldFunction'][column].empty?
|
2034
2091
|
# fieldFunction's should not have an alias, just the database functions
|
2035
2092
|
column = @items['fieldFunction'][column] + " " + column
|
2036
2093
|
end
|
2037
|
-
|
2038
2094
|
@fieldList << column
|
2039
2095
|
}
|
2040
2096
|
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2045
|
-
|
2097
|
+
|
2098
|
+
if get_database.db_type == 'oracle'
|
2099
|
+
if !@items['groupBy'].empty?
|
2100
|
+
@fieldList << 'MAX(rn) as rn'
|
2101
|
+
else
|
2102
|
+
@fieldList << 'rn'
|
2103
|
+
end
|
2104
|
+
@fieldListPlain << 'rn'
|
2105
|
+
end
|
2106
|
+
|
2107
|
+
if @items['fieldsHidden'].class.name == 'Array'
|
2108
|
+
@items['fieldsHidden'].each { |column|
|
2109
|
+
if !@items['fields'].key?(column)
|
2110
|
+
@fieldListPlain << strip_aliases(column)
|
2111
|
+
if @items['fieldFunction'].key?(column) && !@items['fieldFunction'][column].empty?
|
2112
|
+
# fieldFunction's should not have an alias, just the database functions
|
2113
|
+
column = @items['fieldFunction'][column] + " " + column
|
2114
|
+
end
|
2115
|
+
@fieldList << column
|
2116
|
+
end
|
2117
|
+
}
|
2118
|
+
elsif @items['fieldsHidden'].class.name == 'Hash'
|
2119
|
+
@items['fieldsHidden'].each { |column|
|
2120
|
+
col = column[0]
|
2121
|
+
if !@items['fields'].key?(col)
|
2122
|
+
@fieldListPlain << strip_aliases(col)
|
2123
|
+
if @items['fieldFunction'].key?(column[0]) && !@items['fieldFunction'][column[0]].empty?
|
2124
|
+
# fieldFunction's should not have an alias, just the database functions
|
2125
|
+
col = @items['fieldFunction'][column[0]] + " " + column[0]
|
2126
|
+
end
|
2127
|
+
@fieldList << col
|
2128
|
+
end
|
2129
|
+
}
|
2130
|
+
end
|
2131
|
+
|
2046
2132
|
|
2047
2133
|
viewPieces = {}
|
2134
|
+
viewPieces['<!--FIELDS_PLAIN-->'] = @fieldListPlain.join(',')
|
2048
2135
|
viewPieces['<!--FIELDS-->'] = @fieldList.join(',')
|
2049
|
-
viewPieces['<!--SOURCE-->'] =
|
2136
|
+
viewPieces['<!--SOURCE-->'] = get_view()
|
2050
2137
|
|
2051
2138
|
statement = WidgetList::Utils::fill(viewPieces, @items['statement']['select']['view'])
|
2052
2139
|
|
@@ -2066,7 +2153,9 @@ module WidgetList
|
|
2066
2153
|
end
|
2067
2154
|
|
2068
2155
|
if !@items['groupBy'].empty?
|
2069
|
-
pieces['<!--GROUPBY-->']
|
2156
|
+
pieces['<!--GROUPBY-->'] = ' GROUP BY ' + @items['groupBy']
|
2157
|
+
else
|
2158
|
+
pieces['<!--GROUPBY-->'] = ''
|
2070
2159
|
end
|
2071
2160
|
|
2072
2161
|
if !@items['LIST_COL_SORT'].empty? || ($_SESSION.key?('LIST_COL_SORT') && $_SESSION['LIST_COL_SORT'].class.name == 'Hash' && $_SESSION['LIST_COL_SORT'].key?(@sqlHash))
|
@@ -2091,28 +2180,34 @@ module WidgetList
|
|
2091
2180
|
pieces['<!--ORDERBY-->'] += ' ORDER BY ' + @items['orderBy']
|
2092
2181
|
end
|
2093
2182
|
|
2094
|
-
if
|
2095
|
-
|
2096
|
-
|
2183
|
+
if get_database.db_type == 'oracle' && pieces['<!--ORDERBY-->'].empty?
|
2184
|
+
#oracle needs a field to perform the rank() over
|
2185
|
+
#if field is not an "inputs" or a "buttons"
|
2186
|
+
#if field is all NULL, then you better watch out as paging will NOT work
|
2187
|
+
tmp = @items['fields'].dup.reject { |val|
|
2188
|
+
if (!@items['inputs'].key?(val) && !@items['buttons'].key?(val))
|
2189
|
+
false
|
2190
|
+
else
|
2191
|
+
true
|
2192
|
+
end
|
2193
|
+
}
|
2194
|
+
|
2195
|
+
keys = tmp.keys
|
2196
|
+
pieces['<!--ORDERBY-->'] += ' ORDER BY ' + keys[0] + ' ASC'
|
2097
2197
|
end
|
2098
2198
|
|
2099
|
-
case
|
2199
|
+
case get_database.db_type
|
2100
2200
|
when 'postgres'
|
2101
2201
|
pieces['<!--LIMIT-->'] = ' LIMIT :HIGH OFFSET :LOW'
|
2102
2202
|
when 'oracle'
|
2103
|
-
pieces['<!--LIMIT-->'] = ''
|
2104
2203
|
|
2105
|
-
|
2106
|
-
|
2107
|
-
|
2108
|
-
and_where = ' WHERE '
|
2109
|
-
end
|
2110
|
-
pieces['<!--WHERE-->'] += and_where +
|
2111
|
-
'
|
2204
|
+
pieces['<!--LIMIT-->'] =
|
2205
|
+
'
|
2206
|
+
WHERE
|
2112
2207
|
(
|
2113
|
-
|
2208
|
+
rn >' + (@sequence > 1 ? '' : '=') + ' :LOW
|
2114
2209
|
AND
|
2115
|
-
|
2210
|
+
rn <= :HIGH
|
2116
2211
|
)
|
2117
2212
|
'
|
2118
2213
|
else
|
@@ -2122,7 +2217,7 @@ module WidgetList
|
|
2122
2217
|
|
2123
2218
|
statement = WidgetList::Utils::fill(pieces, statement)
|
2124
2219
|
|
2125
|
-
if @items['rowLimit'] >= @totalRows
|
2220
|
+
if @items['rowLimit'].to_i >= @totalRows
|
2126
2221
|
@items['bindVarsLegacy']['LOW'] = 0
|
2127
2222
|
@sequence = 1
|
2128
2223
|
end
|
@@ -2130,6 +2225,10 @@ module WidgetList
|
|
2130
2225
|
statement
|
2131
2226
|
end
|
2132
2227
|
|
2228
|
+
def strip_aliases(name='')
|
2229
|
+
((name.include?('.')) ? name.split('.').last.gsub(/'||"/,'') : name.gsub(/'||"/,''))
|
2230
|
+
end
|
2231
|
+
|
2133
2232
|
def auto_column_name(name='')
|
2134
2233
|
name.gsub(/\_/,' ').gsub(/\-/,' ').capitalize
|
2135
2234
|
end
|
@@ -2141,10 +2240,8 @@ module WidgetList
|
|
2141
2240
|
sql = ''
|
2142
2241
|
hashed = false
|
2143
2242
|
|
2144
|
-
if
|
2145
|
-
sql = @items['
|
2146
|
-
elsif !@items['view'].empty?
|
2147
|
-
sql = WidgetList::Utils::fill({'<!--VIEW-->' => @items['view']}, @items['statement']['count']['view'])
|
2243
|
+
if !get_view().empty?
|
2244
|
+
sql = WidgetList::Utils::fill({'<!--VIEW-->' => get_view(),'<!--GROUPBY-->' => !@items['groupBy'].empty? ? ' GROUP BY ' + @items['groupBy'] : '' }, @items['statement']['count']['view'])
|
2148
2245
|
end
|
2149
2246
|
|
2150
2247
|
if ! @filter.empty?
|
@@ -2155,13 +2252,13 @@ module WidgetList
|
|
2155
2252
|
|
2156
2253
|
if ! sql.empty?
|
2157
2254
|
if @items['showPagination']
|
2158
|
-
if
|
2159
|
-
rows =
|
2255
|
+
if get_database._select(sql, @items['bindVars'], @items['bindVarsLegacy'], @active_record_model) > 0
|
2256
|
+
rows = get_database.final_results['TOTAL'][0]
|
2160
2257
|
else
|
2161
2258
|
rows = 0
|
2162
2259
|
end
|
2163
2260
|
if rows > 0
|
2164
|
-
@totalRows = rows
|
2261
|
+
@totalRows = rows.to_i
|
2165
2262
|
end
|
2166
2263
|
else
|
2167
2264
|
rows = 1
|
@@ -2177,6 +2274,212 @@ module WidgetList
|
|
2177
2274
|
rows
|
2178
2275
|
end
|
2179
2276
|
|
2277
|
+
def self.determine_db_type(db_type)
|
2278
|
+
if db_type.include?('://')
|
2279
|
+
the_type, void = db_type.split("://")
|
2280
|
+
if the_type == 'sqlite:/'
|
2281
|
+
the_type = 'sqlite'
|
2282
|
+
end
|
2283
|
+
return the_type.downcase
|
2284
|
+
else
|
2285
|
+
begin
|
2286
|
+
WidgetList::List::load_widget_list_database_yml()
|
2287
|
+
|
2288
|
+
if $widget_list_db_conf.key?(db_type)
|
2289
|
+
if $widget_list_db_conf[db_type]['adapter'].include?('mysql')
|
2290
|
+
return 'mysql'
|
2291
|
+
elsif $widget_list_db_conf[db_type]['adapter'].include?('postgres')
|
2292
|
+
return 'postgres'
|
2293
|
+
elsif $widget_list_db_conf[db_type]['adapter'].include?('oracle')
|
2294
|
+
return 'oracle'
|
2295
|
+
elsif $widget_list_db_conf[db_type]['adapter'].include?('sqlite')
|
2296
|
+
return 'sqlite'
|
2297
|
+
elsif $widget_list_db_conf[db_type]['adapter'].include?('sqlserver')
|
2298
|
+
return 'sqlserver'
|
2299
|
+
elsif $widget_list_db_conf[db_type]['adapter'].include?('ibm')
|
2300
|
+
return 'db2'
|
2301
|
+
end
|
2302
|
+
end
|
2303
|
+
rescue
|
2304
|
+
return ''
|
2305
|
+
end
|
2306
|
+
|
2307
|
+
end
|
2308
|
+
end
|
2309
|
+
|
2310
|
+
def self.load_widget_list_yml
|
2311
|
+
if $widget_list_conf.nil?
|
2312
|
+
$widget_list_conf = YAML.load(ERB.new(File.new(Rails.root.join("config", "widget-list.yml")).read).result)[Rails.env]
|
2313
|
+
end
|
2314
|
+
end
|
2315
|
+
|
2316
|
+
def self.load_widget_list_database_yml
|
2317
|
+
if $widget_list_db_conf.nil?
|
2318
|
+
$widget_list_db_conf = YAML.load(ERB.new(File.new(Rails.root.join("config", "database.yml")).read).result)
|
2319
|
+
end
|
2320
|
+
end
|
2321
|
+
|
2322
|
+
def self.get_db_type(primary)
|
2323
|
+
WidgetList::List::load_widget_list_yml()
|
2324
|
+
if primary
|
2325
|
+
database_conn = $widget_list_conf[:primary]
|
2326
|
+
else
|
2327
|
+
database_conn = $widget_list_conf[:secondary]
|
2328
|
+
end
|
2329
|
+
WidgetList::List::determine_db_type(database_conn)
|
2330
|
+
end
|
2331
|
+
|
2332
|
+
def get_db_type(primary)
|
2333
|
+
WidgetList::List::get_db_type(primary)
|
2334
|
+
end
|
2335
|
+
|
2336
|
+
def get_view
|
2337
|
+
@active_record_model = false
|
2338
|
+
if @is_sequel
|
2339
|
+
return @items['view']
|
2340
|
+
elsif @items['view'].respond_to?('scoped') && @items['view'].scoped.respond_to?('to_sql')
|
2341
|
+
@active_record_model = @items['view'].name.constantize
|
2342
|
+
|
2343
|
+
new_columns = []
|
2344
|
+
|
2345
|
+
@items['fields'].each { |column, fieldTitle|
|
2346
|
+
if @items['fieldFunction'].key?(column) && !@items['fieldFunction'][column].empty?
|
2347
|
+
# fieldFunction's should not have an alias, just the database functions
|
2348
|
+
column = @items['fieldFunction'][column] + " " + column
|
2349
|
+
end
|
2350
|
+
new_columns << column
|
2351
|
+
}
|
2352
|
+
|
2353
|
+
if @items['fieldsHidden'].class.name == 'Array' && !@items['fieldsHidden'].empty?
|
2354
|
+
@items['fieldsHidden'].each { |columnPivot|
|
2355
|
+
if !@items['fields'].key?(columnPivot)
|
2356
|
+
if @items['fieldFunction'].key?(columnPivot) && !@items['fieldFunction'][columnPivot].empty?
|
2357
|
+
# fieldFunction's should not have an alias, just the database functions
|
2358
|
+
columnPivot = @items['fieldFunction'][columnPivot] + " " + columnPivot
|
2359
|
+
end
|
2360
|
+
new_columns << columnPivot
|
2361
|
+
end
|
2362
|
+
}
|
2363
|
+
elsif @items['fieldsHidden'].class.name == 'Hash' && !@items['fieldsHidden'].empty?
|
2364
|
+
@items['fieldsHidden'].each { |columnPivot|
|
2365
|
+
if !@items['fields'].key?(columnPivot[0])
|
2366
|
+
if @items['fieldFunction'].key?(columnPivot[0]) && !@items['fieldFunction'][columnPivot[0]].empty?
|
2367
|
+
# fieldFunction's should not have an alias, just the database functions
|
2368
|
+
columnPivot[0] = @items['fieldFunction'][columnPivot[0]] + " " + columnPivot[0]
|
2369
|
+
end
|
2370
|
+
new_columns << columnPivot[0]
|
2371
|
+
end
|
2372
|
+
}
|
2373
|
+
end
|
2374
|
+
|
2375
|
+
view = @items['view'].scoped.to_sql
|
2376
|
+
sql_from = view[view.index(/FROM/),view.length]
|
2377
|
+
view = "SELECT #{new_columns.join(',')} " + sql_from
|
2378
|
+
|
2379
|
+
return "( #{view} <!--GROUPBY-->) a"
|
2380
|
+
else
|
2381
|
+
return ""
|
2382
|
+
end
|
2383
|
+
end
|
2384
|
+
|
2385
|
+
def connect
|
2386
|
+
@has_connected = true
|
2387
|
+
begin
|
2388
|
+
if Rails.root.join("config", "widget-list.yml").file?
|
2389
|
+
WidgetList::List::load_widget_list_yml()
|
2390
|
+
if $widget_list_conf.nil?
|
2391
|
+
throw 'Configuration file widget-list.yml has no data. Check that (' + Rails.env + ') Rails.env matches the pointers in the file'
|
2392
|
+
end
|
2393
|
+
@primary_conn = $widget_list_conf[:primary]
|
2394
|
+
@secondary_conn = $widget_list_conf[:secondary]
|
2395
|
+
else
|
2396
|
+
throw 'widget-list.yml not found'
|
2397
|
+
end
|
2398
|
+
|
2399
|
+
@is_sequel = true
|
2400
|
+
if @primary_conn != false && ! @primary_conn.include?('://')
|
2401
|
+
@is_sequel = false
|
2402
|
+
end
|
2403
|
+
|
2404
|
+
if @secondary_conn != false && !@secondary_conn.include?('://')
|
2405
|
+
@is_sequel = false
|
2406
|
+
end
|
2407
|
+
|
2408
|
+
if @primary_conn != false
|
2409
|
+
if @primary_conn.include?('://')
|
2410
|
+
@widget_list_sequel_conn = Sequel.connect(@primary_conn)
|
2411
|
+
@widget_list_sequel_conn.db_type = WidgetList::List::determine_db_type(@primary_conn)
|
2412
|
+
else
|
2413
|
+
@widget_list_ar_conn = WidgetListActiveRecord.new
|
2414
|
+
@widget_list_ar_conn.db_type = WidgetList::List::determine_db_type(@primary_conn)
|
2415
|
+
end
|
2416
|
+
end
|
2417
|
+
|
2418
|
+
if @secondary_conn != false
|
2419
|
+
if @secondary_conn.include?('://')
|
2420
|
+
@widget_list_sequel_conn2 = Sequel.connect(@secondary_conn)
|
2421
|
+
@widget_list_sequel_conn2.db_type = WidgetList::List::determine_db_type(@secondary_conn)
|
2422
|
+
else
|
2423
|
+
@widget_list_ar_conn2 = WidgetListActiveRecord.new
|
2424
|
+
@widget_list_ar_conn2.db_type = WidgetList::List::determine_db_type(@secondary_conn)
|
2425
|
+
end
|
2426
|
+
end
|
2427
|
+
|
2428
|
+
rescue Exception => e
|
2429
|
+
p "widget-list.yml and connection to @widget_list_sequel_conn or @widget_list_sequel_conn2 failed. Please fix and try again (" + e.to_s + ")"
|
2430
|
+
end
|
2431
|
+
|
2432
|
+
end
|
2433
|
+
|
2434
|
+
|
2435
|
+
def self.is_sequel(primary)
|
2436
|
+
WidgetList::List::load_widget_list_yml()
|
2437
|
+
if primary
|
2438
|
+
database_conn = $widget_list_conf[:primary]
|
2439
|
+
else
|
2440
|
+
database_conn = $widget_list_conf[:secondary]
|
2441
|
+
end
|
2442
|
+
is_sequel = true
|
2443
|
+
if database_conn != false && ! database_conn.include?('://')
|
2444
|
+
is_sequel = false
|
2445
|
+
end
|
2446
|
+
return is_sequel
|
2447
|
+
end
|
2448
|
+
|
2449
|
+
def get_database
|
2450
|
+
|
2451
|
+
if @has_connected.nil?
|
2452
|
+
connect
|
2453
|
+
end
|
2454
|
+
|
2455
|
+
if @is_sequel
|
2456
|
+
begin
|
2457
|
+
if @widget_list_sequel_conn.class.name.to_s.split('::').first == 'Sequel'
|
2458
|
+
if @current_db_selection == 'primary' || @current_db_selection.nil?
|
2459
|
+
@widget_list_sequel_conn.test_connection
|
2460
|
+
end
|
2461
|
+
if @current_db_selection == 'secondary'
|
2462
|
+
@widget_list_sequel_conn2.test_connection
|
2463
|
+
end
|
2464
|
+
else
|
2465
|
+
connect
|
2466
|
+
end
|
2467
|
+
rescue
|
2468
|
+
connect
|
2469
|
+
end
|
2470
|
+
end
|
2471
|
+
|
2472
|
+
case @current_db_selection
|
2473
|
+
when 'primary'
|
2474
|
+
return (@is_sequel) ? @widget_list_sequel_conn : @widget_list_ar_conn
|
2475
|
+
when 'secondary'
|
2476
|
+
return (@is_sequel) ? @widget_list_sequel_conn2 : @widget_list_ar_conn2
|
2477
|
+
else
|
2478
|
+
return (@is_sequel) ? @widget_list_sequel_conn : @widget_list_ar_conn
|
2479
|
+
end
|
2480
|
+
|
2481
|
+
end
|
2482
|
+
|
2180
2483
|
end
|
2181
2484
|
|
2182
2485
|
end
|