xref: /plugin/zwidoku/open_file.php (revision f82bbc904bd835fc66a3f52ffaef251433904ec2)
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