Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 3
0
 /**
  * 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);
                         }
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 4
0
 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);
     }
 }