@@ -216,6 +216,53 @@ public function saveRule(int $id, int $tagPending, int $tagApproved, int $tagRej
216
216
$ qb = $ qb ->resetQueryParts ();
217
217
}
218
218
219
+ // circles
220
+ $ toDelete = [];
221
+ $ toAdd = [];
222
+ $ oldCircleIds = [];
223
+ foreach ($ rule ['who ' ] as $ elem ) {
224
+ if (isset ($ elem ['circleId ' ])) {
225
+ $ oldCircleIds [] = $ elem ['circleId ' ];
226
+ }
227
+ }
228
+ $ newCircleIds = [];
229
+ foreach ($ who as $ elem ) {
230
+ if (isset ($ elem ['circleId ' ])) {
231
+ $ newCircleIds [] = $ elem ['circleId ' ];
232
+ }
233
+ }
234
+
235
+ foreach ($ oldCircleIds as $ gid ) {
236
+ if (!in_array ($ gid , $ newCircleIds )) {
237
+ $ toDelete [] = $ gid ;
238
+ }
239
+ }
240
+ foreach ($ newCircleIds as $ gid ) {
241
+ if (!in_array ($ gid , $ oldCircleIds )) {
242
+ $ toAdd [] = $ gid ;
243
+ }
244
+ }
245
+ foreach ($ toDelete as $ gid ) {
246
+ $ qb ->delete ('approval_rule_circles ' )
247
+ ->where (
248
+ $ qb ->expr ()->eq ('rule_id ' , $ qb ->createNamedParameter ($ id , IQueryBuilder::PARAM_INT ))
249
+ )
250
+ ->andWhere (
251
+ $ qb ->expr ()->eq ('circle_id ' , $ qb ->createNamedParameter ($ gid , IQueryBuilder::PARAM_STR ))
252
+ );
253
+ $ req = $ qb ->execute ();
254
+ $ qb = $ qb ->resetQueryParts ();
255
+ }
256
+ foreach ($ toAdd as $ gid ) {
257
+ $ qb ->insert ('approval_rule_circles ' )
258
+ ->values ([
259
+ 'circle_id ' => $ qb ->createNamedParameter ($ gid , IQueryBuilder::PARAM_STR ),
260
+ 'rule_id ' => $ qb ->createNamedParameter ($ id , IQueryBuilder::PARAM_INT ),
261
+ ]);
262
+ $ req = $ qb ->execute ();
263
+ $ qb = $ qb ->resetQueryParts ();
264
+ }
265
+
219
266
return ['id ' => $ id ];
220
267
}
221
268
@@ -266,6 +313,14 @@ public function createRule(int $tagPending, int $tagApproved, int $tagRejected,
266
313
]);
267
314
$ req = $ qb ->execute ();
268
315
$ qb = $ qb ->resetQueryParts ();
316
+ } elseif (isset ($ elem ['circleId ' ])) {
317
+ $ qb ->insert ('approval_rule_circles ' )
318
+ ->values ([
319
+ 'circle_id ' => $ qb ->createNamedParameter ($ elem ['circleId ' ], IQueryBuilder::PARAM_STR ),
320
+ 'rule_id ' => $ qb ->createNamedParameter ($ insertedRuleId , IQueryBuilder::PARAM_INT ),
321
+ ]);
322
+ $ req = $ qb ->execute ();
323
+ $ qb = $ qb ->resetQueryParts ();
269
324
}
270
325
}
271
326
@@ -357,6 +412,7 @@ public function getRule(int $id): ?array {
357
412
$ req ->closeCursor ();
358
413
$ qb = $ qb ->resetQueryParts ();
359
414
415
+ // groups
360
416
$ qb ->select ('* ' )
361
417
->from ('approval_rule_groups ' )
362
418
->where (
@@ -371,6 +427,21 @@ public function getRule(int $id): ?array {
371
427
$ req ->closeCursor ();
372
428
$ qb = $ qb ->resetQueryParts ();
373
429
430
+ // circles
431
+ $ qb ->select ('* ' )
432
+ ->from ('approval_rule_circles ' )
433
+ ->where (
434
+ $ qb ->expr ()->eq ('rule_id ' , $ qb ->createNamedParameter ($ id , IQueryBuilder::PARAM_INT ))
435
+ );
436
+ $ req = $ qb ->execute ();
437
+ while ($ row = $ req ->fetch ()) {
438
+ $ rule ['who ' ][] = [
439
+ 'circleId ' => $ row ['circle_id ' ]
440
+ ];
441
+ }
442
+ $ req ->closeCursor ();
443
+ $ qb = $ qb ->resetQueryParts ();
444
+
374
445
return $ rule ;
375
446
}
376
447
@@ -416,6 +487,7 @@ public function getRules(): array {
416
487
$ req ->closeCursor ();
417
488
$ qb = $ qb ->resetQueryParts ();
418
489
490
+ // groups
419
491
$ qb ->select ('* ' )
420
492
->from ('approval_rule_groups ' )
421
493
->where (
@@ -429,6 +501,21 @@ public function getRules(): array {
429
501
}
430
502
$ req ->closeCursor ();
431
503
$ qb = $ qb ->resetQueryParts ();
504
+
505
+ // circles
506
+ $ qb ->select ('* ' )
507
+ ->from ('approval_rule_circles ' )
508
+ ->where (
509
+ $ qb ->expr ()->eq ('rule_id ' , $ qb ->createNamedParameter ($ id , IQueryBuilder::PARAM_INT ))
510
+ );
511
+ $ req = $ qb ->execute ();
512
+ while ($ row = $ req ->fetch ()) {
513
+ $ rules [$ id ]['who ' ][] = [
514
+ 'circleId ' => $ row ['circle_id ' ]
515
+ ];
516
+ }
517
+ $ req ->closeCursor ();
518
+ $ qb = $ qb ->resetQueryParts ();
432
519
}
433
520
434
521
return $ rules ;
0 commit comments