mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 06:37:23 +01:00
[#1444] implement delete-tag (incl server route). run tags-cleanup migration
This commit is contained in:
16
migrations/20130908_cleanup_corrupt_tags.js
Normal file
16
migrations/20130908_cleanup_corrupt_tags.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//mongo habitrpg ./node_modules/lodash/lodash.js migrations/20130908_cleanup_corrupt_tags.js
|
||||||
|
|
||||||
|
// Racer was notorious for adding duplicates, randomly deleting documents, etc. Once we pull the plug on old.habit,
|
||||||
|
// run this migration to cleanup all the corruption
|
||||||
|
|
||||||
|
db.users.find().forEach(function(user){
|
||||||
|
user.tags = _.filter(user.tags, (function(t) {
|
||||||
|
return !!t ? t.id : false;
|
||||||
|
}));
|
||||||
|
|
||||||
|
try {
|
||||||
|
db.users.update({_id:user._id}, {$set:{tags:user.tags}});
|
||||||
|
} catch(e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
habitrpg.controller("FiltersCtrl", ['$scope', '$rootScope', 'User',
|
habitrpg.controller("FiltersCtrl", ['$scope', '$rootScope', 'User', 'API_URL', '$http',
|
||||||
function($scope, $rootScope, User) {
|
function($scope, $rootScope, User, API_URL, $http) {
|
||||||
var user = User.user;
|
var user = User.user;
|
||||||
$scope._editing = false;
|
$scope._editing = false;
|
||||||
|
|
||||||
@@ -30,29 +30,17 @@ habitrpg.controller("FiltersCtrl", ['$scope', '$rootScope', 'User',
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// $scope.remove = function(tag, $index){
|
$scope['delete'] = function(tag, $index){
|
||||||
//
|
delete user.filters[tag.id];
|
||||||
// /*
|
user.tags.splice($index,1);
|
||||||
// something got corrupted, let's clear the corrupt tags
|
// remove tag from all tasks
|
||||||
// FIXME we can remove this once Angular has been live for a while
|
_.each(user.tasks, function(task) {
|
||||||
// */
|
delete user.tasks[task.id].tags[tag.id];
|
||||||
// if (!tag.id) {
|
});
|
||||||
// user.tags = _.filter(user.tags, (function(t) {
|
$http['delete'](API_URL + '/api/v1/user/tags/' + tag.id)
|
||||||
// return t != null ? t.id : false;
|
.error(function(data){
|
||||||
// }));
|
alert(data);
|
||||||
// user.filters = {};
|
})
|
||||||
// return;
|
}
|
||||||
// }
|
|
||||||
//
|
|
||||||
// delete user.filters[tag.id];
|
|
||||||
//
|
|
||||||
// splice(user.tags,$index,1);
|
|
||||||
//
|
|
||||||
// // remove tag from all tasks
|
|
||||||
// _.each(user.tasks, function(task) {
|
|
||||||
// delete user.tasks[task.id].tags[tag.id];
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
|
|||||||
@@ -594,6 +594,30 @@ api.buyGems = function(req, res) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
Tags
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
api.deleteTag = function(req, res){
|
||||||
|
var user = res.locals.user;
|
||||||
|
var i = _.findIndex(user.tags, {id:req.params.tid});
|
||||||
|
if (~i) {
|
||||||
|
var tag = user.tags[i];
|
||||||
|
delete user.filters[tid];
|
||||||
|
user.tags.splice(i,1);
|
||||||
|
// remove tag from all tasks
|
||||||
|
_.each(user.tasks, function(task) {
|
||||||
|
delete user.tasks[task.id].tags[tag.id];
|
||||||
|
});
|
||||||
|
user.save(function(err,saved){
|
||||||
|
res.send(200);
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.json(400, {err:'Tag not found'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
Batch Update
|
Batch Update
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ router.post('/user/buy-gems', auth.auth, user.buyGems);
|
|||||||
router.post('/user/reset', auth.auth, user.reset);
|
router.post('/user/reset', auth.auth, user.reset);
|
||||||
router['delete']('/user', auth.auth, user['delete']);
|
router['delete']('/user', auth.auth, user['delete']);
|
||||||
|
|
||||||
|
/* Tags */
|
||||||
|
router['delete']('/user/tags/:tid', auth.auth, user.deleteTag);
|
||||||
|
|
||||||
/* Groups*/
|
/* Groups*/
|
||||||
router.get('/groups', auth.auth, groups.getGroups);
|
router.get('/groups', auth.auth, groups.getGroups);
|
||||||
router.post('/groups', auth.auth, groups.createGroup);
|
router.post('/groups', auth.auth, groups.createGroup);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
.input-append.option-group.tag-editing(ng-show='_editing && !tag.challenge')
|
.input-append.option-group.tag-editing(ng-show='_editing && !tag.challenge')
|
||||||
input.input.input-small.option-content.tag-editing-pill(type='text', ng-model='tag.name')
|
input.input.input-small.option-content.tag-editing-pill(type='text', ng-model='tag.name')
|
||||||
span.add-on.tag-editing-pill
|
span.add-on.tag-editing-pill
|
||||||
a.pull-right(x-bind='remove(tag,$index)', ng-click='notPorted()')
|
a.pull-right(ng-click='delete(tag,$index)')
|
||||||
i.icon-trash
|
i.icon-trash
|
||||||
a(ng-hide='_editing && !tag.challenge', data-tag-id='{{tag.id}}', ng-click='toggleFilter(tag)') {{tag.name}}
|
a(ng-hide='_editing && !tag.challenge', data-tag-id='{{tag.id}}', ng-click='toggleFilter(tag)') {{tag.name}}
|
||||||
li
|
li
|
||||||
|
|||||||
Reference in New Issue
Block a user