Skip to content

Commit 638beec

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 638beec

File tree

4 files changed

+123
-1
lines changed

4 files changed

+123
-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
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

+116
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,109 @@ 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+
global $logger;
9198+
$entities = [];
9199+
9200+
$hold = new Hold();
9201+
$hold->userId = $userId;
9202+
if ($hold->find()) {
9203+
while ($hold->fetch()) {
9204+
$hold->type = 'user_hold';
9205+
$hold->date = $hold->createDate;
9206+
$logger->log("CREATE DATE" . $hold->createDate, Logger::LOG_ERROR);
9207+
$hold->groupedWorkId = $hold->groupedWorkId;
9208+
$entities[] = clone $hold;
9209+
}
9210+
}
9211+
9212+
$checkout = new Checkout();
9213+
$checkout->userId = $userId;
9214+
if ($checkout->find()) {
9215+
while ($checkout->fetch()) {
9216+
$checkout->type = 'user_checkout';
9217+
$checkout->date = $checkout->checkoutDate;
9218+
$checkout->groupedWorkId = $checkout->groupedWorkId;
9219+
$entities[] = clone $checkout;
9220+
}
9221+
}
9222+
9223+
$review = new UserWorkReview();
9224+
$review->userId = $userId;
9225+
if ($review->find()) {
9226+
9227+
while ($review->fetch()){
9228+
9229+
$review->type = 'user_work_review';
9230+
$review->date = $review->dateRated;
9231+
$review->groupedWorkId = $review->groupedRecordPermanentId;
9232+
$entities[] = clone $review;
9233+
}
9234+
}
9235+
return $entities;
9236+
}
9237+
9238+
private function processCampaignMilestones($entity, $campaignId, $entityDate, $entityId) {
9239+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestone.php';
9240+
require_once ROOT_DIR . '/sys/CommunityEngagement/Milestone.php';
9241+
require_once ROOT_DIR . '/sys/CommunityEngagement/CampaignMilestoneProgressEntry.php';
9242+
require_once ROOT_DIR . '/sys/CommunityEngagement/action-hooks.php';
9243+
9244+
$campaignMilestone = new CampaignMilestone();
9245+
$campaignMilestone->campaignId = $campaignId;
9246+
9247+
if ($campaignMilestone->find()) {
9248+
while ($campaignMilestone->fetch()) {
9249+
$milestone = new Milestone();
9250+
$milestone->id = $campaignMilestone->milestoneId;
9251+
9252+
if (!$milestone->find(true)) {
9253+
continue;
9254+
}
9255+
9256+
if ($milestone->milestoneType !== $entity->type) {
9257+
continue;
9258+
}
9259+
9260+
if (_campaignMilestoneProgressEntryObjectAlreadyExists($entity, $campaignMilestone)) {
9261+
continue;
9262+
}
9263+
9264+
$campaignMilestone->addCampaignMilestoneProgressEntry($entity, $entity->userId, $entityId);
9265+
}
9266+
}
91529267
}
9268+
91539269

91549270
function getYearInReviewSlide() : array {
91559271
$result = [

0 commit comments

Comments
 (0)