25 private $modifiedSlots = [];
30 private $removedRoles = [];
50 foreach ( $parentSlots->getSlots() as $role => $slot ) {
51 if ( !isset( $modified[$role] ) ) {
53 } elseif ( $slot->hasSameContent( $modified[$role] ) ) {
55 unset( $modified[$role] );
80 foreach ( $newContent as $role => $content ) {
81 $slot = SlotRecord::newUnsaved( $role, $content );
84 && $parentSlots->hasSlot( $role )
85 && $slot->hasSameContent( $parentSlots->getSlot( $role ) )
91 $modified[$role] = $slot;
101 public function __construct( array $modifiedSlots = [], array $removedRoles = [] ) {
102 foreach ( $modifiedSlots as $slot ) {
106 foreach ( $removedRoles as $role ) {
123 return array_keys( $this->modifiedSlots );
133 return array_keys( $this->removedRoles );
156 unset( $this->removedRoles[$role] );
157 $this->modifiedSlots[$role] = $slot;
168 $slot = SlotRecord::newUnsaved( $role, $content );
181 unset( $this->modifiedSlots[$role] );
182 $this->removedRoles[$role] =
true;
201 if ( isset( $this->modifiedSlots[$role] ) ) {
202 return $this->modifiedSlots[$role];
205 'No such slot: {role}',
221 return isset( $this->modifiedSlots[$role] );
234 return isset( $this->removedRoles[$role] );
262 if ( !$s->hasSameContent( $t ) ) {
Content objects represent page content, e.g.