/** * @param FolderCreateEvent $event */ public function create(FolderCreateEvent $event) { $folder = new FolderModel(); $folder->setDispatcher($event->getDispatcher()); $folder->setParent($event->getParent())->setVisible($event->getVisible())->setLocale($event->getLocale())->setTitle($event->getTitle())->save(); $event->setFolder($folder); }
/** * generates a folder and its contents to be used in Position tests * * @return Folder the parent folder */ protected function getFolderForPositionTest() { if (null === self::$folderForPositionTest) { $folder = new Folder(); $folder->setParent(0); $folder->setVisible(1); $folder->setPosition(1); $this->setI18n($folder); $folder->save(); for ($i = 0; $i < 4; $i++) { $content = new \Thelia\Model\Content(); $content->addFolder($folder); $content->setVisible(1); $content->setPosition($i + 1); $this->setI18n($content); $contentFolders = $content->getContentFolders(); $collection = new Collection(); $collection->prepend($contentFolders[0]->setDefaultFolder(1)); $content->setContentFolders($collection); $content->save(); } self::$folderForPositionTest = $folder; } return self::$folderForPositionTest; }
public function import($startRecord = 0) { $count = 0; $errors = 0; $hdl = $this->t1db->query(sprintf("select * from contenu order by dossier asc limit %d, %d", intval($startRecord), $this->getChunkSize())); $image_import = new ContentImageImport($this->dispatcher, $this->t1db); $document_import = new ContentDocumentImport($this->dispatcher, $this->t1db); while ($hdl && ($contenu = $this->t1db->fetch_object($hdl))) { $count++; // Put contents on the root folder in a special folder if ($contenu->dossier == 0) { try { $dossier = $this->fld_corresp->getT2($contenu->dossier); } catch (\Exception $ex) { // Create the '0' folder $root = new Folder(); $root->setParent(0)->setLocale('fr_FR')->setTitle("Dossier racine Thelia 1")->setLocale('en_US')->setTitle("Thelia 1 root folder")->setDescription("")->setChapo("")->setPostscriptum("")->setVisible(true)->save(); Tlog::getInstance()->warning("Created pseudo-root folder to store contents at root level"); $this->fld_corresp->addEntry(0, $root->getId()); } } $dossier = $this->fld_corresp->getT2($contenu->dossier); if ($dossier > 0) { try { $this->content_corresp->getT2($contenu->id); Tlog::getInstance()->warning("Content ID={$contenu->id} already imported."); continue; } catch (ImportException $ex) { // Okay, the content was not imported. } try { $event = new ContentCreateEvent(); $idx = 0; $descs = $this->t1db->query_list("select * from contenudesc where contenu = ? order by lang asc", array($contenu->id)); foreach ($descs as $objdesc) { $lang = $this->getT2Lang($objdesc->lang); // A title is required to create the rewritten URL if (empty($objdesc->titre)) { $objdesc->titre = sprintf("Untitled-%d-%s", $objdesc->id, $lang->getCode()); } if ($idx == 0) { $event->setLocale($lang->getLocale())->setTitle($objdesc->titre)->setDefaultFolder($dossier)->setVisible($contenu->ligne == 1 ? true : false); $this->dispatcher->dispatch(TheliaEvents::CONTENT_CREATE, $event); $content_id = $event->getContent()->getId(); // Update position $update_position_event = new UpdatePositionEvent($content_id, UpdatePositionEvent::POSITION_ABSOLUTE, $contenu->classement); $this->dispatcher->dispatch(TheliaEvents::CONTENT_UPDATE_POSITION, $update_position_event); Tlog::getInstance()->info("Created content {$content_id} from {$objdesc->titre} ({$contenu->id})"); $this->content_corresp->addEntry($contenu->id, $content_id); // Import images and documents // --------------------------- $image_import->importMedia($contenu->id, $content_id); $document_import->importMedia($contenu->id, $content_id); } // Update the newly created content $update_event = new ContentUpdateEvent($content_id); $update_event->setTitle($objdesc->titre)->setDefaultFolder($this->fld_corresp->getT2($contenu->dossier))->setLocale($lang->getLocale())->setVisible($contenu->ligne == 1 ? true : false)->setChapo($objdesc->chapo)->setDescription($objdesc->description)->setPostscriptum($objdesc->postscriptum); $this->dispatcher->dispatch(TheliaEvents::CONTENT_UPDATE, $update_event); // Update the rewritten URL, if one was defined $this->updateRewrittenUrl($event->getContent(), $lang->getLocale(), $objdesc->lang, "contenu", "%id_contenu={$contenu->id}&id_dossier={$contenu->dossier}%"); $idx++; } } catch (\Exception $ex) { Tlog::getInstance()->addError("Failed to import content ID={$contenu->id}: ", $ex->getMessage()); $errors++; } } else { Tlog::getInstance()->addError("Cannot import content ID={$contenu->id}, which is at root level (e.g., dossier parent = 0)."); $errors++; } } return new ImportChunkResult($count, $errors); }
/** * generates a folder and its sub folders to be used in Position tests * * @return int the parent folder id */ protected function getFolderIdForPositionTest() { if (null === self::$folderIdForPositionTest) { $folder = new FolderModel(); $folder->setParent(0); $folder->setVisible(1); $folder->setPosition(1); $this->setI18n($folder); $folder->save(); for ($i = 0; $i < 4; $i++) { $subFolder = new FolderModel(); $subFolder->setParent($folder->getId()); $subFolder->setVisible(1); $subFolder->setPosition($i + 1); $this->setI18n($subFolder); $subFolder->save(); } self::$folderIdForPositionTest = $folder->getId(); } return self::$folderIdForPositionTest; }
/** * generates a folder and its contents to be used in Position tests * * @return Folder the parent folder */ protected function getFolderForPositionTest() { if (null === self::$folderForPositionTest) { $folder = new Folder(); $folder->setParent(0); $folder->setVisible(1); $folder->setPosition(1); $this->setI18n($folder); $folder->save(); for ($i = 0; $i < 4; $i++) { $content = new ContentModel(); $content->setVisible(1); $content->addFolder($folder); $this->setI18n($content); $content->save(); } self::$folderForPositionTest = $folder; } return self::$folderForPositionTest; }