From: <sam...@us...> - 2009-07-14 22:41:41
|
Revision: 20132 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=20132&view=rev Author: sampaioprimo Date: 2009-07-14 22:41:37 +0000 (Tue, 14 Jul 2009) Log Message: ----------- [ENH] feedback for the user while the tiki importer is running Modified Paths: -------------- trunk/lib/importer/test/tikiimporter_wiki_mediawiki_test.php trunk/lib/importer/test/tikiimporter_wiki_test.php trunk/lib/importer/tikiimporter.php trunk/lib/importer/tikiimporter_wiki.php trunk/lib/importer/tikiimporter_wiki_mediawiki.php trunk/templates/tiki-importer.tpl trunk/tiki-importer.php Modified: trunk/lib/importer/test/tikiimporter_wiki_mediawiki_test.php =================================================================== --- trunk/lib/importer/test/tikiimporter_wiki_mediawiki_test.php 2009-07-14 20:47:27 UTC (rev 20131) +++ trunk/lib/importer/test/tikiimporter_wiki_mediawiki_test.php 2009-07-14 22:41:37 UTC (rev 20132) @@ -28,14 +28,15 @@ global $tikilib; $tikilib = $this->getMock('TikiLib', array('create_page', 'update_page', 'page_exists', 'remove_all_versions')); - $expectedResult = array('totalPages' => 4, 'importedPages' => 4); + $expectedImportFeedback = array('totalPages' => 4, 'importedPages' => 4); + $expectedLog = 'Loading and validating the XML file<br /><br />Starting to parse 4 pages:<br />Page "Redes de ensino" succesfully parsed with 8 revisions<br />Page "Núcleo Pedagógico Integrado" succesfully parsed with 15 revisions<br />Page "Categoria:Escolas fictícias" succesfully parsed with 5 revisions<br />Page "Academia Colarossi" succesfully parsed with 2 revisions<br /><br />4 pages parsed. Starting to insert those pages into Tiki:<br />Page Redes de ensino sucessfully imported<br />Page Núcleo Pedagógico Integrado sucessfully imported<br />Page Categoria:Escolas fictícias sucessfully imported<br />Page Academia Colarossi sucessfully imported<br /><br />Importation completed! Please await while the page reloads.'; - $importFeedback = $this->obj->import(dirname(__FILE__) . '/fixtures/mediawiki_sample.xml'); + $this->obj->import(dirname(__FILE__) . '/fixtures/mediawiki_sample.xml'); $this->assertTrue($this->obj->dom instanceof DOMDocument); $this->assertTrue($this->obj->dom->hasChildNodes()); - - $this->assertEquals($expectedResult, $importFeedback); + $this->assertEquals($expectedImportFeedback, $_SESSION['tiki_importer_feedback']); + $this->assertEquals($expectedLog, $_SESSION['tiki_importer_log']); } public function testImportShouldRaiseExceptionForInvalidMimeType() Modified: trunk/lib/importer/test/tikiimporter_wiki_test.php =================================================================== --- trunk/lib/importer/test/tikiimporter_wiki_test.php 2009-07-14 20:47:27 UTC (rev 20131) +++ trunk/lib/importer/test/tikiimporter_wiki_test.php 2009-07-14 22:41:37 UTC (rev 20132) @@ -35,17 +35,20 @@ $this->assertEquals('doNotImport', $obj->alreadyExistentPageName); } - public function testImportShouldReturnNumberOfPagesImported() + public function testImportShouldSetSessionVariables() { - $expectedResult = array('importedPages' => 10, 'totalPages' => '13'); - $obj = $this->getMock('TikiImporter_Wiki', array('validateInput', 'parseData', 'insertData')); + $expectedImportFeedback = array('importedPages' => 10, 'totalPages' => '13'); + $obj = $this->getMock('TikiImporter_Wiki', array('validateInput', 'parseData', 'insertData', 'saveAndDisplayLog')); $obj->expects($this->once())->method('validateInput'); $obj->expects($this->once())->method('parseData'); - $obj->expects($this->once())->method('insertData')->will($this->returnValue($expectedResult)); + $obj->expects($this->once())->method('insertData')->will($this->returnValue($expectedImportFeedback)); + $obj->expects($this->once())->method('saveAndDisplayLog'); + + $obj->log = 'some log string'; + $obj->import(); - $importFeedback = $obj->import(); - - $this->assertEquals($expectedResult, $importFeedback); + $this->assertEquals($expectedImportFeedback, $_SESSION['tiki_importer_feedback']); + $this->assertEquals('some log string', $_SESSION['tiki_importer_log']); } public function testInsertDataCallInsertPageFourTimes() Modified: trunk/lib/importer/tikiimporter.php =================================================================== --- trunk/lib/importer/tikiimporter.php 2009-07-14 20:47:27 UTC (rev 20131) +++ trunk/lib/importer/tikiimporter.php 2009-07-14 22:41:37 UTC (rev 20132) @@ -41,6 +41,15 @@ static public $importOptions = array(); /** + * During the importing process all the log + * strings will be appended to this object property + * using the method saveAndDisplayLog() + * + * @var string + */ + public $log = ''; + + /** * Abstract method to start the import process and * call all other functions for each step of the importation * (validateInput(), parseData(), insertData()) @@ -131,7 +140,7 @@ */ static function displayPhpUploadError($code) { - require_once('../init/tra.php'); + require_once(dirname(__FILE__) . '/../init/tra.php'); $errors = array(1 => tra('The uploaded file exceeds the upload_max_filesize directive in php.ini.') . ' ' . ini_get('upload_max_filesize') . 'B', 2 => tra('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.'), 3 => tra('The uploaded file was only partially uploaded. Please try again.'), @@ -144,6 +153,23 @@ if (isset($errors[$code])) return $errors[$code]; } + + /** + * Append $msg to $this->log and output the $msg to the browser + * during the execution of the script using the flush() method + * + * @param string $msg the log message + * @return void + */ + function saveAndDisplayLog($msg) + { + $this->log .= $msg; + // HACK ALERT: only echo the log message if NOT running the script from command line (to keep the phpunit output clean) + if (isset($_SERVER['HTTP_HOST'])) { + echo $msg; + flush(); + } + } } ?> Modified: trunk/lib/importer/tikiimporter_wiki.php =================================================================== --- trunk/lib/importer/tikiimporter_wiki.php 2009-07-14 20:47:27 UTC (rev 20131) +++ trunk/lib/importer/tikiimporter_wiki.php 2009-07-14 22:41:37 UTC (rev 20132) @@ -40,7 +40,7 @@ * and start the importing proccess by calling the functions to * validate, parse and insert the data. * - * @return array $importFeedback number of pages imported etc + * @return void */ function import() { @@ -61,7 +61,16 @@ $parsedData = $this->parseData(); $importFeedback = $this->insertData($parsedData); - return $importFeedback; + $this->saveAndDisplayLog('<br />Importation completed! Please await while the page reloads.'); + + // HACK ALERT: this if is to avoid the output when running phpunit tests + if (isset($_SERVER['HTTP_HOST'])) { + echo '<br /><br /><b><a href="tiki-importer.php">Click here</a> to finish the import process</b>'; + flush(); + } + + $_SESSION['tiki_importer_feedback'] = $importFeedback; + $_SESSION['tiki_importer_log'] = $this->log; } /** @@ -76,10 +85,16 @@ $countData = array(); $countPages = 0; + $this->saveAndDisplayLog('<br />' . count($parsedData) . ' pages parsed. Starting to insert those pages into Tiki:<br />'); + if (!empty($parsedData)) { foreach ($parsedData as $page) { - if ($this->insertPage($page)) + if ($this->insertPage($page)) { $countPages++; + $this->saveAndDisplayLog('Page ' . $page['name'] . ' sucessfully imported<br />'); + } else { + $this->saveAndDisplayLog('Page ' . $page['name'] . ' NOT imported (there was already a page with the same name)<br />'); + } } } @@ -146,6 +161,7 @@ $first = false; } } + return true; } } Modified: trunk/lib/importer/tikiimporter_wiki_mediawiki.php =================================================================== --- trunk/lib/importer/tikiimporter_wiki_mediawiki.php 2009-07-14 20:47:27 UTC (rev 20131) +++ trunk/lib/importer/tikiimporter_wiki_mediawiki.php 2009-07-14 22:41:37 UTC (rev 20132) @@ -45,6 +45,8 @@ throw new UnexpectedValueException(tra('Invalid file mime type')); } + $this->saveAndDisplayLog('Loading and validating the XML file<br />'); + $this->dom = new DOMDocument; $this->dom->load($filePath); return parent::import(); @@ -76,10 +78,12 @@ $parsedData = array(); $pages = $this->dom->getElementsByTagName('page'); + $this->saveAndDisplayLog('<br />Starting to parse ' . $pages->length . ' pages:<br />'); + flush(); + foreach ($pages as $page) { $parsedData[] = $this->extractInfo($page); } - return $parsedData; } @@ -116,7 +120,9 @@ } } } - + + $this->saveAndDisplayLog('Page "' . $data['name'] . '" succesfully parsed with ' . count($data['revisions']) . ' revisions<br />'); + return $data; } Modified: trunk/templates/tiki-importer.tpl =================================================================== --- trunk/templates/tiki-importer.tpl 2009-07-14 20:47:27 UTC (rev 20131) +++ trunk/templates/tiki-importer.tpl 2009-07-14 22:41:37 UTC (rev 20132) @@ -53,4 +53,10 @@ <h4>{tr}Congratulations! You have successful imported your {$softwareName} data to Tikiwiki.{/tr}</h4> <p>{$importFeedback.importedPages} {tr}pages imported from a total of{/tr} {$importFeedback.totalPages}</p> <p>{tr}You can see the list of wiki pages in your site{/tr} <a href="tiki-listpages.php">{tr}here{/tr}</a></p> + + <br /><br /> + <p><b>{tr}Importer log:{/tr}</b></p> + <code> + {$importLog} + </code> {/if} Modified: trunk/tiki-importer.php =================================================================== --- trunk/tiki-importer.php 2009-07-14 20:47:27 UTC (rev 20131) +++ trunk/tiki-importer.php 2009-07-14 22:41:37 UTC (rev 20132) @@ -19,7 +19,12 @@ TikiImporter::changePhpSettings(); } -if (!empty($_FILES['importFile'])) { +if (isset($_SESSION['tiki_importer_feedback'])) { + $smarty->assign('importFeedback', $_SESSION['tiki_importer_feedback']); + $smarty->assign('importLog', $_SESSION['tiki_importer_log']); + unset($_SESSION['tiki_importer_feedback']); + unset($_SESSION['tiki_importer_log']); +} else if (!empty($_FILES['importFile'])) { // third step: start the importing process if ($_FILES['importFile']['error'] === UPLOAD_ERR_OK) { @@ -37,7 +42,7 @@ die; } - $smarty->assign('importFeedback', $importFeedback); + die; } else if (!empty($_POST['importerClassName'])) { // second step: display import options for the software previously chosen if (!file_exists('lib/importer/' . $importerClassName . '.php')) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |