1*f82bbc90SS.Chekanov<?php 2*f82bbc90SS.Chekanov 3*f82bbc90SS.Chekanov/** 4*f82bbc90SS.Chekanov * ZWIdoku Plugin: Submit the article. 5*f82bbc90SS.Chekanov * 6*f82bbc90SS.Chekanov * @license LGPL 2 (http://www.gnu.org/licenses/gpl.html) 7*f82bbc90SS.Chekanov * @author S.Chekanov 8*f82bbc90SS.Chekanov * @based_on "pageindex" plugin by Kite <Kite@puzzlers.org> 9*f82bbc90SS.Chekanov * @based_on "externallink" plugin by Otto Vainio <plugins@valjakko.net> 10*f82bbc90SS.Chekanov * @based_on "pagelist" plugin by Esther Brunner <wikidesign@gmail.com> 11*f82bbc90SS.Chekanov * 12*f82bbc90SS.Chekanov */ 13*f82bbc90SS.Chekanov 14*f82bbc90SS.Chekanov 15*f82bbc90SS.Chekanovif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../../').'/'); 16*f82bbc90SS.Chekanovif(!defined('DOKU_LIB')) define('DOKU_LIB',realpath(dirname(__FILE__).'/../../').'/'); 17*f82bbc90SS.Chekanovif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_LIB.'plugins/'); 18*f82bbc90SS.Chekanov//define('DOKU_MAIN',realpath(dirname(__FILE__).'/../../../').'/'); 19*f82bbc90SS.Chekanov 20*f82bbc90SS.Chekanov// must be run within Dokuwiki 21*f82bbc90SS.Chekanovif(!defined('DOKU_INC')) die("Cannot find installed DokuWiki"); 22*f82bbc90SS.Chekanov 23*f82bbc90SS.Chekanov 24*f82bbc90SS.Chekanov$CURRENT_URL="https://enhub.org/dokuwiki"; 25*f82bbc90SS.Chekanov 26*f82bbc90SS.Chekanov 27*f82bbc90SS.Chekanov 28*f82bbc90SS.Chekanov//require_once(DOKU_INC.'/inc/pageutils.php'); 29*f82bbc90SS.Chekanovrequire_once(DOKU_INC.'/inc/init.php'); 30*f82bbc90SS.Chekanovrequire_once(DOKU_INC.'/inc/template.php'); 31*f82bbc90SS.Chekanov 32*f82bbc90SS.Chekanov$target_dir = DOKU_INC. "/data/tmp/"; 33*f82bbc90SS.Chekanov$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 34*f82bbc90SS.Chekanov 35*f82bbc90SS.Chekanov// start page 36*f82bbc90SS.Chekanovecho file_get_contents(DOKU_INC.'/lib/plugins/zwidoku/html_start'); 37*f82bbc90SS.Chekanov 38*f82bbc90SS.Chekanov$uploadOk = 1; 39*f82bbc90SS.Chekanov$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); 40*f82bbc90SS.Chekanov// Check if image file is a actual image or fake image 41*f82bbc90SS.Chekanovif(isset($_POST["submit"])) { 42*f82bbc90SS.Chekanov 43*f82bbc90SS.Chekanov 44*f82bbc90SS.Chekanov // Check file size 45*f82bbc90SS.Chekanov if ($_FILES["fileToUpload"]["size"] > 10000000) { 46*f82bbc90SS.Chekanov echo "<h3>Sorry, your file is too large (more than 10MB)</h3>"; 47*f82bbc90SS.Chekanov $uploadOk = 0; 48*f82bbc90SS.Chekanov die(); 49*f82bbc90SS.Chekanov } 50*f82bbc90SS.Chekanov 51*f82bbc90SS.Chekanov 52*f82bbc90SS.Chekanov // Check if file already exists 53*f82bbc90SS.Chekanov if (file_exists($target_file)) { 54*f82bbc90SS.Chekanov echo "<h3>Sorry, file already exists.</h3>"; 55*f82bbc90SS.Chekanov $uploadOk = 0; 56*f82bbc90SS.Chekanov die(); 57*f82bbc90SS.Chekanov } 58*f82bbc90SS.Chekanov 59*f82bbc90SS.Chekanov// Allow certain file formats 60*f82bbc90SS.Chekanov if($imageFileType != "zwi" && $imageFileType != "ZWI" ) { 61*f82bbc90SS.Chekanov echo "<h3>Sorry, only ZWI files are allowed.</h3>"; 62*f82bbc90SS.Chekanov echo "<h3>Please return and select correct ZWI file.</h3>"; 63*f82bbc90SS.Chekanov $uploadOk = 0; 64*f82bbc90SS.Chekanov die(); 65*f82bbc90SS.Chekanov } 66*f82bbc90SS.Chekanov 67*f82bbc90SS.Chekanov 68*f82bbc90SS.Chekanov// Check if $uploadOk is set to 0 by an error 69*f82bbc90SS.Chekanovif ($uploadOk == 0) { 70*f82bbc90SS.Chekanov echo "Sorry, your file was not uploaded."; 71*f82bbc90SS.Chekanov// if everything is ok, try to upload file 72*f82bbc90SS.Chekanov} else { 73*f82bbc90SS.Chekanov if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 74*f82bbc90SS.Chekanov echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; 75*f82bbc90SS.Chekanov 76*f82bbc90SS.Chekanov 77*f82bbc90SS.Chekanov $zip = new ZipArchive; 78*f82bbc90SS.Chekanov $zip->open( $target_file); 79*f82bbc90SS.Chekanov $json=$zip->getFromName('metadata.json'); 80*f82bbc90SS.Chekanov 81*f82bbc90SS.Chekanov $infowik=json_decode($json, TRUE); 82*f82bbc90SS.Chekanov $ZWIversion = $infowik['ZWIversion']; 83*f82bbc90SS.Chekanov $Title = $infowik['Title']; 84*f82bbc90SS.Chekanov $Namespace = $infowik['Namespace']; 85*f82bbc90SS.Chekanov 86*f82bbc90SS.Chekanov 87*f82bbc90SS.Chekanov # check plugins 88*f82bbc90SS.Chekanov $json1=$zip->getFromName('plugins.json'); 89*f82bbc90SS.Chekanov $infoplugins=json_decode( $json1, TRUE); 90*f82bbc90SS.Chekanov // list used plugins for consistency 91*f82bbc90SS.Chekanov foreach(glob(DOKU_INC."lib/plugins/*", GLOB_ONLYDIR) as $dir) { 92*f82bbc90SS.Chekanov $usedplugins[] = basename($dir); 93*f82bbc90SS.Chekanov } 94*f82bbc90SS.Chekanov 95*f82bbc90SS.Chekanov 96*f82bbc90SS.Chekanov 97*f82bbc90SS.Chekanov $json2=$zip->getFromName('metadata.json'); 98*f82bbc90SS.Chekanov $infopage=json_decode( $json2, TRUE); 99*f82bbc90SS.Chekanov $Xmeta=$infopage["meta"]; 100*f82bbc90SS.Chekanov $Xtitle= $Xmeta["title"]; 101*f82bbc90SS.Chekanov $Xcreator= $Xmeta["creator"]; 102*f82bbc90SS.Chekanov echo "<center><h1>" . $Xtitle . "</h1>"; 103*f82bbc90SS.Chekanov echo "original author: " . $Xcreator . "</center></br>"; 104*f82bbc90SS.Chekanov // get article 105*f82bbc90SS.Chekanov $article=$zip->getFromName('article.dokuwiki'); 106*f82bbc90SS.Chekanov //echo "Title=". $Title ."<br>"; 107*f82bbc90SS.Chekanov echo "Namespace:". $Namespace ."<br>"; 108*f82bbc90SS.Chekanov 109*f82bbc90SS.Chekanov $newtitle = str_replace(":", "/", $Title) . ".txt"; 110*f82bbc90SS.Chekanov $out_file= DOKU_INC."data/pages/".$newtitle; 111*f82bbc90SS.Chekanov 112*f82bbc90SS.Chekanov $articleExist=False; 113*f82bbc90SS.Chekanov if (file_exists($out_file)) { 114*f82bbc90SS.Chekanov 115*f82bbc90SS.Chekanov $ss="<a href='/doukuwiki/doku.php?id=".$Title."&do=revisions'> Old Revisions </a>"; 116*f82bbc90SS.Chekanov echo "<p style=\"color:#cc7a00; font-weight: bold;\">"; 117*f82bbc90SS.Chekanov echo "Status: replacement for the existing article with the same name.</br>"; 118*f82bbc90SS.Chekanov echo "Article $Title was replaced. If this is not your intension, revert it using $ss</br>"; 119*f82bbc90SS.Chekanov echo "</p>"; 120*f82bbc90SS.Chekanov $articleExist=true; 121*f82bbc90SS.Chekanov } else { 122*f82bbc90SS.Chekanov echo "<p style=\"color:#009900; font-weight: bold;\">"; 123*f82bbc90SS.Chekanov echo "Status: New article"; 124*f82bbc90SS.Chekanov echo "</p>"; 125*f82bbc90SS.Chekanov //echo "Fill name of the new article: ". $Title ."<br>"; 126*f82bbc90SS.Chekanov } 127*f82bbc90SS.Chekanov 128*f82bbc90SS.Chekanov echo "ZWI format version=". $ZWIversion ."<br>"; 129*f82bbc90SS.Chekanov echo "Checking compartibility of used plugins<br>"; 130*f82bbc90SS.Chekanov $compat=true; 131*f82bbc90SS.Chekanov foreach ($usedplugins as &$value) { 132*f82bbc90SS.Chekanov $ex=false; 133*f82bbc90SS.Chekanov foreach ($infoplugins as &$val) 134*f82bbc90SS.Chekanov if ($val == $value) $ex=true; 135*f82bbc90SS.Chekanov if ($ex == false) { 136*f82bbc90SS.Chekanov echo "Warning: plugin \"$value\" used for this ZWI file is missing<br>"; 137*f82bbc90SS.Chekanov $compat=false; 138*f82bbc90SS.Chekanov }; 139*f82bbc90SS.Chekanov } 140*f82bbc90SS.Chekanov if ($compat) echo "All plugins used for this file are available in the system<br>"; 141*f82bbc90SS.Chekanov 142*f82bbc90SS.Chekanov 143*f82bbc90SS.Chekanov file_put_contents($out_file, $article); 144*f82bbc90SS.Chekanov $xpath=str_replace(":", "/", $Title); 145*f82bbc90SS.Chekanov 146*f82bbc90SS.Chekanov $out_dir= DOKU_INC."data/tmp/".$xpath; 147*f82bbc90SS.Chekanov $zip->extractTo($out_dir); 148*f82bbc90SS.Chekanov 149*f82bbc90SS.Chekanov 150*f82bbc90SS.Chekanov // we always copy (add) media from ZWI 151*f82bbc90SS.Chekanov $xm="/data/media/".$Namespace."/"; 152*f82bbc90SS.Chekanov $out_media = DOKU_INC.$xm; 153*f82bbc90SS.Chekanov $input_media = $out_dir . $xm; 154*f82bbc90SS.Chekanov 155*f82bbc90SS.Chekanov $cmd="cp -rf $input_media $out_media"; 156*f82bbc90SS.Chekanov shell_exec("mkdir -p " . $out_meta); 157*f82bbc90SS.Chekanov shell_exec($cmd); 158*f82bbc90SS.Chekanov 159*f82bbc90SS.Chekanov // new article. Then copy meta and history 160*f82bbc90SS.Chekanov if ($articleExist==false) { 161*f82bbc90SS.Chekanov // if this is new article, we also copy previous revisions and meta 162*f82bbc90SS.Chekanov $xm="/data/attic/".$Namespace."/"; 163*f82bbc90SS.Chekanov $input_attic = $out_dir . $xm; 164*f82bbc90SS.Chekanov $out_attic = DOKU_INC.$xm; 165*f82bbc90SS.Chekanov $cmd="cp -rf $input_attic $out_attic"; 166*f82bbc90SS.Chekanov #echo $cmd; 167*f82bbc90SS.Chekanov shell_exec("mkdir -p " . $out_attic); 168*f82bbc90SS.Chekanov shell_exec($cmd); 169*f82bbc90SS.Chekanov 170*f82bbc90SS.Chekanov // if this is new article, we also copy metadata 171*f82bbc90SS.Chekanov $xm="/data/meta/".$Namespace."/"; 172*f82bbc90SS.Chekanov $input_meta = $out_dir . $xm; 173*f82bbc90SS.Chekanov $out_meta = DOKU_INC.$xm; 174*f82bbc90SS.Chekanov $cmd="cp -rf $input_meta $out_meta"; 175*f82bbc90SS.Chekanov shell_exec("mkdir -p " . $out_meta); 176*f82bbc90SS.Chekanov shell_exec($cmd); 177*f82bbc90SS.Chekanov 178*f82bbc90SS.Chekanov echo "Old revisions were imported from the ZWI file.<br>"; 179*f82bbc90SS.Chekanov 180*f82bbc90SS.Chekanov } // 181*f82bbc90SS.Chekanov 182*f82bbc90SS.Chekanov 183*f82bbc90SS.Chekanov 184*f82bbc90SS.Chekanov 185*f82bbc90SS.Chekanov echo "All media files for this article were imported<br>"; 186*f82bbc90SS.Chekanov echo "<b>Done! Your article in the <a href='/dokuwiki/doku.php?id=articles'> Staged article area </a> </b>"; 187*f82bbc90SS.Chekanov 188*f82bbc90SS.Chekanov 189*f82bbc90SS.Chekanov 190*f82bbc90SS.Chekanov 191*f82bbc90SS.Chekanov 192*f82bbc90SS.Chekanov 193*f82bbc90SS.Chekanov 194*f82bbc90SS.Chekanov $zip->close(); 195*f82bbc90SS.Chekanov 196*f82bbc90SS.Chekanov 197*f82bbc90SS.Chekanov // cleaning 198*f82bbc90SS.Chekanov //$cmd="rm -rf $out_dir"; 199*f82bbc90SS.Chekanov //shell_exec($cmd); 200*f82bbc90SS.Chekanov 201*f82bbc90SS.Chekanov unlink( $target_file ); 202*f82bbc90SS.Chekanov // reading zip file end 203*f82bbc90SS.Chekanov } else { 204*f82bbc90SS.Chekanov die("Sorry, there was an error uploading your file."); 205*f82bbc90SS.Chekanov 206*f82bbc90SS.Chekanov } 207*f82bbc90SS.Chekanov } 208*f82bbc90SS.Chekanov 209*f82bbc90SS.Chekanov} 210*f82bbc90SS.Chekanov 211*f82bbc90SS.Chekanov 212*f82bbc90SS.Chekanovecho file_get_contents(DOKU_INC.'/lib/plugins/zwidoku/html_end'); 213*f82bbc90SS.Chekanov 214*f82bbc90SS.Chekanov?> 215