mirror of
https://github.com/nextcloud/passman.git
synced 2024-09-20 06:46:20 +08:00
add custom fields support to the generic csv importer
This commit is contained in:
parent
3c07c5edaf
commit
5894608d9c
|
@ -1347,7 +1347,8 @@
|
|||
clear: both; }
|
||||
|
||||
input[type="checkbox"] {
|
||||
min-height: inherit; }
|
||||
min-height: inherit;
|
||||
cursor: pointer; }
|
||||
|
||||
.alert {
|
||||
padding: 15px;
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -61,6 +61,11 @@
|
|||
label: 'Custom field',
|
||||
prop: 'custom_field'
|
||||
},
|
||||
{
|
||||
label: 'Custom fields',
|
||||
prop: 'custom_fields',
|
||||
matching: ['custom_fields', 'customFields']
|
||||
},
|
||||
{
|
||||
label: 'Notes',
|
||||
prop: 'description',
|
||||
|
@ -102,6 +107,25 @@
|
|||
'value': row[k],
|
||||
'secret': 0
|
||||
});
|
||||
} else if(field === 'custom_fields'){
|
||||
if (row[k] !== undefined && (typeof row[k] === 'string' || row[k] instanceof String) && row[k].length > 1){
|
||||
try {
|
||||
row[k] = JSON.parse(row[k]);
|
||||
for(var i = 0; k < row[k].length; i++){
|
||||
_credential.custom_fields.push({
|
||||
'label': row[k][i].label,
|
||||
'value': row[k][i].value,
|
||||
'secret': row[k][i].secret,
|
||||
'field_type': row[k][i].field_type,
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
// ignore row[k], it contains no valid json data
|
||||
// console.error(e);
|
||||
}
|
||||
} else {
|
||||
_credential.custom_fields = row[k];
|
||||
}
|
||||
} else if(field === 'tags'){
|
||||
if( row[k]) {
|
||||
var tags = row[k].split(',');
|
||||
|
@ -124,7 +148,6 @@
|
|||
$scope.import_fields = [];
|
||||
$scope.inspected_credential = false;
|
||||
$scope.matched = false;
|
||||
$scope.skipFirstRow = false;
|
||||
var file_data = file.data.split(',');
|
||||
file_data = decodeURIComponent(escape(window.atob(file_data[1])));
|
||||
/** global: Papa */
|
||||
|
@ -147,6 +170,12 @@
|
|||
if($scope.matched){
|
||||
$scope.inspectCredential(results.data[1]);
|
||||
}
|
||||
|
||||
for(var j = 0; j < results.data.length; j++){
|
||||
if (results.data[j].length === 1 && results.data[j][0].length === 0) {
|
||||
results.data.splice(j,j);
|
||||
}
|
||||
}
|
||||
$scope.parsed_csv = results.data;
|
||||
$scope.$apply();
|
||||
}
|
||||
|
@ -191,6 +220,7 @@
|
|||
});
|
||||
};
|
||||
|
||||
$scope.skipFirstRow = true;
|
||||
$scope.importing = false;
|
||||
$scope.startCSVImport = function () {
|
||||
$scope.importing = true;
|
||||
|
@ -204,4 +234,4 @@
|
|||
$scope.inspectCredential($scope.parsed_csv[start]);
|
||||
};
|
||||
}]);
|
||||
}());
|
||||
}());
|
||||
|
|
|
@ -63,7 +63,7 @@ angular.module('views/partials/forms/settings/general_settings.html', []).run(['
|
|||
angular.module('views/partials/forms/settings/generic_csv_import.html', []).run(['$templateCache', function($templateCache) {
|
||||
'use strict';
|
||||
$templateCache.put('views/partials/forms/settings/generic_csv_import.html',
|
||||
'<div ng-controller="GenericCsvImportCtrl"><div class="row"><div class="col-xs-12 col-md-3"><div>{{ \'select.csv\' | translate}} <input type="file" file-select accept=".csv" success="csvLoaded"></div><div ng-show="parsed_csv"><span translate="parsed.csv.rows" translate-value-rows="{{ parsed_csv.length }}"></span></div><div ng-show="parsed_csv"><input type="checkbox" ng-model="skipFirstRow" ng-checked="matched"> {{ \'skip.first.row\' | translate}}</div><div ng-show="import_fields.indexOf(\'label\') === -1 && parsed_csv"><b>{{ \'import.csv.label.req\' | translate}}</b></div><div ng-show="import_fields.indexOf(\'label\') !== -1 && parsed_csv"><button class="btn btn-success" ng-disabled="importing" ng-click="startCSVImport()"><i class="fa fa-spinner fa-spin" ng-show="importing"></i> {{ (importing) ? (\'import.importing\' | translate) : (\'import.start\' | translate) }}</button></div><div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div><div class="col-xs-12 col-md-9" ng-show="parsed_csv"><b>{{ \'first.five.lines\' | translate }}</b><br>{{ \'assign.column\' | translate }}<div class="import-table-outter"><table class="import-table"><tr ng-repeat="line in parsed_csv | limitTo:5"><td class="inspect"><i class="fa fa-search" ng-click="inspectCredential(line)" ng-if="($index > 0 && matched && import_fields.length > 0) || ($index >= 0 && !matched && import_fields.length > 0)"></i></td><td ng-repeat="prop in line track by $index">{{line[$index]}}</td></tr><tr ng-repeat="line in parsed_csv | limitTo:1"><td></td><td ng-repeat="prop in line track by $index"><select ng-model="import_fields[$index]" ng-change="updateExample()" ng-options="property.prop as property.label for property in credentialProperties"></select></td></tr></table></div><div ng-show="inspected_credential && import_fields.length > 0"><b>{{ \'example.credential\' | translate}}</b><div credential-template="inspected_credential" show-label></div></div></div></div></div>');
|
||||
'<div ng-controller="GenericCsvImportCtrl"><div class="row"><div class="col-xs-12 col-md-3"><div>{{ \'select.csv\' | translate}} <input type="file" file-select accept=".csv" success="csvLoaded"></div><div ng-show="parsed_csv"><span translate="parsed.csv.rows" translate-value-rows="{{ parsed_csv.length }}"></span></div><div ng-show="parsed_csv"><input type="checkbox" ng-model="skipFirstRow"> {{ \'skip.first.row\' | translate}}</div><div ng-show="import_fields.indexOf(\'label\') === -1 && parsed_csv"><b>{{ \'import.csv.label.req\' | translate}}</b></div><div ng-show="import_fields.indexOf(\'label\') !== -1 && parsed_csv"><button class="btn btn-success" ng-disabled="importing" ng-click="startCSVImport()"><i class="fa fa-spinner fa-spin" ng-show="importing"></i> {{ (importing) ? (\'import.importing\' | translate) : (\'import.start\' | translate) }}</button></div><div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div><div class="col-xs-12 col-md-9" ng-show="parsed_csv"><b>{{ \'first.five.lines\' | translate }}</b><br>{{ \'assign.column\' | translate }}<div class="import-table-outter"><table class="import-table"><tr ng-repeat="line in parsed_csv | limitTo:5"><td class="inspect"><i class="fa fa-search" ng-click="inspectCredential(line)" ng-if="($index > 0 && matched && import_fields.length > 0) || ($index >= 0 && !matched && import_fields.length > 0)"></i></td><td ng-repeat="prop in line track by $index">{{line[$index]}}</td></tr><tr ng-repeat="line in parsed_csv | limitTo:1"><td></td><td ng-repeat="prop in line track by $index"><select ng-model="import_fields[$index]" ng-change="updateExample()" ng-options="property.prop as property.label for property in credentialProperties"></select></td></tr></table></div><div ng-show="inspected_credential && import_fields.length > 0"><b>{{ \'example.credential\' | translate}}</b><div credential-template="inspected_credential" show-label></div></div></div></div></div>');
|
||||
}]);
|
||||
|
||||
angular.module('views/partials/forms/settings/import.html', []).run(['$templateCache', function($templateCache) {
|
||||
|
|
|
@ -119,6 +119,7 @@
|
|||
//Fix NC fucking up our style
|
||||
input[type="checkbox"]{
|
||||
min-height: inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
.alert {
|
||||
padding: 15px;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</span>
|
||||
</div>
|
||||
<div ng-show="parsed_csv">
|
||||
<input type="checkbox" ng-model="skipFirstRow" ng-checked="matched"> {{ 'skip.first.row' | translate}}
|
||||
<input type="checkbox" ng-model="skipFirstRow"> {{ 'skip.first.row' | translate}}
|
||||
</div>
|
||||
<div ng-show="import_fields.indexOf('label') === -1 && parsed_csv">
|
||||
<b>{{ 'import.csv.label.req' | translate}}</b>
|
||||
|
@ -65,4 +65,4 @@
|
|||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue