/** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { Craft::log('Adding a fieldLayoutId column for Asset sources.', LogLevel::Info, true); if (!craft()->db->columnExists('assetsources', 'fieldLayoutId')) { $this->addColumnAfter('assetsources', 'fieldLayoutId', array('column' => ColumnType::Int), 'id'); $this->addForeignKey('assetsources', 'fieldLayoutId', 'fieldlayouts', 'id', 'SET NULL'); $layoutId = craft()->db->createCommand()->select('id')->from('fieldlayouts')->where('type = :elementType', array(':elementType' => ElementType::Asset))->queryScalar(); if (!$layoutId) { Craft::log('No layouts found for Assets.', LogLevel::Info, true); return true; } else { $sourceIds = craft()->assetSources->getAllSourceIds(); if (empty($sourceIds)) { Craft::log("No sources exist for Assets.", LogLevel::Info, true); return true; } Craft::log('Copying the existing Assets layout to all sources.', LogLevel::Info, true); // Add the existing layout to the first source in list $sourceId = array_pop($sourceIds); craft()->db->createCommand()->update('assetsources', array('fieldLayoutId' => $layoutId), array('id' => $sourceId)); $layout = FieldLayoutModel::populateModel(FieldLayoutRecord::model()->findByPk($layoutId)); $fields = $layout->getFields(); foreach ($sourceIds as $sourceId) { $layout = new FieldLayoutRecord(); $layout->type = ElementType::Asset; $layout->save(); foreach ($fields as $field) { $fieldRecord = new FieldLayoutFieldRecord(); $fieldRecord->layoutId = $layout->id; $fieldRecord->fieldId = $field->fieldId; $fieldRecord->required = $field->required; $fieldRecord->sortOrder = $field->sortOrder; $fieldRecord->save(); } craft()->db->createCommand()->update('assetsources', array('fieldLayoutId' => $layout->id), array('id' => $sourceId)); } Craft::log('Copied the existing Assets layout to ' . (count($sourceIds) + 1) . ' sources.', LogLevel::Info, true); } } return true; }
/** * Saves a field layout. * * @param FieldLayoutModel $layout * @param bool $saveTabs Whether to save tab records. * @return bool */ public function saveLayout(FieldLayoutModel $layout, $saveTabs = true) { // First save the layout $layoutRecord = new FieldLayoutRecord(); $layoutRecord->type = $layout->type; $layoutRecord->save(false); $layout->id = $layoutRecord->id; if ($saveTabs) { foreach ($layout->getTabs() as $tab) { $tabRecord = new FieldLayoutTabRecord(); $tabRecord->layoutId = $layout->id; $tabRecord->name = $tab->name; $tabRecord->sortOrder = $tab->sortOrder; $tabRecord->save(false); $tab->id = $tabRecord->id; foreach ($tab->getFields() as $field) { $fieldRecord = new FieldLayoutFieldRecord(); $fieldRecord->layoutId = $layout->id; $fieldRecord->tabId = $tab->id; $fieldRecord->fieldId = $field->fieldId; $fieldRecord->required = $field->required; $fieldRecord->sortOrder = $field->sortOrder; $fieldRecord->save(false); $field->id = $fieldRecord->id; } } } else { foreach ($layout->getFields() as $field) { $fieldRecord = new FieldLayoutFieldRecord(); $fieldRecord->layoutId = $layout->id; $fieldRecord->fieldId = $field->fieldId; $fieldRecord->required = $field->required; $fieldRecord->sortOrder = $field->sortOrder; $fieldRecord->save(false); $field->id = $fieldRecord->id; } } return true; }
/** * Saves a field layout. * * @param FieldLayoutModel $layout * * @return bool */ public function saveLayout(FieldLayoutModel $layout) { // First save the layout $layoutRecord = new FieldLayoutRecord(); $layoutRecord->type = $layout->type; $layoutRecord->save(false); $layout->id = $layoutRecord->id; foreach ($layout->getTabs() as $tab) { $tabRecord = new FieldLayoutTabRecord(); $tabRecord->layoutId = $layout->id; $tabRecord->name = $tab->name; $tabRecord->sortOrder = $tab->sortOrder; $tabRecord->save(false); $tab->id = $tabRecord->id; foreach ($tab->getFields() as $field) { $fieldRecord = new FieldLayoutFieldRecord(); $fieldRecord->layoutId = $layout->id; $fieldRecord->tabId = $tab->id; $fieldRecord->fieldId = $field->fieldId; $fieldRecord->required = $field->required; $fieldRecord->sortOrder = $field->sortOrder; $fieldRecord->save(false); $field->id = $fieldRecord->id; } } // Fire an 'onSaveFieldLayout' event $this->onSaveFieldLayout(new Event($this, array('layout' => $layout))); return true; }
/** * Saves a field layout and attaches it to the given pimped block type * * @param PimpMyMatrix_BlockTypeModel $pimpedBlockType [description] * @return bool */ public function saveFieldLayout(PimpMyMatrix_BlockTypeModel $pimpedBlockType) { // First, get the layout and save the old field layout id for later $layout = $pimpedBlockType->getFieldLayout(); $oldFieldLayoutId = $pimpedBlockType->fieldLayoutId; // Second save the layout - replicated from FieldsService::saveLayout() // to allow us to retain the $layout->id for our own use if ($layout->getTabs()) { $layoutRecord = new FieldLayoutRecord(); $layoutRecord->type = 'PimpMyMatrix_BlockType'; $layoutRecord->save(false); $layout->id = $layoutRecord->id; foreach ($layout->getTabs() as $tab) { $tabRecord = new FieldLayoutTabRecord(); $tabRecord->layoutId = $layout->id; $tabRecord->name = $tab->name; $tabRecord->sortOrder = $tab->sortOrder; $tabRecord->save(false); $tab->id = $tabRecord->id; foreach ($tab->getFields() as $field) { $fieldRecord = new FieldLayoutFieldRecord(); $fieldRecord->layoutId = $layout->id; $fieldRecord->tabId = $tab->id; $fieldRecord->fieldId = $field->fieldId; $fieldRecord->required = $field->required; $fieldRecord->sortOrder = $field->sortOrder; $fieldRecord->save(false); $field->id = $fieldRecord->id; } } // Now we have saved the layout, update the id on the given // pimped blocktype model $pimpedBlockType->fieldLayoutId = $layout->id; } else { $pimpedBlockType->fieldLayoutId = null; } // Save our pimped block type again if ($this->saveBlockType($pimpedBlockType)) { // Delete the old field layout craft()->fields->deleteLayoutById($oldFieldLayoutId); return true; } else { return false; } }