-
Notifications
You must be signed in to change notification settings - Fork 16
/
README.txt
346 lines (255 loc) · 11.9 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
=== WP-DB-Table-Editor ===
Contributers: bobbysmith007
Donate link: https://www.acceleration.net/programming/donate-to-acceleration-net/
Tags: admin screens, database, editor
Requires at least: 3.0.0
Tested Up To: 4.2.2
Stable tag: trunk
License: BSD
URL: https://github.com/AccelerationNet/wp-db-table-editor/
== Description ==
This is a Wordpress plugin that allows direct excel-like editing of
tables in your Wordpress database. It's goals are to provide useful,
simple, flexible database table admin screens.
It supports:
* one table per admin screen, as many admin screens as desired
* These are organized under a new "DB Table Editor" menu item
* excel spreadsheet like interface using SlickGrid
* Filter and Sort results
* Add, Edit & Delete records
* Custom buttons extensibility
* Custom permissions per interface for viewing and editing
(defaults to: edit_others_posts)
* editing defaults to the same permission as viewing if not specified
* CSV exports of filtered grid
* Custom primary key names (but must be a single value / column)
== Installation ==
This is installed the same way all wordpress plugins:
* Drop the unzipped plugin directory into your wordpress install at
`wp-content/plugins/wp-db-table-editor`
* Activate the plugin via the Wordpress Admin > "Plugins" menu
= Adding an interface =
DB-Table Editor Interfaces are added by calling the
add_db_table_editor function in your theme's `functions.php` file.
This supports `wp_parse_args` style arguments.
* `title`: what shows up in the H1 on the screen and in menues
* ex: `title=>"My Product Reports Page"`
* `table`: the table we wish to display / edit
* ex: `table=>"wp_my_custom_table"`
* `id`: the admin interface id (defaults to table)
* ex: `id=>"custom_table_interface_1"`
* `id_column`: the column in each row that names the id for the row
* ex: `id_column=>"id"`
* `dataFn`: a function that returns the data to be displayed /
edited, defaults to `select * from {table}`. This should return ARRAY_N
through wpdb->get_results. Alternatively it may return a DBTE_DataTable.
`dataFn` is called with the arguemnts array to add_db_table_editor;
* ex: `dataFn=>"myCustomInterfaceFunction"`
* `jsFile`: the name of a registered script that will be enqueued for
this interface
* ex: `jsFile=>"my-custom-interface-js"`
* `cap`: the capability a user needs to view/edit this interface,
defaults to edit_others_posts
* ex: `cap=>"edit_others_posts"`
* `editcap`: the capability required to edit the grid, if not set
all viewers are assumed to be editors
* ex: `editcap=>"edit_others_posts"`
* `noedit`: turns off the editing abilities (same as editcap=nosuchcapability)
* ex: `noedit=>true`
* `columnFilters`: Default column filters, this is an array of column->val
to be applied as default column fitlers when the page is loaded
* ex: `columnFilters=>Array("Year"=>"2017")`
* `columnNameMap`: A map of actual column names to displayed label
* Ex: `columnNameMap=>Array('column_name'=>'Column Alias')`
* `noedit_columns`, `hide_columns`: You may wish to hide some columns
or prevent edit. You may do so by setting these fields to the name
of columns you wish hidden or uneditable (eg: the id)
* Ex:`noedit_columns=>"data,id"` or `noedit_columns=>Array('data', 'id')`
* `save_cb`, `delete_cb`: function names to be called with an array of data:
the dbte, update array, column array and modified indexes array
`call_user_func($cur->save_cb,Array('table'=>$cur, 'update'=>$up,
'columns'=>$cols, 'indexes'=>$idxs, 'id'=>$id));`
`call_user_func($cur->delete_cb,$cur,$id);`
If your call back inserts data it should fill in $data['id'] and accept data
by reference
* `auto_date`: should columns that appear to be datetimes, be treated as such
This is based on the columns data type
* Sort of buggy but allows some different date formats than iso8601
* Ex:`auto_date=>true`
* `autoHeight`: passes the autoHeight option to slickgrid (makes
there not be a vertical scrollbar on the grid and instead in the
window)
* Ex:`auto_height=>true`
* `async_data`: request data asyncronously instead of inlining
it. Makes slow queries "seem" faster.
* Ex:`async_data=>true`
* `default_values`: an a_array of default values that new rows should have
* Ex:`default_values=>Array("name"=>"First M Last")`
* `export_id_field`: the field to use when limiting the export results
* some sql needs a specific field - defaults to `table`.`id_col`
* Ex:`"export_id_field"=>"mytbl.fooid"`
Example:
```
if(function_exists('add_db_table_editor')){
add_db_table_editor('title=Employees&table=employees');
add_db_table_editor(array(
'title'=>'Event Registrations',
'table'=>'event_registrations',
'sql'=>'SELECT * FROM event_registrations ORDER BY date_entered DESC'
));
}
```
= Reasons and Expectations =
Previously my company had been using DB-toolkit to provide minimal
database interfaces for custom tables through the Wordpress admin.
While the configuration was cumbersome for what we were doing, it did
work and was easier than writing anything. However, when DB-Toolkit
stopped being maintained and I couldn't find a simple, but suitable
replacement, I decided to tackle my goals more head on
Use of this plugin requires a basic knowledge of PHP, and SQL. It was
written by a programmer to help accomplish his work and does not
currently provide admin configuration screens (instead simple function
calls in your theme's functions file are used to configure the
screens). This was preferable to me, because my configuration is
safely in source control (a problem I had when DB-toolkit would
upgrade and lose all configuration).
== Screenshots ==
1. Here's a screenshot of it in action
== Adding an Interface on the fly ==
If we go to look up a database table editor and we dont find it, but
there is a function named dbte_create_$tbl that matches, we will call
that function expecting it to return a dbte instance. This is useful
in situations where we may not have the data for a table editor in all
circumstances (EG: not every page has a member id, so only do it on
that particular page).
== Adding an Interface from a plugin ==
If you need to add an interface from a plugin, you should use the
`db_table_editor_init` action.
eg: `add_action( 'db_table_editor_init', 'my_load_tables' );`
Inside of the `my_load_tables` function you would include all the
calls to add_db_table_editor
== Custom Buttons ==
Buttons can be created by pushing functions into
`DBTableEditor.extraButtons`. Each of these is a slick grid
rowButtonFormatter and should return a string of html.
eg:
out += fn(row, cell, value, columnDef, dataContext);
The button column width can be set by setting:
DBTableEditor.buttonColumnWidth before the ready function is called
= Hooks / Actions =
* `db-table-editor_enqueue_scripts` is an action that will be called
after enqueueing all plugin scripts and before enqueueing `jsFile`
(if it exists)
```
function dbTableEditorScripts(){
wp_register_script('employee-table-extensions-js',
get_stylesheet_directory_uri().'/employee-table.js',
array('db-table-editor-js'));
}
add_action('db-table-editor_enqueue_scripts', 'dbTableEditorScripts');
```
== dbte_row_deleted, dbte_row_updated, dbte_row_inserted ==
Called after a row is deleted, updated, or inserted passes
```
add_action('dbte_row_deleted', 'my_dbte_row_deleted', 10, 2);
function my_dbte_row_deleted($currentTable, $idRemoved){
// do things
}
add_action('dbte_row_updated', 'my_dbte_row_upserted', 10, 4);
add_action('dbte_row_inserted', 'my_dbte_row_upserted', 10, 4);
function my_dbte_row_upserted($currentTable, $values, $columns, $indexedModified){
// do things
}
```
= Shortcodes =
You can use a shortcode to include a dbte interface on a wordpress
page. Please use with care.
[dbte id=table-editor-id] - (id defaults to table)
== Caveats ==
* Dont put an editable table editor on your public facing screens using the shortcode!
== Troubleshooting ==
Feel free to ask support questions / open trouble tickets
* https://wordpress.org/support/plugin/wp-db-table-editor
* https://github.com/AccelerationNet/wp-db-table-editor/issues
=== FAQ ===
* I dont see any interface / nothing changed?
* Did you complete the installation process, including appropriate
`add_db_table_editor` calls?
* My delete button is missing / I Can't Edit
* You either dont have `editcap` or `id_column` is misconfigured
* https://github.com/AccelerationNet/wp-db-table-editor/issues/5
== Advanced Examples ==
=== Custom Javascript and Buttons on the table editor ===
See: examples/custom-buttons-and-js.php
examples/custom-buttons.js
Shows how to add custom javascript to a report page and adds a custom
load button on the grid
=== CF7 DB Submit Plugin integration ===
See: examples/cf7dbsubmit_integration.php
This is not a fully runnable example, but should give good examples of
* working cf7dbsubmit plugin
* Custom save delete hooks
* custom complex sql building with this plugin
* sending notifications on edit of specific fields
cf7dbsubmit stores its data in a "hashtable" format of:
form, submit_time, field_name, field_value
but we want to present this in a more excel fasion of each field being
a column of our spreadsheet and each row being a different submission
== ChangeLog ==
For detailed information, please view:
https://github.com/AccelerationNet/wp-db-table-editor/commits
Version: 1.6.0 - 2017-02-23
* New (customized) version of SlickGrid (branched from 6pac@github)
* allow access to the default filter and the filtered items
* Handle exports by sending a list of ids to export rather than
trying to recreate the full filter set serverside. Allows rather
arbitrary JS filtering functions without having to get nitty gritty
on the server
Version: 1.5.6 - 2017-02-22
* allow easy button column width configuration
Version: 1.5.5 - 2016-12-16
* fix deprecated constructor
Version: 1.5.4 - 2016-12-06
* trim noedit_columns!
Version: 1.5.3 - 2016-03-14
* Better numeric sorting
Version: 1.5.2 - 2015-11-28
* fixed confused ajax-vs-async nomenclature
Version: 1.5.1 - 2015-09-21
* Fixed bug with new rows without default values
Version: 1.5 - 2015-09-15
* replace update & insert call backs and actions with dbte_save
that passes an argument array instead of list of arguments.
should hopefully make upgrading easier (updated example).
This also allows the callback to set the "id" of the argument
array (should be passed by ref) in case of insert.
* async_data: option makes the grid pull data using ajax instead of
inlining it. This might make the page appear more responsive if
the query takes forever. You are probably better off improving
your query.
* when calling save ajax, pass all query arguments for the current
page. Also set default values along the way
Version: 1.4.2 - 2015-08-17
* bug fixes: new rows were not updating their id
* saving now submits the currently active cell if there is one
Version: 1.4.1 - 2015-06-19
* added some missing files for translation
Version: 1.4 - 2015-06-18
* nikomuse provided i18n support
Version: 1.3.2 - 2015-03-30
* introduce action `db_table_editor_init`, for other plugins
to use
Version: 1.3.1 - 2015-03-30
* Introduce PhpSqlParser and use it instead of my
half-implemented index scanning, for inserting the where clause
Version: 1.3 - 2015-02-18 10:30
* !! API CHANGE `update_cb`, `delete_cb`, and `dbte_row_updated`
all accept ID arguments -- TODO: perhaps these should accept
keyword arg arrays, to make it handle upgrades more gracefully?
Version: 1.2.8 - 2015-02-04 10:30
* better docs
* better examples
* dbte_row_inserted, dbte_row_updated, dbte_row_deleted actions
== Contributers and Thanks ==
* bobbysmith007 / Acceleration.net - Primary developer of plugin
* nikomuse - i18n support