streams/Zotlabs/Module/File_upload.php

107 lines
3.8 KiB
PHP
Raw Normal View History

<?php
2021-12-03 03:01:39 +00:00
namespace Zotlabs\Module;
2018-06-05 01:40:11 +00:00
use Zotlabs\Lib\Libsync;
2021-12-02 22:33:36 +00:00
use Zotlabs\Web\Controller;
2018-06-01 04:05:09 +00:00
require_once('include/attach.php');
require_once('include/channel.php');
require_once('include/photos.php');
2021-12-02 23:02:31 +00:00
class File_upload extends Controller
{
public function post()
{
logger('file upload: ' . print_r($_REQUEST, true));
logger('file upload: ' . print_r($_FILES, true));
$channel = (($_REQUEST['channick']) ? channelx_by_nick($_REQUEST['channick']) : null);
if (!$channel) {
logger('channel not found');
killme();
}
$_REQUEST['source'] = 'file_upload';
if ($channel['channel_id'] != local_channel()) {
$_REQUEST['contact_allow'] = expand_acl($channel['channel_allow_cid']);
$_REQUEST['group_allow'] = expand_acl($channel['channel_allow_gid']);
$_REQUEST['contact_deny'] = expand_acl($channel['channel_deny_cid']);
$_REQUEST['group_deny'] = expand_acl($channel['channel_deny_gid']);
}
$_REQUEST['allow_cid'] = perms2str($_REQUEST['contact_allow']);
$_REQUEST['allow_gid'] = perms2str($_REQUEST['group_allow']);
$_REQUEST['deny_cid'] = perms2str($_REQUEST['contact_deny']);
$_REQUEST['deny_gid'] = perms2str($_REQUEST['group_deny']);
if ($_REQUEST['filename']) {
$r = attach_mkdir($channel, get_observer_hash(), $_REQUEST);
if ($r['success']) {
$hash = $r['data']['hash'];
$sync = attach_export_data($channel, $hash);
if ($sync) {
Libsync::build_sync_packet($channel['channel_id'], array('file' => array($sync)));
}
goaway(z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path']);
}
} else {
$matches = [];
$partial = false;
if (array_key_exists('HTTP_CONTENT_RANGE', $_SERVER)) {
$pm = preg_match('/bytes (\d*)\-(\d*)\/(\d*)/', $_SERVER['HTTP_CONTENT_RANGE'], $matches);
if ($pm) {
logger('Content-Range: ' . print_r($matches, true));
$partial = true;
}
}
if ($partial) {
$x = save_chunk($channel, $matches[1], $matches[2], $matches[3]);
if ($x['partial']) {
header('Range: bytes=0-' . (($x['length']) ? $x['length'] - 1 : 0));
json_return_and_die($x);
} else {
header('Range: bytes=0-' . (($x['size']) ? $x['size'] - 1 : 0));
$_FILES['userfile'] = [
'name' => $x['name'],
'type' => $x['type'],
'tmp_name' => $x['tmp_name'],
'error' => $x['error'],
'size' => $x['size']
];
}
} else {
if (!array_key_exists('userfile', $_FILES)) {
$_FILES['userfile'] = [
'name' => $_FILES['files']['name'],
'type' => $_FILES['files']['type'],
'tmp_name' => $_FILES['files']['tmp_name'],
'error' => $_FILES['files']['error'],
'size' => $_FILES['files']['size']
];
}
}
$r = attach_store($channel, get_observer_hash(), '', $_REQUEST);
if ($r['success']) {
$sync = attach_export_data($channel, $r['data']['hash']);
2021-12-03 03:01:39 +00:00
if ($sync) {
2021-12-02 23:02:31 +00:00
Libsync::build_sync_packet($channel['channel_id'], array('file' => array($sync)));
2021-12-03 03:01:39 +00:00
}
2021-12-02 23:02:31 +00:00
}
}
goaway(z_root() . '/' . $_REQUEST['return_url']);
}
}