Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge
This commit is contained in:
commit
6ac3fc4e07
@ -17,46 +17,36 @@ class Thumbnail {
|
||||
if(! $c)
|
||||
return;
|
||||
|
||||
$preview_style = intval(get_config('system','thumbnail_security',0));
|
||||
$preview_style = intval(get_config('system','thumbnail_security',0));
|
||||
$preview_width = intval(get_config('system','thumbnail_width',300));
|
||||
$preview_height = intval(get_config('system','thumbnail_height',300));
|
||||
|
||||
$attach = $c[0];
|
||||
$isize = 300;
|
||||
$default_controller = null;
|
||||
|
||||
if(strpos($attach['filetype'],'text/') !== false) {
|
||||
$stream = @fopen($attach['content'],'rb');
|
||||
if($stream) {
|
||||
$content = trim(stream_get_contents($stream,4096));
|
||||
$content = str_replace("\r",'',$content);
|
||||
$content_a = explode("\n",$content);
|
||||
}
|
||||
if($content_a) {
|
||||
$fsize = 4;
|
||||
$lsize = 8;
|
||||
$image = imagecreate($isize,$isize);
|
||||
imagecolorallocate($image,255,255,255);
|
||||
$colour = imagecolorallocate($image,0,0,0);
|
||||
$border = imagecolorallocate($image,64,64,64);
|
||||
|
||||
$x1 = 0;
|
||||
$y1 = 0;
|
||||
$x2 = ImageSX($image) - 1;
|
||||
$y2 = ImageSY($image) - 1;
|
||||
|
||||
for($i = 0; $i < 2; $i++) {
|
||||
ImageRectangle($image, $x1++, $y1++, $x2--, $y2--, $border);
|
||||
}
|
||||
|
||||
foreach($content_a as $l => $t) {
|
||||
$l = $l + 1;
|
||||
$x = 3;
|
||||
$y = ($l * $lsize) + 3 - $fsize;
|
||||
imagestring($image,1,$x,$y,$t,$colour);
|
||||
if(($l * $lsize) >= $isize) {
|
||||
break;
|
||||
$files = glob('Zotlabs/Thumbs/*.php');
|
||||
if($files) {
|
||||
foreach($files as $f) {
|
||||
$clsname = '\\Zotlabs\\Thumbs\\' . ucfirst(basename($f,'.php'));
|
||||
if(class_exists($clsname)) {
|
||||
$x = new $clsname();
|
||||
if(method_exists($x,'Match')) {
|
||||
$matched = $x->Match($attach['filetype']);
|
||||
if($matched) {
|
||||
$x->Thumb($attach,$preview_style,$preview_width,$preview_height);
|
||||
}
|
||||
}
|
||||
if(method_exists($x,'MatchDefault')) {
|
||||
$default_matched = $x->MatchDefault(substr($attach['filetype'],0,strpos($attach['filetype'],'/')));
|
||||
if($default_matched) {
|
||||
$default_controller = $x;
|
||||
}
|
||||
}
|
||||
}
|
||||
imagejpeg($image,$attach['content'] . '.thumb');
|
||||
}
|
||||
}
|
||||
if(($default_controller) && (! file_exists(dbunescbin($attach['content']) . '.thumb'))) {
|
||||
$default_controller->Thumb($attach,$preview_style,$preview_width,$preview_height);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,21 +45,26 @@ class Hq extends \Zotlabs\Web\Controller {
|
||||
if(! $item_hash) {
|
||||
|
||||
$r = q("SELECT mid FROM item
|
||||
WHERE uid = %d
|
||||
AND mid = parent_mid
|
||||
$item_normal
|
||||
WHERE uid = %d
|
||||
AND item_thread_top = 1
|
||||
ORDER BY created DESC
|
||||
limit 1",
|
||||
local_channel()
|
||||
intval(local_channel())
|
||||
);
|
||||
$item_hash = 'b64.' . base64url_encode($r[0]['mid']);
|
||||
|
||||
if(!$item_hash) {
|
||||
if(!$r[0]['mid']) {
|
||||
\App::$error = 404;
|
||||
notice( t('Item not found.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$item_hash = 'b64.' . base64url_encode($r[0]['mid']);
|
||||
}
|
||||
|
||||
if(strpos($item_hash,'b64.') === 0)
|
||||
$decoded = @base64url_decode(substr($item_hash,4));
|
||||
if($decoded)
|
||||
$item_hash = $decoded;
|
||||
|
||||
$updateable = false;
|
||||
|
||||
@ -101,11 +106,6 @@ class Hq extends \Zotlabs\Web\Controller {
|
||||
|
||||
$target_item = null;
|
||||
|
||||
if(strpos($item_hash,'b64.') === 0)
|
||||
$decoded = @base64url_decode(substr($item_hash,4));
|
||||
if($decoded)
|
||||
$item_hash = $decoded;
|
||||
|
||||
$r = q("select id, uid, mid, parent_mid, thr_parent, verb, item_type, item_deleted, item_blocked from item where mid like '%s' limit 1",
|
||||
dbesc($item_hash . '%')
|
||||
);
|
||||
|
@ -129,12 +129,16 @@ class File extends DAV\Node implements DAV\IFile {
|
||||
$album = '';
|
||||
$os_path = '';
|
||||
|
||||
$r = q("SELECT flags, folder, os_storage, os_path, filename, is_photo FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1",
|
||||
$r = q("SELECT flags, folder, os_storage, os_path, display_path, filename, is_photo FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1",
|
||||
dbesc($this->data['hash']),
|
||||
intval($c[0]['channel_id'])
|
||||
);
|
||||
if ($r) {
|
||||
|
||||
$os_path = $r[0]['os_path'];
|
||||
$display_path = $r[0]['display_path'];
|
||||
$filename = $r[0]['filename'];
|
||||
|
||||
|
||||
if (intval($r[0]['os_storage'])) {
|
||||
$d = q("select folder, content from attach where hash = '%s' and uid = %d limit 1",
|
||||
@ -210,7 +214,7 @@ class File extends DAV\Node implements DAV\IFile {
|
||||
|
||||
if($is_photo) {
|
||||
require_once('include/photos.php');
|
||||
$args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_syspath' => $f, 'os_path' => $os_path, 'filename' => $r[0]['filename'], 'getimagesize' => $gis, 'directory' => $direct );
|
||||
$args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_syspath' => $f, 'os_path' => $os_path, 'display_path' => $display_path, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct );
|
||||
$p = photo_upload($c[0],\App::get_observer(),$args);
|
||||
}
|
||||
|
||||
|
37
Zotlabs/Thumbs/Mp3audio.php
Normal file
37
Zotlabs/Thumbs/Mp3audio.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Zotlabs\Thumbs;
|
||||
|
||||
use \ID3Parser\ID3Parser;
|
||||
|
||||
class Mp3audio {
|
||||
|
||||
function Match($type) {
|
||||
return(($type === 'audio/mpeg') ? true : false );
|
||||
}
|
||||
|
||||
function Thumb($attach,$preview_style,$height = 300, $width = 300) {
|
||||
$p = new ID3Parser();
|
||||
|
||||
$id = $p->analyze(dbunescbin($attach['content']));
|
||||
|
||||
$photo = isset($id['id3v2']['APIC'][0]['data']) ? $id['id3v2']['APIC'][0]['data'] : null;
|
||||
if(is_null($photo) && isset($id['id3v2']['PIC'][0]['data'])) {
|
||||
$photo = $id['id3v2']['PIC'][0]['data'];
|
||||
}
|
||||
|
||||
if($photo) {
|
||||
$image = imagecreatefromstring($photo);
|
||||
$dest = imagecreatetruecolor( $width, $height );
|
||||
$srcwidth = imagesx($image);
|
||||
$srcheight = imagesy($image);
|
||||
|
||||
imagealphablending($dest, false);
|
||||
imagesavealpha($dest, true);
|
||||
imagecopyresampled($dest, $image, 0, 0, 0, 0, $width, $height, $srcwidth, $srcheight);
|
||||
imagedestroy($image);
|
||||
imagejpeg($dest,dbunescbin($attach['content']) . '.thumb');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
49
Zotlabs/Thumbs/Text.php
Normal file
49
Zotlabs/Thumbs/Text.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace Zotlabs\Thumbs;
|
||||
|
||||
|
||||
class Text {
|
||||
|
||||
function MatchDefault($type) {
|
||||
return(($type === 'text') ? true : false );
|
||||
}
|
||||
|
||||
function Thumb($attach,$preview_style,$height = 300, $width = 300) {
|
||||
|
||||
$stream = @fopen(dbunescbin($attach['content']),'rb');
|
||||
if($stream) {
|
||||
$content = trim(stream_get_contents($stream,4096));
|
||||
$content = str_replace("\r",'',$content);
|
||||
$content_a = explode("\n",$content);
|
||||
}
|
||||
if($content_a) {
|
||||
$fsize = 4;
|
||||
$lsize = 8;
|
||||
$image = imagecreate($width,$height);
|
||||
imagecolorallocate($image,255,255,255);
|
||||
$colour = imagecolorallocate($image,0,0,0);
|
||||
$border = imagecolorallocate($image,208,208,208);
|
||||
|
||||
$x1 = 0;
|
||||
$y1 = 0;
|
||||
$x2 = ImageSX($image) - 1;
|
||||
$y2 = ImageSY($image) - 1;
|
||||
|
||||
for($i = 0; $i < 2; $i++) {
|
||||
ImageRectangle($image, $x1++, $y1++, $x2--, $y2--, $border);
|
||||
}
|
||||
|
||||
foreach($content_a as $l => $t) {
|
||||
$l = $l + 1;
|
||||
$x = 3;
|
||||
$y = ($l * $lsize) + 3 - $fsize;
|
||||
imagestring($image,1,$x,$y,$t,$colour);
|
||||
if(($l * $lsize) >= $height) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
imagejpeg($image,dbunescbin($attach['content']) . '.thumb');
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
function hqLiveUpdate(notify_id, b64mid) {
|
||||
function hqLiveUpdate(notify_id) {
|
||||
|
||||
if(typeof profile_uid === 'undefined') profile_uid = false; /* Should probably be unified with channelId defined in head.tpl */
|
||||
if((src === null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
|
||||
@ -65,7 +65,7 @@ function hqLiveUpdate(notify_id, b64mid) {
|
||||
// else data was valid - reset the recursion counter
|
||||
liveRecurse = 0;
|
||||
|
||||
if(notify_id !== 'undefined') {
|
||||
if(notify_id !== 'undefined') {
|
||||
$.post(
|
||||
"hq",
|
||||
{
|
||||
|
@ -105,9 +105,6 @@ a,
|
||||
color: $link_colour;
|
||||
}
|
||||
|
||||
.cloud-icon.tiles i {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
a:hover,
|
||||
a:focus,
|
||||
@ -1735,13 +1732,23 @@ dl.bb-dl > dd > li {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.cloud-icon-container {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border: 1px solid #eee;
|
||||
border-radius: $radius;
|
||||
}
|
||||
|
||||
.cloud-icon i {
|
||||
font-size: 48px;
|
||||
font-size: 32px;
|
||||
color: #aaa;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.cloud-icon img {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: $radius;
|
||||
}
|
||||
|
||||
.cloud-title {
|
||||
|
@ -4,7 +4,7 @@
|
||||
{{if $parentpath}}
|
||||
<div class="cloud-container" >
|
||||
<div class="cloud-icon tiles"><a href="{{$parentpath.path}}">
|
||||
<i class="fa fa-fw fa-level-up" ></i>
|
||||
<div class="cloud-icon-container"><i class="fa fa-fw fa-level-up" ></i></div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="cloud-title"><a href="{{$parentpath.path}}">..</a>
|
||||
@ -18,7 +18,7 @@
|
||||
{{if $item.photo_icon}}
|
||||
<img src="{{$item.photo_icon}}" title="{{$item.type}}" >
|
||||
{{else}}
|
||||
<i class="fa fa-fw {{$item.iconFromType}}" title="{{$item.type}}"></i>
|
||||
<div class="cloud-icon-container"><i class="fa fa-fw {{$item.iconFromType}}" title="{{$item.type}}"></i></div>
|
||||
{{/if}}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -1,5 +1,6 @@
|
||||
<script>
|
||||
var notifications_parent;
|
||||
|
||||
$(document).ready(function() {
|
||||
notifications_parent = $('#notifications_wrapper')[0].parentElement.id;
|
||||
$('.notifications-btn').click(function() {
|
||||
@ -13,6 +14,11 @@
|
||||
$('#navbar-collapse-2').removeClass('show');
|
||||
}
|
||||
});
|
||||
|
||||
window.onpopstate = function(e) {
|
||||
if(e.state !== null)
|
||||
getData(e.state.b64mid, '');
|
||||
};
|
||||
});
|
||||
|
||||
{{if $module == 'display' || $module == 'hq'}}
|
||||
@ -20,8 +26,14 @@
|
||||
var b64mid = $(this).data('b64mid');
|
||||
var notify_id = $(this).data('notify_id');
|
||||
var path = $(this)[0].pathname.substr(1,7);
|
||||
var stateObj = { b64mid: b64mid };
|
||||
|
||||
console.log(path);
|
||||
{{if $module == 'display'}}
|
||||
history.pushState(stateObj, '', 'display/' + b64mid);
|
||||
{{/if}}
|
||||
{{if $module == 'hq'}}
|
||||
history.pushState(stateObj, '', 'hq/' + b64mid);
|
||||
{{/if}}
|
||||
|
||||
{{if $module == 'hq'}}
|
||||
if(b64mid !== 'undefined' && path !== 'pubstre') {
|
||||
@ -31,25 +43,29 @@
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
$('.thread-wrapper').remove();
|
||||
|
||||
if(! page_load)
|
||||
if(! page_load) {
|
||||
$(this).fadeOut();
|
||||
|
||||
bParam_mid = b64mid;
|
||||
mode = 'replace';
|
||||
page_load = true;
|
||||
{{if $module == 'hq'}}
|
||||
hqLiveUpdate(notify_id);
|
||||
{{else}}
|
||||
liveUpdate();
|
||||
{{/if}}
|
||||
getData(b64mid, notify_id);
|
||||
}
|
||||
|
||||
if($('#notifications_wrapper').hasClass('fs'))
|
||||
$('#notifications_wrapper').prependTo('#' + notifications_parent).removeClass('fs');
|
||||
}
|
||||
});
|
||||
{{/if}}
|
||||
|
||||
function getData(b64mid, notify_id) {
|
||||
$('.thread-wrapper').remove();
|
||||
bParam_mid = b64mid;
|
||||
mode = 'replace';
|
||||
page_load = true;
|
||||
{{if $module == 'hq'}}
|
||||
hqLiveUpdate(notify_id);
|
||||
{{/if}}
|
||||
{{if $module == 'display'}}
|
||||
liveUpdate();
|
||||
{{/if}}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user