aboutsummaryrefslogtreecommitdiffstats
path: root/Zotlabs
diff options
context:
space:
mode:
Diffstat (limited to 'Zotlabs')
-rw-r--r--Zotlabs/Lib/Apps.php3
-rw-r--r--Zotlabs/Module/Manifest.php52
-rw-r--r--Zotlabs/Module/Poke.php96
-rw-r--r--Zotlabs/Module/Pubstream.php66
-rw-r--r--Zotlabs/Module/Randprof.php10
-rw-r--r--Zotlabs/Module/Rpost.php67
6 files changed, 204 insertions, 90 deletions
diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php
index ba854197f..3c09adaa5 100644
--- a/Zotlabs/Lib/Apps.php
+++ b/Zotlabs/Lib/Apps.php
@@ -78,7 +78,8 @@ class Apps {
'Search',
'Help',
'Profile Photo',
- 'HQ'
+ 'HQ',
+ 'Post'
]);
/**
diff --git a/Zotlabs/Module/Manifest.php b/Zotlabs/Module/Manifest.php
new file mode 100644
index 000000000..30a091172
--- /dev/null
+++ b/Zotlabs/Module/Manifest.php
@@ -0,0 +1,52 @@
+<?php
+namespace Zotlabs\Module;
+
+use App;
+use Zotlabs\Web\Controller;
+use Zotlabs\Lib\System;
+
+class Manifest extends Controller {
+
+ function init() {
+
+ $ret = [
+ 'name' => ucfirst(System::get_platform_name()),
+ 'short_name' => ucfirst(System::get_platform_name()),
+ 'icons' => [
+ [ 'src' => '/images/app/hz-72.png', 'sizes' => '72x72', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz-96.png', 'sizes' => '96x96', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz-128.png', 'sizes' => '128x128', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz-144.png', 'sizes' => '144x144', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz-152.png', 'sizes' => '152x152', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz-192.png', 'sizes' => '192x192', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz-348.png', 'sizes' => '384x384', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz-512.png', 'sizes' => '512x512', 'type' => 'image/png' ],
+ [ 'src' => '/images/app/hz.svg', 'sizes' => '64x64', 'type' => 'image/xml+svg' ]
+ ],
+ 'scope' => '/',
+ 'start_url' => z_root(),
+ 'display' => 'standalone',
+ 'orientation' => 'any',
+ 'theme_color' => '#343a40',
+ 'background_color' => '#ccccc',
+ 'share_target' => [
+ 'action' => '/rpost',
+ 'method' => 'POST',
+ 'enctype' => 'multipart/form-data',
+ 'params' => [
+ 'title' => 'title',
+ 'text' => 'body',
+ 'url' => 'url',
+ 'files' => [
+ [ 'name' => 'userfile',
+ 'accept' => [ 'image/*', 'audio/*', 'video/*', 'text/*', 'application/*' ]
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ json_return_and_die($ret,'application/manifest+json');
+ }
+
+}
diff --git a/Zotlabs/Module/Poke.php b/Zotlabs/Module/Poke.php
index 1f1edfa18..d60a7f426 100644
--- a/Zotlabs/Module/Poke.php
+++ b/Zotlabs/Module/Poke.php
@@ -9,11 +9,11 @@ use Zotlabs\Web\Controller;
*
* Poke, prod, finger, or otherwise do unspeakable things to somebody - who must be a connection in your address book
* This function can be invoked with the required arguments (verb and cid and private and possibly parent) silently via ajax or
- * other web request. You must be logged in and connected to a channel.
+ * other web request. You must be logged in and connected to a channel.
* If the required arguments aren't present, we'll display a simple form to choose a recipient and a verb.
* parent is a special argument which let's you attach this activity as a comment to an existing conversation, which
* may have started with somebody else poking (etc.) somebody, but this isn't necessary. This can be used in the adult
- * plugin version to have entire conversations where Alice poked Bob, Bob fingered Alice, Alice hugged Bob, etc.
+ * plugin version to have entire conversations where Alice poked Bob, Bob fingered Alice, Alice hugged Bob, etc.
*
* private creates a private conversation with the recipient. Otherwise your channel's default post privacy is used.
*
@@ -25,41 +25,41 @@ require_once('include/items.php');
class Poke extends Controller {
function init() {
-
+
if(! local_channel())
return;
if(! Apps::system_app_installed(local_channel(), 'Poke')) {
return;
}
-
+
$uid = local_channel();
$channel = App::get_channel();
-
+
$verb = notags(trim($_REQUEST['verb']));
-
- if(! $verb)
+
+ if(! $verb)
return;
-
+
$verbs = get_poke_verbs();
-
+
if(! array_key_exists($verb,$verbs))
return;
-
+
$activity = ACTIVITY_POKE . '#' . urlencode($verbs[$verb][0]);
-
+
$contact_id = intval($_REQUEST['cid']);
$xchan = trim($_REQUEST['xchan']);
if(! ($contact_id || $xchan))
return;
-
+
$parent = ((x($_REQUEST,'parent')) ? intval($_REQUEST['parent']) : 0);
-
+
logger('poke: verb ' . $verb . ' contact ' . $contact_id, LOGGER_DEBUG);
-
-
+
+
if($contact_id) {
$r = q("SELECT * FROM abook left join xchan on xchan_hash = abook_xchan where abook_id = %d and abook_channel = %d LIMIT 1",
intval($contact_id),
@@ -71,17 +71,17 @@ class Poke extends Controller {
dbesc($xchan . '%')
);
}
-
+
if(! $r) {
logger('poke: no target.');
return;
}
-
+
$target = $r[0];
$parent_item = null;
-
+
if($parent) {
- $r = q("select mid, item_private, owner_xchan, allow_cid, allow_gid, deny_cid, deny_gid
+ $r = q("select mid, item_private, owner_xchan, allow_cid, allow_gid, deny_cid, deny_gid
from item where id = %d and parent = %d and uid = %d limit 1",
intval($parent),
intval($parent),
@@ -98,18 +98,18 @@ class Poke extends Controller {
}
}
elseif($contact_id) {
-
+
$item_private = ((x($_GET,'private')) ? intval($_GET['private']) : 0);
-
+
$allow_cid = (($item_private) ? '<' . $target['abook_xchan']. '>' : $channel['channel_allow_cid']);
$allow_gid = (($item_private) ? '' : $channel['channel_allow_gid']);
$deny_cid = (($item_private) ? '' : $channel['channel_deny_cid']);
$deny_gid = (($item_private) ? '' : $channel['channel_deny_gid']);
}
-
-
+
+
$arr = array();
-
+
$arr['item_wall'] = 1;
@@ -124,7 +124,7 @@ class Poke extends Controller {
$arr['item_private'] = $item_private;
$arr['obj_type'] = ACTIVITY_OBJ_PERSON;
$arr['body'] = '[zrl=' . $channel['xchan_url'] . ']' . $channel['xchan_name'] . '[/zrl]' . ' ' . t($verbs[$verb][0]) . ' ' . '[zrl=' . $target['xchan_url'] . ']' . $target['xchan_name'] . '[/zrl]';
-
+
$obj = array(
'type' => ACTIVITY_OBJ_PERSON,
'title' => $target['xchan_name'],
@@ -134,25 +134,25 @@ class Poke extends Controller {
array('rel' => 'photo', 'type' => $target['xchan_photo_mimetype'], 'href' => $target['xchan_photo_l'])
),
);
-
+
$arr['obj'] = json_encode($obj);
-
+
$arr['item_origin'] = 1;
$arr['item_wall'] = 1;
$arr['item_unseen'] = 1;
if(! $parent_item)
$item['item_thread_top'] = 1;
-
-
+
+
post_activity_item($arr);
-
+
return;
}
-
-
-
+
+
+
function get() {
-
+
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
return;
@@ -161,19 +161,17 @@ class Poke extends Controller {
if(! Apps::system_app_installed(local_channel(), 'Poke')) {
//Do not display any associated widgets at this point
App::$pdl = '';
-
- $o = '<b>' . t('Poke App') . ' (' . t('Not Installed') . '):</b><br>';
- $o .= t('Poke somebody in your addressbook');
- return $o;
+ $papp = Apps::get_papp('Poke');
+ return Apps::app_render($papp, 'module');
}
nav_set_selected('Poke');
-
+
$name = '';
$id = '';
-
+
if(intval($_REQUEST['c'])) {
- $r = q("select abook_id, xchan_name from abook left join xchan on abook_xchan = xchan_hash
+ $r = q("select abook_id, xchan_name from abook left join xchan on abook_xchan = xchan_hash
where abook_id = %d and abook_channel = %d limit 1",
intval($_REQUEST['c']),
intval(local_channel())
@@ -183,17 +181,17 @@ class Poke extends Controller {
$id = $r[0]['abook_id'];
}
}
-
+
$parent = ((x($_REQUEST,'parent')) ? intval($_REQUEST['parent']) : '0');
-
+
$verbs = get_poke_verbs();
-
+
$shortlist = array();
foreach($verbs as $k => $v)
if($v[1] !== 'NOTRANSLATION')
$shortlist[] = array($k,$v[1]);
-
-
+
+
$poke_basic = get_config('system','poke_basic');
if($poke_basic) {
$title = t('Poke');
@@ -203,7 +201,7 @@ class Poke extends Controller {
$title = t('Poke/Prod');
$desc = t('Poke, prod or do other things to somebody');
}
-
+
$o = replace_macros(get_markup_template('poke_content.tpl'),array(
'$title' => $title,
'$poke_basic' => $poke_basic,
@@ -218,8 +216,8 @@ class Poke extends Controller {
'$name' => $name,
'$id' => $id
));
-
+
return $o;
-
+
}
}
diff --git a/Zotlabs/Module/Pubstream.php b/Zotlabs/Module/Pubstream.php
index 9c63c735d..32023d6cc 100644
--- a/Zotlabs/Module/Pubstream.php
+++ b/Zotlabs/Module/Pubstream.php
@@ -16,10 +16,8 @@ class Pubstream extends \Zotlabs\Web\Controller {
if(! Apps::system_app_installed(local_channel(), 'Public Stream')) {
//Do not display any associated widgets at this point
App::$pdl = '';
-
- $o = '<b>' . t('Public Stream App') . ' (' . t('Not Installed') . '):</b><br>';
- $o .= t('The unmoderated public stream of this hub');
- return $o;
+ $papp = Apps::get_papp('Public Stream');
+ return Apps::app_render($papp, 'module');
}
}
@@ -65,15 +63,15 @@ class Pubstream extends \Zotlabs\Web\Controller {
$o = (($hashtags) ? $title : '');
if(local_channel() && (! $update)) {
-
+
$channel = \App::get_channel();
$channel_acl = array(
- 'allow_cid' => $channel['channel_allow_cid'],
- 'allow_gid' => $channel['channel_allow_gid'],
- 'deny_cid' => $channel['channel_deny_cid'],
+ 'allow_cid' => $channel['channel_allow_cid'],
+ 'allow_gid' => $channel['channel_allow_gid'],
+ 'deny_cid' => $channel['channel_deny_cid'],
'deny_gid' => $channel['channel_deny_gid']
- );
+ );
$x = array(
'is_owner' => true,
@@ -94,12 +92,12 @@ class Pubstream extends \Zotlabs\Web\Controller {
'jotnets' => true,
'reset' => t('Reset form')
);
-
+
$o .= '<div id="jot-popup">';
$o .= status_editor($a,$x,false,'Pubstream');
$o .= '</div>';
}
-
+
if(! $update && !$load) {
nav_set_selected(t('Public Stream'));
@@ -110,13 +108,13 @@ class Pubstream extends \Zotlabs\Web\Controller {
$maxheight = get_config('system','home_divmore_height');
if(! $maxheight)
$maxheight = 400;
-
+
$o .= '<div id="live-pubstream"></div>' . "\r\n";
- $o .= "<script> var profile_uid = " . ((intval(local_channel())) ? local_channel() : (-1))
- . "; var profile_page = " . \App::$pager['page']
+ $o .= "<script> var profile_uid = " . ((intval(local_channel())) ? local_channel() : (-1))
+ . "; var profile_page = " . \App::$pager['page']
. "; divmore_height = " . intval($maxheight) . "; </script>\r\n";
-
- //if we got a decoded hash we must encode it again before handing to javascript
+
+ //if we got a decoded hash we must encode it again before handing to javascript
if($decoded)
$mid = 'b64.' . base64url_encode($mid);
@@ -151,7 +149,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
'$dbegin' => ''
));
}
-
+
if($update && ! $load) {
// only setup pagination on initial page view
$pager_sql = '';
@@ -160,10 +158,10 @@ class Pubstream extends \Zotlabs\Web\Controller {
\App::set_pager_itemspage(10);
$pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start']));
}
-
+
require_once('include/channel.php');
require_once('include/security.php');
-
+
if($site_firehose) {
$uids = " and item.uid in ( " . stream_perms_api_uids(PERMS_PUBLIC) . " ) and item_private = 0 and item_wall = 1 ";
}
@@ -173,7 +171,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
$sql_extra = item_permissions_sql($sys['channel_id']);
\App::$data['firehose'] = intval($sys['channel_id']);
}
-
+
if(get_config('system','public_list_mode'))
$page_mode = 'list';
else
@@ -184,7 +182,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
$sql_extra .= protect_sprintf(term_query('item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG));
}
- $net_query = (($net) ? " left join xchan on xchan_hash = author_xchan " : '');
+ $net_query = (($net) ? " left join xchan on xchan_hash = author_xchan " : '');
$net_query2 = (($net) ? " and xchan_network = '" . protect_sprintf(dbesc($net)) . "' " : '');
$abook_uids = " and abook.abook_channel = " . intval(\App::$profile['profile_uid']) . " ";
@@ -196,13 +194,13 @@ class Pubstream extends \Zotlabs\Web\Controller {
//logger('update: ' . $update . ' load: ' . $load);
if($update) {
-
+
$ordering = get_config('system', 'pubstream_ordering', 'commented');
-
+
if($load) {
if($mid) {
$r = q("SELECT parent AS item_id FROM item
- left join abook on item.author_xchan = abook.abook_xchan
+ left join abook on item.author_xchan = abook.abook_xchan
$net_query
WHERE mid = '%s' $uids $item_normal
and (abook.abook_blocked = 0 or abook.abook_flags is null)
@@ -212,7 +210,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
}
else {
// Fetch a page full of parent items for this page
- $r = q("SELECT item.id AS item_id FROM item
+ $r = q("SELECT item.id AS item_id FROM item
left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids )
$net_query
WHERE true $uids and item.item_thread_top = 1 $item_normal
@@ -247,20 +245,20 @@ class Pubstream extends \Zotlabs\Web\Controller {
// Then fetch all the children of the parents that are on this page
$parents_str = '';
-
+
if($r) {
-
+
$parents_str = ids_to_querystr($r,'item_id');
-
+
$items = q("SELECT item.*, item.id AS item_id FROM item
WHERE true $uids $item_normal
AND item.parent IN ( %s )
$sql_extra ",
dbesc($parents_str)
);
-
+
// use effective_uid param of xchan_query to help sort out comment permission
- // for sys_channel owned items.
+ // for sys_channel owned items.
xchan_query($items,true,(($sys) ? local_channel() : 0));
$items = fetch_post_tags($items,true);
@@ -269,9 +267,9 @@ class Pubstream extends \Zotlabs\Web\Controller {
else {
$items = array();
}
-
+
}
-
+
// fake it
$mode = (($hashtags) ? 'search' : 'pubstream');
@@ -279,13 +277,13 @@ class Pubstream extends \Zotlabs\Web\Controller {
if($mid)
$o .= '<div id="content-complete"></div>';
-
+
if(($items) && (! $update))
$o .= alt_pager(count($items));
$_SESSION['loadtime'] = datetime_convert();
return $o;
-
+
}
}
diff --git a/Zotlabs/Module/Randprof.php b/Zotlabs/Module/Randprof.php
index c38b07ead..731d3aece 100644
--- a/Zotlabs/Module/Randprof.php
+++ b/Zotlabs/Module/Randprof.php
@@ -15,7 +15,7 @@ class Randprof extends \Zotlabs\Web\Controller {
$x = random_profile();
if($x)
goaway(chanlink_hash($x));
-
+
/** FIXME this doesn't work at the moment as a fallback */
goaway(z_root() . '/profile');
}
@@ -25,13 +25,11 @@ class Randprof extends \Zotlabs\Web\Controller {
if(! Apps::system_app_installed(local_channel(), 'Random Channel')) {
//Do not display any associated widgets at this point
App::$pdl = '';
-
- $o = '<b>' . t('Random Channel App') . ' (' . t('Not Installed') . '):</b><br>';
- $o .= t('Visit a random channel in the $Projectname network');
- return $o;
+ $papp = Apps::get_papp('Random Channel');
+ return Apps::app_render($papp, 'module');
}
}
}
-
+
}
diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php
index 80ad289b2..013817597 100644
--- a/Zotlabs/Module/Rpost.php
+++ b/Zotlabs/Module/Rpost.php
@@ -66,6 +66,73 @@ class Rpost extends \Zotlabs\Web\Controller {
nav_set_selected('Post');
+ if (local_channel() && array_key_exists('userfile',$_FILES)) {
+
+ $channel = App::get_channel();
+ $observer = App::get_observer();
+
+ $def_album = get_pconfig($channel['channel_id'],'system','photo_path');
+ $def_attach = get_pconfig($channel['channel_id'],'system','attach_path');
+
+ $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
+ 'allow_cid' => '<' . $channel['channel_hash'] . '>'
+ ]);
+
+ if (! $r['success']) {
+ notice( $r['message'] . EOL);
+ }
+
+ $s = EMPTY_STR;
+
+ if (intval($r['data']['is_photo'])) {
+ $s .= "\n\n" . $r['body'] . "\n\n";
+ }
+
+ $url = z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path'];
+
+ if (strpos($r['data']['filetype'],'video') === 0) {
+ $s .= "\n\n" . '[zvideo]' . $url . '[/zvideo]' . "\n\n";
+ }
+
+ if (strpos($r['data']['filetype'],'audio') === 0) {
+ $s .= "\n\n" . '[zaudio]' . $url . '[/zaudio]' . "\n\n";
+ }
+
+ 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;
+ }
+ else {
+ logger('empty return from svgbb');
+ }
+ }
+ else {
+ logger('unable to read svg data file: ' . 'store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
+ }
+ }
+
+ if ($r['data']['filetype'] === 'text/calendar') {
+ $content = @file_get_contents('store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
+ if ($content) {
+ $ev = ical_to_ev($content);
+ if ($ev) {
+ $s .= "\n\n" . format_event_bbcode($ev[0]) . "\n\n";
+ }
+ }
+ }
+
+ $s .= "\n\n" . '[attachment]' . $r['data']['hash'] . ',' . $r['data']['revision'] . '[/attachment]' . "\n";
+ $_REQUEST['body'] = ((array_key_exists('body',$_REQUEST)) ? $_REQUEST['body'] . $s : $s);
+ }
+
// If we have saved rpost session variables, but nothing in the current $_REQUEST, recover the saved variables
if((! array_key_exists('body',$_REQUEST)) && (array_key_exists('rpost',$_SESSION))) {