Beispiel #1
0
function LoadPostFile(&$request)
{
    $upload = $request->getUploadedFile('file');
    if (!$upload) {
        $request->finish(_("No uploaded file to upload?"));
    }
    // FIXME: more concise message
    // Dump http headers.
    StartLoadDump($request, sprintf(_("Uploading %s"), $upload->getName()));
    echo "<dl>\n";
    $fd = $upload->open();
    if (IsZipFile($fd)) {
        LoadZip($request, $fd, false, array(_("RecentChanges")));
    } else {
        LoadFile($request, $upload->getName(), $upload->getContents());
    }
    echo "</dl>\n";
    EndLoadDump($request);
}
Beispiel #2
0
/** entry function from lib/main.php
 */
function DoUpgrade($request)
{
    if (!$request->_user->isAdmin()) {
        $request->_notAuthorized(WIKIAUTH_ADMIN);
        $request->finish(HTML::div(array('class' => 'disabled-plugin'), fmt("Upgrade disabled: user != isAdmin")));
        return;
    }
    //print("<br>This action is blocked by administrator. Sorry for the inconvenience !<br>");
    exit("<br>This action is blocked by administrator. Sorry for the inconvenience !<br>");
    StartLoadDump($request, _("Upgrading this PhpWiki"));
    //CheckOldIndexUpdate($request); // to upgrade from < 1.3.10
    CheckDatabaseUpdate($request);
    // first check cached_html and friends
    CheckActionPageUpdate($request);
    CheckPgsrcUpdate($request);
    //CheckThemeUpdate($request);
    //CheckPluginUpdate($request);
    CheckConfigUpdate($request);
    EndLoadDump($request);
}
Beispiel #3
0
 function _do_syncwiki(&$request, $args)
 {
     global $charset;
     longer_timeout(240);
     if (!function_exists('wiki_xmlrpc_post')) {
         include_once "lib/XmlRpcClient.php";
     }
     $userid = $request->_user->_userid;
     $dbh = $request->getDbh();
     $merge_point = $dbh->get('mergepoint');
     if (empty($merge_point)) {
         $page = $dbh->getPage("ReleaseNotes");
         // this is usually the latest official page
         $last = $page->getCurrentRevision(false);
         $merge_point = $last->get("mtime");
         // for testing: 1160396075
         $dbh->set('mergepoint', $merge_point);
     }
     //TODO: remote auth, set session cookie
     $pagelist = wiki_xmlrpc_post('wiki.getRecentChanges', iso8601_encode($merge_point, 1), $args['url'], $args);
     $html = HTML();
     //$html->pushContent(HTML::div(HTML::em("check RPC2 interface...")));
     if (gettype($pagelist) === "array") {
         //$request->_deferredPageChangeNotification = array();
         $request->discardOutput();
         StartLoadDump($request, _("Syncing this PhpWiki"));
         PrintXML(HTML::strong(fmt("Download all externally changed sources.")));
         echo "<br />\n";
         PrintXML(fmt("Retrieving from external url %s wiki.getRecentChanges(%s)...", $args['url'], iso8601_encode($merge_point, 1)));
         echo "<br />\n";
         $ouriter = $dbh->mostRecent(array('since' => $merge_point));
         //$ol = HTML::ol();
         $done = array();
         foreach ($pagelist as $ext) {
             $reaction = _("<unknown>");
             // compare existance and dates with local page
             $extdate = iso8601_decode($ext['lastModified']->scalar, 1);
             // TODO: urldecode ???
             $name = utf8_decode($ext['name']);
             $our = $dbh->getPage($name);
             $done[$name] = 1;
             $ourrev = $our->getCurrentRevision(false);
             $rel = '<=>';
             if (!$our->exists()) {
                 // we might have deleted or moved it on purpose?
                 // check date of latest revision if there's one, and > mergepoint
                 if ($ourrev->getVersion() > 1 and $ourrev->get('mtime') > $merge_point) {
                     // our was deleted after sync, and changed after last sync.
                     $this->_addConflict('delete', $args, $our, $extdate);
                     $reaction = _(" skipped") . " (" . "locally deleted or moved" . ")";
                 } else {
                     $reaction = $this->_import($args, $our, $extdate);
                 }
             } else {
                 $ourdate = $ourrev->get('mtime');
                 if ($extdate > $ourdate and $ourdate < $merge_point) {
                     $rel = '>';
                     $reaction = $this->_import($args, $our, $extdate);
                 } elseif ($extdate > $ourdate and $ourdate >= $merge_point) {
                     $rel = '>';
                     // our is older then external but newer than last sync
                     $reaction = $this->_addConflict('import', $args, $our, $extdate);
                 } elseif ($extdate < $ourdate and $extdate < $merge_point) {
                     $rel = '>';
                     $reaction = $this->_export($args, $our);
                 } elseif ($extdate < $ourdate and $extdate >= $merge_point) {
                     $rel = '>';
                     // our is newer and external is also newer
                     $reaction = $this->_addConflict('export', $args, $our, $extdate);
                 } else {
                     $rel = '==';
                     $reaction = _("same date");
                 }
             }
             /*$ol->pushContent(HTML::li(HTML::strong($name)," ",
               $extdate,"<=>",$ourdate," ",
               HTML::strong($reaction))); */
             PrintXML(HTML::strong($name), " ", $extdate, " {$rel} ", $ourdate, " ", HTML::strong($reaction), HTML::br());
             $request->chunkOutput();
         }
         //$html->pushContent($ol);
     } else {
         $html->pushContent("xmlrpc error:  wiki.getRecentChanges returned " . "(" . gettype($pagelist) . ") " . $pagelist);
         trigger_error("xmlrpc error:  wiki.getRecentChanges returned " . "(" . gettype($pagelist) . ") " . $pagelist, E_USER_WARNING);
         EndLoadDump($request);
         return $this->error($html);
     }
     if (empty($args['noexport'])) {
         PrintXML(HTML::strong(fmt("Now upload all locally newer pages.")));
         echo "<br />\n";
         PrintXML(fmt("Checking all local pages newer than %s...", iso8601_encode($merge_point, 1)));
         echo "<br />\n";
         while ($our = $ouriter->next()) {
             $name = $our->getName();
             if ($done[$name]) {
                 continue;
             }
             $reaction = _(" skipped");
             $ext = wiki_xmlrpc_post('wiki.getPageInfo', $name, $args['url']);
             if (is_array($ext)) {
                 $extdate = iso8601_decode($ext['lastModified']->scalar, 1);
                 $ourdate = $our->get('mtime');
                 if ($extdate < $ourdate and $extdate < $merge_point) {
                     $reaction = $this->_export($args, $our);
                 } elseif ($extdate < $ourdate and $extdate >= $merge_point) {
                     // our newer and external newer
                     $reaction = $this->_addConflict($args, $our, $extdate);
                 }
             } else {
                 $reaction = 'xmlrpc error';
             }
             PrintXML(HTML::strong($name), " ", $extdate, " < ", $ourdate, " ", HTML::strong($reaction), HTML::br());
             $request->chunkOutput();
         }
         PrintXML(HTML::strong(fmt("Now upload all locally newer uploads.")));
         echo "<br />\n";
         PrintXML(fmt("Checking all local uploads newer than %s...", iso8601_encode($merge_point, 1)));
         echo "<br />\n";
         $this->_fileList = array();
         $prefix = getUploadFilePath();
         $this->_dir($prefix);
         $len = strlen($prefix);
         foreach ($this->_fileList as $path) {
             // strip prefix
             $file = substr($path, $len);
             $ourdate = filemtime($path);
             $oursize = filesize($path);
             $reaction = _(" skipped");
             $ext = wiki_xmlrpc_post('wiki.getUploadedFileInfo', $file, $args['url']);
             if (is_array($ext)) {
                 $extdate = iso8601_decode($ext['lastModified']->scalar, 1);
                 $extsize = $ext['size'];
                 if (empty($extsize) or $extdate < $ourdate) {
                     $timeout = $oursize * 0.0002;
                     // assume 50kb/sec upload speed
                     $reaction = $this->_upload($args, $path, $timeout);
                 }
             } else {
                 $reaction = 'xmlrpc error wiki.getUploadedFileInfo not supported';
             }
             PrintXML(HTML::strong($name), " ", "{$extdate} ({$extsize}) < {$ourdate} ({$oursize})", HTML::strong($reaction), HTML::br());
             $request->chunkOutput();
         }
     }
     $dbh->set('mergepoint', time());
     EndLoadDump($request);
     return '';
     //$html;
 }
Beispiel #4
0
/** entry function from lib/main.php
 */
function DoUpgrade(&$request)
{
    if (!$request->_user->isAdmin()) {
        $request->_notAuthorized(WIKIAUTH_ADMIN);
        $request->finish(HTML::div(array('class' => 'disabled-plugin'), fmt("Upgrade disabled: user != isAdmin")));
        return;
    }
    // TODO: StartLoadDump should turn on implicit_flush.
    @ini_set("implicit_flush", true);
    StartLoadDump($request, _("Upgrading this PhpWiki"));
    $upgrade = new Upgrade($request);
    //if (!$request->getArg('noindex'))
    //    CheckOldIndexUpdate($request); // index.php => config.ini to upgrade from < 1.3.10
    if (!$request->getArg('nodb')) {
        $upgrade->CheckDatabaseUpdate($request);
    }
    // first check cached_html and friends
    if (!$request->getArg('nopgsrc')) {
        $upgrade->CheckPgsrcUpdate($request);
        $upgrade->CheckActionPageUpdate($request);
    }
    if (!$request->getArg('noplugin')) {
        $upgrade->CheckPluginUpdate($request);
    }
    if (!$request->getArg('noconfig')) {
        $upgrade->CheckConfigUpdate($request);
    }
    // This is optional and should be linked. In EndLoadDump or PhpWikiAdministration?
    //if ($request->getArg('theme'))
    //	  $upgrade->CheckThemeUpdate($request);
    EndLoadDump($request);
}