X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FStorage%2FRevisionSlots.php;h=ba9780f66b4ee419ee71345db6fd4a65ca7e4468;hb=ef1edcea3c0315b013807181368c5c79ffdbadc2;hp=f37e722bbaa346f446bc2bc5ed56b56b22a70ac0;hpb=284bc0b5eb1c0e47d7100d5604ab4d5180dcd8d5;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Storage/RevisionSlots.php b/includes/Storage/RevisionSlots.php index f37e722bba..ba9780f66b 100644 --- a/includes/Storage/RevisionSlots.php +++ b/includes/Storage/RevisionSlots.php @@ -270,4 +270,43 @@ class RevisionSlots { return true; } + /** + * Find roles for which the $other RevisionSlots object has different content + * as this RevisionSlots object, including any roles that are present in one + * but not the other. + * + * @param RevisionSlots $other + * + * @return string[] a list of slot roles that are different. + */ + public function getRolesWithDifferentContent( RevisionSlots $other ) { + if ( $other === $this ) { + return []; + } + + $aSlots = $this->getSlots(); + $bSlots = $other->getSlots(); + + ksort( $aSlots ); + ksort( $bSlots ); + + $different = array_keys( array_merge( + array_diff_key( $aSlots, $bSlots ), + array_diff_key( $bSlots, $aSlots ) + ) ); + + /** @var SlotRecord[] $common */ + $common = array_intersect_key( $aSlots, $bSlots ); + + foreach ( $common as $role => $s ) { + $t = $bSlots[$role]; + + if ( !$s->hasSameContent( $t ) ) { + $different[] = $role; + } + } + + return $different; + } + }