Still trying to work this out, here is my latest code. @bastianallgeier is this nearly right?
if (Custom\App\App::fieldValuesChanged($oldMediaBlocks->toJson(), $newMediaBlocks->toJson()) ){
$layoutArray = array();
foreach ($newPage->layout()->toLayouts() as $layout){
$columnsArray = array();
foreach ($layout->columns() as $column){
$blocksArray = array();
foreach ($column->blocks() as $block){
if($block->type() === "media"){
$old = $block->toArray();
if ( $block->primaryVideoId()->isNotEmpty() ){
$data = Custom\App\App::getVideoData($block->primaryVideoId()->value(), $block->primaryVideoResolution()->value());
$old['content']['primaryVideoThumbnailLink'] = $data['thumbnailLink'];
$old['content']['primaryVideoLink'] = $data['fileLink'];
} else {
$old['content']['primaryVideoThumbnailLink'] = '';
$old['content']['primaryVideoLink'] = '';
}
$new[] = new Kirby\Cms\Block($old);
array_push($blocksArray, $new[0]);
} else {
$new[] = new Kirby\Cms\Block($block->toArray());
array_push($blocksArray, $new[0]);
}
}
$newBlocks = new Kirby\Cms\Blocks($blocksArray ?? []);
$newColumn = new Kirby\Cms\LayoutColumn(
[
'blocks' => $newBlocks->toArray(),
]
);
array_push($columnsArray, $newColumn);
}
$newLayoutColumns = new Kirby\Cms\LayoutColumns( $columnsArray );
$newLayout = Kirby\Cms\Layout::factory(
[
'columns' => $newLayoutColumns->toArray(),
]
);
array_push($layoutArray, $newLayout);
}
$newLayouts = new Kirby\Cms\Layouts( $layoutArray );
// $newPage->update([
// 'layout' => json_encode($nothing),
// ]);
}