示例#1
0
 /**
  * @return array
  */
 protected function getConditionals()
 {
     $r = array();
     $sources = array();
     // Entry types
     $entryTypeRecords = EntryTypeRecord::model()->findAll();
     if ($entryTypeRecords) {
         foreach ($entryTypeRecords as $entryTypeRecord) {
             $entryType = EntryTypeModel::populateModel($entryTypeRecord);
             $sources['entryType:' . $entryType->id] = $entryType->fieldLayoutId;
             $sources['section:' . $entryType->sectionId] = $entryType->fieldLayoutId;
         }
     }
     // Category groups
     $allCategoryGroups = craft()->categories->getAllGroups();
     foreach ($allCategoryGroups as $categoryGroup) {
         $sources['categoryGroup:' . $categoryGroup->id] = $categoryGroup->fieldLayoutId;
     }
     // Tag groups
     $allTagGroups = craft()->tags->getAllTagGroups();
     foreach ($allTagGroups as $tagGroup) {
         $sources['tagGroup:' . $tagGroup->id] = $tagGroup->fieldLayoutId;
     }
     // Asset sources
     $allAssetSources = craft()->assetSources->getAllSources();
     foreach ($allAssetSources as $assetSource) {
         $sources['assetSource:' . $assetSource->id] = $assetSource->fieldLayoutId;
     }
     // Global sets
     $allGlobalSets = craft()->globals->getAllSets();
     foreach ($allGlobalSets as $globalSet) {
         $sources['globalSet:' . $globalSet->id] = $globalSet->fieldLayoutId;
     }
     // Matrix blocks – TODO
     // $matrixBlockTypeRecords = MatrixBlockTypeRecord::model()->findAll();
     // if ($matrixBlockTypeRecords) {
     //     foreach ($matrixBlockTypeRecords as $matrixBlockTypeRecord) {
     //         $matrixBlockType = MatrixBlockTypeModel::populateModel($matrixBlockTypeRecord);
     //         $sources['matrixBlockType:' . $matrixBlockType->id] = $matrixBlockType->fieldLayoutId;
     //     }
     // }
     // Users
     $usersFieldLayout = craft()->fields->getLayoutByType(ElementType::User);
     if ($usersFieldLayout) {
         $sources['users'] = $usersFieldLayout->id;
     }
     // Solspace Calendar
     $solspaceCalendarPlugin = craft()->plugins->getPlugin('calendar');
     if ($solspaceCalendarPlugin && $solspaceCalendarPlugin->getDeveloper() === 'Solspace') {
         $solspaceCalendarFieldLayout = craft()->fields->getLayoutByType('Calendar_Event');
         if ($solspaceCalendarFieldLayout) {
             $sources['solspaceCalendar'] = $solspaceCalendarFieldLayout->id;
         }
     }
     // Commerce – TODO
     // $commercePlugin = craft()->plugins->getPlugin('commerce');
     // if ($commercePlugin && $commercePlugin->getDeveloper() === 'Pixel & Tonic') {
     //     // Product types
     //     $productTypes = craft()->commerce_productTypes->getAllProductTypes();
     //     if ($productTypes) {
     //         foreach ($productTypes as $productType) {
     //             $sources['commerceProductType:'.$productType->id] =
     //         }
     //     }
     // }
     // Get all conditionals
     $conditionals = array();
     $conditionalsRecords = Reasons_ConditionalsRecord::model()->findAll();
     if ($conditionalsRecords) {
         foreach ($conditionalsRecords as $conditionalsRecord) {
             $conditionalsModel = Reasons_ConditionalsModel::populateModel($conditionalsRecord);
             if ($conditionalsModel->conditionals && $conditionalsModel->conditionals != '') {
                 $conditionals['fieldLayout:' . $conditionalsModel->fieldLayoutId] = $conditionalsModel->conditionals;
             }
         }
     }
     // Map conditionals to sources
     foreach ($sources as $sourceId => $fieldLayoutId) {
         if (isset($conditionals['fieldLayout:' . $fieldLayoutId])) {
             $r[$sourceId] = $conditionals['fieldLayout:' . $fieldLayoutId];
         }
     }
     return $r;
 }
示例#2
0
 /**
  * Saves an entry type.
  *
  * @param EntryTypeModel $entryType
  *
  * @throws Exception
  * @throws \CDbException
  * @throws \Exception
  * @return bool
  */
 public function saveEntryType(EntryTypeModel $entryType)
 {
     if ($entryType->id) {
         $entryTypeRecord = EntryTypeRecord::model()->findById($entryType->id);
         if (!$entryTypeRecord) {
             throw new Exception(Craft::t('No entry type exists with the ID “{id}”.', array('id' => $entryType->id)));
         }
         $isNewEntryType = false;
         $oldEntryType = EntryTypeModel::populateModel($entryTypeRecord);
     } else {
         $entryTypeRecord = new EntryTypeRecord();
         $isNewEntryType = true;
     }
     $entryTypeRecord->sectionId = $entryType->sectionId;
     $entryTypeRecord->name = $entryType->name;
     $entryTypeRecord->handle = $entryType->handle;
     $entryTypeRecord->hasTitleField = $entryType->hasTitleField;
     $entryTypeRecord->titleLabel = $entryType->hasTitleField ? $entryType->titleLabel : null;
     $entryTypeRecord->titleFormat = !$entryType->hasTitleField ? $entryType->titleFormat : null;
     $entryTypeRecord->validate();
     $entryType->addErrors($entryTypeRecord->getErrors());
     if (!$entryType->hasErrors()) {
         $transaction = craft()->db->getCurrentTransaction() === null ? craft()->db->beginTransaction() : null;
         try {
             // Fire an 'onBeforeSaveEntryType' event
             $event = new Event($this, array('entryType' => $entryType, 'isNewEntryType' => $isNewEntryType));
             $this->onBeforeSaveEntryType($event);
             // Is the event giving us the go-ahead?
             if ($event->performAction) {
                 if (!$isNewEntryType && $oldEntryType->fieldLayoutId) {
                     // Drop the old field layout
                     craft()->fields->deleteLayoutById($oldEntryType->fieldLayoutId);
                 }
                 // Save the new one
                 $fieldLayout = $entryType->getFieldLayout();
                 craft()->fields->saveLayout($fieldLayout);
                 // Update the entry type record/model with the new layout ID
                 $entryType->fieldLayoutId = $fieldLayout->id;
                 $entryTypeRecord->fieldLayoutId = $fieldLayout->id;
                 $entryTypeRecord->save(false);
                 // Now that we have an entry type ID, save it on the model
                 if (!$entryType->id) {
                     $entryType->id = $entryTypeRecord->id;
                 }
                 // Might as well update our cache of the entry type while we have it.
                 $this->_entryTypesById[$entryType->id] = $entryType;
                 $success = true;
             } else {
                 $success = false;
             }
             // Commit the transaction regardless of whether we saved the user, in case something changed
             // in onBeforeSaveEntryType
             if ($transaction !== null) {
                 $transaction->commit();
             }
         } catch (\Exception $e) {
             if ($transaction !== null) {
                 $transaction->rollback();
             }
             throw $e;
         }
     } else {
         $success = false;
     }
     if ($success) {
         // Fire an 'onSaveEntryType' event
         $this->onSaveEntryType(new Event($this, array('entryType' => $entryType, 'isNewEntryType' => $isNewEntryType)));
     }
     return $success;
 }
示例#3
0
 /**
  * Saves an entry type.
  *
  * @param EntryTypeModel $entryType
  *
  * @throws \Exception
  * @return bool
  */
 public function saveEntryType(EntryTypeModel $entryType)
 {
     if ($entryType->id) {
         $entryTypeRecord = EntryTypeRecord::model()->findById($entryType->id);
         if (!$entryTypeRecord) {
             throw new Exception(Craft::t('No entry type exists with the ID “{id}”', array('id' => $entryType->id)));
         }
         $isNewEntryType = false;
         $oldEntryType = EntryTypeModel::populateModel($entryTypeRecord);
     } else {
         $entryTypeRecord = new EntryTypeRecord();
         $isNewEntryType = true;
     }
     $entryTypeRecord->sectionId = $entryType->sectionId;
     $entryTypeRecord->name = $entryType->name;
     $entryTypeRecord->handle = $entryType->handle;
     $entryTypeRecord->hasTitleField = $entryType->hasTitleField;
     $entryTypeRecord->titleLabel = $entryType->hasTitleField ? $entryType->titleLabel : null;
     $entryTypeRecord->titleFormat = !$entryType->hasTitleField ? $entryType->titleFormat : null;
     $entryTypeRecord->validate();
     $entryType->addErrors($entryTypeRecord->getErrors());
     if (!$entryType->hasErrors()) {
         $transaction = craft()->db->getCurrentTransaction() === null ? craft()->db->beginTransaction() : null;
         try {
             if (!$isNewEntryType && $oldEntryType->fieldLayoutId) {
                 // Drop the old field layout
                 craft()->fields->deleteLayoutById($oldEntryType->fieldLayoutId);
             }
             // Save the new one
             $fieldLayout = $entryType->getFieldLayout();
             craft()->fields->saveLayout($fieldLayout);
             // Update the entry type record/model with the new layout ID
             $entryType->fieldLayoutId = $fieldLayout->id;
             $entryTypeRecord->fieldLayoutId = $fieldLayout->id;
             $entryTypeRecord->save(false);
             // Now that we have an entry type ID, save it on the model
             if (!$entryType->id) {
                 $entryType->id = $entryTypeRecord->id;
             }
             // Might as well update our cache of the entry type while we have it.
             $this->_entryTypesById[$entryType->id] = $entryType;
             if ($transaction !== null) {
                 $transaction->commit();
             }
         } catch (\Exception $e) {
             if ($transaction !== null) {
                 $transaction->rollback();
             }
             throw $e;
         }
         return true;
     } else {
         return false;
     }
 }