aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Zotlabs/Lib/Activity.php7
-rw-r--r--Zotlabs/Lib/Libzot.php1
-rw-r--r--Zotlabs/Module/Search.php10
-rw-r--r--include/photos.php91
-rw-r--r--include/text.php36
-rw-r--r--view/js/mod_photos.js15
-rw-r--r--view/tpl/jot-header.tpl6
-rw-r--r--view/tpl/photo_view.tpl2
8 files changed, 115 insertions, 53 deletions
diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php
index 3c1b140a0..2b723bb57 100644
--- a/Zotlabs/Lib/Activity.php
+++ b/Zotlabs/Lib/Activity.php
@@ -42,9 +42,6 @@ class Activity {
if ($x['type'] === ACTIVITY_OBJ_EVENT) {
return self::fetch_event($x);
}
- if ($x['type'] === ACTIVITY_OBJ_PHOTO) {
- return self::fetch_image($x);
- }
call_hooks('encode_object', $x);
}
@@ -194,6 +191,7 @@ class Activity {
}
static function fetch_image($x) {
+
$ret = [
'type' => 'Image',
'id' => $x['id'],
@@ -2264,7 +2262,6 @@ class Activity {
$s['app'] = escape_tags($generator['name']);
}
-
if (!$response_activity) {
$a = self::decode_taxonomy($act->obj);
if ($a) {
@@ -2399,7 +2396,7 @@ class Activity {
}
- if ($act->obj['type'] === 'Image') {
+ if ($act->obj['type'] === 'Image' && strpos($s['body'],'zrl=') === false) {
$ptr = null;
diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php
index d5768cc84..ae8c725d7 100644
--- a/Zotlabs/Lib/Libzot.php
+++ b/Zotlabs/Lib/Libzot.php
@@ -1142,6 +1142,7 @@ class Libzot {
}
+
$deliveries = null;
if (array_key_exists('recipients', $env) && count($env['recipients'])) {
diff --git a/Zotlabs/Module/Search.php b/Zotlabs/Module/Search.php
index e3f2e1533..274b02321 100644
--- a/Zotlabs/Module/Search.php
+++ b/Zotlabs/Module/Search.php
@@ -29,7 +29,7 @@ class Search extends Controller {
require_once('include/conversation.php');
require_once('include/items.php');
require_once('include/security.php');
-
+
$format = (($_REQUEST['format']) ? $_REQUEST['format'] : '');
if ($format !== '') {
@@ -38,10 +38,10 @@ class Search extends Controller {
$observer = App::get_observer();
$observer_hash = (($observer) ? $observer['xchan_hash'] : '');
-
- $o = '<div class="generic-content-wrapper-styled">' . "\r\n";
-
- $o .= '<h3>' . t('Search') . '</h3>';
+
+ $o = '<div class="generic-content-wrapper-styled">' . "\r\n";
+
+ $o .= '<h2>' . t('Search') . '</h2>';
if (x(App::$data, 'search'))
$search = trim(App::$data['search']);
diff --git a/include/photos.php b/include/photos.php
index 11dd07586..a783875bb 100644
--- a/include/photos.php
+++ b/include/photos.php
@@ -4,6 +4,9 @@
* @brief Functions related to photo handling.
*/
+use Zotlabs\Lib\Activity;
+
+
require_once('include/permissions.php');
require_once('include/items.php');
require_once('include/photo/photo_driver.php');
@@ -259,7 +262,7 @@ function photo_upload($channel, $observer, $args) {
$link = array();
$r0 = $ph->save($p);
- $link[0] = array(
+ $url[0] = array(
'rel' => 'alternate',
'type' => $type,
'href' => z_root() . '/photo/' . $photo_hash . '-0.' . $ph->getExt(),
@@ -278,7 +281,7 @@ function photo_upload($channel, $observer, $args) {
$ph->scaleImage(1024);
$r1 = $ph->storeThumbnail($p, PHOTO_RES_1024);
- $link[1] = array(
+ $url[1] = array(
'rel' => 'alternate',
'type' => $type,
'href' => z_root() . '/photo/' . $photo_hash . '-1.' . $ph->getExt(),
@@ -292,7 +295,7 @@ function photo_upload($channel, $observer, $args) {
$ph->scaleImage(640);
$r2 = $ph->storeThumbnail($p, PHOTO_RES_640);
- $link[2] = array(
+ $url[2] = array(
'rel' => 'alternate',
'type' => $type,
'href' => z_root() . '/photo/' . $photo_hash . '-2.' . $ph->getExt(),
@@ -306,7 +309,7 @@ function photo_upload($channel, $observer, $args) {
$ph->scaleImage(320);
$r3 = $ph->storeThumbnail($p, PHOTO_RES_320);
- $link[3] = array(
+ $url[3] = array(
'rel' => 'alternate',
'type' => $type,
'href' => z_root() . '/photo/' . $photo_hash . '-3.' . $ph->getExt(),
@@ -353,7 +356,7 @@ function photo_upload($channel, $observer, $args) {
$large_photos = feature_enabled($channel['channel_id'], 'large_photos');
- linkify_tags($args['body'], $channel_id);
+ $found_tags = linkify_tags($args['body'], $channel_id);
if($large_photos) {
$scale = 1;
@@ -382,22 +385,62 @@ function photo_upload($channel, $observer, $args) {
. $tag . z_root() . "/photo/{$photo_hash}-{$scale}." . $ph->getExt() . '[/zmg]'
. '[/zrl]';
- // Create item object
- $object = array(
- 'type' => ACTIVITY_OBJ_PHOTO,
- 'title' => $title,
- 'created' => $p['created'],
- 'edited' => $p['edited'],
- 'id' => z_root() . '/item/' . $photo_hash,
- 'link' => $link,
- 'body' => $summary
- );
+ $url[] = [
+ 'type' => 'Link',
+ 'mediaType' => 'text/html',
+ 'href' => z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash
+ ];
+
+ $post_tags = [];
+
+ if($found_tags) {
+ foreach($found_tags as $result) {
+ $success = $result['success'];
+ if($success['replaced']) {
+ $post_tags[] = array(
+ 'uid' => $channel['channel_id'],
+ 'ttype' => $success['termtype'],
+ 'otype' => TERM_OBJ_POST,
+ 'term' => $success['term'],
+ 'url' => $success['url']
+ );
+ }
+ }
+ }
- $target = array(
- 'type' => ACTIVITY_OBJ_ALBUM,
- 'title' => (($album) ? $album : '/'),
- 'id' => z_root() . '/photos/' . $channel['channel_address'] . '/album/' . bin2hex($album)
- );
+ //// Create item object
+ $object = [
+ 'type' => 'Image',
+ 'name' => $title,
+ 'summary' => $p['description'],
+ 'published' => datetime_convert('UTC','UTC',$p['created'],ATOM_TIME),
+ 'updated' => datetime_convert('UTC','UTC',$p['edited'],ATOM_TIME),
+ // This is a placeholder and will get over-ridden by the item mid, which is critical for sharing as a conversational item over activitypub
+ 'id' => z_root() . '/photo/' . $photo_hash,
+ 'url' => $url,
+ 'source' => [ 'content' => $summary, 'mediaType' => 'text/bbcode' ],
+ 'content' => bbcode($summary)
+ ];
+
+ if ($post_tags) {
+ $object['tag'] = Activity::encode_taxonomy(['term' => $post_tags]);
+ }
+
+ $public = (($ac['allow_cid'] || $ac['allow_gid'] || $ac['deny_cid'] || $ac['deny_gid']) ? false : true);
+
+ if ($public) {
+ $object['to'] = [ ACTIVITY_PUBLIC_INBOX ];
+ $object['cc'] = [ z_root() . '/followers/' . $channel['channel_address'] ];
+ }
+ else {
+ $object['to'] = Activity::map_acl(array_merge($ac, ['item_private' => 1 - intval($public) ]));
+ }
+
+ $target = [
+ 'type' => 'orderedCollection',
+ 'name' => ((strlen($album)) ? $album : '/'),
+ 'id' => z_root() . '/album/' . $channel['channel_address'] . ((isset($args['folder'])) ? '/' . $args['folder'] : EMPTY_STR)
+ ];
// Create item container
if($args['item']) {
@@ -415,7 +458,9 @@ function photo_upload($channel, $observer, $args) {
$item['tgt_type'] = ACTIVITY_OBJ_ALBUM;
$item['target'] = json_encode($target);
-
+ if ($post_tags) {
+ $arr['term'] = $post_tags;
+ }
$force = true;
}
$r = q("select id, edited from item where mid = '%s' and uid = %d limit 1",
@@ -469,6 +514,10 @@ function photo_upload($channel, $observer, $args) {
'body' => $summary
];
+ if ($post_tags) {
+ $arr['term'] = $post_tags;
+ }
+
$arr['plink'] = $mid;
if($lat && $lon)
diff --git a/include/text.php b/include/text.php
index a0c2689af..c0f8c0fb1 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1714,19 +1714,33 @@ function prepare_body(&$item,$attach = false,$opts = false) {
$photo = '';
$is_photo = ((($item['verb'] === ACTIVITY_POST) && ($item['obj_type'] === ACTIVITY_OBJ_PHOTO)) ? true : false);
- if($is_photo) {
-
+ if ($is_photo) {
$object = json_decode($item['obj'],true);
+ $ptr = null;
+ if (array_key_exists('url',$object) && is_array($object['url'])) {
+ if (array_key_exists(0,$object['url'])) {
+ foreach ($object['url'] as $link) {
+ if(array_key_exists('width',$link) && $link['width'] >= 640 && $link['width'] <= 1024) {
+ $ptr = $link;
+ }
+ }
+ if (! $ptr) {
+ $ptr = $object['url'][0];
+ }
+ }
+ else {
+ $ptr = $object['url'];
+ }
- // if original photo width is <= 640px prepend it to item body
- if($object['link'][0]['width'] && $object['link'][0]['width'] <= 640) {
- $s .= '<div class="inline-photo-item-wrapper"><a href="' . zid(rawurldecode($object['id'])) . '" target="_blank" rel="nofollow noopener" ><img class="inline-photo-item" style="max-width:' . $object['link'][0]['width'] . 'px; width:100%; height:auto;" src="' . zid(rawurldecode($object['link'][0]['href'])) . '"></a></div>' . $s;
- }
-
- // if original photo width is > 640px make it a cover photo
- if($object['link'][0]['width'] && $object['link'][0]['width'] > 640) {
- $scale = ((($object['link'][1]['width'] == 1024) || ($object['link'][1]['height'] == 1024)) ? 1 : 0);
- $photo = '<a href="' . zid(rawurldecode($object['id'])) . '" target="_blank" rel="nofollow noopener"><img style="max-width:' . $object['link'][$scale]['width'] . 'px; width:100%; height:auto;" src="' . zid(rawurldecode($object['link'][$scale]['href'])) . '"></a>';
+ // if original photo width is > 640px make it a cover photo
+ if ($ptr) {
+ if (array_key_exists('width',$ptr) && $ptr['width'] > 640) {
+ $photo = '<a href="' . zid(rawurldecode($object['id'])) . '" target="_blank" rel="nofollow noopener"><img style="max-width:' . $ptr['width'] . 'px; width:100%; height:auto;" src="' . zid(rawurldecode($ptr['href'])) . '"></a>';
+ }
+ else {
+ $item['body'] = '[zmg]' . $ptr['href'] . '[/zmg]' . "\n\n" . $item['body'];
+ }
+ }
}
}
diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js
index af675e31c..41b8ed560 100644
--- a/view/js/mod_photos.js
+++ b/view/js/mod_photos.js
@@ -8,11 +8,12 @@ $(document).ready(function() {
UploadInit();
}
- $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'a', false, function(data) {
- $("#photo-edit-newtag").val('@' + data.name);
- });
-
+ //$("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'a', false, function(data) {
+ //$("#photo-edit-newtag").val('@' + data.name);
+ //});
+
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1");
+ $('textarea').editor_autocomplete(baseurl+"/acl");
$('textarea').bbco_autocomplete('bbcode');
showHideBodyTextarea();
@@ -70,12 +71,12 @@ function UploadInit() {
progress: function(e,data) {
- // there will only be one file, the one we are looking for
+ // 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
+ // 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) + '%');
@@ -283,7 +284,7 @@ function UploadFile(file, idx) {
$('#upload-progress-' + idx).html('<span style="color: red;">ERROR</span>');
});
- // POST to the entire cloud path
+ // POST to the entire cloud path
xhr.open('post', $('#photos-upload-form').attr( 'action' ), true);
var formfields = $("#photos-upload-form").serializeArray();
diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl
index 2669f80cf..8da7b429d 100644
--- a/view/tpl/jot-header.tpl
+++ b/view/tpl/jot-header.tpl
@@ -321,10 +321,8 @@ var activeCommentText = '';
postSaveChanges('clean');
{{if $popup}}
- return;
- {{/if}}
-
- {{if $reset}}
+ $("#profile-jot-text").focus();
+ {{else if $reset}}
$(".jothidden").hide();
$("#profile-jot-text").removeClass('jot-expanded');
$("#profile-jot-tools").addClass('d-none');
diff --git a/view/tpl/photo_view.tpl b/view/tpl/photo_view.tpl
index 6d566cab9..7698fb437 100644
--- a/view/tpl/photo_view.tpl
+++ b/view/tpl/photo_view.tpl
@@ -66,10 +66,12 @@
<label id="photo-edit-caption-label" for="photo-edit-caption">{{$edit.capt_label}}</label>
<input id="photo-edit-caption" class="form-control" type="text" name="desc" value="{{$edit.caption}}" />
</div>
+ {{*
<div class="form-group">
<label id="photo-edit-tags-label" for="photo-edit-newtag">{{$edit.tag_label}}</label>
<input name="newtag" id="photo-edit-newtag" class="form-control" title="{{$edit.help_tags}}" type="text" />
</div>
+ *}}
<div class="form-group">
{{include file="field_select.tpl" field=$edit.album_select}}
</div>