Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • project/cloud
  • issue/cloud-3181823
  • issue/cloud-3181853
  • issue/cloud-3182150
  • issue/cloud-3182294
  • issue/cloud-3182311
  • issue/cloud-3182346
  • issue/cloud-3180558
  • issue/cloud-3182682
  • issue/cloud-3183409
  • issue/cloud-3183412
  • issue/cloud-3183529
  • issue/cloud-3183619
  • issue/cloud-3183632
  • issue/cloud-3183663
  • issue/cloud-3183934
  • issue/cloud-3184142
  • issue/cloud-3184411
  • issue/cloud-3184659
  • issue/cloud-3184891
  • issue/cloud-3184994
  • issue/cloud-3185464
  • issue/cloud-3185705
  • issue/cloud-3185706
  • issue/cloud-3185708
  • issue/cloud-3185709
  • issue/cloud-3185707
  • issue/cloud-3185710
  • issue/cloud-3185711
  • issue/cloud-3185724
  • issue/cloud-3185731
  • issue/cloud-3185732
  • issue/cloud-3185809
  • issue/cloud-3186025
  • issue/cloud-3185296
  • issue/cloud-3186140
  • issue/cloud-3186241
  • issue/cloud-3186469
  • issue/cloud-3186643
  • issue/cloud-3186692
  • issue/cloud-3186882
  • issue/cloud-3187039
  • issue/cloud-3187149
  • issue/cloud-3187317
  • issue/cloud-3187373
  • issue/cloud-3187387
  • issue/cloud-3187389
  • issue/cloud-3187560
  • issue/cloud-3187586
  • issue/cloud-3187780
  • issue/cloud-3188141
  • issue/cloud-3188198
  • issue/cloud-3188368
  • issue/cloud-3188424
  • issue/cloud-3188595
  • issue/cloud-3188606
  • issue/cloud-3188798
  • issue/cloud-3188820
  • issue/cloud-3188831
  • issue/cloud-3188935
  • issue/cloud-3188976
  • issue/cloud-3188982
  • issue/cloud-3188984
  • issue/cloud-3189446
  • issue/cloud-3189447
  • issue/cloud-3189450
  • issue/cloud-3189456
  • issue/cloud-3189714
  • issue/cloud-3189745
  • issue/cloud-3189755
  • issue/cloud-3189860
  • issue/cloud-3189861
  • issue/cloud-3189868
  • issue/cloud-3189910
  • issue/cloud-3189914
  • issue/cloud-3190078
  • issue/cloud-3189974
  • issue/cloud-3190170
  • issue/cloud-3190182
  • issue/cloud-3190185
  • issue/cloud-3190263
  • issue/cloud-3189975
  • issue/cloud-3189976
  • issue/cloud-3190294
  • issue/cloud-3190348
  • issue/cloud-3190627
  • issue/cloud-3190719
  • issue/cloud-3190809
  • issue/cloud-3191234
  • issue/cloud-3191299
  • issue/cloud-3191582
  • issue/cloud-3191586
  • issue/cloud-3191587
  • issue/cloud-3191639
  • issue/cloud-3191783
  • issue/cloud-3191610
  • issue/cloud-3191523
  • issue/cloud-3192298
  • issue/cloud-3192481
  • issue/cloud-3192847
  • issue/cloud-3192902
  • issue/cloud-3192918
  • issue/cloud-3192940
  • issue/cloud-3192989
  • issue/cloud-3193019
  • issue/cloud-3193083
  • issue/cloud-3193112
  • issue/cloud-3193114
  • issue/cloud-3193424
  • issue/cloud-3193606
  • issue/cloud-3193688
  • issue/cloud-3193748
  • issue/cloud-3193938
  • issue/cloud-3194343
  • issue/cloud-3194623
  • issue/cloud-3194659
  • issue/cloud-3194663
  • issue/cloud-3194823
  • issue/cloud-3194877
  • issue/cloud-3194873
  • issue/cloud-3195307
  • issue/cloud-3195312
  • issue/cloud-3195660
  • issue/cloud-3195671
  • issue/cloud-3195991
  • issue/cloud-3195995
  • issue/cloud-3196419
  • issue/cloud-3191585
  • issue/cloud-3191583
  • issue/cloud-3191581
  • issue/cloud-3197421
  • issue/cloud-3197432
  • issue/cloud-3197433
  • issue/cloud-3191584
  • issue/cloud-3197652
  • issue/cloud-3197868
  • issue/cloud-3197880
  • issue/cloud-3198098
  • issue/cloud-3197653
  • issue/cloud-3198478
  • issue/cloud-3198860
  • issue/cloud-3199050
  • issue/cloud-3199213
  • issue/cloud-3279150
  • issue/cloud-3199243
  • issue/cloud-3199809
  • issue/cloud-3199991
  • issue/cloud-3200044
  • issue/cloud-3200047
  • issue/cloud-3200100
  • issue/cloud-3200118
  • issue/cloud-3200270
  • issue/cloud-3200520
  • issue/cloud-3200740
  • issue/cloud-3200885
  • issue/cloud-3201060
  • issue/cloud-3201071
  • issue/cloud-3201138
  • issue/cloud-3201301
  • issue/cloud-3201330
  • issue/cloud-3201341
  • issue/cloud-3201374
  • issue/cloud-3201967
  • issue/cloud-3202402
  • issue/cloud-3202652
  • issue/cloud-3202669
  • issue/cloud-3202931
  • issue/cloud-3202937
  • issue/cloud-3203121
  • issue/cloud-3203156
  • issue/cloud-3203992
  • issue/cloud-3204653
  • issue/cloud-3204816
  • issue/cloud-3205276
  • issue/cloud-3205683
  • issue/cloud-3205730
  • issue/cloud-3205778
  • issue/cloud-3205789
  • issue/cloud-3205983
  • issue/cloud-3206157
  • issue/cloud-3206273
  • issue/cloud-3279428
  • issue/cloud-3206525
  • issue/cloud-3206532
  • issue/cloud-3279435
  • issue/cloud-3206834
  • issue/cloud-3206856
  • issue/cloud-3207107
  • issue/cloud-3207198
  • issue/cloud-3207333
  • issue/cloud-3207573
  • issue/cloud-3207595
  • issue/cloud-3207758
  • issue/cloud-3207945
  • issue/cloud-3208304
  • issue/cloud-3208670
  • issue/cloud-3208850
  • issue/cloud-3209211
  • issue/cloud-3209446
  • issue/cloud-3209693
  • issue/cloud-3210496
  • issue/cloud-3210638
  • issue/cloud-3210647
  • issue/cloud-3211273
  • issue/cloud-3211567
  • issue/cloud-3212126
  • issue/cloud-3212322
  • issue/cloud-3191576
  • issue/cloud-3212496
  • issue/cloud-3212680
  • issue/cloud-3213095
  • issue/cloud-3213541
  • issue/cloud-3213754
  • issue/cloud-3213753
  • issue/cloud-3213777
  • issue/cloud-3213785
  • issue/cloud-3214270
  • issue/cloud-3210650
  • issue/cloud-3215720
  • issue/cloud-3215747
  • issue/cloud-3215934
  • issue/cloud-3191580
  • issue/cloud-3216872
  • issue/cloud-3217114
  • issue/cloud-3217769
  • issue/cloud-3217980
  • issue/cloud-3217993
  • issue/cloud-3218525
  • issue/cloud-3218529
  • issue/cloud-3218640
  • issue/cloud-3218767
  • issue/cloud-3218796
  • issue/cloud-3186209
  • issue/cloud-3218829
  • issue/cloud-3219063
  • issue/cloud-3219172
  • issue/cloud-3219206
  • issue/cloud-3219225
  • issue/cloud-3195065
  • issue/cloud-3219464
  • issue/cloud-3219501
  • issue/cloud-3219506
  • issue/cloud-3219535
  • issue/cloud-3219600
  • issue/cloud-3219979
  • issue/cloud-3219992
  • issue/cloud-3220242
  • issue/cloud-3220246
  • issue/cloud-3220250
  • issue/cloud-3220258
  • issue/cloud-3220456
  • issue/cloud-3220465
  • issue/cloud-3220511
  • issue/cloud-3220519
  • issue/cloud-3220666
  • issue/cloud-3220987
  • issue/cloud-3221005
  • issue/cloud-3221182
  • issue/cloud-3221053
  • issue/cloud-3221336
  • issue/cloud-3221392
  • issue/cloud-3221401
  • issue/cloud-3221405
  • issue/cloud-3221415
  • issue/cloud-3221623
  • issue/cloud-3222089
  • issue/cloud-3222117
  • issue/cloud-3222352
  • issue/cloud-3222502
  • issue/cloud-3222534
  • issue/cloud-3222665
  • issue/cloud-3222703
  • issue/cloud-3222893
  • issue/cloud-3222920
  • issue/cloud-3223092
  • issue/cloud-3223339
  • issue/cloud-3223508
  • issue/cloud-3223525
  • issue/cloud-3223696
  • issue/cloud-3223740
  • issue/cloud-3223850
  • issue/cloud-3223924
  • issue/cloud-3224075
  • issue/cloud-3224080
  • issue/cloud-3224081
  • issue/cloud-3224172
  • issue/cloud-3224418
  • issue/cloud-3224987
  • issue/cloud-3225006
  • issue/cloud-3225023
  • issue/cloud-3225298
  • issue/cloud-3225312
  • issue/cloud-3225597
  • issue/cloud-3225614
  • issue/cloud-3225644
  • issue/cloud-3226097
  • issue/cloud-3226130
  • issue/cloud-3226574
  • issue/cloud-3226727
  • issue/cloud-3226828
  • issue/cloud-3226854
  • issue/cloud-3226882
  • issue/cloud-3225815
  • issue/cloud-3227078
  • issue/cloud-3227081
  • issue/cloud-3227251
  • issue/cloud-3227307
  • issue/cloud-3227311
  • issue/cloud-3227408
  • issue/cloud-3227485
  • issue/cloud-3227828
  • issue/cloud-3227846
  • issue/cloud-3227852
  • issue/cloud-3228270
  • issue/cloud-3228276
  • issue/cloud-3228400
  • issue/cloud-3228579
  • issue/cloud-3228624
  • issue/cloud-3228663
  • issue/cloud-3228688
  • issue/cloud-3225218
  • issue/cloud-3229021
  • issue/cloud-3228432
  • issue/cloud-3229041
  • issue/cloud-3229047
  • issue/cloud-3229497
  • issue/cloud-3229710
  • issue/cloud-3229718
  • issue/cloud-3229938
  • issue/cloud-3230015
  • issue/cloud-3230748
  • issue/cloud-3230776
  • issue/cloud-3230796
  • issue/cloud-3230931
  • issue/cloud-3230948
  • issue/cloud-3230958
  • issue/cloud-3225219
  • issue/cloud-3231401
  • issue/cloud-3231490
  • issue/cloud-3231513
  • issue/cloud-3231856
  • issue/cloud-3231860
  • issue/cloud-3231862
  • issue/cloud-3231867
  • issue/cloud-3231898
  • issue/cloud-3225220
  • issue/cloud-3232055
  • issue/cloud-3232196
  • issue/cloud-3225272
  • issue/cloud-3225292
  • issue/cloud-3225417
  • issue/cloud-3225420
  • issue/cloud-3232747
  • issue/cloud-3232760
  • issue/cloud-3232794
  • issue/cloud-3232806
  • issue/cloud-3232932
  • issue/cloud-3232934
  • issue/cloud-3232936
  • issue/cloud-3232983
  • issue/cloud-3232992
  • issue/cloud-3233416
  • issue/cloud-3233607
  • issue/cloud-3236202
  • issue/cloud-3236419
  • issue/cloud-3236437
  • issue/cloud-3238196
  • issue/cloud-3238383
  • issue/cloud-3238409
  • issue/cloud-3238663
  • issue/cloud-3238813
  • issue/cloud-3238827
  • issue/cloud-3238842
  • issue/cloud-3238910
  • issue/cloud-3238990
  • issue/cloud-3239091
  • issue/cloud-3239248
  • issue/cloud-3239560
  • issue/cloud-3239696
  • issue/cloud-3279431
  • issue/cloud-3279805
  • issue/cloud-3279924
  • issue/cloud-3279985
  • issue/cloud-3280030
  • issue/cloud-3280044
  • issue/cloud-3278818
  • issue/cloud-3280788
  • issue/cloud-3281010
  • issue/cloud-3281025
  • issue/cloud-3281266
  • issue/cloud-3281510
  • issue/cloud-3281678
  • issue/cloud-3281723
  • issue/cloud-3282020
  • issue/cloud-3282196
  • issue/cloud-3282213
  • issue/cloud-3282373
  • issue/cloud-3282584
  • issue/cloud-3283475
  • issue/cloud-3279437
  • issue/cloud-3279601
  • issue/cloud-3279810
  • issue/cloud-3279989
  • issue/cloud-3280232
  • issue/cloud-3280281
  • issue/cloud-3280792
  • issue/cloud-3282379
  • issue/cloud-3282574
  • issue/cloud-3283282
  • issue/cloud-3283536
  • issue/cloud-3283729
  • issue/cloud-3283918
  • issue/cloud-3278819
  • issue/cloud-3279450
  • issue/cloud-3279647
  • issue/cloud-3279833
  • issue/cloud-3280042
  • issue/cloud-3280264
  • issue/cloud-3280280
  • issue/cloud-3280793
  • issue/cloud-3280993
  • issue/cloud-3281231
  • issue/cloud-3281272
  • issue/cloud-3282029
  • issue/cloud-3282167
  • issue/cloud-3282576
  • issue/cloud-3281259
  • issue/cloud-3283263
  • issue/cloud-3283539
  • issue/cloud-3283702
  • issue/cloud-3283743
  • issue/cloud-3283947
  • issue/cloud-3279562
  • issue/cloud-3279817
  • issue/cloud-3279835
  • issue/cloud-3280064
  • issue/cloud-3280639
  • issue/cloud-3280995
  • issue/cloud-3282386
  • issue/cloud-3282577
  • issue/cloud-3283290
  • issue/cloud-3283508
  • issue/cloud-3283736
  • issue/cloud-3278822
  • issue/cloud-3279617
  • issue/cloud-3279875
  • issue/cloud-3280272
  • issue/cloud-3281022
  • issue/cloud-3281027
  • issue/cloud-3281288
  • issue/cloud-3282018
  • issue/cloud-3282038
  • issue/cloud-3282193
  • issue/cloud-3282371
  • issue/cloud-3283512
  • issue/cloud-3279547
  • issue/cloud-3280273
  • issue/cloud-3281204
  • issue/cloud-3281287
  • issue/cloud-3281533
  • issue/cloud-3281673
  • issue/cloud-3281687
  • issue/cloud-3282372
  • issue/cloud-3283497
  • issue/cloud-3283635
  • issue/cloud-3283856
  • issue/cloud-3239811
  • issue/cloud-3239900
  • issue/cloud-3239946
  • issue/cloud-3240101
  • issue/cloud-3240218
  • issue/cloud-3240371
  • issue/cloud-3240440
  • issue/cloud-3240519
  • issue/cloud-3240524
  • issue/cloud-3240525
  • issue/cloud-3240421
  • issue/cloud-3240531
  • issue/cloud-3240540
  • issue/cloud-3240619
  • issue/cloud-3240658
  • issue/cloud-3240707
  • issue/cloud-3240722
  • issue/cloud-3240733
  • issue/cloud-3240740
  • issue/cloud-3240961
  • issue/cloud-3240976
  • issue/cloud-3240437
  • issue/cloud-3241241
  • issue/cloud-3241456
  • issue/cloud-3242641
  • issue/cloud-3241224
  • issue/cloud-3243034
  • issue/cloud-3243160
  • issue/cloud-3241453
  • issue/cloud-3240423
  • issue/cloud-3243282
  • issue/cloud-3243685
  • issue/cloud-3243843
  • issue/cloud-3243941
  • issue/cloud-3243975
  • issue/cloud-3244088
  • issue/cloud-3244327
  • issue/cloud-3244469
  • issue/cloud-3244513
  • issue/cloud-3244320
  • issue/cloud-3244753
  • issue/cloud-3244775
  • issue/cloud-3244801
  • issue/cloud-3244808
  • issue/cloud-3244814
  • issue/cloud-3245014
  • issue/cloud-3245015
  • issue/cloud-3245071
  • issue/cloud-3245251
  • issue/cloud-3245494
  • issue/cloud-3245650
  • issue/cloud-3245686
  • issue/cloud-3245859
  • issue/cloud-3245877
  • issue/cloud-3245881
  • issue/cloud-3246008
  • issue/cloud-3246044
  • issue/cloud-3246123
  • issue/cloud-3246271
  • issue/cloud-3246286
  • issue/cloud-3246330
  • issue/cloud-3246346
  • issue/cloud-3246352
  • issue/cloud-3246522
  • issue/cloud-3246489
  • issue/cloud-3246549
  • issue/cloud-3225216
  • issue/cloud-3246856
  • issue/cloud-3247063
  • issue/cloud-3247118
  • issue/cloud-3247207
  • issue/cloud-3247232
  • issue/cloud-3247707
  • issue/cloud-3279586
  • issue/cloud-3247826
  • issue/cloud-3247956
  • issue/cloud-3248118
  • issue/cloud-3248362
  • issue/cloud-3248389
  • issue/cloud-3248461
  • issue/cloud-3248545
  • issue/cloud-3248614
  • issue/cloud-3248632
  • issue/cloud-3248826
  • issue/cloud-3248996
  • issue/cloud-3249060
  • issue/cloud-3249313
  • issue/cloud-3249328
  • issue/cloud-3249409
  • issue/cloud-3249488
  • issue/cloud-3249604
  • issue/cloud-3249829
  • issue/cloud-3278867
  • issue/cloud-3250390
  • issue/cloud-3250573
  • issue/cloud-3250579
  • issue/cloud-3250584
  • issue/cloud-3250959
  • issue/cloud-3251179
  • issue/cloud-3251529
  • issue/cloud-3251604
  • issue/cloud-3251738
  • issue/cloud-3251782
  • issue/cloud-3251787
  • issue/cloud-3251803
  • issue/cloud-3252005
  • issue/cloud-3252127
  • issue/cloud-3252183
  • issue/cloud-3252334
  • issue/cloud-3252381
  • issue/cloud-3252556
  • issue/cloud-3252652
  • issue/cloud-3252711
  • issue/cloud-3252913
  • issue/cloud-3252922
  • issue/cloud-3252947
  • issue/cloud-3253122
  • issue/cloud-3253229
  • issue/cloud-3253431
  • issue/cloud-3253446
  • issue/cloud-3253737
  • issue/cloud-3254065
  • issue/cloud-3254096
  • issue/cloud-3254264
  • issue/cloud-3254275
  • issue/cloud-3253930
  • issue/cloud-3254463
  • issue/cloud-3254470
  • issue/cloud-3254475
  • issue/cloud-3254672
  • issue/cloud-3254719
  • issue/cloud-3254865
  • issue/cloud-3254876
  • issue/cloud-3255212
  • issue/cloud-3255214
  • issue/cloud-3255361
  • issue/cloud-3255413
  • issue/cloud-3255553
  • issue/cloud-3255554
  • issue/cloud-3255583
  • issue/cloud-3255588
  • issue/cloud-3255858
  • issue/cloud-3255910
  • issue/cloud-3255987
  • issue/cloud-3256026
  • issue/cloud-3256994
  • issue/cloud-3257126
  • issue/cloud-3257355
  • issue/cloud-3257368
  • issue/cloud-3257912
  • issue/cloud-3258040
  • issue/cloud-3258115
  • issue/cloud-3258116
  • issue/cloud-3258154
  • issue/cloud-3258302
  • issue/cloud-3258311
  • issue/cloud-3258508
  • issue/cloud-3258845
  • issue/cloud-3258891
  • issue/cloud-3259045
  • issue/cloud-3259282
  • issue/cloud-3259494
  • issue/cloud-3259688
  • issue/cloud-3260053
  • issue/cloud-3260069
  • issue/cloud-3260255
  • issue/cloud-3260256
  • issue/cloud-3260285
  • issue/cloud-3260518
  • issue/cloud-3260523
  • issue/cloud-3260524
  • issue/cloud-3260747
  • issue/cloud-3260978
  • issue/cloud-3261006
  • issue/cloud-3261010
  • issue/cloud-3261175
  • issue/cloud-3261470
  • issue/cloud-3261648
  • issue/cloud-3261694
  • issue/cloud-3262075
  • issue/cloud-3262130
  • issue/cloud-3262131
  • issue/cloud-3262412
  • issue/cloud-3262416
  • issue/cloud-3262571
  • issue/cloud-3262574
  • issue/cloud-3262625
  • issue/cloud-3262802
  • issue/cloud-3262806
  • issue/cloud-3262829
  • issue/cloud-3263015
  • issue/cloud-3263099
  • issue/cloud-3263209
  • issue/cloud-3263292
  • issue/cloud-3263309
  • issue/cloud-3263327
  • issue/cloud-3263486
  • issue/cloud-3263543
  • issue/cloud-3263633
  • issue/cloud-3263739
  • issue/cloud-3263737
  • issue/cloud-3263954
  • issue/cloud-3264010
  • issue/cloud-3264095
  • issue/cloud-3264189
  • issue/cloud-3264224
  • issue/cloud-3264410
  • issue/cloud-3264457
  • issue/cloud-3264602
  • issue/cloud-3264618
  • issue/cloud-3264872
  • issue/cloud-3264898
  • issue/cloud-3265132
  • issue/cloud-3265149
  • issue/cloud-3265154
  • issue/cloud-3265544
  • issue/cloud-3265548
  • issue/cloud-3265561
  • issue/cloud-3265571
  • issue/cloud-3265587
  • issue/cloud-3265796
  • issue/cloud-3265817
  • issue/cloud-3265970
  • issue/cloud-3266025
  • issue/cloud-3266033
  • issue/cloud-3266054
  • issue/cloud-3266178
  • issue/cloud-3266233
  • issue/cloud-3266234
  • issue/cloud-3266237
  • issue/cloud-3266374
  • issue/cloud-3266446
  • issue/cloud-3266542
  • issue/cloud-3266679
  • issue/cloud-3266832
  • issue/cloud-3266848
  • issue/cloud-3266876
  • issue/cloud-3266865
  • issue/cloud-3267036
  • issue/cloud-3267275
  • issue/cloud-3267487
  • issue/cloud-3267642
  • issue/cloud-3267692
  • issue/cloud-3267695
  • issue/cloud-3267702
  • issue/cloud-3267693
  • issue/cloud-3267722
  • issue/cloud-3267726
  • issue/cloud-3267750
  • issue/cloud-3267873
  • issue/cloud-3267881
  • issue/cloud-3267883
  • issue/cloud-3267885
  • issue/cloud-3267888
  • issue/cloud-3267906
  • issue/cloud-3267960
  • issue/cloud-3268416
  • issue/cloud-3268507
  • issue/cloud-3268546
  • issue/cloud-3268479
  • issue/cloud-3268797
  • issue/cloud-3268806
  • issue/cloud-3268811
  • issue/cloud-3268968
  • issue/cloud-3268973
  • issue/cloud-3268673
  • issue/cloud-3269021
  • issue/cloud-3269054
  • issue/cloud-3269057
  • issue/cloud-3269155
  • issue/cloud-3269344
  • issue/cloud-3269366
  • issue/cloud-3269368
  • issue/cloud-3269370
  • issue/cloud-3269374
  • issue/cloud-3269377
  • issue/cloud-3269500
  • issue/cloud-3269602
  • issue/cloud-3269708
  • issue/cloud-3269781
  • issue/cloud-3269788
  • issue/cloud-3269811
  • issue/cloud-3269815
  • issue/cloud-3269993
  • issue/cloud-3270023
  • issue/cloud-3270036
  • issue/cloud-3270066
  • issue/cloud-3270163
  • issue/cloud-3270207
  • issue/cloud-3270265
  • issue/cloud-3270268
  • issue/cloud-3270280
  • issue/cloud-3270282
  • issue/cloud-3270269
  • issue/cloud-3270658
  • issue/cloud-3269930
  • issue/cloud-3271058
  • issue/cloud-3271141
  • issue/cloud-3271151
  • issue/cloud-3271155
  • issue/cloud-3271157
  • issue/cloud-3271348
  • issue/cloud-3271363
  • issue/cloud-3271364
  • issue/cloud-3271376
  • issue/cloud-3271378
  • issue/cloud-3271560
  • issue/cloud-3271565
  • issue/cloud-3271599
  • issue/cloud-3271600
  • issue/cloud-3271750
  • issue/cloud-3271949
  • issue/cloud-3271743
  • issue/cloud-3272138
  • issue/cloud-3272183
  • issue/cloud-3272190
  • issue/cloud-3272375
  • issue/cloud-3272416
  • issue/cloud-3272419
  • issue/cloud-3272544
  • issue/cloud-3272557
  • issue/cloud-3272624
  • issue/cloud-3272661
  • issue/cloud-3272897
  • issue/cloud-3273053
  • issue/cloud-3273058
  • issue/cloud-3273073
  • issue/cloud-3273084
  • issue/cloud-3271742
  • issue/cloud-3273413
  • issue/cloud-3273418
  • issue/cloud-3273615
  • issue/cloud-3273629
  • issue/cloud-3273643
  • issue/cloud-3273644
  • issue/cloud-3273748
  • issue/cloud-3273905
  • issue/cloud-3273889
  • issue/cloud-3273962
  • issue/cloud-3274078
  • issue/cloud-3274109
  • issue/cloud-3274116
  • issue/cloud-3274157
  • issue/cloud-3274196
  • issue/cloud-3274216
  • issue/cloud-3274374
  • issue/cloud-3274382
  • issue/cloud-3274386
  • issue/cloud-3274512
  • issue/cloud-3274523
  • issue/cloud-3274702
  • issue/cloud-3274946
  • issue/cloud-3274955
  • issue/cloud-3274982
  • issue/cloud-3275209
  • issue/cloud-3275355
  • issue/cloud-3275379
  • issue/cloud-3275389
  • issue/cloud-3275170
  • issue/cloud-3275690
  • issue/cloud-3275736
  • issue/cloud-3275840
  • issue/cloud-3275841
  • issue/cloud-3275892
  • issue/cloud-3275988
  • issue/cloud-3275521
  • issue/cloud-3276136
  • issue/cloud-3276138
  • issue/cloud-3276175
  • issue/cloud-3276185
  • issue/cloud-3276321
  • issue/cloud-3276323
  • issue/cloud-3276353
  • issue/cloud-3276369
  • issue/cloud-3276410
  • issue/cloud-3276570
  • issue/cloud-3276704
  • issue/cloud-3276714
  • issue/cloud-3276788
  • issue/cloud-3276897
  • issue/cloud-3276908
  • issue/cloud-3277300
  • issue/cloud-3277750
  • issue/cloud-3277765
  • issue/cloud-3277797
  • issue/cloud-3278037
  • issue/cloud-3278112
  • issue/cloud-3278113
  • issue/cloud-3278248
  • issue/cloud-3278308
  • issue/cloud-3278479
  • issue/cloud-3278023
  • issue/cloud-3280027
  • issue/cloud-3280787
  • issue/cloud-3281004
  • issue/cloud-3281282
  • issue/cloud-3281298
  • issue/cloud-3283959
  • issue/cloud-3284108
  • issue/cloud-3284224
  • issue/cloud-3284251
  • issue/cloud-3284360
  • issue/cloud-3284361
  • issue/cloud-3284363
  • issue/cloud-3284365
  • issue/cloud-3284370
  • issue/cloud-3284388
  • issue/cloud-3284466
  • issue/cloud-3284576
  • issue/cloud-3284565
  • issue/cloud-3284578
  • issue/cloud-3284587
  • issue/cloud-3284602
  • issue/cloud-3284606
  • issue/cloud-3284714
  • issue/cloud-3284774
  • issue/cloud-3284776
  • issue/cloud-3284782
  • issue/cloud-3285053
  • issue/cloud-3284947
  • issue/cloud-3285332
  • issue/cloud-3285338
  • issue/cloud-3285367
  • issue/cloud-3285519
  • issue/cloud-3285526
  • issue/cloud-3285536
  • issue/cloud-3285538
  • issue/cloud-3285539
  • issue/cloud-3285555
  • issue/cloud-3285693
  • issue/cloud-3285702
  • issue/cloud-3285478
  • issue/cloud-3285743
  • issue/cloud-3285749
  • issue/cloud-3285764
  • issue/cloud-3285770
  • issue/cloud-3285849
  • issue/cloud-3288063
  • issue/cloud-3285730
  • issue/cloud-3290773
  • issue/cloud-3290788
  • issue/cloud-3290795
  • issue/cloud-3290820
  • issue/cloud-3290984
  • issue/cloud-3290987
  • issue/cloud-3291000
  • issue/cloud-3291013
  • issue/cloud-3291081
  • issue/cloud-3291001
  • issue/cloud-3291234
  • issue/cloud-3291241
  • issue/cloud-3291253
  • issue/cloud-3291386
  • issue/cloud-3291389
  • issue/cloud-3291392
  • issue/cloud-3291395
  • issue/cloud-3291396
  • issue/cloud-3291595
  • issue/cloud-3291597
  • issue/cloud-3291605
  • issue/cloud-3291627
  • issue/cloud-3291661
  • issue/cloud-3291742
  • issue/cloud-3291766
  • issue/cloud-3291850
  • issue/cloud-3291858
  • issue/cloud-3291878
  • issue/cloud-3399374
  • issue/cloud-3292036
  • issue/cloud-3292089
  • issue/cloud-3292090
  • issue/cloud-3292096
  • issue/cloud-3292100
  • issue/cloud-3292101
  • issue/cloud-3292105
  • issue/cloud-3292111
  • issue/cloud-3292141
  • issue/cloud-3292142
  • issue/cloud-3292363
  • issue/cloud-3292372
  • issue/cloud-3292417
  • issue/cloud-3292330
  • issue/cloud-3292575
  • issue/cloud-3292582
  • issue/cloud-3292679
  • issue/cloud-3292685
  • issue/cloud-3292544
  • issue/cloud-3292767
  • issue/cloud-3292771
  • issue/cloud-3292791
  • issue/cloud-3292794
  • issue/cloud-3292812
  • issue/cloud-3292977
  • issue/cloud-3292981
  • issue/cloud-3292989
  • issue/cloud-3293000
  • issue/cloud-3293208
  • issue/cloud-3293211
  • issue/cloud-3293219
  • issue/cloud-3293224
  • issue/cloud-3293234
  • issue/cloud-3293244
  • issue/cloud-3293419
  • issue/cloud-3293207
  • issue/cloud-3293499
  • issue/cloud-3293505
  • issue/cloud-3293701
  • issue/cloud-3293736
  • issue/cloud-3293846
  • issue/cloud-3293949
  • issue/cloud-3294027
  • issue/cloud-3294030
  • issue/cloud-3294185
  • issue/cloud-3294189
  • issue/cloud-3294201
  • issue/cloud-3294227
  • issue/cloud-3294424
  • issue/cloud-3294427
  • issue/cloud-3294451
  • issue/cloud-3294631
  • issue/cloud-3294644
  • issue/cloud-3294865
  • issue/cloud-3294886
  • issue/cloud-3295011
  • issue/cloud-3295067
  • issue/cloud-3295095
  • issue/cloud-3295125
  • issue/cloud-3295194
  • issue/cloud-3295196
  • issue/cloud-3295237
  • issue/cloud-3295251
  • issue/cloud-3295254
  • issue/cloud-3295418
  • issue/cloud-3295646
  • issue/cloud-3295669
  • issue/cloud-3295673
  • issue/cloud-3295695
  • issue/cloud-3295873
  • issue/cloud-3296392
  • issue/cloud-3298293
  • issue/cloud-3296083
  • issue/cloud-3303765
  • issue/cloud-3303941
  • issue/cloud-3304247
  • issue/cloud-3304374
  • issue/cloud-3304580
  • issue/cloud-3305386
  • issue/cloud-3305476
  • issue/cloud-3305606
  • issue/cloud-3298542
  • issue/cloud-3298732
  • issue/cloud-3299211
  • issue/cloud-3299866
  • issue/cloud-3298957
  • issue/cloud-3300356
  • issue/cloud-3300110
  • issue/cloud-3300392
  • issue/cloud-3303800
  • issue/cloud-3303812
  • issue/cloud-3304166
  • issue/cloud-3304547
  • issue/cloud-3304644
  • issue/cloud-3300947
  • issue/cloud-3301042
  • issue/cloud-3301207
  • issue/cloud-3301951
  • issue/cloud-3301955
  • issue/cloud-3302049
  • issue/cloud-3302260
  • issue/cloud-3302747
  • issue/cloud-3302977
  • issue/cloud-3303222
  • issue/cloud-3303229
  • issue/cloud-3303236
  • issue/cloud-3303390
  • issue/cloud-3303428
  • issue/cloud-3303635
  • issue/cloud-3304212
  • issue/cloud-3304632
  • issue/cloud-3301956
  • issue/cloud-3304894
  • issue/cloud-3305398
  • issue/cloud-3306033
  • issue/cloud-3305650
  • issue/cloud-3306114
  • issue/cloud-3306116
  • issue/cloud-3310203
  • issue/cloud-3310210
  • issue/cloud-3310262
  • issue/cloud-3310457
  • issue/cloud-3310560
  • issue/cloud-3310642
  • issue/cloud-3310995
  • issue/cloud-3311042
  • issue/cloud-3309974
  • issue/cloud-3306321
  • issue/cloud-3306357
  • issue/cloud-3306359
  • issue/cloud-3306380
  • issue/cloud-3306643
  • issue/cloud-3306689
  • issue/cloud-3306521
  • issue/cloud-3306702
  • issue/cloud-3306754
  • issue/cloud-3306966
  • issue/cloud-3306981
  • issue/cloud-3306987
  • issue/cloud-3306988
  • issue/cloud-3307021
  • issue/cloud-3306990
  • issue/cloud-3307162
  • issue/cloud-3306991
  • issue/cloud-3307215
  • issue/cloud-3307239
  • issue/cloud-3307396
  • issue/cloud-3307397
  • issue/cloud-3307437
  • issue/cloud-3306992
  • issue/cloud-3307456
  • issue/cloud-3307462
  • issue/cloud-3307499
  • issue/cloud-3307668
  • issue/cloud-3307678
  • issue/cloud-3307733
  • issue/cloud-3307925
  • issue/cloud-3307933
  • issue/cloud-3308070
  • issue/cloud-3308279
  • issue/cloud-3308275
  • issue/cloud-3308490
  • issue/cloud-3308495
  • issue/cloud-3308496
  • issue/cloud-3308655
  • issue/cloud-3308676
  • issue/cloud-3308695
  • issue/cloud-3308708
  • issue/cloud-3308717
  • issue/cloud-3308270
  • issue/cloud-3308812
  • issue/cloud-3308934
  • issue/cloud-3308967
  • issue/cloud-3308974
  • issue/cloud-3308999
  • issue/cloud-3309150
  • issue/cloud-3309165
  • issue/cloud-3309286
  • issue/cloud-3309124
  • issue/cloud-3309333
  • issue/cloud-3309357
  • issue/cloud-3309517
  • issue/cloud-3309540
  • issue/cloud-3309587
  • issue/cloud-3309705
  • issue/cloud-3309758
  • issue/cloud-3309787
  • issue/cloud-3309788
  • issue/cloud-3309878
  • issue/cloud-3309971
  • issue/cloud-3309981
  • issue/cloud-3310024
  • issue/cloud-3310263
  • issue/cloud-3310707
  • issue/cloud-3310768
  • issue/cloud-3309596
  • issue/cloud-3311026
  • issue/cloud-3311463
  • issue/cloud-3311664
  • issue/cloud-3311665
  • issue/cloud-3311766
  • issue/cloud-3311779
  • issue/cloud-3311935
  • issue/cloud-3311268
  • issue/cloud-3312203
  • issue/cloud-3312218
  • issue/cloud-3312215
  • issue/cloud-3312472
  • issue/cloud-3311750
  • issue/cloud-3312576
  • issue/cloud-3312622
  • issue/cloud-3312708
  • issue/cloud-3312766
  • issue/cloud-3312549
  • issue/cloud-3312780
  • issue/cloud-3311749
  • issue/cloud-3312838
  • issue/cloud-3312996
  • issue/cloud-3313318
  • issue/cloud-3313353
  • issue/cloud-3317433
  • issue/cloud-3317489
  • issue/cloud-3317731
  • issue/cloud-3317919
  • issue/cloud-3318174
  • issue/cloud-3318236
  • issue/cloud-3317924
  • issue/cloud-3313550
  • issue/cloud-3313552
  • issue/cloud-3313770
  • issue/cloud-3313779
  • issue/cloud-3313812
  • issue/cloud-3313999
  • issue/cloud-3314252
  • issue/cloud-3314398
  • issue/cloud-3317496
  • issue/cloud-3317494
  • issue/cloud-3314603
  • issue/cloud-3314652
  • issue/cloud-3314804
  • issue/cloud-3314812
  • issue/cloud-3314400
  • issue/cloud-3314844
  • issue/cloud-3315043
  • issue/cloud-3315268
  • issue/cloud-3315586
  • issue/cloud-3315797
  • issue/cloud-3315878
  • issue/cloud-3316407
  • issue/cloud-3316471
  • issue/cloud-3316494
  • issue/cloud-3316681
  • issue/cloud-3317116
  • issue/cloud-3317301
  • issue/cloud-3318439
  • issue/cloud-3318463
  • issue/cloud-3318898
  • issue/cloud-3318641
  • issue/cloud-3325922
  • issue/cloud-3319229
  • issue/cloud-3319231
  • issue/cloud-3327455
  • issue/cloud-3327525
  • issue/cloud-3325925
  • issue/cloud-3326094
  • issue/cloud-3319611
  • issue/cloud-3326730
  • issue/cloud-3327023
  • issue/cloud-3327303
  • issue/cloud-3327527
  • issue/cloud-3327959
  • issue/cloud-3320297
  • issue/cloud-3326151
  • issue/cloud-3320385
  • issue/cloud-3320601
  • issue/cloud-3320310
  • issue/cloud-3320609
  • issue/cloud-3320654
  • issue/cloud-3320663
  • issue/cloud-3326999
  • issue/cloud-3327965
  • issue/cloud-3328378
  • issue/cloud-3329613
  • issue/cloud-3329614
  • issue/cloud-3329626
  • issue/cloud-3325459
  • issue/cloud-3325485
  • issue/cloud-3326711
  • issue/cloud-3326759
  • issue/cloud-3327068
  • issue/cloud-3327318
  • issue/cloud-3327495
  • issue/cloud-3327545
  • issue/cloud-3327733
  • issue/cloud-3328717
  • issue/cloud-3320860
  • issue/cloud-3320868
  • issue/cloud-3320301
  • issue/cloud-3320915
  • issue/cloud-3320944
  • issue/cloud-3320945
  • issue/cloud-3321029
  • issue/cloud-3321067
  • issue/cloud-3325489
  • issue/cloud-3326481
  • issue/cloud-3326682
  • issue/cloud-3326722
  • issue/cloud-3327003
  • issue/cloud-3327036
  • issue/cloud-3328728
  • issue/cloud-3328928
  • issue/cloud-3329000
  • issue/cloud-3321709
  • issue/cloud-3321712
  • issue/cloud-3321322
  • issue/cloud-3322010
  • issue/cloud-3322021
  • issue/cloud-3322024
  • issue/cloud-3325391
  • issue/cloud-3325462
  • issue/cloud-3327042
  • issue/cloud-3327092
  • issue/cloud-3327228
  • issue/cloud-3328138
  • issue/cloud-3328509
  • issue/cloud-3328964
  • issue/cloud-3322344
  • issue/cloud-3322368
  • issue/cloud-3322385
  • issue/cloud-3322638
  • issue/cloud-3322725
  • issue/cloud-3322833
  • issue/cloud-3322836
  • issue/cloud-3323031
  • issue/cloud-3319538
  • issue/cloud-3323489
  • issue/cloud-3323495
  • issue/cloud-3323705
  • issue/cloud-3323738
  • issue/cloud-3323864
  • issue/cloud-3323928
  • issue/cloud-3323929
  • issue/cloud-3324001
  • issue/cloud-3324002
  • issue/cloud-3324004
  • issue/cloud-3324005
  • issue/cloud-3324023
  • issue/cloud-3323516
  • issue/cloud-3322870
  • issue/cloud-3324489
  • issue/cloud-3324666
  • issue/cloud-3324707
  • issue/cloud-3324719
  • issue/cloud-3324821
  • issue/cloud-3324864
  • issue/cloud-3324903
  • issue/cloud-3324906
  • issue/cloud-3324924
  • issue/cloud-3325053
  • issue/cloud-3325239
  • issue/cloud-3324908
  • issue/cloud-3325245
  • issue/cloud-3325264
  • issue/cloud-3325269
  • issue/cloud-3325936
  • issue/cloud-3329673
  • issue/cloud-3329897
  • issue/cloud-3329909
  • issue/cloud-3329927
  • issue/cloud-3328760
  • issue/cloud-3329988
  • issue/cloud-3331383
  • issue/cloud-3331442
  • issue/cloud-3331666
  • issue/cloud-3332069
  • issue/cloud-3332132
  • issue/cloud-3332171
  • issue/cloud-3332242
  • issue/cloud-3332373
  • issue/cloud-3332492
  • issue/cloud-3332620
  • issue/cloud-3332862
  • issue/cloud-3333124
  • issue/cloud-3333520
  • issue/cloud-3333526
  • issue/cloud-3333674
  • issue/cloud-3327817
  • issue/cloud-3333686
  • issue/cloud-3332491
  • issue/cloud-3334130
  • issue/cloud-3345121
  • issue/cloud-3334371
  • issue/cloud-3343041
  • issue/cloud-3334693
  • issue/cloud-3335024
  • issue/cloud-3335029
  • issue/cloud-3335061
  • issue/cloud-3335087
  • issue/cloud-3342932
  • issue/cloud-3344161
  • issue/cloud-3341767
  • issue/cloud-3345098
  • issue/cloud-3345130
  • issue/cloud-3350756
  • issue/cloud-3335392
  • issue/cloud-3335148
  • issue/cloud-3335656
  • issue/cloud-3335692
  • issue/cloud-3335976
  • issue/cloud-3335023
  • issue/cloud-3336208
  • issue/cloud-3336316
  • issue/cloud-3336577
  • issue/cloud-3336021
  • issue/cloud-3336803
  • issue/cloud-3337420
  • issue/cloud-3337751
  • issue/cloud-3337755
  • issue/cloud-3341768
  • issue/cloud-3345671
  • issue/cloud-3337802
  • issue/cloud-3338098
  • issue/cloud-3338102
  • issue/cloud-3344162
  • issue/cloud-3344856
  • issue/cloud-3344882
  • issue/cloud-3345783
  • issue/cloud-3338419
  • issue/cloud-3338437
  • issue/cloud-3338444
  • issue/cloud-3338794
  • issue/cloud-3339470
  • issue/cloud-3343034
  • issue/cloud-3343350
  • issue/cloud-3343582
  • issue/cloud-3345631
  • issue/cloud-3339774
  • issue/cloud-3339828
  • issue/cloud-3339860
  • issue/cloud-3340098
  • issue/cloud-3340135
  • issue/cloud-3340157
  • issue/cloud-3340431
  • issue/cloud-3340440
  • issue/cloud-3340454
  • issue/cloud-3340720
  • issue/cloud-3340731
  • issue/cloud-3340733
  • issue/cloud-3340739
  • issue/cloud-3340764
  • issue/cloud-3340875
  • issue/cloud-3341036
  • issue/cloud-3341158
  • issue/cloud-3341166
  • issue/cloud-3341225
  • issue/cloud-3341272
  • issue/cloud-3341453
  • issue/cloud-3341310
  • issue/cloud-3341759
  • issue/cloud-3341770
  • issue/cloud-3341772
  • issue/cloud-3324909
  • issue/cloud-3342217
  • issue/cloud-3342235
  • issue/cloud-3341766
  • issue/cloud-3342543
  • issue/cloud-3342559
  • issue/cloud-3343270
  • issue/cloud-3343591
  • issue/cloud-3343619
  • issue/cloud-3344152
  • issue/cloud-3344592
  • issue/cloud-3344860
  • issue/cloud-3345154
  • issue/cloud-3342631
  • issue/cloud-3342633
  • issue/cloud-3343275
  • issue/cloud-3346151
  • issue/cloud-3346177
  • issue/cloud-3346180
  • issue/cloud-3346196
  • issue/cloud-3346423
  • issue/cloud-3346385
  • issue/cloud-3346437
  • issue/cloud-3346439
  • issue/cloud-3346864
  • issue/cloud-3346876
  • issue/cloud-3346902
  • issue/cloud-3347135
  • issue/cloud-3347138
  • issue/cloud-3347147
  • issue/cloud-3347172
  • issue/cloud-3347213
  • issue/cloud-3347446
  • issue/cloud-3347542
  • issue/cloud-3347557
  • issue/cloud-3347743
  • issue/cloud-3347752
  • issue/cloud-3347756
  • issue/cloud-3347774
  • issue/cloud-3347890
  • issue/cloud-3348036
  • issue/cloud-3341769
  • issue/cloud-3348048
  • issue/cloud-3348082
  • issue/cloud-3348349
  • issue/cloud-3348370
  • issue/cloud-3352191
  • issue/cloud-3352626
  • issue/cloud-3348610
  • issue/cloud-3348611
  • issue/cloud-3348828
  • issue/cloud-3348833
  • issue/cloud-3348632
  • issue/cloud-3349074
  • issue/cloud-3349192
  • issue/cloud-3349209
  • issue/cloud-3349784
  • issue/cloud-3349803
  • issue/cloud-3349813
  • issue/cloud-3350051
  • issue/cloud-3349505
  • issue/cloud-3350094
  • issue/cloud-3350107
  • issue/cloud-3351774
  • issue/cloud-3351990
  • issue/cloud-3352343
  • issue/cloud-3352839
  • issue/cloud-3352843
  • issue/cloud-3353083
  • issue/cloud-3353128
  • issue/cloud-3352095
  • issue/cloud-3352284
  • issue/cloud-3352627
  • issue/cloud-3352840
  • issue/cloud-3352861
  • issue/cloud-3353134
  • issue/cloud-3352618
  • issue/cloud-3352836
  • issue/cloud-3353073
  • issue/cloud-3353144
  • issue/cloud-3351227
  • issue/cloud-3351815
  • issue/cloud-3352337
  • issue/cloud-3352821
  • issue/cloud-3353170
  • issue/cloud-3353175
  • issue/cloud-3353180
  • issue/cloud-3353296
  • issue/cloud-3353191
  • issue/cloud-3353380
  • issue/cloud-3353595
  • issue/cloud-3353930
  • issue/cloud-3354139
  • issue/cloud-3354236
  • issue/cloud-3354374
  • issue/cloud-3354376
  • issue/cloud-3354379
  • issue/cloud-3354502
  • issue/cloud-3354505
  • issue/cloud-3354736
  • issue/cloud-3354768
  • issue/cloud-3354809
  • issue/cloud-3355219
  • issue/cloud-3355236
  • issue/cloud-3355256
  • issue/cloud-3355302
  • issue/cloud-3355515
  • issue/cloud-3355903
  • issue/cloud-3355942
  • issue/cloud-3355954
  • issue/cloud-3355965
  • issue/cloud-3356158
  • issue/cloud-3356230
  • issue/cloud-3356454
  • issue/cloud-3356456
  • issue/cloud-3356527
  • issue/cloud-3356528
  • issue/cloud-3356531
  • issue/cloud-3356744
  • issue/cloud-3356758
  • issue/cloud-3356775
  • issue/cloud-3356778
  • issue/cloud-3356780
  • issue/cloud-3356995
  • issue/cloud-3357000
  • issue/cloud-3357013
  • issue/cloud-3357099
  • issue/cloud-3357058
  • issue/cloud-3357545
  • issue/cloud-3357753
  • issue/cloud-3358765
  • issue/cloud-3358769
  • issue/cloud-3358768
  • issue/cloud-3358789
  • issue/cloud-3358803
  • issue/cloud-3358945
  • issue/cloud-3359271
  • issue/cloud-3359275
  • issue/cloud-3359313
  • issue/cloud-3359518
  • issue/cloud-3360272
  • issue/cloud-3360861
  • issue/cloud-3360865
  • issue/cloud-3360866
  • issue/cloud-3360896
  • issue/cloud-3360927
  • issue/cloud-3361130
  • issue/cloud-3361362
  • issue/cloud-3361479
  • issue/cloud-3361611
  • issue/cloud-3361750
  • issue/cloud-3362575
  • issue/cloud-3362605
  • issue/cloud-3362795
  • issue/cloud-3362829
  • issue/cloud-3363078
  • issue/cloud-3363113
  • issue/cloud-3363458
  • issue/cloud-3363744
  • issue/cloud-3363771
  • issue/cloud-3363773
  • issue/cloud-3363995
  • issue/cloud-3364325
  • issue/cloud-3364381
  • issue/cloud-3364561
  • issue/cloud-3364562
  • issue/cloud-3364581
  • issue/cloud-3364582
  • issue/cloud-3364603
  • issue/cloud-3364689
  • issue/cloud-3364751
  • issue/cloud-3365043
  • issue/cloud-3365220
  • issue/cloud-3365221
  • issue/cloud-3365226
  • issue/cloud-3365514
  • issue/cloud-3365773
  • issue/cloud-3366067
  • issue/cloud-3366115
  • issue/cloud-3366345
  • issue/cloud-3366349
  • issue/cloud-3366350
  • issue/cloud-3366436
  • issue/cloud-3366614
  • issue/cloud-3366618
  • issue/cloud-3366641
  • issue/cloud-3366900
  • issue/cloud-3367141
  • issue/cloud-3367261
  • issue/cloud-3367394
  • issue/cloud-3367407
  • issue/cloud-3367408
  • issue/cloud-3367793
  • issue/cloud-3367795
  • issue/cloud-3367838
  • issue/cloud-3367848
  • issue/cloud-3368747
  • issue/cloud-3368924
  • issue/cloud-3369296
  • issue/cloud-3369298
  • issue/cloud-3369977
  • issue/cloud-3370000
  • issue/cloud-3370030
  • issue/cloud-3402291
  • issue/cloud-3402708
  • issue/cloud-3406367
  • issue/cloud-3406626
  • issue/cloud-3370376
  • issue/cloud-3370570
  • issue/cloud-3400344
  • issue/cloud-3370819
  • issue/cloud-3370824
  • issue/cloud-3370846
  • issue/cloud-3403931
  • issue/cloud-3400408
  • issue/cloud-3405792
  • issue/cloud-3406395
  • issue/cloud-3406669
  • issue/cloud-3401036
  • issue/cloud-3401432
  • issue/cloud-3403261
  • issue/cloud-3404490
  • issue/cloud-3404789
  • issue/cloud-3399268
  • issue/cloud-3401037
  • issue/cloud-3401472
  • issue/cloud-3405390
  • issue/cloud-3405417
  • issue/cloud-3406378
  • issue/cloud-3399270
  • issue/cloud-3401473
  • issue/cloud-3406140
  • issue/cloud-3402646
  • issue/cloud-3402982
  • issue/cloud-3399472
  • issue/cloud-3399772
  • issue/cloud-3402301
  • issue/cloud-3406159
  • issue/cloud-3401049
  • issue/cloud-3406113
  • issue/cloud-3406635
  • issue/cloud-3406675
  • issue/cloud-3399993
  • issue/cloud-3405084
  • issue/cloud-3405425
  • issue/cloud-3399443
  • issue/cloud-3401420
  • issue/cloud-3400001
  • issue/cloud-3404519
  • issue/cloud-3371211
  • issue/cloud-3371251
  • issue/cloud-3371479
  • issue/cloud-3371480
  • issue/cloud-3371514
  • issue/cloud-3371922
  • issue/cloud-3372114
  • issue/cloud-3372119
  • issue/cloud-3372366
  • issue/cloud-3372415
  • issue/cloud-3373050
  • issue/cloud-3373136
  • issue/cloud-3373299
  • issue/cloud-3373456
  • issue/cloud-3373754
  • issue/cloud-3373789
  • issue/cloud-3374262
  • issue/cloud-3374538
  • issue/cloud-3374266
  • issue/cloud-3375128
  • issue/cloud-3375264
  • issue/cloud-3375434
  • issue/cloud-3375481
  • issue/cloud-3375708
  • issue/cloud-3375818
  • issue/cloud-3375970
  • issue/cloud-3376004
  • issue/cloud-3376008
  • issue/cloud-3376108
  • issue/cloud-3376363
  • issue/cloud-3376471
  • issue/cloud-3376804
  • issue/cloud-3377028
  • issue/cloud-3377300
  • issue/cloud-3377611
  • issue/cloud-3377631
  • issue/cloud-3377667
  • issue/cloud-3377984
  • issue/cloud-3378118
  • issue/cloud-3378152
  • issue/cloud-3378661
  • issue/cloud-3378883
  • issue/cloud-3378898
  • issue/cloud-3378678
  • issue/cloud-3379058
  • issue/cloud-3379176
  • issue/cloud-3379178
  • issue/cloud-3379196
  • issue/cloud-3379427
  • issue/cloud-3379498
  • issue/cloud-3379581
  • issue/cloud-3379826
  • issue/cloud-3379831
  • issue/cloud-3379866
  • issue/cloud-3380153
  • issue/cloud-3380164
  • issue/cloud-3380403
  • issue/cloud-3380604
  • issue/cloud-3380806
  • issue/cloud-3380859
  • issue/cloud-3380867
  • issue/cloud-3380950
  • issue/cloud-3381113
  • issue/cloud-3381159
  • issue/cloud-3399745
  • issue/cloud-3400002
  • issue/cloud-3405430
  • issue/cloud-3381738
  • issue/cloud-3381795
  • issue/cloud-3382016
  • issue/cloud-3382020
  • issue/cloud-3382180
  • issue/cloud-3382217
  • issue/cloud-3382223
  • issue/cloud-3382242
  • issue/cloud-3382222
  • issue/cloud-3382427
  • issue/cloud-3382740
  • issue/cloud-3382739
  • issue/cloud-3382746
  • issue/cloud-3382783
  • issue/cloud-3383005
  • issue/cloud-3383010
  • issue/cloud-3383054
  • issue/cloud-3383248
  • issue/cloud-3383258
  • issue/cloud-3383329
  • issue/cloud-3383507
  • issue/cloud-3383575
  • issue/cloud-3383633
  • issue/cloud-3383636
  • issue/cloud-3383641
  • issue/cloud-3383642
  • issue/cloud-3383687
  • issue/cloud-3384450
  • issue/cloud-3384636
  • issue/cloud-3384506
  • issue/cloud-3385077
  • issue/cloud-3385085
  • issue/cloud-3385104
  • issue/cloud-3385244
  • issue/cloud-3385247
  • issue/cloud-3385269
  • issue/cloud-3385261
  • issue/cloud-3385308
  • issue/cloud-3385535
  • issue/cloud-3385807
  • issue/cloud-3385822
  • issue/cloud-3385981
  • issue/cloud-3386037
  • issue/cloud-3386224
  • issue/cloud-3386250
  • issue/cloud-3386259
  • issue/cloud-3386365
  • issue/cloud-3386366
  • issue/cloud-3386367
  • issue/cloud-3386384
  • issue/cloud-3386471
  • issue/cloud-3386601
  • issue/cloud-3386610
  • issue/cloud-3386619
  • issue/cloud-3386712
  • issue/cloud-3386739
  • issue/cloud-3386873
  • issue/cloud-3386883
  • issue/cloud-3387181
  • issue/cloud-3387448
  • issue/cloud-3387454
  • issue/cloud-3387479
  • issue/cloud-3387562
  • issue/cloud-3387722
  • issue/cloud-3387724
  • issue/cloud-3387728
  • issue/cloud-3387819
  • issue/cloud-3387854
  • issue/cloud-3387938
  • issue/cloud-3387987
  • issue/cloud-3388149
  • issue/cloud-3388428
  • issue/cloud-3388430
  • issue/cloud-3388435
  • issue/cloud-3388469
  • issue/cloud-3388533
  • issue/cloud-3388714
  • issue/cloud-3388999
  • issue/cloud-3389044
  • issue/cloud-3389063
  • issue/cloud-3389266
  • issue/cloud-3389343
  • issue/cloud-3389344
  • issue/cloud-3389352
  • issue/cloud-3389430
  • issue/cloud-3389433
  • issue/cloud-3389470
  • issue/cloud-3389474
  • issue/cloud-3389704
  • issue/cloud-3389830
  • issue/cloud-3390034
  • issue/cloud-3390522
  • issue/cloud-3390564
  • issue/cloud-3390573
  • issue/cloud-3390762
  • issue/cloud-3390897
  • issue/cloud-3390908
  • issue/cloud-3390991
  • issue/cloud-3391015
  • issue/cloud-3391487
  • issue/cloud-3391488
  • issue/cloud-3392084
  • issue/cloud-3392090
  • issue/cloud-3392095
  • issue/cloud-3392108
  • issue/cloud-3392127
  • issue/cloud-3392137
  • issue/cloud-3392305
  • issue/cloud-3392432
  • issue/cloud-3392783
  • issue/cloud-3392803
  • issue/cloud-3393133
  • issue/cloud-3393432
  • issue/cloud-3393448
  • issue/cloud-3393450
  • issue/cloud-3395061
  • issue/cloud-3396478
  • issue/cloud-3396494
  • issue/cloud-3396497
  • issue/cloud-3396782
  • issue/cloud-3396841
  • issue/cloud-3397568
  • issue/cloud-3397597
  • issue/cloud-3396795
  • issue/cloud-3397917
  • issue/cloud-3397921
  • issue/cloud-3398036
  • issue/cloud-3398238
  • issue/cloud-3398925
  • issue/cloud-3399189
  • issue/cloud-3406842
  • issue/cloud-3406908
  • issue/cloud-3406963
  • issue/cloud-3407721
  • issue/cloud-3407815
  • issue/cloud-3407818
  • issue/cloud-3407819
  • issue/cloud-3407826
  • issue/cloud-3407829
  • issue/cloud-3407830
  • issue/cloud-3407982
  • issue/cloud-3407990
  • issue/cloud-3408015
  • issue/cloud-3408028
  • issue/cloud-3408068
  • issue/cloud-3408070
  • issue/cloud-3408104
  • issue/cloud-3408343
  • issue/cloud-3408346
  • issue/cloud-3408134
  • issue/cloud-3408372
  • issue/cloud-3408385
  • issue/cloud-3408832
  • issue/cloud-3408899
  • issue/cloud-3408933
  • issue/cloud-3408939
  • issue/cloud-3408965
  • issue/cloud-3408967
  • issue/cloud-3409356
  • issue/cloud-3409363
  • issue/cloud-3409375
  • issue/cloud-3409382
  • issue/cloud-3409553
  • issue/cloud-3409555
  • issue/cloud-3446961
  • issue/cloud-3409889
  • issue/cloud-3409911
  • issue/cloud-3409916
  • issue/cloud-3410153
  • issue/cloud-3410164
  • issue/cloud-3410185
  • issue/cloud-3410475
  • issue/cloud-3410677
  • issue/cloud-3410766
  • issue/cloud-3410771
  • issue/cloud-3410780
  • issue/cloud-3410824
  • issue/cloud-3410830
  • issue/cloud-3410832
  • issue/cloud-3410852
  • issue/cloud-3410853
  • issue/cloud-3410955
  • issue/cloud-3410968
  • issue/cloud-3410970
  • issue/cloud-3411114
  • issue/cloud-3411116
  • issue/cloud-3411129
  • issue/cloud-3411135
  • issue/cloud-3411149
  • issue/cloud-3411154
  • issue/cloud-3413903
  • issue/cloud-3413926
  • issue/cloud-3413928
  • issue/cloud-3413929
  • issue/cloud-3414125
  • issue/cloud-3414192
  • issue/cloud-3414204
  • issue/cloud-3414209
  • issue/cloud-3414221
  • issue/cloud-3414223
  • issue/cloud-3415106
  • issue/cloud-3415190
  • issue/cloud-3415219
  • issue/cloud-3415363
  • issue/cloud-3415372
  • issue/cloud-3415697
  • issue/cloud-3416044
  • issue/cloud-3416628
  • issue/cloud-3418203
  • issue/cloud-3418510
  • issue/cloud-3420266
  • issue/cloud-3422779
  • issue/cloud-3422777
  • issue/cloud-3423102
  • issue/cloud-3424163
  • issue/cloud-3424203
  • issue/cloud-3424219
  • issue/cloud-3424234
  • issue/cloud-3424222
  • issue/cloud-3425376
  • issue/cloud-3425385
  • issue/cloud-3425508
  • issue/cloud-3425630
  • issue/cloud-3425894
  • issue/cloud-3425931
  • issue/cloud-3426516
  • issue/cloud-3426535
  • issue/cloud-3426534
  • issue/cloud-3426964
  • issue/cloud-3427185
  • issue/cloud-3426240
  • issue/cloud-3427759
  • issue/cloud-3428019
  • issue/cloud-3436665
  • issue/cloud-3428380
  • issue/cloud-3437561
  • issue/cloud-3437562
  • issue/cloud-3437563
  • issue/cloud-3437159
  • issue/cloud-3436606
  • issue/cloud-3443311
  • issue/cloud-3436314
  • issue/cloud-3443330
  • issue/cloud-3436316
  • issue/cloud-3431187
  • issue/cloud-3432015
  • issue/cloud-3432549
  • issue/cloud-3432891
  • issue/cloud-3432907
  • issue/cloud-3447759
  • issue/cloud-3447760
  • issue/cloud-3449171
  • issue/cloud-3452826
  • issue/cloud-3452874
  • issue/cloud-3452875
  • issue/cloud-3452876
  • issue/cloud-3458095
  • issue/cloud-3458421
  • issue/cloud-3458886
  • issue/cloud-3458887
  • issue/cloud-3458885
  • issue/cloud-3458897
  • issue/cloud-3461750
  • issue/cloud-3461928
  • issue/cloud-3464812
  • issue/cloud-3467938
  • issue/cloud-3487684
  • issue/cloud-3487704
  • issue/cloud-3488325
  • issue/cloud-3504976
  • issue/cloud-3505229
  • issue/cloud-3506005
  • issue/cloud-3506006
  • issue/cloud-3506535
1985 results
Show changes
Showing
with 364 additions and 377 deletions
......@@ -15,11 +15,12 @@ Fn::Base64:
apt install software-properties-common
add-apt-repository ppa:ondrej/php
PHP_VERSION='8.1'
apt-get update -yq
apt-get upgrade -yq --with-new-pkgs
apt-get -yq install \
python3-pip python3-setuptools \
php8.0-cli php8.0-mbstring php8.0-xml php8.0-gd \
php$PHP_VERSION-cli php$PHP_VERSION-mbstring php$PHP_VERSION-xml php$PHP_VERSION-gd php$PHP_VERSION-curl \
apt-transport-https ca-certificates \
curl software-properties-common \
zip unzip
......@@ -29,7 +30,9 @@ Fn::Base64:
sudo php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
sudo php /tmp/composer-setup.php --install-dir /usr/local/bin --filename composer
sudo -u ubuntu composer config --global github-oauth.github.com "${GitHubToken}"
sudo -u ubuntu composer create-project docomoinnovations/cloud_orchestrator:${CloudOrchestratorVersion} $CO_DIR
sudo -u ubuntu composer -d $CO_DIR update
sudo chown -R ubuntu:ubuntu $CO_DIR
# Setup private directories.
......@@ -52,22 +55,25 @@ Fn::Base64:
sudo chown -R ubuntu:www-data $FILES_DIR
sudo chmod -R g+w $FILES_DIR
sudo tee -a $SETTINGS_FILE >/dev/null <<EOF
sudo tee -a $SETTINGS_FILE >/dev/null << EOF
\$settings['file_private_path'] = '/var/www/cloud_orchestrator/files/private';
\$settings['config_sync_directory'] = '../files/config/sync';
\$databases['default']['default'] = array (
'database' => '${DatabaseName}',
'username' => '${MySQLUserName}',
'password' => '${MySQLPassword}',
'prefix' => '',
'host' => '${DatabaseEndpointAddress}',
'port' => '${DatabasePort}',
'namespace' => 'Drupal\\\\Core\\\\Database\\\\Driver\\\\mysql',
'driver' => 'mysql',
);
\$databases['default']['default'] = [
'database' => '${DatabaseName}',
'username' => '${MySQLUserName}',
'password' => '${MySQLPassword}',
'prefix' => '',
'host' => '${DatabaseEndpointAddress}',
'port' => '${DatabasePort}',
'namespace' => 'Drupal\\\\Core\\\\Database\\\\Driver\\\\mysql',
'driver' => 'mysql',
'init_commands' => [
'isolation_level' => 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
],
];
EOF
# Setup the docker
# Set up the docker
curl -fsSL get.docker.com -o /tmp/get-docker.sh
sudo sh /tmp/get-docker.sh
sudo usermod -aG docker ubuntu
......@@ -98,7 +104,7 @@ Fn::Base64:
# Run the cloud orchestrator docker installer
IMAGE_TAG=docomoinnovations/cloud_orchestrator
CONTAINER_NAME=cloud-orchestrator
DOCKER_FILE_URL=https://git.drupalcode.org/project/cloud/-/raw/5.x/deployments/docker/Dockerfile
DOCKER_FILE_URL=https://git.drupalcode.org/project/cloud/-/raw/8.x/deployments/docker/Dockerfile
sudo docker build -t $IMAGE_TAG $DOCKER_FILE_URL
sudo docker run --name $CONTAINER_NAME $LINK_DB $LINK_MEMCACHE \
......@@ -107,19 +113,24 @@ Fn::Base64:
# Set up a drush command.
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "ln -s '$DOCKER_DIR/vendor/bin/drush' /usr/local/bin/"
# If 5.x-dev branch, enable OpenStack, VMware, and Terraform.
# AWS and K8s are enabled by default.
VERSION_REGEX="^(3.*)"
# Setup drush.yml and add EC2_IP as --uri
EC2_IP=`curl http://169.254.169.254/latest/meta-data/public-ipv4`
mkdir $CO_DIR/drush
sudo tee -a $CO_DIR/drush/drush.yml >/dev/null << EOF
options:
uri: http://$EC2_IP
EOF
sudo chown -R ubuntu:www-data $CO_DIR/drush
# Add private key directory
mkdir $CO_DIR/keys
# If 5.* branch, enable vmware, openstack and terraform. In versions
# greater than 5.x, all providers are enabled by default.
# Install Cloud Orchestrator using Drush
VERSION_REGEX="^(5.*)"
if [[ "${CloudOrchestratorVersion}" =~ $VERSION_REGEX ]]; then
# Install Cloud Orchestrator using Drush
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush si -y \
--db-url=\'mysql://${MySQLUserName}:${MySQLPassword}@${DatabaseEndpointAddress}:${DatabasePort}/${DatabaseName}\' \
--account-name='${DrupalUserName}' \
--account-pass='${DrupalPassword}' \
--site-name='Cloud Orchestrator' \
--account-mail='${DrupalEmail}' \
cloud_orchestrator"
else
# Install Cloud Orchestrator using Drush
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush si -y \
--db-url=\'mysql://${MySQLUserName}:${MySQLPassword}@${DatabaseEndpointAddress}:${DatabasePort}/${DatabaseName}\' \
......@@ -131,8 +142,21 @@ Fn::Base64:
cloud_orchestrator_module_configure_form.cloud_service_providers.terraform=terraform \
cloud_orchestrator_module_configure_form.cloud_service_providers.openstack=openstack \
cloud_orchestrator_module_configure_form.cloud_service_providers.vmware=vmware"
else
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush si -y \
--db-url=\'mysql://${MySQLUserName}:${MySQLPassword}@${DatabaseEndpointAddress}:${DatabasePort}/${DatabaseName}\' \
--account-name='${DrupalUserName}' \
--account-pass='${DrupalPassword}' \
--site-name='Cloud Orchestrator' \
--account-mail='${DrupalEmail}' \
cloud_orchestrator \
cloud_orchestrator_module_configure_form.cloud_spa_key_directory=$DOCKER_DIR/keys"
fi
# Adjust permissions for the keys directory.
sudo chown -R ubuntu:www-data $CO_DIR/keys
sudo chmod -R g+rw $CO_DIR/keys
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "chown -R www-data:www-data $DOCKER_DIR/files"
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "chown -R www-data:www-data $DOCKER_DIR/docroot/sites/default/files"
......@@ -180,6 +204,7 @@ Fn::Base64:
# sending success signal to CFn
/usr/local/bin/cfn-signal --exit-code=0 \
--resource=EC2 --stack=${CFnStackName} --region=${CFnStackRegion}
- MySQLUserName:
Ref: MySQLUserName
MySQLPassword:
......@@ -212,3 +237,5 @@ Fn::Base64:
Ref: ElastiCacheAddress
MemcachePort:
Ref: MemcachePort
GitHubToken:
Ref: GitHubToken
# Cloud Orchestrator Dockerfile
FROM php:8.0-apache-bullseye
FROM php:8.3-apache-bookworm
RUN set -eux; \
if command -v a2enmod; then \
a2enmod rewrite; \
fi; \
savedAptMark="$(apt-mark showmanual)"
RUN set -eux; \
......@@ -17,6 +16,8 @@ RUN set -eux; \
libjpeg-dev \
libmemcached-dev \
libpng-dev \
libssl-dev \
libwebp-dev \
libzip-dev \
mariadb-client \
unzip \
......@@ -29,26 +30,29 @@ RUN set -eux; \
git clone https://github.com/krakjoe/apcu /usr/src/php/ext/apcu \
&& cd /usr/src/php/ext/apcu \
&& docker-php-ext-install apcu > /dev/null 2>&1; \
\
# Install OpCache.
docker-php-ext-install -j "$(nproc)" opcache > /dev/null 2>&1; \
\
# Install uploadprogress.
pecl install uploadprogress > /dev/null 2>&1 \
&& docker-php-ext-enable uploadprogress > /dev/null 2>&1; \
\
# Install Memcached.
git clone https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached \
&& cd /usr/src/php/ext/memcached \
&& docker-php-ext-install memcached > /dev/null 2>&1; \
\
# Install graphic libraries and etc.
docker-php-ext-configure gd \
--with-freetype \
--with-jpeg > /dev/null 2>&1; \
--with-jpeg \
--with-webp > /dev/null 2>&1; \
\
docker-php-ext-install -j "$(nproc)" \
gd \
mysqli \
opcache \
pdo_mysql \
zip > /dev/null 2>&1
......@@ -65,6 +69,7 @@ RUN { \
echo 'max_execution_time = 600'; \
echo 'max_input_time = 600'; \
echo 'max_input_vars = 100000'; \
echo 'output_buffering = 4096'; \
} > /usr/local/etc/php/conf.d/extras.ini
RUN { \
......
......@@ -9,14 +9,14 @@ command. Note that
will be set.
```
$ kubectl apply -f https://git.drupalcode.org/project/cloud/-/raw/5.x/deployments/kubernetes/amd64/cloud_orchestrator.yml
$ kubectl apply -f https://git.drupalcode.org/project/cloud/-/raw/8.x/deployments/kubernetes/amd64/cloud_orchestrator.yml
```
If your K8s cluster consists ARM64-based nodes, use
[`arm64/cloud_orchestrator.yml`](arm64/cloud_orchestrator.yml) instead.
```
$ kubectl apply -f https://git.drupalcode.org/project/cloud/-/raw/5.x/deployments/kubernetes/arm64/cloud_orchestrator.yml
$ kubectl apply -f https://git.drupalcode.org/project/cloud/-/raw/8.x/deployments/kubernetes/arm64/cloud_orchestrator.yml
```
#### Alternative procedure
......@@ -27,7 +27,7 @@ access your Cloud Orchestrator, follow these commands instead.
Download the Cloud Orchestrator manifest file.
```
$ curl -LO https://git.drupalcode.org/project/cloud/-/raw/5.x/deployments/kubernetes/amd64/cloud_orchestrator.yml
$ curl -LO https://git.drupalcode.org/project/cloud/-/raw/8.x/deployments/kubernetes/amd64/cloud_orchestrator.yml
```
Update the following lines.
......@@ -65,7 +65,7 @@ You can access your Cloud Orchestrator by opening `EXTERNAL-IP` with the prefix
### Remove Cloud Orchestrator from your K8s cluster
```
$ kubectl delete -f https://git.drupalcode.org/project/cloud/-/raw/5.x/deployments/kubernetes/amd64/cloud_orchestrator.yml
$ kubectl delete -f https://git.drupalcode.org/project/cloud/-/raw/8.x/deployments/kubernetes/amd64/cloud_orchestrator.yml
```
`*/cloud_orchestrator.yml` installs Cloud Orchestrator and stores MariaDB
......
......@@ -114,20 +114,20 @@ spec:
spec:
containers:
- name: cloud-orchestrator
image: docomoinnovations/cloud_orchestrator:5.x-dev
image: docomoinnovations/cloud_orchestrator:8.x-dev
imagePullPolicy: Always
command: ["bash", "-c"]
args:
- |
export SCRIPT='/entrypoint.sh';
if ! [ -f "${SCRIPT}" ]; then
curl -L 'https://git.drupalcode.org/project/cloud/-/raw/5.x/deployments/kubernetes/entrypoint.sh' -o "${SCRIPT}"
curl -L 'https://git.drupalcode.org/project/cloud/-/raw/8.x/deployments/kubernetes/entrypoint.sh' -o "${SCRIPT}"
chmod +x "${SCRIPT}"
fi;
"${SCRIPT}"
env:
- name: CLOUD_ORCHESTRATOR_VERSION
value: 5.x-dev
value: 8.x-dev
- name: DRUPAL_USER
valueFrom:
secretKeyRef:
......
......@@ -114,20 +114,20 @@ spec:
spec:
containers:
- name: cloud-orchestrator
image: docomoinnovations/cloud_orchestrator:5.x-dev-arm64
image: docomoinnovations/cloud_orchestrator:8.x-dev-arm64
imagePullPolicy: Always
command: ["bash", "-c"]
args:
- |
export SCRIPT='/entrypoint.sh';
if ! [ -f "${SCRIPT}" ]; then
curl -L 'https://git.drupalcode.org/project/cloud/-/raw/5.x/deployments/kubernetes/entrypoint.sh' -o "${SCRIPT}"
curl -L 'https://git.drupalcode.org/project/cloud/-/raw/8.x/deployments/kubernetes/entrypoint.sh' -o "${SCRIPT}"
chmod +x "${SCRIPT}"
fi;
"${SCRIPT}"
env:
- name: CLOUD_ORCHESTRATOR_VERSION
value: 5.x-dev
value: 8.x-dev
- name: DRUPAL_USER
valueFrom:
secretKeyRef:
......
......@@ -17,6 +17,7 @@ if ! [ -f "${SETTINGS_FILE}" ]; then
git config --global url.'https://github.com/'.insteadOf 'git@github.com:'
git config --global url.'https://'.insteadOf 'git://'
composer create-project "docomoinnovations/cloud_orchestrator:${CLOUD_ORCHESTRATOR_VERSION}" "${CO_DIR}"
composer -d "${CO_DIR}" update
chown -R www-data:www-data "${CO_DIR}"
# Setup private directories.
......@@ -70,7 +71,10 @@ EOF
drush en -y memcache memcache_admin
tee -a "${SETTINGS_FILE}" > /dev/null <<EOF
tee -a "${SETTINGS_FILE}" > /dev/null << EOF
\$databases['default']['default']['init_commands'] = [
'isolation_level' => 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
];
\$settings['memcache']['servers'] = ['${MEMCACHED_HOST}:${MEMCACHED_PORT}' => 'default'];
\$settings['memcache']['bins'] = ['default' => 'default'];
\$settings['memcache']['key_prefix'] = 'cloud_orchestrator';
......
# This is the DrupalCI testbot build file for Drupal core.
# Learn to make one for your own drupal.org project:
# https://www.drupal.org/drupalorg/docs/drupal-ci/customizing-drupalci-testing
build:
# Hope that the following setting will work, but it doesn't work.
# codebase:
# assemble_codebase:
# composer.install:
# options: 'install --ignore-platform-req=ext-sodium --prefer-dist --no-suggest --no-interaction --no-progress'
assessment:
validate_codebase:
phplint: {}
csslint:
halt-on-fail: false
eslint:
# A test must pass eslinting standards check in order to continue processing.
halt-on-fail: true
phpcs:
# phpcs will use core's specified version of Coder.
sniff-all-files: false
halt-on-fail: false
testing:
# run_tests task is executed several times in order of performance speeds.
# halt-on-fail can be set on the run_tests tasks in order to fail fast.
# suppress-deprecations is false in order to be alerted to usages of
# deprecated code.
container_command:
commands: |
apt-get update && apt-get install -y libsodium-dev
docker-php-ext-install sodium
composer config platform.ext-sodium $PHP_VERSION --file=composer.json
run_tests.phpunit:
types: 'PHPUnit-Unit'
testgroups: '--all'
suppress-deprecations: false
halt-on-fail: false
run_tests.kernel:
types: 'PHPUnit-Kernel'
testgroups: '--all'
suppress-deprecations: false
halt-on-fail: false
run_tests.simpletest:
types: 'Simpletest'
testgroups: '--all'
suppress-deprecations: false
halt-on-fail: false
run_tests.functional:
types: 'PHPUnit-Functional'
testgroups: '--all'
suppress-deprecations: false
halt-on-fail: false
# Functional JavaScript tests require a concurrency of 1 because there is
# only one instance of PhantomJS on the testbot machine.
run_tests.javascript:
concurrency: 1
types: 'PHPUnit-FunctionalJavascript'
testgroups: '--all'
suppress-deprecations: false
halt-on-fail: false
# Run nightwatch testing.
# @see https://www.drupal.org/project/drupal/issues/2869825
nightwatchjs: { }
/**
* @file
* Used for this module
*
*/
/**
* NAME: Bootstrap 3 Triple Nested Sub-Menus
* This script will active Triple level multi drop-down menus in Bootstrap 3.*
*/
/*
$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
// Avoid following the href location when clicking
event.preventDefault();
// Avoid having the menu to close when clicking
event.stopPropagation();
// Re-add .open to parent sub-menu item
$(this).parent().addClass('open');
$(this).parent().find("ul").parent().find("li.dropdown").addClass('open');
});
*/
/**
* Renders Action Block on Mouse Over for table data with action buttons
*
*/
(function ($) {
'use strict';
Drupal.behaviors.showActionButtons = {
attach: function (context, settings) {
if ($('table.sticky-header .action-column')) {
// adds CSS to the table to hide the action column in the header
$('table.sticky-header').addClass('hide-action-column');
}
if ($('table.sticky-enabled .action-column')) {
// adds CSS to the table to hide the action column
$('table.sticky-enabled').addClass('hide-action-column');
// append action toggle icon DOM to every nickname cell
if ($('table.sticky-enabled tbody tr td.nickname-column a').length > 0) {
$('table.sticky-enabled tbody tr td.nickname-column a').each(function () {
if (!$(this).hasClass('lockIcon')) {
// Create Action Table show/hide icon
let action_toggle_icon = document.createElement('div');
action_toggle_icon.className = 'action_toggle_icon';
$(action_toggle_icon).insertBefore($(this));
}
});
}
else if ($('table.sticky-enabled tbody tr td.nickname-column span.anchor').length > 0) {
$('table.sticky-enabled tbody tr td.nickname-column span.anchor').each(function () {
if (!$(this).hasClass('lockIcon')) {
// Create Action Table show/hide icon
let action_toggle_icon = document.createElement('div');
action_toggle_icon.className = 'action_toggle_icon';
$(action_toggle_icon).insertBefore($(this));
}
});
}
// Adding On Click behavior to Action Buttons
$('table.sticky-enabled tbody tr .action_toggle_icon').each(function (index) {
$(this).click(function (e) {
toggleActionButtons(this);
});
});
// Adding On MouseOut behavior to row of Action Buttons
$('table.sticky-enabled tbody tr').each(function (index) {
$(this).bind('mouseleave', function () {
if ($(this).find('.action_toggle_icon').hasClass('action_toggle_icon_on')) {
$(this).find('.action_toggle_icon_on').removeClass('action_toggle_icon_on');
$(this).find('.action-column').css('display', 'none');
}
});
});
}
}
};
let toggleActionButtons = function (evt) {
// action button tooltip displacement values
let action_column_left_position_displacement = '25px';
let row_height_displacement = '-3'; // used by IE, Safari and Chrome
// Obsolete after ver.0.9
// if ($.browser.mozilla)
// row_height_displacement = "2";
let parent_row = $(evt).parent().parent();
// let parent_row = parent_row_obj[0];
// Dom Interaction
if ($(evt).hasClass('action_toggle_icon_on')) { // Hide Action Buttons
$(evt).removeClass('action_toggle_icon_on');
$(parent_row).find('.action-column').css('display', 'none');
}
else { // Show Action Buttons
$(evt).addClass('action_toggle_icon_on');
// get row height
let row_height = $(parent_row).height() - row_height_displacement;
// toggle display to block to show action column
$(parent_row).find('.action-column')
.css('display', 'block')
.css('left', action_column_left_position_displacement)
.css('margin-top', row_height);
}
};
})(jQuery);
(function ($, drupalSettings) {
(function (drupalSettings) {
'use strict';
let countryId = 'edit-field-location-country';
......@@ -28,25 +28,29 @@
return;
}
let country = $('#' + countryId).val();
let city = $('#' + cityId).val();
if (country === '_none' || city.trim().length === 0) {
let countryInput = document.getElementById(countryId);
let cityInput = document.getElementById(cityId);
if (countryInput.value === '_none' || cityInput.value.trim().length === 0) {
return;
}
let url = drupalSettings.cloud.geocoder_url;
url = url.replace('country', country);
url = url.replace('city', city);
url = url.replace('country', countryInput.value);
url = url.replace('city', cityInput.value);
$.ajax({
async: false,
url: url,
dataType: 'json',
success: function success(data) {
let xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
if (xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
if (data && data.latitude && data.longitude) {
let step = $('#' + latitudeId).attr('step');
if (step && $.isNumeric(step)) {
step = Number.parseFloat(step);
let latitudeInput = document.getElementById(latitudeId);
let longitudeInput = document.getElementById(longitudeId);
let step = latitudeInput.getAttribute('step');
if (step && !isNaN(step)) {
step = parseFloat(step);
}
else {
step = 0.000001;
......@@ -54,31 +58,29 @@
step = 1 / step;
let latitude = Math.round(data.latitude * step) / step;
let longitude = Math.round(data.longitude * step) / step;
$('#' + latitudeId).val(latitude);
$('#' + longitudeId).val(longitude);
latitudeInput.value = latitude;
longitudeInput.value = longitude;
}
}
});
};
xhr.send();
};
$('#' + countryId).change(function () {
setGeolocation();
});
$('#' + countryId).blur(function () {
setGeolocation();
});
$('#' + cityId).change(function () {
setGeolocation();
});
let countryInput = document.getElementById(countryId);
if (countryInput) {
countryInput.addEventListener('change', setGeolocation);
countryInput.addEventListener('blur', setGeolocation);
}
$('#' + cityId).blur(function () {
setGeolocation();
});
let cityInput = document.getElementById(cityId);
if (cityInput) {
cityInput.addEventListener('change', setGeolocation);
cityInput.addEventListener('blur', setGeolocation);
}
$('form').submit(function () {
setGeolocation();
});
let form = document.querySelector('form');
if (form) {
form.addEventListener('submit', setGeolocation);
}
}(jQuery, drupalSettings));
}(drupalSettings));
(function ($) {
(function () {
'use strict';
Drupal.Cloud = {};
......@@ -16,74 +16,84 @@
const TITLE_POSITION_Y = 70;
const BACKGROUND_DEFAULT_COLOR = 'rgba(0, 0, 0, 0)';
// Draw Chart Function.
Drupal.Cloud.drawChart = function (datas, first) {
datas.forEach(function (data, idx) {
// Delete current chart.
d3.select(data.selector).select('svg').remove();
const drawXAxisLabels = (firstRowContainer, values) => {
// Reset the <div> for the current x-axis.
const prevXAxisDiv = document.querySelector('#x-axis');
if (prevXAxisDiv) {
prevXAxisDiv.remove();
}
const xAxisDiv = document.createElement('div');
xAxisDiv.id = 'x-axis';
firstRowContainer.before(xAxisDiv);
// Draw charts.
if (first && idx === 0) {
// Delete the axis.
d3.select('#x-axis').remove();
const axis = new HorizonChart();
axis.setHeight(AXIS_HEIGHT);
axis.setDataSet(values);
axis.setSelector('#x-axis');
axis.draw();
// Add <div> for the axis.
$(data.selector).before('<div id="x-axis"></div>');
const g = xAxisDiv.querySelector('g:first-child:not(.axis):not(.tick)');
if (g) {
g.style.display = 'none';
}
for (const axisg of xAxisDiv.querySelectorAll('g.axis')) {
axisg.style.fontSize = AXIS_FONT_SIZE;
}
};
// Draw charts.
const axis = new HorizonChart();
axis.setHeight(AXIS_HEIGHT);
axis.setDataSet(data.values);
axis.setSelector('#x-axis');
axis.draw();
// Draw Chart Function.
Drupal.Cloud.drawChart = (data, first) => {
data.forEach(({ id, selector, values }, idx) => {
const rowContainer = document.querySelector(selector);
if (!(rowContainer instanceof Element)) {
return;
}
// Delete current chart.
rowContainer.innerHTML = '';
const chartg = d3.selectAll('#x-axis g:first-child');
chartg.style('display', 'none');
const axisg = d3.selectAll('#x-axis .axis');
axisg.attr('font-size', AXIS_FONT_SIZE);
// Draw labels on the x-axis.
if (first && idx === 0) {
drawXAxisLabels(rowContainer, values);
}
// Draw charts.
const horizonChart = new HorizonChart();
const fontColor = $(data.selector).css('color');
const fontColor = getComputedStyle(rowContainer).color;
let bgColor = '';
$(data.selector).parents().each(function () {
console.log(getComputedStyle(this).backgroundColor);
let color = getComputedStyle(this).backgroundColor;
for (let container = rowContainer; container; container = container.parentElement) {
const color = getComputedStyle(container).backgroundColor;
if (color && color !== BACKGROUND_DEFAULT_COLOR) {
bgColor = color;
return false;
break;
}
});
horizonChart.setTitle(data.id);
}
horizonChart.setTitle(id);
horizonChart.setTitleFontSize(TITLE_FONT_SIZE);
horizonChart.setTitlePosition(TITLE_POSITION_X, TITLE_POSITION_Y);
horizonChart.setTitleColer(fontColor);
horizonChart.setHeight(CHART_HEIGHT);
horizonChart.setDataSet(data.values);
horizonChart.setSelector(data.selector);
horizonChart.setDataSet(values);
horizonChart.setSelector(selector);
horizonChart.setColors(colors[idx % 2]);
horizonChart.setShowXScale(false);
horizonChart.draw();
const g = d3.selectAll(data.selector + ' svg g');
const title = d3.selectAll(data.selector + ' svg text');
const bbox = $(data.selector + ' svg text')[0].getBBox();
g.insert('rect', data.selector + ' svg text')
.attr('x', bbox.x - 1)
.attr('y', bbox.y)
.attr('width', bbox.width + 2)
.attr('height', bbox.height)
.attr('fill', bgColor)
.style('opacity', '0.8');
const title = rowContainer.querySelector('svg g text');
const bbox = title.getBBox();
const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
rect.setAttribute('x', bbox.x - 1);
rect.setAttribute('y', bbox.y);
rect.setAttribute('width', bbox.width + 2);
rect.setAttribute('height', bbox.height);
rect.setAttribute('fill', bgColor);
rect.style.opacity = '0.8';
title.before(rect);
$(data.selector).css('margin-bottom', '0');
rowContainer.style.marginBottom = '0';
if (!first || idx > 0) {
$(data.selector).css('border-top', '1px solid #ddd');
rowContainer.style.borderTop = '1px solid #ddd';
}
});
};
})(jQuery);
})();
/**
* @file
* Defines the behavior of the Page Load Progress module.
*
* Page Load Progress sets a screen lock showing a spinner when the user clicks
* on an element that triggers a time consuming task.
*/
(function ($, Drupal) {
'use strict';
Drupal.behaviors.page_load_progress = {
attach: function (context, settings) {
let delay = Number(settings.page_load_progress.delay);
let elements = String(settings.page_load_progress.elements).split(',');
let internal_links = Boolean(settings.page_load_progress.internal_links);
let esc_key = Boolean(settings.page_load_progress.esc_key);
let screen_lock = '<div class="page-load-progress-lock-screen page-load-progress-hidden">\n\
<div class="page-load-progress-throbber">\
</div>\n\
</div>';
let body = $('body', context, settings);
// Add the screen lock behavior for each configured element.
for (let i in elements) {
// Prevents from getting in the way of HTML 5 form validation.
$(elements[i]).parents('form').submit(function () {
setTimeout(lockScreen, delay);
});
}
// Add the throbber for internal links only if requested in the UI.
// Also if the link has a btn-wait class.
if (internal_links) {
$('a[href]').on('click', function (evnt) {
// Lock the screen only if the link is Refresh.
if ($(this).attr('href').indexOf('/update') == -1) {
return;
}
// Do not lock the screen if the link is being opened in a new tab.
// Source: https://stackoverflow.com/a/20087506/9637665.
if (evnt.ctrlKey || evnt.shiftKey || evnt.metaKey || (evnt.button && evnt.button == 1)) {
return;
}
// Do not lock the screen if the link is within a modal.
if ($(this).parents('.modal').length > 0) {
return;
}
setTimeout(lockScreen, delay);
});
}
// Allows ESC key to kill the throbber.
if (esc_key) {
document.onkeydown = function (evt) {
evt = evt || window.event;
let isEscape = ('key' in evt)
// "Escape" is standard in modern browsers. 'Esc' is primarily for
// Internet Explorer 9 and Firefox 36 and earlier.
? (evt.key === 'Escape' || evt.key === 'Esc')
// keyCode is getting deprecated. Keeping it for legacy reasons.
: evt.keyCode === 27;
if (isEscape) {
$('.page-load-progress-lock-screen').remove();
}
};
}
/**
* Lock screen method.
*
* This method locks the screen by displaying the screen_lock HTML DOM
* part as a full page overlay.
*/
let lockScreen = function () {
body.append(screen_lock);
body.css({
'overflow' : 'hidden'
});
$('.page-load-progress-lock-screen').fadeIn('slow');
}
}
};
})(jQuery, Drupal);
......@@ -10,8 +10,8 @@ INTRODUCTION
REQUIREMENTS
============
- Drupal `9.4.x` or higher (The latest version of Drupal `9.x`)
- Cloud `5.x` or higher
- Drupal `10.x` or higher (The latest version of Drupal `10.x`)
- Cloud `8.x` or higher
INSTALLATION
============
......
......@@ -2,7 +2,7 @@ name: 'Cloud Budget'
type: module
description: 'Allows users to manage Cloud Budget.'
package: Cloud
core_version_requirement: ^8.8 || ^9
core_version_requirement: ^10.3 || ^11
configure: cloud_budget.settings
dependencies:
- cloud:cloud
......@@ -7,6 +7,7 @@
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\user\Entity\User;
/**
* Implements hook_help().
......@@ -44,6 +45,89 @@ function cloud_budget_cron() {
cloud_budget_update_credits();
}
/**
* Implements hook_ENTITY_TYPE_predelete().
*/
function cloud_budget_user_predelete($account): void {
// Reassign cloud store entities.
$cloud_store_ids = \Drupal::entityTypeManager()
->getStorage('cloud_credit')
->getQuery()
->accessCheck(TRUE)
->condition('uid', $account->id())
->execute();
\Drupal::service('cloud')->reassignUids($cloud_store_ids, [
'uid' => 0,
], 'cloud_credit', FALSE, $account, [
// Do additional processing specific to cloud_credit entities.
'cloud_budget_delete_cloud_credit_user_callback',
]);
}
/**
* Additional callback during user delete operation.
*
* Callback queries the cloud_credit table and deletes any entities
* where the user field = user being deleted.
*
* @param array $entities
* Array of entity ids.
* @param array $updates
* Array of key/values to update.
* @param string $entity_type
* The entity type.
* @param bool $revision
* TRUE if the entities support revisions.
* @param \Drupal\user\Entity\User $account
* User entity.
* @param array|\ArrayAccess $context
* An array of contextual key/values.
*/
function cloud_budget_delete_cloud_credit_user_callback(array $entities, array $updates, string $entity_type, bool $revision, User $account, &$context): void {
if (!isset($context['sandbox']['progress'])) {
// Load cloud_credit entities.
$cloud_store_entities = [];
try {
$cloud_store_entities = \Drupal::entityTypeManager()
->getStorage('cloud_credit')
->loadByProperties([
'user' => $account->id(),
]);
}
catch (\Exception $e) {
\Drupal::service('cloud')->handleException($e);
}
$context['sandbox']['progress'] = 0;
$context['sandbox']['max'] = count($cloud_store_entities);
$context['sandbox']['entities'] = $cloud_store_entities;
}
try {
$count = min(5, count($context['sandbox']['entities']));
for ($i = 1; $i <= $count; $i++) {
/** @var \Drupal\cloud_budget\Entity\CloudCredit $entity */
$entity = array_shift($context['sandbox']['entities']);
$entity->delete();
// Update our progress information.
$context['sandbox']['progress']++;
}
}
catch (\Exception $e) {
\Drupal::service('cloud')->handleException($e);
// Set progress value to max so batch processing completes.
$context['sandbox']['progress'] = $context['sandbox']['max'];
}
// Inform the batch engine that we are not finished,
// and provide an estimation of the completion level we reached.
if ($context['sandbox']['progress'] !== $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
/**
* Update credits.
*/
......
......@@ -473,7 +473,6 @@ display:
default_argument_options:
index: 2
use_alias: false
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
......
......@@ -2,12 +2,12 @@
namespace Drupal\cloud_budget\Controller;
use Drupal\cloud\Traits\AccessCheckTrait;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Access\AccessResultInterface;
use Drupal\Core\Entity\EntityAccessControlHandler;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\cloud\Traits\AccessCheckTrait;
/**
* Access controller for the cluster role entity.
......
......@@ -2,9 +2,9 @@
namespace Drupal\cloud_budget\Entity;
use Drupal\cloud\Entity\CloudContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\cloud\Entity\CloudContentEntityBase;
/**
* Defines the cloud credit entity.
......
......@@ -2,9 +2,6 @@
namespace Drupal\cloud_budget\Form;
use Drupal\cloud\Form\CloudContentForm;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Service\EntityLinkRendererInterface;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
......@@ -18,6 +15,9 @@ use Drupal\Core\Plugin\CachedDiscoveryClearerInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\cloud\Form\CloudContentForm;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Service\EntityLinkRendererInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
......@@ -111,19 +111,21 @@ class CloudBudgetContentForm extends CloudContentForm {
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The factory for configuration objects.
*/
public function __construct(EntityRepositoryInterface $entity_repository,
EntityTypeBundleInfoInterface $entity_type_bundle_info,
TimeInterface $time,
Messenger $messenger,
EntityLinkRendererInterface $entity_link_renderer,
EntityTypeManager $entity_type_manager,
CacheBackendInterface $cacheRender,
CachedDiscoveryClearerInterface $plugin_cache_clearer,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager,
AccountInterface $current_user,
RouteMatchInterface $route_match,
DateFormatterInterface $date_formatter,
ConfigFactoryInterface $config_factory) {
public function __construct(
EntityRepositoryInterface $entity_repository,
EntityTypeBundleInfoInterface $entity_type_bundle_info,
TimeInterface $time,
Messenger $messenger,
EntityLinkRendererInterface $entity_link_renderer,
EntityTypeManager $entity_type_manager,
CacheBackendInterface $cacheRender,
CachedDiscoveryClearerInterface $plugin_cache_clearer,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager,
AccountInterface $current_user,
RouteMatchInterface $route_match,
DateFormatterInterface $date_formatter,
ConfigFactoryInterface $config_factory,
) {
parent::__construct($entity_repository, $entity_type_bundle_info, $time, $messenger, $cloud_config_plugin_manager);
$this->entityLinkRenderer = $entity_link_renderer;
$this->entityTypeManager = $entity_type_manager;
......@@ -177,7 +179,7 @@ class CloudBudgetContentForm extends CloudContentForm {
* The form array.
*/
protected function copyFormItemValues(array $form): void {
$original_entity = $this->manager
$original_entity = $this->entityTypeManager
->getStorage($this->entity->getEntityTypeId())
->load($this->entity->id());
......@@ -265,8 +267,7 @@ class CloudBudgetContentForm extends CloudContentForm {
continue;
}
$value = trim($value);
$form_state->setValue($field_name, $value);
$form_state->setValue($field_name, trim($value ?: ''));
$this->entity->set($field_name, $value);
}
}
......@@ -291,7 +292,7 @@ class CloudBudgetContentForm extends CloudContentForm {
}
/**
* Helper function to get title translatable string of a item.
* Helper function to get title translatable string of an item.
*
* @param \Drupal\Core\StringTranslation\TranslatableMarkup $t
* The translatable string.
......
......@@ -2,13 +2,14 @@
namespace Drupal\cloud_budget\Form;
use Drupal\cloud\Entity\CloudContentEntityBase;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Traits\CloudDeleteMultipleFormTrait;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\TempStore\PrivateTempStoreFactory;
use Drupal\cloud\Entity\CloudContentEntityBase;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Traits\CloudDeleteMultipleFormTrait;
/**
* Provides an entities deletion confirmation form.
......@@ -30,19 +31,25 @@ class CloudBudgetDeleteMultipleForm extends CloudBudgetProcessMultipleForm {
* The messenger service.
* @param \Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface $cloud_config_plugin_manager
* The cloud service provider plugin manager (CloudConfigPluginManager).
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
* The route match.
*/
public function __construct(AccountInterface $current_user,
EntityTypeManager $entity_type_manager,
PrivateTempStoreFactory $temp_store_factory,
MessengerInterface $messenger,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager) {
public function __construct(
AccountInterface $current_user,
EntityTypeManager $entity_type_manager,
PrivateTempStoreFactory $temp_store_factory,
MessengerInterface $messenger,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager,
RouteMatchInterface $route_match,
) {
parent::__construct(
$current_user,
$entity_type_manager,
$temp_store_factory,
$messenger,
$cloud_config_plugin_manager
$cloud_config_plugin_manager,
$route_match
);
// Set the temp_store_factory.
......
......@@ -39,7 +39,7 @@ class CloudCreditCreateForm extends CloudBudgetContentForm {
$this->addOthersFieldset($form, $weight++, $cloud_context);
$form['actions'] = $this->actions($form, $form_state, $cloud_context);
$form['actions'] = $this->actions($form, $form_state);
return $form;
}
......@@ -56,7 +56,7 @@ class CloudCreditCreateForm extends CloudBudgetContentForm {
}
$cloud_context = $this->routeMatch->getParameter('cloud_context');
$users = \Drupal::entityTypeManager()
$users = $this->entityTypeManager
->getStorage($this->entity->getEntityTypeId())
->loadByProperties([
'cloud_context' => $cloud_context,
......