/** * generate a root item in all configured languages wuth default name and content. * This is used in case the database is not setup properly for some reason to prevent an error message being shown due to missing root item. * @param language integer the language id to get the menu item for the hierarchy item for * @return \schallschlucker\simplecms\models\SimpleHierarchyItem */ public static function autoCreateRootItemInAllConfiguredLanguages($language) { //FIXME: maybe modify this function to only create a default language instead, some people might not want to have the root item in all configured languages for some reason /* @var $languageManager LanguageManager */ $languageManager = Frontend::getLanguageManagerStatic(); $rootMenuItemArray = []; //check if item exists and maybe is just missing menu items $rootHierarchyItem = CmsHierarchyItem::findOne(DefaultController::$ROOT_HIERARCHY_ITEM_ID); if ($rootHierarchyItem == null) { $rootHierarchyItem = new CmsHierarchyItem(); $rootHierarchyItem->display_state = CmsHierarchyItem::DISPLAYSTATE_PUBLISHED_VISIBLE_IN_NAVIGATION; $rootHierarchyItem->id = DefaultController::$ROOT_HIERARCHY_ITEM_ID; $rootHierarchyItem->position = 1; if (!$rootHierarchyItem->save(false)) { throw new \Exception("failed while trying to auto create missing root hierarchy item. This error was caused whily trying to auto create a root hierarchy item for the cms, since none exists at the moment. Please make sure a hierarchy item with the ID " . DefaultController::$ROOT_HIERARCHY_ITEM_ID . " exists, for the cms to work."); } } $existingCmsMenu = $rootHierarchyItem->getCmsMenus()->all(); $availableLanguages = []; foreach ($existingCmsMenu as $tempMenuItem) { $availableLanguages[$tempMenuItem->language] = $tempMenuItem; } foreach ($languageManager->getAllConfiguredLanguageCodes() as $key => $code) { if (!array_key_exists($key, $availableLanguages)) { $pageContent = new CmsPageContent(); $pageContent->content = "Auto generated page content. This page content has been created by the Cms Backend due to the fact that no root item was existing in the database."; $pageContent->created_datetime = date('Y-m-d-H:i:s'); $pageContent->createdby_userid = "1"; $pageContent->description = "root page of yii2 simplecms plugin tree structure"; $pageContent->language = $key; $pageContent->isNewRecord = true; if (!$pageContent->save(false)) { throw new \Exception("failed while trying to auto create page content for missing root hierarchy item. This error was caused whily trying to auto create a root hierarchy item for the cms, since none exists at the moment. Please make sure a hierarchy item with the ID " . DefaultController::$ROOT_HIERARCHY_ITEM_ID . " exists, for the cms to work."); } $menuItem = new CmsMenuItem(); $menuItem->alias = 'root'; $menuItem->name = 'Root'; $menuItem->cms_hierarchy_item_id = DefaultController::$ROOT_HIERARCHY_ITEM_ID; $menuItem->created_datetime = date('Y-m-d-H:i:s'); $menuItem->createdby_userid = "1"; //TODO should we get the current user id here? Or is there some kind of a system user id to indidcate auto creation $menuItem->isNewRecord = true; $menuItem->language = $key; $menuItem->page_content_id = $pageContent->id; if (!$menuItem->save(false)) { throw new \Exception("failed while trying to auto create menu item for root hierarchy item. This error was caused whily trying to auto create a root hierarchy item for the cms, since none exists at the moment. Please make sure a hierarchy item with the ID " . DefaultController::$ROOT_HIERARCHY_ITEM_ID . " exists, for the cms to work."); } $availableLanguages[$key] = $menuItem; $rootMenuItemArray[] = $menuItem; } } $rootHierarchyItem['menu_item'] = $availableLanguages[$language]; $rootItem = new SimpleHierarchyItem($rootHierarchyItem, 1, 0); return $rootItem; }