@@ -9007,6 +9007,8 @@ public function enrollCampaign() {
9007
9007
];
9008
9008
}
9009
9009
9010
+ $ this ->applyCampaignProgress ($ userId , $ campaignId );
9011
+
9010
9012
if ($ userCampaign ->insert ()) {
9011
9013
$ campaign ->enrollmentCounter ++;
9012
9014
$ campaign ->currentEnrollments ++;
@@ -9040,6 +9042,9 @@ public function enrollCampaign() {
9040
9042
public function unenrollCampaign () {
9041
9043
require_once ROOT_DIR . '/sys/CommunityEngagement/UserCampaign.php ' ;
9042
9044
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
+
9043
9048
9044
9049
$ campaignId = $ _GET ['campaignId ' ] ?? null ;
9045
9050
@@ -9082,6 +9087,15 @@ public function unenrollCampaign() {
9082
9087
$ campaign ->id = $ campaignId ;
9083
9088
if ($ campaign ->find (true )) {
9084
9089
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 );
9085
9099
//Increase unenrollment counter
9086
9100
$ campaign ->unenrollmentCounter ++;
9087
9101
$ campaign ->currentEnrollments --;
@@ -9149,7 +9163,107 @@ public function getEnrolledCampaigns() {
9149
9163
'success ' => true ,
9150
9164
'numCampaigns ' => count ($ enrolledCampaigns )
9151
9165
];
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
+ }
9152
9265
}
9266
+
9153
9267
9154
9268
function getYearInReviewSlide () : array {
9155
9269
$ result = [
0 commit comments