@@ -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,109 @@ 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
+ 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
+ }
9152
9267
}
9268
+
9153
9269
9154
9270
function getYearInReviewSlide () : array {
9155
9271
$ result = [
0 commit comments