protected function processRecord($record, $columnMap, &$result, $preview = false) { foreach ($this->listeners['beforeProcessRecord'] as $listener) { $listener($record, $columnMap, $result, $preview); } $page = $this->getPage($record); if (!$page) { // Mainly for testing, in real imports the posts should be present already if (!($holder = $this->_cache_holder)) { $holder = BlogHolder::get()->First(); } if (!$holder) { $holder = new BlogHolder(); $holder->write(); } $this->_cache_holder = $holder; $page = new BlogEntry(array('DrupalNid' => $record['nid'], 'ParentID' => $holder->ID)); $page->write(); } $record['ParentID'] = $page->ID; $record['BaseClass'] = 'SiteTree'; $objId = parent::processRecord($record, $columnMap, $result, $preview); $obj = Comment::get()->byId($objId); // Created gets overwritten on new records... $obj->Created = $record['Created']; $obj->write(); foreach ($this->listeners['afterProcessRecord'] as $listener) { $listener($obj, $record, $columnMap, $result, $preview); } return $objId; }
function doUpload($data, $form) { // Gets a blog holders ID $blogHolderID = $data['BlogHolderID']; // Checks if a file is uploaded if (is_uploaded_file($_FILES['XMLFile']['tmp_name'])) { echo '<p>Processing...<br/></p>'; flush(); $file = $_FILES['XMLFile']; // check file type. only xml file is allowed if ($file['type'] != 'text/xml') { echo 'Please select Wordpress XML file'; die; } $wp = new WpParser($file['tmp_name']); $posts = $wp->parse(); // For testing only // TODO: remove $count $count = 0; echo $count; foreach ($posts as $post) { $comments = $post['Comments']; // create a blog entry $entry = new BlogEntry(); $entry->ParentID = $blogHolderID; // $posts array and $entry have the same key/field names // so we can use update here. var_dump($post); $entry->update($post); $entry->write(); $entry->publish("Stage", "Live"); // page comment(s) foreach ($comments as $comment) { $page_comment = new PageComment(); $page_comment->ParentID = $entry->ID; $page_comment->update($comment); $page_comment->write(); } // count is used for testing only // TODO: remove the next 2 lines $count++; } // delete the temporaray uploaded file unlink($file['tmp_name']); // print sucess message echo 'Complete!<br/>'; echo 'Please refresh the admin page to see the new blog entries.'; } }
/** * Create default blog setup */ function requireDefaultRecords() { parent::requireDefaultRecords(); $blogHolder = DataObject::get_one('BlogHolder'); //TODO: This does not check for whether this blogholder is an orphan or not if (!$blogHolder) { $blogholder = new BlogHolder(); $blogholder->Title = "Blog"; $blogholder->URLSegment = "blog"; $blogholder->Status = "Published"; $widgetarea = new WidgetArea(); $widgetarea->write(); $blogholder->SideBarID = $widgetarea->ID; $blogholder->write(); $blogholder->publish("Stage", "Live"); $managementwidget = new BlogManagementWidget(); $managementwidget->ParentID = $widgetarea->ID; $managementwidget->write(); $tagcloudwidget = new TagCloudWidget(); $tagcloudwidget->ParentID = $widgetarea->ID; $tagcloudwidget->write(); $archivewidget = new ArchiveWidget(); $archivewidget->ParentID = $widgetarea->ID; $archivewidget->write(); $widgetarea->write(); $blog = new BlogEntry(); $blog->Title = _t('BlogHolder.SUCTITLE', "SilverStripe blog module successfully installed"); $blog->URLSegment = 'sample-blog-entry'; $blog->Tags = _t('BlogHolder.SUCTAGS', "silverstripe, blog"); $blog->Content = _t('BlogHolder.SUCCONTENT', "<p>Congratulations, the SilverStripe blog module has been successfully installed. This blog entry can be safely deleted. You can configure aspects of your blog (such as the widgets displayed in the sidebar) in <a href=\"admin\">the CMS</a>.</p>"); $blog->Status = "Published"; $blog->ParentID = $blogholder->ID; $blog->write(); $blog->publish("Stage", "Live"); DB::alteration_message("Blog page created", "created"); } }
/** * Imports blog entries and comments from a Potgres-based typo installation into a SilverStripe blog */ function import(){ // some of the guys in the contents table are articles, some are contents. Distinguished by type = "Article" or "Comment" // fields are: id, title, author, body, body_html, extended, excerpt, keywords, created_at, updated_at, extended_html, user_id, permalink, guid, [13] // text_filter_id, whiteboard, type, article_id, email, url, ip, blog_name, name, published, allow_pings, allow_comments, blog_id // published_at, state, status_confirmed $dbconn = pg_connect("host=orwell port=5432 dbname=typo_prod user=postgres password=possty"); // create a new blogholder and call it "imported blog" $bholder = new BlogHolder(); $bholder->Title = "imported blog"; // write it! $bholder->write(); $bholder->publish("Stage", "Live"); // get the typo articles $result = pg_query($dbconn, "SELECT * FROM contents WHERE type='Article'"); while ($row = pg_fetch_row($result)) { // title [1] // author [2] // body [3] // body_html [4] (type rendered and cached the html here. This is the preferred blog entry content for migration) // keywords (space separated) [7] (tags table is just a list of the unique variants of these keywords) // created_at [8] // permalink [12] (this is like the url in sitetree, prolly not needed) // email [18] (address of the commenter) // url [19] (url of the commenter) $title = $row[1]; $author = $row[2]; $blog_entry = $row[4]; $keywords = $row[7]; $created_at = $row[8]; // sometimes it's empty. If it is, grab the body if ($blog_entry == ""){ // use "body" $blog_entry = $row[3]; } echo "blog_entry: $blog_entry"; echo "<br />\n"; // put the typo blog entry in the SS database $newEntry = new BlogEntry(); $newEntry->Title = $title; $newEntry->Author = $author; $newEntry->Content = $blog_entry; $newEntry->Tags = $keywords; $newEntry->Date = $created_at; // tie each blog entry back to the blogholder we created initially $newEntry->ParentID = $bholder->ID; // write it! $newEntry->write(); $newEntry->publish("Stage", "Live"); // grab the id so we can get the comments $old_article_id = $row[0]; // get the comments $result2 = pg_query($dbconn, "SELECT * FROM contents WHERE type = 'Comment' AND article_id = $old_article_id"); while ($row2 = pg_fetch_row($result2)) { // grab the body_html $comment = $row2[4]; // sometimes it's empty. If it is, grab the body if ($comment == ""){ // use "body" $comment = $row2[3]; } $Cauthor = $row2[2]; $Ccreated_at = $row2[8]; // put the typo blog comment in the SS database $newCEntry = new PageComment(); $newCEntry->Name = $Cauthor; $newCEntry->Comment = $comment; $newCEntry->Created = $created_at; // need to grab the newly inserted blog entry's id $newCEntry->ParentID = $newEntry->ID; // write it! $newCEntry->write(); echo "comment: $comment"; echo "<br />\n"; } $newEntry->flushCache(); // fix up the specialchars pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"×\", \"x\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"’\", \"’\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"‘\", \"‘\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"—\", \"—\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"“\", \"“\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"”\", \"”\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"–\", \"–\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"—\", \"—\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"…\", \"…\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"™\", \"™\")"); pg_query($dbconn, "UPDATE SiteTree SET Content = REPLACE(Content, \"&\", \"&\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"×\", \"x\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"’\", \"’\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"‘\", \"‘\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"—\", \"—\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"“\", \"“\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"”\", \"”\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"–\", \"–\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"—\", \"—\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"…\", \"…\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"™\", \"™\")"); pg_query($dbconn, "UPDATE PageComment SET Comment = REPLACE(Comment, \"&\", \"&\")"); } pg_close($dbconn); } // end function