From: <sam...@us...> - 2011-04-01 00:10:31
|
Revision: 33744 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=33744&view=rev Author: sampaioprimo Date: 2011-04-01 00:10:24 +0000 (Fri, 01 Apr 2011) Log Message: ----------- wordpress importer: suggest .htaccess to redirect from old WP urls to new Tiki urls Modified Paths: -------------- branches/7.x/lib/importer/tikiimporter_blog.php branches/7.x/lib/importer/tikiimporter_blog_wordpress.php branches/7.x/lib/test/importer/TikiImporterBlogWordpressTest.php branches/7.x/templates/tiki-importer.tpl branches/7.x/tiki-importer.php Modified: branches/7.x/lib/importer/tikiimporter_blog.php =================================================================== --- branches/7.x/lib/importer/tikiimporter_blog.php 2011-03-31 19:35:41 UTC (rev 33743) +++ branches/7.x/lib/importer/tikiimporter_blog.php 2011-04-01 00:10:24 UTC (rev 33744) @@ -75,7 +75,7 @@ * and start the importing proccess by calling the functions to * validate, parse and insert the data. * - * @return void + * @return null */ function import() { Modified: branches/7.x/lib/importer/tikiimporter_blog_wordpress.php =================================================================== --- branches/7.x/lib/importer/tikiimporter_blog_wordpress.php 2011-03-31 19:35:41 UTC (rev 33743) +++ branches/7.x/lib/importer/tikiimporter_blog_wordpress.php 2011-04-01 00:10:24 UTC (rev 33744) @@ -54,6 +54,7 @@ $options = array( array('name' => 'importAttachments', 'type' => 'checkbox', 'label' => tra('Import images and other attachments')), array('name' => 'replaceInternalLinks', 'type' => 'checkbox', 'label' => tra('Update internal links (experimental)')), + array('name' => 'htaccessRules', 'type' => 'checkbox', 'label' => tra('Suggest .htaccess rules to redirect from old WP URLs to new Tiki URLs (experimental)')) ); return $options; @@ -99,7 +100,7 @@ * @see lib/importer/TikiImporter_Blog#import() * * @param string $filePath path to the XML file - * @return void + * @return null * @throws UnexpectedValueException if invalid file mime type */ function import($filePath) @@ -128,11 +129,15 @@ $this->downloadAttachments(); } - if (isset($_POST['replaceInternalLinks']) && $_POST['replaceInternalLinks'] == 'on') { - $this->permalinks = $this->extractPermalinks(); - } + $this->permalinks = $this->extractPermalinks(); parent::import(); + + if (!empty($_POST['htaccessRules']) && $_POST['htaccessRules'] == 'on' + && !empty($this->permalinks)) + { + $_SESSION['tiki_importer_wordpress_urls'] = $this->getHtaccessRules(); + } } /** @@ -191,8 +196,10 @@ /** * Get all the permalinks to posts and pages from - * the XML document. This is used later to replace internal - * links in post and page content. + * the XML document. This is used to give the user + * a list of old WP URLs and their equivalent in Tiki + * and to replace internal links in post and page + * content if the option is set. * * @return array permalinks */ @@ -895,7 +902,7 @@ { $countData = parent::insertData(); - if (!empty($this->permalinks)) { + if (isset($_POST['replaceInternalLinks']) && $_POST['replaceInternalLinks'] == 'on') { $items = array_merge($this->parsedData['posts'], $this->parsedData['pages']); $this->replaceInternalLinks($items); } @@ -948,4 +955,29 @@ } } } + + /** + * Format $this->permalinks and return a string + * with suggested htaccess rules to redirect + * from old WP URLs to new Tiki URLs. + * + * @return array + */ + function getHtaccessRules() + { + $rules = ''; + + foreach ($this->permalinks as $link) { + foreach ($link['oldLinks'] as $oldLink) { + // oldLinks contain both the absolute and relative URLs + // in this case we want only relative + if (strpos($oldLink, '/') === 0) { + //TODO: properly filter Tiki URLs with non-English characters and spaces + $rules .= "Redirect 301 $oldLink " . str_replace(' ', '+', $link['newLink']) . "\n"; + } + } + } + + return $rules; + } } \ No newline at end of file Modified: branches/7.x/lib/test/importer/TikiImporterBlogWordpressTest.php =================================================================== --- branches/7.x/lib/test/importer/TikiImporterBlogWordpressTest.php 2011-03-31 19:35:41 UTC (rev 33743) +++ branches/7.x/lib/test/importer/TikiImporterBlogWordpressTest.php 2011-04-01 00:10:24 UTC (rev 33744) @@ -36,7 +36,7 @@ $obj->expects($this->once())->method('parseData'); $obj->expects($this->once())->method('insertData'); $obj->expects($this->once())->method('setupTiki'); - $obj->expects($this->exactly(0))->method('extractPermalinks'); + $obj->expects($this->once())->method('extractPermalinks'); $this->expectOutputString("Loading and validating the XML file\n\nImportation completed!\n\n<b><a href=\"tiki-importer.php\">Click here</a> to finish the import process</b>"); $_FILES['importFile']['type'] = 'text/xml'; @@ -58,12 +58,10 @@ $obj->expects($this->once())->method('setupTiki'); $obj->expects($this->once())->method('extractPermalinks'); $_POST['importAttachments'] = 'on'; - $_POST['replaceInternalLinks'] = 'on'; $obj->import(dirname(__FILE__) . '/fixtures/wordpress_sample.xml'); unset($_POST['importAttachments']); - unset($_POST['replaceInternalLinks']); } public function testParseData() @@ -775,6 +773,8 @@ public function testInsertData_shouldSetObjIdOnItemsArray() { + $_POST['replaceInternalLinks'] = 'on'; + $obj = $this->getMock('TikiImporter_Blog_Wordpress', array('insertItem', 'createBlog', 'replaceInternalLinks')); $obj->expects($this->once())->method('createBlog'); $obj->expects($this->exactly(2))->method('insertItem')->will($this->onConsecutiveCalls(2, 'Page name')); @@ -800,8 +800,31 @@ $obj->expects($this->once())->method('replaceInternalLinks')->with($expectedResult); $obj->insertData(); + + unset($_POST['replaceInternalLinks']); } + public function testInsertData_shouldNotCallReplaceInternalLinks() + { + $obj = $this->getMock('TikiImporter_Blog_Wordpress', array('insertItem', 'createBlog', 'replaceInternalLinks')); + $obj->expects($this->once())->method('createBlog'); + $obj->expects($this->exactly(2))->method('insertItem')->will($this->onConsecutiveCalls(2, 'Page name')); + $obj->expects($this->exactly(0))->method('replaceInternalLinks'); + + $obj->parsedData = array( + 'pages' => array( + array('type' => 'page', 'name' => 'Page name'), + ), + 'posts' => array( + array('type' => 'post', 'name' => 'Post title'), + ), + 'tags' => array(), + 'categories' => array(), + ); + + $obj->insertData(); + } + public function testReplaceInternalLinks() { $this->obj->permalinks = array( @@ -836,5 +859,33 @@ $newPageContent); $this->assertEquals(file_get_contents(dirname(__FILE__) . '/fixtures/wordpress_post_content_internal_links_replaced.txt'), $newPostContent); - } + } + + public function testGetHtaccessRules() + { + $this->obj->permalinks = array( + array( + 'oldLinks' => array( + 'http://example.com/2008/01/20/circuito-grande-torres-del-paine/', + '/2008/01/20/circuito-grande-torres-del-paine/', + 'http://example.com/?p=36', + '/?p=36', + ), + 'newLink' => 'http://localhost/tiki/tiki-view_blog_post.php?postId=10', + ), + array( + 'oldLinks' => array( + 'http://example.com/contato/', + '/contato-tiki/', + ), + 'newLink' => 'http://localhost/tiki70/tiki-index.php?page=contato tiki', + ), + ); + + $expectedResult = "Redirect 301 /2008/01/20/circuito-grande-torres-del-paine/ http://localhost/tiki/tiki-view_blog_post.php?postId=10\n" + . "Redirect 301 /?p=36 http://localhost/tiki/tiki-view_blog_post.php?postId=10\n" + . "Redirect 301 /contato-tiki/ http://localhost/tiki70/tiki-index.php?page=contato+tiki\n"; + + $this->assertEquals($expectedResult, $this->obj->getHtaccessRules()); + } } Modified: branches/7.x/templates/tiki-importer.tpl =================================================================== --- branches/7.x/templates/tiki-importer.tpl 2011-03-31 19:35:41 UTC (rev 33743) +++ branches/7.x/templates/tiki-importer.tpl 2011-04-01 00:10:24 UTC (rev 33744) @@ -82,4 +82,10 @@ <br /><br /> <p><b>{tr}Importer log:{/tr}</b></p> <textarea rows="15" cols="100" codemirror="false">{$importLog}</textarea> + + {if isset($wordpressUrls)} + <br /><br /> + <p><b>{tr}Suggested .htaccess rules:{/tr}</b></p> + <textarea rows="15" cols="100" codemirror="false">{$wordpressUrls}</textarea> + {/if} {/if} Modified: branches/7.x/tiki-importer.php =================================================================== --- branches/7.x/tiki-importer.php 2011-03-31 19:35:41 UTC (rev 33743) +++ branches/7.x/tiki-importer.php 2011-04-01 00:10:24 UTC (rev 33744) @@ -28,6 +28,12 @@ unset($_SESSION['tiki_importer_feedback']); unset($_SESSION['tiki_importer_log']); unset($_SESSION['tiki_importer_errors']); + + // wordpress specific + if (isset($_SESSION['tiki_importer_wordpress_urls'])) { + $smarty->assign('wordpressUrls', $_SESSION['tiki_importer_wordpress_urls']); + unset($_SESSION['tiki_importer_wordpress_urls']); + } } else if (!empty($_FILES['importFile'])) { // third step: start the importing process This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |