/** * Add a page type. * * @param array $data { * @var string $handle A string which can be used to identify the page type * @var string $name A user friendly display name * @var \PageTemplate $defaultTemplate The default template object * @var string $allowedTemplates (A|C|X) A for all, C for selected only, X for non-selected only * @var \PageTemplate[] $templates Array or Iterator of selected templates, see `$allowedTemplates` * @var bool $internal Is this an internal only page type? Default: `false` * @var bool $ptLaunchInComposer Does this launch in composer? Default: `false` * @var bool $ptIsFrequentlyAdded Should this always be displayed in the pages panel? Default: `false` * } * @param bool|Package $pkg This should be false if the type is not tied to a package, or a package object * * @return static|mixed|null */ public static function add($data, $pkg = false) { $data = $data + array('defaultTemplate' => null, 'allowedTemplates' => null, 'templates' => null, 'internal' => null, 'ptLaunchInComposer' => null, 'ptIsFrequentlyAdded' => null); $ptHandle = $data['handle']; $ptName = $data['name']; $ptDefaultPageTemplateID = 0; $ptIsFrequentlyAdded = 0; $ptLaunchInComposer = 0; $pkgID = 0; if (is_object($pkg)) { $pkgID = $pkg->getPackageID(); } if (is_object($data['defaultTemplate'])) { $ptDefaultPageTemplateID = $data['defaultTemplate']->getPageTemplateID(); } $ptAllowedPageTemplates = 'A'; if ($data['allowedTemplates']) { $ptAllowedPageTemplates = $data['allowedTemplates']; } $templates = array(); if (is_array($data['templates'])) { $templates = $data['templates']; } $ptIsInternal = 0; if ($data['internal']) { $ptIsInternal = 1; } if ($data['ptLaunchInComposer']) { $ptLaunchInComposer = 1; } if ($data['ptIsFrequentlyAdded']) { $ptIsFrequentlyAdded = 1; } $db = Loader::db(); $ptDisplayOrder = 0; $count = $db->GetOne('select count(ptID) from PageTypes where ptIsInternal = ?', array($ptIsInternal)); if ($count > 0) { $ptDisplayOrder = $count; } $db->Execute('insert into PageTypes (ptName, ptHandle, ptDefaultPageTemplateID, ptAllowedPageTemplates, ptIsInternal, ptLaunchInComposer, ptDisplayOrder, ptIsFrequentlyAdded, pkgID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)', array($ptName, $ptHandle, $ptDefaultPageTemplateID, $ptAllowedPageTemplates, $ptIsInternal, $ptLaunchInComposer, $ptDisplayOrder, $ptIsFrequentlyAdded, $pkgID)); $ptID = $db->Insert_ID(); if ($ptAllowedPageTemplates != 'A') { foreach ($templates as $pt) { $db->Execute('insert into PageTypePageTemplates (ptID, pTemplateID) values (?, ?)', array($ptID, $pt->getPageTemplateID())); } } $ptt = static::getByID($ptID); // set all type publish target as default $target = PageTypePublishTargetType::getByHandle('all'); if (is_object($target)) { $configuredTarget = $target->configurePageTypePublishTarget($ptt, array()); $ptt->setConfiguredPageTypePublishTargetObject($configuredTarget); } // copy permissions from the defaults to the page type $cpk = PermissionKey::getByHandle('access_page_type_permissions'); $permissions = PermissionKey::getList('page_type'); foreach ($permissions as $pk) { $pk->setPermissionObject($ptt); $pk->copyFromDefaultsToPageType($cpk); } // now we clear the default from edit page drafts $pk = PermissionKey::getByHandle('edit_page_type_drafts'); if (is_object($pk)) { $pk->setPermissionObject($ptt); $pt = $pk->getPermissionAssignmentObject(); if (is_object($pt)) { $pt->clearPermissionAssignment(); } // now we assign the page draft owner access entity $pa = PermissionAccess::create($pk); $pe = PageOwnerPermissionAccessEntity::getOrCreate(); $pa->addListItem($pe); $pt->assignPermissionAccess($pa); return $ptt; } }
public function skipItem() { $editor = Type::getByHandle($this->object->getHandle()); return is_object($editor); }
/** * Create a page type and assign defaults and shit */ private function createPageType(array $settings) { // Cast to an object $settings = (object) $settings; // Get the page type if it exists previously $pageType = PageType::getByHandle($settings->configs['handle']); // Delete it? Only works if the $pageType isn't assigned to this package already if (is_object($pageType) && !((int) $pageType->getPackageID() >= 1)) { $pageType->delete(); } if (!is_object(PageType::getByHandle($settings->configs['handle']))) { /** @var $ptPage \Concrete\Core\Page\Type\Type */ $ptPage = PageType::add(array_merge(array('ptIsFrequentlyAdded' => 1, 'ptLaunchInComposer' => 1), $settings->configs), $this->packageObject()); // Set configured publish target $ptPage->setConfiguredPageTypePublishTargetObject(PublishTargetType::getByHandle('all')->configurePageTypePublishTarget($ptPage, array('ptID' => $ptPage->getPageTypeID()))); /** @var $layoutSet \Concrete\Core\Page\Type\Composer\FormLayoutSet */ $layoutSet = $ptPage->addPageTypeComposerFormLayoutSet('Basics', 'Basics'); // Are we adding composer controls? if (property_exists($settings, 'controls') && is_array($settings->controls)) { // Core page properties $corePageProperties = $settings->controls['core_page_property']; if (is_array($corePageProperties)) { /** @var $controlTypeObj \Concrete\Core\Page\Type\Composer\Control\Type\CorePagePropertyType */ $controlTypeObj = \Concrete\Core\Page\Type\Composer\Control\Type\Type::getByHandle('core_page_property'); if (is_object($controlTypeObj)) { foreach ($corePageProperties as $controlName => $isRequired) { $control = $controlTypeObj->getPageTypeComposerControlByIdentifier($controlName); $control->addToPageTypeComposerFormLayoutSet($layoutSet)->updateFormLayoutSetControlRequired($isRequired); } } } // Blocks $pageBlocks = $settings->controls['block']; if (is_array($pageBlocks)) { /** @var $controlTypeObj \Concrete\Core\Page\Type\Composer\Control\Type\CollectionAttributeType */ $controlTypeObj = \Concrete\Core\Page\Type\Composer\Control\Type\Type::getByHandle('block'); if (is_object($controlTypeObj)) { foreach ($pageBlocks as $controlName) { $blockTypeObj = BlockType::getByHandle($controlName); if (is_object($blockTypeObj)) { $control = $controlTypeObj->getPageTypeComposerControlByIdentifier($blockTypeObj->getBlockTypeID()); $control->addToPageTypeComposerFormLayoutSet($layoutSet); } } } } // Attributes $pageAttributes = $settings->controls['collection_attribute']; if (is_array($pageAttributes)) { /** @var $controlTypeObj \Concrete\Core\Page\Type\Composer\Control\Type\CollectionAttributeType */ $controlTypeObj = \Concrete\Core\Page\Type\Composer\Control\Type\Type::getByHandle('collection_attribute'); if (is_object($controlTypeObj)) { foreach ($pageAttributes as $controlName) { $collectionAttrKey = CollectionAttributeKey::getByHandle($controlName); if (is_object($collectionAttrKey)) { $control = $controlTypeObj->getPageTypeComposerControlByIdentifier($collectionAttrKey->getAttributeKeyID()); $control->addToPageTypeComposerFormLayoutSet($layoutSet); } } } } } } }
public function add_page_types() { $pt_catalog = PageType::getByHandle('catalog'); if (!is_object($pt_catalog)) { // catalog pt $data = array('name' => 'Catalog', 'handle' => 'catalog', 'ptLaunchInComposer' => true, 'ptIsFrequentlyAdded' => true, 'defaultTemplate' => PageTemplate::getByHandle('full'), 'allowedTemplates' => 'C', 'templates' => array(PageTemplate::getByHandle('full'))); $pt = PageType::add($data, $this->pkg); // configured publishing target $publishTarget = PublishTargetType::getByHandle('page_type')->configurePageTypePublishTarget($pt, array('ptID' => $pt->getPageTypeID())); $pt->setConfiguredPageTypePublishTargetObject($publishTarget); } // product pt $pt_catalog = $pt; $pt_product = PageType::getByHandle('product'); if (!is_object($pt_product)) { $data = array('name' => 'Product', 'handle' => 'product', 'ptLaunchInComposer' => true, 'ptIsFrequentlyAdded' => true, 'defaultTemplate' => PageTemplate::getByHandle('full'), 'allowedTemplates' => 'C', 'templates' => array(PageTemplate::getByHandle('full'))); $pt = PageType::add($data, $this->pkg); // configured publishing target $publishTarget = PublishTargetType::getByHandle('page_type')->configurePageTypePublishTarget($pt, array('ptID' => $pt_catalog->getPageTypeID())); $pt->setConfiguredPageTypePublishTargetObject($publishTarget); } }