From 8a8689c19139f075145001b46a15dea56ff21c77 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sat, 2 Dec 2017 17:31:18 -0800 Subject: [PATCH 01/12] remove warning for large files on cloud upload --- Zotlabs/Storage/Browser.php | 3 --- view/tpl/cloud_actionspanel.tpl | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php index dd3067cf8..26abf27b5 100644 --- a/Zotlabs/Storage/Browser.php +++ b/Zotlabs/Storage/Browser.php @@ -373,8 +373,6 @@ class Browser extends DAV\Browser\Plugin { if(strpos($path,$special) === 0) $path = trim(substr($path,$count),'/'); - $info = t('Please use DAV to upload large (video, audio) files.
See Cloud Desktop Clients'); - $output .= replace_macros(get_markup_template('cloud_actionspanel.tpl'), array( '$folder_header' => t('Create new folder'), @@ -382,7 +380,6 @@ class Browser extends DAV\Browser\Plugin { '$upload_header' => t('Upload file'), '$upload_submit' => t('Upload'), '$quota' => $quota, - '$info' => $info, '$channick' => $this->auth->owner_nick, '$aclselect' => $aclselect, '$allow_cid' => acl2json($channel_acl['allow_cid']), diff --git a/view/tpl/cloud_actionspanel.tpl b/view/tpl/cloud_actionspanel.tpl index 6b876d2ac..292452cca 100644 --- a/view/tpl/cloud_actionspanel.tpl +++ b/view/tpl/cloud_actionspanel.tpl @@ -20,7 +20,7 @@
- {{if $quota.limit || $quota.used}}{{/if}} + {{if $quota.limit || $quota.used}}{{/if}}
From dae0107dd0e1caa460866b5debdc6de912bfd819 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 3 Dec 2017 12:31:41 +0100 Subject: [PATCH 02/12] fix some pubstream on/off weirdness --- Zotlabs/Lib/Apps.php | 2 +- Zotlabs/Module/Admin/Site.php | 1 + Zotlabs/Module/Ping.php | 2 +- Zotlabs/Module/Settings/Channel.php | 6 ++++-- include/nav.php | 5 +++++ 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 9271cee85..457b85b62 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -352,7 +352,7 @@ class Apps { break; default: if($config) - $unset = ((get_config('system', $require[0]) == $require[1]) ? false : true); + $unset = ((get_config('system', $require[0]) === $require[1]) ? false : true); else $unset = ((local_channel() && feature_enabled(local_channel(),$require)) ? false : true); if($unset) diff --git a/Zotlabs/Module/Admin/Site.php b/Zotlabs/Module/Admin/Site.php index eda97b591..a9db1ad55 100644 --- a/Zotlabs/Module/Admin/Site.php +++ b/Zotlabs/Module/Admin/Site.php @@ -251,6 +251,7 @@ class Site { ); $discover_tab = get_config('system','disable_discover_tab'); + // $disable public streams by default if($discover_tab === false) $discover_tab = 1; diff --git a/Zotlabs/Module/Ping.php b/Zotlabs/Module/Ping.php index 84f9d2a21..c1bce0d51 100644 --- a/Zotlabs/Module/Ping.php +++ b/Zotlabs/Module/Ping.php @@ -140,7 +140,7 @@ class Ping extends \Zotlabs\Web\Controller { db_utcnow(), db_quoteinterval('3 MINUTE') ); - $discover_tab_on = ((get_config('system','disable_discover_tab') != 1) ? true : false); + $discover_tab_on = ((get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false) ? false : true); $notify_pubs = ((local_channel()) ? ($vnotify & VNOTIFY_PUBS) && $discover_tab_on : $discover_tab_on); if($notify_pubs) { diff --git a/Zotlabs/Module/Settings/Channel.php b/Zotlabs/Module/Settings/Channel.php index db0f79060..5e9e88a6d 100644 --- a/Zotlabs/Module/Settings/Channel.php +++ b/Zotlabs/Module/Settings/Channel.php @@ -206,7 +206,7 @@ class Channel { $vnotify += intval($_POST['vnotify11']); if(x($_POST,'vnotify12')) $vnotify += intval($_POST['vnotify12']); - if(x($_POST,'vnotify13') && (get_config('system', 'disable_discover_tab') != 1)) + if(x($_POST,'vnotify13')) $vnotify += intval($_POST['vnotify13']); $always_show_in_notices = x($_POST,'always_show_in_notices') ? 1 : 0; @@ -481,6 +481,8 @@ class Channel { $plugin = [ 'basic' => '', 'security' => '', 'notify' => '', 'misc' => '' ]; call_hooks('channel_settings',$plugin); + $disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false; + $o .= replace_macros($stpl,array( '$ptitle' => t('Channel Settings'), @@ -570,7 +572,7 @@ class Channel { '$vnotify10' => array('vnotify10', t('New connections'), ($vnotify & VNOTIFY_INTRO), VNOTIFY_INTRO, t('Recommended'), $yes_no), '$vnotify11' => array('vnotify11', t('System Registrations'), ($vnotify & VNOTIFY_REGISTER), VNOTIFY_REGISTER, '', $yes_no), '$vnotify12' => array('vnotify12', t('Unseen shared files'), ($vnotify & VNOTIFY_FILES), VNOTIFY_FILES, '', $yes_no), - '$vnotify13' => ((get_config('system', 'disable_discover_tab') != 1) ? array('vnotify13', t('Unseen public activity'), ($vnotify & VNOTIFY_PUBS), VNOTIFY_PUBS, '', $yes_no) : array()), + '$vnotify13' => (($disable_discover_tab) ? array() : array('vnotify13', t('Unseen public activity'), ($vnotify & VNOTIFY_PUBS), VNOTIFY_PUBS, '', $yes_no)), '$mailhost' => [ 'mailhost', t('Email notification hub (hostname)'), get_pconfig(local_channel(),'system','email_notify_host',\App::get_hostname()), sprintf( t('If your channel is mirrored to multiple hubs, set this to your preferred location. This will prevent duplicate email notifications. Example: %s'),\App::get_hostname()) ], '$always_show_in_notices' => array('always_show_in_notices', t('Also show new wall posts, private messages and connections under Notices'), $always_show_in_notices, 1, '', $yes_no), diff --git a/include/nav.php b/include/nav.php index 8ab401c76..66c4c1556 100644 --- a/include/nav.php +++ b/include/nav.php @@ -73,6 +73,11 @@ EOT; // nav links: array of array('href', 'text', 'extra css classes', 'title') $nav = []; + $disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false; + + if(! $disable_discover_tab) + $nav['pubs'] = true; + /** * Display login or logout */ From ba547c22571d90bc8757e45643463d53d9cae2e6 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 3 Dec 2017 17:22:18 -0800 Subject: [PATCH 03/12] chunked uploads for photos page --- Zotlabs/Module/Photos.php | 52 ++++++++++++++++++++- view/js/mod_photos.js | 93 ++++++++++++++++++++++++++++++++------ view/tpl/photos_upload.tpl | 11 +++-- 3 files changed, 136 insertions(+), 20 deletions(-) diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index caef45d98..279c393aa 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -465,6 +465,51 @@ class Photos extends \Zotlabs\Web\Controller { $_REQUEST['group_deny'] = expand_acl($channel['channel_deny_gid']); } + + $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($result); + } + 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']) { @@ -557,8 +602,11 @@ class Photos extends \Zotlabs\Web\Controller { nav_set_selected('Photos'); - $o = ""; - + $o = ' + + '; + + $o .= "\r\n"; diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index 267b51531..bf926c692 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -27,29 +27,93 @@ function showHideBodyTextarea() { // initialize function UploadInit() { + var nickname = $('#invisible-photos-file-upload').data('nickname'); var fileselect = $("#photos-upload-choose"); var filedrag = $("#photos-upload-form"); var submit = $("#dbtn-submit"); + var count = 1; + + $('#invisible-photos-file-upload').fileupload({ + url: 'photos/' + nickname, + dataType: 'json', + dropZone: filedrag, + maxChunkSize: 4 * 1024 * 1024, + + add: function(e,data) { + $(data.files).each( function() { this.count = ++ count; prepareHtml(this); }); + + var allow_cid = ($('#photos-upload-form').data('allow_cid') || []); + var allow_gid = ($('#photos-upload-form').data('allow_gid') || []); + var deny_cid = ($('#photos-upload-form').data('deny_cid') || []); + var deny_gid = ($('#photos-upload-form').data('deny_gid') || []); + + $('.acl-field').remove(); + + $(allow_gid).each(function(i,v) { + $('#photos-upload-form').append(""); + }); + $(allow_cid).each(function(i,v) { + $('#photos-upload-form').append(""); + }); + $(deny_gid).each(function(i,v) { + $('#photos-upload-form').append(""); + }); + $(deny_cid).each(function(i,v) { + $('#photos-upload-form').append(""); + }); + + data.formData = $('#photos-upload-form').serializeArray(); + + data.submit(); + }, + + progress: function(e,data) { + + // there will only be one file, the one we are looking for + + $(data.files).each( function() { + var idx = this.count; + + // Dynamically update the percentage complete displayed in the file upload list + $('#upload-progress-' + idx).html(Math.round(data.loaded / data.total * 100) + '%'); + $('#upload-progress-bar-' + idx).css('background-size', Math.round(data.loaded / data.total * 100) + '%'); + + }); + + + }, + + + stop: function(e,data) { + window.location.href = window.location.href; + } + + }); + + $('#dbtn-submit').click(function(event) { event.preventDefault(); $('#invisible-photos-file-upload').trigger('click'); return false;}); + + + // is XHR2 available? - var xhr = new XMLHttpRequest(); - if (xhr.upload) { +// var xhr = new XMLHttpRequest(); +// if (xhr.upload) { // file select - fileselect.attr("multiple", 'multiple'); - fileselect.on("change", UploadFileSelectHandler); +// fileselect.attr("multiple", 'multiple'); +// fileselect.on("change", UploadFileSelectHandler); // file submit - submit.on("click", fileselect, UploadFileSelectHandler); +// submit.on("click", fileselect, UploadFileSelectHandler); // file drop - filedrag.on("dragover", DragDropUploadFileHover); - filedrag.on("dragleave", DragDropUploadFileHover); - filedrag.on("drop", DragDropUploadFileSelectHandler); - } +// filedrag.on("dragover", DragDropUploadFileHover); +// filedrag.on("dragleave", DragDropUploadFileHover); +// filedrag.on("drop", DragDropUploadFileSelectHandler); +// } - window.filesToUpload = 0; - window.fileUploadsCompleted = 0; +// window.filesToUpload = 0; +// window.fileUploadsCompleted = 0; } // file drag hover @@ -98,8 +162,11 @@ function UploadFileSelectHandler(e) { } } -function prepareHtml(f, i) { - var num = i - 1; +function prepareHtml(f) { + + var num = f.count - 1; + var i = f.count; + $('#upload-index #new-upload-progress-bar-' + num.toString()).after( '' + '' + diff --git a/view/tpl/photos_upload.tpl b/view/tpl/photos_upload.tpl index 46b1d3fd0..ea173049b 100755 --- a/view/tpl/photos_upload.tpl +++ b/view/tpl/photos_upload.tpl @@ -1,6 +1,7 @@
+
- +
@@ -15,9 +16,9 @@
{{if $default}} -
+ {{include file="field_input.tpl" field=$caption}} {{include file="field_checkbox.tpl" field=$visible}}
@@ -30,7 +31,7 @@ {{/if}} - +
@@ -57,7 +58,7 @@
- {{* this is needed to append the upload files in the right order *}} + {{* this is needed to append the upload files in the right order *}}
{{$aclselect}}
From 1c32c5fd2ad2185ce2ea53f94edac1de1c178f7b Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 3 Dec 2017 17:25:00 -0800 Subject: [PATCH 04/12] rename button --- Zotlabs/Module/Photos.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index 279c393aa..6aece0ed6 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -704,7 +704,7 @@ class Photos extends \Zotlabs\Web\Controller { '$uploader' => $ret['addon_text'], '$default' => (($ret['default_upload']) ? true : false), '$uploadurl' => $ret['post_url'], - '$submit' => t('Submit') + '$submit' => t('Upload') )); From 7ed80bf44320a9fd2baf9cb949399589c7d88e33 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 3 Dec 2017 17:38:39 -0800 Subject: [PATCH 05/12] js warning - getelementbyid (id doesn't exist) --- view/tpl/photo_album.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/tpl/photo_album.tpl b/view/tpl/photo_album.tpl index 58b843bf0..678e790ac 100755 --- a/view/tpl/photo_album.tpl +++ b/view/tpl/photo_album.tpl @@ -9,7 +9,7 @@ {{/if}} {{if $can_post}} - + {{/if}}
From 1c821640cec383ab3ac02834cd560edd48111c08 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 3 Dec 2017 19:12:55 -0800 Subject: [PATCH 06/12] pagetitle lost importing a pdl element from conversation --- Zotlabs/Module/Impel.php | 2 ++ Zotlabs/Module/Layouts.php | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Impel.php b/Zotlabs/Module/Impel.php index 77f488d26..0c372bd96 100644 --- a/Zotlabs/Module/Impel.php +++ b/Zotlabs/Module/Impel.php @@ -26,6 +26,8 @@ class Impel extends \Zotlabs\Web\Controller { if(! $j) json_return_and_die($ret); + // logger('element: ' . print_r($j,true)); + $channel = \App::get_channel(); $arr = array(); diff --git a/Zotlabs/Module/Layouts.php b/Zotlabs/Module/Layouts.php index 34d754029..19efb37fd 100644 --- a/Zotlabs/Module/Layouts.php +++ b/Zotlabs/Module/Layouts.php @@ -162,12 +162,12 @@ class Layouts extends \Zotlabs\Web\Controller { 'created' => $rr['created'], 'edited' => $rr['edited'], 'mimetype' => $rr['mimetype'], - 'pagetitle' => $rr['sid'], + 'pagetitle' => urldecode($rr['v']), 'mid' => $rr['mid'] ); $pages[$rr['iid']][] = array( 'url' => $rr['iid'], - 'title' => $rr['v'], + 'title' => urldecode($rr['v']), 'descr' => $rr['title'], 'mid' => $rr['mid'], 'created' => $rr['created'], From 91e3c5c34e93004b9641d906c9f512b42f9c4a7a Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 3 Dec 2017 19:30:36 -0800 Subject: [PATCH 07/12] render installable elements as buttons instead of links --- include/bbcode.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index fd476766e..e38473168 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -246,8 +246,8 @@ function bb_parse_element($match) { $j = json_decode(base64url_decode($match[1]),true); if ($j && local_channel()) { - $text = sprintf( t('Install %s element: '), translate_design_element($j['type'])) . $j['pagetitle']; - $o = EOL . '' . $text . '' . EOL; + $text = sprintf( t('Install %1$s element %2$s'), translate_design_element($j['type']), $j['pagetitle']); + $o = EOL . '' . EOL; } else { $text = sprintf( t('This post contains an installable %s element, however you lack permissions to install it on this site.' ), translate_design_element($j['type'])) . $j['pagetitle']; From 11b03ca4d287b85c6094a343e917e2f561cc10ba Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Mon, 4 Dec 2017 08:54:56 +0100 Subject: [PATCH 08/12] mod hq: do not 404 if we have no item --- Zotlabs/Module/Hq.php | 108 +++++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 49 deletions(-) diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php index 6bc65e44e..073b67b92 100644 --- a/Zotlabs/Module/Hq.php +++ b/Zotlabs/Module/Hq.php @@ -53,29 +53,53 @@ class Hq extends \Zotlabs\Web\Controller { $r = q("SELECT mid FROM item WHERE uid = %d AND mid = parent_mid - ORDER BY created DESC - limit 1", + ORDER BY created DESC LIMIT 1", intval(local_channel()) ); - if(!$r[0]['mid']) { - \App::$error = 404; - notice( t('Item not found.') . EOL); - return; + if($r[0]['mid']) { + $item_hash = 'b64.' . base64url_encode($r[0]['mid']); } - - $item_hash = 'b64.' . base64url_encode($r[0]['mid']); } + if($item_hash) { - if(strpos($item_hash,'b64.') === 0) - $decoded = @base64url_decode(substr($item_hash,4)); + if(strpos($item_hash,'b64.') === 0) + $decoded = @base64url_decode(substr($item_hash,4)); - if($decoded) - $item_hash = $decoded; + if($decoded) + $item_hash = $decoded; + + $target_item = null; + + $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 . '%') + ); + + if($r) { + $target_item = $r[0]; + } + + //if the item is to be moderated redirect to /moderate + if($target_item['item_blocked'] == ITEM_MODERATED) { + goaway(z_root() . '/moderate/' . $target_item['id']); + } + + $static = ((array_key_exists('static',$_REQUEST)) ? intval($_REQUEST['static']) : 0); + + $simple_update = (($update) ? " AND item_unseen = 1 " : ''); + + if($update && $_SESSION['loadtime']) + $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; + + if($static && $simple_update) + $simple_update .= " and item_thread_top = 0 and author_xchan = '" . protect_sprintf(get_observer_hash()) . "' "; + + $sys = get_sys_channel(); + $sql_extra = item_permissions_sql($sys['channel_id']); + + } - $updateable = false; - if(! $update) { $channel = \App::get_channel(); @@ -105,52 +129,36 @@ class Hq extends \Zotlabs\Web\Controller { 'bbcode' => true, 'jotnets' => true ]; + + $o = replace_macros(get_markup_template("hq.tpl"), + [ + '$no_messages' => (($target_item) ? false : true), + '$no_messages_label' => t('Welcome to hubzilla!') + ] + ); $o = '
'; $o .= status_editor($a,$x); $o .= '
'; } - - $target_item = null; - $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 . '%') - ); - - if($r) { - $target_item = $r[0]; - } - - //if the item is to be moderated redirect to /moderate - if($target_item['item_blocked'] == ITEM_MODERATED) { - goaway(z_root() . '/moderate/' . $target_item['id']); - } - - $static = ((array_key_exists('static',$_REQUEST)) ? intval($_REQUEST['static']) : 0); - - $simple_update = (($update) ? " AND item_unseen = 1 " : ''); - - if($update && $_SESSION['loadtime']) - $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; - - if($static && $simple_update) - $simple_update .= " and item_thread_top = 0 and author_xchan = '" . protect_sprintf(get_observer_hash()) . "' "; - - $sys = get_sys_channel(); - $sql_extra = item_permissions_sql($sys['channel_id']); - if(! $update && ! $load) { nav_set_selected('HQ'); $static = ((local_channel()) ? channel_manual_conv_update(local_channel()) : 1); - // if the target item is not a post (eg a like) we want to address its thread parent - $mid = ((($target_item['verb'] == ACTIVITY_LIKE) || ($target_item['verb'] == ACTIVITY_DISLIKE)) ? $target_item['thr_parent'] : $target_item['mid']); + if($target_item) { + // if the target item is not a post (eg a like) we want to address its thread parent + $mid = ((($target_item['verb'] == ACTIVITY_LIKE) || ($target_item['verb'] == ACTIVITY_DISLIKE)) ? $target_item['thr_parent'] : $target_item['mid']); - // if we got a decoded hash we must encode it again before handing to javascript - if($decoded) - $mid = 'b64.' . base64url_encode($mid); + // if we got a decoded hash we must encode it again before handing to javascript + if($decoded) + $mid = 'b64.' . base64url_encode($mid); + } + else { + $mid = ''; + } $o .= '
' . "\r\n"; $o .= "