/** * Save a category group. * * @return null */ public function actionSaveGroup() { $this->requirePostRequest(); craft()->userSession->requireAdmin(); $group = new CategoryGroupModel(); // Set the simple stuff $group->id = craft()->request->getPost('groupId'); $group->name = craft()->request->getPost('name'); $group->handle = craft()->request->getPost('handle'); $group->hasUrls = craft()->request->getPost('hasUrls'); $group->template = craft()->request->getPost('template'); $group->maxLevels = craft()->request->getPost('maxLevels'); // Locale-specific URL formats $locales = array(); foreach (craft()->i18n->getSiteLocaleIds() as $localeId) { $locales[$localeId] = new CategoryGroupLocaleModel(array('locale' => $localeId, 'urlFormat' => craft()->request->getPost('urlFormat.' . $localeId), 'nestedUrlFormat' => craft()->request->getPost('nestedUrlFormat.' . $localeId))); } $group->setLocales($locales); // Group the field layout $fieldLayout = craft()->fields->assembleLayoutFromPost(); $fieldLayout->type = ElementType::Category; $group->setFieldLayout($fieldLayout); // Save it if (craft()->categories->saveGroup($group)) { craft()->userSession->setNotice(Craft::t('Category group saved.')); $this->redirectToPostedUrl($group); } else { craft()->userSession->setError(Craft::t('Couldn’t save the category group.')); } // Send the category group back to the template craft()->urlManager->setRouteVariables(array('categoryGroup' => $group)); }
/** * Populates a CategoryGroupModel with attributes from a CategoryGroupRecord. * * @param CategoryGroupRecord|null * * @return CategoryGroupModel|null */ private function _populateCategoryGroupFromRecord($groupRecord) { if (!$groupRecord) { return null; } $group = CategoryGroupModel::populateModel($groupRecord); if ($groupRecord->structure) { $group->maxLevels = $groupRecord->structure->maxLevels; } return $group; }
/** * Creates initial database content for InstaBlog. * * @return null */ private function _createInstaBlogContent() { // InstaBlog tag group Craft::log('Creating the InstaBlog tag group.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $tagGroup = new TagGroupModel(); $tagGroup->name = 'InstaBlog Tags'; $tagGroup->handle = 'instaBlogTags'; // Save it if (craft()->tags->saveTagGroup($tagGroup)) { Craft::log('InstaBlog tag group created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog tag group.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // InstaBlog field group Craft::log('Creating the InstaBlog field group.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $group = new FieldGroupModel(); $group->name = 'InstaBlog'; if (craft()->fields->saveGroup($group)) { Craft::log('InstaBlog field group created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog field group.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Body field Craft::log('Creating the InstaBlog Body field.'); $bodyField = new FieldModel(); $bodyField->groupId = $group->id; $bodyField->name = 'InstaBlog Body'; $bodyField->handle = 'instaBlogBody'; $bodyField->translatable = true; $bodyField->type = 'RichText'; $bodyField->settings = array('configFile' => 'Standard.json', 'columnType' => ColumnType::Text); if (craft()->fields->saveField($bodyField)) { Craft::log('InstaBlog Body field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog Body field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Facebook field Craft::log('Creating the InstaBlog Facebook field.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $facebookField = new FieldModel(); $facebookField->groupId = $group->id; $facebookField->name = 'Facebook'; $facebookField->handle = 'instaBlogFacebook'; $facebookField->translatable = false; $facebookField->type = 'PlainText'; $facebookField->instructions = 'Add your personal Facebook profile link. Example: https://www.facebook.com/xxxxxxxxxx'; if (craft()->fields->saveField($facebookField)) { Craft::log('Facebook field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the Facebook field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Twitter Handle field Craft::log('Creating the InstaBlog Twitter field.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $twitterField = new FieldModel(); $twitterField->groupId = $group->id; $twitterField->name = 'Twitter'; $twitterField->handle = 'instaBlogTwitter'; $twitterField->translatable = false; $twitterField->type = 'PlainText'; $twitterField->instructions = 'Add your personal Twitter handle. Example: @johndoe'; if (craft()->fields->saveField($twitterField)) { Craft::log('Twitter field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the Twitter field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Google+ field Craft::log('Creating the InstaBlog Google+ field.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $googlePlusField = new FieldModel(); $googlePlusField->groupId = $group->id; $googlePlusField->name = 'Google+'; $googlePlusField->handle = 'instaBlogGooglePlus'; $googlePlusField->translatable = false; $googlePlusField->type = 'PlainText'; $googlePlusField->instructions = 'Add your personal Google+ profile link. Example: https://plus.google.com/+JohnDoe'; if (craft()->fields->saveField($googlePlusField)) { Craft::log('Google+ field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the Google+ field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // LinkedIn field Craft::log('Creating the InstaBlog LinkedIn field.'); $linkedinField = new FieldModel(); $linkedinField->groupId = $group->id; $linkedinField->name = 'LinkedIn'; $linkedinField->handle = 'instaBlogLinkedin'; $linkedinField->translatable = false; $linkedinField->type = 'PlainText'; $linkedinField->instructions = 'Add your personal LinkedIn profile link. Example: https://www.linkedin.com/pub/john-doe/3/7aa/91b'; if (craft()->fields->saveField($linkedinField)) { Craft::log('LinkedIn field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the LinkedIn field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Create the new user field layout Craft::log('Creating the new user profile layout.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $userFieldLayout = craft()->fields->getLayoutByType(ElementType::User); $fieldsIds = $userFieldLayout->getFieldIds(); $fieldsIds[] = $facebookField->id; $fieldsIds[] = $twitterField->id; $fieldsIds[] = $googlePlusField->id; $fieldsIds[] = $linkedinField->id; craft()->fields->deleteLayoutsByType(ElementType::User); $userFieldLayout = craft()->fields->assembleLayout(array(Craft::t('Profile') => $fieldsIds), array(), false); $userFieldLayout->type = ElementType::User; if (craft()->fields->saveLayout($userFieldLayout, false)) { Craft::log('User profile layout saved successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the user profile layout.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Tags field Craft::log('Creating the Tags field.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $tagsField = new FieldModel(); $tagsField->groupId = $group->id; $tagsField->name = 'InstaBlog Tags'; $tagsField->handle = 'instaBlogTags'; $tagsField->type = 'Tags'; $tagsField->settings = array('source' => 'taggroup:' . $tagGroup->id); if (craft()->fields->saveField($tagsField)) { Craft::log('InstaBlog Tags field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog Tags field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // InstaBlog category group Craft::log('Creating the InstaBlog category group.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $categoryGroup = new CategoryGroupModel(); $categoryGroup->name = 'InstaBlog Categories'; $categoryGroup->handle = 'instaBlogCategories'; $categoryGroup->template = 'blog/category'; $categoryGroup->maxLevels = 1; // Locale-specific URL formats $locales = array(); foreach (craft()->i18n->getSiteLocaleIds() as $localeId) { $locales[$localeId] = new CategoryGroupLocaleModel(array('locale' => $localeId, 'urlFormat' => 'blog/category/{slug}', 'nestedUrlFormat' => null)); } $categoryGroup->setLocales($locales); // Group the field layout $categoryFieldLayout = craft()->fields->assembleLayout(array('Content' => array($bodyField->id)), array()); $categoryFieldLayout->type = ElementType::Category; $categoryGroup->setFieldLayout($categoryFieldLayout); // Save it if (craft()->categories->saveGroup($categoryGroup)) { Craft::log('InstaBlog category group created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog category group.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Categories field Craft::log('Creating the InstaBlog Category field.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $categoriesField = new FieldModel(); $categoriesField->groupId = $group->id; $categoriesField->name = 'InstaBlog Categories'; $categoriesField->handle = 'instaBlogCategories'; $categoriesField->type = 'Categories'; $categoriesField->settings = array('source' => 'group:' . $categoryGroup->id); if (craft()->fields->saveField($categoriesField)) { Craft::log('InstaBlog Category field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog Category field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // Asset field Craft::log('Creating the InstaBlog Asset field.'); $assetField = new FieldModel(); $assetField->groupId = $group->id; $assetField->name = 'Featured Image'; $assetField->handle = 'instaBlogImage'; $assetField->translatable = false; $assetField->type = 'Assets'; $assetField->settings = array('sources' => '*'); if (craft()->fields->saveField($assetField)) { Craft::log('Asset field created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the Asset field.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // InstaBlog section Craft::log('Creating the InstaBlog section.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $instaBlogSection = new SectionModel(); $instaBlogSection->type = SectionType::Channel; $instaBlogSection->name = 'InstaBlog'; $instaBlogSection->handle = 'instaBlog'; $instaBlogSection->hasUrls = true; $instaBlogSection->template = 'blog/_entry'; // Locale-specific URL formats $locales = array(); if (craft()->isLocalized()) { $localeIds = craft()->i18n->getSiteLocaleIds(); } else { $primaryLocaleId = craft()->i18n->getPrimarySiteLocaleId(); $localeIds = array($primaryLocaleId); } foreach ($localeIds as $localeId) { $locales[$localeId] = new SectionLocaleModel(array('locale' => $localeId, 'enabledByDefault' => true, 'urlFormat' => 'blog/{slug}')); } $instaBlogSection->setLocales($locales); if (craft()->sections->saveSection($instaBlogSection)) { Craft::log('InstaBlog section created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog section.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // InstaBlog section entry type layout Craft::log('Saving the InstaBlog entry type.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); $instaBlogLayout = craft()->fields->assembleLayout(array('Content' => array($bodyField->id, $assetField->id, $categoriesField->id, $tagsField->id)), array($bodyField->id)); $instaBlogLayout->type = ElementType::Entry; $instaBlogEntryTypes = $instaBlogSection->getEntryTypes(); $instaBlogEntryType = $instaBlogEntryTypes[0]; $instaBlogEntryType->setFieldLayout($instaBlogLayout); if (craft()->sections->saveEntryType($instaBlogEntryType)) { Craft::log('InstaBlog entry type saved successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog entry type.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } // InstaBlog entry Craft::log('Creating a InstaBlog entry.'); $instaBlogEntry = new EntryModel(); $instaBlogEntry->sectionId = $instaBlogSection->id; $instaBlogEntry->typeId = $instaBlogEntryType->id; $instaBlogEntry->locale = $primaryLocaleId; $instaBlogEntry->authorId = craft()->userSession->getId(); $instaBlogEntry->enabled = true; $instaBlogEntry->getContent()->title = 'We just installed InstaBlog!'; $instaBlogEntry->getContent()->setAttributes(array('instaBlogBody' => '<p>' . 'Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI.' . '</p><p>Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.' . '</p><p>Completely synergize resource taxing relationships via premier niche markets. Professionally cultivate one-to-one customer service with robust ideas. Dynamically innovate resource-leveling customer service for state of the art customer service.' . '</p>')); if (craft()->entries->saveEntry($instaBlogEntry)) { Craft::log('InstaBlog entry created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not save the InstaBlog entry.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } //Create Route for Tags $urlParts = array('blog/tag/', array('*', '[^\\/]+')); $template = 'blog/tag'; if (craft()->routes->saveRoute($urlParts, $template)) { Craft::log('InstaBlog tag route created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not create the InstaBlog tag route.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } //Create Route for Tags $urlParts = array('blog/author/', array('*', '[^\\/]+')); $template = 'blog/author'; if (craft()->routes->saveRoute($urlParts, $template)) { Craft::log('InstaBlog author route created successfully.', LogLevel::Info, true, '_createInstaBlogContent', 'InstaBlog'); } else { Craft::log('Could not create the InstaBlog author route.', LogLevel::Error, true, '_createInstaBlogContent', 'InstaBlog'); } }