Skip to content

Commit 3fcd20f

Browse files
danharrinBen Thomson
authored andcommitted
"Add ID column" Button for Migration Editor (#293)
Credit to @danharrin.
1 parent f3ddfa6 commit 3fcd20f

4 files changed

Lines changed: 80 additions & 16 deletions

File tree

assets/js/build-min.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ DatabaseTable.prototype.cmdDeleteTable=function(ev){var $target=$(ev.currentTarg
119119
$.oc.confirm($target.data('confirm'),this.proxy(this.deleteConfirmed))}
120120
DatabaseTable.prototype.cmdUnModifyForm=function(){var $masterTabPane=this.getMasterTabsActivePane()
121121
this.unmodifyTab($masterTabPane)}
122+
DatabaseTable.prototype.cmdAddIdColumn=function(ev){var $target=$(ev.currentTarget),added=this.addIdColumn($target)
123+
if(!added){alert($target.closest('form').attr('data-lang-id-exists'))}}
122124
DatabaseTable.prototype.cmdAddTimestamps=function(ev){var $target=$(ev.currentTarget),added=this.addTimeStampColumns($target,['created_at','updated_at'])
123125
if(!added){alert($target.closest('form').attr('data-lang-timestamps-exist'))}}
124126
DatabaseTable.prototype.cmdAddSoftDelete=function(ev){var $target=$(ev.currentTarget),added=this.addTimeStampColumns($target,['deleted_at'])
@@ -135,10 +137,10 @@ if(column=='allow_null'&&value){updatedRow.primary_key=0}
135137
if(column=='primary_key'&&!value){updatedRow.auto_increment=0}
136138
$target.table('setRowValues',rowIndex,updatedRow)}
137139
DatabaseTable.prototype.onTableLoaded=function(){$(document).trigger('render')
138-
var $masterTabPane=this.getMasterTabsActivePane(),$form=$masterTabPane.find('form'),$toolbar=$masterTabPane.find('div[data-control=table] div.toolbar'),$button=$('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>')
139-
$button.text($form.attr('data-lang-add-timestamps'));$toolbar.append($button)
140-
$button=$('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
141-
$button.text($form.attr('data-lang-add-soft-delete'));$toolbar.append($button)}
140+
var $masterTabPane=this.getMasterTabsActivePane(),$form=$masterTabPane.find('form'),$toolbar=$masterTabPane.find('div[data-control=table] div.toolbar'),$addIdButton=$('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddIdColumn"></a>'),$addTimestampsButton=$('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>'),$addSoftDeleteButton=$('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
141+
$addIdButton.text($form.attr('data-lang-add-id'));$toolbar.append($addIdButton)
142+
$addTimestampsButton.text($form.attr('data-lang-add-timestamps'));$toolbar.append($addTimestampsButton)
143+
$addSoftDeleteButton.text($form.attr('data-lang-add-soft-delete'));$toolbar.append($addSoftDeleteButton)}
142144
DatabaseTable.prototype.registerHandlers=function(){this.indexController.$masterTabs.on('oc.tableCellChanged',this.proxy(this.onTableCellChanged))}
143145
DatabaseTable.prototype.validateTable=function($target){var tableObj=this.getTableControlObject($target)
144146
tableObj.unfocusTable()
@@ -167,10 +169,19 @@ tableObj.unfocusTable()
167169
var data=this.getTableData($target),result=[]
168170
for(var index in data){if(data[index].name!==undefined){result.push($.trim(data[index].name))}}
169171
return result}
172+
DatabaseTable.prototype.addIdColumn=function($target){var existingColumns=this.getColumnNames($target),added=false
173+
if(existingColumns.indexOf('id')===-1){var tableObj=this.getTableControlObject($target),currentData=this.getTableData($target),rowData={name:'id',type:'integer',unsigned:true,auto_increment:true,primary_key:true,}
174+
if(currentData.length-1||currentData[0].name||currentData[0].type||currentData[0].length||currentData[0].unsigned||currentData[0].nullable||currentData[0].auto_increment||currentData[0].primary_key||currentData[0].default){tableObj.addRecord('bottom',true)}
175+
tableObj.setRowValues(currentData.length-1,rowData)
176+
tableObj.addRecord('bottom',false)
177+
tableObj.deleteRecord()
178+
added=true}
179+
if(added){$target.trigger('change')}
180+
return added}
170181
DatabaseTable.prototype.addTimeStampColumns=function($target,columns)
171182
{var existingColumns=this.getColumnNames($target),added=false
172183
for(var index in columns){var column=columns[index]
173-
if($.inArray(column,existingColumns)==-1){this.addTimeStampColumn($target,column)
184+
if(existingColumns.indexOf(column)===-1){this.addTimeStampColumn($target,column)
174185
added=true}}
175186
if(added){$target.trigger('change')}
176187
return added}
@@ -810,4 +821,4 @@ return $input.val()}
810821
LocalizationProcessor.prototype.removeLocalizationInput=function(){if(!this.localizationInput){return}
811822
this.localizationInput.dispose()
812823
this.localizationInput=null}
813-
$.oc.table.processor.builderLocalization=LocalizationProcessor;}(window.jQuery);
824+
$.oc.table.processor.builderLocalization=LocalizationProcessor;}(window.jQuery);

assets/js/builder.index.entity.databasetable.js

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@
8686
this.unmodifyTab($masterTabPane)
8787
}
8888

89+
DatabaseTable.prototype.cmdAddIdColumn = function(ev) {
90+
var $target = $(ev.currentTarget),
91+
added = this.addIdColumn($target)
92+
93+
if (!added) {
94+
alert($target.closest('form').attr('data-lang-id-exists'))
95+
}
96+
}
97+
8998
DatabaseTable.prototype.cmdAddTimestamps = function(ev) {
9099
var $target = $(ev.currentTarget),
91100
added = this.addTimeStampColumns($target, ['created_at', 'updated_at'])
@@ -159,14 +168,18 @@
159168
var $masterTabPane = this.getMasterTabsActivePane(),
160169
$form = $masterTabPane.find('form'),
161170
$toolbar = $masterTabPane.find('div[data-control=table] div.toolbar'),
162-
$button = $('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>')
171+
$addIdButton = $('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddIdColumn"></a>'),
172+
$addTimestampsButton = $('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>'),
173+
$addSoftDeleteButton = $('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
163174

164-
$button.text($form.attr('data-lang-add-timestamps'));
165-
$toolbar.append($button)
175+
$addIdButton.text($form.attr('data-lang-add-id'));
176+
$toolbar.append($addIdButton)
166177

167-
$button = $('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
168-
$button.text($form.attr('data-lang-add-soft-delete'));
169-
$toolbar.append($button)
178+
$addTimestampsButton.text($form.attr('data-lang-add-timestamps'));
179+
$toolbar.append($addTimestampsButton)
180+
181+
$addSoftDeleteButton.text($form.attr('data-lang-add-soft-delete'));
182+
$toolbar.append($addSoftDeleteButton)
170183
}
171184

172185
// INTERNAL METHODS
@@ -257,6 +270,42 @@
257270
return result
258271
}
259272

273+
DatabaseTable.prototype.addIdColumn = function($target) {
274+
var existingColumns = this.getColumnNames($target),
275+
added = false
276+
277+
if (existingColumns.indexOf('id') === -1) {
278+
var tableObj = this.getTableControlObject($target),
279+
currentData = this.getTableData($target),
280+
rowData = {
281+
name: 'id',
282+
type: 'integer',
283+
unsigned: true,
284+
auto_increment: true,
285+
primary_key: true,
286+
}
287+
288+
if (currentData.length - 1 || currentData[0].name || currentData[0].type || currentData[0].length || currentData[0].unsigned || currentData[0].nullable || currentData[0].auto_increment || currentData[0].primary_key || currentData[0].default) {
289+
tableObj.addRecord('bottom', true)
290+
}
291+
292+
tableObj.setRowValues(currentData.length - 1, rowData)
293+
294+
// Forces the table to apply values
295+
// from the data source
296+
tableObj.addRecord('bottom', false)
297+
tableObj.deleteRecord()
298+
299+
added = true
300+
}
301+
302+
if (added) {
303+
$target.trigger('change')
304+
}
305+
306+
return added
307+
}
308+
260309
DatabaseTable.prototype.addTimeStampColumns = function($target, columns)
261310
{
262311
var existingColumns = this.getColumnNames($target),
@@ -265,7 +314,7 @@
265314
for (var index in columns) {
266315
var column = columns[index]
267316

268-
if ($.inArray(column, existingColumns) == -1) {
317+
if (existingColumns.indexOf(column) === -1) {
269318
this.addTimeStampColumn($target, column)
270319
added = true
271320
}
@@ -289,7 +338,7 @@
289338
}
290339

291340
tableObj.addRecord('bottom', true)
292-
tableObj.setRowValues(currentData.length-1, rowData)
341+
tableObj.setRowValues(currentData.length - 1, rowData)
293342

294343
// Forces the table to apply values
295344
// from the data source
@@ -311,4 +360,4 @@
311360

312361
$.oc.builder.entityControllers.databaseTable = DatabaseTable;
313362

314-
}(window.jQuery);
363+
}(window.jQuery);

behaviors/indexdatabasetableoperations/partials/_tab.htm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
'data-window-close-confirm' => e(trans('backend::lang.form.confirm_tab_close')),
55
'data-entity' => 'database',
66
'onsubmit' => 'return false',
7+
'data-lang-add-id' => e(trans('rainlab.builder::lang.database.btn_add_id')),
78
'data-lang-add-timestamps' => e(trans('rainlab.builder::lang.database.btn_add_timestamps')),
89
'data-lang-add-soft-delete' => e(trans('rainlab.builder::lang.database.btn_add_soft_deleting')),
10+
'data-lang-id-exists' => e(trans('rainlab.builder::lang.database.id_exists')),
911
'data-lang-timestamps-exist' => e(trans('rainlab.builder::lang.database.timestamps_exist')),
1012
'data-lang-soft-deleting-exist' => e(trans('rainlab.builder::lang.database.soft_deleting_exist')),
1113
]) ?>
1214
<?= $form->render() ?>
1315
<input type="hidden" name="plugin_code" value="<?= e($pluginCode) ?>">
1416
<input type="hidden" name="table_name" value="<?= e($tableName) ?>">
15-
<?= Form::close() ?>
17+
<?= Form::close() ?>

lang/en/lang.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@
5757
'tab_new_table' => 'New table',
5858
'btn_add_column' => 'Add column',
5959
'btn_delete_column' => 'Delete column',
60+
'btn_add_id' => 'Add ID',
6061
'btn_add_timestamps' => 'Add timestamps',
6162
'btn_add_soft_deleting' => 'Add soft deleting support',
63+
'id_exists' => 'ID column already exists in the table.',
6264
'timestamps_exist' => 'created_at and deleted_at columns already exist in the table.',
6365
'soft_deleting_exist' => 'deleted_at column already exists in the table.',
6466
'confirm_delete' => 'Delete the table?',

0 commit comments

Comments
 (0)