Website export to cloud files works. Created new recursive copy function in attach.php.
This commit is contained in:
parent
d39cf23b2f
commit
305e0538d2
@ -424,7 +424,18 @@ class Webpages extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'exportcloud':
|
||||
logger('exportcloud', LOGGER_DEBUG);
|
||||
if(isset($_POST['exportcloudpath']) && $_POST['exportcloudpath'] !== '') {
|
||||
$_SESSION['action'] = 'export_select_list';
|
||||
$_SESSION['export'] = 'cloud';
|
||||
$_SESSION['exportcloudpath'] = filter_var($_POST['exportcloudpath'], FILTER_SANITIZE_ENCODED);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'cloud':
|
||||
case 'zipfile':
|
||||
|
||||
$channel = \App::get_channel();
|
||||
@ -644,18 +655,46 @@ class Webpages extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Generate the zip file
|
||||
\Zotlabs\Lib\ExtendedZip::zipTree($tmp_folderpath, $zip_filepath, \ZipArchive::CREATE);
|
||||
// Output the file for download
|
||||
header('Content-disposition: attachment; filename="' . $zip_filename . '"');
|
||||
header("Content-Type: application/zip");
|
||||
readfile($zip_filepath);
|
||||
rrmdir($zip_folderpath); // delete temporary files
|
||||
rrmdir($tmp_folderpath); // delete temporary files
|
||||
if($action === 'zipfile') {
|
||||
// Generate the zip file
|
||||
\Zotlabs\Lib\ExtendedZip::zipTree($tmp_folderpath, $zip_filepath, \ZipArchive::CREATE);
|
||||
// Output the file for download
|
||||
header('Content-disposition: attachment; filename="' . $zip_filename . '"');
|
||||
header("Content-Type: application/zip");
|
||||
$success = readfile($zip_filepath);
|
||||
} elseif ($action === 'cloud') { // Only zipfile or cloud should be possible values for $action here
|
||||
if(isset($_SESSION['exportcloudpath'])) {
|
||||
require_once('include/attach.php');
|
||||
$cloudpath = urldecode($_SESSION['exportcloudpath']);
|
||||
$channel = \App::get_channel();
|
||||
$dirpath = get_dirpath_by_cloudpath($channel, $cloudpath);
|
||||
if(!$dirpath) {
|
||||
$x = attach_mkdirp($channel, $channel['channel_hash'], array('pathname' => $cloudpath));
|
||||
$folder_hash = (($x['success']) ? $x['data']['hash'] : '');
|
||||
|
||||
if (!$x['success']) {
|
||||
logger('Failed to create cloud file folder', LOGGER_NORMAL);
|
||||
}
|
||||
$dirpath = get_dirpath_by_cloudpath($channel, $cloudpath);
|
||||
if (!is_dir($dirpath)) {
|
||||
logger('Failed to create cloud file folder', LOGGER_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
$success = copy_folder_to_cloudfiles($channel, $channel['channel_hash'], $tmp_folderpath, $cloudpath);
|
||||
}
|
||||
}
|
||||
if(!$success) {
|
||||
logger('Error exporting webpage elements', LOGGER_NORMAL);
|
||||
}
|
||||
|
||||
rrmdir($zip_folderpath); rrmdir($tmp_folderpath); // delete temporary files
|
||||
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1994,3 +1994,50 @@ function get_filename_by_cloudname($cloudname, $channel, $storepath) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// recursively copy a directory into cloud files
|
||||
function copy_folder_to_cloudfiles($channel, $observer_hash, $srcpath, $cloudpath)
|
||||
{
|
||||
if (!is_dir($srcpath) || !is_readable($srcpath)) {
|
||||
logger('Error reading source path: ' . $srcpath, LOGGER_NORMAL);
|
||||
return false;
|
||||
}
|
||||
$nodes = array_diff(scandir($srcpath), array('.', '..'));
|
||||
foreach ($nodes as $node) {
|
||||
$clouddir = $cloudpath . '/' . $node; // Sub-folder in cloud files destination
|
||||
$nodepath = $srcpath . '/' . $node; // Sub-folder in source path
|
||||
if(is_dir($nodepath)) {
|
||||
$x = attach_mkdirp($channel, $observer_hash, array('pathname' => $clouddir));
|
||||
if(!$x['success']) {
|
||||
logger('Error creating cloud path: ' . $clouddir, LOGGER_NORMAL);
|
||||
return false;
|
||||
}
|
||||
// Recursively call this function where the source and destination are the subfolders
|
||||
$success = copy_folder_to_cloudfiles($channel, $observer_hash, $nodepath, $clouddir);
|
||||
if(!$success) {
|
||||
logger('Error copying contents of folder: ' . $nodepath, LOGGER_NORMAL);
|
||||
return false;
|
||||
}
|
||||
} elseif (is_file($nodepath) && is_readable($nodepath)) {
|
||||
$x = attach_store($channel, $observer_hash, 'import',
|
||||
array(
|
||||
'directory' => $cloudpath,
|
||||
'src' => $nodepath,
|
||||
'filename' => $node,
|
||||
'filesize' => @filesize($nodepath),
|
||||
'preserve_original' => true)
|
||||
);
|
||||
if(!$x['success']) {
|
||||
logger('Error copying file: ' . $nodepath , LOGGER_NORMAL);
|
||||
logger('Return value: ' . json_encode($x), LOGGER_NORMAL);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
logger('Error scanning source path', LOGGER_NORMAL);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
@ -2295,6 +2295,10 @@ function website_portation_tools() {
|
||||
'$file_download_text' => t('Export to a zip file'),
|
||||
'$filename_desc' => t('website.zip'),
|
||||
'$filename_hint' => t('Enter a name for the zip file.'),
|
||||
'$cloud_export_text' => t('Export to cloud files'),
|
||||
'$cloud_export_desc' => t('/path/to/export/folder'),
|
||||
'$cloud_export_hint' => t('Enter a path to a cloud files destination.'),
|
||||
'$cloud_export_select' => t('Specify folder'),
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@
|
||||
</ul>
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li>
|
||||
<a href="#" onclick="openClose('export-form');
|
||||
<a href="#" onclick="openClose('export-form'); openClose('export-cloud-form');
|
||||
return false;"><i class="fa fa-share-square-o generic-icons"></i> {{$export_label}}</a>
|
||||
</li>
|
||||
<li style="margin-left: 12px;" >
|
||||
@ -53,6 +53,20 @@
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<form id="export-cloud-form" enctype="multipart/form-data" method="post" action="" style="display: none;" class="sub-menu">
|
||||
<input type="hidden" name="action" value="exportcloud">
|
||||
<!-- Or export the website elements to a cloud files folder -->
|
||||
<p style="margin-top: 10px;" class="descriptive-text">{{$cloud_export_text}}</p>
|
||||
<div class="form-group">
|
||||
|
||||
<div class="input-group">
|
||||
<input class="widget-input" type="text" name="exportcloudpath" title="{{$cloud_export_hint}}" placeholder="{{$cloud_export_desc}}" />
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-default btn-sm" type="submit" name="exportcloudsubmit" value="{{$cloud_export_select}}"><i class="fa fa-folder-open generic-icons"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user