1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/webtrees_ynh.git synced 2024-09-03 18:26:37 +02:00
webtrees_ynh/sources/admin_trees_download.php

211 lines
7.3 KiB
PHP
Raw Normal View History

<?php
/**
* webtrees: online genealogy
* Copyright (C) 2016 webtrees development team
* This program is free software: 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 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Fisharebest\Webtrees;
/**
* Defined in session.php
*
* @global Tree $WT_TREE
*/
global $WT_TREE;
use Fisharebest\Webtrees\Controller\PageController;
use Fisharebest\Webtrees\Functions\FunctionsExport;
use PclZip;
define('WT_SCRIPT_NAME', 'admin_trees_download.php');
require './includes/session.php';
$controller = new PageController;
$controller
->setPageTitle(I18N::translate($WT_TREE->getTitleHtml()) . ' — ' . I18N::translate('Export a GEDCOM file'))
->restrictAccess(Auth::isManager($WT_TREE));
// Validate user parameters
$action = Filter::get('action', 'download');
$convert = Filter::get('convert', 'yes|no', 'no');
$zip = Filter::get('zip', 'yes|no', 'no');
$conv_path = Filter::get('conv_path');
$privatize_export = Filter::get('privatize_export', 'none|visitor|user|gedadmin');
if ($action === 'download') {
$exportOptions = array(
'privatize' => $privatize_export,
'toANSI' => $convert,
'path' => $conv_path,
);
// What to call the downloaded file
$download_filename = $WT_TREE->getName();
if (strtolower(substr($download_filename, -4, 4)) != '.ged') {
$download_filename .= '.ged';
}
if ($zip === 'yes') {
$temp_dir = WT_DATA_DIR . 'tmp-' . $WT_TREE->getName() . '-' . date('YmdHis') . '/';
$zip_file = $download_filename . '.zip';
if (!File::mkdir($temp_dir)) {
echo "Error : Could not create temporary path!";
return;
}
// Create the unzipped GEDCOM on disk, so we can ZIP it.
$stream = fopen($temp_dir . $download_filename, "w");
FunctionsExport::exportGedcom($WT_TREE, $stream, $exportOptions);
fclose($stream);
// Create a ZIP file containing the GEDCOM file.
$comment = "Created by " . WT_WEBTREES . " " . WT_VERSION . " on " . date("r") . ".";
$archive = new PclZip($temp_dir . $zip_file);
$v_list = $archive->add($temp_dir . $download_filename, \PCLZIP_OPT_COMMENT, $comment, \PCLZIP_OPT_REMOVE_PATH, $temp_dir);
if ($v_list == 0) {
echo "Error : " . $archive->errorInfo(true);
} else {
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . $zip_file . '"');
header('Content-length: ' . filesize($temp_dir . $zip_file));
readfile($temp_dir . $zip_file);
File::delete($temp_dir);
}
} else {
header('Content-Type: text/plain; charset=UTF-8');
header('Content-Disposition: attachment; filename="' . $download_filename . '"');
// Stream the GEDCOM file straight to the browser.
// We could open "php://compress.zlib" to create a .gz file or "php://compress.bzip2" to create a .bz2 file
$stream = fopen('php://output', 'w');
FunctionsExport::exportGedcom($WT_TREE, $stream, $exportOptions);
fclose($stream);
}
return;
}
$controller->pageHeader();
?>
<ol class="breadcrumb small">
<li><a href="admin.php"><?php echo I18N::translate('Control panel'); ?></a></li>
<li><a href="admin_trees_manage.php"><?php echo I18N::translate('Manage family trees'); ?></a></li>
<li class="active"><?php echo $controller->getPageTitle(); ?></li>
</ol>
<h1><?php echo $controller->getPageTitle(); ?></h1>
<form class="form form-horizontal" method="post" action="admin_trees_export.php">
<?php echo Filter::getCsrf(); ?>
<input type="hidden" name="ged" value="<?php echo $WT_TREE->getNameHtml(); ?>">
<div class="form-group">
<label for="submit-export" class="col-sm-3 control-label">
<?php echo I18N::translate('A file on the server'); ?>
</label>
<div class="col-sm-9">
<button id="submit-export" type="submit" class="btn btn-primary">
<?php echo /* I18N: A button label. */ I18N::translate('continue'); ?>
</button>
</div>
</div>
</form>
<hr>
<form class="form form-horizontal">
<input type="hidden" name="action" value="download">
<input type="hidden" name="ged" value="<?php echo $WT_TREE->getNameHtml(); ?>">
<!-- DOWNLOAD OPTIONS -->
<fieldset class="form-group">
<legend class="control-label col-sm-3">
<?php echo I18N::translate('Export preferences'); ?>
</legend>
<!-- ZIP FILES -->
<div class="col-sm-9">
<label>
<input type="checkbox" name="zip" value="yes">
<?php echo I18N::translate('Compress the GEDCOM file'); ?>
</label>
<p class="small muted">
<?php echo I18N::translate('To reduce the size of the download, you can compress the data into a .ZIP file. You will need to uncompress the .ZIP file before you can use it.'); ?>
</p>
<!-- CONVERT TO ISO8859-1 -->
<label>
<input type="checkbox" name="convert" value="yes">
<?php echo I18N::translate('Convert from UTF-8 to ISO-8859-1'); ?>
</label>
<p class="small muted">
<?php echo I18N::translate('webtrees uses UTF-8 encoding for accented letters, special characters and non-Latin scripts. If you want to use this GEDCOM file with genealogy software that does not support UTF-8, then you can create it using ISO-8859-1 encoding.'); ?>
</p>
<!-- GEDCOM_MEDIA_PATH -->
<?php if ($WT_TREE->getPreference('GEDCOM_MEDIA_PATH')): ?>
<label>
<input type="checkbox" name="conv_path" value="<?php echo Filter::escapeHtml($WT_TREE->getPreference('GEDCOM_MEDIA_PATH')); ?>">
<?php echo /* I18N: A media path (e.g. C:\aaa\bbb\ccc\) in a GEDCOM file */ I18N::translate('Add the GEDCOM media path to filenames'); ?>
</label>
<p>
<?php echo /* I18N: %s is the name of a folder. */ I18N::translate('Media filenames will be prefixed by %s.', '<code dir="ltr">' . Filter::escapeHtml($WT_TREE->getPreference('GEDCOM_MEDIA_PATH')) . '</code>'); ?>
</p>
<?php endif; ?>
</div>
</fieldset>
<!-- PRIVACY OPTIONS -->
<fieldset class="form-group">
<legend class="control-label col-sm-3">
<?php echo I18N::translate('Apply privacy settings'); ?>
</legend>
<div class="col-sm-9">
<label>
<input type="radio" name="privatize_export" value="none" checked>
<?php echo I18N::translate('None'); ?>
</label>
<br>
<label>
<input type="radio" name="privatize_export" value="gedadmin">
<?php echo I18N::translate('Manager'); ?>
</label>
<br>
<label>
<input type="radio" name="privatize_export" value="user">
<?php echo I18N::translate('Member'); ?>
</label>
<br>
<label>
<input type="radio" name="privatize_export" value="visitor">
<?php echo I18N::translate('Visitor'); ?>
</label>
</div>
</fieldset>
<div class="form-group">
<label for="submit-export" class="col-sm-3 control-label">
<?php echo I18N::translate('A file on your computer'); ?>
</label>
<div class="col-sm-9">
<button id="submit-export" type="submit" class="btn btn-primary">
<?php echo /* I18N: A button label. */ I18N::translate('continue'); ?>
</button>
</div>
</div>
</form>
</form>