streams/Zotlabs/Module/Wall_attach.php

157 lines
4 KiB
PHP
Raw Normal View History

2016-04-19 03:38:38 +00:00
<?php
namespace Zotlabs\Module;
2019-04-29 04:17:04 +00:00
use App;
use Zotlabs\Web\Controller;
2018-06-05 01:40:11 +00:00
use Zotlabs\Lib\Libsync;
2018-06-01 04:05:09 +00:00
2016-04-19 03:38:38 +00:00
require_once('include/attach.php');
require_once('include/photos.php');
2019-04-29 04:17:04 +00:00
class Wall_attach extends Controller {
2016-04-19 03:38:38 +00:00
function init() {
logger('request_method: ' . $_SERVER['REQUEST_METHOD'],LOGGER_DATA,LOG_INFO);
logger('wall_attach: ' . print_r($_REQUEST,true),LOGGER_DEBUG,LOG_INFO);
logger('wall_attach files: ' . print_r($_FILES,true),LOGGER_DEBUG,LOG_INFO);
// for testing without actually storing anything
// http_status_exit(200,'OK');
}
2016-04-19 03:38:38 +00:00
function post() {
$using_api = false;
$result = [];
2019-04-29 04:17:04 +00:00
if ($_REQUEST['api_source'] && array_key_exists('media',$_FILES)) {
2016-04-19 03:38:38 +00:00
$using_api = true;
}
2019-04-29 04:17:04 +00:00
if ($using_api) {
require_once('include/api.php');
2019-04-29 04:17:04 +00:00
if (api_user()) {
$channel = channelx_by_n(api_user());
2019-04-29 04:17:04 +00:00
}
}
else {
2019-04-29 04:17:04 +00:00
if (argc() > 1)
$channel = channelx_by_nick(argv(1));
}
2019-04-29 04:17:04 +00:00
if (! $channel)
2016-04-19 03:38:38 +00:00
killme();
$matches = [];
$partial = false;
2019-04-29 04:17:04 +00:00
if (array_key_exists('HTTP_CONTENT_RANGE',$_SERVER)) {
$pm = preg_match('/bytes (\d*)\-(\d*)\/(\d*)/',$_SERVER['HTTP_CONTENT_RANGE'],$matches);
2019-04-29 04:17:04 +00:00
if ($pm) {
// logger('Content-Range: ' . print_r($matches,true));
$partial = true;
}
}
2019-04-29 04:17:04 +00:00
if ($partial) {
$x = save_chunk($channel,$matches[1],$matches[2],$matches[3]);
2019-04-29 04:17:04 +00:00
if ($x['partial']) {
header('Range: bytes=0-' . (($x['length']) ? $x['length'] - 1 : 0));
json_return_and_die($result);
}
else {
2017-07-14 05:29:15 +00:00
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 {
2019-04-29 04:17:04 +00:00
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']
];
}
}
2019-04-29 04:17:04 +00:00
$observer = App::get_observer();
2016-04-19 03:38:38 +00:00
$def_album = get_pconfig($channel['channel_id'],'system','photo_path');
$def_attach = get_pconfig($channel['channel_id'],'system','attach_path');
2019-04-29 04:17:04 +00:00
$r = attach_store($channel, (($observer) ? $observer['xchan_hash'] : ''), '', [
'source' => 'editor',
'visible' => 0,
'album' => $def_album,
'directory' => $def_attach,
'flags' => 1, // indicates temporary permissions are created
2019-04-29 04:17:04 +00:00
'allow_cid' => '<' . $channel['channel_hash'] . '>'
]);
2016-04-19 03:38:38 +00:00
2019-04-29 04:17:04 +00:00
if (! $r['success']) {
2016-04-19 03:38:38 +00:00
notice( $r['message'] . EOL);
killme();
}
2019-04-29 04:17:04 +00:00
if (intval($r['data']['is_photo'])) {
2016-04-19 03:38:38 +00:00
$s = "\n\n" . $r['body'] . "\n\n";
}
else {
2019-04-29 04:17:04 +00:00
$url = z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path'];
if (strpos($r['data']['filetype'],'video') === 0) {
// give a wee bit of time for the background thumbnail processor to do its thing
// or else we'll never see a video poster
sleep(3);
$thumb = Linkinfo::get_video_poster($url);
2019-04-29 04:17:04 +00:00
if ($thumb) {
$s = "\n\n" . '[zvideo poster=\'' . $thumb . '\']' . $url . '[/zvideo]' . "\n\n";
}
else {
$s = "\n\n" . '[zvideo]' . $url . '[/zvideo]' . "\n\n";
}
}
2019-04-29 04:17:04 +00:00
if (strpos($r['data']['filetype'],'audio') === 0) {
$s = "\n\n" . '[zaudio]' . $url . '[/zaudio]' . "\n\n";
}
2019-11-06 05:34:47 +00:00
if ($r['data']['filetype'] === 'image/svg+xml') {
$x = @file_get_contents('store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
if ($x) {
$bb = svg2bb($x);
if ($bb) {
$s .= "\n\n" . $bb;
}
2019-11-06 10:15:38 +00:00
else {
logger('empty return from svgbb');
}
}
else {
logger('unable to read svg data file: ' . 'store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
2019-11-06 05:34:47 +00:00
}
}
$s .= "\n\n" . '[attachment]' . $r['data']['hash'] . ',' . $r['data']['revision'] . '[/attachment]' . "\n";
2016-04-19 03:38:38 +00:00
}
2019-11-05 03:34:22 +00:00
if ($using_api) {
2016-04-19 03:38:38 +00:00
return $s;
2019-11-05 03:34:22 +00:00
}
$result['message'] = $s;
2019-04-29 04:17:04 +00:00
json_return_and_die($result);
2016-04-19 03:38:38 +00:00
}
}