Merge branch 'patch-29' into 'dev'

Patch 29

See merge request Kostikov/core!3
This commit is contained in:
Max Kostikov 2018-09-28 15:46:14 +02:00
commit 4a904fa3a8
719 changed files with 62262 additions and 3310 deletions

View File

@ -60,7 +60,7 @@ class Cron {
drop_item($rr['id'],false,(($rr['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL)); drop_item($rr['id'],false,(($rr['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL));
if($rr['item_wall']) { if($rr['item_wall']) {
// The notifier isn't normally invoked unless item_drop is interactive. // The notifier isn't normally invoked unless item_drop is interactive.
Zotlabs\Daemon\Master::Summon( [ 'Notifier', 'drop', $rr['id'] ] ); Master::Summon( [ 'Notifier', 'drop', $rr['id'] ] );
} }
} }
} }

View File

@ -559,6 +559,8 @@ class Notifier {
foreach($dhubs as $hub) { foreach($dhubs as $hub) {
logger('notifier_hub: ' . $hub['hubloc_url'],LOGGER_DEBUG);
if($hub['hubloc_network'] !== 'zot') { if($hub['hubloc_network'] !== 'zot') {
$narr = [ $narr = [
'channel' => $channel, 'channel' => $channel,

View File

@ -303,7 +303,7 @@ class Apps {
'Admin' => t('Site Admin'), 'Admin' => t('Site Admin'),
'Report Bug' => t('Report Bug'), 'Report Bug' => t('Report Bug'),
'View Bookmarks' => t('View Bookmarks'), 'View Bookmarks' => t('View Bookmarks'),
'My Chatrooms' => t('My Chatrooms'), 'Chatrooms' => t('Chatrooms'),
'Connections' => t('Connections'), 'Connections' => t('Connections'),
'Remote Diagnostics' => t('Remote Diagnostics'), 'Remote Diagnostics' => t('Remote Diagnostics'),
'Suggest Channels' => t('Suggest Channels'), 'Suggest Channels' => t('Suggest Channels'),
@ -337,7 +337,20 @@ class Apps {
'Profiles' => t('Profiles'), 'Profiles' => t('Profiles'),
'Privacy Groups' => t('Privacy Groups'), 'Privacy Groups' => t('Privacy Groups'),
'Notifications' => t('Notifications'), 'Notifications' => t('Notifications'),
'Order Apps' => t('Order Apps') 'Order Apps' => t('Order Apps'),
'CalDAV' => t('CalDAV'),
'CardDAV' => t('CardDAV'),
'Channel Sources' => t('Channel Sources'),
'Gallery' => t('Gallery'),
'Guest Access' => t('Guest Access'),
'Notes' => t('Notes'),
'OAuth Apps Manager' => t('OAuth Apps Manager'),
'OAuth2 Apps Manager' => t('OAuth2 Apps Manager'),
'PDL Editor' => t('PDL Editor'),
'Permission Categories' => t('Permission Categories'),
'Premium Channel' => t('Premium Channel'),
'Public Stream' => t('Public Stream'),
'My Chatrooms' => t('My Chatrooms')
); );
if(array_key_exists('name',$arr)) { if(array_key_exists('name',$arr)) {
@ -349,6 +362,9 @@ class Apps {
for($x = 0; $x < count($arr); $x++) { for($x = 0; $x < count($arr); $x++) {
if(array_key_exists($arr[$x]['name'],$apps)) { if(array_key_exists($arr[$x]['name'],$apps)) {
$arr[$x]['name'] = $apps[$arr[$x]['name']]; $arr[$x]['name'] = $apps[$arr[$x]['name']];
} else {
// Try to guess by app name if not in list
$arr[$x]['name'] = t(trim($arr[$x]['name']));
} }
} }
} }
@ -388,18 +404,23 @@ class Apps {
// This will catch somebody clicking on a system "available" app that hasn't had the path macros replaced // This will catch somebody clicking on a system "available" app that hasn't had the path macros replaced
// and they are allowed to see the app // and they are allowed to see the app
if(strpos($papp['url'],'$baseurl') !== false || strpos($papp['url'],'$nick') !== false || strpos($papp['photo'],'$baseurl') !== false || strpos($papp['photo'],'$nick') !== false) {
if(strstr($papp['url'],'$baseurl') || strstr($papp['url'],'$nick') || strstr($papp['photo'],'$baseurl') || strstr($pap['photo'],'$nick')) {
$view_channel = local_channel(); $view_channel = local_channel();
if(! $view_channel) { if(! $view_channel) {
$sys = get_sys_channel(); $sys = get_sys_channel();
$view_channel = $sys['channel_id']; $view_channel = $sys['channel_id'];
} }
self::app_macros($view_channel,$papp); self::app_macros($view_channel,$papp);
} }
if(! strstr($papp['url'],'://')) if(strpos($papp['url'], ',')) {
$urls = explode(',', $papp['url']);
$papp['url'] = trim($urls[0]);
$papp['settings_url'] = trim($urls[1]);
}
if(! strpos($papp['url'],'://'))
$papp['url'] = z_root() . ((strpos($papp['url'],'/') === 0) ? '' : '/') . $papp['url']; $papp['url'] = z_root() . ((strpos($papp['url'],'/') === 0) ? '' : '/') . $papp['url'];
@ -468,7 +489,9 @@ class Apps {
$hosturl = ''; $hosturl = '';
if(local_channel()) { if(local_channel()) {
$installed = self::app_installed(local_channel(),$papp); if(self::app_installed(local_channel(),$papp) && !$papp['deleted'])
$installed = true;
$hosturl = z_root() . '/'; $hosturl = z_root() . '/';
} }
elseif(remote_channel()) { elseif(remote_channel()) {
@ -495,18 +518,21 @@ class Apps {
if($mode === 'install') { if($mode === 'install') {
$papp['embed'] = true; $papp['embed'] = true;
} }
return replace_macros(get_markup_template('app.tpl'),array( return replace_macros(get_markup_template('app.tpl'),array(
'$app' => $papp, '$app' => $papp,
'$icon' => $icon, '$icon' => $icon,
'$hosturl' => $hosturl, '$hosturl' => $hosturl,
'$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''), '$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''),
'$install' => (($hosturl && in_array($mode, ['view','install'])) ? $install_action : ''), '$installed' => $installed,
'$action_label' => (($hosturl && in_array($mode, ['view','install'])) ? $install_action : ''),
'$edit' => ((local_channel() && $installed && $mode == 'edit') ? t('Edit') : ''), '$edit' => ((local_channel() && $installed && $mode == 'edit') ? t('Edit') : ''),
'$delete' => ((local_channel() && $installed && $mode == 'edit') ? t('Delete') : ''), '$delete' => ((local_channel() && $mode == 'edit') ? t('Delete') : ''),
'$undelete' => ((local_channel() && $installed && $mode == 'edit') ? t('Undelete') : ''), '$undelete' => ((local_channel() && $mode == 'edit') ? t('Undelete') : ''),
'$settings_url' => ((local_channel() && $installed && $mode == 'list') ? $papp['settings_url'] : ''),
'$deleted' => $papp['deleted'], '$deleted' => $papp['deleted'],
'$feature' => (($papp['embed']) ? false : true), '$feature' => (($papp['embed'] || $mode == 'edit') ? false : true),
'$pin' => (($papp['embed']) ? false : true), '$pin' => (($papp['embed'] || $mode == 'edit') ? false : true),
'$featured' => ((strpos($papp['categories'], 'nav_featured_app') === false) ? false : true), '$featured' => ((strpos($papp['categories'], 'nav_featured_app') === false) ? false : true),
'$pinned' => ((strpos($papp['categories'], 'nav_pinned_app') === false) ? false : true), '$pinned' => ((strpos($papp['categories'], 'nav_pinned_app') === false) ? false : true),
'$navapps' => (($mode == 'nav') ? true : false), '$navapps' => (($mode == 'nav') ? true : false),
@ -514,14 +540,15 @@ class Apps {
'$add' => t('Add to app-tray'), '$add' => t('Add to app-tray'),
'$remove' => t('Remove from app-tray'), '$remove' => t('Remove from app-tray'),
'$add_nav' => t('Pin to navbar'), '$add_nav' => t('Pin to navbar'),
'$remove_nav' => t('Unpin from navbar') '$remove_nav' => t('Unpin from navbar'),
'$rpath' => z_root() . '/apps'
)); ));
} }
static public function app_install($uid,$app) { static public function app_install($uid,$app) {
$app['uid'] = $uid; $app['uid'] = $uid;
if(self::app_installed($uid,$app)) if(self::app_installed($uid,$app,true))
$x = self::app_update($app); $x = self::app_update($app);
else else
$x = self::app_store($app); $x = self::app_store($app);
@ -649,33 +676,60 @@ class Apps {
} }
} }
static public function app_installed($uid,$app) { static public function app_installed($uid,$app,$bypass_filter=false) {
$r = q("select id from app where app_id = '%s' and app_channel = %d limit 1", $r = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
dbesc((array_key_exists('guid',$app)) ? $app['guid'] : ''), dbesc((array_key_exists('guid',$app)) ? $app['guid'] : ''),
intval($uid) intval($uid)
); );
if (!$bypass_filter) {
$filter_arr = [
'uid'=>$uid,
'app'=>$app,
'installed'=>$r
];
call_hooks('app_installed_filter',$filter_arr);
$r = $filter_arr['installed'];
}
return(($r) ? true : false); return(($r) ? true : false);
} }
static public function addon_app_installed($uid,$app) { static public function addon_app_installed($uid,$app,$bypass_filter=false) {
$r = q("select id from app where app_plugin = '%s' and app_channel = %d limit 1", $r = q("select id from app where app_plugin = '%s' and app_channel = %d limit 1",
dbesc($app), dbesc($app),
intval($uid) intval($uid)
); );
if (!$bypass_filter) {
$filter_arr = [
'uid'=>$uid,
'app'=>$app,
'installed'=>$r
];
call_hooks('addon_app_installed_filter',$filter_arr);
$r = $filter_arr['installed'];
}
return(($r) ? true : false); return(($r) ? true : false);
} }
static public function system_app_installed($uid,$app) { static public function system_app_installed($uid,$app,$bypass_filter=false) {
$r = q("select id from app where app_id = '%s' and app_channel = %d limit 1", $r = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
dbesc(hash('whirlpool',$app)), dbesc(hash('whirlpool',$app)),
intval($uid) intval($uid)
); );
if (!$bypass_filter) {
$filter_arr = [
'uid'=>$uid,
'app'=>$app,
'installed'=>$r
];
call_hooks('system_app_installed_filter',$filter_arr);
$r = $filter_arr['installed'];
}
return(($r) ? true : false); return(($r) ? true : false);
} }
@ -721,6 +775,9 @@ class Apps {
); );
if($r) { if($r) {
$hookinfo = Array('uid'=>$uid,'deleted'=>$deleted,'cats'=>$cats,'apps'=>$r);
call_hooks('app_list',$hookinfo);
$r = $hookinfo['apps'];
for($x = 0; $x < count($r); $x ++) { for($x = 0; $x < count($r); $x ++) {
if(! $r[$x]['app_system']) if(! $r[$x]['app_system'])
$r[$x]['type'] = 'personal'; $r[$x]['type'] = 'personal';
@ -908,7 +965,7 @@ class Apps {
$arr['author'] = $sys['channel_hash']; $arr['author'] = $sys['channel_hash'];
} }
if($arr['photo'] && (strpos($arr['photo'],'icon:') === false) && (! strstr($arr['photo'],z_root()))) { if($arr['photo'] && (strpos($arr['photo'],'icon:') === false) && (! strpos($arr['photo'],z_root()))) {
$x = import_xchan_photo(str_replace('$baseurl',z_root(),$arr['photo']),get_observer_hash(),true); $x = import_xchan_photo(str_replace('$baseurl',z_root(),$arr['photo']),get_observer_hash(),true);
$arr['photo'] = $x[1]; $arr['photo'] = $x[1];
} }
@ -994,7 +1051,7 @@ class Apps {
if((! $darray['app_url']) || (! $darray['app_id'])) if((! $darray['app_url']) || (! $darray['app_id']))
return $ret; return $ret;
if($arr['photo'] && (strpos($arr['photo'],'icon:') === false) && (! strstr($arr['photo'],z_root()))) { if($arr['photo'] && (strpos($arr['photo'],'icon:') === false) && (! strpos($arr['photo'],z_root()))) {
$x = import_xchan_photo(str_replace('$baseurl',z_root(),$arr['photo']),get_observer_hash(),true); $x = import_xchan_photo(str_replace('$baseurl',z_root(),$arr['photo']),get_observer_hash(),true);
$arr['photo'] = $x[1]; $arr['photo'] = $x[1];
} }

View File

@ -20,11 +20,11 @@ class Group {
// access lists. What we're doing here is reviving the dead group, but old content which // access lists. What we're doing here is reviving the dead group, but old content which
// was restricted to this group may now be seen by the new group members. // was restricted to this group may now be seen by the new group members.
$z = q("SELECT * FROM groups WHERE id = %d LIMIT 1", $z = q("SELECT * FROM pgrp WHERE id = %d LIMIT 1",
intval($r) intval($r)
); );
if(($z) && $z[0]['deleted']) { if(($z) && $z[0]['deleted']) {
q('UPDATE groups SET deleted = 0 WHERE id = %d', intval($z[0]['id'])); q('UPDATE pgrp SET deleted = 0 WHERE id = %d', intval($z[0]['id']));
notice( t('A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL); notice( t('A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL);
} }
return true; return true;
@ -34,13 +34,13 @@ class Group {
$dups = false; $dups = false;
$hash = random_string(32) . str_replace(['<','>'],['.','.'], $name); $hash = random_string(32) . str_replace(['<','>'],['.','.'], $name);
$r = q("SELECT id FROM groups WHERE hash = '%s' LIMIT 1", dbesc($hash)); $r = q("SELECT id FROM pgrp WHERE hash = '%s' LIMIT 1", dbesc($hash));
if($r) if($r)
$dups = true; $dups = true;
} while($dups == true); } while($dups == true);
$r = q("INSERT INTO groups ( hash, uid, visible, gname ) $r = q("INSERT INTO pgrp ( hash, uid, visible, gname )
VALUES( '%s', %d, %d, '%s' ) ", VALUES( '%s', %d, %d, '%s' ) ",
dbesc($hash), dbesc($hash),
intval($uid), intval($uid),
@ -58,7 +58,7 @@ class Group {
static function remove($uid,$name) { static function remove($uid,$name) {
$ret = false; $ret = false;
if(x($uid) && x($name)) { if(x($uid) && x($name)) {
$r = q("SELECT id, hash FROM groups WHERE uid = %d AND gname = '%s' LIMIT 1", $r = q("SELECT id, hash FROM pgrp WHERE uid = %d AND gname = '%s' LIMIT 1",
intval($uid), intval($uid),
dbesc($name) dbesc($name)
); );
@ -103,13 +103,13 @@ class Group {
} }
// remove all members // remove all members
$r = q("DELETE FROM group_member WHERE uid = %d AND gid = %d ", $r = q("DELETE FROM pgrp_member WHERE uid = %d AND gid = %d ",
intval($uid), intval($uid),
intval($group_id) intval($group_id)
); );
// remove group // remove group
$r = q("UPDATE groups SET deleted = 1 WHERE uid = %d AND gname = '%s'", $r = q("UPDATE pgrp SET deleted = 1 WHERE uid = %d AND gname = '%s'",
intval($uid), intval($uid),
dbesc($name) dbesc($name)
); );
@ -127,7 +127,7 @@ class Group {
static function byname($uid,$name) { static function byname($uid,$name) {
if((! $uid) || (! strlen($name))) if((! $uid) || (! strlen($name)))
return false; return false;
$r = q("SELECT * FROM groups WHERE uid = %d AND gname = '%s' LIMIT 1", $r = q("SELECT * FROM pgrp WHERE uid = %d AND gname = '%s' LIMIT 1",
intval($uid), intval($uid),
dbesc($name) dbesc($name)
); );
@ -140,7 +140,7 @@ class Group {
static function rec_byhash($uid,$hash) { static function rec_byhash($uid,$hash) {
if((! $uid) || (! strlen($hash))) if((! $uid) || (! strlen($hash)))
return false; return false;
$r = q("SELECT * FROM groups WHERE uid = %d AND hash = '%s' LIMIT 1", $r = q("SELECT * FROM pgrp WHERE uid = %d AND hash = '%s' LIMIT 1",
intval($uid), intval($uid),
dbesc($hash) dbesc($hash)
); );
@ -156,7 +156,7 @@ class Group {
return false; return false;
if(! ( $uid && $gid && $member)) if(! ( $uid && $gid && $member))
return false; return false;
$r = q("DELETE FROM group_member WHERE uid = %d AND gid = %d AND xchan = '%s' ", $r = q("DELETE FROM pgrp_member WHERE uid = %d AND gid = %d AND xchan = '%s' ",
intval($uid), intval($uid),
intval($gid), intval($gid),
dbesc($member) dbesc($member)
@ -174,7 +174,7 @@ class Group {
if((! $gid) || (! $uid) || (! $member)) if((! $gid) || (! $uid) || (! $member))
return false; return false;
$r = q("SELECT * FROM group_member WHERE uid = %d AND gid = %d AND xchan = '%s' LIMIT 1", $r = q("SELECT * FROM pgrp_member WHERE uid = %d AND gid = %d AND xchan = '%s' LIMIT 1",
intval($uid), intval($uid),
intval($gid), intval($gid),
dbesc($member) dbesc($member)
@ -184,7 +184,7 @@ class Group {
// we indicate success because the group member was in fact created // we indicate success because the group member was in fact created
// -- It was just created at another time // -- It was just created at another time
if(! $r) if(! $r)
$r = q("INSERT INTO group_member (uid, gid, xchan) $r = q("INSERT INTO pgrp_member (uid, gid, xchan)
VALUES( %d, %d, '%s' ) ", VALUES( %d, %d, '%s' ) ",
intval($uid), intval($uid),
intval($gid), intval($gid),
@ -200,9 +200,9 @@ class Group {
static function members($gid) { static function members($gid) {
$ret = array(); $ret = array();
if(intval($gid)) { if(intval($gid)) {
$r = q("SELECT * FROM group_member $r = q("SELECT * FROM pgrp_member
LEFT JOIN abook ON abook_xchan = group_member.xchan left join xchan on xchan_hash = abook_xchan LEFT JOIN abook ON abook_xchan = pgrp_member.xchan left join xchan on xchan_hash = abook_xchan
WHERE gid = %d AND abook_channel = %d and group_member.uid = %d and xchan_deleted = 0 and abook_self = 0 and abook_blocked = 0 and abook_pending = 0 ORDER BY xchan_name ASC ", WHERE gid = %d AND abook_channel = %d and pgrp_member.uid = %d and xchan_deleted = 0 and abook_self = 0 and abook_blocked = 0 and abook_pending = 0 ORDER BY xchan_name ASC ",
intval($gid), intval($gid),
intval(local_channel()), intval(local_channel()),
intval(local_channel()) intval(local_channel())
@ -216,7 +216,7 @@ class Group {
static function members_xchan($gid) { static function members_xchan($gid) {
$ret = []; $ret = [];
if(intval($gid)) { if(intval($gid)) {
$r = q("SELECT xchan FROM group_member WHERE gid = %d AND uid = %d", $r = q("SELECT xchan FROM pgrp_member WHERE gid = %d AND uid = %d",
intval($gid), intval($gid),
intval(local_channel()) intval(local_channel())
); );
@ -254,7 +254,7 @@ class Group {
$grps = []; $grps = [];
$o = ''; $o = '';
$r = q("SELECT * FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC", $r = q("SELECT * FROM pgrp WHERE deleted = 0 AND uid = %d ORDER BY gname ASC",
intval($uid) intval($uid)
); );
$grps[] = array('name' => '', 'hash' => '0', 'selected' => ''); $grps[] = array('name' => '', 'hash' => '0', 'selected' => '');
@ -286,7 +286,7 @@ class Group {
$groups = array(); $groups = array();
$r = q("SELECT * FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC", $r = q("SELECT * FROM pgrp WHERE deleted = 0 AND uid = %d ORDER BY gname ASC",
intval($_SESSION['uid']) intval($_SESSION['uid'])
); );
$member_of = array(); $member_of = array();
@ -366,7 +366,7 @@ class Group {
stringify_array_elms($x,true); stringify_array_elms($x,true);
$groups = implode(',', $x); $groups = implode(',', $x);
if($groups) { if($groups) {
$r = q("SELECT xchan FROM group_member WHERE gid IN ( select id from groups where hash in ( $groups ))"); $r = q("SELECT xchan FROM pgrp_member WHERE gid IN ( select id from pgrp where hash in ( $groups ))");
if($r) { if($r) {
foreach($r as $rr) { foreach($r as $rr) {
$ret[] = $rr['xchan']; $ret[] = $rr['xchan'];
@ -379,7 +379,7 @@ class Group {
static function member_of($c) { static function member_of($c) {
$r = q("SELECT groups.gname, groups.id FROM groups LEFT JOIN group_member ON group_member.gid = groups.id WHERE group_member.xchan = '%s' AND groups.deleted = 0 ORDER BY groups.gname ASC ", $r = q("SELECT pgrp.gname, pgrp.id FROM pgrp LEFT JOIN pgrp_member ON pgrp_member.gid = pgrp.id WHERE pgrp_member.xchan = '%s' AND pgrp.deleted = 0 ORDER BY pgrp.gname ASC ",
dbesc($c) dbesc($c)
); );
@ -389,7 +389,7 @@ class Group {
static function containing($uid,$c) { static function containing($uid,$c) {
$r = q("SELECT gid FROM group_member WHERE uid = %d AND group_member.xchan = '%s' ", $r = q("SELECT gid FROM pgrp_member WHERE uid = %d AND pgrp_member.xchan = '%s' ",
intval($uid), intval($uid),
dbesc($c) dbesc($c)
); );

View File

@ -122,13 +122,13 @@ class Libsync {
} }
if($groups_changed) { if($groups_changed) {
$r = q("select hash as collection, visible, deleted, gname as name from groups where uid = %d", $r = q("select hash as collection, visible, deleted, gname as name from pgrp where uid = %d",
intval($uid) intval($uid)
); );
if($r) if($r)
$info['collections'] = $r; $info['collections'] = $r;
$r = q("select groups.hash as collection, group_member.xchan as member from groups left join group_member on groups.id = group_member.gid where group_member.uid = %d", $r = q("select pgrp.hash as collection, pgrp_member.xchan as member from pgrp left join pgrp_member on pgrp.id = pgrp_member.gid where pgrp_member.uid = %d",
intval($uid) intval($uid)
); );
if($r) if($r)
@ -464,7 +464,7 @@ class Libsync {
// sync collections (privacy groups) oh joy... // sync collections (privacy groups) oh joy...
if(array_key_exists('collections',$arr) && is_array($arr['collections']) && count($arr['collections'])) { if(array_key_exists('collections',$arr) && is_array($arr['collections']) && count($arr['collections'])) {
$x = q("select * from groups where uid = %d", $x = q("select * from pgrp where uid = %d",
intval($channel['channel_id']) intval($channel['channel_id'])
); );
foreach($arr['collections'] as $cl) { foreach($arr['collections'] as $cl) {
@ -480,7 +480,7 @@ class Libsync {
if(($y['gname'] != $cl['name']) if(($y['gname'] != $cl['name'])
|| ($y['visible'] != $cl['visible']) || ($y['visible'] != $cl['visible'])
|| ($y['deleted'] != $cl['deleted'])) { || ($y['deleted'] != $cl['deleted'])) {
q("update groups set gname = '%s', visible = %d, deleted = %d where hash = '%s' and uid = %d", q("update pgrp set gname = '%s', visible = %d, deleted = %d where hash = '%s' and uid = %d",
dbesc($cl['name']), dbesc($cl['name']),
intval($cl['visible']), intval($cl['visible']),
intval($cl['deleted']), intval($cl['deleted']),
@ -489,14 +489,14 @@ class Libsync {
); );
} }
if(intval($cl['deleted']) && (! intval($y['deleted']))) { if(intval($cl['deleted']) && (! intval($y['deleted']))) {
q("delete from group_member where gid = %d", q("delete from pgrp_member where gid = %d",
intval($y['id']) intval($y['id'])
); );
} }
} }
} }
if(! $found) { if(! $found) {
$r = q("INSERT INTO groups ( hash, uid, visible, deleted, gname ) $r = q("INSERT INTO pgrp ( hash, uid, visible, deleted, gname )
VALUES( '%s', %d, %d, %d, '%s' ) ", VALUES( '%s', %d, %d, %d, '%s' ) ",
dbesc($cl['collection']), dbesc($cl['collection']),
intval($channel['channel_id']), intval($channel['channel_id']),
@ -520,10 +520,10 @@ class Libsync {
} }
} }
if(! $found_local) { if(! $found_local) {
q("delete from group_member where gid = %d", q("delete from pgrp_member where gid = %d",
intval($y['id']) intval($y['id'])
); );
q("update groups set deleted = 1 where id = %d and uid = %d", q("update pgrp set deleted = 1 where id = %d and uid = %d",
intval($y['id']), intval($y['id']),
intval($channel['channel_id']) intval($channel['channel_id'])
); );
@ -533,7 +533,7 @@ class Libsync {
} }
// reload the group list with any updates // reload the group list with any updates
$x = q("select * from groups where uid = %d", $x = q("select * from pgrp where uid = %d",
intval($channel['channel_id']) intval($channel['channel_id'])
); );
@ -560,7 +560,7 @@ class Libsync {
if(isset($y['hash']) && isset($members[$y['hash']])) { if(isset($y['hash']) && isset($members[$y['hash']])) {
foreach($members[$y['hash']] as $member) { foreach($members[$y['hash']] as $member) {
$found = false; $found = false;
$z = q("select xchan from group_member where gid = %d and uid = %d and xchan = '%s' limit 1", $z = q("select xchan from pgrp_member where gid = %d and uid = %d and xchan = '%s' limit 1",
intval($y['id']), intval($y['id']),
intval($channel['channel_id']), intval($channel['channel_id']),
dbesc($member) dbesc($member)
@ -571,7 +571,7 @@ class Libsync {
// if somebody is in the group that wasn't before - add them // if somebody is in the group that wasn't before - add them
if(! $found) { if(! $found) {
q("INSERT INTO group_member (uid, gid, xchan) q("INSERT INTO pgrp_member (uid, gid, xchan)
VALUES( %d, %d, '%s' ) ", VALUES( %d, %d, '%s' ) ",
intval($channel['channel_id']), intval($channel['channel_id']),
intval($y['id']), intval($y['id']),
@ -582,7 +582,7 @@ class Libsync {
} }
// now retrieve a list of members we have on this site // now retrieve a list of members we have on this site
$m = q("select xchan from group_member where gid = %d and uid = %d", $m = q("select xchan from pgrp_member where gid = %d and uid = %d",
intval($y['id']), intval($y['id']),
intval($channel['channel_id']) intval($channel['channel_id'])
); );
@ -590,7 +590,7 @@ class Libsync {
foreach($m as $mm) { foreach($m as $mm) {
// if the local existing member isn't in the list we just received - remove them // if the local existing member isn't in the list we just received - remove them
if(! in_array($mm['xchan'],$members[$y['hash']])) { if(! in_array($mm['xchan'],$members[$y['hash']])) {
q("delete from group_member where xchan = '%s' and gid = %d and uid = %d", q("delete from pgrp_member where xchan = '%s' and gid = %d and uid = %d",
dbesc($mm['xchan']), dbesc($mm['xchan']),
intval($y['id']), intval($y['id']),
intval($channel['channel_id']) intval($channel['channel_id'])

View File

@ -259,7 +259,7 @@ class ThreadItem {
$forged = ((($item['sig']) && (! intval($item['item_verified']))) ? t('Message signature incorrect') : ''); $forged = ((($item['sig']) && (! intval($item['item_verified']))) ? t('Message signature incorrect') : '');
$unverified = '' ; // (($this->is_wall_to_wall() && (! intval($item['item_verified']))) ? t('Message cannot be verified') : ''); $unverified = '' ; // (($this->is_wall_to_wall() && (! intval($item['item_verified']))) ? t('Message cannot be verified') : '');
$settings = '';
// FIXME - check this permission // FIXME - check this permission
if($conv->get_profile_owner() == local_channel()) { if($conv->get_profile_owner() == local_channel()) {
@ -267,6 +267,8 @@ class ThreadItem {
'tagit' => t("Add Tag"), 'tagit' => t("Add Tag"),
'classtagger' => "", 'classtagger' => "",
); );
$settings = t('Conversation Tools');
} }
$has_bookmarks = false; $has_bookmarks = false;
@ -325,6 +327,10 @@ class ThreadItem {
$has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false); $has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false);
$dropdown_extras_arr = [ 'item' => $item , 'dropdown_extras' => '' ];
call_hooks('dropdown_extras',$dropdown_extras_arr);
$dropdown_extras = $dropdown_extras_arr['dropdown_extras'];
$tmp_item = array( $tmp_item = array(
'template' => $this->get_template(), 'template' => $this->get_template(),
'mode' => $mode, 'mode' => $mode,
@ -404,6 +410,7 @@ class ThreadItem {
'addtocal' => (($has_event) ? t('Add to Calendar') : ''), 'addtocal' => (($has_event) ? t('Add to Calendar') : ''),
'drop' => $drop, 'drop' => $drop,
'multidrop' => ((feature_enabled($conv->get_profile_owner(),'multi_delete')) ? $multidrop : ''), 'multidrop' => ((feature_enabled($conv->get_profile_owner(),'multi_delete')) ? $multidrop : ''),
'dropdown_extras' => $dropdown_extras,
// end toolbar buttons // end toolbar buttons
'unseen_comments' => $unseen_comments, 'unseen_comments' => $unseen_comments,
@ -431,7 +438,8 @@ class ThreadItem {
'preview_lbl' => t('This is an unsaved preview'), 'preview_lbl' => t('This is an unsaved preview'),
'wait' => t('Please wait'), 'wait' => t('Please wait'),
'submid' => str_replace(['+','='], ['',''], base64_encode($item['mid'])), 'submid' => str_replace(['+','='], ['',''], base64_encode($item['mid'])),
'thread_level' => $thread_level 'thread_level' => $thread_level,
'settings' => $settings
); );
$arr = array('item' => $item, 'output' => $tmp_item); $arr = array('item' => $item, 'output' => $tmp_item);

View File

@ -81,7 +81,7 @@ class Acl extends \Zotlabs\Web\Controller {
if($search) { if($search) {
$sql_extra = " AND groups.gname LIKE " . protect_sprintf( "'%" . dbesc($search) . "%'" ) . " "; $sql_extra = " AND pgrp.gname LIKE " . protect_sprintf( "'%" . dbesc($search) . "%'" ) . " ";
$sql_extra2 = "AND ( xchan_name LIKE " . protect_sprintf( "'%" . dbesc($search) . "%'" ) . " OR xchan_addr LIKE " . protect_sprintf( "'%" . dbesc(punify($search)) . ((strpos($search,'@') === false) ? "%@%'" : "%'")) . ") "; $sql_extra2 = "AND ( xchan_name LIKE " . protect_sprintf( "'%" . dbesc($search) . "%'" ) . " OR xchan_addr LIKE " . protect_sprintf( "'%" . dbesc(punify($search)) . ((strpos($search,'@') === false) ? "%@%'" : "%'")) . ") ";
// This horrible mess is needed because position also returns 0 if nothing is found. // This horrible mess is needed because position also returns 0 if nothing is found.
@ -128,13 +128,13 @@ class Acl extends \Zotlabs\Web\Controller {
// Normal privacy groups // Normal privacy groups
$r = q("SELECT groups.id, groups.hash, groups.gname $r = q("SELECT pgrp.id, pgrp.hash, pgrp.gname
FROM groups, group_member FROM pgrp, pgrp_member
WHERE groups.deleted = 0 AND groups.uid = %d WHERE pgrp.deleted = 0 AND pgrp.uid = %d
AND group_member.gid = groups.id AND pgrp_member.gid = pgrp.id
$sql_extra $sql_extra
GROUP BY groups.id GROUP BY pgrp.id
ORDER BY groups.gname ORDER BY pgrp.gname
LIMIT %d OFFSET %d", LIMIT %d OFFSET %d",
intval(local_channel()), intval(local_channel()),
intval($count), intval($count),

View File

@ -109,7 +109,7 @@ class Admin extends \Zotlabs\Web\Controller {
// available channels, primary and clones // available channels, primary and clones
$channels = array(); $channels = array();
$r = q("SELECT COUNT(*) AS total, COUNT(CASE WHEN channel_primary = 1 THEN 1 ELSE NULL END) AS main, COUNT(CASE WHEN channel_primary = 0 THEN 1 ELSE NULL END) AS clones FROM channel WHERE channel_removed = 0"); $r = q("SELECT COUNT(*) AS total, COUNT(CASE WHEN channel_primary = 1 THEN 1 ELSE NULL END) AS main, COUNT(CASE WHEN channel_primary = 0 THEN 1 ELSE NULL END) AS clones FROM channel WHERE channel_removed = 0 and channel_system = 0");
if ($r) { if ($r) {
$channels['total'] = array('label' => t('Channels'), 'val' => $r[0]['total']); $channels['total'] = array('label' => t('Channels'), 'val' => $r[0]['total']);
$channels['main'] = array('label' => t('Primary'), 'val' => $r[0]['main']); $channels['main'] = array('label' => t('Primary'), 'val' => $r[0]['main']);

View File

@ -47,11 +47,11 @@ class Apps extends \Zotlabs\Web\Controller {
return replace_macros(get_markup_template('myapps.tpl'), array( return replace_macros(get_markup_template('myapps.tpl'), array(
'$sitename' => get_config('system','sitename'), '$sitename' => get_config('system','sitename'),
'$cat' => $cat, '$cat' => $cat,
'$title' => t('Apps'), '$title' => (($available) ? t('Available Apps') : t('Installed Apps')),
'$apps' => $apps, '$apps' => $apps,
'$authed' => ((local_channel()) ? true : false), '$authed' => ((local_channel()) ? true : false),
'$manage' => (($available) ? '' : t('Manage apps')), '$manage' => (($available) ? '' : t('Manage Apps')),
'$create' => (($mode == 'edit') ? t('Create new app') : '') '$create' => (($mode == 'edit') ? t('Create Custom App') : '')
)); ));
} }

View File

@ -1,12 +1,17 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\PermissionDescription;
require_once('include/channel.php'); require_once('include/channel.php');
require_once('include/conversation.php'); require_once('include/conversation.php');
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
class Articles extends \Zotlabs\Web\Controller { class Articles extends Controller {
function init() { function init() {
@ -25,22 +30,27 @@ class Articles extends \Zotlabs\Web\Controller {
return login(); return login();
} }
if(! \App::$profile) { if(! App::$profile) {
notice( t('Requested profile is not available.') . EOL ); notice( t('Requested profile is not available.') . EOL );
\App::$error = 404; App::$error = 404;
return; return;
} }
if(! feature_enabled(\App::$profile_uid,'articles')) { if(! Apps::system_app_installed(App::$profile_uid, 'Articles')) {
return; //Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Articles App (Not Installed):</b><br>';
$o .= t('Create interactive articles');
return $o;
} }
nav_set_selected(t('Articles')); nav_set_selected('Articles');
head_add_link([ head_add_link([
'rel' => 'alternate', 'rel' => 'alternate',
'type' => 'application/json+oembed', 'type' => 'application/json+oembed',
'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string), 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . App::$query_string),
'title' => 'oembed' 'title' => 'oembed'
]); ]);
@ -48,7 +58,7 @@ class Articles extends \Zotlabs\Web\Controller {
$category = (($_REQUEST['cat']) ? escape_tags(trim($_REQUEST['cat'])) : ''); $category = (($_REQUEST['cat']) ? escape_tags(trim($_REQUEST['cat'])) : '');
if($category) { if($category) {
$sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'],'item', $category, TERM_CATEGORY)); $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'],'item', $category, TERM_CATEGORY));
} }
$datequery = ((x($_GET,'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : ''); $datequery = ((x($_GET,'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : '');
@ -58,11 +68,11 @@ class Articles extends \Zotlabs\Web\Controller {
$selected_card = ((argc() > 2) ? argv(2) : ''); $selected_card = ((argc() > 2) ? argv(2) : '');
$_SESSION['return_url'] = \App::$query_string; $_SESSION['return_url'] = App::$query_string;
$uid = local_channel(); $uid = local_channel();
$owner = \App::$profile_uid; $owner = App::$profile_uid;
$observer = \App::get_observer(); $observer = App::get_observer();
$ob_hash = (($observer) ? $observer['xchan_hash'] : ''); $ob_hash = (($observer) ? $observer['xchan_hash'] : '');
@ -100,7 +110,7 @@ class Articles extends \Zotlabs\Web\Controller {
'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid']
|| $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
'acl' => (($is_owner) ? populate_acl($channel_acl, false, 'acl' => (($is_owner) ? populate_acl($channel_acl, false,
\Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')) : ''), PermissionDescription::fromGlobalPermission('view_pages')) : ''),
'permissions' => $channel_acl, 'permissions' => $channel_acl,
'showacl' => (($is_owner) ? true : false), 'showacl' => (($is_owner) ? true : false),
'visitor' => true, 'visitor' => true,
@ -130,8 +140,8 @@ class Articles extends \Zotlabs\Web\Controller {
} }
$itemspage = get_pconfig(local_channel(),'system','itemspage'); $itemspage = get_pconfig(local_channel(),'system','itemspage');
\App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20));
$pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start'])); $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start']));
$sql_extra = item_permissions_sql($owner); $sql_extra = item_permissions_sql($owner);
@ -179,7 +189,7 @@ class Articles extends \Zotlabs\Web\Controller {
WHERE item.uid = %d $item_normal WHERE item.uid = %d $item_normal
AND item.parent IN ( %s ) AND item.parent IN ( %s )
$sql_extra $sql_extra2 ", $sql_extra $sql_extra2 ",
intval(\App::$profile['profile_uid']), intval(App::$profile['profile_uid']),
dbesc($parents_str) dbesc($parents_str)
); );
if($items) { if($items) {

View File

@ -59,7 +59,7 @@ class Bookmarks extends \Zotlabs\Web\Controller {
killme(); killme();
} }
function get() { function get() {
if(! local_channel()) { if(! local_channel()) {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return; return;
@ -71,7 +71,6 @@ class Bookmarks extends \Zotlabs\Web\Controller {
$channel = \App::get_channel(); $channel = \App::get_channel();
//$o = profile_tabs($a,true,$channel['channel_address']);
$o = ''; $o = '';
$o .= '<div class="generic-content-wrapper-styled">'; $o .= '<div class="generic-content-wrapper-styled">';

View File

@ -6,6 +6,7 @@ require_once('include/bbcode.php');
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once('include/event.php'); require_once('include/event.php');
require_once('include/items.php'); require_once('include/items.php');
require_once('include/html2plain.php');
class Cal extends \Zotlabs\Web\Controller { class Cal extends \Zotlabs\Web\Controller {
@ -74,7 +75,7 @@ class Cal extends \Zotlabs\Web\Controller {
$sql_extra = permissions_sql($channel['channel_id'],get_observer_hash(),'event'); $sql_extra = permissions_sql($channel['channel_id'],get_observer_hash(),'event');
$first_day = get_pconfig(local_channel(),'system','cal_first_day'); $first_day = feature_enabled($channel['channel_id'], 'events_cal_first_day');
$first_day = (($first_day) ? $first_day : 0); $first_day = (($first_day) ? $first_day : 0);
$htpl = get_markup_template('event_head.tpl'); $htpl = get_markup_template('event_head.tpl');
@ -88,9 +89,6 @@ class Cal extends \Zotlabs\Web\Controller {
$o = ''; $o = '';
//$tabs = profile_tabs($a, True, $channel['channel_address']);
$tabs = '';
$mode = 'view'; $mode = 'view';
$y = 0; $y = 0;
$m = 0; $m = 0;
@ -296,6 +294,7 @@ class Cal extends \Zotlabs\Web\Controller {
} }
$html = format_event_html($rr); $html = format_event_html($rr);
$rr['desc'] = zidify_links(smilies(bbcode($rr['desc']))); $rr['desc'] = zidify_links(smilies(bbcode($rr['desc'])));
$rr['description'] = htmlentities(html2plain(bbcode($rr['description'])),ENT_COMPAT,'UTF-8',false);
$rr['location'] = zidify_links(smilies(bbcode($rr['location']))); $rr['location'] = zidify_links(smilies(bbcode($rr['location'])));
$events[] = array( $events[] = array(
'id'=>$rr['id'], 'id'=>$rr['id'],
@ -347,8 +346,7 @@ class Cal extends \Zotlabs\Web\Controller {
'$next' => t('Next'), '$next' => t('Next'),
'$today' => t('Today'), '$today' => t('Today'),
'$form' => $form, '$form' => $form,
'$expandform' => ((x($_GET,'expandform')) ? true : false), '$expandform' => ((x($_GET,'expandform')) ? true : false)
'$tabs' => $tabs
)); ));
if (x($_GET,'id')){ echo $o; killme(); } if (x($_GET,'id')){ echo $o; killme(); }

View File

@ -1,12 +1,16 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\PermissionDescription;
require_once('include/channel.php'); require_once('include/channel.php');
require_once('include/conversation.php'); require_once('include/conversation.php');
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
class Cards extends Controller {
class Cards extends \Zotlabs\Web\Controller {
function init() { function init() {
@ -29,22 +33,27 @@ class Cards extends \Zotlabs\Web\Controller {
return login(); return login();
} }
if(! \App::$profile) { if(! App::$profile) {
notice( t('Requested profile is not available.') . EOL ); notice( t('Requested profile is not available.') . EOL );
\App::$error = 404; App::$error = 404;
return; return;
} }
if(! feature_enabled(\App::$profile_uid, 'cards')) { if(! Apps::system_app_installed(App::$profile_uid, 'Cards')) {
return; //Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Cards App (Not Installed):</b><br>';
$o .= t('Create personal planning cards');
return $o;
} }
nav_set_selected(t('Cards')); nav_set_selected('Cards');
head_add_link([ head_add_link([
'rel' => 'alternate', 'rel' => 'alternate',
'type' => 'application/json+oembed', 'type' => 'application/json+oembed',
'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string), 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . App::$query_string),
'title' => 'oembed' 'title' => 'oembed'
]); ]);
@ -52,7 +61,7 @@ class Cards extends \Zotlabs\Web\Controller {
$category = (($_REQUEST['cat']) ? escape_tags(trim($_REQUEST['cat'])) : ''); $category = (($_REQUEST['cat']) ? escape_tags(trim($_REQUEST['cat'])) : '');
if($category) { if($category) {
$sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'], 'item', $category, TERM_CATEGORY)); $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'], 'item', $category, TERM_CATEGORY));
} }
@ -60,11 +69,11 @@ class Cards extends \Zotlabs\Web\Controller {
$selected_card = ((argc() > 2) ? argv(2) : ''); $selected_card = ((argc() > 2) ? argv(2) : '');
$_SESSION['return_url'] = \App::$query_string; $_SESSION['return_url'] = App::$query_string;
$uid = local_channel(); $uid = local_channel();
$owner = \App::$profile_uid; $owner = App::$profile_uid;
$observer = \App::get_observer(); $observer = App::get_observer();
$ob_hash = (($observer) ? $observer['xchan_hash'] : ''); $ob_hash = (($observer) ? $observer['xchan_hash'] : '');
@ -101,8 +110,8 @@ class Cards extends \Zotlabs\Web\Controller {
'nickname' => $channel['channel_address'], 'nickname' => $channel['channel_address'],
'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid']
|| $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
'acl' => (($is_owner) ? populate_acl($channel_acl, false, 'acl' => (($is_owner) ? populate_acl($channel_acl, false,
\Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')) : ''), PermissionDescription::fromGlobalPermission('view_pages')) : ''),
'permissions' => $channel_acl, 'permissions' => $channel_acl,
'showacl' => (($is_owner) ? true : false), 'showacl' => (($is_owner) ? true : false),
'visitor' => true, 'visitor' => true,
@ -132,8 +141,8 @@ class Cards extends \Zotlabs\Web\Controller {
$itemspage = get_pconfig(local_channel(),'system','itemspage'); $itemspage = get_pconfig(local_channel(),'system','itemspage');
\App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20));
$pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start'])); $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start']));
$sql_extra = item_permissions_sql($owner); $sql_extra = item_permissions_sql($owner);
@ -171,7 +180,7 @@ class Cards extends \Zotlabs\Web\Controller {
WHERE item.uid = %d $item_normal WHERE item.uid = %d $item_normal
AND item.parent IN ( %s ) AND item.parent IN ( %s )
$sql_extra $sql_extra2 ", $sql_extra $sql_extra2 ",
intval(\App::$profile['profile_uid']), intval(App::$profile['profile_uid']),
dbesc($parents_str) dbesc($parents_str)
); );
if($items) { if($items) {

View File

@ -1,12 +1,16 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
require_once('include/event.php'); require_once('include/event.php');
require_once('include/auth.php'); require_once('include/auth.php');
require_once('include/security.php'); require_once('include/security.php');
class Cdav extends \Zotlabs\Web\Controller { class Cdav extends Controller {
function init() { function init() {
@ -126,8 +130,18 @@ class Cdav extends \Zotlabs\Web\Controller {
$auth->setRealm(ucfirst(\Zotlabs\Lib\System::get_platform_name()) . 'CalDAV/CardDAV'); $auth->setRealm(ucfirst(\Zotlabs\Lib\System::get_platform_name()) . 'CalDAV/CardDAV');
if (local_channel()) { if (local_channel()) {
logger('loggedin'); logger('loggedin');
$channel = \App::get_channel();
if((argv(1) == 'calendars') && (!Apps::system_app_installed(local_channel(), 'CalDAV'))) {
killme();
}
if((argv(1) == 'addressbooks') && (!Apps::system_app_installed(local_channel(), 'CardDAV'))) {
killme();
}
$channel = App::get_channel();
$auth->setCurrentUser($channel['channel_address']); $auth->setCurrentUser($channel['channel_address']);
$auth->channel_id = $channel['channel_id']; $auth->channel_id = $channel['channel_id'];
$auth->channel_hash = $channel['channel_hash']; $auth->channel_hash = $channel['channel_hash'];
@ -161,12 +175,15 @@ class Cdav extends \Zotlabs\Web\Controller {
$nodes = [ $nodes = [
// /principals // /principals
new \Sabre\CalDAV\Principal\Collection($principalBackend), new \Sabre\CalDAV\Principal\Collection($principalBackend),
// /calendars // /calendars
new \Sabre\CalDAV\CalendarRoot($principalBackend, $caldavBackend), new \Sabre\CalDAV\CalendarRoot($principalBackend, $caldavBackend),
// /addressbook // /addressbook
new \Sabre\CardDAV\AddressBookRoot($principalBackend, $carddavBackend), new \Sabre\CardDAV\AddressBookRoot($principalBackend, $carddavBackend)
]; ];
// The object tree needs in turn to be passed to the server class // The object tree needs in turn to be passed to the server class
$server = new \Sabre\DAV\Server($nodes); $server = new \Sabre\DAV\Server($nodes);
@ -204,7 +221,15 @@ class Cdav extends \Zotlabs\Web\Controller {
if(! local_channel()) if(! local_channel())
return; return;
$channel = \App::get_channel(); if((argv(1) === 'calendar') && (! Apps::system_app_installed(local_channel(), 'CalDAV'))) {
return;
}
if((argv(1) === 'addressbook') && (! Apps::system_app_installed(local_channel(), 'CardDAV'))) {
return;
}
$channel = App::get_channel();
$principalUri = 'principals/' . $channel['channel_address']; $principalUri = 'principals/' . $channel['channel_address'];
if(!cdav_principal($principalUri)) if(!cdav_principal($principalUri))
@ -807,7 +832,27 @@ class Cdav extends \Zotlabs\Web\Controller {
if(!local_channel()) if(!local_channel())
return; return;
$channel = \App::get_channel(); if((argv(1) === 'calendar') && (! Apps::system_app_installed(local_channel(), 'CalDAV'))) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>CalDAV App (Not Installed):</b><br>';
$o .= t('CalDAV capable calendar');
return $o;
}
if((argv(1) === 'addressbook') && (! Apps::system_app_installed(local_channel(), 'CardDAV'))) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>CardDAV App (Not Installed):</b><br>';
$o .= t('CalDAV capable addressbook');
return $o;
}
App::$profile_uid = local_channel();
$channel = App::get_channel();
$principalUri = 'principals/' . $channel['channel_address']; $principalUri = 'principals/' . $channel['channel_address'];
$pdo = \DBA::$dba->db; $pdo = \DBA::$dba->db;
@ -862,7 +907,7 @@ class Cdav extends \Zotlabs\Web\Controller {
$sources = rtrim($sources, ', '); $sources = rtrim($sources, ', ');
$first_day = get_pconfig(local_channel(),'system','cal_first_day'); $first_day = feature_enabled(local_channel(), 'cal_first_day');
$first_day = (($first_day) ? $first_day : 0); $first_day = (($first_day) ? $first_day : 0);
$title = ['title', t('Event title')]; $title = ['title', t('Event title')];
@ -874,7 +919,7 @@ class Cdav extends \Zotlabs\Web\Controller {
$o .= replace_macros(get_markup_template('cdav_calendar.tpl'), [ $o .= replace_macros(get_markup_template('cdav_calendar.tpl'), [
'$sources' => $sources, '$sources' => $sources,
'$color' => $color, '$color' => $color,
'$lang' => \App::$language, '$lang' => App::$language,
'$first_day' => $first_day, '$first_day' => $first_day,
'$prev' => t('Previous'), '$prev' => t('Previous'),
'$next' => t('Next'), '$next' => t('Next'),

View File

@ -71,6 +71,8 @@ class Channel extends Controller {
function get($update = 0, $load = false) { function get($update = 0, $load = false) {
$noscript_content = get_config('system', 'noscript_content', '1');
if($load) if($load)
$_SESSION['loadtime'] = datetime_convert(); $_SESSION['loadtime'] = datetime_convert();
@ -195,7 +197,8 @@ class Channel extends Controller {
$sql_extra .= term_query('item',substr($search,1),TERM_HASHTAG,TERM_COMMUNITYTAG); $sql_extra .= term_query('item',substr($search,1),TERM_HASHTAG,TERM_COMMUNITYTAG);
} }
else { else {
$sql_extra .= sprintf(" AND item.body like '%s' ", $sql_extra .= sprintf(" AND (item.body like '%s' OR item.title like '%s') ",
dbesc(protect_sprintf('%' . $search . '%')),
dbesc(protect_sprintf('%' . $search . '%')) dbesc(protect_sprintf('%' . $search . '%'))
); );
} }
@ -272,7 +275,7 @@ class Channel extends Controller {
App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20));
$pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start']));
if((! $update) || ($load)) { if($noscript_content || $load) {
if($mid) { if($mid) {
$r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal $r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal
AND item_wall = 1 $sql_extra limit 1", AND item_wall = 1 $sql_extra limit 1",
@ -411,10 +414,17 @@ class Channel extends Controller {
$o .= conversation($items,$mode,$update,$page_mode); $o .= conversation($items,$mode,$update,$page_mode);
} }
else { else {
$o .= '<noscript>'; $o .= '<noscript>';
$o .= conversation($items,$mode,$update,'traditional'); if($noscript_content) {
$o .= alt_pager(count($items)); $o .= conversation($items,$mode,$update,'traditional');
$o .= alt_pager(count($items));
}
else {
$o .= '<div class="section-content-warning-wrapper">' . t('You must enable javascript for your browser to be able to view this content.') . '</div>';
}
$o .= '</noscript>'; $o .= '</noscript>';
$o .= conversation($items,$mode,$update,$page_mode); $o .= conversation($items,$mode,$update,$page_mode);
if ($mid && $items[0]['title']) if ($mid && $items[0]['title'])

View File

@ -1,13 +1,19 @@
<?php /** @file */ <?php /** @file */
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Chatroom;
use Zotlabs\Access\AccessList;
require_once('include/bookmarks.php'); require_once('include/bookmarks.php');
use \Zotlabs\Lib as Zlib; class Chat extends Controller {
class Chat extends \Zotlabs\Web\Controller {
function init() { function init() {
@ -16,7 +22,7 @@ class Chat extends \Zotlabs\Web\Controller {
$which = argv(1); $which = argv(1);
if(! $which) { if(! $which) {
if(local_channel()) { if(local_channel()) {
$channel = \App::get_channel(); $channel = App::get_channel();
if($channel && $channel['channel_address']) if($channel && $channel['channel_address'])
$which = $channel['channel_address']; $which = $channel['channel_address'];
} }
@ -27,7 +33,7 @@ class Chat extends \Zotlabs\Web\Controller {
} }
$profile = 0; $profile = 0;
$channel = \App::get_channel(); $channel = App::get_channel();
if((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { if((local_channel()) && (argc() > 2) && (argv(2) === 'view')) {
$which = $channel['channel_address']; $which = $channel['channel_address'];
@ -49,16 +55,16 @@ class Chat extends \Zotlabs\Web\Controller {
if((! $room) || (! local_channel())) if((! $room) || (! local_channel()))
return; return;
$channel = \App::get_channel(); $channel = App::get_channel();
if($_POST['action'] === 'drop') { if($_POST['action'] === 'drop') {
logger('delete chatroom'); logger('delete chatroom');
Zlib\Chatroom::destroy($channel,array('cr_name' => $room)); Chatroom::destroy($channel,array('cr_name' => $room));
goaway(z_root() . '/chat/' . $channel['channel_address']); goaway(z_root() . '/chat/' . $channel['channel_address']);
} }
$acl = new \Zotlabs\Access\AccessList($channel); $acl = new AccessList($channel);
$acl->set_from_array($_REQUEST); $acl->set_from_array($_REQUEST);
$arr = $acl->get(); $arr = $acl->get();
@ -67,7 +73,7 @@ class Chat extends \Zotlabs\Web\Controller {
if(intval($arr['expire']) < 0) if(intval($arr['expire']) < 0)
$arr['expire'] = 0; $arr['expire'] = 0;
Zlib\Chatroom::create($channel,$arr); Chatroom::create($channel,$arr);
$x = q("select * from chatroom where cr_name = '%s' and cr_uid = %d limit 1", $x = q("select * from chatroom where cr_name = '%s' and cr_uid = %d limit 1",
dbesc($room), dbesc($room),
@ -88,26 +94,35 @@ class Chat extends \Zotlabs\Web\Controller {
function get() { function get() {
if(! Apps::system_app_installed(App::$profile_uid, 'Chatrooms')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Chatrooms App (Not Installed):</b><br>';
$o .= t('Access Controlled Chatrooms');
return $o;
}
if(local_channel()) { if(local_channel()) {
$channel = \App::get_channel(); $channel = App::get_channel();
nav_set_selected('My Chatrooms'); nav_set_selected('Chatrooms');
} }
$ob = \App::get_observer(); $ob = App::get_observer();
$observer = get_observer_hash(); $observer = get_observer_hash();
if(! $observer) { if(! $observer) {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return; return;
} }
if(! perm_is_allowed(\App::$profile['profile_uid'],$observer,'chat')) { if(! perm_is_allowed(App::$profile['profile_uid'],$observer,'chat')) {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return; return;
} }
if((argc() > 3) && intval(argv(2)) && (argv(3) === 'leave')) { if((argc() > 3) && intval(argv(2)) && (argv(3) === 'leave')) {
Zlib\Chatroom::leave($observer,argv(2),$_SERVER['REMOTE_ADDR']); Chatroom::leave($observer,argv(2),$_SERVER['REMOTE_ADDR']);
goaway(z_root() . '/channel/' . argv(1)); goaway(z_root() . '/channel/' . argv(1));
} }
@ -160,16 +175,16 @@ class Chat extends \Zotlabs\Web\Controller {
$room_id = intval(argv(2)); $room_id = intval(argv(2));
$bookmark_link = get_bookmark_link($ob); $bookmark_link = get_bookmark_link($ob);
$x = Zlib\Chatroom::enter($observer,$room_id,'online',$_SERVER['REMOTE_ADDR']); $x = Chatroom::enter($observer,$room_id,'online',$_SERVER['REMOTE_ADDR']);
if(! $x) if(! $x)
return; return;
$x = q("select * from chatroom where cr_id = %d and cr_uid = %d $sql_extra limit 1", $x = q("select * from chatroom where cr_id = %d and cr_uid = %d $sql_extra limit 1",
intval($room_id), intval($room_id),
intval(\App::$profile['profile_uid']) intval(App::$profile['profile_uid'])
); );
if($x) { if($x) {
$acl = new \Zotlabs\Access\AccessList(false); $acl = new AccessList(false);
$acl->set($x[0]); $acl->set($x[0]);
$private = $acl->is_private(); $private = $acl->is_private();
@ -208,19 +223,12 @@ class Chat extends \Zotlabs\Web\Controller {
)); ));
return $o; return $o;
} }
require_once('include/conversation.php'); require_once('include/conversation.php');
//$o = profile_tabs($a,((local_channel() && local_channel() == \App::$profile['profile_uid']) ? true : false),\App::$profile['channel_address']);
$o = ''; $o = '';
if(! feature_enabled(\App::$profile['profile_uid'],'ajaxchat')) {
notice( t('Feature disabled.') . EOL);
return $o;
}
$acl = new \Zotlabs\Access\AccessList($channel); $acl = new AccessList($channel);
$channel_acl = $acl->get(); $channel_acl = $acl->get();
$lockstate = (($channel_acl['allow_cid'] || $channel_acl['allow_gid'] || $channel_acl['deny_cid'] || $channel_acl['deny_gid']) ? 'lock' : 'unlock'); $lockstate = (($channel_acl['allow_cid'] || $channel_acl['allow_gid'] || $channel_acl['deny_cid'] || $channel_acl['deny_gid']) ? 'lock' : 'unlock');
@ -244,17 +252,17 @@ class Chat extends \Zotlabs\Web\Controller {
)); ));
} }
$rooms = Zlib\Chatroom::roomlist(\App::$profile['profile_uid']); $rooms = Chatroom::roomlist(App::$profile['profile_uid']);
$o .= replace_macros(get_markup_template('chatrooms.tpl'), array( $o .= replace_macros(get_markup_template('chatrooms.tpl'), array(
'$header' => sprintf( t('%1$s\'s Chatrooms'), \App::$profile['fullname']), '$header' => sprintf( t('%1$s\'s Chatrooms'), App::$profile['fullname']),
'$name' => t('Name'), '$name' => t('Name'),
'$baseurl' => z_root(), '$baseurl' => z_root(),
'$nickname' => \App::$profile['channel_address'], '$nickname' => App::$profile['channel_address'],
'$rooms' => $rooms, '$rooms' => $rooms,
'$norooms' => t('No chatrooms available'), '$norooms' => t('No chatrooms available'),
'$newroom' => t('Create New'), '$newroom' => t('Create New'),
'$is_owner' => ((local_channel() && local_channel() == \App::$profile['profile_uid']) ? 1 : 0), '$is_owner' => ((local_channel() && local_channel() == App::$profile['profile_uid']) ? 1 : 0),
'$chatroom_new' => $chatroom_new, '$chatroom_new' => $chatroom_new,
'$expire' => t('Expiration'), '$expire' => t('Expiration'),
'$expire_unit' => t('min') //minutes '$expire_unit' => t('min') //minutes

View File

@ -1,21 +1,21 @@
<?php <?php
namespace Zotlabs\Module; /** @file */ namespace Zotlabs\Module; /** @file */
use App;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
require_once('include/contact_widgets.php'); require_once('include/contact_widgets.php');
require_once('include/items.php'); require_once('include/items.php');
class Connect extends Controller {
class Connect extends \Zotlabs\Web\Controller {
function init() { function init() {
if(argc() > 1) if(argc() > 1)
$which = argv(1); $which = argv(1);
else { else {
notice( t('Requested profile is not available.') . EOL ); notice( t('Requested profile is not available.') . EOL );
\App::$error = 404; App::$error = 404;
return; return;
} }
@ -24,20 +24,32 @@ class Connect extends \Zotlabs\Web\Controller {
); );
if($r) if($r)
\App::$data['channel'] = $r[0]; App::$data['channel'] = $r[0];
$channel_id = App::$data['channel']['channel_id'];
if(! Apps::system_app_installed($channel_id, 'Premium Channel')) {
return;
}
profile_load($which,''); profile_load($which,'');
} }
function post() { function post() {
if(! array_key_exists('channel', \App::$data)) if(! array_key_exists('channel', App::$data))
return; return;
$channel_id = App::$data['channel']['channel_id'];
if(! Apps::system_app_installed($channel_id, 'Premium Channel')) {
return;
}
$edit = ((local_channel() && (local_channel() == \App::$data['channel']['channel_id'])) ? true : false); $edit = ((local_channel() && (local_channel() == $channel_id)) ? true : false);
if($edit) { if($edit) {
$has_premium = ((\App::$data['channel']['channel_pageflags'] & PAGE_PREMIUM) ? 1 : 0); $has_premium = ((App::$data['channel']['channel_pageflags'] & PAGE_PREMIUM) ? 1 : 0);
$premium = (($_POST['premium']) ? intval($_POST['premium']) : 0); $premium = (($_POST['premium']) ? intval($_POST['premium']) : 0);
$text = escape_tags($_POST['text']); $text = escape_tags($_POST['text']);
@ -48,25 +60,25 @@ class Connect extends \Zotlabs\Web\Controller {
intval(local_channel()) intval(local_channel())
); );
\Zotlabs\Daemon\Master::Summon(array('Notifier','refresh_all',\App::$data['channel']['channel_id'])); \Zotlabs\Daemon\Master::Summon(array('Notifier','refresh_all',$channel_id));
} }
set_pconfig(\App::$data['channel']['channel_id'],'system','selltext',$text); set_pconfig($channel_id,'system','selltext',$text);
// reload the page completely to get fresh data // reload the page completely to get fresh data
goaway(z_root() . '/' . \App::$query_string); goaway(z_root() . '/' . App::$query_string);
} }
$url = ''; $url = '';
$observer = \App::get_observer(); $observer = App::get_observer();
if(($observer) && ($_POST['submit'] === t('Continue'))) { if(($observer) && ($_POST['submit'] === t('Continue'))) {
if($observer['xchan_follow']) if($observer['xchan_follow'])
$url = sprintf($observer['xchan_follow'],urlencode(channel_reddress(\App::$data['channel']))); $url = sprintf($observer['xchan_follow'],urlencode(channel_reddress(App::$data['channel'])));
if(! $url) { if(! $url) {
$r = q("select * from hubloc where hubloc_hash = '%s' order by hubloc_id desc limit 1", $r = q("select * from hubloc where hubloc_hash = '%s' order by hubloc_id desc limit 1",
dbesc($observer['xchan_hash']) dbesc($observer['xchan_hash'])
); );
if($r) if($r)
$url = $r[0]['hubloc_url'] . '/follow?f=&url=' . urlencode(channel_reddress(\App::$data['channel'])); $url = $r[0]['hubloc_url'] . '/follow?f=&url=' . urlencode(channel_reddress(App::$data['channel']));
} }
} }
if($url) if($url)
@ -79,17 +91,31 @@ class Connect extends \Zotlabs\Web\Controller {
function get() { function get() {
if(! array_key_exists('channel', App::$data))
return;
$channel_id = App::$data['channel']['channel_id'];
if(! Apps::system_app_installed($channel_id, 'Premium Channel')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Premium Channel App (Not Installed):</b><br>';
$o .= t('Allows you to set restrictions and terms on those that connect with your channel');
return $o;
}
$edit = ((local_channel() && (local_channel() == \App::$data['channel']['channel_id'])) ? true : false); $edit = ((local_channel() && (local_channel() == $channel_id)) ? true : false);
$text = get_pconfig(\App::$data['channel']['channel_id'],'system','selltext'); $text = get_pconfig($channel_id,'system','selltext');
if($edit) { if($edit) {
$o = replace_macros(get_markup_template('sellpage_edit.tpl'),array( $o = replace_macros(get_markup_template('sellpage_edit.tpl'),array(
'$header' => t('Premium Channel Setup'), '$header' => t('Premium Channel Setup'),
'$address' => \App::$data['channel']['channel_address'], '$address' => App::$data['channel']['channel_address'],
'$premium' => array('premium', t('Enable premium channel connection restrictions'),((\App::$data['channel']['channel_pageflags'] & PAGE_PREMIUM) ? '1' : ''),''), '$premium' => array('premium', t('Enable premium channel connection restrictions'),((App::$data['channel']['channel_pageflags'] & PAGE_PREMIUM) ? '1' : ''),''),
'$lbl_about' => t('Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc.'), '$lbl_about' => t('Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc.'),
'$text' => $text, '$text' => $text,
'$desc' => t('This channel may require additional steps or acknowledgement of the following conditions prior to connecting:'), '$desc' => t('This channel may require additional steps or acknowledgement of the following conditions prior to connecting:'),
@ -107,7 +133,7 @@ class Connect extends \Zotlabs\Web\Controller {
$submit = replace_macros(get_markup_template('sellpage_submit.tpl'), array( $submit = replace_macros(get_markup_template('sellpage_submit.tpl'), array(
'$continue' => t('Continue'), '$continue' => t('Continue'),
'$address' => \App::$data['channel']['channel_address'] '$address' => App::$data['channel']['channel_address']
)); ));
$o = replace_macros(get_markup_template('sellpage_view.tpl'),array( $o = replace_macros(get_markup_template('sellpage_view.tpl'),array(
@ -120,7 +146,7 @@ class Connect extends \Zotlabs\Web\Controller {
)); ));
$arr = array('channel' => \App::$data['channel'],'observer' => \App::get_observer(), 'sellpage' => $o, 'submit' => $submit); $arr = array('channel' => App::$data['channel'],'observer' => App::get_observer(), 'sellpage' => $o, 'submit' => $submit);
call_hooks('connect_premium', $arr); call_hooks('connect_premium', $arr);
$o = $arr['sellpage']; $o = $arr['sellpage'];

View File

@ -1,6 +1,7 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/selectors.php'); require_once('include/selectors.php');
@ -12,8 +13,10 @@ class Connections extends \Zotlabs\Web\Controller {
if(! local_channel()) if(! local_channel())
return; return;
App::$profile_uid = local_channel();
$channel = \App::get_channel(); $channel = App::get_channel();
if($channel) if($channel)
head_set_icon($channel['xchan_photo_s']); head_set_icon($channel['xchan_photo_s']);
@ -43,7 +46,7 @@ class Connections extends \Zotlabs\Web\Controller {
$all = false; $all = false;
if(! $_REQUEST['aj']) if(! $_REQUEST['aj'])
$_SESSION['return_url'] = \App::$query_string; $_SESSION['return_url'] = App::$query_string;
$search_flags = ""; $search_flags = "";
$head = ''; $head = '';
@ -88,14 +91,14 @@ class Connections extends \Zotlabs\Web\Controller {
$search_flags = " and abook_pending = 1 "; $search_flags = " and abook_pending = 1 ";
$head = t('New'); $head = t('New');
$pending = true; $pending = true;
\App::$argv[1] = 'pending'; App::$argv[1] = 'pending';
} }
else { else {
$head = t('All'); $head = t('All');
$search_flags = ''; $search_flags = '';
$all = true; $all = true;
\App::$argc = 1; App::$argc = 1;
unset(\App::$argv[1]); unset(App::$argv[1]);
} }
break; break;
// case 'unconnected': // case 'unconnected':
@ -217,7 +220,7 @@ class Connections extends \Zotlabs\Web\Controller {
$sql_extra .= (($searching) ? protect_sprintf(" AND xchan_name like '%$search_txt%' ") : ""); $sql_extra .= (($searching) ? protect_sprintf(" AND xchan_name like '%$search_txt%' ") : "");
if($_REQUEST['gid']) { if($_REQUEST['gid']) {
$sql_extra .= " and xchan_hash in ( select xchan from group_member where gid = " . intval($_REQUEST['gid']) . " and uid = " . intval(local_channel()) . " ) "; $sql_extra .= " and xchan_hash in ( select xchan from pgrp_member where gid = " . intval($_REQUEST['gid']) . " and uid = " . intval(local_channel()) . " ) ";
} }
$r = q("SELECT COUNT(abook.abook_id) AS total FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash $r = q("SELECT COUNT(abook.abook_id) AS total FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash
@ -225,15 +228,15 @@ class Connections extends \Zotlabs\Web\Controller {
intval(local_channel()) intval(local_channel())
); );
if($r) { if($r) {
\App::set_pager_total($r[0]['total']); App::set_pager_total($r[0]['total']);
$total = $r[0]['total']; $total = $r[0]['total'];
} }
$r = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash $r = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash
WHERE abook_channel = %d and abook_self = 0 and xchan_deleted = 0 and xchan_orphan = 0 $sql_extra $sql_extra2 ORDER BY xchan_name LIMIT %d OFFSET %d ", WHERE abook_channel = %d and abook_self = 0 and xchan_deleted = 0 and xchan_orphan = 0 $sql_extra $sql_extra2 ORDER BY xchan_name LIMIT %d OFFSET %d ",
intval(local_channel()), intval(local_channel()),
intval(\App::$pager['itemspage']), intval(App::$pager['itemspage']),
intval(\App::$pager['start']) intval(App::$pager['start'])
); );
$contacts = array(); $contacts = array();
@ -337,7 +340,7 @@ class Connections extends \Zotlabs\Web\Controller {
'$finding' => (($searching) ? t('Connections search') . ": '" . $search . "'" : ""), '$finding' => (($searching) ? t('Connections search') . ": '" . $search . "'" : ""),
'$submit' => t('Find'), '$submit' => t('Find'),
'$edit' => t('Edit'), '$edit' => t('Edit'),
'$cmd' => \App::$cmd, '$cmd' => App::$cmd,
'$contacts' => $contacts, '$contacts' => $contacts,
'$paginate' => paginate($a), '$paginate' => paginate($a),

View File

@ -7,6 +7,7 @@ namespace Zotlabs\Module;
* *
*/ */
use Zotlabs\Lib\Apps;
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/selectors.php'); require_once('include/selectors.php');
@ -851,7 +852,7 @@ class Connedit extends \Zotlabs\Web\Controller {
'$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('Connection requests will be approved without your interaction'), $yes_no), '$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('Connection requests will be approved without your interaction'), $yes_no),
'$permcat' => [ 'permcat', t('Permission role'), '', '<span class="loading invisible">' . t('Loading') . '<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span></span>',$permcats ], '$permcat' => [ 'permcat', t('Permission role'), '', '<span class="loading invisible">' . t('Loading') . '<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span></span>',$permcats ],
'$permcat_new' => t('Add permission role'), '$permcat_new' => t('Add permission role'),
'$permcat_enable' => feature_enabled(local_channel(),'permcats'), '$permcat_enable' => Apps::system_app_installed(local_channel(), 'Permission Categories'),
'$addr' => unpunify($contact['xchan_addr']), '$addr' => unpunify($contact['xchan_addr']),
'$primeurl' => unpunify($contact['xchan_url']), '$primeurl' => unpunify($contact['xchan_url']),
'$section' => $section, '$section' => $section,

View File

@ -23,7 +23,7 @@ class Contactgroup extends \Zotlabs\Web\Controller {
if((argc() > 1) && (intval(argv(1)))) { if((argc() > 1) && (intval(argv(1)))) {
$r = q("SELECT * FROM groups WHERE id = %d AND uid = %d AND deleted = 0 LIMIT 1", $r = q("SELECT * FROM pgrp WHERE id = %d AND uid = %d AND deleted = 0 LIMIT 1",
intval(argv(1)), intval(argv(1)),
intval(local_channel()) intval(local_channel())
); );

View File

@ -1,6 +1,7 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use Zotlabs\Lib\Apps;
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/selectors.php'); require_once('include/selectors.php');
@ -238,7 +239,7 @@ class Defperms extends \Zotlabs\Web\Controller {
'$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('If enabled, connection requests will be approved without your interaction'), $yes_no), '$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('If enabled, connection requests will be approved without your interaction'), $yes_no),
'$permcat' => [ 'permcat', t('Permission role'), '', '<span class="loading invisible">' . t('Loading') . '<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span></span>',$permcats ], '$permcat' => [ 'permcat', t('Permission role'), '', '<span class="loading invisible">' . t('Loading') . '<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span></span>',$permcats ],
'$permcat_new' => t('Add permission role'), '$permcat_new' => t('Add permission role'),
'$permcat_enable' => feature_enabled(local_channel(),'permcats'), '$permcat_enable' => Apps::system_app_installed(local_channel(), 'Permission Categories'),
'$section' => $section, '$section' => $section,
'$sections' => $sections, '$sections' => $sections,
'$autolbl' => t('The permissions indicated on this page will be applied to all new connections.'), '$autolbl' => t('The permissions indicated on this page will be applied to all new connections.'),

View File

@ -12,13 +12,16 @@ class Directory extends \Zotlabs\Web\Controller {
function init() { function init() {
\App::set_pager_itemspage(60); \App::set_pager_itemspage(60);
if(x($_GET,'ignore')) { if(local_channel() && x($_GET,'ignore')) {
q("insert into xign ( uid, xchan ) values ( %d, '%s' ) ", q("insert into xign ( uid, xchan ) values ( %d, '%s' ) ",
intval(local_channel()), intval(local_channel()),
dbesc($_GET['ignore']) dbesc($_GET['ignore'])
); );
goaway(z_root() . '/directory?f=&suggest=1'); goaway(z_root() . '/directory?f=&suggest=1');
} }
if(local_channel())
\App::$profile_uid = local_channel();
$observer = get_observer_hash(); $observer = get_observer_hash();
$global_changed = false; $global_changed = false;
@ -55,6 +58,7 @@ class Directory extends \Zotlabs\Web\Controller {
if($observer) if($observer)
set_xconfig($observer,'directory','pubforums',$pubforums); set_xconfig($observer,'directory','pubforums',$pubforums);
} }
} }
function get() { function get() {

View File

@ -12,8 +12,9 @@ class Display extends \Zotlabs\Web\Controller {
function get($update = 0, $load = false) { function get($update = 0, $load = false) {
$module_format = 'html'; $noscript_content = get_config('system', 'noscript_content', '1');
$module_format = 'html';
if(argc() > 1) { if(argc() > 1) {
$module_format = substr(argv(1),strrpos(argv(1),'.') + 1); $module_format = substr(argv(1),strrpos(argv(1),'.') + 1);
@ -251,7 +252,7 @@ class Display extends \Zotlabs\Web\Controller {
$sql_extra = public_permissions_sql($observer_hash); $sql_extra = public_permissions_sql($observer_hash);
if((! $update) || ($load)) { if($noscript_content || $load) {
$r = null; $r = null;
@ -367,7 +368,12 @@ class Display extends \Zotlabs\Web\Controller {
} }
else { else {
$o .= '<noscript>'; $o .= '<noscript>';
$o .= conversation($items, 'display', $update, 'traditional'); if($noscript_content) {
$o .= conversation($items, 'display', $update, 'traditional');
}
else {
$o .= '<div class="section-content-warning-wrapper">' . t('You must enable javascript for your browser to be able to view this content.') . '</div>';
}
$o .= '</noscript>'; $o .= '</noscript>';
if ($items[0]['title']) if ($items[0]['title'])
@ -429,7 +435,7 @@ class Display extends \Zotlabs\Web\Controller {
$o .= '<div id="content-complete"></div>'; $o .= '<div id="content-complete"></div>';
if(((! $update) || ($load)) && (! $items)) { if((($update && $load) || $noscript_content) && (! $items)) {
$r = q("SELECT id, item_deleted FROM item WHERE mid = '%s' LIMIT 1", $r = q("SELECT id, item_deleted FROM item WHERE mid = '%s' LIMIT 1",
dbesc($item_hash) dbesc($item_hash)

View File

@ -6,7 +6,7 @@ require_once('include/bbcode.php');
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once('include/event.php'); require_once('include/event.php');
require_once('include/items.php'); require_once('include/items.php');
require_once('include/html2plain.php');
class Events extends \Zotlabs\Web\Controller { class Events extends \Zotlabs\Web\Controller {
@ -271,8 +271,10 @@ class Events extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return; return;
} }
\App::$profile_uid = local_channel();
nav_set_selected('Events'); nav_set_selected('Events');
if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) { if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) {
$r = q("update event set dismissed = 1 where id = %d and uid = %d", $r = q("update event set dismissed = 1 where id = %d and uid = %d",
@ -288,7 +290,7 @@ class Events extends \Zotlabs\Web\Controller {
); );
} }
$first_day = get_pconfig(local_channel(),'system','cal_first_day'); $first_day = feature_enabled(local_channel(), 'events_cal_first_day');
$first_day = (($first_day) ? $first_day : 0); $first_day = (($first_day) ? $first_day : 0);
$htpl = get_markup_template('event_head.tpl'); $htpl = get_markup_template('event_head.tpl');
@ -641,6 +643,7 @@ class Events extends \Zotlabs\Web\Controller {
} }
$html = format_event_html($rr); $html = format_event_html($rr);
$rr['desc'] = zidify_links(smilies(bbcode($rr['desc']))); $rr['desc'] = zidify_links(smilies(bbcode($rr['desc'])));
$rr['description'] = htmlentities(html2plain(bbcode($rr['description'])),ENT_COMPAT,'UTF-8',false);
$rr['location'] = zidify_links(smilies(bbcode($rr['location']))); $rr['location'] = zidify_links(smilies(bbcode($rr['location'])));
$events[] = array( $events[] = array(
'id'=>$rr['id'], 'id'=>$rr['id'],
@ -659,8 +662,6 @@ class Events extends \Zotlabs\Web\Controller {
'html'=>$html, 'html'=>$html,
'plink' => array($rr['plink'],t('Link to Source'),'',''), 'plink' => array($rr['plink'],t('Link to Source'),'',''),
); );
} }
} }

View File

@ -128,7 +128,7 @@ class Filestorage extends \Zotlabs\Web\Controller {
} }
} }
if(json_return) if($json_return)
json_return_and_die([ 'success' => true ]); json_return_and_die([ 'success' => true ]);
goaway(dirname($url)); goaway(dirname($url));

View File

@ -1,11 +1,13 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
require_once('include/group.php'); require_once('include/group.php');
class Group extends Controller {
class Group extends \Zotlabs\Web\Controller {
function init() { function init() {
if(! local_channel()) { if(! local_channel()) {
@ -13,7 +15,11 @@ class Group extends \Zotlabs\Web\Controller {
return; return;
} }
\App::$profile_uid = local_channel(); if(! Apps::system_app_installed(local_channel(), 'Privacy Groups')) {
return;
}
App::$profile_uid = local_channel();
nav_set_selected('Privacy Groups'); nav_set_selected('Privacy Groups');
} }
@ -24,6 +30,10 @@ class Group extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return; return;
} }
if(! Apps::system_app_installed(local_channel(), 'Privacy Groups')) {
return;
}
if((argc() == 2) && (argv(1) === 'new')) { if((argc() == 2) && (argv(1) === 'new')) {
check_form_security_token_redirectOnErr('/group/new', 'group_edit'); check_form_security_token_redirectOnErr('/group/new', 'group_edit');
@ -43,7 +53,7 @@ class Group extends \Zotlabs\Web\Controller {
if((argc() == 2) && (intval(argv(1)))) { if((argc() == 2) && (intval(argv(1)))) {
check_form_security_token_redirectOnErr('/group', 'group_edit'); check_form_security_token_redirectOnErr('/group', 'group_edit');
$r = q("SELECT * FROM groups WHERE id = %d AND uid = %d LIMIT 1", $r = q("SELECT * FROM pgrp WHERE id = %d AND uid = %d LIMIT 1",
intval(argv(1)), intval(argv(1)),
intval(local_channel()) intval(local_channel())
); );
@ -57,7 +67,7 @@ class Group extends \Zotlabs\Web\Controller {
$public = intval($_POST['public']); $public = intval($_POST['public']);
if((strlen($groupname)) && (($groupname != $group['gname']) || ($public != $group['visible']))) { if((strlen($groupname)) && (($groupname != $group['gname']) || ($public != $group['visible']))) {
$r = q("UPDATE groups SET gname = '%s', visible = %d WHERE uid = %d AND id = %d", $r = q("UPDATE pgrp SET gname = '%s', visible = %d WHERE uid = %d AND id = %d",
dbesc($groupname), dbesc($groupname),
intval($public), intval($public),
intval(local_channel()), intval(local_channel()),
@ -77,13 +87,22 @@ class Group extends \Zotlabs\Web\Controller {
$change = false; $change = false;
logger('mod_group: ' . \App::$cmd,LOGGER_DEBUG); logger('mod_group: ' . App::$cmd,LOGGER_DEBUG);
if(! local_channel()) { if(! local_channel()) {
notice( t('Permission denied') . EOL); notice( t('Permission denied') . EOL);
return; return;
} }
if(! Apps::system_app_installed(local_channel(), 'Privacy Groups')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Privacy Groups App (Not Installed):</b><br>';
$o .= t('Management of privacy groups');
return $o;
}
// Switch to text mode interface if we have more than 'n' contacts or group members // Switch to text mode interface if we have more than 'n' contacts or group members
$switchtotext = get_pconfig(local_channel(),'system','groupedit_image_limit'); $switchtotext = get_pconfig(local_channel(),'system','groupedit_image_limit');
if($switchtotext === false) if($switchtotext === false)
@ -96,7 +115,7 @@ class Group extends \Zotlabs\Web\Controller {
$new = (((argc() == 2) && (argv(1) === 'new')) ? true : false); $new = (((argc() == 2) && (argv(1) === 'new')) ? true : false);
$groups = q("SELECT id, gname FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC", $groups = q("SELECT id, gname FROM pgrp WHERE deleted = 0 AND uid = %d ORDER BY gname ASC",
intval(local_channel()) intval(local_channel())
); );
@ -141,7 +160,7 @@ class Group extends \Zotlabs\Web\Controller {
check_form_security_token_redirectOnErr('/group', 'group_drop', 't'); check_form_security_token_redirectOnErr('/group', 'group_drop', 't');
if(intval(argv(2))) { if(intval(argv(2))) {
$r = q("SELECT gname FROM groups WHERE id = %d AND uid = %d LIMIT 1", $r = q("SELECT gname FROM pgrp WHERE id = %d AND uid = %d LIMIT 1",
intval(argv(2)), intval(argv(2)),
intval(local_channel()) intval(local_channel())
); );
@ -173,7 +192,7 @@ class Group extends \Zotlabs\Web\Controller {
if((argc() > 1) && (intval(argv(1)))) { if((argc() > 1) && (intval(argv(1)))) {
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
$r = q("SELECT * FROM groups WHERE id = %d AND uid = %d AND deleted = 0 LIMIT 1", $r = q("SELECT * FROM pgrp WHERE id = %d AND uid = %d AND deleted = 0 LIMIT 1",
intval(argv(1)), intval(argv(1)),
intval(local_channel()) intval(local_channel())
); );

View File

@ -428,7 +428,7 @@ class Import extends \Zotlabs\Web\Controller {
create_table_from_array('groups', $group); create_table_from_array('groups', $group);
} }
$r = q("select * from groups where uid = %d", $r = q("select * from pgrp where uid = %d",
intval($channel['channel_id']) intval($channel['channel_id'])
); );
if($r) { if($r) {

View File

@ -1,6 +1,10 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
/** /**
* module: invite.php * module: invite.php
* *
@ -9,7 +13,7 @@ namespace Zotlabs\Module;
*/ */
class Invite extends \Zotlabs\Web\Controller { class Invite extends Controller {
function post() { function post() {
@ -17,6 +21,10 @@ class Invite extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return; return;
} }
if(! Apps::system_app_installed(local_channel(), 'Invite')) {
return;
}
check_form_security_token_redirectOnErr('/', 'send_invite'); check_form_security_token_redirectOnErr('/', 'send_invite');
@ -57,7 +65,7 @@ class Invite extends \Zotlabs\Web\Controller {
else else
$nmessage = $message; $nmessage = $message;
$account = \App::get_account(); $account = App::get_account();
$res = z_mail( $res = z_mail(
[ [
@ -95,6 +103,15 @@ class Invite extends \Zotlabs\Web\Controller {
return; return;
} }
if(! Apps::system_app_installed(local_channel(), 'Invite')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Invite App (Not Installed):</b><br>';
$o .= t('Send email invitations to join this network');
return $o;
}
nav_set_selected('Invite'); nav_set_selected('Invite');
$tpl = get_markup_template('invite.tpl'); $tpl = get_markup_template('invite.tpl');
@ -127,11 +144,11 @@ class Invite extends \Zotlabs\Web\Controller {
} }
} }
$ob = \App::get_observer(); $ob = App::get_observer();
if(! $ob) if(! $ob)
return $o; return $o;
$channel = \App::get_channel(); $channel = App::get_channel();
$o = replace_macros($tpl, array( $o = replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("send_invite"), '$form_security_token' => get_form_security_token("send_invite"),

View File

@ -29,7 +29,7 @@ use \Zotlabs\Lib as Zlib;
class Item extends \Zotlabs\Web\Controller { class Item extends \Zotlabs\Web\Controller {
function post() { function post() {
// This will change. Figure out who the observer is and whether or not // This will change. Figure out who the observer is and whether or not
// they have permission to post here. Else ignore the post. // they have permission to post here. Else ignore the post.
@ -237,10 +237,12 @@ class Item extends \Zotlabs\Web\Controller {
if($parent) { if($parent) {
logger('mod_item: item_post parent=' . $parent); logger('mod_item: item_post parent=' . $parent);
$can_comment = false; $can_comment = false;
if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self']))
$can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments'); $can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item);
else if (!$can_comment) {
$can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item); if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self'])==1 )
$can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments');
}
if(! $can_comment) { if(! $can_comment) {
notice( t('Permission denied.') . EOL) ; notice( t('Permission denied.') . EOL) ;

View File

@ -1,13 +1,28 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
class Lang extends \Zotlabs\Web\Controller { class Lang extends Controller {
function get() { function get() {
if(local_channel()) {
if(! Apps::system_app_installed(local_channel(), 'Language')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Language App (Not Installed):</b><br>';
$o .= t('Change UI language');
return $o;
}
}
nav_set_selected('Language'); nav_set_selected('Language');
return lang_selector(); return lang_selector();
} }
} }

View File

@ -118,7 +118,7 @@ class Lockview extends \Zotlabs\Web\Controller {
} }
if(count($allowed_groups)) { if(count($allowed_groups)) {
$r = q("SELECT gname FROM groups WHERE hash IN ( " . implode(', ', $allowed_groups) . " )"); $r = q("SELECT gname FROM pgrp WHERE hash IN ( " . implode(', ', $allowed_groups) . " )");
if($r) if($r)
foreach($r as $rr) foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b>' . $rr['gname'] . '</b></div>'; $l[] = '<div class="dropdown-item"><b>' . $rr['gname'] . '</b></div>';
@ -156,7 +156,7 @@ class Lockview extends \Zotlabs\Web\Controller {
if(count($deny_groups)) { if(count($deny_groups)) {
$r = q("SELECT gname FROM groups WHERE hash IN ( " . implode(', ', $deny_groups) . " )"); $r = q("SELECT gname FROM pgrp WHERE hash IN ( " . implode(', ', $deny_groups) . " )");
if($r) if($r)
foreach($r as $rr) foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b><strike>' . $rr['gname'] . '</strike></b></div>'; $l[] = '<div class="dropdown-item"><b><strike>' . $rr['gname'] . '</strike></b></div>';

View File

@ -11,7 +11,7 @@ class Manage extends \Zotlabs\Web\Controller {
return; return;
} }
nav_set_selected('Channel Manager'); nav_set_selected('Channel Manager', 'settings/manage');
require_once('include/security.php'); require_once('include/security.php');
@ -129,7 +129,7 @@ class Manage extends \Zotlabs\Web\Controller {
} }
} }
$r = q("select count(channel_id) as total from channel where channel_account_id = %d and channel_removed = 0", $r = q("select count(channel_id) as total from channel where channel_account_id = %d and channel_removed = 0",
intval(get_account_id()) intval(get_account_id())
); );
@ -170,7 +170,7 @@ class Manage extends \Zotlabs\Web\Controller {
'$header' => t('Channel Manager'), '$header' => t('Channel Manager'),
'$msg_selected' => t('Current Channel'), '$msg_selected' => t('Current Channel'),
'$selected' => local_channel(), '$selected' => local_channel(),
'$desc' => t('Switch to one of your channels by selecting it.'), '$desc' => ((count($channels) > 1 || $delegates) ? t('Switch to one of your channels by selecting it.') : ''),
'$msg_default' => t('Default Channel'), '$msg_default' => t('Default Channel'),
'$msg_make_default' => t('Make Default'), '$msg_make_default' => t('Make Default'),
'$create' => $create, '$create' => $create,

View File

@ -1,21 +1,29 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/items.php'); require_once('include/items.php');
class Mood extends \Zotlabs\Web\Controller { class Mood extends Controller {
function init() { function init() {
if(! local_channel()) if(! local_channel())
return; return;
if(! Apps::system_app_installed(local_channel(), 'Mood')) {
return;
}
$uid = local_channel(); $uid = local_channel();
$channel = \App::get_channel(); $channel = App::get_channel();
$verb = notags(trim($_GET['verb'])); $verb = notags(trim($_GET['verb']));
if(! $verb) if(! $verb)
@ -60,7 +68,7 @@ class Mood extends \Zotlabs\Web\Controller {
$deny_gid = $channel['channel_deny_gid']; $deny_gid = $channel['channel_deny_gid'];
} }
$poster = \App::get_observer(); $poster = App::get_observer();
$mid = item_message_id(); $mid = item_message_id();
@ -117,6 +125,15 @@ class Mood extends \Zotlabs\Web\Controller {
return; return;
} }
if(! Apps::system_app_installed(local_channel(), 'Mood')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Mood App (Not Installed):</b><br>';
$o .= t('Set your current mood and tell your friends');
return $o;
}
nav_set_selected('Mood'); nav_set_selected('Mood');
$parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0'); $parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0');

View File

@ -108,7 +108,7 @@ class Network extends \Zotlabs\Web\Controller {
// filter by collection (e.g. group) // filter by collection (e.g. group)
if($gid) { if($gid) {
$r = q("SELECT * FROM groups WHERE id = %d AND uid = %d LIMIT 1", $r = q("SELECT * FROM pgrp WHERE id = %d AND uid = %d LIMIT 1",
intval($gid), intval($gid),
intval(local_channel()) intval(local_channel())
); );
@ -167,8 +167,6 @@ class Network extends \Zotlabs\Web\Controller {
} }
if(! $update) { if(! $update) {
$tabs = ''; //network_tabs();
$o .= $tabs;
// search terms header // search terms header
if($search) { if($search) {
@ -256,8 +254,7 @@ class Network extends \Zotlabs\Web\Controller {
)); ));
} }
$o = $tabs; $o = $title;
$o .= $title;
$o .= $status_editor; $o .= $status_editor;
} }
@ -283,8 +280,7 @@ class Network extends \Zotlabs\Web\Controller {
'$title' => '<a href="' . zid($cid_r[0]['xchan_url']) . '" ><img src="' . zid($cid_r[0]['xchan_photo_s']) . '" alt="' . urlencode($cid_r[0]['xchan_name']) . '" /></a> <a href="' . zid($cid_r[0]['xchan_url']) . '" >' . $cid_r[0]['xchan_name'] . '</a>' '$title' => '<a href="' . zid($cid_r[0]['xchan_url']) . '" ><img src="' . zid($cid_r[0]['xchan_photo_s']) . '" alt="' . urlencode($cid_r[0]['xchan_name']) . '" /></a> <a href="' . zid($cid_r[0]['xchan_url']) . '" >' . $cid_r[0]['xchan_name'] . '</a>'
)); ));
$o = $tabs; $o = $title;
$o .= $title;
$o .= $status_editor; $o .= $status_editor;
} }
elseif($xchan) { elseif($xchan) {
@ -297,8 +293,8 @@ class Network extends \Zotlabs\Web\Controller {
$title = replace_macros(get_markup_template("section_title.tpl"),array( $title = replace_macros(get_markup_template("section_title.tpl"),array(
'$title' => '<a href="' . zid($r[0]['xchan_url']) . '" ><img src="' . zid($r[0]['xchan_photo_s']) . '" alt="' . urlencode($r[0]['xchan_name']) . '" /></a> <a href="' . zid($r[0]['xchan_url']) . '" >' . $r[0]['xchan_name'] . '</a>' '$title' => '<a href="' . zid($r[0]['xchan_url']) . '" ><img src="' . zid($r[0]['xchan_photo_s']) . '" alt="' . urlencode($r[0]['xchan_name']) . '" /></a> <a href="' . zid($r[0]['xchan_url']) . '" >' . $r[0]['xchan_name'] . '</a>'
)); ));
$o = $tabs;
$o .= $title; $o = $title;
$o .= $status_editor; $o .= $status_editor;
} }
@ -382,7 +378,8 @@ class Network extends \Zotlabs\Web\Controller {
$sql_extra .= term_query('item',substr($search,1),TERM_HASHTAG,TERM_COMMUNITYTAG); $sql_extra .= term_query('item',substr($search,1),TERM_HASHTAG,TERM_COMMUNITYTAG);
} }
else { else {
$sql_extra .= sprintf(" AND item.body like '%s' ", $sql_extra .= sprintf(" AND (item.body like '%s' OR item.title like '%s') ",
dbesc(protect_sprintf('%' . $search . '%')),
dbesc(protect_sprintf('%' . $search . '%')) dbesc(protect_sprintf('%' . $search . '%'))
); );
} }

View File

@ -142,9 +142,12 @@ class New_channel extends \Zotlabs\Web\Controller {
} }
$limit = account_service_class_fetch(get_account_id(),'total_identities'); $limit = account_service_class_fetch(get_account_id(),'total_identities');
$canadd = true;
if($r && ($limit !== false)) { if($r && ($limit !== false)) {
$channel_usage_message = sprintf( t("You have created %1$.0f of %2$.0f allowed channels."), $r[0]['total'], $limit); $channel_usage_message = sprintf( t("You have created %1$.0f of %2$.0f allowed channels."), $r[0]['total'], $limit);
if ($r[0]['total'] >= $limit) {
$canadd = false;
}
} }
else { else {
$channel_usage_message = ''; $channel_usage_message = '';
@ -186,7 +189,8 @@ class New_channel extends \Zotlabs\Web\Controller {
'$nickname' => $nickname, '$nickname' => $nickname,
'$validate' => t('Validate'), '$validate' => t('Validate'),
'$submit' => t('Create'), '$submit' => t('Create'),
'$channel_usage_message' => $channel_usage_message '$channel_usage_message' => $channel_usage_message,
'$canadd' => $canadd
)); ));
return $o; return $o;

View File

@ -1,13 +1,19 @@
<?php <?php
namespace Zotlabs\Module; /** @file */ namespace Zotlabs\Module; /** @file */
use App;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
class Notes extends \Zotlabs\Web\Controller { class Notes extends Controller {
function init() { function post() {
if(! local_channel()) if(! local_channel())
return; return EMPTY_STR;
if(! Apps::system_app_installed(local_channel(), 'Notes'))
return EMPTY_STR;
$ret = array('success' => true); $ret = array('success' => true);
if(array_key_exists('note_text',$_REQUEST)) { if(array_key_exists('note_text',$_REQUEST)) {
@ -24,17 +30,38 @@ class Notes extends \Zotlabs\Web\Controller {
} }
set_pconfig(local_channel(),'notes','text',$body); set_pconfig(local_channel(),'notes','text',$body);
} }
// push updates to channel clones // push updates to channel clones
if((argc() > 1) && (argv(1) === 'sync')) { if((argc() > 1) && (argv(1) === 'sync')) {
require_once('include/zot.php'); require_once('include/zot.php');
build_sync_packet(); build_sync_packet();
} }
logger('notes saved.', LOGGER_DEBUG); logger('notes saved.', LOGGER_DEBUG);
json_return_and_die($ret); json_return_and_die($ret);
}
function get() {
if(! local_channel())
return EMPTY_STR;
if(! Apps::system_app_installed(local_channel(), 'Notes')) {
//Do not display any associated widgets at this point
App::$pdl = EMPTY_STR;
$o = '<b>' . t('Notes App (Not Installed):') . '</b><br>';
$o .= t('A simple notes app with a widget (note: notes are not encrypted)');
return $o;
}
$w = new \Zotlabs\Widget\Notes;
$arr = ['app' => true];
return $w->widget($arr);
} }
} }

View File

@ -1,27 +1,37 @@
<?php <?php
namespace Zotlabs\Module\Settings; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
class Oauth { class Oauth extends Controller {
function post() { function post() {
if(! local_channel())
return;
if(! Apps::system_app_installed(local_channel(), 'OAuth Apps Manager'))
return;
if(x($_POST,'remove')){ if(x($_POST,'remove')){
check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth'); check_form_security_token_redirectOnErr('/oauth', 'oauth');
$key = $_POST['remove']; $key = $_POST['remove'];
q("DELETE FROM tokens WHERE id='%s' AND uid=%d", q("DELETE FROM tokens WHERE id='%s' AND uid=%d",
dbesc($key), dbesc($key),
local_channel()); local_channel());
goaway(z_root()."/settings/oauth/"); goaway(z_root()."/oauth");
return; return;
} }
if((argc() > 2) && (argv(2) === 'edit' || argv(2) === 'add') && x($_POST,'submit')) { if((argc() > 1) && (argv(1) === 'edit' || argv(1) === 'add') && x($_POST,'submit')) {
check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth'); check_form_security_token_redirectOnErr('oauth', 'oauth');
$name = ((x($_POST,'name')) ? escape_tags($_POST['name']) : ''); $name = ((x($_POST,'name')) ? escape_tags($_POST['name']) : '');
$key = ((x($_POST,'key')) ? escape_tags($_POST['key']) : ''); $key = ((x($_POST,'key')) ? escape_tags($_POST['key']) : '');
@ -73,17 +83,30 @@ class Oauth {
); );
} }
} }
goaway(z_root()."/settings/oauth/"); goaway(z_root()."/oauth");
return; return;
} }
} }
function get() { function get() {
if(! local_channel())
return;
if(! Apps::system_app_installed(local_channel(), 'OAuth Apps Manager')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>OAuth Apps Manager App (Not Installed):</b><br>';
$o .= t('OAuth authentication tokens for mobile and remote apps');
return $o;
}
if((argc() > 2) && (argv(2) === 'add')) { if((argc() > 1) && (argv(1) === 'add')) {
$tpl = get_markup_template("settings_oauth_edit.tpl"); $tpl = get_markup_template("oauth_edit.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_oauth"), '$form_security_token' => get_form_security_token("oauth"),
'$title' => t('Add application'), '$title' => t('Add application'),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$cancel' => t('Cancel'), '$cancel' => t('Cancel'),
@ -96,9 +119,9 @@ class Oauth {
return $o; return $o;
} }
if((argc() > 3) && (argv(2) === 'edit')) { if((argc() > 2) && (argv(1) === 'edit')) {
$r = q("SELECT * FROM clients WHERE client_id='%s' AND uid=%d", $r = q("SELECT * FROM clients WHERE client_id='%s' AND uid=%d",
dbesc(argv(3)), dbesc(argv(2)),
local_channel()); local_channel());
if (!count($r)){ if (!count($r)){
@ -107,9 +130,9 @@ class Oauth {
} }
$app = $r[0]; $app = $r[0];
$tpl = get_markup_template("settings_oauth_edit.tpl"); $tpl = get_markup_template("oauth_edit.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_oauth"), '$form_security_token' => get_form_security_token("oauth"),
'$title' => t('Add application'), '$title' => t('Add application'),
'$submit' => t('Update'), '$submit' => t('Update'),
'$cancel' => t('Cancel'), '$cancel' => t('Cancel'),
@ -122,13 +145,13 @@ class Oauth {
return $o; return $o;
} }
if((argc() > 3) && (argv(2) === 'delete')) { if((argc() > 2) && (argv(1) === 'delete')) {
check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth', 't'); check_form_security_token_redirectOnErr('/oauth', 'oauth', 't');
$r = q("DELETE FROM clients WHERE client_id='%s' AND uid=%d", $r = q("DELETE FROM clients WHERE client_id='%s' AND uid=%d",
dbesc(argv(3)), dbesc(argv(2)),
local_channel()); local_channel());
goaway(z_root()."/settings/oauth/"); goaway(z_root()."/oauth");
return; return;
} }
@ -141,11 +164,11 @@ class Oauth {
local_channel()); local_channel());
$tpl = get_markup_template("settings_oauth.tpl"); $tpl = get_markup_template("oauth.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_oauth"), '$form_security_token' => get_form_security_token("oauth"),
'$baseurl' => z_root(), '$baseurl' => z_root(),
'$title' => t('Connected Apps'), '$title' => t('Connected OAuth Apps'),
'$add' => t('Add application'), '$add' => t('Add application'),
'$edit' => t('Edit'), '$edit' => t('Edit'),
'$delete' => t('Delete'), '$delete' => t('Delete'),
@ -158,4 +181,4 @@ class Oauth {
} }
} }

View File

@ -1,15 +1,24 @@
<?php <?php
namespace Zotlabs\Module\Settings; namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
class Oauth2 { class Oauth2 extends Controller {
function post() { function post() {
if(! local_channel())
return;
if(! Apps::system_app_installed(local_channel(), 'OAuth2 Apps Manager'))
return;
if(x($_POST,'remove')){ if(x($_POST,'remove')){
check_form_security_token_redirectOnErr('/settings/oauth2', 'settings_oauth2'); check_form_security_token_redirectOnErr('oauth2', 'oauth2');
$name = ((x($_POST,'name')) ? escape_tags(trim($_POST['name'])) : ''); $name = ((x($_POST,'name')) ? escape_tags(trim($_POST['name'])) : '');
logger("REMOVE! ".$name." uid: ".local_channel()); logger("REMOVE! ".$name." uid: ".local_channel());
$key = $_POST['remove']; $key = $_POST['remove'];
@ -25,13 +34,13 @@ class Oauth2 {
dbesc($name), dbesc($name),
intval(local_channel()) intval(local_channel())
); );
goaway(z_root()."/settings/oauth2/"); goaway(z_root()."/oauth2");
return; return;
} }
if((argc() > 2) && (argv(2) === 'edit' || argv(2) === 'add') && x($_POST,'submit')) { if((argc() > 1) && (argv(1) === 'edit' || argv(1) === 'add') && x($_POST,'submit')) {
check_form_security_token_redirectOnErr('/settings/oauth2', 'settings_oauth2'); check_form_security_token_redirectOnErr('oauth2', 'oauth2');
$name = ((x($_POST,'name')) ? escape_tags(trim($_POST['name'])) : ''); $name = ((x($_POST,'name')) ? escape_tags(trim($_POST['name'])) : '');
$secret = ((x($_POST,'secret')) ? escape_tags(trim($_POST['secret'])) : ''); $secret = ((x($_POST,'secret')) ? escape_tags(trim($_POST['secret'])) : '');
@ -80,17 +89,29 @@ class Oauth2 {
); );
} }
} }
goaway(z_root()."/settings/oauth2/"); goaway(z_root()."/oauth2");
return; return;
} }
} }
function get() { function get() {
if(! local_channel())
return;
if(! Apps::system_app_installed(local_channel(), 'OAuth2 Apps Manager')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>OAuth2 Apps Manager App (Not Installed):</b><br>';
$o .= t('OAuth2 authenticatication tokens for mobile and remote apps');
return $o;
}
if((argc() > 2) && (argv(2) === 'add')) { if((argc() > 1) && (argv(1) === 'add')) {
$tpl = get_markup_template("settings_oauth2_edit.tpl"); $tpl = get_markup_template("oauth2_edit.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_oauth2"), '$form_security_token' => get_form_security_token("oauth2"),
'$title' => t('Add OAuth2 application'), '$title' => t('Add OAuth2 application'),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$cancel' => t('Cancel'), '$cancel' => t('Cancel'),
@ -103,9 +124,9 @@ class Oauth2 {
return $o; return $o;
} }
if((argc() > 3) && (argv(2) === 'edit')) { if((argc() > 2) && (argv(1) === 'edit')) {
$r = q("SELECT * FROM oauth_clients WHERE client_id='%s' AND user_id= %d", $r = q("SELECT * FROM oauth_clients WHERE client_id='%s' AND user_id= %d",
dbesc(argv(3)), dbesc(argv(2)),
intval(local_channel()) intval(local_channel())
); );
@ -116,9 +137,9 @@ class Oauth2 {
$app = $r[0]; $app = $r[0];
$tpl = get_markup_template("settings_oauth2_edit.tpl"); $tpl = get_markup_template("oauth2_edit.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_oauth2"), '$form_security_token' => get_form_security_token("oauth2"),
'$title' => t('Add application'), '$title' => t('Add application'),
'$submit' => t('Update'), '$submit' => t('Update'),
'$cancel' => t('Cancel'), '$cancel' => t('Cancel'),
@ -131,26 +152,26 @@ class Oauth2 {
return $o; return $o;
} }
if((argc() > 3) && (argv(2) === 'delete')) { if((argc() > 2) && (argv(1) === 'delete')) {
check_form_security_token_redirectOnErr('/settings/oauth2', 'settings_oauth2', 't'); check_form_security_token_redirectOnErr('oauth2', 'oauth2', 't');
$r = q("DELETE FROM oauth_clients WHERE client_id = '%s' AND user_id = %d", $r = q("DELETE FROM oauth_clients WHERE client_id = '%s' AND user_id = %d",
dbesc(argv(3)), dbesc(argv(2)),
intval(local_channel()) intval(local_channel())
); );
$r = q("DELETE FROM oauth_access_tokens WHERE client_id = '%s' AND user_id = %d", $r = q("DELETE FROM oauth_access_tokens WHERE client_id = '%s' AND user_id = %d",
dbesc(argv(3)), dbesc(argv(2)),
intval(local_channel()) intval(local_channel())
); );
$r = q("DELETE FROM oauth_authorization_codes WHERE client_id = '%s' AND user_id = %d", $r = q("DELETE FROM oauth_authorization_codes WHERE client_id = '%s' AND user_id = %d",
dbesc(argv(3)), dbesc(argv(2)),
intval(local_channel()) intval(local_channel())
); );
$r = q("DELETE FROM oauth_refresh_tokens WHERE client_id = '%s' AND user_id = %d", $r = q("DELETE FROM oauth_refresh_tokens WHERE client_id = '%s' AND user_id = %d",
dbesc(argv(3)), dbesc(argv(2)),
intval(local_channel()) intval(local_channel())
); );
goaway(z_root()."/settings/oauth2/"); goaway(z_root()."/oauth2");
return; return;
} }
@ -164,9 +185,9 @@ class Oauth2 {
intval(local_channel()) intval(local_channel())
); );
$tpl = get_markup_template("settings_oauth2.tpl"); $tpl = get_markup_template("oauth2.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_oauth2"), '$form_security_token' => get_form_security_token("oauth2"),
'$baseurl' => z_root(), '$baseurl' => z_root(),
'$title' => t('Connected OAuth2 Apps'), '$title' => t('Connected OAuth2 Apps'),
'$add' => t('Add application'), '$add' => t('Add application'),

View File

@ -1,15 +1,20 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
class Pdledit extends \Zotlabs\Web\Controller { class Pdledit extends Controller {
function post() { function post() {
if(! local_channel()) if(! local_channel())
return; return;
if(! $_REQUEST['module'])
if(! Apps::system_app_installed(local_channel(), 'PDL Editor'))
return; return;
if(! feature_enabled(local_channel(),'advanced_theming'))
if(! $_REQUEST['module'])
return; return;
if(! trim($_REQUEST['content'])) { if(! trim($_REQUEST['content'])) {
@ -30,9 +35,13 @@ class Pdledit extends \Zotlabs\Web\Controller {
return; return;
} }
if(! feature_enabled(local_channel(),'advanced_theming')) { if(! Apps::system_app_installed(local_channel(), 'PDL Editor')) {
notice( t('Feature disabled.') . EOL); //Do not display any associated widgets at this point
return; App::$pdl = '';
$o = '<b>PDL Editor App (Not Installed):</b><br>';
$o .= t('Provides the ability to edit system page layouts');
return $o;
} }
if(argc() > 2 && argv(2) === 'reset') { if(argc() > 2 && argv(2) === 'reset') {

View File

@ -1,19 +1,24 @@
<?php <?php
namespace Zotlabs\Module\Settings; namespace Zotlabs\Module;
use App;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
class Permcats extends Controller {
class Permcats {
function post() { function post() {
if(! local_channel()) if(! local_channel())
return; return;
$channel = \App::get_channel(); if(! Apps::system_app_installed(local_channel(), 'Permission Categories'))
return;
check_form_security_token_redirectOnErr('/settings/permcats', 'settings_permcats'); $channel = App::get_channel();
check_form_security_token_redirectOnErr('/permcats', 'permcats');
$all_perms = \Zotlabs\Access\Permissions::Perms(); $all_perms = \Zotlabs\Access\Permissions::Perms();
@ -50,13 +55,21 @@ class Permcats {
if(! local_channel()) if(! local_channel())
return; return;
$channel = \App::get_channel(); if(! Apps::system_app_installed(local_channel(), 'Permission Categories')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Permission Categories App (Not Installed):</b><br>';
$o .= t('Create custom connection permission limits');
return $o;
}
if(argc() > 2) $channel = App::get_channel();
$name = hex2bin(argv(2));
if(argc() > 3 && argv(3) === 'drop') { if(argc() > 1)
$name = hex2bin(argv(1));
if(argc() > 2 && argv(2) === 'drop') {
\Zotlabs\Lib\Permcat::delete(local_channel(),$name); \Zotlabs\Lib\Permcat::delete(local_channel(),$name);
build_sync_packet(); build_sync_packet();
json_return_and_die([ 'success' => true ]); json_return_and_die([ 'success' => true ]);
@ -93,9 +106,9 @@ class Permcats {
$tpl = get_markup_template("settings_permcats.tpl"); $tpl = get_markup_template("permcats.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_permcats"), '$form_security_token' => get_form_security_token("permcats"),
'$title' => t('Permission Categories'), '$title' => t('Permission Categories'),
'$desc' => $desc, '$desc' => $desc,
'$desc2' => $desc2, '$desc2' => $desc2,

View File

@ -620,10 +620,7 @@ class Photos extends \Zotlabs\Web\Controller {
$o .= "<script> var profile_uid = " . \App::$profile['profile_uid'] $o .= "<script> var profile_uid = " . \App::$profile['profile_uid']
. "; var netargs = '?f='; var profile_page = " . \App::$pager['page'] . "; </script>\r\n"; . "; var netargs = '?f='; var profile_page = " . \App::$pager['page'] . "; </script>\r\n";
// tabs
$_is_owner = (local_channel() && (local_channel() == $owner_uid)); $_is_owner = (local_channel() && (local_channel() == $owner_uid));
//$o .= profile_tabs($a,$_is_owner, \App::$data['channel']['channel_address']);
/** /**
* Display upload form * Display upload form

View File

@ -1,6 +1,10 @@
<?php <?php
namespace Zotlabs\Module; /** @file */ namespace Zotlabs\Module; /** @file */
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
/** /**
* *
* Poke, prod, finger, or otherwise do unspeakable things to somebody - who must be a connection in your address book * Poke, prod, finger, or otherwise do unspeakable things to somebody - who must be a connection in your address book
@ -18,15 +22,19 @@ namespace Zotlabs\Module; /** @file */
require_once('include/items.php'); require_once('include/items.php');
class Poke extends \Zotlabs\Web\Controller { class Poke extends Controller {
function init() { function init() {
if(! local_channel()) if(! local_channel())
return; return;
if(! Apps::system_app_installed(local_channel(), 'Poke')) {
return;
}
$uid = local_channel(); $uid = local_channel();
$channel = \App::get_channel(); $channel = App::get_channel();
$verb = notags(trim($_REQUEST['verb'])); $verb = notags(trim($_REQUEST['verb']));
@ -150,6 +158,15 @@ class Poke extends \Zotlabs\Web\Controller {
return; return;
} }
if(! Apps::system_app_installed(local_channel(), 'Poke')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Poke App (Not Installed):</b><br>';
$o .= t('Poke somebody in your addressbook');
return $o;
}
nav_set_selected('Poke'); nav_set_selected('Poke');
$name = ''; $name = '';

View File

@ -8,8 +8,8 @@ require_once('include/selectors.php');
class Profiles extends \Zotlabs\Web\Controller { class Profiles extends \Zotlabs\Web\Controller {
function init() { function init() {
nav_set_selected('Profiles'); nav_set_selected('Profiles', 'settings/profiles');
if(! local_channel()) { if(! local_channel()) {
return; return;

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Calendar {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('CalDAV Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -63,7 +63,7 @@ class Channel {
} }
$hide_presence = 1 - (intval($role_permissions['online'])); $hide_presence = 1 - (intval($role_permissions['online']));
if($role_permissions['default_collection']) { if($role_permissions['default_collection']) {
$r = q("select hash from groups where uid = %d and gname = '%s' limit 1", $r = q("select hash from pgrp where uid = %d and gname = '%s' limit 1",
intval(local_channel()), intval(local_channel()),
dbesc( t('Friends') ) dbesc( t('Friends') )
); );
@ -71,7 +71,7 @@ class Channel {
require_once('include/group.php'); require_once('include/group.php');
group_add(local_channel(), t('Friends')); group_add(local_channel(), t('Friends'));
group_add_member(local_channel(),t('Friends'),$channel['channel_hash']); group_add_member(local_channel(),t('Friends'),$channel['channel_hash']);
$r = q("select hash from groups where uid = %d and gname = '%s' limit 1", $r = q("select hash from pgrp where uid = %d and gname = '%s' limit 1",
intval(local_channel()), intval(local_channel()),
dbesc( t('Friends') ) dbesc( t('Friends') )
); );
@ -154,7 +154,6 @@ class Channel {
$adult = (($_POST['adult'] == 1) ? 1 : 0); $adult = (($_POST['adult'] == 1) ? 1 : 0);
$defpermcat = ((x($_POST,'defpermcat')) ? notags(trim($_POST['defpermcat'])) : 'default'); $defpermcat = ((x($_POST,'defpermcat')) ? notags(trim($_POST['defpermcat'])) : 'default');
$cal_first_day = (((x($_POST,'first_day')) && (intval($_POST['first_day']) == 1)) ? 1: 0);
$mailhost = ((array_key_exists('mailhost',$_POST)) ? notags(trim($_POST['mailhost'])) : ''); $mailhost = ((array_key_exists('mailhost',$_POST)) ? notags(trim($_POST['mailhost'])) : '');
$profile_assign = ((x($_POST,'profile_assign')) ? notags(trim($_POST['profile_assign'])) : ''); $profile_assign = ((x($_POST,'profile_assign')) ? notags(trim($_POST['profile_assign'])) : '');
@ -251,7 +250,6 @@ class Channel {
set_pconfig(local_channel(),'system','evdays',$evdays); set_pconfig(local_channel(),'system','evdays',$evdays);
set_pconfig(local_channel(),'system','photo_path',$photo_path); set_pconfig(local_channel(),'system','photo_path',$photo_path);
set_pconfig(local_channel(),'system','attach_path',$attach_path); set_pconfig(local_channel(),'system','attach_path',$attach_path);
set_pconfig(local_channel(),'system','cal_first_day',$cal_first_day);
set_pconfig(local_channel(),'system','default_permcat',$defpermcat); set_pconfig(local_channel(),'system','default_permcat',$defpermcat);
set_pconfig(local_channel(),'system','email_notify_host',$mailhost); set_pconfig(local_channel(),'system','email_notify_host',$mailhost);
set_pconfig(local_channel(),'system','profile_assign',$profile_assign); set_pconfig(local_channel(),'system','profile_assign',$profile_assign);
@ -622,7 +620,7 @@ class Channel {
'$removeme' => t('Remove Channel'), '$removeme' => t('Remove Channel'),
'$removechannel' => t('Remove this channel.'), '$removechannel' => t('Remove this channel.'),
'$firefoxshare' => t('Firefox Share $Projectname provider'), '$firefoxshare' => t('Firefox Share $Projectname provider'),
'$cal_first_day' => array('first_day', t('Start calendar week on Monday'), ((get_pconfig(local_channel(),'system','cal_first_day')) ? 1 : ''), '', $yes_no),
)); ));
call_hooks('settings_form',$o); call_hooks('settings_form',$o);

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Channel_home {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Channel Home Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Connections {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Connections Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -0,0 +1,60 @@
<?php
namespace Zotlabs\Module\Settings;
class Conversation {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
if($_POST['aj']) {
if($_POST['auto_update'] == 1)
info(t('Settings saved.') . EOL);
else
info(t('Settings saved. Reload page please.') . EOL);
killme();
}
else {
return;
}
}
function get() {
$aj = ((isset($_GET['aj'])) ? true : false);
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$tpl = (($aj) ? get_markup_template("settings_module_ajax.tpl") : get_markup_template("settings_module.tpl"));
$o .= replace_macros($tpl, array(
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Conversation Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
if($aj) {
echo $o;
killme();
}
else {
return $o;
}
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Directory {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Directory Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -30,6 +30,7 @@ class Display {
$channel_list_mode = ((x($_POST,'channel_list_mode')) ? intval($_POST['channel_list_mode']) : 0); $channel_list_mode = ((x($_POST,'channel_list_mode')) ? intval($_POST['channel_list_mode']) : 0);
$network_list_mode = ((x($_POST,'network_list_mode')) ? intval($_POST['network_list_mode']) : 0); $network_list_mode = ((x($_POST,'network_list_mode')) ? intval($_POST['network_list_mode']) : 0);
$manual_update = ((array_key_exists('manual_update',$_POST)) ? intval($_POST['manual_update']) : 0); $manual_update = ((array_key_exists('manual_update',$_POST)) ? intval($_POST['manual_update']) : 0);
$start_menu = ((x($_POST,'start_menu')) ? intval($_POST['start_menu']) : 0);
$channel_divmore_height = ((x($_POST,'channel_divmore_height')) ? intval($_POST['channel_divmore_height']) : 400); $channel_divmore_height = ((x($_POST,'channel_divmore_height')) ? intval($_POST['channel_divmore_height']) : 400);
if($channel_divmore_height < 50) if($channel_divmore_height < 50)
@ -60,6 +61,7 @@ class Display {
set_pconfig(local_channel(),'system','network_divmore_height', $network_divmore_height); set_pconfig(local_channel(),'system','network_divmore_height', $network_divmore_height);
set_pconfig(local_channel(),'system','manual_conversation_update', $manual_update); set_pconfig(local_channel(),'system','manual_conversation_update', $manual_update);
set_pconfig(local_channel(),'system','channel_menu', $channel_menu); set_pconfig(local_channel(),'system','channel_menu', $channel_menu);
set_pconfig(local_channel(),'system','start_menu', $start_menu);
$newschema = ''; $newschema = '';
if($theme){ if($theme){
@ -150,6 +152,14 @@ class Display {
$theme_selected = explode(':', $theme_selected)[0]; $theme_selected = explode(':', $theme_selected)[0];
} }
$account = \App::get_account();
if($account['account_created'] > datetime_convert('','','now - 60 days')) {
$start_menu = get_pconfig(local_channel(), 'system', 'start_menu', 1);
}
else {
$start_menu = get_pconfig(local_channel(), 'system', 'start_menu', 0);
}
$preload_images = get_pconfig(local_channel(),'system','preload_images'); $preload_images = get_pconfig(local_channel(),'system','preload_images');
$preload_images = (($preload_images===false)? '0': $preload_images); // default if not set: 0 $preload_images = (($preload_images===false)? '0': $preload_images); // default if not set: 0
@ -204,15 +214,12 @@ class Display {
'$channel_menu' => [ 'channel_menu', t('Provide channel menu in navigation bar'), get_pconfig(local_channel(),'system','channel_menu',get_config('system','channel_menu',0)), t('Default: channel menu located in app menu'),$yes_no ], '$channel_menu' => [ 'channel_menu', t('Provide channel menu in navigation bar'), get_pconfig(local_channel(),'system','channel_menu',get_config('system','channel_menu',0)), t('Default: channel menu located in app menu'),$yes_no ],
'$manual_update' => array('manual_update', t('Manual conversation updates'), channel_manual_conv_update(local_channel()), t('Default is on, turning this off may increase screen jumping'), $yes_no), '$manual_update' => array('manual_update', t('Manual conversation updates'), channel_manual_conv_update(local_channel()), t('Default is on, turning this off may increase screen jumping'), $yes_no),
'$title_tosource' => array('title_tosource', t("Link post titles to source"), $title_tosource, '', $yes_no), '$title_tosource' => array('title_tosource', t("Link post titles to source"), $title_tosource, '', $yes_no),
'$layout_editor' => t('System Page Layout Editor - (advanced)'),
'$theme_config' => $theme_config, '$theme_config' => $theme_config,
'$expert' => feature_enabled(local_channel(),'advanced_theming'),
'$channel_list_mode' => array('channel_list_mode', t('Use blog/list mode on channel page'), get_pconfig(local_channel(),'system','channel_list_mode'), t('(comments displayed separately)'), $yes_no), '$channel_list_mode' => array('channel_list_mode', t('Use blog/list mode on channel page'), get_pconfig(local_channel(),'system','channel_list_mode'), t('(comments displayed separately)'), $yes_no),
'$network_list_mode' => array('network_list_mode', t('Use blog/list mode on grid page'), get_pconfig(local_channel(),'system','network_list_mode'), t('(comments displayed separately)'), $yes_no), '$network_list_mode' => array('network_list_mode', t('Use blog/list mode on grid page'), get_pconfig(local_channel(),'system','network_list_mode'), t('(comments displayed separately)'), $yes_no),
'$channel_divmore_height' => array('channel_divmore_height', t('Channel page max height of content (in pixels)'), ((get_pconfig(local_channel(),'system','channel_divmore_height')) ? get_pconfig(local_channel(),'system','channel_divmore_height') : 400), t('click to expand content exceeding this height')), '$channel_divmore_height' => array('channel_divmore_height', t('Channel page max height of content (in pixels)'), ((get_pconfig(local_channel(),'system','channel_divmore_height')) ? get_pconfig(local_channel(),'system','channel_divmore_height') : 400), t('click to expand content exceeding this height')),
'$network_divmore_height' => array('network_divmore_height', t('Grid page max height of content (in pixels)'), ((get_pconfig(local_channel(),'system','network_divmore_height')) ? get_pconfig(local_channel(),'system','network_divmore_height') : 400) , t('click to expand content exceeding this height')), '$network_divmore_height' => array('network_divmore_height', t('Grid page max height of content (in pixels)'), ((get_pconfig(local_channel(),'system','network_divmore_height')) ? get_pconfig(local_channel(),'system','network_divmore_height') : 400) , t('click to expand content exceeding this height')),
'$start_menu' => ['start_menu', t('New Member Links'), $start_menu, t('Display new member quick links menu'), $yes_no]
)); ));
call_hooks('display_settings',$o); call_hooks('display_settings',$o);

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Editor {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Editor Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Events {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Events Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -26,44 +26,14 @@ class Features {
function get() { function get() {
$arr = []; $arr = [];
$harr = [];
if(intval($_REQUEST['techlevel'])) $features = get_features(false);
$level = intval($_REQUEST['techlevel']);
else {
$level = get_account_techlevel();
}
if(! intval($level)) {
notice( t('Permission denied.') . EOL);
return;
}
$techlevels = \Zotlabs\Lib\Techlevels::levels();
// This page isn't accessible at techlevel 0
unset($techlevels[0]);
$def_techlevel = (($level > 0) ? $level : 1);
$techlock = get_config('system','techlevel_lock');
$all_features_raw = get_features(false);
foreach($all_features_raw as $fname => $fdata) {
foreach(array_slice($fdata,1) as $f) {
$harr[$f[0]] = ((intval(feature_enabled(local_channel(),$f[0]))) ? "1" : '');
}
}
$features = get_features(true,$level);
foreach($features as $fname => $fdata) { foreach($features as $fname => $fdata) {
$arr[$fname] = array(); $arr[$fname] = array();
$arr[$fname][0] = $fdata[0]; $arr[$fname][0] = $fdata[0];
foreach(array_slice($fdata,1) as $f) { foreach(array_slice($fdata,1) as $f) {
$arr[$fname][1][] = array('feature_' . $f[0],$f[1],((intval(feature_enabled(local_channel(),$f[0]))) ? "1" : ''),$f[2],array(t('Off'),t('On'))); $arr[$fname][1][] = array('feature_' . $f[0],$f[1],((intval(feature_enabled(local_channel(),$f[0]))) ? "1" : ''),$f[2],array(t('Off'),t('On')));
unset($harr[$f[0]]);
} }
} }
@ -71,10 +41,7 @@ class Features {
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_features"), '$form_security_token' => get_form_security_token("settings_features"),
'$title' => t('Additional Features'), '$title' => t('Additional Features'),
'$techlevel' => [ 'techlevel', t('Your technical skill level'), $def_techlevel, t('Used to provide a member experience and additional features consistent with your comfort level'), $techlevels ],
'$techlock' => $techlock,
'$features' => $arr, '$features' => $arr,
'$hiddens' => $harr,
'$baseurl' => z_root(), '$baseurl' => z_root(),
'$submit' => t('Submit'), '$submit' => t('Submit'),
)); ));

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Manage {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Channel Manager Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Network {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Activity Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Photos {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Photos Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Zotlabs\Module\Settings;
class Profiles {
function post() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module);
$features = get_module_features($module);
process_module_features_post(local_channel(), $features, $_POST);
build_sync_packet();
return;
}
function get() {
$module = substr(strrchr(strtolower(static::class), '\\'), 1);
$features = get_module_features($module);
$rpath = (($_GET['rpath']) ? $_GET['rpath'] : '');
$tpl = get_markup_template("settings_module.tpl");
$o .= replace_macros($tpl, array(
'$rpath' => $rpath,
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Profiles Settings'),
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@ -526,15 +526,22 @@ class Setup extends \Zotlabs\Web\Controller {
$ck_funcs[0]['status'] = false; $ck_funcs[0]['status'] = false;
$ck_funcs[0]['help'] = t('Error: libCURL PHP module required but not installed.'); $ck_funcs[0]['help'] = t('Error: libCURL PHP module required but not installed.');
} }
if(! function_exists('imagecreatefromjpeg')) { if((! function_exists('imagecreatefromjpeg')) && (! class_exists('\\Imagick'))) {
$ck_funcs[1]['status'] = false; $ck_funcs[1]['status'] = false;
$ck_funcs[1]['help'] = t('Error: GD graphics PHP module with JPEG support required but not installed.'); $ck_funcs[1]['help'] = t('Error: GD PHP module with JPEG support or ImageMagick graphics library required but not installed.');
} }
if(! function_exists('openssl_public_encrypt')) { if(! function_exists('openssl_public_encrypt')) {
$ck_funcs[2]['status'] = false; $ck_funcs[2]['status'] = false;
$ck_funcs[2]['help'] = t('Error: openssl PHP module required but not installed.'); $ck_funcs[2]['help'] = t('Error: openssl PHP module required but not installed.');
} }
if(! class_exists('PDO')) { if(class_exists('\\PDO')) {
$x = \PDO::getAvailableDrivers();
if((! in_array('mysql',$x)) && (! in_array('pgsql',$x))) {
$ck_funcs[3]['status'] = false;
$ck_funcs[3]['help'] = t('Error: PDO database PHP module missing a driver for either mysql or pgsql.');
}
}
if(! class_exists('\\PDO')) {
$ck_funcs[3]['status'] = false; $ck_funcs[3]['status'] = false;
$ck_funcs[3]['help'] = t('Error: PDO database PHP module required but not installed.'); $ck_funcs[3]['help'] = t('Error: PDO database PHP module required but not installed.');
} }

View File

@ -97,7 +97,6 @@ class Sharedwithme extends \Zotlabs\Web\Controller {
} }
//$o = profile_tabs($a, $is_owner, $channel['channel_address']);
$o = ''; $o = '';
$o .= replace_macros(get_markup_template('sharedwithme.tpl'), array( $o .= replace_macros(get_markup_template('sharedwithme.tpl'), array(

View File

@ -1,15 +1,18 @@
<?php <?php
namespace Zotlabs\Module; /** @file */ namespace Zotlabs\Module; /** @file */
use App;
use Zotlabs\Lib\Apps;
use Zotlabs\Web\Controller;
class Sources extends \Zotlabs\Web\Controller { class Sources extends Controller {
function post() { function post() {
if(! local_channel()) if(! local_channel())
return; return;
if(! feature_enabled(local_channel(),'channel_sources')) if(! Apps::system_app_installed(local_channel(), 'Channel Sources'))
return ''; return;
$source = intval($_REQUEST['source']); $source = intval($_REQUEST['source']);
$xchan = escape_tags($_REQUEST['xchan']); $xchan = escape_tags($_REQUEST['xchan']);
@ -75,12 +78,17 @@ class Sources extends \Zotlabs\Web\Controller {
function get() { function get() {
if(! local_channel()) { if(! local_channel()) {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return ''; return;
} }
if(! feature_enabled(local_channel(),'channel_sources')) { if(! Apps::system_app_installed(local_channel(), 'Channel Sources')) {
return ''; //Do not display any associated widgets at this point
} App::$pdl = '';
$o = '<b>Sources App (Not Installed):</b><br>';
$o .= t('Automatically import channel content from other channels or feeds');
return $o;
}
// list sources // list sources
if(argc() == 1) { if(argc() == 1) {

View File

@ -1,16 +1,24 @@
<?php <?php
namespace Zotlabs\Module\Settings; namespace Zotlabs\Module;
use App;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
class Tokens extends Controller {
class Tokens {
function post() { function post() {
$channel = \App::get_channel(); if(! local_channel())
return;
check_form_security_token_redirectOnErr('/settings/tokens', 'settings_tokens'); if(! Apps::system_app_installed(local_channel(), 'Guest Access'))
return;
$channel = App::get_channel();
check_form_security_token_redirectOnErr('tokens', 'tokens');
$token_errs = 0; $token_errs = 0;
if(array_key_exists('token',$_POST)) { if(array_key_exists('token',$_POST)) {
$atoken_id = (($_POST['atoken_id']) ? intval($_POST['atoken_id']) : 0); $atoken_id = (($_POST['atoken_id']) ? intval($_POST['atoken_id']) : 0);
@ -81,13 +89,25 @@ class Tokens {
function get() { function get() {
$channel = \App::get_channel(); if(! local_channel())
return;
if(! Apps::system_app_installed(local_channel(), 'Guest Access')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Guest Access App (Not Installed):</b><br>';
$o .= t('Create access tokens so that non-members can access private content');
return $o;
}
$channel = App::get_channel();
$atoken = null; $atoken = null;
$atoken_xchan = ''; $atoken_xchan = '';
if(argc() > 2) { if(argc() > 1) {
$id = argv(2); $id = argv(1);
$atoken = q("select * from atoken where atoken_id = %d and atoken_uid = %d", $atoken = q("select * from atoken where atoken_id = %d and atoken_uid = %d",
intval($id), intval($id),
@ -99,7 +119,7 @@ class Tokens {
$atoken_xchan = substr($channel['channel_hash'],0,16) . '.' . $atoken['atoken_name']; $atoken_xchan = substr($channel['channel_hash'],0,16) . '.' . $atoken['atoken_name'];
} }
if($atoken && argc() > 3 && argv(3) === 'drop') { if($atoken && argc() > 2 && argv(2) === 'drop') {
atoken_delete($id); atoken_delete($id);
$atoken = null; $atoken = null;
$atoken_xchan = ''; $atoken_xchan = '';
@ -144,9 +164,9 @@ class Tokens {
$tpl = get_markup_template("settings_tokens.tpl"); $tpl = get_markup_template("tokens.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_tokens"), '$form_security_token' => get_form_security_token("tokens"),
'$title' => t('Guest Access Tokens'), '$title' => t('Guest Access Tokens'),
'$desc' => $desc, '$desc' => $desc,
'$desc2' => $desc2, '$desc2' => $desc2,

View File

@ -1,19 +1,25 @@
<?php <?php
namespace Zotlabs\Module; namespace Zotlabs\Module;
use App;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
use Zotlabs\Lib\PermissionDescription;
use Zotlabs\Lib\ExtendedZip;
use ZipArchive;
require_once('include/channel.php'); require_once('include/channel.php');
require_once('include/conversation.php'); require_once('include/conversation.php');
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
class Webpages extends Controller {
class Webpages extends \Zotlabs\Web\Controller {
function init() { function init() {
if(argc() > 1 && argv(1) === 'sys' && is_site_admin()) { if(argc() > 1 && argv(1) === 'sys' && is_site_admin()) {
$sys = get_sys_channel(); $sys = get_sys_channel();
if($sys && intval($sys['channel_id'])) { if($sys && intval($sys['channel_id'])) {
\App::$is_sys = true; App::$is_sys = true;
} }
} }
@ -29,23 +35,32 @@ class Webpages extends \Zotlabs\Web\Controller {
function get() { function get() {
if(! \App::$profile) { if(! App::$profile) {
notice( t('Requested profile is not available.') . EOL ); notice( t('Requested profile is not available.') . EOL );
\App::$error = 404; App::$error = 404;
return; return;
} }
if(! Apps::system_app_installed(App::$profile_uid, 'Webpages')) {
//Do not display any associated widgets at this point
App::$pdl = '';
$o = '<b>Webpages App (Not Installed):</b><br>';
$o .= t('Provide managed web pages on your channel');
return $o;
}
nav_set_selected('Webpages'); nav_set_selected('Webpages');
$which = argv(1); $which = argv(1);
$_SESSION['return_url'] = \App::$query_string; $_SESSION['return_url'] = App::$query_string;
$uid = local_channel(); $uid = local_channel();
$owner = 0; $owner = 0;
$observer = \App::get_observer(); $observer = App::get_observer();
$channel = \App::get_channel(); $channel = App::get_channel();
switch ($_SESSION['action']) { switch ($_SESSION['action']) {
case 'import': case 'import':
@ -91,7 +106,7 @@ class Webpages extends \Zotlabs\Web\Controller {
} }
if(\App::$is_sys && is_site_admin()) { if(App::$is_sys && is_site_admin()) {
$sys = get_sys_channel(); $sys = get_sys_channel();
if($sys && intval($sys['channel_id'])) { if($sys && intval($sys['channel_id'])) {
$uid = $owner = intval($sys['channel_id']); $uid = $owner = intval($sys['channel_id']);
@ -127,8 +142,8 @@ class Webpages extends \Zotlabs\Web\Controller {
// Nickname is set to the observers xchan, and profile_uid to the owner's. // Nickname is set to the observers xchan, and profile_uid to the owner's.
// This lets you post pages at other people's channels. // This lets you post pages at other people's channels.
if((! $channel) && ($uid) && ($uid == \App::$profile_uid)) { if((! $channel) && ($uid) && ($uid == App::$profile_uid)) {
$channel = \App::get_channel(); $channel = App::get_channel();
} }
if($channel) { if($channel) {
$channel_acl = array( $channel_acl = array(
@ -144,15 +159,15 @@ class Webpages extends \Zotlabs\Web\Controller {
$is_owner = ($uid && $uid == $owner); $is_owner = ($uid && $uid == $owner);
//$o = profile_tabs($a, $is_owner, \App::$profile['channel_address']);
$o = ''; $o = '';
$x = array( $x = array(
'webpage' => ITEM_TYPE_WEBPAGE, 'webpage' => ITEM_TYPE_WEBPAGE,
'is_owner' => true, 'is_owner' => true,
'nickname' => \App::$profile['channel_address'], 'nickname' => App::$profile['channel_address'],
'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
'acl' => (($is_owner) ? populate_acl($channel_acl,false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')) : ''), 'acl' => (($is_owner) ? populate_acl($channel_acl,false, PermissionDescription::fromGlobalPermission('view_pages')) : ''),
'permissions' => $channel_acl, 'permissions' => $channel_acl,
'showacl' => (($is_owner) ? true : false), 'showacl' => (($is_owner) ? true : false),
'visitor' => true, 'visitor' => true,
@ -280,7 +295,7 @@ class Webpages extends \Zotlabs\Web\Controller {
notice( t('Invalid file type.') . EOL); notice( t('Invalid file type.') . EOL);
return; return;
} }
$zip = new \ZipArchive(); $zip = new ZipArchive();
if ($zip->open($source) === true) { if ($zip->open($source) === true) {
$tmp_folder_name = random_string(5); $tmp_folder_name = random_string(5);
$website = dirname($source) . '/' . $tmp_folder_name; $website = dirname($source) . '/' . $tmp_folder_name;
@ -297,7 +312,7 @@ class Webpages extends \Zotlabs\Web\Controller {
// Website files are to be imported from the channel cloud files // Website files are to be imported from the channel cloud files
if (($_POST) && array_key_exists('path',$_POST) && isset($_POST['cloudsubmit'])) { if (($_POST) && array_key_exists('path',$_POST) && isset($_POST['cloudsubmit'])) {
$channel = \App::get_channel(); $channel = App::get_channel();
$dirpath = get_dirpath_by_cloudpath($channel, $_POST['path']); $dirpath = get_dirpath_by_cloudpath($channel, $_POST['path']);
if(!$dirpath) { if(!$dirpath) {
notice( t('Invalid folder path.') . EOL); notice( t('Invalid folder path.') . EOL);
@ -343,7 +358,7 @@ class Webpages extends \Zotlabs\Web\Controller {
case 'importselected': case 'importselected':
require_once('include/import.php'); require_once('include/import.php');
$channel = \App::get_channel(); $channel = App::get_channel();
// Import layout first so that pages that reference new layouts will find // Import layout first so that pages that reference new layouts will find
// the mid of layout items in the database // the mid of layout items in the database
@ -438,7 +453,7 @@ class Webpages extends \Zotlabs\Web\Controller {
case 'cloud': case 'cloud':
case 'zipfile': case 'zipfile':
$channel = \App::get_channel(); $channel = App::get_channel();
$tmp_folder_name = random_string(10); $tmp_folder_name = random_string(10);
$zip_folder_name = random_string(10); $zip_folder_name = random_string(10);
@ -657,7 +672,7 @@ class Webpages extends \Zotlabs\Web\Controller {
} }
if($action === 'zipfile') { if($action === 'zipfile') {
// Generate the zip file // Generate the zip file
\Zotlabs\Lib\ExtendedZip::zipTree($tmp_folderpath, $zip_filepath, \ZipArchive::CREATE); ExtendedZip::zipTree($tmp_folderpath, $zip_filepath, ZipArchive::CREATE);
// Output the file for download // Output the file for download
header('Content-disposition: attachment; filename="' . $zip_filename . '"'); header('Content-disposition: attachment; filename="' . $zip_filename . '"');
header("Content-Type: application/zip"); header("Content-Type: application/zip");
@ -666,7 +681,7 @@ class Webpages extends \Zotlabs\Web\Controller {
if(isset($_SESSION['exportcloudpath'])) { if(isset($_SESSION['exportcloudpath'])) {
require_once('include/attach.php'); require_once('include/attach.php');
$cloudpath = urldecode($_SESSION['exportcloudpath']); $cloudpath = urldecode($_SESSION['exportcloudpath']);
$channel = \App::get_channel(); $channel = App::get_channel();
$dirpath = get_dirpath_by_cloudpath($channel, $cloudpath); $dirpath = get_dirpath_by_cloudpath($channel, $cloudpath);
if(!$dirpath) { if(!$dirpath) {
$x = attach_mkdirp($channel, $channel['channel_hash'], array('pathname' => $cloudpath)); $x = attach_mkdirp($channel, $channel['channel_hash'], array('pathname' => $cloudpath));

View File

@ -2,15 +2,20 @@
namespace Zotlabs\Module; namespace Zotlabs\Module;
use \Zotlabs\Lib as Zlib; use App;
use \Michelf\MarkdownExtra; use Zotlabs\Web\Controller;
use Zotlabs\Lib\Apps;
use Zotlabs\Lib\PermissionDescription;
use Zotlabs\Lib\NativeWiki;
use Zotlabs\Lib\NativeWikiPage;
use Zotlabs\Lib\MarkdownSoap;
use Michelf\MarkdownExtra;
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
require_once('include/conversation.php'); require_once('include/conversation.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
class Wiki extends Controller {
class Wiki extends \Zotlabs\Web\Controller {
private $wiki = null; private $wiki = null;
@ -40,10 +45,14 @@ class Wiki extends \Zotlabs\Web\Controller {
return login(); return login();
} }
if(! feature_enabled(\App::$profile_uid,'wiki')) { if(! Apps::system_app_installed(App::$profile_uid, 'Wiki')) {
notice( t('Not found') . EOL); //Do not display any associated widgets at this point
return; App::$pdl = '';
}
$o = '<b>Wiki App (Not Installed):</b><br>';
$o .= t('Provide a wiki for your channel');
return $o;
}
if(! perm_is_allowed(\App::$profile_uid,get_observer_hash(),'view_wiki')) { if(! perm_is_allowed(\App::$profile_uid,get_observer_hash(),'view_wiki')) {
@ -95,7 +104,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$owner['channel_deny_gid']) $owner['channel_deny_gid'])
? 'lock' : 'unlock' ? 'lock' : 'unlock'
), ),
'acl' => populate_acl($owner_acl, false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_wiki')), 'acl' => populate_acl($owner_acl, false, PermissionDescription::fromGlobalPermission('view_wiki')),
'allow_cid' => acl2json($owner_acl['allow_cid']), 'allow_cid' => acl2json($owner_acl['allow_cid']),
'allow_gid' => acl2json($owner_acl['allow_gid']), 'allow_gid' => acl2json($owner_acl['allow_gid']),
'deny_cid' => acl2json($owner_acl['deny_cid']), 'deny_cid' => acl2json($owner_acl['deny_cid']),
@ -109,7 +118,7 @@ class Wiki extends \Zotlabs\Web\Controller {
} }
$is_owner = ((local_channel()) && (local_channel() == \App::$profile['profile_uid']) ? true : false); $is_owner = ((local_channel()) && (local_channel() == \App::$profile['profile_uid']) ? true : false);
//$o = profile_tabs($a, $is_owner, \App::$profile['channel_address']);
$o = ''; $o = '';
// Download a wiki // Download a wiki
@ -117,9 +126,9 @@ class Wiki extends \Zotlabs\Web\Controller {
if((argc() > 3) && (argv(2) === 'download') && (argv(3) === 'wiki')) { if((argc() > 3) && (argv(2) === 'download') && (argv(3) === 'wiki')) {
$resource_id = argv(4); $resource_id = argv(4);
$w = Zlib\NativeWiki::get_wiki($owner['channel_id'],$observer_hash,$resource_id); $w = NativeWiki::get_wiki($owner['channel_id'],$observer_hash,$resource_id);
// $w = Zlib\NativeWiki::get_wiki($owner,$observer_hash,$resource_id); // $w = NativeWiki::get_wiki($owner,$observer_hash,$resource_id);
if(! $w['htmlName']) { if(! $w['htmlName']) {
notice(t('Error retrieving wiki') . EOL); notice(t('Error retrieving wiki') . EOL);
} }
@ -157,9 +166,9 @@ class Wiki extends \Zotlabs\Web\Controller {
$content = html_entity_decode($iv['body'],ENT_COMPAT,'UTF-8'); $content = html_entity_decode($iv['body'],ENT_COMPAT,'UTF-8');
} }
elseif($iv['mimetype'] === 'text/markdown') { elseif($iv['mimetype'] === 'text/markdown') {
$content = html_entity_decode(Zlib\MarkdownSoap::unescape($iv['body']),ENT_COMPAT,'UTF-8'); $content = html_entity_decode(MarkdownSoap::unescape($iv['body']),ENT_COMPAT,'UTF-8');
} }
$fname = get_iconfig($iv['id'],'nwikipage','pagetitle') . Zlib\NativeWikiPage::get_file_ext($iv); $fname = get_iconfig($iv['id'],'nwikipage','pagetitle') . NativeWikiPage::get_file_ext($iv);
$zip->addFromString($fname,$content); $zip->addFromString($fname,$content);
$pages[] = $iv['mid']; $pages[] = $iv['mid'];
} }
@ -190,7 +199,7 @@ class Wiki extends \Zotlabs\Web\Controller {
switch(argc()) { switch(argc()) {
case 2: case 2:
$wikis = Zlib\NativeWiki::listwikis($owner, get_observer_hash()); $wikis = NativeWiki::listwikis($owner, get_observer_hash());
if($wikis) { if($wikis) {
$o .= replace_macros(get_markup_template('wikilist.tpl'), array( $o .= replace_macros(get_markup_template('wikilist.tpl'), array(
@ -256,7 +265,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$pageUrlName = urldecode($page_name); $pageUrlName = urldecode($page_name);
$langPageUrlName = urldecode(\App::$language . '/' . $page_name); $langPageUrlName = urldecode(\App::$language . '/' . $page_name);
$w = Zlib\NativeWiki::exists_by_name($owner['channel_id'], $wikiUrlName); $w = NativeWiki::exists_by_name($owner['channel_id'], $wikiUrlName);
if(! $w['resource_id']) { if(! $w['resource_id']) {
notice(t('Wiki not found') . EOL); notice(t('Wiki not found') . EOL);
@ -268,7 +277,7 @@ class Wiki extends \Zotlabs\Web\Controller {
if(! $wiki_owner) { if(! $wiki_owner) {
// Check for observer permissions // Check for observer permissions
$observer_hash = get_observer_hash(); $observer_hash = get_observer_hash();
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(! $perms['read']) { if(! $perms['read']) {
notice(t('Permission denied.') . EOL); notice(t('Permission denied.') . EOL);
goaway(z_root() . '/' . argv(0) . '/' . argv(1)); goaway(z_root() . '/' . argv(0) . '/' . argv(1));
@ -289,10 +298,10 @@ class Wiki extends \Zotlabs\Web\Controller {
$p = []; $p = [];
if(! $ignore_language) { if(! $ignore_language) {
$p = Zlib\NativeWikiPage::get_page_content(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $langPageUrlName)); $p = NativeWikiPage::get_page_content(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $langPageUrlName));
} }
if(! ($p && $p['success'])) { if(! ($p && $p['success'])) {
$p = Zlib\NativeWikiPage::get_page_content(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); $p = NativeWikiPage::get_page_content(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
} }
if(! ($p && $p['success'])) { if(! ($p && $p['success'])) {
$x = new \Zotlabs\Widget\Wiki_pages(); $x = new \Zotlabs\Widget\Wiki_pages();
@ -306,7 +315,7 @@ class Wiki extends \Zotlabs\Web\Controller {
//json_return_and_die(array('pages' => $page_list_html, 'message' => '', 'success' => true)); //json_return_and_die(array('pages' => $page_list_html, 'message' => '', 'success' => true));
notice( t('Error retrieving page content') . EOL); notice( t('Error retrieving page content') . EOL);
//goaway(z_root() . '/' . argv(0) . '/' . argv(1) ); //goaway(z_root() . '/' . argv(0) . '/' . argv(1) );
$renderedContent = Zlib\NativeWikiPage::convert_links($html, argv(0) . '/' . argv(1) . '/' . $wikiUrlName); $renderedContent = NativeWikiPage::convert_links($html, argv(0) . '/' . argv(1) . '/' . $wikiUrlName);
$showPageControls = $wiki_editor; $showPageControls = $wiki_editor;
} }
else { else {
@ -320,15 +329,15 @@ class Wiki extends \Zotlabs\Web\Controller {
// Render the Markdown-formatted page content in HTML // Render the Markdown-formatted page content in HTML
if($mimeType == 'text/bbcode') { if($mimeType == 'text/bbcode') {
$renderedContent = Zlib\NativeWikiPage::convert_links(zidify_links(smilies(bbcode($content))), argv(0) . '/' . argv(1) . '/' . $wikiUrlName); $renderedContent = NativeWikiPage::convert_links(zidify_links(smilies(bbcode($content))), argv(0) . '/' . argv(1) . '/' . $wikiUrlName);
} }
elseif($mimeType === 'text/plain') { elseif($mimeType === 'text/plain') {
$renderedContent = str_replace(["\n",' ',"\t"],[EOL,'&nbsp;','&nbsp;&nbsp;&nbsp;&nbsp;'],htmlentities($content,ENT_COMPAT,'UTF-8',false)); $renderedContent = str_replace(["\n",' ',"\t"],[EOL,'&nbsp;','&nbsp;&nbsp;&nbsp;&nbsp;'],htmlentities($content,ENT_COMPAT,'UTF-8',false));
} }
elseif($mimeType === 'text/markdown') { elseif($mimeType === 'text/markdown') {
$content = Zlib\MarkdownSoap::unescape($content); $content = MarkdownSoap::unescape($content);
$html = Zlib\NativeWikiPage::generate_toc(zidify_text(MarkdownExtra::defaultTransform(Zlib\NativeWikiPage::bbcode($content)))); $html = NativeWikiPage::generate_toc(zidify_text(MarkdownExtra::defaultTransform(NativeWikiPage::bbcode($content))));
$renderedContent = Zlib\NativeWikiPage::convert_links($html, argv(0) . '/' . argv(1) . '/' . $wikiUrlName); $renderedContent = NativeWikiPage::convert_links($html, argv(0) . '/' . argv(1) . '/' . $wikiUrlName);
} }
$showPageControls = $wiki_editor; $showPageControls = $wiki_editor;
} }
@ -413,23 +422,23 @@ class Wiki extends \Zotlabs\Web\Controller {
$content = $_POST['content']; $content = $_POST['content'];
$resource_id = $_POST['resource_id']; $resource_id = $_POST['resource_id'];
$w = Zlib\NativeWiki::get_wiki($owner['channel_id'],$observer_hash,$resource_id); $w = NativeWiki::get_wiki($owner['channel_id'],$observer_hash,$resource_id);
$wikiURL = argv(0) . '/' . argv(1) . '/' . $w['urlName']; $wikiURL = argv(0) . '/' . argv(1) . '/' . $w['urlName'];
$mimeType = $_POST['mimetype']; $mimeType = $_POST['mimetype'];
if($mimeType === 'text/bbcode') { if($mimeType === 'text/bbcode') {
$html = Zlib\NativeWikiPage::convert_links(zidify_links(smilies(bbcode($content))),$wikiURL); $html = NativeWikiPage::convert_links(zidify_links(smilies(bbcode($content))),$wikiURL);
} }
elseif($mimeType === 'text/markdown') { elseif($mimeType === 'text/markdown') {
$bb = Zlib\NativeWikiPage::bbcode($content); $bb = NativeWikiPage::bbcode($content);
$x = new ZLib\MarkdownSoap($bb); $x = new MarkdownSoap($bb);
$md = $x->clean(); $md = $x->clean();
$md = ZLib\MarkdownSoap::unescape($md); $md = MarkdownSoap::unescape($md);
$html = MarkdownExtra::defaultTransform($md); $html = MarkdownExtra::defaultTransform($md);
$html = Zlib\NativeWikiPage::generate_toc(zidify_text($html)); $html = NativeWikiPage::generate_toc(zidify_text($html));
$html = Zlib\NativeWikiPage::convert_links($html,$wikiURL); $html = NativeWikiPage::convert_links($html,$wikiURL);
} }
elseif($mimeType === 'text/plain') { elseif($mimeType === 'text/plain') {
$html = str_replace(["\n",' ',"\t"],[EOL,'&nbsp;','&nbsp;&nbsp;&nbsp;&nbsp;'],htmlentities($content,ENT_COMPAT,'UTF-8',false)); $html = str_replace(["\n",' ',"\t"],[EOL,'&nbsp;','&nbsp;&nbsp;&nbsp;&nbsp;'],htmlentities($content,ENT_COMPAT,'UTF-8',false));
@ -466,7 +475,7 @@ class Wiki extends \Zotlabs\Web\Controller {
return; //not reached return; //not reached
} }
$exists = Zlib\NativeWiki::exists_by_name($owner['channel_id'], $wiki['urlName']); $exists = NativeWiki::exists_by_name($owner['channel_id'], $wiki['urlName']);
if($exists['id']) { if($exists['id']) {
notice( t('A wiki with this name already exists.') . EOL); notice( t('A wiki with this name already exists.') . EOL);
goaway('/wiki'); goaway('/wiki');
@ -476,15 +485,15 @@ class Wiki extends \Zotlabs\Web\Controller {
// Get ACL for permissions // Get ACL for permissions
$acl = new \Zotlabs\Access\AccessList($owner); $acl = new \Zotlabs\Access\AccessList($owner);
$acl->set_from_array($_POST); $acl->set_from_array($_POST);
$r = Zlib\NativeWiki::create_wiki($owner, $observer_hash, $wiki, $acl); $r = NativeWiki::create_wiki($owner, $observer_hash, $wiki, $acl);
if($r['success']) { if($r['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$r['item_id'],$r['item']['resource_id']); NativeWiki::sync_a_wiki_item($owner['channel_id'],$r['item_id'],$r['item']['resource_id']);
$homePage = Zlib\NativeWikiPage::create_page($owner['channel_id'],$observer_hash,'Home', $r['item']['resource_id'], $wiki['mimeType']); $homePage = NativeWikiPage::create_page($owner['channel_id'],$observer_hash,'Home', $r['item']['resource_id'], $wiki['mimeType']);
if(! $homePage['success']) { if(! $homePage['success']) {
notice( t('Wiki created, but error creating Home page.')); notice( t('Wiki created, but error creating Home page.'));
goaway(z_root() . '/wiki/' . $nick . '/' . $wiki['urlName']); goaway(z_root() . '/wiki/' . $nick . '/' . $wiki['urlName']);
} }
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$homePage['item_id'],$r['item']['resource_id']); NativeWiki::sync_a_wiki_item($owner['channel_id'],$homePage['item_id'],$r['item']['resource_id']);
goaway(z_root() . '/wiki/' . $nick . '/' . $wiki['urlName'] . '/' . $homePage['page']['urlName']); goaway(z_root() . '/wiki/' . $nick . '/' . $wiki['urlName'] . '/' . $homePage['page']['urlName']);
} }
else { else {
@ -516,7 +525,7 @@ class Wiki extends \Zotlabs\Web\Controller {
return; //not reached return; //not reached
} }
$wiki = Zlib\NativeWiki::exists_by_name($owner['channel_id'], urldecode($arr['urlName'])); $wiki = NativeWiki::exists_by_name($owner['channel_id'], urldecode($arr['urlName']));
if($wiki['resource_id']) { if($wiki['resource_id']) {
@ -525,9 +534,9 @@ class Wiki extends \Zotlabs\Web\Controller {
$acl = new \Zotlabs\Access\AccessList($owner); $acl = new \Zotlabs\Access\AccessList($owner);
$acl->set_from_array($_POST); $acl->set_from_array($_POST);
$r = Zlib\NativeWiki::update_wiki($owner['channel_id'], $observer_hash, $arr, $acl); $r = NativeWiki::update_wiki($owner['channel_id'], $observer_hash, $arr, $acl);
if($r['success']) { if($r['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$r['item_id'],$r['item']['resource_id']); NativeWiki::sync_a_wiki_item($owner['channel_id'],$r['item_id'],$r['item']['resource_id']);
goaway(z_root() . '/wiki/' . $nick); goaway(z_root() . '/wiki/' . $nick);
} }
else { else {
@ -549,9 +558,9 @@ class Wiki extends \Zotlabs\Web\Controller {
json_return_and_die(array('message' => t('Wiki delete permission denied.'), 'success' => false)); json_return_and_die(array('message' => t('Wiki delete permission denied.'), 'success' => false));
} }
$resource_id = $_POST['resource_id']; $resource_id = $_POST['resource_id'];
$deleted = Zlib\NativeWiki::delete_wiki($owner['channel_id'],$observer_hash,$resource_id); $deleted = NativeWiki::delete_wiki($owner['channel_id'],$observer_hash,$resource_id);
if ($deleted['success']) { if ($deleted['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$deleted['item_id'],$resource_id); NativeWiki::sync_a_wiki_item($owner['channel_id'],$deleted['item_id'],$resource_id);
json_return_and_die(array('message' => '', 'success' => true)); json_return_and_die(array('message' => '', 'success' => true));
} }
else { else {
@ -570,7 +579,7 @@ class Wiki extends \Zotlabs\Web\Controller {
// Determine if observer has permission to create a page // Determine if observer has permission to create a page
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash, $mimetype); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash, $mimetype);
if(! $perms['write']) { if(! $perms['write']) {
logger('Wiki write permission denied. ' . EOL); logger('Wiki write permission denied. ' . EOL);
json_return_and_die(array('success' => false)); json_return_and_die(array('success' => false));
@ -585,10 +594,10 @@ class Wiki extends \Zotlabs\Web\Controller {
json_return_and_die(array('message' => 'Error creating page. Invalid name (' . print_r($_POST,true) . ').', 'success' => false)); json_return_and_die(array('message' => 'Error creating page. Invalid name (' . print_r($_POST,true) . ').', 'success' => false));
} }
$page = Zlib\NativeWikiPage::create_page($owner['channel_id'],$observer_hash, $name, $resource_id, $mimetype); $page = NativeWikiPage::create_page($owner['channel_id'],$observer_hash, $name, $resource_id, $mimetype);
if($page['item_id']) { if($page['item_id']) {
$commit = Zlib\NativeWikiPage::commit(array( $commit = NativeWikiPage::commit(array(
'commit_msg' => t('New page created'), 'commit_msg' => t('New page created'),
'resource_id' => $resource_id, 'resource_id' => $resource_id,
'channel_id' => $owner['channel_id'], 'channel_id' => $owner['channel_id'],
@ -597,7 +606,7 @@ class Wiki extends \Zotlabs\Web\Controller {
)); ));
if($commit['success']) { if($commit['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id); NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id);
json_return_and_die(array('url' => '/' . argv(0) . '/' . argv(1) . '/' . urlencode($page['wiki']['urlName']) . '/' . urlencode($page['page']['urlName']), 'success' => true)); json_return_and_die(array('url' => '/' . argv(0) . '/' . argv(1) . '/' . urlencode($page['wiki']['urlName']) . '/' . urlencode($page['page']['urlName']), 'success' => true));
} }
else { else {
@ -616,7 +625,7 @@ class Wiki extends \Zotlabs\Web\Controller {
if((argc() === 5) && (argv(2) === 'get') && (argv(3) === 'page') && (argv(4) === 'list')) { if((argc() === 5) && (argv(2) === 'get') && (argv(3) === 'page') && (argv(4) === 'list')) {
$resource_id = $_POST['resource_id']; // resource_id for wiki in db $resource_id = $_POST['resource_id']; // resource_id for wiki in db
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(!$perms['read']) { if(!$perms['read']) {
logger('Wiki read permission denied.' . EOL); logger('Wiki read permission denied.' . EOL);
json_return_and_die(array('pages' => null, 'message' => 'Permission denied.', 'success' => false)); json_return_and_die(array('pages' => null, 'message' => 'Permission denied.', 'success' => false));
@ -648,16 +657,16 @@ class Wiki extends \Zotlabs\Web\Controller {
} }
// Determine if observer has permission to save content // Determine if observer has permission to save content
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(! $perms['write']) { if(! $perms['write']) {
logger('Wiki write permission denied. ' . EOL); logger('Wiki write permission denied. ' . EOL);
json_return_and_die(array('success' => false)); json_return_and_die(array('success' => false));
} }
$saved = Zlib\NativeWikiPage::save_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName, 'content' => $content)); $saved = NativeWikiPage::save_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName, 'content' => $content));
if($saved['success']) { if($saved['success']) {
$commit = Zlib\NativeWikiPage::commit(array( $commit = NativeWikiPage::commit(array(
'commit_msg' => $commitMsg, 'commit_msg' => $commitMsg,
'pageUrlName' => $pageUrlName, 'pageUrlName' => $pageUrlName,
'resource_id' => $resource_id, 'resource_id' => $resource_id,
@ -667,7 +676,7 @@ class Wiki extends \Zotlabs\Web\Controller {
)); ));
if($commit['success']) { if($commit['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id); NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id);
json_return_and_die(array('message' => 'Wiki git repo commit made', 'success' => true)); json_return_and_die(array('message' => 'Wiki git repo commit made', 'success' => true));
} }
else { else {
@ -688,7 +697,7 @@ class Wiki extends \Zotlabs\Web\Controller {
// Determine if observer has permission to read content // Determine if observer has permission to read content
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(! $perms['read']) { if(! $perms['read']) {
logger('Wiki read permission denied.' . EOL); logger('Wiki read permission denied.' . EOL);
json_return_and_die(array('historyHTML' => '', 'message' => 'Permission denied.', 'success' => false)); json_return_and_die(array('historyHTML' => '', 'message' => 'Permission denied.', 'success' => false));
@ -720,15 +729,15 @@ class Wiki extends \Zotlabs\Web\Controller {
json_return_and_die(array('success' => false)); json_return_and_die(array('success' => false));
} }
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(! $perms['write']) { if(! $perms['write']) {
logger('Wiki write permission denied. ' . EOL); logger('Wiki write permission denied. ' . EOL);
json_return_and_die(array('success' => false)); json_return_and_die(array('success' => false));
} }
$deleted = Zlib\NativeWikiPage::delete_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); $deleted = NativeWikiPage::delete_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
if($deleted['success']) { if($deleted['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id); NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id);
json_return_and_die(array('message' => 'Wiki git repo commit made', 'success' => true)); json_return_and_die(array('message' => 'Wiki git repo commit made', 'success' => true));
} }
else { else {
@ -744,13 +753,13 @@ class Wiki extends \Zotlabs\Web\Controller {
$commitHash = $_POST['commitHash']; $commitHash = $_POST['commitHash'];
// Determine if observer has permission to revert pages // Determine if observer has permission to revert pages
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(! $perms['write']) { if(! $perms['write']) {
logger('Wiki write permission denied.' . EOL); logger('Wiki write permission denied.' . EOL);
json_return_and_die(array('success' => false)); json_return_and_die(array('success' => false));
} }
$reverted = Zlib\NativeWikiPage::revert_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'commitHash' => $commitHash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); $reverted = NativeWikiPage::revert_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'commitHash' => $commitHash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
if($reverted['success']) { if($reverted['success']) {
json_return_and_die(array('content' => $reverted['content'], 'message' => '', 'success' => true)); json_return_and_die(array('content' => $reverted['content'], 'message' => '', 'success' => true));
} else { } else {
@ -766,13 +775,13 @@ class Wiki extends \Zotlabs\Web\Controller {
$currentCommit = $_POST['currentCommit']; $currentCommit = $_POST['currentCommit'];
// Determine if observer has permission to revert pages // Determine if observer has permission to revert pages
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(!$perms['read']) { if(!$perms['read']) {
logger('Wiki read permission denied.' . EOL); logger('Wiki read permission denied.' . EOL);
json_return_and_die(array('success' => false)); json_return_and_die(array('success' => false));
} }
$compare = Zlib\NativeWikiPage::compare_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'currentCommit' => $currentCommit, 'compareCommit' => $compareCommit, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); $compare = NativeWikiPage::compare_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'currentCommit' => $currentCommit, 'compareCommit' => $compareCommit, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
if($compare['success']) { if($compare['success']) {
$diffHTML = '<table class="text-center" width="100%"><tr><td class="lead" width="50%">' . t('Current Revision') . '</td><td class="lead" width="50%">' . t('Selected Revision') . '</td></tr></table>' . $compare['diff']; $diffHTML = '<table class="text-center" width="100%"><tr><td class="lead" width="50%">' . t('Current Revision') . '</td><td class="lead" width="50%">' . t('Selected Revision') . '</td></tr></table>' . $compare['diff'];
json_return_and_die(array('diff' => $diffHTML, 'message' => '', 'success' => true)); json_return_and_die(array('diff' => $diffHTML, 'message' => '', 'success' => true));
@ -794,16 +803,16 @@ class Wiki extends \Zotlabs\Web\Controller {
} }
// Determine if observer has permission to rename pages // Determine if observer has permission to rename pages
$perms = Zlib\NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash); $perms = NativeWiki::get_permissions($resource_id, intval($owner['channel_id']), $observer_hash);
if(! $perms['write']) { if(! $perms['write']) {
logger('Wiki write permission denied. ' . EOL); logger('Wiki write permission denied. ' . EOL);
json_return_and_die(array('success' => false)); json_return_and_die(array('success' => false));
} }
$renamed = Zlib\NativeWikiPage::rename_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName, 'pageNewName' => $pageNewName)); $renamed = NativeWikiPage::rename_page(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName, 'pageNewName' => $pageNewName));
if($renamed['success']) { if($renamed['success']) {
$commit = Zlib\NativeWikiPage::commit(array( $commit = NativeWikiPage::commit(array(
'channel_id' => $owner['channel_id'], 'channel_id' => $owner['channel_id'],
'commit_msg' => 'Renamed ' . urldecode($pageUrlName) . ' to ' . $renamed['page']['htmlName'], 'commit_msg' => 'Renamed ' . urldecode($pageUrlName) . ' to ' . $renamed['page']['htmlName'],
'resource_id' => $resource_id, 'resource_id' => $resource_id,
@ -811,7 +820,7 @@ class Wiki extends \Zotlabs\Web\Controller {
'pageUrlName' => $pageNewName 'pageUrlName' => $pageNewName
)); ));
if($commit['success']) { if($commit['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id); NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id'],$resource_id);
json_return_and_die(array('name' => $renamed['page'], 'message' => 'Wiki git repo commit made', 'success' => true)); json_return_and_die(array('name' => $renamed['page'], 'message' => 'Wiki git repo commit made', 'success' => true));
} }
else { else {

View File

@ -441,7 +441,7 @@ class Comanche {
$path = 'view/js/jquery.js'; $path = 'view/js/jquery.js';
break; break;
case 'bootstrap': case 'bootstrap':
$path = 'library/bootstrap/js/bootstrap.min.js'; $path = 'vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js';
break; break;
case 'foundation': case 'foundation':
$path = 'library/foundation/js/foundation.js'; $path = 'library/foundation/js/foundation.js';
@ -466,7 +466,7 @@ class Comanche {
switch($s) { switch($s) {
case 'bootstrap': case 'bootstrap':
$path = 'library/bootstrap/css/bootstrap.min.css'; $path = 'vendor/twbs/bootstrap/dist/css/bootstrap.min.css';
break; break;
case 'foundation': case 'foundation':
$path = 'library/foundation/css/foundation.min.css'; $path = 'library/foundation/css/foundation.min.css';

View File

@ -7,9 +7,9 @@ class _1218 {
function run() { function run() {
if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) { if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
$r1 = q("ALTER TABLE hubloc add hubloc_id_url text NOT NULL"); $r1 = q("ALTER TABLE hubloc add hubloc_id_url text NOT NULL DEFAULT ''");
$r2 = q("create index \"hubloc_id_url\" on hubloc (\"hubloc_id_url\")"); $r2 = q("create index \"hubloc_id_url\" on hubloc (\"hubloc_id_url\")");
$r3 = q("ALTER TABLE hubloc add hubloc_site_id text NOT NULL"); $r3 = q("ALTER TABLE hubloc add hubloc_site_id text NOT NULL DEFAULT ''");
$r4 = q("create index \"hubloc_site_id\" on hubloc (\"hubloc_site_id\")"); $r4 = q("create index \"hubloc_site_id\" on hubloc (\"hubloc_site_id\")");
$r = $r1 && $r2 && $r3 && $r4; $r = $r1 && $r2 && $r3 && $r4;

26
Zotlabs/Update/_1219.php Normal file
View File

@ -0,0 +1,26 @@
<?php
namespace Zotlabs\Update;
class _1219 {
function run() {
q("START TRANSACTION");
$r = q("DELETE FROM xchan WHERE
xchan_hash like '%s' AND
xchan_network = 'activitypub'",
dbesc(z_root()) . '%'
);
if($r) {
q("COMMIT");
return UPDATE_SUCCESS;
}
else {
q("ROLLBACK");
return UPDATE_FAILED;
}
}
}

47
Zotlabs/Update/_1220.php Normal file
View File

@ -0,0 +1,47 @@
<?php
namespace Zotlabs\Update;
class _1220 {
function run() {
if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
$r1 = q("CREATE TABLE listeners (
id serial NOT NULL,
target_id text NOT NULL,
portable_id text NOT NULL,
ltype smallint NOT NULL DEFAULT '0',
PRIMARY KEY (id)
)");
$r2 = q("create index \"target_id_idx\" on listeners (\"target_id\")");
$r3 = q("create index \"portable_id_idx\" on listeners (\"portable_id\")");
$r4 = q("create index \"ltype_idx\" on listeners (\"ltype\")");
$r = $r1 && $r2 && $r3 && $r4;
}
if(ACTIVE_DBTYPE == DBTYPE_MYSQL) {
$r = q("CREATE TABLE IF NOT EXISTS listeners (
id int(11) NOT NULL AUTO_INCREMENT,
target_id varchar(191) NOT NULL DEFAULT '',
portable_id varchar(191) NOT NULL DEFAULT '',
ltype int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (id),
KEY target_id (target_id),
KEY portable_id (portable_id),
KEY ltype (ltype)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
}
if($r) {
return UPDATE_SUCCESS;
}
return UPDATE_FAILED;
}
}

25
Zotlabs/Update/_1221.php Normal file
View File

@ -0,0 +1,25 @@
<?php
namespace Zotlabs\Update;
class _1221 {
function run() {
q("START TRANSACTION");
$r1 = q("ALTER table " . TQUOT . 'groups' . TQUOT . " rename to pgrp ");
$r2 = q("ALTER table " . TQUOT . 'group_member' . TQUOT . " rename to pgrp_member ");
if($r1 && $r2) {
q("COMMIT");
return UPDATE_SUCCESS;
}
q("ROLLBACK");
return UPDATE_FAILED;
}
}

View File

@ -54,8 +54,19 @@ class HttpMeta {
} }
} }
if($this->check_required()) { if($this->check_required()) {
$arrayproperties = [ 'og:image' ];
foreach($this->og as $k => $v) { foreach($this->og as $k => $v) {
$o .= '<meta property="' . $k . '" content="' . urlencode($v) . '" />' . "\r\n" ; if (in_array($k,$arrayproperties)) {
if (is_array($v)) {
foreach ($v as $v2) {
$o .= '<meta property="' . $k . '" content="' . $v2 . '" />' . "\r\n" ;
}
} else {
$o .= '<meta property="' . $k . '" content="' . $v . '" />' . "\r\n" ;
}
} else {
$o .= '<meta property="' . $k . '" content="' . $v . '" />' . "\r\n" ;
}
} }
} }
if($o) if($o)
@ -63,4 +74,4 @@ class HttpMeta {
return $o; return $o;
} }
} }

View File

@ -2,6 +2,8 @@
namespace Zotlabs\Web; namespace Zotlabs\Web;
use Zotlabs\Extend\Route;
/* /*
* @brief * @brief
* *
@ -31,9 +33,23 @@ class SubModule {
$filename = 'Zotlabs/Module/' . ucfirst(argv(0)) . '/'. ucfirst(argv($whicharg)) . '.php'; $filename = 'Zotlabs/Module/' . ucfirst(argv(0)) . '/'. ucfirst(argv($whicharg)) . '.php';
$modname = '\\Zotlabs\\Module\\' . ucfirst(argv(0)) . '\\' . ucfirst(argv($whicharg)); $modname = '\\Zotlabs\\Module\\' . ucfirst(argv(0)) . '\\' . ucfirst(argv($whicharg));
if(file_exists($filename)) { if(file_exists($filename)) {
$this->controller = new $modname(); $this->controller = new $modname();
} }
$routes = Route::get();
if($routes) {
foreach($routes as $route) {
if(is_array($route) && strtolower($route[1]) === strtolower(argv(0)) . '/' . strtolower(argv($whicharg))) {
include_once($route[0]);
if(class_exists($modname)) {
$this->controller = new $modname;
}
}
}
}
} }
/** /**
@ -43,6 +59,7 @@ class SubModule {
* @return boolean|mixed * @return boolean|mixed
*/ */
function call($method) { function call($method) {
if(! $this->controller) if(! $this->controller)
return false; return false;

View File

@ -2,6 +2,8 @@
namespace Zotlabs\Widget; namespace Zotlabs\Widget;
use Zotlabs\Lib\Apps;
class Activity_filter { class Activity_filter {
function widget($arr) { function widget($arr) {
@ -44,8 +46,8 @@ class Activity_filter {
]; ];
} }
if(feature_enabled(local_channel(),'groups')) { if(Apps::system_app_installed(local_channel(), 'Privacy Groups')) {
$groups = q("SELECT * FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC", $groups = q("SELECT * FROM pgrp WHERE deleted = 0 AND uid = %d ORDER BY gname ASC",
intval(local_channel()) intval(local_channel())
); );
@ -180,7 +182,7 @@ class Activity_filter {
$arr = ['tabs' => $tabs]; $arr = ['tabs' => $tabs];
call_hooks('network_tabs', $arr); call_hooks('activity_filter', $arr);
$o = ''; $o = '';

View File

@ -110,7 +110,7 @@ class Activity_order {
$arr = ['tabs' => $tabs]; $arr = ['tabs' => $tabs];
call_hooks('network_tabs', $arr); call_hooks('activity_order', $arr);
$o = ''; $o = '';

View File

@ -10,9 +10,9 @@ class Appstore {
return replace_macros(get_markup_template('appstore.tpl'), [ return replace_macros(get_markup_template('appstore.tpl'), [
'$title' => t('App Collections'), '$title' => t('App Collections'),
'$options' => [ '$options' => [
[ z_root() . '/apps/available', t('Available Apps'), $store ], [ z_root() . '/apps', t('Installed apps'), 1 - $store ],
[ z_root() . '/apps', t('Installed apps'), 1 - $store ] [ z_root() . '/apps/available', t('Available Apps'), $store ]
] ]
]); ]);
} }
} }

View File

@ -2,6 +2,9 @@
namespace Zotlabs\Widget; namespace Zotlabs\Widget;
use App;
use Zotlabs\Lib\Apps;
require_once('include/contact_widgets.php'); require_once('include/contact_widgets.php');
class Categories { class Categories {
@ -10,22 +13,22 @@ class Categories {
$cards = ((array_key_exists('cards',$arr) && $arr['cards']) ? true : false); $cards = ((array_key_exists('cards',$arr) && $arr['cards']) ? true : false);
if(($cards) && (! feature_enabled(\App::$profile['profile_uid'],'cards'))) if(($cards) && (! Apps::system_app_installed(App::$profile['profile_uid'], 'Cards')))
return ''; return '';
$articles = ((array_key_exists('articles',$arr) && $arr['articles']) ? true : false); $articles = ((array_key_exists('articles',$arr) && $arr['articles']) ? true : false);
if(($articles) && (! feature_enabled(\App::$profile['profile_uid'],'articles'))) if(($articles) && (! feature_enabled(App::$profile['profile_uid'],'articles')))
return ''; return '';
if((! \App::$profile['profile_uid']) if((! App::$profile['profile_uid'])
|| (! perm_is_allowed(\App::$profile['profile_uid'],get_observer_hash(),(($cards || $articles) ? 'view_pages' : 'view_stream')))) { || (! perm_is_allowed(App::$profile['profile_uid'],get_observer_hash(),(($cards || $articles) ? 'view_pages' : 'view_stream')))) {
return ''; return '';
} }
$cat = ((x($_REQUEST,'cat')) ? htmlspecialchars($_REQUEST['cat'],ENT_COMPAT,'UTF-8') : ''); $cat = ((x($_REQUEST,'cat')) ? htmlspecialchars($_REQUEST['cat'],ENT_COMPAT,'UTF-8') : '');
$srchurl = (($cards) ? \App::$argv[0] . '/' . \App::$argv[1] : \App::$query_string); $srchurl = (($cards) ? App::$argv[0] . '/' . App::$argv[1] : App::$query_string);
$srchurl = rtrim(preg_replace('/cat\=[^\&].*?(\&|$)/is','',$srchurl),'&'); $srchurl = rtrim(preg_replace('/cat\=[^\&].*?(\&|$)/is','',$srchurl),'&');
$srchurl = str_replace(array('?f=','&f='),array('',''),$srchurl); $srchurl = str_replace(array('?f=','&f='),array('',''),$srchurl);

View File

@ -21,9 +21,9 @@ class Cover_photo {
return ''; return '';
// only show cover photos once per login session // only show cover photos once per login session
$hide_cover = false;
if(array_key_exists('channels_visited',$_SESSION) && is_array($_SESSION['channels_visited']) && in_array($channel_id,$_SESSION['channels_visited'])) { if(array_key_exists('channels_visited',$_SESSION) && is_array($_SESSION['channels_visited']) && in_array($channel_id,$_SESSION['channels_visited'])) {
return EMPTY_STR; $hide_cover = true;
} }
if(! array_key_exists('channels_visited',$_SESSION)) { if(! array_key_exists('channels_visited',$_SESSION)) {
$_SESSION['channels_visited'] = []; $_SESSION['channels_visited'] = [];
@ -55,6 +55,7 @@ class Cover_photo {
$c = get_cover_photo($channel_id,'html'); $c = get_cover_photo($channel_id,'html');
if($c) { if($c) {
$c = str_replace('src=', 'data-src=', $c);
$photo_html = (($style) ? str_replace('alt=',' style="' . $style . '" alt=',$c) : $c); $photo_html = (($style) ? str_replace('alt=',' style="' . $style . '" alt=',$c) : $c);
$o = replace_macros(get_markup_template('cover_photo_widget.tpl'),array( $o = replace_macros(get_markup_template('cover_photo_widget.tpl'),array(
@ -62,6 +63,7 @@ class Cover_photo {
'$title' => $title, '$title' => $title,
'$subtitle' => $subtitle, '$subtitle' => $subtitle,
'$hovertitle' => t('Click to show more'), '$hovertitle' => t('Click to show more'),
'$hide_cover' => $hide_cover
)); ));
} }
return $o; return $o;

View File

@ -17,7 +17,14 @@ class Newmember {
if(! $a) if(! $a)
return EMPTY_STR; return EMPTY_STR;
if(! feature_enabled(local_channel(),'start_menu')) if($a['account_created'] > datetime_convert('','','now - 60 days')) {
$enabled = get_pconfig(local_channel(), 'system', 'start_menu', 1);
}
else {
$enabled = get_pconfig(local_channel(), 'system', 'start_menu', 0);
}
if(! $enabled)
return EMPTY_STR; return EMPTY_STR;
$options = [ $options = [

View File

@ -2,20 +2,26 @@
namespace Zotlabs\Widget; namespace Zotlabs\Widget;
use Zotlabs\Lib\Apps;
class Notes { class Notes {
function widget($arr) { function widget($arr) {
if(! local_channel()) if(! local_channel())
return ''; return EMPTY_STR;
if(! feature_enabled(local_channel(),'private_notes'))
return ''; if(! Apps::system_app_installed(local_channel(), 'Notes'))
return EMPTY_STR;
$text = get_pconfig(local_channel(),'notes','text'); $text = get_pconfig(local_channel(),'notes','text');
$o = replace_macros(get_markup_template('notes.tpl'), array( $tpl = get_markup_template('notes.tpl');
$o = replace_macros($tpl, array(
'$banner' => t('Notes'), '$banner' => t('Notes'),
'$text' => $text, '$text' => $text,
'$save' => t('Save'), '$save' => t('Save'),
'$app' => ((isset($arr['app'])) ? true : false)
)); ));
return $o; return $o;

View File

@ -45,19 +45,6 @@ class Settings_menu {
); );
if(get_account_techlevel() > 0 && get_features()) {
$tabs[] = array(
'label' => t('Additional features'),
'url' => z_root().'/settings/features',
'selected' => ((argv(1) === 'features') ? 'active' : ''),
);
}
$tabs[] = array(
'label' => t('Addon settings'),
'url' => z_root().'/settings/featured',
'selected' => ((argv(1) === 'featured') ? 'active' : ''),
);
$tabs[] = array( $tabs[] = array(
'label' => t('Display settings'), 'label' => t('Display settings'),
@ -65,6 +52,12 @@ class Settings_menu {
'selected' => ((argv(1) === 'display') ? 'active' : ''), 'selected' => ((argv(1) === 'display') ? 'active' : ''),
); );
$tabs[] = array(
'label' => t('Addon settings'),
'url' => z_root().'/settings/featured',
'selected' => ((argv(1) === 'featured') ? 'active' : ''),
);
if($hublocs) { if($hublocs) {
$tabs[] = array( $tabs[] = array(
'label' => t('Manage locations'), 'label' => t('Manage locations'),
@ -79,39 +72,6 @@ class Settings_menu {
'selected' => '' 'selected' => ''
); );
if(feature_enabled(local_channel(),'oauth_clients')) {
$tabs[] = array(
'label' => t('OAuth1 apps'),
'url' => z_root() . '/settings/oauth',
'selected' => ((argv(1) === 'oauth') ? 'active' : ''),
);
}
if(feature_enabled(local_channel(),'oauth2_clients')) {
$tabs[] = array(
'label' => t('OAuth2 apps'),
'url' => z_root() . '/settings/oauth2',
'selected' => ((argv(1) === 'oauth2') ? 'active' : ''),
);
}
if(feature_enabled(local_channel(),'access_tokens')) {
$tabs[] = array(
'label' => t('Guest Access Tokens'),
'url' => z_root() . '/settings/tokens',
'selected' => ((argv(1) === 'tokens') ? 'active' : ''),
);
}
if(feature_enabled(local_channel(),'permcats')) {
$tabs[] = array(
'label' => t('Permission Categories'),
'url' => z_root() . '/settings/permcats',
'selected' => ((argv(1) === 'permcats') ? 'active' : ''),
);
}
if($role === false || $role === 'custom') { if($role === false || $role === 'custom') {
$tabs[] = array( $tabs[] = array(
'label' => t('Connection Default Permissions'), 'label' => t('Connection Default Permissions'),
@ -120,22 +80,6 @@ class Settings_menu {
); );
} }
if(feature_enabled(local_channel(),'premium_channel')) {
$tabs[] = array(
'label' => t('Premium Channel Settings'),
'url' => z_root() . '/connect/' . $channel['channel_address'],
'selected' => ''
);
}
if(feature_enabled(local_channel(),'channel_sources')) {
$tabs[] = array(
'label' => t('Channel Sources'),
'url' => z_root() . '/sources',
'selected' => ''
);
}
$tabtpl = get_markup_template("generic_links_widget.tpl"); $tabtpl = get_markup_template("generic_links_widget.tpl");
return replace_macros($tabtpl, array( return replace_macros($tabtpl, array(
'$title' => t('Settings'), '$title' => t('Settings'),
@ -144,4 +88,4 @@ class Settings_menu {
)); ));
} }
} }

View File

@ -1,6 +1,6 @@
version: 1.2 version: 1.3
url: $baseurl/articles/$nick url: $baseurl/articles/$nick
name: Articles name: Articles
requires: local_channel, articles requires: local_channel
photo: icon:file-text-o photo: icon:file-text-o
categories: nav_featured_app, Productivity categories: nav_featured_app, Productivity

View File

@ -1,5 +1,5 @@
version: 1 version: 1.1
url: $baseurl/cdav/calendar url: $baseurl/cdav/calendar, $baseurl/settings/calendar
requires: local_channel requires: local_channel
name: CalDAV name: CalDAV
photo: icon:calendar photo: icon:calendar

View File

@ -1,6 +1,6 @@
version: 1.1 version: 1.2
url: $baseurl/cards/$nick url: $baseurl/cards/$nick
name: Cards name: Cards
requires: local_channel, cards requires: local_channel
photo: icon:list photo: icon:list
categories: nav_featured_app, Productivity categories: nav_featured_app, Productivity

View File

@ -1,5 +1,5 @@
version: 1 version: 1.1
url: $baseurl/channel/$nick url: $baseurl/channel/$nick, $baseurl/settings/channel_home
requires: local_channel requires: local_channel
name: Channel Home name: Channel Home
photo: icon:home photo: icon:home

View File

@ -1,6 +1,6 @@
version: 1 version: 1.1
url: $baseurl/chat/$nick url: $baseurl/chat/$nick
requires: local_channel, ajaxchat requires: local_channel
name: My Chatrooms name: Chatrooms
photo: icon:comments-o photo: icon:comments-o
categories: Productivity categories: Productivity

View File

@ -1,5 +1,5 @@
version: 1 version: 1.1
url: $baseurl/connections url: $baseurl/connections, $baseurl/settings/connections
requires: local_channel requires: local_channel
name: Connections name: Connections
photo: icon:users photo: icon:users

View File

@ -1,5 +1,5 @@
version: 1 version: 1.1
url: $baseurl/directory url: $baseurl/directory, $baseurl/settings/directory
name: Directory name: Directory
photo: icon:sitemap photo: icon:sitemap
categories: nav_featured_app, Networking categories: nav_featured_app, Networking

View File

@ -1,5 +1,5 @@
version: 1 version: 1.1
url: $baseurl/events url: $baseurl/events, $baseurl/settings/events
requires: local_channel requires: local_channel
name: Events name: Events
photo: icon:calendar photo: icon:calendar

View File

@ -1,5 +1,5 @@
version: 1 version: 1.1
url: $baseurl/network url: $baseurl/network, $baseurl/settings/network
requires: local_channel requires: local_channel
name: Grid name: Grid
photo: icon:th photo: icon:th

6
app/notes.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/notes
requires: local_channel
name: Notes
photo: icon:sticky-note-o
categories: Personal, Productivity

6
app/oauth.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/oauth
requires: local_channel
name: OAuth Apps Manager
photo: icon:chevron-circle-up
categories: Access Control

6
app/oauth2.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/oauth2
requires: local_channel
name: OAuth2 Apps Manager
photo: icon:chevron-circle-up
categories: Access Control

6
app/pdledit.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/pdledit
requires: local_channel
name: PDL Editor
photo: icon:object-group
categories: Appearance

6
app/permcats.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/permcats
requires: local_channel
name: Permission Categories
photo: icon:unlock-alt
categories: Access Control

View File

@ -1,5 +1,5 @@
version: 1 version: 1.1
url: $baseurl/photos/$nick url: $baseurl/photos/$nick, $baseurl/settings/photos
requires: local_channel requires: local_channel
name: Photos name: Photos
photo: icon:photo photo: icon:photo

6
app/premium_channel.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/connect/$nick
requires: local_channel
name: Premium Channel
photo: icon:check-circle-o
categories: Networking

6
app/sources.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/sources
requires: local_channel
name: Channel Sources
photo: icon:commenting-o
categories: Networking

6
app/tokens.apd Normal file
View File

@ -0,0 +1,6 @@
version: 1
url: $baseurl/tokens
requires: local_channel
name: Guest Access
photo: icon:user-secret
categories: Access Control

View File

@ -1,6 +1,6 @@
version: 1 version: 1.1
url: $baseurl/webpages/$nick url: $baseurl/webpages/$nick
requires: local_channel, webpages requires: local_channel
name: Webpages name: Webpages
photo: icon:newspaper-o photo: icon:newspaper-o
categories: nav_featured_app, Productivity categories: nav_featured_app, Productivity

View File

@ -1,6 +1,6 @@
version: 1 version: 1.1
url: $baseurl/wiki/$nick url: $baseurl/wiki/$nick
requires: local_channel, wiki requires: local_channel
name: Wiki name: Wiki
photo: icon:pencil-square-o photo: icon:pencil-square-o
categories: nav_featured_app, Productivity categories: nav_featured_app, Productivity

View File

@ -50,11 +50,11 @@ require_once('include/attach.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'STD_VERSION', '3.7.1' ); define ( 'STD_VERSION', '3.7.4' );
define ( 'ZOT_REVISION', '6.0a' ); define ( 'ZOT_REVISION', '6.0a' );
define ( 'DB_UPDATE_VERSION', 1218 ); define ( 'DB_UPDATE_VERSION', 1221 );
define ( 'PROJECT_BASE', __DIR__ ); define ( 'PROJECT_BASE', __DIR__ );
@ -424,6 +424,7 @@ define ( 'TERM_BOOKMARK', 8 );
define ( 'TERM_HIERARCHY', 9 ); define ( 'TERM_HIERARCHY', 9 );
define ( 'TERM_COMMUNITYTAG', 10 ); define ( 'TERM_COMMUNITYTAG', 10 );
define ( 'TERM_FORUM', 11 ); define ( 'TERM_FORUM', 11 );
define ( 'TERM_EMOJI', 12 );
define ( 'TERM_OBJ_POST', 1 ); define ( 'TERM_OBJ_POST', 1 );
define ( 'TERM_OBJ_PHOTO', 2 ); define ( 'TERM_OBJ_PHOTO', 2 );
@ -1118,8 +1119,12 @@ class App {
if(! x(self::$page,'title')) if(! x(self::$page,'title'))
self::$page['title'] = self::$config['system']['sitename']; self::$page['title'] = self::$config['system']['sitename'];
if(! self::$meta->get_field('og:title')) $pagemeta = [ 'og:title' => self::$page['title'] ];
self::$meta->set('og:title',self::$page['title']);
call_hooks('page_meta',$pagemeta);
foreach ($pagemeta as $metaproperty => $metavalue) {
self::$meta->set($metaproperty,$metavalue);
}
self::$meta->set('generator', Zotlabs\Lib\System::get_platform_name()); self::$meta->set('generator', Zotlabs\Lib\System::get_platform_name());

View File

@ -37,7 +37,9 @@
"pear/text_languagedetect": "^1.0", "pear/text_languagedetect": "^1.0",
"commerceguys/intl": "~0.7", "commerceguys/intl": "~0.7",
"lukasreschke/id3parser": "^0.0.1", "lukasreschke/id3parser": "^0.0.1",
"smarty/smarty": "~3.1" "smarty/smarty": "~3.1",
"ramsey/uuid": "^3.8",
"twbs/bootstrap": "4.1.3"
}, },
"require-dev" : { "require-dev" : {
"phpunit/phpunit" : "@stable", "phpunit/phpunit" : "@stable",

Some files were not shown because too many files have changed in this diff Show More