diff --git a/website/client-old/js/controllers/notificationCtrl.js b/website/client-old/js/controllers/notificationCtrl.js index 21c3afe84e..c955ba6937 100644 --- a/website/client-old/js/controllers/notificationCtrl.js +++ b/website/client-old/js/controllers/notificationCtrl.js @@ -3,18 +3,26 @@ habitrpg.controller('NotificationCtrl', ['$scope', '$rootScope', 'Shared', 'Content', 'User', 'Guide', 'Notification', 'Analytics', 'Achievement', 'Social', 'Tasks', function ($scope, $rootScope, Shared, Content, User, Guide, Notification, Analytics, Achievement, Social, Tasks) { - $scope.yesterDailiesModalOpen = false; - $rootScope.$watch('user.yesterDailies', function (after, before) { - if (!after || after.length === 0 || $scope.yesterDailiesModalOpen) return; + $rootScope.$watch('user', function (after, before) { + runYesterDailies(); + }); + + $rootScope.$on('userUpdated', function (after, before) { + runYesterDailies(); + }); + + function runYesterDailies() { + let userLastCron = moment(User.user.lastCron).local(); + let userDayStart = moment().startOf('day').add({ hours: User.user.preferences.dayStart }); + if (!userLastCron.isBefore(userDayStart)) return; + let dailys = User.user.dailys; + + if (!Boolean(dailys) || dailys.length === 0) return; var yesterDailies = []; - after.forEach(function (taskId) { - var dailyFound = _.find(User.user.dailys, function (task) { - return taskId === task._id; - }); - - if (dailyFound && dailyFound.group.approval && dailyFound.group.approval.requested) return; - if (dailyFound) yesterDailies.push(dailyFound); + dailys.forEach(function (task) { + if (task && task.group.approval && task.group.approval.requested) return; + if (task) yesterDailies.push(task); }); if (yesterDailies.length === 0) return; @@ -43,18 +51,11 @@ habitrpg.controller('NotificationCtrl', }); $scope.ageDailies = function () { - Tasks.ageDailies() - .then(function () { - $scope.yesterDailiesModalOpen = false; - User.sync(); - }); + User.runCron(); }; }], - }) - .result.catch(function() { - $scope.yesterDailiesModalOpen = false; }); - }); + } $rootScope.$watch('user.stats.hp', function (after, before) { if (after <= 0){ diff --git a/website/client-old/js/services/userServices.js b/website/client-old/js/services/userServices.js index dd42725b2b..d0ec3b89cf 100644 --- a/website/client-old/js/services/userServices.js +++ b/website/client-old/js/services/userServices.js @@ -416,6 +416,16 @@ angular.module('habitrpg') }); }, + runCron: function () { + $http({ + method: "POST", + url: 'api/v3/cron', + }) + .then(function (response) { + sync(); + }) + }, + setCustomDayStart: function (dayStart) { $http({ method: "POST", diff --git a/website/server/controllers/api-v3/cron.js b/website/server/controllers/api-v3/cron.js index 6d69ab3eb6..32ed99039a 100644 --- a/website/server/controllers/api-v3/cron.js +++ b/website/server/controllers/api-v3/cron.js @@ -12,9 +12,11 @@ let api = {}; */ api.cron = { method: 'POST', - url: '/debug/cron', + url: '/cron', middlewares: [authWithHeaders(), cron], async handler (req, res) { res.respond(200, {}); }, }; + +module.exports = api; diff --git a/website/views/shared/tasks/edit/advanced_options.jade b/website/views/shared/tasks/edit/advanced_options.jade index 94c71a6f39..2a87683713 100644 --- a/website/views/shared/tasks/edit/advanced_options.jade +++ b/website/views/shared/tasks/edit/advanced_options.jade @@ -13,7 +13,7 @@ div(ng-if='(task.type !== "reward") || task.userId || (!obj.auth && obj.purchase fieldset.option-group.advanced-option(ng-if='task.type === "daily" && task._edit._advanced') .form-group - input(type='checkbox', ng-model='task._edit.yesterDaily') + input(type='checkbox', ng-model='task._edit.yesterDaily', ng-disabled='$state.includes("options.social.challenges") || $state.includes("options.social.groups")') legend.option-title a.hint(href='http://habitica.wikia.com/wiki/Task_Alias', target='_blank', popover-trigger='mouseenter', popover="{{::env.t('yesterDailiesDescription')}}")=env.t('yesterDailiesOptionTitle')