diff --git a/assets/js/build-min.js b/assets/js/build-min.js index 7dfa37df..f46def49 100644 --- a/assets/js/build-min.js +++ b/assets/js/build-min.js @@ -119,6 +119,8 @@ DatabaseTable.prototype.cmdDeleteTable=function(ev){var $target=$(ev.currentTarg $.oc.confirm($target.data('confirm'),this.proxy(this.deleteConfirmed))} DatabaseTable.prototype.cmdUnModifyForm=function(){var $masterTabPane=this.getMasterTabsActivePane() this.unmodifyTab($masterTabPane)} +DatabaseTable.prototype.cmdAddIdColumn=function(ev){var $target=$(ev.currentTarget),added=this.addIdColumn($target) +if(!added){alert($target.closest('form').attr('data-lang-id-exists'))}} DatabaseTable.prototype.cmdAddTimestamps=function(ev){var $target=$(ev.currentTarget),added=this.addTimeStampColumns($target,['created_at','updated_at']) if(!added){alert($target.closest('form').attr('data-lang-timestamps-exist'))}} 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} if(column=='primary_key'&&!value){updatedRow.auto_increment=0} $target.table('setRowValues',rowIndex,updatedRow)} DatabaseTable.prototype.onTableLoaded=function(){$(document).trigger('render') -var $masterTabPane=this.getMasterTabsActivePane(),$form=$masterTabPane.find('form'),$toolbar=$masterTabPane.find('div[data-control=table] div.toolbar'),$button=$('') -$button.text($form.attr('data-lang-add-timestamps'));$toolbar.append($button) -$button=$('') -$button.text($form.attr('data-lang-add-soft-delete'));$toolbar.append($button)} +var $masterTabPane=this.getMasterTabsActivePane(),$form=$masterTabPane.find('form'),$toolbar=$masterTabPane.find('div[data-control=table] div.toolbar'),$addIdButton=$(''),$addTimestampsButton=$(''),$addSoftDeleteButton=$('') +$addIdButton.text($form.attr('data-lang-add-id'));$toolbar.append($addIdButton) +$addTimestampsButton.text($form.attr('data-lang-add-timestamps'));$toolbar.append($addTimestampsButton) +$addSoftDeleteButton.text($form.attr('data-lang-add-soft-delete'));$toolbar.append($addSoftDeleteButton)} DatabaseTable.prototype.registerHandlers=function(){this.indexController.$masterTabs.on('oc.tableCellChanged',this.proxy(this.onTableCellChanged))} DatabaseTable.prototype.validateTable=function($target){var tableObj=this.getTableControlObject($target) tableObj.unfocusTable() @@ -167,10 +169,19 @@ tableObj.unfocusTable() var data=this.getTableData($target),result=[] for(var index in data){if(data[index].name!==undefined){result.push($.trim(data[index].name))}} return result} +DatabaseTable.prototype.addIdColumn=function($target){var existingColumns=this.getColumnNames($target),added=false +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,} +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)} +tableObj.setRowValues(currentData.length-1,rowData) +tableObj.addRecord('bottom',false) +tableObj.deleteRecord() +added=true} +if(added){$target.trigger('change')} +return added} DatabaseTable.prototype.addTimeStampColumns=function($target,columns) {var existingColumns=this.getColumnNames($target),added=false for(var index in columns){var column=columns[index] -if($.inArray(column,existingColumns)==-1){this.addTimeStampColumn($target,column) +if(existingColumns.indexOf(column)===-1){this.addTimeStampColumn($target,column) added=true}} if(added){$target.trigger('change')} return added} @@ -810,4 +821,4 @@ return $input.val()} LocalizationProcessor.prototype.removeLocalizationInput=function(){if(!this.localizationInput){return} this.localizationInput.dispose() this.localizationInput=null} -$.oc.table.processor.builderLocalization=LocalizationProcessor;}(window.jQuery); \ No newline at end of file +$.oc.table.processor.builderLocalization=LocalizationProcessor;}(window.jQuery); diff --git a/assets/js/builder.index.entity.databasetable.js b/assets/js/builder.index.entity.databasetable.js index a2afaa40..9b9e3b2a 100644 --- a/assets/js/builder.index.entity.databasetable.js +++ b/assets/js/builder.index.entity.databasetable.js @@ -86,6 +86,15 @@ this.unmodifyTab($masterTabPane) } + DatabaseTable.prototype.cmdAddIdColumn = function(ev) { + var $target = $(ev.currentTarget), + added = this.addIdColumn($target) + + if (!added) { + alert($target.closest('form').attr('data-lang-id-exists')) + } + } + DatabaseTable.prototype.cmdAddTimestamps = function(ev) { var $target = $(ev.currentTarget), added = this.addTimeStampColumns($target, ['created_at', 'updated_at']) @@ -159,14 +168,18 @@ var $masterTabPane = this.getMasterTabsActivePane(), $form = $masterTabPane.find('form'), $toolbar = $masterTabPane.find('div[data-control=table] div.toolbar'), - $button = $('') + $addIdButton = $(''), + $addTimestampsButton = $(''), + $addSoftDeleteButton = $('') - $button.text($form.attr('data-lang-add-timestamps')); - $toolbar.append($button) + $addIdButton.text($form.attr('data-lang-add-id')); + $toolbar.append($addIdButton) - $button = $('') - $button.text($form.attr('data-lang-add-soft-delete')); - $toolbar.append($button) + $addTimestampsButton.text($form.attr('data-lang-add-timestamps')); + $toolbar.append($addTimestampsButton) + + $addSoftDeleteButton.text($form.attr('data-lang-add-soft-delete')); + $toolbar.append($addSoftDeleteButton) } // INTERNAL METHODS @@ -257,6 +270,42 @@ return result } + DatabaseTable.prototype.addIdColumn = function($target) { + var existingColumns = this.getColumnNames($target), + added = false + + 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, + } + + 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) + } + + tableObj.setRowValues(currentData.length - 1, rowData) + + // Forces the table to apply values + // from the data source + tableObj.addRecord('bottom', false) + tableObj.deleteRecord() + + added = true + } + + if (added) { + $target.trigger('change') + } + + return added + } + DatabaseTable.prototype.addTimeStampColumns = function($target, columns) { var existingColumns = this.getColumnNames($target), @@ -265,7 +314,7 @@ for (var index in columns) { var column = columns[index] - if ($.inArray(column, existingColumns) == -1) { + if (existingColumns.indexOf(column) === -1) { this.addTimeStampColumn($target, column) added = true } @@ -289,7 +338,7 @@ } tableObj.addRecord('bottom', true) - tableObj.setRowValues(currentData.length-1, rowData) + tableObj.setRowValues(currentData.length - 1, rowData) // Forces the table to apply values // from the data source @@ -311,4 +360,4 @@ $.oc.builder.entityControllers.databaseTable = DatabaseTable; -}(window.jQuery); \ No newline at end of file +}(window.jQuery); diff --git a/behaviors/indexdatabasetableoperations/partials/_tab.htm b/behaviors/indexdatabasetableoperations/partials/_tab.htm index 4d690a00..2cb010c3 100644 --- a/behaviors/indexdatabasetableoperations/partials/_tab.htm +++ b/behaviors/indexdatabasetableoperations/partials/_tab.htm @@ -4,12 +4,14 @@ 'data-window-close-confirm' => e(trans('backend::lang.form.confirm_tab_close')), 'data-entity' => 'database', 'onsubmit' => 'return false', + 'data-lang-add-id' => e(trans('rainlab.builder::lang.database.btn_add_id')), 'data-lang-add-timestamps' => e(trans('rainlab.builder::lang.database.btn_add_timestamps')), 'data-lang-add-soft-delete' => e(trans('rainlab.builder::lang.database.btn_add_soft_deleting')), + 'data-lang-id-exists' => e(trans('rainlab.builder::lang.database.id_exists')), 'data-lang-timestamps-exist' => e(trans('rainlab.builder::lang.database.timestamps_exist')), 'data-lang-soft-deleting-exist' => e(trans('rainlab.builder::lang.database.soft_deleting_exist')), ]) ?> render() ?> - \ No newline at end of file + diff --git a/lang/en/lang.php b/lang/en/lang.php index 597a2488..92c566cf 100644 --- a/lang/en/lang.php +++ b/lang/en/lang.php @@ -57,8 +57,10 @@ 'tab_new_table' => 'New table', 'btn_add_column' => 'Add column', 'btn_delete_column' => 'Delete column', + 'btn_add_id' => 'Add ID', 'btn_add_timestamps' => 'Add timestamps', 'btn_add_soft_deleting' => 'Add soft deleting support', + 'id_exists' => 'ID column already exists in the table.', 'timestamps_exist' => 'created_at and deleted_at columns already exist in the table.', 'soft_deleting_exist' => 'deleted_at column already exists in the table.', 'confirm_delete' => 'Delete the table?',