mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 06:37:23 +01:00
Thehollidayinn/group plans part 2 (#8262)
* Added all ui components back * Added group ui items back and initial group approval directive * Added approval list view with approving functionality * Added notification display for group approvals * Fixed linting issues * Removed expectation from beforeEach * Moved string to locale * Added per use group plan for stripe * Added tests for stripe group plan upgrade * Removed paypal option * Abstract sub blocks. Hit group sub block from user settings page. Added group subscriptin beneifts display * Fixed lint issue * Added pricing and adjusted styles * Moved text to translations * Added group email types * Fixed typo * Fixed group plan abstraction and other style issues * Fixed email unit test * Added type to group plan to filter our group plans * Removed dev protection from routes * Removed hard coding and fixed upgrade plan * Added error when group has subscription and tries to remove * Fixed payment unit tests * Added custom string and moved subscription check up in the logic * Added ability for old leader to delete subscription the created * Allowed old guild leader to edit their group subscription * Fixed linting and tests * Added group sub page to user sub settings * Added approval and group tasks requests back. Hid user group sub on profile * Added group tasks sync after adding to allow for editing * Fixed promise chain when resolving group * Added approvals to group promise chain * Ensured compelted group todos are not delted at cron * Updated copy and other minor styles * Added group field to tags and recolored group tag. * Added chat message when task is claimed * Preventing task scoring when approval is needed * Added approval requested indicator * Updated column with for tasks on group page * Added checklist sync on assign * Added sync for checklist items * Added checkilist sync when task is updated * Added checklist sync remove * Sanatized group tasks when updated * Fixed lint issues * Added instant scoring of approved task * Added task modal * Fixed editing of challenge and group tasks * Added cancel button * Added add new checklist option to update sync * Added remove for checklist * Added checklist update * Added difference check and sync for checklist if there is a diff * Fixed task syncing * Fixed linting issues * Fixed styles and karma tests * Fixed minor style issues * Fixed obj transfer on scope * Fixed broken tests * Added new benefits page * Updated group page styles * Updated benefits page style * Added translations * Prevented sync with empty trask list * Added task title to edit modal * Added new group plans page and upgrade redirect * Added group plans redirect to upgrade * Fixed party home page being hidden and home button click * Fixed dynamic changing of task status and grey popup * Fixed tag editing * Hid benifites information if group has subscription * Added quotes to task name * Fixed issue with assigning multiple users * Added new group plans ctrl * Hid menu from public guilds * Fixed task sync issue * Updated placeholder for assign field * Added correct cost to subscribe details * Hid create, edit, delete task options from non group leaders * Prevented some front end modifications to group tasks * Hid tags option from group original task * Added refresh for approvals and group tasks * Prepend new group tasks * Fix last checklist item sync * Fixed casing issue with tags * Added claimed by message on hover * Prevent user from deleting assigned task * Added single route for group plan sign up and payments * Abstracted stripe payments and added initial tests * Abstracted amazon and added initial tests * Fixed create group message * Update group id check and return group * Updated to use the new returned group * Fixed linting and promise issues * Fixed broken leave test after merge issue * Fixed undefined approval error and editing/deleting challenge tasks * Add pricing to group plans, removed confirmation, and fixed redirect after payment * Updated group plan cost text
This commit is contained in:
@@ -1,17 +1,65 @@
|
||||
habitrpg.controller('GroupTasksCtrl', ['$scope', 'Shared', 'Tasks', 'User', function ($scope, Shared, Tasks, User) {
|
||||
$scope.editTask = Tasks.editTask;
|
||||
function handleGetGroupTasks (response) {
|
||||
var group = $scope.obj;
|
||||
|
||||
var tasks = response.data.data;
|
||||
|
||||
if (tasks.length === 0) return;
|
||||
|
||||
// @TODO: We need to get the task information from createGroupTasks rather than resyncing
|
||||
group['habits'] = [];
|
||||
group['dailys'] = [];
|
||||
group['todos'] = [];
|
||||
group['rewards'] = [];
|
||||
|
||||
tasks.forEach(function (element, index, array) {
|
||||
if (!$scope.group[element.type + 's']) $scope.group[element.type + 's'] = [];
|
||||
$scope.group[element.type + 's'].unshift(element);
|
||||
})
|
||||
|
||||
$scope.loading = false;
|
||||
};
|
||||
|
||||
$scope.refreshTasks = function () {
|
||||
$scope.loading = true;
|
||||
Tasks.getGroupTasks($scope.group._id)
|
||||
.then(handleGetGroupTasks);
|
||||
};
|
||||
|
||||
/*
|
||||
* Task Edit functions
|
||||
*/
|
||||
|
||||
$scope.toggleBulk = Tasks.toggleBulk;
|
||||
$scope.cancelTaskEdit = Tasks.cancelTaskEdit;
|
||||
|
||||
$scope.editTask = function (task, user, taskStatus) {
|
||||
Tasks.editTask(task, user, taskStatus, $scope);
|
||||
};
|
||||
|
||||
function addTask (listDef, taskTexts) {
|
||||
taskTexts.forEach(function (taskText) {
|
||||
var task = Shared.taskDefaults({text: taskText, type: listDef.type});
|
||||
|
||||
//If the group has not been created, we bulk add tasks on save
|
||||
var group = $scope.obj;
|
||||
if (group._id) Tasks.createGroupTasks(group._id, task);
|
||||
if (!group[task.type + 's']) group[task.type + 's'] = [];
|
||||
group[task.type + 's'].unshift(task);
|
||||
if (!group._id) return;
|
||||
|
||||
Tasks.createGroupTasks(group._id, task)
|
||||
.then(function () {
|
||||
// Set up default group info on task. @TODO: Move this to Tasks.createGroupTasks
|
||||
task.group = {
|
||||
id: group._id,
|
||||
approval: {required: false, approved: false, requested: false},
|
||||
assignedUsers: [],
|
||||
};
|
||||
|
||||
if (!group[task.type + 's']) group[task.type + 's'] = [];
|
||||
group[task.type + 's'].unshift(task);
|
||||
|
||||
return Tasks.getGroupTasks($scope.group._id);
|
||||
})
|
||||
.then(handleGetGroupTasks);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -28,8 +76,21 @@ habitrpg.controller('GroupTasksCtrl', ['$scope', 'Shared', 'Tasks', 'User', func
|
||||
};
|
||||
|
||||
$scope.saveTask = function(task, stayOpen, isSaveAndClose) {
|
||||
Tasks.saveTask (task, stayOpen, isSaveAndClose);
|
||||
Tasks.updateTask(task._id, task);
|
||||
// Check if we have a lingering checklist that the enter button did not trigger on
|
||||
var lastIndex = task._edit.checklist.length - 1;
|
||||
var lastCheckListItem = task._edit.checklist[lastIndex];
|
||||
if (lastCheckListItem && !lastCheckListItem.id && lastCheckListItem.text) {
|
||||
Tasks.addChecklistItem(task._id, lastCheckListItem)
|
||||
.then(function (response) {
|
||||
task._edit.checklist[lastIndex] = response.data.data.checklist[lastIndex];
|
||||
task.checklist[lastIndex] = response.data.data.checklist[lastIndex];
|
||||
Tasks.saveTask(task, stayOpen, isSaveAndClose);
|
||||
Tasks.updateTask(task._id, task);
|
||||
});
|
||||
} else {
|
||||
Tasks.saveTask (task, stayOpen, isSaveAndClose);
|
||||
Tasks.updateTask(task._id, task);
|
||||
}
|
||||
};
|
||||
|
||||
$scope.shouldShow = function(task, list, prefs){
|
||||
@@ -63,9 +124,23 @@ habitrpg.controller('GroupTasksCtrl', ['$scope', 'Shared', 'Tasks', 'User', func
|
||||
*/
|
||||
$scope.addChecklist = Tasks.addChecklist;
|
||||
|
||||
$scope.addChecklistItem = Tasks.addChecklistItemToUI;
|
||||
$scope.addChecklistItem = function addChecklistItemToUI(task, $event, $index) {
|
||||
if (task._edit.checklist[$index].justAdded) return;
|
||||
task._edit.checklist[$index].justAdded = true;
|
||||
if (!task._edit.checklist[$index].id) {
|
||||
Tasks.addChecklistItem (task._id, task._edit.checklist[$index])
|
||||
.then(function (response) {
|
||||
task._edit.checklist[$index] = response.data.data.checklist[$index];
|
||||
})
|
||||
}
|
||||
Tasks.addChecklistItemToUI(task, $event, $index);
|
||||
};
|
||||
|
||||
$scope.removeChecklistItem = Tasks.removeChecklistItemFromUI;
|
||||
$scope.removeChecklistItem = function (task, $event, $index, force) {
|
||||
if (!task._edit.checklist[$index].id) return;
|
||||
Tasks.removeChecklistItem (task._id, task._edit.checklist[$index].id);
|
||||
Tasks.removeChecklistItemFromUI(task, $event, $index, force);
|
||||
};
|
||||
|
||||
$scope.swapChecklistItems = Tasks.swapChecklistItems;
|
||||
|
||||
@@ -78,4 +153,34 @@ habitrpg.controller('GroupTasksCtrl', ['$scope', 'Shared', 'Tasks', 'User', func
|
||||
//@TODO: Currently the api save of the task is separate, so whenever we need to save the task we need to call the respective api
|
||||
Tasks.updateTask(task._id, task);
|
||||
};
|
||||
|
||||
$scope.checkGroupAccess = function (group) {
|
||||
if (!group || !group.leader) return true;
|
||||
if (User.user._id !== group.leader._id) return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
/*
|
||||
* Task Details
|
||||
*/
|
||||
$scope.taskPopover = function (task) {
|
||||
if (task.popoverOpen) return '';
|
||||
|
||||
var content = task.notes;
|
||||
|
||||
if ($scope.group) {
|
||||
var memberIdToProfileNameMap = _.object(_.map($scope.group.members, function(item) {
|
||||
return [item.id, item.profile.name]
|
||||
}));
|
||||
|
||||
var claimingUsers = [];
|
||||
task.group.assignedUsers.forEach(function (userId) {
|
||||
claimingUsers.push(memberIdToProfileNameMap[userId]);
|
||||
})
|
||||
|
||||
if (claimingUsers.length > 0) content += window.env.t('claimedBy', {claimingUsers: claimingUsers.join(', ')});
|
||||
}
|
||||
|
||||
return content;
|
||||
};
|
||||
}]);
|
||||
|
||||
Reference in New Issue
Block a user