diff --git a/lib/classes/databox/field.php b/lib/classes/databox/field.php
index 944b8d04df..fdcfeed475 100644
--- a/lib/classes/databox/field.php
+++ b/lib/classes/databox/field.php
@@ -970,8 +970,9 @@ class databox_field implements cache_cacheableInterface
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->closeCursor();
- if ($row)
- $sorter = (int) $row['sorter'];
+ if ($row) {
+ $sorter = max(1, (int) $row['sorter']);
+ }
$sql = "INSERT INTO metadatas_structure
(`id`, `name`, `src`, `readonly`, `indexable`, `type`, `tbranch`,
diff --git a/templates/web/admin/fields/templates.html.twig b/templates/web/admin/fields/templates.html.twig
index 56f71ed4bf..f7fbeac9c5 100644
--- a/templates/web/admin/fields/templates.html.twig
+++ b/templates/web/admin/fields/templates.html.twig
@@ -4,7 +4,7 @@
@@ -248,7 +248,7 @@
- <%= position + 1 %>
+ <%= position %>
|
diff --git a/www/scripts/apps/admin/fields/app.js b/www/scripts/apps/admin/fields/app.js
index 64e039fe2f..0f03583149 100644
--- a/www/scripts/apps/admin/fields/app.js
+++ b/www/scripts/apps/admin/fields/app.js
@@ -24,12 +24,13 @@ define([
DcFieldsCollection, FieldListView, SaveView, FieldErrorView, ErrorManager) {
var initialize = function() {
AdminFieldApp = {
- $window : $(window),
- $scope : $("#admin-field-app"),
- $top : $(".row-top", this.$scope),
- $bottom : $(".row-bottom", this.$scope),
- $leftBlock : $(".left-block", this.$bottom),
- $rightBlock : $(".right-block", this.$bottom),
+ $window : $(window),
+ $scope : $("#admin-field-app"),
+ $top : $(".row-top", this.$scope),
+ $bottom : $(".row-bottom", this.$scope),
+ $leftBlock : $(".left-block", this.$bottom),
+ $rightBlock : $(".right-block", this.$bottom),
+ fieldsToDelete : [],
resizeListBlock: function () {
var listBlock = $(".list-block", AdminFieldApp.$leftBlock);
listBlock.height(AdminFieldApp.$window.height() - listBlock.offset().top - 10);
@@ -92,7 +93,9 @@ define([
AdminFieldApp.$window.trigger("resize");
// click on first item list
- _.first(AdminFieldApp.fieldListView.itemViews).clickAction().animate();
+ if (AdminFieldApp.fieldListView.itemViews.length > 0 ) {
+ _.first(AdminFieldApp.fieldListView.itemViews).clickAction().animate();
+ }
}
);
};
diff --git a/www/scripts/apps/admin/fields/views/create.js b/www/scripts/apps/admin/fields/views/create.js
index 33eda3a399..0e34e43575 100644
--- a/www/scripts/apps/admin/fields/views/create.js
+++ b/www/scripts/apps/admin/fields/views/create.js
@@ -122,10 +122,7 @@ define([
"label_fr" : $("#new-label_fr", this.$el).val(),
"label_de" : $("#new-label_de", this.$el).val(),
"label_nl" : $("#new-label_nl", this.$el).val(),
- "multi": $("#new-multivalued", this.$el).is(":checked"),
- "sorter": AdminFieldApp.fieldsCollection.max(function(model) {
- return model.get("sorter");
- }).get("sorter") + 1
+ "multi": $("#new-multivalued", this.$el).is(":checked")
});
field.save(null, {
diff --git a/www/scripts/apps/admin/fields/views/edit.js b/www/scripts/apps/admin/fields/views/edit.js
index b0f0bdff0c..04e5480492 100644
--- a/www/scripts/apps/admin/fields/views/edit.js
+++ b/www/scripts/apps/admin/fields/views/edit.js
@@ -183,23 +183,10 @@ define([
modalView.render();
modalView.on("modal:confirm", function() {
- self.model.destroy({
- success: function(model, response) {
- AdminFieldApp.fieldListView.collection.remove(self.model);
- self._selectModelView(index);
-
- new AlertView({alert: "info", message: i18n.t("deleted_success", {
- postProcess: "sprintf",
- sprintf: [model.get("name")]
- })
- }).render();
- },
- error: function(xhr, textStatus, errorThrown) {
- new AlertView({
- alert: "error", message: '' !== xhr.responseText ? xhr.responseText : i18n.t("something_wrong")
- }).render();
- }
- });
+ AdminFieldApp.fieldsToDelete.push(self.model);
+ AdminFieldApp.fieldListView.collection.remove(self.model);
+ self._selectModelView(index);
+ AdminFieldApp.saveView.updateStateButton();
});
return this;
diff --git a/www/scripts/apps/admin/fields/views/list.js b/www/scripts/apps/admin/fields/views/list.js
index 10b54efe5c..6a911e5d9b 100644
--- a/www/scripts/apps/admin/fields/views/list.js
+++ b/www/scripts/apps/admin/fields/views/list.js
@@ -30,6 +30,7 @@ define([
// rerender whenever there is a change on the collection
this.collection.bind("reset", this.render, this);
this.collection.bind("add", this.render, this);
+ this.collection.bind("remove", this._onRemove, this);
this.collection.bind("remove", this.render, this);
AdminFieldApp.errorManager.on('add-error', function(error) {
@@ -112,15 +113,27 @@ define([
return this;
},
+ _onRemove : function (model) {
+ var models = [];
+ this.collection.each(function(m) {
+ if (m.get("sorter") > model.get("sorter")) {
+ m.set("sorter", m.get("sorter") - 1);
+ }
+
+ models.push(m);
+ });
+
+ this.collection.reset(models);
+ },
updateSortAction: function(event, model, ui) {
var newPosition = ui.item.index();
this.collection.remove(model, {silent: true});
this.collection.each(function (model, index) {
var ordinal = index;
- if (index >= newPosition) ordinal += 1;
+ if (index >= newPosition) ordinal += 2; else ordinal += 1;
model.set({'sorter': ordinal}, {silent: true});
});
- model.set({'sorter': newPosition}, {silent: true});
+ model.set({'sorter': newPosition + 1}, {silent: true});
this.collection.add(model, {at: newPosition});
this.itemViews[0].animate(Math.abs(ui.firstItemPosition));
diff --git a/www/scripts/apps/admin/fields/views/save.js b/www/scripts/apps/admin/fields/views/save.js
index 6645f123f1..e258fefaf7 100644
--- a/www/scripts/apps/admin/fields/views/save.js
+++ b/www/scripts/apps/admin/fields/views/save.js
@@ -37,24 +37,41 @@ define([
if (this._isModelDesync()) {
this._loadingState(true);
- AdminFieldApp.fieldsCollection.save({
- success: function(fields) {
- // reset collection with new one
- AdminFieldApp.fieldsCollection.reset(fields);
+ $.when.apply($, _.map(AdminFieldApp.fieldsToDelete, function(m){
+ return m.destroy({
+ success: function(model, response) {
+ AdminFieldApp.fieldsToDelete = _.filter(AdminFieldApp.fieldsToDelete, function(m){
+ return model.get("id") !== m.get("id");
+ });
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ new AlertView({
+ alert: "error", message: '' !== xhr.responseText ? xhr.responseText : i18n.t("something_wrong")
+ }).render();
+ }
+ });
+ })).done(
+ function() {
+ AdminFieldApp.fieldsCollection.save({
+ success: function(fields) {
+ // reset collection with new one
+ AdminFieldApp.fieldsCollection.reset(fields);
- new AlertView({
- alert: "success",
- message: i18n.t("fields_save")
- }).render();
- },
- error: function(xhr, textStatus, errorThrown) {
- new AlertView({
- alert: "error", message: '' !== xhr.responseText ? xhr.responseText : i18n.t("something_wrong")
- }).render();
+ new AlertView({
+ alert: "success",
+ message: i18n.t("fields_save")
+ }).render();
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ new AlertView({
+ alert: "error", message: '' !== xhr.responseText ? xhr.responseText : i18n.t("something_wrong")
+ }).render();
+ }
+ }).done(function() {
+ self._loadingState(false);
+ });
}
- }).done(function() {
- self._loadingState(false);
- });
+ );
}
return this;
diff --git a/www/skins/admin/css/fields.css b/www/skins/admin/css/fields.css
index d79351d789..a6d7541734 100644
--- a/www/skins/admin/css/fields.css
+++ b/www/skins/admin/css/fields.css
@@ -53,6 +53,7 @@
#admin-field-app #collection-fields li table {
table-layout: fixed;
width: 100%;
+ height: 100%;
}
#admin-field-app #collection-fields li .field-name {
@@ -221,6 +222,10 @@
font-weight: bold
}
+#admin-field-app .save-all{
+ padding: 15px;
+}
+
#admin-field-app .overlay {
zoom: 1;
filter: alpha(opacity=50);