/**
  * The constructor
  * @param $service the AssetOperationHandlerService object
  * @param $identifier the identifier object
  */
 public function __construct(aohs\AssetOperationHandlerService $service, \stdClass $identifier)
 {
     parent::__construct($service, $identifier);
     if (isset($this->getProperty()->structuredData)) {
         $this->processStructuredData();
     } else {
         $this->xhtml = $this->getProperty()->xhtml;
     }
 }
<?php

require_once 'auth_tutorial7.php';
use cascade_ws_AOHS as aohs;
use cascade_ws_constants as c;
use cascade_ws_asset as a;
use cascade_ws_property as p;
use cascade_ws_utility as u;
use cascade_ws_exception as e;
try {
    // test static method
    $id = "06e401898b7ffe83765c5582e367462b";
    $block = a\Block::getBlock($service, $id);
    //->dump( true ); // no type info supplied
    echo a\Block::getBlockType($service, $id), BR;
    // get methods
    echo "Created by: ", $block->getCreatedBy(), BR, "Created on: ", $block->getCreatedDate(), BR, "Expiration folder ID: ", $block->getExpirationFolderId(), BR, "Expiration folder path: ", $block->getExpirationFolderPath(), BR, "Expiration folder recycled: ", u\StringUtility::boolToString($block->getExpirationFolderRecycled()), BR, "Last modified by: ", $block->getLastModifiedBy(), BR, "Last modified date: ", $block->getLastModifiedDate(), BR, "Metadata set ID: ", $block->getMetadataSetId(), BR, "Metadata set path: ", $block->getMetadataSetPath(), BR;
    u\DebugUtility::dump($block->getDynamicFields());
    u\DebugUtility::dump($block->getMetadataStdClass());
    echo u\ReflectionUtility::getClassDocumentation("cascade_ws_asset\\Block");
} catch (\Exception $e) {
    echo S_PRE . $e . E_PRE;
} catch (\Error $er) {
    echo S_PRE . $er . E_PRE;
}
function assetTreeSwitchDataDefinitionForBlock(aohs\AssetOperationHandlerService $service, p\Child $child, $params = NULL, &$results = NULL)
{
    global $common_assets_site_name;
    $type = $child->getType();
    if ($type != a\DataBlock::TYPE) {
        return;
    }
    if (!isset($params["cascade"])) {
        throw new \Exception("The Cascade object is not supplied");
    } else {
        $cascade = $params["cascade"];
    }
    $block = $child->getAsset($service);
    $b_name = $block->getName();
    if ($b_name == "_footer-contact") {
        $dd_name = "Footer Contact";
    } elseif ($b_name == "_left-column") {
        $dd_name = "Left Column";
    } elseif ($b_name == "_right-column") {
        $dd_name = "Right Column";
    } elseif ($b_name == "_site-info") {
        $dd_name = "Site Info";
    } else {
        return;
    }
    $dd = $cascade->getAsset(a\DataDefinition::TYPE, $dd_name, $common_assets_site_name);
    $st = new p\StructuredData($dd->getStructuredData(), $service, $dd->getId());
    $identifiers = $block->getIdentifiers();
    foreach ($identifiers as $identifier) {
        // create the correct number of instances for multiple field
        if (u\StringUtility::endsWith($identifier, ";0") && $st->hasIdentifier($identifier)) {
            $st->createNInstancesForMultipleField($block->getNumberOfSiblings($identifier), $identifier);
        }
        // map the data
        if ($st->hasNode($identifier) && $block->isTextNode($identifier)) {
            $st->setText($identifier, $block->getText($identifier));
        } elseif ($st->hasNode($identifier) && $block->isAssetNode($identifier)) {
            $asset_node_type = $block->getAssetNodeType($identifier);
            if ($asset_node_type == "page" && $block->getPageId($identifier) != null) {
                $st->setPage($identifier, $cascade->getPage($block->getPageId($identifier)));
            } elseif ($asset_node_type == "file" && $block->getFileId($identifier) != null) {
                $st->setFile($identifier, $cascade->getFile($block->getFileId($identifier)));
            } elseif ($asset_node_type == "block" && $block->getBlockId($identifier) != null) {
                $st->setBlock($identifier, a\Block::getBlock($service, $block->getBlockId($identifier)));
            } elseif ($asset_node_type == "page,file,symlink" && $block->getLinkableId($identifier) != null) {
                $st->setLinkable($identifier, a\Linkable::getLinkable($service, $block->getLinkableId($identifier)));
            }
        }
    }
    $block->setStructuredData($st);
}
 public static function assetTreeUpdatePage(aohs\AssetOperationHandlerService $service, p\Child $child, $params = NULL, &$results = NULL)
 {
     $source_content = NULL;
     if (isset($params['source-cascade'])) {
         $source_cascade = $params['source-cascade'];
     } else {
         echo c\M::SOURCE_CASCADE_NOT_SET . BR;
         return;
     }
     if (isset($params['target-cascade'])) {
         $target_cascade = $params['target-cascade'];
     } else {
         echo c\M::TARGET_CASCADE_NOT_SET . BR;
         return;
     }
     if (isset($params['source-site'])) {
         $source_site = $params['source-site'];
     } else {
         echo c\M::SOURCE_SITE_NOT_SET . BR;
         return;
     }
     if (isset($params['target-site'])) {
         $target_site = $params['target-site'];
     } else {
         echo c\M::TARGET_SITE_NOT_SET . BR;
         return;
     }
     if (isset($params['exception-thrown'])) {
         $exception_thrown = $params['exception-thrown'];
     } else {
         echo c\M::EXCEPTION_THROWN_NOT_SET . BR;
         return;
     }
     if (isset($params['update-data'])) {
         $update_data = $params['update-data'];
     } else {
         $update_data = true;
     }
     if (isset($params['update-metadata'])) {
         $update_metadata = $params['update-metadata'];
     } else {
         $update_metadata = true;
     }
     try {
         $source_page = $child->getAsset($service);
         $source_page_path = u\StringUtility::removeSiteNameFromPath($source_page->getPath());
     } catch (\Exception $e) {
         throw new e\CascadeInstancesErrorException($e . BR . S_SPAN . "Path: " . $child->getPathPath() . E_SPAN);
     }
     // it will fail if there is any irregularity in the page
     if ($source_page->hasStructuredData()) {
         $source_page_dd = $source_page->getDataDefinition();
         $source_page_dd_path = u\StringUtility::removeSiteNameFromPath($source_page_dd->getPath());
         $source_page_dd_site = $source_page_dd->getSiteName();
         $target_page_dd_site = $source_page_dd_site;
         // compare the two data definitions
         $source_dd = Asset::getAsset($service, DataDefinition::TYPE, $source_page_dd_path, $source_page_dd_site);
         // data definition must be there
         $target_dd = $target_cascade->getAsset(DataDefinition::TYPE, $source_page_dd_path, $target_page_dd_site);
         $source_xml = new \SimpleXMLElement($source_dd->getXml());
         $target_xml = new \SimpleXMLElement($target_dd->getXml());
         if (!u\XMLUtility::isXmlIdentical($source_xml, $target_xml)) {
             throw new e\CascadeInstancesErrorException(S_SPAN . c\M::DIFFERENT_DATA_DEFINITIONS . E_SPAN);
         }
         $source_structured_data_std = $source_page->getStructuredData()->toStdClass();
         $target_dd_id = $target_dd->getId();
         $target_structured_data_std = $source_structured_data_std;
         $target_structured_data_std->definitionId = $target_dd_id;
     } else {
         $source_content = $source_page->getXhtml();
     }
     // content type
     $source_page_ct = $source_page->getContentType();
     $source_page_ct_path = u\StringUtility::removeSiteNameFromPath($source_page_ct->getPath());
     $source_page_ct_site = $source_page_ct->getSiteName();
     $target_page_ct_site = $source_page_ct_site;
     // content type must be there
     $target_page_ct = $target_cascade->getAsset(ContentType::TYPE, $source_page_ct_path, $target_page_ct_site);
     $source_page_path_array = u\StringUtility::getExplodedStringArray("/", $source_page_path);
     $source_page_path = $source_page_path_array[count($source_page_path_array) - 1];
     $source_page_parent_path = $source_page->getParentContainerPath();
     // create page
     $target_site_name = $target_site->getName();
     // parent must be there
     $target_parent = $target_cascade->getAsset(Folder::TYPE, $source_page_parent_path, $target_site_name);
     $target_page = $target_cascade->createPage($target_parent, $source_page_path, $target_page_ct, $source_content);
     // update data
     if ($update_data) {
         if ($target_page->hasStructuredData()) {
             try {
                 $target_service = $target_cascade->getService();
                 $identifiers = $source_page->getIdentifiers();
                 $identifier_asset_map = array();
                 $identifier_method_map = array();
                 $structured_data = new p\StructuredData($target_structured_data_std, $target_service);
                 foreach ($identifiers as $identifier) {
                     // store the resources
                     if ($source_page->isAssetNode($identifier)) {
                         $block_id = $source_page->getBlockId($identifier);
                         if (isset($block_id)) {
                             $resource_id = $block_id;
                             $source_resource_type = Block::getBlockType($service, $resource_id);
                         }
                         $file_id = $source_page->getFileId($identifier);
                         if (isset($file_id)) {
                             $resource_id = $file_id;
                             $source_resource_type = File::TYPE;
                         }
                         $page_id = $source_page->getPageId($identifier);
                         if (isset($page_id)) {
                             $resource_id = $page_id;
                             $source_resource_type = Page::TYPE;
                         }
                         $symlink_id = $source_page->getSymlinkId($identifier);
                         if (isset($symlink_id)) {
                             $resource_id = $symlink_id;
                             $source_resource_type = Symlink::TYPE;
                         }
                         if (isset($resource_id)) {
                             try {
                                 $source_resource = $service->retrieve($service->createId($source_resource_type, $resource_id));
                                 if ($service->isSuccessful()) {
                                     $source_resource_site = $source_resource->siteName;
                                     $source_resource_path = $source_resource->path;
                                     $target_resource_site = $source_resource_site;
                                     try {
                                         $asset = $target_cascade->getAsset($source_resource_type, $source_resource_path, $source_resource_site);
                                         $target_resource_id = $asset->getId();
                                         $identifier_asset_map[$identifier] = $asset;
                                         $resource_id = NULL;
                                     } catch (\Exception $e) {
                                         if ($exception_thrown) {
                                             throw new e\CascadeInstancesErrorException($e . BR . S_SPAN . "Path: " . $source_resource_path . E_SPAN);
                                         } else {
                                             DebugUtility::out($e->getMessage());
                                         }
                                     }
                                 }
                             } catch (\Exception $e) {
                                 if ($exception_thrown) {
                                     throw new e\CascadeInstancesErrorException($e);
                                 } else {
                                     DebugUtility::out($e->getMessage());
                                 }
                             }
                         }
                         // reinitialized for next round
                         $resource_id = NULL;
                     }
                 }
                 $identifiers = array_keys($identifier_asset_map);
                 $count = count($identifiers);
                 if ($count > 0) {
                     foreach ($identifiers as $identifier) {
                         $asset = $identifier_asset_map[$identifier];
                         $type = $asset->getType();
                         switch ($type) {
                             case 'file':
                                 $method = 'setFile';
                                 break;
                             case 'page':
                                 $method = 'setPage';
                                 break;
                             case 'symlink':
                                 $method = 'setSymlink';
                                 break;
                             default:
                                 $method = 'setBlock';
                         }
                         $identifier_method_map[$identifier] = $method;
                         // unplug everything from source
                         $structured_data->{$method}($identifier, NULL);
                         // unset method name
                         $method = NULL;
                     }
                 }
                 try {
                     $target_page->setStructuredData($structured_data);
                 } catch (\Exception $e) {
                     if ($exception_thrown) {
                         throw new e\CascadeInstancesErrorException($e);
                     } else {
                         DebugUtility::out($e->getMessage());
                     }
                 }
                 if ($count > 0) {
                     foreach ($identifier_method_map as $identifier => $method) {
                         $asset = $identifier_asset_map[$identifier];
                         $target_page->{$method}($identifier, $identifier_asset_map[$identifier]);
                     }
                 }
                 $target_page->edit();
             } catch (\Exception $e) {
                 if ($exception_thrown) {
                     throw new e\CascadeInstancesErrorException($e);
                 } else {
                     DebugUtility::out($e->getMessage());
                 }
             }
         }
         // page-level blocks and formats
         $map = self::getPageLevelBlockFormat($source_cascade, $source_page);
         foreach ($map as $config_name => $regions) {
             if (count($regions[0]) > 0) {
                 $region_map = $regions[0];
                 foreach ($region_map as $region => $block_format) {
                     if (isset($block_format['block'])) {
                         if (self::DEBUG) {
                             u\DebugUtility::out("Block " . $block_format['block']);
                         }
                         $type = Block::getBlockType($service, $block_format['block']);
                         if (self::DEBUG) {
                             u\DebugUtility::out("Type " . $type);
                         }
                         $source_block = $source_cascade->getAsset($type, $block_format['block']);
                         $source_block_path = u\StringUtility::removeSiteNameFromPath($source_block->getPath());
                         $source_block_site = $source_block->getSiteName();
                         if ($source_block_site == $source_page->getSiteName()) {
                             $target_block_site = $target_page->getSiteName();
                         } else {
                             $target_block_site = $source_block_site;
                         }
                         try {
                             $target_block = $target_cascade->getAsset($type, $source_block_path, $target_block_site);
                             $target_page->setRegionBlock($config_name, $region, $target_block)->edit();
                             if (self::DEBUG) {
                                 u\DebugUtility::out("Page: " . $target_page->getName() . " Region: " . $region);
                             }
                         } catch (\Exception $e) {
                             if ($exception_thrown) {
                                 throw new e\CascadeInstancesErrorException($e);
                             } else {
                                 DebugUtility::out($e->getMessage());
                             }
                         }
                     } else {
                         if (isset($block_format['no-block'])) {
                             $target_page->setRegionNoBlock($config_name, $region, true);
                         }
                     }
                     if (isset($block_format['format'])) {
                         if (self::DEBUG) {
                             u\DebugUtility::out("Format " . $block_format['format']);
                         }
                         $type = Format::getFormatType($service, $block_format['format']);
                         if (self::DEBUG) {
                             u\DebugUtility::out("Type " . $type);
                         }
                         $source_format = $source_cascade->getAsset($type, $block_format['format']);
                         $source_format_path = u\StringUtility::removeSiteNameFromPath($source_format->getPath());
                         $source_format_site = $source_format->getSiteName();
                         if ($source_format_site == $source_page->getSiteName()) {
                             $target_format_site = $target_page->getSiteName();
                         } else {
                             $target_format_site = $source_format_site;
                         }
                         try {
                             $target_format = $target_cascade->getAsset($type, $source_format_path, $target_format_site);
                             $target_page->setRegionFormat($config_name, $region, $target_format)->edit();
                             if (self::DEBUG) {
                                 u\DebugUtility::out("Page: " . $target_page->getName() . " Region: " . $region);
                             }
                         } catch (\Exception $e) {
                             if ($exception_thrown) {
                                 throw new e\CascadeInstancesErrorException($e);
                             } else {
                                 DebugUtility::out($e->getMessage());
                             }
                         }
                     } else {
                         if (isset($block_format['no-format'])) {
                             $target_page->setRegionNoFormat($config_name, $region, true);
                         }
                     }
                 }
             }
         }
     }
     $target_page->setMaintainAbsoluteLinks($source_page->getMaintainAbsoluteLinks())->setShouldBeIndexed($source_page->getShouldBeIndexed())->setShouldBePublished($source_page->getShouldBePublished())->edit();
     // commit everything before metadata
     // metadata
     if ($update_metadata) {
         $target_page->setMetadata($source_page->getMetadata());
     }
 }
Ejemplo n.º 5
0
 public function setRegionBlock($config_name, $region_name, Block $block = NULL)
 {
     if (!isset($this->page_configuration_map[$config_name])) {
         throw new e\NoSuchPageConfigurationException(S_SPAN . "Path: " . $this->getPath() . E_SPAN . BR . "The page configuration {$config_name} does not exist.");
     }
     if (self::DEBUG) {
         u\DebugUtility::out("Setting block to region" . BR . "Region name: " . $region_name);
         if (isset($block)) {
             u\DebugUtility::out("Block ID: " . $block->getId());
         } else {
             u\DebugUtility::out("No block passed in.");
         }
     }
     $this->page_configuration_map[$config_name]->setRegionBlock($region_name, $block);
     return $this;
 }
function assetTreeSwitchPageContentType(aohs\AssetOperationHandlerService $service, p\Child $child, $params = NULL, &$results = NULL)
{
    if ($child->getType() != a\Page::TYPE) {
        return;
    }
    // make sure that there is a content type passed in
    if (!isset($params['ct'])) {
        throw new \Exception("No content type is supplied");
    }
    // make sure that there is a base page passed in
    if (!isset($params['bp'])) {
        throw new \Exception("No base page is supplied");
    }
    // pages to skip
    if (isset($params['skip'])) {
        $skip = $params['skip'];
    }
    if (in_array($child->getPathPath(), $skip)) {
        return;
    }
    $ct = $params['ct'];
    $bp = $params['bp'];
    // retrieve page to be processed
    $p = $child->getAsset($service);
    // get number of content-group
    $identifier = "content-group;0";
    $num_of_groups = 1;
    // get the number of instances of the multiple node
    if ($p->hasIdentifier($identifier)) {
        $num_of_groups = $p->getNumberOfSiblings($identifier);
    }
    // get the current structured data with data
    $sd_old = $p->getStructuredData();
    if (!isset($sd_old)) {
        return;
    }
    // create enough instances of the multiple field
    if ($num_of_groups > 1) {
        $bp->createNInstancesForMultipleField($num_of_groups, $identifier);
    }
    // get the blank structured data with needed nodes
    $sd_new = clone $bp->getStructuredData();
    // roll back the base page
    if ($num_of_groups > 1) {
        $bp->createNInstancesForMultipleField(1, $identifier);
    }
    // switch the content type
    $p->setContentType($ct, false);
    // fix the data
    if (u\StringUtility::endsWith($child->getPathPath(), 'index')) {
        $sd_new->setText("right-column", "yes");
    } else {
        $sd_new->setText("right-column", "no");
    }
    $sd_new->setText("left-column", "yes");
    $sd_new->setText("left-column-group;left-setup", "default");
    // the H1
    $sd_new->setText("main-content-title", $sd_old->getText("main-content-title"));
    // main WYSIWYG
    $sd_new->setText("main-content-content", $sd_old->getText("main-content-content"));
    // multiple groups with choosers
    for ($i = 0; $i < $num_of_groups; $i++) {
        $identifier = "content-group;" . $i . ";content-group-chooser";
        // null the id for the upcoming round
        $block_id = NULL;
        // read the block
        if ($sd_old->hasIdentifier($identifier)) {
            $block_id = $sd_old->getBlockId($identifier);
        }
        // if there is a block attached
        if (isset($block_id) && $block_id != "") {
            $b = a\Block::getBlock($service, $block_id);
            $sd_new->setBlock($identifier, $b);
            $identifier = "content-group;" . $i . ";content-group-size";
            $size_str = strtolower($sd_old->getText($identifier));
            // fix the possible value for the new data definition
            if ($size_str != 'full') {
                $size_str = 'half';
            }
            $sd_new->setText($identifier, $size_str);
            $identifier = "content-group;" . $i . ";content-group-block-floating";
            $sd_new->setText($identifier, strtolower($sd_old->getText($identifier)));
        }
        // WYSIWYGs in group
        $identifier = "content-group;" . $i . ";content-group-content";
        $sd_new->setText($identifier, $sd_old->getText($identifier));
    }
    // set the data
    $p->setStructuredData($sd_new);
}
 public function setBlock(a\Block $block = NULL)
 {
     if (self::DEBUG) {
         u\DebugUtility::out("setBlock called: " . $block->getId());
     }
     // required
     if ($this->required && $block == NULL) {
         throw new e\EmptyValueException(S_SPAN . c\M::NULL_BLOCK . E_SPAN);
     }
     if ($this->asset_type != c\T::BLOCK) {
         throw new e\NodeException(S_SPAN . "The asset does not accept a block." . E_SPAN);
     }
     if (isset($block)) {
         $this->block_id = $block->getId();
         $this->block_path = $block->getPath();
     } else {
         $this->block_id = NULL;
         $this->block_path = NULL;
     }
     return $this;
 }
 private static function copyData($source, StructuredData $target, $id)
 {
     if (!$source instanceof StructuredData && !$source instanceof StructuredDataPhantom) {
         throw new \Exception("Wrong source type");
     }
     if ($source->isTextNode($id) || $source->isWYSIWYG($id)) {
         $target->setText($id, $source->getText($id));
         if ($target->getText($id) == NULL) {
             $target->setText($id, "");
         }
     } elseif ($source->isAssetNode($id)) {
         $asset_type = $source->getAssetNodeType($id);
         try {
             switch ($asset_type) {
                 case c\T::PAGE:
                     $page_id = $source->getPageId($id);
                     if (isset($page_id)) {
                         $target->setPage($id, $source->getService()->getAsset($source->getService()->createId(a\Page, $page_id)));
                     }
                     break;
                 case c\T::FILE:
                     $file_id = $source->getFileId($id);
                     if (isset($file_id)) {
                         $target->setFile($id, $source->getService()->getAsset($source->getService()->createId(a\File, $file_id)));
                     }
                     break;
                 case c\T::BLOCK:
                     $block_id = $source->getBlockId($id);
                     if (isset($block_id)) {
                         $target->setBlock($id, a\Block::getBlock($target->getService(), $block_id));
                     }
                     break;
                 case c\T::SYMLINK:
                     $symlink_id = $source->getSymlinkId($id);
                     if (isset($symlink_id)) {
                         $target->setSymlink($id, $source->getService()->getAsset($source->getService()->createId(a\Symlink, $symlink_id)));
                     }
                     break;
                 case c\T::PFS:
                     $linkable_id = $source->getLinkableId($id);
                     if (isset($linkable_id)) {
                         $target->setLinkable($id, a\Linkable::getLinkable($source->getService(), $linkable_id));
                     }
                     break;
             }
         } catch (e\NoSuchTypeException $e) {
             // do nothing to skip deleted blocks
         }
     }
 }
function assetTreeSwitchPageContentType(aohs\AssetOperationHandlerService $service, p\Child $child, array $params = NULL, array &$results = NULL)
{
    if ($child->getType() != a\Page::TYPE) {
        return;
    }
    // make sure that there is a content type passed in
    if (!isset($params['ct'])) {
        throw new \Exception("No content type is supplied");
    }
    // make sure that there is a base page passed in
    if (!isset($params['bp'])) {
        throw new \Exception("No base page is supplied");
    }
    // make sure that there are global blocks passed in
    if (!isset($params['google-tag']) || !isset($params['site-storage']) || !isset($params['link-script']) || !isset($params['page-title']) || !isset($params['search-form'])) {
        throw new \Exception("No global blocks are supplied");
    }
    // pages to skip
    if (isset($params['skip'])) {
        $skip = $params['skip'];
    }
    // skip whatever that is supposed to be skipped
    if (isset($skip) && is_array($skip) && in_array($child->getPathPath(), $skip)) {
        return;
    }
    // retrieve all required assets
    $ct = $params['ct'];
    $bp = $params['bp'];
    $google_tag = $params['google-tag'];
    $site_storage = $params['site-storage'];
    $link_script = $params['link-script'];
    $page_title = $params['page-title'];
    $search_form = $params['search-form'];
    // can run into phantom nodes
    try {
        // retrieve page to be processed
        $p = $child->getAsset($service);
        // get number of content-group
        $identifier = "content-group;0";
        $num_of_groups = 1;
        // get the number of instances of the multiple node
        if ($p->hasIdentifier($identifier)) {
            $num_of_groups = $p->getNumberOfSiblings($identifier);
        }
        // get the current structured data with data
        $sd_old = $p->getStructuredData();
        if (!isset($sd_old)) {
            return;
        }
        // create enough instances of the multiple field
        if ($num_of_groups > 1) {
            $bp->createNInstancesForMultipleField($num_of_groups, $identifier);
        }
        // get the blank structured data with needed nodes
        $sd_new = clone $bp->getStructuredData();
        // roll back the base page
        if ($num_of_groups > 1) {
            $bp->createNInstancesForMultipleField(1, $identifier);
        }
        // switch the content type
        $p->setContentType($ct, false);
        // fix the data
        if (u\StringUtility::endsWith($p->getPath(), 'index')) {
            $sd_new->setText("right-column", "yes");
        } else {
            $sd_new->setText("right-column", "no");
        }
        $sd_new->setText("left-column", "yes");
        $sd_new->setText("left-column-group;left-setup", "default");
        // the H1
        echo "Title: ", $p->getMetadata()->getTitle(), BR;
        $title = $p->getMetadata()->getTitle() != "" ? $p->getMetadata()->getTitle() : "Title to be set";
        $sd_new->setText("main-content-title", $p->getMetadata()->getTitle());
        // main WYSIWYG
        $sd_new->setText("main-content-content", $sd_old->getText("main-content-content"));
        // multiple groups with choosers
        for ($i = 0; $i < $num_of_groups; $i++) {
            $identifier = "content-group;" . $i . ";content-group-chooser";
            // null the id for the upcoming round
            $block_id = NULL;
            // read the block
            if ($sd_old->hasIdentifier($identifier)) {
                $block_id = $sd_old->getBlockId($identifier);
            }
            // if there is a block attached
            if (isset($block_id) && $block_id != "") {
                $b = a\Block::getBlock($service, $block_id);
                $sd_new->setBlock($identifier, $b);
                $identifier = "content-group;" . $i . ";content-group-size";
                $size_str = strtolower($sd_old->getText($identifier));
                // fix the possible value for the new data definition
                if ($size_str != 'full') {
                    $size_str = 'half';
                }
                $sd_new->setText($identifier, $size_str);
                $identifier = "content-group;" . $i . ";content-group-block-floating";
                $sd_new->setText($identifier, strtolower($sd_old->getText($identifier)));
            }
            // WYSIWYGs in group
            $identifier = "content-group;" . $i . ";content-group-content";
            $sd_new->setText($identifier, $sd_old->getText($identifier));
        }
        // set the data
        $p->setStructuredData($sd_new);
    } catch (e\NoSuchFieldException $e) {
        $page_id = $child->getId();
        $phantom_page = new a\PagePhantom($service, $service->createId(a\PagePhantom::TYPE, $page_id));
        $dd = $phantom_page->getDataDefinition();
        $healthy_sd = new p\StructuredData($dd->getStructuredData(), $service, $dd->getId());
        $phantom_sd = $phantom_page->getStructuredDataPhantom();
        $healthy_sd = $healthy_sd->removePhantomNodes($phantom_sd);
        $phantom_page->setStructuredData($healthy_sd);
    }
    // attach the five global blocks
    $p->setBlock("site-config-group;google-tag-manager", $google_tag)->setBlock("site-config-group;site-storage", $site_storage)->setBlock("site-config-group;global-link-script", $link_script)->setBlock("site-config-group;page-title", $page_title)->setBlock("site-config-group;search-form", $search_form)->setBlock("site-config-group;global-script")->edit();
}