register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, '_importer', array()); } function _importer(&$event, $param) { if ( auth_quickaclcheck( $ID ) < AUTH_EDIT ) return; if ( $event->data != 'doc2dw' ) return; if ( $_FILES['doc'] ) { $pageName = $_POST["title"]; $nameSpace = $_POST["ns"]; if (!$nameSpace) { $nameSpace = "wiki"; } #Create temporary directory $tempDir = System::mktemp("-d word_upload"); $fileName = basename($_FILES['doc']['name']); $fileName = preg_replace("/ /", "_", $fileName); $agnosticFileName = preg_split("/\./", $fileName); $agnosticFileName = $agnosticFileName[0]; if(move_uploaded_file($_FILES['doc']['tmp_name'], $tempDir."/". $fileName)){ #Convert the doc to HTML and MediaWiki $result = exec("export HOME=/tmp && cd ".$tempDir." && convert_to_mediawiki ".$fileName); #Load html and MediaWiki $myWikiContent = file_get_contents($tempDir."/".$agnosticFileName.".txt"); $myHTMLContent = file_get_contents($tempDir."/".$agnosticFileName.".html"); #Replace nbsp by space $myWikiContent = preg_replace("/ /", " ",$myWikiContent); #Remove center tags $myWikiContent = preg_replace("/
/", " ",$myWikiContent); $myWikiContent = preg_replace("/<\/center>/", " \n",$myWikiContent); #Remove buggy Toc tags $myWikiContent = preg_replace("/\\[#_Toc.*\\]/", " \n",$myWikiContent); #Convert from MediaWiki to dokuwiki $converter = new MediaWiki2DokuWiki_MediaWiki_SyntaxConverter($myWikiContent); $myWikiContent = $converter->convert(); #Remove buggy // $myWikiContent = preg_replace("/\/\//", "",$myWikiContent); #Get undernlined sentences from html and replace them in the wiki text $underlined_sentences = get_tagged_from_html($myHTMLContent, "underlined"); $myWikiContent = replace_from_list($myWikiContent, $underlined_sentences, "underlined"); #Get italic sentences from html and replace them in the wiki text $italic_sentences = get_tagged_from_html($myHTMLContent, "italic"); $myWikiContent = replace_from_list($myWikiContent, $italic_sentences, "italic"); #Get all the images from the html $myWikiContent = get_images_from_html($myHTMLContent, $myWikiContent); #Convert tables $raw_tables = array(); $good_tables = array(); preg_match_all("/\{\|(.*)\|\}/sU", $myWikiContent, $tables); foreach ($tables[1] as $match) { array_push($raw_tables, '{|'.$match.'|}'); array_push($good_tables, convert_table($match)); } $myWikiContent = str_replace($raw_tables, $good_tables, $myWikiContent); #Transform references into footnotes $myWikiContent = preg_replace_callback("/(.*)<\/ref>/sU", "convert_footnote",$myWikiContent); #Remove junk
tags $myWikiContent = preg_replace("//", "\n",$myWikiContent); #Remove junk $myWikiContent = preg_replace("/----\n/", "",$myWikiContent); #Remove ** that does not have the corresponding closing ** $content_lines = explode(PHP_EOL, $myWikiContent); $myWikiContent = ""; foreach ($content_lines as $line) { $first = strpos($line, "**"); if ($first) { $second = strpos($line, "**", $first+2); if (!$second) { $line = preg_replace("/\*\*/U","",$line); } } $myWikiContent = $myWikiContent.$line."\n"; } #Send the wiki page $username = $this->getConf('api_username'); $password = $this->getConf('api_password'); $client = new IXR_Client('http://localhost/dokuwiki/lib/exe/xmlrpc.php'); $ok = $client->query('dokuwiki.login', $username, $password); if ($ok) { $attrs = array('sum' => 'First try', 'minor' => false); $result = $client->query('wiki.putPage', $nameSpace.':'.$pageName, $myWikiContent, $attrs); #Send all the images as attachements if ($handle = opendir($tempDir)) { while (false !== ($entry = readdir($handle))) { if (strpos($entry,'.png') !== false || strpos($entry,'.jpg') !== false || strpos($entry,'.gif') !== false) { $image_data = file_get_contents($tempDir."/".$entry, true); //$image_data = base64_encode($image_data); $image_data = new IXR_Base64($image_data); $attrs = array('ow' => true); $client->query('wiki.putAttachment', $entry, $image_data, $attrs); } } closedir($handle); } } } $event->data = $this->getConf('parserPostDisplay'); send_redirect(wl($nameSpace.':'.$pageName, '', true, '&')); } } } ?>