On 18/03/2020 10:13, Pierre-Marie Carette wrote:
et par dirlist ? il suffirait de choisir après affichage de la liste «
télécharger le fichier source » mais (dirlist wiki.d:) est-il permis ?

Fortement non-recommandé, ceci exposerait toutes les pages de wiki.d y compris celles qui seraient protégées en lecture par le wiki.

J'ai un module qui permet d'exporter un groupe de pages, je n'ai pas encore écrit la documentation, j'essayerai de le faire d'ici quelques jours.

PHP 5.2 minimum requis.

Ci-joint, zipexport.php, le placer dans pmwiki/cookbook puis ajouter dans config.php:

  include_once("$FarmD/cookbook/zipexport.php");

Puis, dans le wiki, créer des liens comme:

  Télécharger pages sources compatibles PmWiki :
  [[ Page?action=zipexport&group=Main | groupe Main ]]

  [[ Page?action=zipexport&trail=PmWiki.Variables | wiki trail ]]

Ce module permet de télécharger en une archive ZIP les pages source sans leur historique, et sans certaines informations confidentielles comme l'adresse IP du dernier éditeur.

De plus, seules les pages que le visiteur a la permission de lire seront incluses dans l'archive -- si une page est protégée en lecture et inaccessible au visiteur, elle ne sera pas dans l'archive.

En outre, le module est capable d'exporter des pages de différentes classes de stockage comme dossiers par groupe, ou SQLite ou autres.

Dans l'adresse du lien après ?action)=zipexport& peut utiliser group=Main,Site et trail=Page.WikiTrail ou autres paramètres de pagelists.

Petko

Le 18 mars 2020 à 09:19, Petko Yotov <5...@5ko.fr> a écrit :

On 18/03/2020 08:57, Pierre-Marie Carette wrote:
Mon site est une bibliothèque de descriptions. Chaque group de mon
site est une description. Pour permettre les échanges, comment écrire
un lien [[….|…]] qui permettrait de télécharger directement un group ?

Une telle fonctionnalité exacte n'existe pas dans l'installation de base.

On peut créer une page spéciale qui inclue toutes les pages du groupe:

 (:pagelist group=MonGroupe list=normal fmt=#include:)

Ou on peut créer son propre patron ("pagelist template") pour ajouter les titres des pages et des séparateurs.

Parmi les recettes/modules, il y en a quelques uns mais la plupart dépendent de logiciels/applications/librairies externes qui ne sont pas souvent installés sur un hébergement mutualisé :

 https://www.pmwiki.org/wiki/?action=search&q=printgroup

Petko
--
If you upgrade :  http://www.pmwiki.org/Upgrades
<?php if (!defined('PmWiki')) exit();
/*  ZipExport -- export PmWiki pages in the default pagefile format
    Written by Petko Yotov (c) 2009-2020 pmwiki.org/petko

    This file written for PmWiki; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published
    by the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.  See pmwiki.php for full details.
*/

$RecipeInfo['ZipExport']['Version'] = '20200318';

SDVA($HandleActions, array('zipexport'=>'HandleZipExport'));
SDVA($HandleAuth, array('zipexport'=>'read'));

# privacy & version stuff
SDV($ZipExportSkipPageAttributes,  array('version', 'newline', 'host', 'agent'));

global $WorkDir;
SDV($ZipTempDir, $WorkDir);
$ZipTargetDir = '';
SDVA($ZipExportListOpt, array('list' => 'normal'));

function HandleZipExport($pagename, $auth = 'read') {
  global $action, $PCache, $ZipExportListOpt, $ZipExportCategoryOpt, $ZipExportTrailOpt, $Charset,
    $CategoryGroup, $Version, $ZipTempDir, $ZipTargetDir, $ZipExportSkipPageAttributes, $Now;

  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
  if (!$page) Abort("?insufficient permissions");
  
  $ZipExportListOpt = (array)@$ZipExportListOpt;
  SDVA($ZipExportCategoryOpt, array('link' => $pagename));
  SDVA($ZipExportTrailOpt, array('trail' => $pagename));

  $feedtime = $page['time'];

  # determine list of pages to display
  if (@($_REQUEST['trail'] || $_REQUEST['group'] || $_REQUEST['link'] 
        || $_REQUEST['name'])) 
    $opt = $ZipExportListOpt;
  else if (preg_match("/^$CategoryGroup\\./", $pagename))
    $opt = $ZipExportCategoryOpt;
  else { 
    PCache($pagename, $page); 
    $pagelist = array($pagename); 
  }
  if (!@$pagelist) {
    $opt = array_merge($opt, @$_REQUEST);
    $pagelist = MakePageList($pagename, $opt, 0);
  }


  $r0 = array('%', "\n", '<');
  $r1 = array('%25', '%0a', '%3c');
  
  $zip = new ZipArchive();
  $zfile = @tempnam('tmp', 'pmzip');
  $zip->open($zfile, ZipArchive::OVERWRITE);
  
  foreach($pagelist as $pn) {
    $page = RetrieveAuthPage($pn, 'read', false, READPAGE_CURRENT);
    if(!$page) continue;

    foreach($ZipExportSkipPageAttributes as $v) unset($page[$v]);
    if(@$page['charset']=='') $page['charset']='ISO-8859-1'; # just in case
    uksort($page, 'CmpPageAttr');
    $x = "version=$Version ordered=1 urlencoded=1\n";

    foreach($page as $k=>$v)
      if ($k > '' && $v>'' && $k[0] != '=') {
        $x .= str_replace($r0, $r1, "$k=$v") . "\n";
      }
    $zip->addFromString("wiki.d/$pn", $x);
  }
  
  $zip->close(); 

  $downname = preg_replace('/\\..*$/', '', $pagename) .'.zip';
  
  header("Content-Type: application/zip");
  header("Content-Length: " . filesize($zfile));
  header("Content-Disposition: attachment; filename=\"$downname\"");
  readfile($zfile);
  unlink($zfile); 

  exit;
}
_______________________________________________
pmwiki-users-fr mailing list
pmwiki-users-fr@pmichaud.com
http://www.pmichaud.com/mailman/listinfo/pmwiki-users-fr

Répondre à