Last active
February 25, 2020 06:46
-
-
Save wernerkrauss/7baceb185315b6bc8105569b79f41b6f to your computer and use it in GitHub Desktop.
Migration from firesphere's news module (SilverStripe 3) to Silverstripe 4 and Blog module
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Netwerkstatt\NewsToBlogMigration\Extension; | |
use SilverStripe\ORM\DataExtension; | |
/** | |
* Class BlogNews | |
* @package Netwerkstatt\NewsToBlogMigration\Extension | |
* | |
* Legacy extension for migrating from firesphere's News module to Blog | |
*/ | |
class BlogNews extends DataExtension | |
{ | |
private static $db = [ | |
// 'Synopsis' => 'Text', | |
'Type' => 'Enum("news,external,download","news")', | |
'External' => 'Varchar(255)', | |
]; | |
public function setAuthor() | |
{ | |
//handle Authors | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SilverStripe\Blog\Model\BlogPost: | |
extensions: | |
- Netwerkstatt\NewsToBlogMigration\Extension\BlogNews | |
- Netwerkstatt\NewsToBlogMigration\Extension\ImageGallery |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Netwerkstatt\NewsToBlogMigration\Extension; | |
use Colymba\BulkManager\BulkManager; | |
use Colymba\BulkUpload\BulkUploader; | |
use Netwerkstatt\NewsToBlogMigration\Model\ImageGalleryItem; | |
use SilverStripe\Assets\Image; | |
use SilverStripe\Forms\GridField\GridField; | |
use SilverStripe\Forms\GridField\GridFieldAddNewButton; | |
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; | |
use SilverStripe\ORM\DataExtension; | |
use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows; | |
class ImageGallery extends DataExtension | |
{ | |
private static $has_many = [ | |
'ImageGalleryItems' => ImageGalleryItem::class . '.Album', | |
]; | |
private static $owns = [ | |
'ImageGalleryItems' | |
]; | |
public function updateCMSFields($fieldList) | |
{ | |
$gridConf = GridFieldConfig_RecordEditor::create(); | |
$gridConf->addComponents( | |
new GridFieldSortableRows('SortOrder'), | |
new BulkUploader('Image'), | |
new BulkManager() | |
); | |
$gridConf->removeComponentsByType(GridFieldAddNewButton::class); // We only use bulk upload button | |
if ($this->owner->RootFolder()) { | |
$folderName = $this->owner->RootFolder()->FileName; | |
$folderName = str_replace('assets/', '', $folderName); | |
$gridConf->getComponentByType(BulkUploader::class)->setUfSetup('setFolderName', $folderName); | |
} | |
$fieldList->addFieldsToTab('Root.Galerie', [ | |
GridField::create('ImageGalleryItems', '', $this->owner->ImageGalleryItems(), | |
$gridConf) | |
]); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace Netwerkstatt\NewsToBlogMigration\Model; | |
use ImageGalleryUI; | |
use Netwerkstatt\NewsToBlogMigration\Page\ImageGalleryPage; | |
use SilverStripe\AssetAdmin\Forms\UploadField; | |
use SilverStripe\Assets\Image; | |
use SilverStripe\Forms\FieldList; | |
use SilverStripe\Forms\NumericField; | |
use SilverStripe\Forms\TabSet; | |
use SilverStripe\Forms\TextField; | |
use SilverStripe\ORM\DataObject; | |
use SilverStripe\Security\Permission; | |
class ImageGalleryItem extends DataObject | |
{ | |
private static $delete_permission = "CMS_ACCESS_CMSMain"; | |
private static $db = [ | |
'Caption' => 'Varchar(255)', | |
'SortOrder' => 'Int', | |
]; | |
private static $has_one = [ | |
'Image' => Image::class, | |
'ImageGalleryPage' => ImageGalleryPage::class, //@todo: remove and migrate to Album | |
'ImageGalleryAlbum' => ImageGalleryAlbum::class, //@todo: remove | |
'Album' => DataObject::class, | |
]; | |
private static $owns = [ | |
'Image' | |
]; | |
private static $table_name = 'ImageGalleryItem'; | |
private static $default_sort = "SortOrder"; | |
private static $summary_fields = [ | |
'Image.StripThumbnail' => 'Image', | |
'Caption.Summary' => 'Caption' | |
]; | |
protected $ui; | |
public function getCMSFields() | |
{ | |
$parentClassName = get_parent_class($this); | |
$parentClass = new $parentClassName; | |
$fields = ($parentClass->hasMethod('getGeneratedCMSFields')) | |
? $parentClass->getGeneratedCMSFields() | |
: FieldList::create(TabSet::create("Root")); | |
$fields->addFieldToTab("Root.Main", TextField::create('Caption', _t('ImageGalleryItem.CAPTION', 'Caption'))); | |
$fields->addFieldToTab("Root.Main", | |
NumericField::create('SortOrder', _t('ImageGalleryItem.SORTORDER', 'Sort Order'))); | |
$fields->addFieldToTab("Root.Main", | |
$image = UploadField::create('Image', _t('ImageGalleryItem.IMAGE', 'Image'))); | |
$image->getValidator()->setAllowedExtensions(['jpg', 'jpeg', 'png', 'gif']); | |
$fields->removeByName("SortOrder"); | |
return $fields; | |
} | |
public function canCreate($member = null, $context = []) | |
{ | |
return true; | |
} | |
public function canView($member = null) | |
{ | |
return true; | |
} | |
public function canEdit($member = null) | |
{ | |
return true; | |
} | |
public function canDelete($member = null) | |
{ | |
return Permission::check(self::$delete_permission); | |
} | |
public function getTitle() | |
{ | |
return $this->Caption; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Netwerkstatt\NewsToBlogMigration\Tasks; | |
use Netwerkstatt\NewsToBlogMigration\Model\ImageGalleryItem; | |
use SilverStripe\Blog\Model\Blog; | |
use SilverStripe\Blog\Model\BlogPost; | |
use SilverStripe\Control\HTTPRequest; | |
use SilverStripe\Dev\BuildTask; | |
use SilverStripe\ORM\Queries\SQLSelect; | |
use SilverStripe\Security\Member; | |
class NewsMigrationTask extends BuildTask | |
{ | |
private $blog; | |
/** | |
* Implement this method in the task subclass to | |
* execute via the TaskRunner | |
* | |
* @param HTTPRequest $request | |
* @return | |
*/ | |
public function run($request) | |
{ | |
//delete all existing BlogPosts | |
$allBlogPosts = BlogPost::get()->removeAll(); | |
//get news from DB | |
$allNews = SQLSelect::create() | |
->setFrom('News') | |
->setOrderBy('ID'); | |
foreach ($allNews->execute() as $news) { | |
unset($news['ClassName']); | |
$this->createBlogPost($news); | |
} | |
} | |
public function createBlogPost($news) | |
{ | |
//create Blog Post | |
//we assume all news go into one Blog holder page | |
$newsID = $news['ID']; | |
unset($news['ID']); | |
$news['FeaturedImageID'] = $news['ImpressionID']; | |
$news['Summary'] = $news['Synopsis']; | |
$news['PublishDate'] = $news['PublishFrom']; | |
$blogPost = BlogPost::create($news); //todo: check if URL exists | |
$blogPost->ParentID = $this->getBlogID(); | |
$blogPost->write(); | |
$blogPost->Authors()->add($this->getDefaultAuthor()); //hack for the current project | |
//migrate SlideShow Images | |
foreach ($this->getSlideshowForNews($newsID) as $slideshowImage) { | |
unset($slideshowImage['ClassName']); | |
unset($slideshowImage['ID']); | |
$slideshowImage['Caption'] = $slideshowImage['Title']; | |
$item = ImageGalleryItem::create($slideshowImage); | |
$blogPost->ImageGalleryItems()->add($item); | |
} | |
//publish blog post | |
$blogPost->publishRecursive(); | |
} | |
/** | |
* @return int | |
*/ | |
public function getBlogID() | |
{ | |
if (!$this->blog) { | |
$this->blog = Blog::get()->first(); | |
} | |
return $this->blog->ID; | |
} | |
public function getDefaultAuthor() | |
{ | |
return Member::get()->byID(3); | |
} | |
/** | |
* @param $news | |
* @return \SilverStripe\ORM\Connect\Query | |
*/ | |
public function getSlideshowForNews($newsID) | |
{ | |
$images = SQLSelect::create() | |
->setFrom('SlideshowImage') | |
->setWhere([ | |
'NewsID' => $newsID | |
]); | |
return $images->execute(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment