@@ -407,6 +407,88 @@ public function regenerateSalts(int $id): Response
407
407
]);
408
408
}
409
409
410
+ /**
411
+ * @param int $id
412
+ * @param string $name
413
+ * @param string|null $version
414
+ * @return Response
415
+ * @throws RequestException
416
+ */
417
+ public function installThemeFromRepository (int $ id , string $ name , string $ version = null ): Response
418
+ {
419
+ $ request = (new Request ())
420
+ ->setMethod (Request::METHOD_POST )
421
+ ->setUrl (sprintf ('cmses/%d/themes ' , $ id ))
422
+ ->setBody ([
423
+ 'name ' => $ name ,
424
+ 'version ' => $ version ,
425
+ ]);
426
+
427
+ $ response = $ this
428
+ ->client
429
+ ->request ($ request );
430
+ if (!$ response ->isSuccess ()) {
431
+ return $ response ;
432
+ }
433
+
434
+ // Retrieve the CMS again, so we log affected clusters and can return the CMS object
435
+ $ retrieveResponse = $ this ->get ($ id );
436
+ if (!$ retrieveResponse ->isSuccess ()) {
437
+ return $ retrieveResponse ;
438
+ }
439
+
440
+ $ cms = $ retrieveResponse ->getData ('cms ' );
441
+
442
+ // Log which cluster is affected by this change
443
+ $ this
444
+ ->client
445
+ ->addAffectedCluster ($ cms ->getClusterId ());
446
+
447
+ return $ response ->setData ([
448
+ 'cms ' => $ cms ,
449
+ ]);
450
+ }
451
+
452
+ /**
453
+ * @param int $id
454
+ * @param string $url
455
+ * @return Response
456
+ * @throws RequestException
457
+ */
458
+ public function installThemeFromUrl (int $ id , string $ url ): Response
459
+ {
460
+ $ request = (new Request ())
461
+ ->setMethod (Request::METHOD_POST )
462
+ ->setUrl (sprintf ('cmses/%d/themes ' , $ id ))
463
+ ->setBody ([
464
+ 'url ' => $ url ,
465
+ ]);
466
+
467
+ $ response = $ this
468
+ ->client
469
+ ->request ($ request );
470
+ if (!$ response ->isSuccess ()) {
471
+ return $ response ;
472
+ }
473
+
474
+ // Retrieve the CMS again, so we log affected clusters and can return the CMS object
475
+ $ retrieveResponse = $ this ->get ($ id );
476
+ if (!$ retrieveResponse ->isSuccess ()) {
477
+ return $ retrieveResponse ;
478
+ }
479
+
480
+ $ cms = $ retrieveResponse ->getData ('cms ' );
481
+
482
+ // Log which cluster is affected by this change
483
+ $ this
484
+ ->client
485
+ ->addAffectedCluster ($ cms ->getClusterId ());
486
+
487
+ return $ response ->setData ([
488
+ 'cms ' => $ cms ,
489
+ ]);
490
+ }
491
+
410
492
/**
411
493
* @param int $id
412
494
* @param int $userId
0 commit comments