Skip to content

Commit 71e7f60

Browse files
DIS-51: feat: Handle progress on enroll / unenroll
-When users enroll, unsure any progress that matches the campaign milestones and start and end dates is added. -Ensure progress is cleared on unenroll
1 parent a2504c3 commit 71e7f60

File tree

4 files changed

+121
-1
lines changed

4 files changed

+121
-1
lines changed

code/web/Drivers/Koha.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ public function getCheckouts(User $patron): array {
475475
$curCheckout->sourceId = $curRow['issue_id'];
476476
$allIssueIds[] = $curRow['issue_id'];
477477
$curCheckout->userId = $patron->id;
478-
478+
$curCheckout->checkoutDate = strtotime($curRow['issuedate']);
479479
$curCheckout->recordId = $curRow['biblionumber'];
480480
$curCheckout->shortId = $curRow['biblionumber'];
481481
$curCheckout->barcode = $curRow['barcode'];

code/web/interface/themes/responsive/js/aspen.js

+3
Original file line numberDiff line numberDiff line change
@@ -8372,6 +8372,9 @@ AspenDiscovery.Account = (function () {
83728372
return false;
83738373
},
83748374
enroll: function (campaignId, userId) {
8375+
AspenDiscovery.Account.reloadHolds();
8376+
AspenDiscovery.Account.reloadCheckouts();
8377+
83758378
if (Globals.loggedIn) {
83768379
var url = Globals.path + "/MyAccount/AJAX";
83778380
var params = {

code/web/interface/themes/responsive/js/aspen/account.js

+3
Original file line numberDiff line numberDiff line change
@@ -2853,6 +2853,9 @@ AspenDiscovery.Account = (function () {
28532853
return false;
28542854
},
28552855
enroll: function (campaignId, userId) {
2856+
AspenDiscovery.Account.reloadHolds();
2857+
AspenDiscovery.Account.reloadCheckouts();
2858+
28562859
if (Globals.loggedIn) {
28572860
var url = Globals.path + "/MyAccount/AJAX";
28582861
var params = {

code/web/services/MyAccount/AJAX.php

+114
Original file line numberDiff line numberDiff line change
@@ -9007,6 +9007,8 @@ public function enrollCampaign() {
90079007
];
90089008
}
90099009

9010+
$this->applyCampaignProgress($userId, $campaignId);
9011+
90109012
if ($userCampaign->insert()) {
90119013
$campaign->enrollmentCounter++;
90129014
$campaign->currentEnrollments++;
@@ -9040,6 +9042,9 @@ public function enrollCampaign() {
90409042
public function unenrollCampaign() {
90419043
require_once ROOT_DIR . '/sys/CommunityEngagement/UserCampaign.php';
90429044
require_once ROOT_DIR . '/sys/CommunityEngagement/Campaign.php';
9045+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestoneProgressEntry.php';
9046+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestoneUsersProgress.php';
9047+
90439048

90449049
$campaignId = $_GET['campaignId'] ?? null;
90459050

@@ -9082,6 +9087,15 @@ public function unenrollCampaign() {
90829087
$campaign->id = $campaignId;
90839088
if ($campaign->find(true)) {
90849089
if ($userCampaign->delete()) {
9090+
$progressEntry = new CampaignMilestoneProgressEntry();
9091+
$progressEntry->userId = $userId;
9092+
$progressEntry->ce_campaign_id = $campaignId;
9093+
$progressEntry->delete(true);
9094+
9095+
$milestoneProgress = new CampaignMilestoneUsersProgress();
9096+
$milestoneProgress->userId = $userId;
9097+
$milestoneProgress->ce_campaign_id = $campaignId;
9098+
$milestoneProgress->delete(true);
90859099
//Increase unenrollment counter
90869100
$campaign->unenrollmentCounter++;
90879101
$campaign->currentEnrollments--;
@@ -9149,7 +9163,107 @@ public function getEnrolledCampaigns() {
91499163
'success' => true,
91509164
'numCampaigns' => count($enrolledCampaigns)
91519165
];
9166+
}
9167+
9168+
public function applyCampaignProgress($userId, $campaignId) {
9169+
require_once ROOT_DIR . '/sys/CommunityEngagement/Campaign.php';
9170+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestone.php';
9171+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestoneProgressEntry.php';
9172+
$campaign = new Campaign();
9173+
$campaign->id = $campaignId;
9174+
if (!$campaign->find(true)) {
9175+
return;
9176+
}
9177+
9178+
$campaignStartDate = strtotime($campaign->startDate);
9179+
$campaignEndDate = strtotime($campaign->endDate);
9180+
9181+
$entities = $this->getUserEntities($userId);
9182+
9183+
foreach ($entities as $entity) {
9184+
$entityDate = $entity->date;
9185+
$entityId = $entity->groupedWorkId;
9186+
9187+
if ($entityDate >= $campaignStartDate && $entityDate <= $campaignEndDate) {
9188+
$this->processCampaignMilestones($entity, $campaignId, $entityDate, $entityId);
9189+
}
9190+
}
9191+
}
9192+
9193+
private function getUserEntities($userId) {
9194+
require_once ROOT_DIR . '/sys/User/Hold.php';
9195+
require_once ROOT_DIR . '/sys/User/Checkout.php';
9196+
require_once ROOT_DIR . '/sys/LocalEnrichment/UserWorkReview.php';
9197+
$entities = [];
9198+
9199+
$hold = new Hold();
9200+
$hold->userId = $userId;
9201+
if ($hold->find()) {
9202+
while ($hold->fetch()) {
9203+
$hold->type = 'user_hold';
9204+
$hold->date = $hold->createDate;
9205+
$hold->groupedWorkId = $hold->groupedWorkId;
9206+
$entities[] = clone $hold;
9207+
}
9208+
}
9209+
9210+
$checkout = new Checkout();
9211+
$checkout->userId = $userId;
9212+
if ($checkout->find()) {
9213+
while ($checkout->fetch()) {
9214+
$checkout->type = 'user_checkout';
9215+
$checkout->date = $checkout->checkoutDate;
9216+
$checkout->groupedWorkId = $checkout->groupedWorkId;
9217+
$entities[] = clone $checkout;
9218+
}
9219+
}
9220+
9221+
$review = new UserWorkReview();
9222+
$review->userId = $userId;
9223+
if ($review->find()) {
9224+
9225+
while ($review->fetch()){
9226+
9227+
$review->type = 'user_work_review';
9228+
$review->date = $review->dateRated;
9229+
$review->groupedWorkId = $review->groupedRecordPermanentId;
9230+
$entities[] = clone $review;
9231+
}
9232+
}
9233+
return $entities;
9234+
}
9235+
9236+
private function processCampaignMilestones($entity, $campaignId, $entityDate, $entityId) {
9237+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestone.php';
9238+
require_once ROOT_DIR . '/sys/CommunityEngagement/Milestone.php';
9239+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestoneProgressEntry.php';
9240+
require_once ROOT_DIR . '/sys/CommunityEngagement/action-hooks.php';
9241+
9242+
$campaignMilestone = new CampaignMilestone();
9243+
$campaignMilestone->campaignId = $campaignId;
9244+
9245+
if ($campaignMilestone->find()) {
9246+
while ($campaignMilestone->fetch()) {
9247+
$milestone = new Milestone();
9248+
$milestone->id = $campaignMilestone->milestoneId;
9249+
9250+
if (!$milestone->find(true)) {
9251+
continue;
9252+
}
9253+
9254+
if ($milestone->milestoneType !== $entity->type) {
9255+
continue;
9256+
}
9257+
9258+
if (_campaignMilestoneProgressEntryObjectAlreadyExists($entity, $campaignMilestone)) {
9259+
continue;
9260+
}
9261+
9262+
$campaignMilestone->addCampaignMilestoneProgressEntry($entity, $entity->userId, $entityId);
9263+
}
9264+
}
91529265
}
9266+
91539267

91549268
function getYearInReviewSlide() : array {
91559269
$result = [

0 commit comments

Comments
 (0)