Skip to content

Commit

Permalink
Metadata create page - allow to configure the metadata template / gro…
Browse files Browse the repository at this point in the history
…up to select by default (#108)

* Metadata create page - allow to configure the metadata template / group to select by default

* Preferred group and template / Improvements. (#27)

* Preferred group & template / resourceType is always an array

See https://github.com/titellus/core-geonetwork/blob/4.0.x/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java#L526.

* Preferred group & template / Get setting value from gnConfig.

* Preferred group & template / GroupComboo directive no use a standard ng-options so the model is a group object and we update groupOwner with the id of the currently selected model group. By default, if ownerGroup set, select it among the list of groups, if not select the first one.

* Preferred group & template / Fix for portal group config.

* Preferred group & template / Set default group in directory and import panel.

Co-authored-by: Jose García <josegar74@gmail.com>
  • Loading branch information
fxprunayre and josegar74 authored Jan 27, 2022
1 parent 0e759c7 commit ed10bf0
Show file tree
Hide file tree
Showing 16 changed files with 303 additions and 165 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -298,40 +298,47 @@
var optional = scope.optional != 'false' ? true : false;
var setDefaultValue = attrs['setDefaultValue'] == 'false' ? false : true;
scope.disabled = scope.disabled ? true : false;
scope.selectedGroup = null;
scope.$watch('selectedGroup', function(n, o) {
if (n && (n.hasOwnProperty('id') || n.hasOwnProperty('@id'))) {
scope.ownerGroup = scope.selectedGroup['@id'] || scope.selectedGroup.id;
}
});

$http.get(url, {cache: true}).
success(function(data) {
//data-ng-if is not correctly updating groups.
//So we do the filter here
if (scope.excludeSpecialGroups) {
scope.groups = [];
angular.forEach(data, function(g) {
if (g.id > 1) {
scope.groups.push(g);
}
});
} else {
scope.groups = data;
}
success(function(data) {
//data-ng-if is not correctly updating groups.
//So we do the filter here
if (scope.excludeSpecialGroups) {
scope.groups = [];
angular.forEach(data, function(g) {
if (g.id > 1) {
scope.groups.push(g);
}
});
} else {
scope.groups = data;
}

if (optional) {
scope.groups.unshift({
id: 'undefined',
name: ''
});
}
if (optional) {
scope.groups.unshift({
id: undefined,
name: ''
});
}

// Select by default the first group.
if (setDefaultValue && (
angular.isUndefined(scope.ownerGroup) ||
scope.ownerGroup === '' ||
scope.ownerGroup === 'undefined' ||
scope.ownerGroup === null) && data) {
// Requires to be converted to string, otherwise
// angularjs adds empty non valid option
scope.ownerGroup = scope.groups[0].id + "";
if (angular.isNumber(scope.ownerGroup)) {
scope.selectedGroup = scope.groups.find(function(v) {
return v.id === scope.ownerGroup || v['@id'] === scope.ownerGroup
});

if (scope.selectedGroup === undefined) {
scope.selectedGroup = scope.groups[0];
}
});
} else if (setDefaultValue) {
scope.selectedGroup = scope.groups[0];
}
});
}
};
}])
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<div class="dynamic-list">
<select class="form-control " data-ng-model="ownerGroup" data-ng-disabled="disabled">
<option data-ng-repeat="g in groups | orderBy:'name'" value="{{g['@id'] || g.id}}"
data-ng-selected="ownerGroup == (g['@id'] ? g['@id'] : g.id)">
{{g.label[lang]|empty:g.name}}
</option>
<select class="form-control"
data-ng-options="g as g.label[lang]|empty:g.name for g in groups | orderBy:'name'"
data-ng-model="selectedGroup"
data-ng-disabled="disabled">
</select>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -1992,4 +1992,41 @@
}
};
});

/**
* Directive to display a metadata selector, that accepts a search object
* to filter the metadata to display in the selector.
*/
module.directive('gnMetadataSelector', [
function() {
return {
restrict: 'A',
replace: true,
scope: {
uuid: '=gnMetadataSelector', // Model property with the metadata uuid selected
searchObj: '=', // ElasticSearch search object
md: '=', // Metadata object selected
elementName: '@' // Input element name for the uuid control
},
templateUrl: '../../catalog/components/utility/' +
'partials/metadataselector.html',
link: function(scope, element, attrs) {
scope.selectedMetadata = null;

scope.searchObj.params = angular.extend({},
scope.searchObj.defaultParams);

scope.updateParams = function() {
scope.searchObj.params.any = scope.searchObj.any;
};

scope.selectMetadata = function(md) {
scope.selectedMetadata = md;
scope.uuid = md.uuid;
}

}
};
}
]);
})();
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<div>
<div class="input-group dropdown" data-ng-search-form="">
<input class="form-control"
data-ng-model="uuid"
id="{{elementName}}"
name="{{elementName}}"/>
<span class="input-group-addon">
{{md.resourceTitleObject.default}}
</span>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
data-ng-click="updateParams();triggerSearch();" type="text">
<i class="fa fa-search"/>
<span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-right">
<li>
<input class="form-control"
onClick="window.event.stopPropagation()"
data-ng-change="updateParams();triggerSearch();" type="text"
data-toggle="dropdown"
data-ng-model="searchObj.any"
data-ng-model-options="{debounce: 200}"
placeholder="{{'search' | translate}}"/>
</li>
<li data-ng-repeat="md in searchResults.records">
<a href=""
data-ng-click="selectMetadata(md)">
{{md.resourceTitleObject.default}}
</a>
</li>
</ul>
</div>
</div>
</div>
36 changes: 13 additions & 23 deletions web-ui/src/main/resources/catalog/js/admin/CSWSettingsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,29 +28,6 @@
var module = angular.module('gn_csw_settings_controller',
[]);


module.controller('GnCSWSearchServiceRecordController', [
'$scope', 'gnGlobalSettings',
function($scope, gnGlobalSettings) {
$scope.searchObj = {
internal: true,
any: '',
defaultParams: {
any: '',
from: 1,
to: 50,
type: 'service',
sortBy: 'resourceTitleObject.default.keyword',
sortOrder: 'asc'
}
};
$scope.searchObj.params = angular.extend({},
$scope.searchObj.defaultParams);
$scope.updateParams = function() {
$scope.searchObj.params.any = $scope.searchObj.any;
};
}]);

/**
* GnCSWSettingsController provides management interface
* for CSW settings.
Expand All @@ -67,6 +44,19 @@
$scope.cswSettings = {};
$scope.cswServiceRecord = null;

$scope.serviceRecordSearchObj = {
internal: true,
any: '',
defaultParams: {
any: '',
from: 1,
to: 50,
type: 'service',
sortBy: 'resourceTitleObject.default.keyword',
sortOrder: 'asc'
}
};

/**
* CSW element set name (an array of xpath).
*/
Expand Down
16 changes: 15 additions & 1 deletion web-ui/src/main/resources/catalog/js/admin/SourcesController.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,23 @@
$scope.filter = {
types: {'portal': true, 'subportal': true, 'externalportal': true, 'harvester': true}
};

$scope.serviceRecordSearchObj = {
internal: true,
any: '',
defaultParams: {
any: '',
from: 1,
to: 50,
type: 'service',
sortBy: 'resourceTitleObject.default.keyword',
sortOrder: 'asc'
}
};

$scope.selectSource = function(source) {
source.uiConfig = source.uiConfig && source.uiConfig.toString();
source.groupOwner = source.groupOwner != null ? source.groupOwner + '' : null;
source.groupOwner = source.groupOwner || null;
$scope.source = source;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,60 @@
module.controller('GnSystemSettingsController', [
'$scope', '$http', '$rootScope', '$translate', '$location',
'gnUtilityService', '$timeout', 'gnGlobalSettings',
'gnConfig', 'gnESClient', 'Metadata',
function($scope, $http, $rootScope, $translate, $location,
gnUtilityService, $timeout, gnGlobalSettings) {
gnUtilityService, $timeout, gnGlobalSettings,
gnConfig, gnESClient, Metadata) {

$scope.selectTemplate = function (setting, md) {
setting.value = md.uuid;
$scope.defaultMetadataTemplate = md;
};

// Metadata template to select by default when
// creating new metadata
$scope.defaultMetadataTemplate = null;

$scope.metadataTemplateSearchObj = {
internal: true,
any: '',
defaultParams: {
any: '',
from: 1,
to: 50,
isTemplate: 'y',
sortBy: 'resourceTitleObject.default.keyword',
sortOrder: 'asc'
}
};

function loadDefaultMetadataTemplate() {
var preferredTemplate = gnConfig['system.metadatacreate.preferredTemplate'];

if (preferredTemplate){
var query =
{"query": {
"term": {
"uuid": {
"value": preferredTemplate
}
}
}, "from": 0, "size": 1};

gnESClient.search(query).then(function(data) {
angular.forEach(data.hits.hits, function(record) {
var md = new Metadata(record);
$scope.defaultMetadataTemplate = md;
});
});
}
}

$scope.$watchCollection('settings', function(n, o){
if (n != o) {
loadDefaultMetadataTemplate();
}
});

$scope.settings = [];
$scope.initalSettings = [];
Expand Down
Loading

0 comments on commit ed10bf0

Please sign in to comment.