@@ -830,17 +830,19 @@ public function checkPermission($userID,$groupID,$categoryID = null, $permission
830
830
* @return bool|Gdn_DataSet|object|string
831
831
*/
832
832
public function join ($ GroupID , $ UserID , $ watched = true , $ followed = true ){
833
+ $ results = [];
833
834
$ Fields = ['Role ' => GroupModel::ROLE_MEMBER , 'GroupID ' => $ GroupID ,'UserID ' => $ UserID , 'DateInserted ' => Gdn_Format::toDateTime ()];
834
835
if ( $ this ->SQL ->getWhere ('UserGroup ' , ['GroupID ' => $ GroupID ,'UserID ' => $ UserID ])->numRows () == 0 ) {
835
836
$ this ->SQL ->insert ('UserGroup ' , $ Fields );
836
- if ($ followed ) {
837
- $ this ->followGroup ($ GroupID , $ UserID );
837
+ if ($ followed === true ) {
838
+ $ results [ ' Followed ' ] = $ this ->followGroup ($ GroupID , $ UserID );
838
839
}
839
- if ($ watched ) {
840
- $ this ->watchGroup ($ GroupID , $ UserID );
840
+ if ($ watched === true ) {
841
+ $ results [ ' Watched ' ] = $ this ->watchGroup ($ GroupID , $ UserID );
841
842
}
842
843
$ this ->notifyJoinGroup ($ GroupID , $ UserID );
843
844
}
845
+ return $ results ;
844
846
}
845
847
846
848
/**
@@ -1249,24 +1251,31 @@ public function hasWatchedGroup($group) {
1249
1251
*
1250
1252
*/
1251
1253
public function followGroup ($ group , $ userID ) {
1254
+ $ result = [];
1252
1255
if (is_numeric ($ group ) && $ group > 0 ) {
1253
1256
$ group = $ this ->getByGroupID ($ group );
1254
1257
}
1255
1258
1256
1259
if ($ group ->ChallengeID ) {
1257
- $ categoryModel = new CategoryModel ();
1260
+ // Remove existing UserCategory cache
1261
+ // Before calculating the user-specific information on a category.
1262
+ CategoryModel::clearUserCache ($ userID );
1263
+ Gdn::cache ()->remove ("Follow_ {$ userID }" );
1264
+ $ categoryModel = CategoryModel::instance ();
1258
1265
$ groupCategory = $ categoryModel ->getByCode ($ group ->ChallengeID );
1259
- if ($ groupCategory ->DisplayAs !== 'Discussions ' ) {
1260
- $ categories = CategoryModel::getSubtree ($ groupCategory ->CategoryID , false );
1261
- $ categoryIDs = array_column ($ categories , 'CategoryID ' );
1262
- } else {
1263
- $ categoryIDs = [$ groupCategory ->CategoryID ];
1264
- }
1265
-
1266
+ $ parentCategoryID = val ('CategoryID ' , $ groupCategory );
1267
+ $ isFollowed = $ categoryModel ->follow ($ userID , $ parentCategoryID , true );
1268
+ $ result [strval ($ parentCategoryID )] = $ isFollowed ;
1269
+ $ childrenCategories = CategoryModel::getChildren ($ parentCategoryID );
1270
+ $ categoryIDs = array_column ($ childrenCategories , 'CategoryID ' );
1266
1271
foreach ($ categoryIDs as $ categoryID ) {
1267
- $ categoryModel ->follow ($ userID , $ categoryID , true );
1272
+ $ isFollowed = $ categoryModel ->follow ($ userID , $ categoryID , true );
1273
+ $ result [strval ($ categoryID )] = $ isFollowed ;
1268
1274
}
1275
+
1276
+ CategoryModel::clearUserCache ($ userID );
1269
1277
}
1278
+ return $ result ;
1270
1279
}
1271
1280
1272
1281
/**
@@ -1281,16 +1290,14 @@ public function unfollowGroup($group, $userID) {
1281
1290
if ($ group ->ChallengeID ) {
1282
1291
$ categoryModel = new CategoryModel ();
1283
1292
$ groupCategory = $ categoryModel ->getByCode ($ group ->ChallengeID );
1284
- if ($ groupCategory ->DisplayAs !== 'Discussions ' ) {
1285
- $ categories = CategoryModel::getSubtree ($ groupCategory ->CategoryID , false );
1286
- $ categoryIDs = array_column ($ categories , 'CategoryID ' );
1287
- } else {
1288
- $ categoryIDs = [$ groupCategory ->CategoryID ];
1289
- }
1293
+ $ categories = CategoryModel::getSubtree ($ groupCategory ->CategoryID , true );
1294
+ $ categoryIDs = array_column ($ categories , 'CategoryID ' );
1290
1295
1291
1296
foreach ($ categoryIDs as $ categoryID ) {
1292
1297
$ categoryModel ->follow ($ userID , $ categoryID , false );
1293
1298
}
1299
+
1300
+ CategoryModel::clearUserCache ($ userID );
1294
1301
}
1295
1302
}
1296
1303
@@ -1299,21 +1306,30 @@ public function unfollowGroup($group, $userID) {
1299
1306
* @param $group
1300
1307
*/
1301
1308
public function watchGroup ($ group , $ userID ) {
1309
+ $ results = [];
1302
1310
if (is_numeric ($ group ) && $ group > 0 ) {
1303
1311
$ group = $ this ->getByGroupID ($ group );
1304
1312
}
1305
1313
1306
1314
if ($ group ->ChallengeID ) {
1307
- $ categoryModel = new CategoryModel ();
1315
+ // Remove existing UserCategory cache
1316
+ // Before calculating the user-specific information on a category.
1317
+ CategoryModel::clearUserCache ($ userID );
1318
+ Gdn::cache ()->remove ("UserMeta_ {$ userID }" );
1319
+
1320
+ $ categoryModel = CategoryModel::instance ();
1308
1321
$ groupCategory = $ categoryModel ->getByCode ($ group ->ChallengeID );
1309
- if ($ groupCategory ->DisplayAs !== 'Discussions ' ) {
1310
- $ categories = CategoryModel::getSubtree ($ groupCategory ->CategoryID , true );
1311
- $ categoryIDs = array_column ($ categories , 'CategoryID ' );
1312
- } else {
1313
- $ categoryIDs = [$ groupCategory ->CategoryID ];
1314
- }
1322
+ $ parentCategoryID = val ('CategoryID ' , $ groupCategory );
1323
+ $ childrenCategories = CategoryModel::getChildren ($ parentCategoryID );
1324
+ $ categoryIDs = array_column ($ childrenCategories , 'CategoryID ' );
1325
+ array_push ($ categoryIDs , $ parentCategoryID );
1315
1326
$ categoryModel ->setCategoryMetaData ($ categoryIDs , $ userID , 1 );
1327
+ $ userMetaModel = new UserMetaModel ();
1328
+ $ results = $ userMetaModel ->getUserMeta ($ userID );
1329
+ CategoryModel::clearUserCache ($ userID );
1316
1330
}
1331
+
1332
+ return $ results ;
1317
1333
}
1318
1334
1319
1335
/**
@@ -1326,15 +1342,17 @@ public function unwatchGroup($group, $userID) {
1326
1342
}
1327
1343
1328
1344
if ($ group ->ChallengeID ) {
1345
+ CategoryModel::clearUserCache ($ userID );
1346
+ Gdn::cache ()->remove ("UserMeta_ {$ userID }" );
1329
1347
$ categoryModel = new CategoryModel ();
1330
1348
$ groupCategory = $ categoryModel ->getByCode ($ group ->ChallengeID );
1331
- if ($ groupCategory ->DisplayAs !== 'Discussions ' ) {
1332
- $ categories = CategoryModel::getSubtree ($ groupCategory ->CategoryID , true );
1333
- $ categoryIDs = array_column ($ categories , 'CategoryID ' );
1334
- } else {
1335
- $ categoryIDs = [$ groupCategory ->CategoryID ];
1336
- }
1349
+ $ parentCategoryID = val ('CategoryID ' , $ groupCategory );
1350
+ $ childrenCategories = CategoryModel::getChildren ($ parentCategoryID );
1351
+ $ categoryIDs = array_column ($ childrenCategories , 'CategoryID ' );
1352
+ array_push ($ categoryIDs , $ parentCategoryID );
1337
1353
$ categoryModel ->setCategoryMetaData ($ categoryIDs , $ userID , null );
1354
+
1355
+ CategoryModel::clearUserCache ($ userID );
1338
1356
}
1339
1357
}
1340
1358
0 commit comments