Merge remote-tracking branch 'upstream/dev' into wiki
This commit is contained in:
commit
d554681174
2
.gitignore
vendored
2
.gitignore
vendored
@ -14,6 +14,8 @@
|
||||
*.rej
|
||||
# OSX .DS_Store files
|
||||
.DS_Store
|
||||
# version scripts (repo master only)
|
||||
.version*
|
||||
Thumbs.db
|
||||
|
||||
|
||||
|
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2010-2016 Hubzilla
|
||||
Copyright (c) 2010-2016 the Hubzilla Community
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
@ -21,7 +21,6 @@ class Cron_weekly {
|
||||
require_once('include/hubloc.php');
|
||||
prune_hub_reinstalls();
|
||||
|
||||
require_once('include/Contact.php');
|
||||
mark_orphan_hubsxchans();
|
||||
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
namespace Zotlabs\Daemon;
|
||||
|
||||
require_once('include/zot.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
|
||||
class Externals {
|
||||
|
@ -22,9 +22,8 @@ class Gprobe {
|
||||
);
|
||||
|
||||
if(! $r) {
|
||||
$x = zot_finger($url,null);
|
||||
if($x['success']) {
|
||||
$j = json_decode($x['body'],true);
|
||||
$j = \Zotlabs\Zot\Finger::run($url,null);
|
||||
if($j['success']) {
|
||||
$y = import_xchan($j);
|
||||
}
|
||||
}
|
||||
|
@ -72,8 +72,7 @@ require_once('include/queue_fn.php');
|
||||
require_once('include/datetime.php');
|
||||
require_once('include/items.php');
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/Contact.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
|
||||
class Notifier {
|
||||
|
@ -4,7 +4,7 @@ namespace Zotlabs\Daemon;
|
||||
|
||||
require_once('include/zot.php');
|
||||
require_once('include/socgraph.php');
|
||||
require_once('include/Contact.php');
|
||||
|
||||
|
||||
class Onepoll {
|
||||
|
||||
|
@ -62,11 +62,6 @@ class Poller {
|
||||
|
||||
$d = datetime_convert();
|
||||
|
||||
// TODO check to see if there are any cronhooks before wasting a process
|
||||
|
||||
if(! $restart)
|
||||
Master::Summon(array('Cronhooks'));
|
||||
|
||||
// Only poll from those with suitable relationships
|
||||
|
||||
$abandon_sql = (($abandon_days)
|
||||
|
@ -6,6 +6,7 @@ require_once('include/queue_fn.php');
|
||||
require_once('include/zot.php');
|
||||
|
||||
class Queue {
|
||||
|
||||
static public function run($argc,$argv) {
|
||||
|
||||
require_once('include/items.php');
|
||||
|
@ -12,7 +12,6 @@ class Ratenotif {
|
||||
|
||||
require_once("datetime.php");
|
||||
require_once('include/items.php');
|
||||
require_once('include/Contact.php');
|
||||
|
||||
if($argc < 3)
|
||||
return;
|
||||
|
659
Zotlabs/Lib/Apps.php
Normal file
659
Zotlabs/Lib/Apps.php
Normal file
@ -0,0 +1,659 @@
|
||||
<?php /** @file */
|
||||
|
||||
namespace Zotlabs\Lib;
|
||||
|
||||
/**
|
||||
* Apps
|
||||
*
|
||||
*/
|
||||
|
||||
require_once('include/plugin.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
|
||||
class Apps {
|
||||
|
||||
static public function get_system_apps($translate = true) {
|
||||
|
||||
$ret = array();
|
||||
if(is_dir('apps'))
|
||||
$files = glob('apps/*.apd');
|
||||
else
|
||||
$files = glob('app/*.apd');
|
||||
if($files) {
|
||||
foreach($files as $f) {
|
||||
$x = self::parse_app_description($f,$translate);
|
||||
if($x) {
|
||||
$ret[] = $x;
|
||||
}
|
||||
}
|
||||
}
|
||||
$files = glob('addon/*/*.apd');
|
||||
if($files) {
|
||||
foreach($files as $f) {
|
||||
$n = basename($f,'.apd');
|
||||
if(plugin_is_installed($n)) {
|
||||
$x = self::parse_app_description($f,$translate);
|
||||
if($x) {
|
||||
$ret[] = $x;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static public function import_system_apps() {
|
||||
if(! local_channel())
|
||||
return;
|
||||
|
||||
// Eventually we want to look at modification dates and update system apps.
|
||||
|
||||
$installed = get_pconfig(local_channel(),'system','apps_installed');
|
||||
if($installed)
|
||||
return;
|
||||
$apps = self::get_system_apps(false);
|
||||
if($apps) {
|
||||
foreach($apps as $app) {
|
||||
$app['uid'] = local_channel();
|
||||
$app['guid'] = hash('whirlpool',$app['name']);
|
||||
$app['system'] = 1;
|
||||
self::app_install(local_channel(),$app);
|
||||
}
|
||||
}
|
||||
set_pconfig(local_channel(),'system','apps_installed',1);
|
||||
}
|
||||
|
||||
|
||||
static public function app_name_compare($a,$b) {
|
||||
return strcmp($a['name'],$b['name']);
|
||||
}
|
||||
|
||||
|
||||
static public function parse_app_description($f,$translate = true) {
|
||||
$ret = array();
|
||||
|
||||
$baseurl = z_root();
|
||||
$channel = \App::get_channel();
|
||||
$address = (($channel) ? $channel['channel_address'] : '');
|
||||
|
||||
//future expansion
|
||||
|
||||
$observer = \App::get_observer();
|
||||
|
||||
|
||||
$lines = @file($f);
|
||||
if($lines) {
|
||||
foreach($lines as $x) {
|
||||
if(preg_match('/^([a-zA-Z].*?):(.*?)$/ism',$x,$matches)) {
|
||||
$ret[$matches[1]] = trim(str_replace(array('$baseurl','$nick'),array($baseurl,$address),$matches[2]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(! $ret['photo'])
|
||||
$ret['photo'] = $baseurl . '/' . get_default_profile_photo(80);
|
||||
|
||||
$ret['type'] = 'system';
|
||||
|
||||
foreach($ret as $k => $v) {
|
||||
if(strpos($v,'http') === 0)
|
||||
$ret[$k] = zid($v);
|
||||
}
|
||||
|
||||
if(array_key_exists('desc',$ret))
|
||||
$ret['desc'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['desc']);
|
||||
|
||||
if(array_key_exists('target',$ret))
|
||||
$ret['target'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['target']);
|
||||
|
||||
if(array_key_exists('requires',$ret)) {
|
||||
$requires = explode(',',$ret['requires']);
|
||||
foreach($requires as $require) {
|
||||
$require = trim(strtolower($require));
|
||||
switch($require) {
|
||||
case 'nologin':
|
||||
if(local_channel())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'admin':
|
||||
if(! is_site_admin())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'local_channel':
|
||||
if(! local_channel())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'public_profile':
|
||||
if(! is_public_profile())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'observer':
|
||||
if(! $observer)
|
||||
unset($ret);
|
||||
break;
|
||||
default:
|
||||
if(! (local_channel() && feature_enabled(local_channel(),$require)))
|
||||
unset($ret);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if($ret) {
|
||||
if($translate)
|
||||
self::translate_system_apps($ret);
|
||||
return $ret;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static public function translate_system_apps(&$arr) {
|
||||
$apps = array(
|
||||
'Site Admin' => t('Site Admin'),
|
||||
'Bug Report' => t('Bug Report'),
|
||||
'View Bookmarks' => t('View Bookmarks'),
|
||||
'My Chatrooms' => t('My Chatrooms'),
|
||||
'Connections' => t('Connections'),
|
||||
'Firefox Share' => t('Firefox Share'),
|
||||
'Remote Diagnostics' => t('Remote Diagnostics'),
|
||||
'Suggest Channels' => t('Suggest Channels'),
|
||||
'Login' => t('Login'),
|
||||
'Channel Manager' => t('Channel Manager'),
|
||||
'Grid' => t('Grid'),
|
||||
'Settings' => t('Settings'),
|
||||
'Files' => t('Files'),
|
||||
'Webpages' => t('Webpages'),
|
||||
'Channel Home' => t('Channel Home'),
|
||||
'View Profile' => t('View Profile'),
|
||||
'Photos' => t('Photos'),
|
||||
'Events' => t('Events'),
|
||||
'Directory' => t('Directory'),
|
||||
'Help' => t('Help'),
|
||||
'Mail' => t('Mail'),
|
||||
'Mood' => t('Mood'),
|
||||
'Poke' => t('Poke'),
|
||||
'Chat' => t('Chat'),
|
||||
'Search' => t('Search'),
|
||||
'Probe' => t('Probe'),
|
||||
'Suggest' => t('Suggest'),
|
||||
'Random Channel' => t('Random Channel'),
|
||||
'Invite' => t('Invite'),
|
||||
'Features' => t('Features'),
|
||||
'Language' => t('Language'),
|
||||
'Post' => t('Post'),
|
||||
'Profile Photo' => t('Profile Photo')
|
||||
);
|
||||
|
||||
if(array_key_exists($arr['name'],$apps))
|
||||
$arr['name'] = $apps[$arr['name']];
|
||||
|
||||
}
|
||||
|
||||
|
||||
// papp is a portable app
|
||||
|
||||
static public function app_render($papp,$mode = 'view') {
|
||||
|
||||
/**
|
||||
* modes:
|
||||
* view: normal mode for viewing an app via bbcode from a conversation or page
|
||||
* provides install/update button if you're logged in locally
|
||||
* list: normal mode for viewing an app on the app page
|
||||
* no buttons are shown
|
||||
* edit: viewing the app page in editing mode provides a delete button
|
||||
*/
|
||||
|
||||
$installed = false;
|
||||
|
||||
if(! $papp)
|
||||
return;
|
||||
|
||||
if(! $papp['photo'])
|
||||
$papp['photo'] = z_root() . '/' . get_default_profile_photo(80);
|
||||
|
||||
$papp['papp'] = self::papp_encode($papp);
|
||||
|
||||
if(! strstr($papp['url'],'://'))
|
||||
$papp['url'] = z_root() . ((strpos($papp['url'],'/') === 0) ? '' : '/') . $papp['url'];
|
||||
|
||||
foreach($papp as $k => $v) {
|
||||
if(strpos($v,'http') === 0 && $k != 'papp')
|
||||
$papp[$k] = zid($v);
|
||||
if($k === 'desc')
|
||||
$papp['desc'] = str_replace(array('\'','"'),array(''','&dquot;'),$papp['desc']);
|
||||
|
||||
if($k === 'requires') {
|
||||
$requires = explode(',',$v);
|
||||
foreach($requires as $require) {
|
||||
$require = trim(strtolower($require));
|
||||
switch($require) {
|
||||
case 'nologin':
|
||||
if(local_channel())
|
||||
return '';
|
||||
break;
|
||||
case 'admin':
|
||||
if(! is_site_admin())
|
||||
return '';
|
||||
break;
|
||||
case 'local_channel':
|
||||
if(! local_channel())
|
||||
return '';
|
||||
break;
|
||||
case 'public_profile':
|
||||
if(! is_public_profile())
|
||||
return '';
|
||||
break;
|
||||
case 'observer':
|
||||
$observer = \App::get_observer();
|
||||
if(! $observer)
|
||||
return '';
|
||||
break;
|
||||
default:
|
||||
if(! (local_channel() && feature_enabled(local_channel(),$require)))
|
||||
return '';
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$hosturl = '';
|
||||
|
||||
if(local_channel()) {
|
||||
$installed = self::app_installed(local_channel(),$papp);
|
||||
$hosturl = z_root() . '/';
|
||||
}
|
||||
elseif(remote_channel()) {
|
||||
$observer = \App::get_observer();
|
||||
if($observer && $observer['xchan_network'] === 'zot') {
|
||||
// some folks might have xchan_url redirected offsite, use the connurl
|
||||
$x = parse_url($observer['xchan_connurl']);
|
||||
if($x) {
|
||||
$hosturl = $x['scheme'] . '://' . $x['host'] . '/';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$install_action = (($installed) ? t('Update') : t('Install'));
|
||||
|
||||
return replace_macros(get_markup_template('app.tpl'),array(
|
||||
'$app' => $papp,
|
||||
'$hosturl' => $hosturl,
|
||||
'$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''),
|
||||
'$install' => (($hosturl && $mode == 'view') ? $install_action : ''),
|
||||
'$edit' => ((local_channel() && $installed && $mode == 'edit') ? t('Edit') : ''),
|
||||
'$delete' => ((local_channel() && $installed && $mode == 'edit') ? t('Delete') : '')
|
||||
));
|
||||
}
|
||||
|
||||
static public function app_install($uid,$app) {
|
||||
$app['uid'] = $uid;
|
||||
|
||||
if(self::app_installed($uid,$app))
|
||||
$x = self::app_update($app);
|
||||
else
|
||||
$x = self::app_store($app);
|
||||
|
||||
if($x['success']) {
|
||||
$r = q("select * from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($x['app_id']),
|
||||
intval($uid)
|
||||
);
|
||||
if($r) {
|
||||
if(! $r[0]['app_system']) {
|
||||
if($app['categories'] && (! $app['term'])) {
|
||||
$r[0]['term'] = q("select * from term where otype = %d and oid = d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($r[0]['id'])
|
||||
);
|
||||
build_sync_packet($uid,array('app' => $r[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return $x['app_id'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static public function app_destroy($uid,$app) {
|
||||
|
||||
|
||||
if($uid && $app['guid']) {
|
||||
|
||||
$x = q("select * from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($app['guid']),
|
||||
intval($uid)
|
||||
);
|
||||
if($x) {
|
||||
$x[0]['app_deleted'] = 1;
|
||||
q("delete from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($x[0]['id'])
|
||||
);
|
||||
if($x[0]['app_system']) {
|
||||
$r = q("update app set app_deleted = 1 where app_id = '%s' and app_channel = %d",
|
||||
dbesc($app['guid']),
|
||||
intval($uid)
|
||||
);
|
||||
}
|
||||
else {
|
||||
$r = q("delete from app where app_id = '%s' and app_channel = %d",
|
||||
dbesc($app['guid']),
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
// we don't sync system apps - they may be completely different on the other system
|
||||
build_sync_packet($uid,array('app' => $x));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static public function app_installed($uid,$app) {
|
||||
|
||||
$r = q("select id from app where app_id = '%s' and app_version = '%s' and app_channel = %d limit 1",
|
||||
dbesc((array_key_exists('guid',$app)) ? $app['guid'] : ''),
|
||||
dbesc((array_key_exists('version',$app)) ? $app['version'] : ''),
|
||||
intval($uid)
|
||||
);
|
||||
return(($r) ? true : false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static public function app_list($uid, $deleted = false, $cat = '') {
|
||||
if($deleted)
|
||||
$sql_extra = " and app_deleted = 1 ";
|
||||
else
|
||||
$sql_extra = " and app_deleted = 0 ";
|
||||
|
||||
if($cat) {
|
||||
$r = q("select oid from term where otype = %d and term = '%s'",
|
||||
intval(TERM_OBJ_APP),
|
||||
dbesc($cat)
|
||||
);
|
||||
if(! $r)
|
||||
return $r;
|
||||
$sql_extra .= " and app.id in ( ";
|
||||
$s = '';
|
||||
foreach($r as $rr) {
|
||||
if($s)
|
||||
$s .= ',';
|
||||
$s .= intval($rr['oid']);
|
||||
}
|
||||
$sql_extra .= $s . ') ';
|
||||
}
|
||||
|
||||
$r = q("select * from app where app_channel = %d $sql_extra order by app_name asc",
|
||||
intval($uid)
|
||||
);
|
||||
if($r) {
|
||||
for($x = 0; $x < count($r); $x ++) {
|
||||
if(! $r[$x]['app_system'])
|
||||
$r[$x]['type'] = 'personal';
|
||||
$r[$x]['term'] = q("select * from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($r[$x]['id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
return($r);
|
||||
}
|
||||
|
||||
|
||||
static public function app_decode($s) {
|
||||
$x = base64_decode(str_replace(array('<br />',"\r","\n",' '),array('','','',''),$s));
|
||||
return json_decode($x,true);
|
||||
}
|
||||
|
||||
|
||||
static public function app_store($arr) {
|
||||
|
||||
// logger('app_store: ' . print_r($arr,true));
|
||||
|
||||
$darray = array();
|
||||
$ret = array('success' => false);
|
||||
|
||||
$darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : '');
|
||||
$darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0);
|
||||
|
||||
if((! $darray['app_url']) || (! $darray['app_channel']))
|
||||
return $ret;
|
||||
|
||||
if($arr['photo'] && ! strstr($arr['photo'],z_root())) {
|
||||
$x = import_xchan_photo($arr['photo'],get_observer_hash(),true);
|
||||
$arr['photo'] = $x[1];
|
||||
}
|
||||
|
||||
|
||||
$darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : random_string(). '.' . \App::get_hostname());
|
||||
$darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : '');
|
||||
$darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash());
|
||||
$darray['app_name'] = ((x($arr,'name')) ? escape_tags($arr['name']) : t('Unknown'));
|
||||
$darray['app_desc'] = ((x($arr,'desc')) ? escape_tags($arr['desc']) : '');
|
||||
$darray['app_photo'] = ((x($arr,'photo')) ? $arr['photo'] : z_root() . '/' . get_default_profile_photo(80));
|
||||
$darray['app_version'] = ((x($arr,'version')) ? escape_tags($arr['version']) : '');
|
||||
$darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : '');
|
||||
$darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : '');
|
||||
$darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : '');
|
||||
$darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : '');
|
||||
$darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0);
|
||||
$darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0);
|
||||
|
||||
$created = datetime_convert();
|
||||
|
||||
$r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel, app_addr, app_price, app_page, app_requires, app_created, app_edited, app_system, app_deleted ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
|
||||
dbesc($darray['app_id']),
|
||||
dbesc($darray['app_sig']),
|
||||
dbesc($darray['app_author']),
|
||||
dbesc($darray['app_name']),
|
||||
dbesc($darray['app_desc']),
|
||||
dbesc($darray['app_url']),
|
||||
dbesc($darray['app_photo']),
|
||||
dbesc($darray['app_version']),
|
||||
intval($darray['app_channel']),
|
||||
dbesc($darray['app_addr']),
|
||||
dbesc($darray['app_price']),
|
||||
dbesc($darray['app_page']),
|
||||
dbesc($darray['app_requires']),
|
||||
dbesc($created),
|
||||
dbesc($created),
|
||||
intval($darray['app_system']),
|
||||
intval($darray['app_deleted'])
|
||||
);
|
||||
if($r) {
|
||||
$ret['success'] = true;
|
||||
$ret['app_id'] = $darray['app_id'];
|
||||
}
|
||||
if($arr['categories']) {
|
||||
$x = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($darray['app_id']),
|
||||
intval($darray['app_channel'])
|
||||
);
|
||||
$y = explode(',',$arr['categories']);
|
||||
if($y) {
|
||||
foreach($y as $t) {
|
||||
$t = trim($t);
|
||||
if($t) {
|
||||
store_item_tag($darray['app_channel'],$x[0]['id'],TERM_OBJ_APP,TERM_CATEGORY,escape_tags($t),escape_tags(z_root() . '/apps/?f=&cat=' . escape_tags($t)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
static public function app_update($arr) {
|
||||
|
||||
$darray = array();
|
||||
$ret = array('success' => false);
|
||||
|
||||
$darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : '');
|
||||
$darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0);
|
||||
$darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : 0);
|
||||
|
||||
if((! $darray['app_url']) || (! $darray['app_channel']) || (! $darray['app_id']))
|
||||
return $ret;
|
||||
|
||||
if($arr['photo'] && ! strstr($arr['photo'],z_root())) {
|
||||
$x = import_xchan_photo($arr['photo'],get_observer_hash(),true);
|
||||
$arr['photo'] = $x[1];
|
||||
}
|
||||
|
||||
$darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : '');
|
||||
$darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash());
|
||||
$darray['app_name'] = ((x($arr,'name')) ? escape_tags($arr['name']) : t('Unknown'));
|
||||
$darray['app_desc'] = ((x($arr,'desc')) ? escape_tags($arr['desc']) : '');
|
||||
$darray['app_photo'] = ((x($arr,'photo')) ? $arr['photo'] : z_root() . '/' . get_default_profile_photo(80));
|
||||
$darray['app_version'] = ((x($arr,'version')) ? escape_tags($arr['version']) : '');
|
||||
$darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : '');
|
||||
$darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : '');
|
||||
$darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : '');
|
||||
$darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : '');
|
||||
$darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0);
|
||||
$darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0);
|
||||
|
||||
$edited = datetime_convert();
|
||||
|
||||
$r = q("update app set app_sig = '%s', app_author = '%s', app_name = '%s', app_desc = '%s', app_url = '%s', app_photo = '%s', app_version = '%s', app_addr = '%s', app_price = '%s', app_page = '%s', app_requires = '%s', app_edited = '%s', app_system = %d, app_deleted = %d where app_id = '%s' and app_channel = %d",
|
||||
dbesc($darray['app_sig']),
|
||||
dbesc($darray['app_author']),
|
||||
dbesc($darray['app_name']),
|
||||
dbesc($darray['app_desc']),
|
||||
dbesc($darray['app_url']),
|
||||
dbesc($darray['app_photo']),
|
||||
dbesc($darray['app_version']),
|
||||
dbesc($darray['app_addr']),
|
||||
dbesc($darray['app_price']),
|
||||
dbesc($darray['app_page']),
|
||||
dbesc($darray['app_requires']),
|
||||
dbesc($edited),
|
||||
intval($darray['app_system']),
|
||||
intval($darray['app_deleted']),
|
||||
dbesc($darray['app_id']),
|
||||
intval($darray['app_channel'])
|
||||
);
|
||||
if($r) {
|
||||
$ret['success'] = true;
|
||||
$ret['app_id'] = $darray['app_id'];
|
||||
}
|
||||
|
||||
$x = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($darray['app_id']),
|
||||
intval($darray['app_channel'])
|
||||
);
|
||||
if($x) {
|
||||
q("delete from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($x[0]['id'])
|
||||
);
|
||||
if($arr['categories']) {
|
||||
$y = explode(',',$arr['categories']);
|
||||
if($y) {
|
||||
foreach($y as $t) {
|
||||
$t = trim($t);
|
||||
if($t) {
|
||||
store_item_tag($darray['app_channel'],$x[0]['id'],TERM_OBJ_APP,TERM_CATEGORY,escape_tags($t),escape_tags(z_root() . '/apps/?f=&cat=' . escape_tags($t)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static public function app_encode($app,$embed = false) {
|
||||
|
||||
$ret = array();
|
||||
|
||||
$ret['type'] = 'personal';
|
||||
|
||||
if($app['app_id'])
|
||||
$ret['guid'] = $app['app_id'];
|
||||
|
||||
if($app['app_id'])
|
||||
$ret['guid'] = $app['app_id'];
|
||||
|
||||
if($app['app_sig'])
|
||||
$ret['sig'] = $app['app_sig'];
|
||||
|
||||
if($app['app_author'])
|
||||
$ret['author'] = $app['app_author'];
|
||||
|
||||
if($app['app_name'])
|
||||
$ret['name'] = $app['app_name'];
|
||||
|
||||
if($app['app_desc'])
|
||||
$ret['desc'] = $app['app_desc'];
|
||||
|
||||
if($app['app_url'])
|
||||
$ret['url'] = $app['app_url'];
|
||||
|
||||
if($app['app_photo'])
|
||||
$ret['photo'] = $app['app_photo'];
|
||||
|
||||
if($app['app_version'])
|
||||
$ret['version'] = $app['app_version'];
|
||||
|
||||
if($app['app_addr'])
|
||||
$ret['addr'] = $app['app_addr'];
|
||||
|
||||
if($app['app_price'])
|
||||
$ret['price'] = $app['app_price'];
|
||||
|
||||
if($app['app_page'])
|
||||
$ret['page'] = $app['app_page'];
|
||||
|
||||
if($app['app_requires'])
|
||||
$ret['requires'] = $app['app_requires'];
|
||||
|
||||
if($app['app_system'])
|
||||
$ret['system'] = $app['app_system'];
|
||||
|
||||
if($app['app_deleted'])
|
||||
$ret['deleted'] = $app['app_deleted'];
|
||||
|
||||
if($app['term']) {
|
||||
$s = '';
|
||||
foreach($app['term'] as $t) {
|
||||
if($s)
|
||||
$s .= ',';
|
||||
$s .= $t['term'];
|
||||
}
|
||||
$ret['categories'] = $s;
|
||||
}
|
||||
|
||||
|
||||
if(! $embed)
|
||||
return $ret;
|
||||
|
||||
if(array_key_exists('categories',$ret))
|
||||
unset($ret['categories']);
|
||||
|
||||
$j = json_encode($ret);
|
||||
return '[app]' . chunk_split(base64_encode($j),72,"\n") . '[/app]';
|
||||
|
||||
}
|
||||
|
||||
|
||||
static public function papp_encode($papp) {
|
||||
return chunk_split(base64_encode(json_encode($papp)),72,"\n");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
267
Zotlabs/Lib/Chatroom.php
Normal file
267
Zotlabs/Lib/Chatroom.php
Normal file
@ -0,0 +1,267 @@
|
||||
<?php
|
||||
namespace Zotlabs\Lib;
|
||||
|
||||
/**
|
||||
* @brief Chat related functions.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
class Chatroom {
|
||||
/**
|
||||
* @brief Creates a chatroom.
|
||||
*
|
||||
* @param array $channel
|
||||
* @param array $arr
|
||||
* @return An associative array containing:
|
||||
* - success: A boolean
|
||||
* - message: (optional) A string
|
||||
*/
|
||||
|
||||
static public function create($channel, $arr) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
$name = trim($arr['name']);
|
||||
if(! $name) {
|
||||
$ret['message'] = t('Missing room name');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select cr_id from chatroom where cr_uid = %d and cr_name = '%s' limit 1",
|
||||
intval($channel['channel_id']),
|
||||
dbesc($name)
|
||||
);
|
||||
if($r) {
|
||||
$ret['message'] = t('Duplicate room name');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select count(cr_id) as total from chatroom where cr_aid = %d",
|
||||
intval($channel['channel_account_id'])
|
||||
);
|
||||
if($r)
|
||||
$limit = service_class_fetch($channel['channel_id'], 'chatrooms');
|
||||
|
||||
if(($r) && ($limit !== false) && ($r[0]['total'] >= $limit)) {
|
||||
$ret['message'] = upgrade_message();
|
||||
return $ret;
|
||||
}
|
||||
|
||||
if(! array_key_exists('expire', $arr))
|
||||
$arr['expire'] = 120; // minutes, e.g. 2 hours
|
||||
|
||||
$created = datetime_convert();
|
||||
|
||||
$x = q("insert into chatroom ( cr_aid, cr_uid, cr_name, cr_created, cr_edited, cr_expire, allow_cid, allow_gid, deny_cid, deny_gid )
|
||||
values ( %d, %d , '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s' ) ",
|
||||
intval($channel['channel_account_id']),
|
||||
intval($channel['channel_id']),
|
||||
dbesc($name),
|
||||
dbesc($created),
|
||||
dbesc($created),
|
||||
intval($arr['expire']),
|
||||
dbesc($arr['allow_cid']),
|
||||
dbesc($arr['allow_gid']),
|
||||
dbesc($arr['deny_cid']),
|
||||
dbesc($arr['deny_gid'])
|
||||
);
|
||||
|
||||
if($x)
|
||||
$ret['success'] = true;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
static public function destroy($channel,$arr) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
if(intval($arr['cr_id']))
|
||||
$sql_extra = " and cr_id = " . intval($arr['cr_id']) . " ";
|
||||
elseif(trim($arr['cr_name']))
|
||||
$sql_extra = " and cr_name = '" . protect_sprintf(dbesc(trim($arr['cr_name']))) . "' ";
|
||||
else {
|
||||
$ret['message'] = t('Invalid room specifier.');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select * from chatroom where cr_uid = %d $sql_extra limit 1",
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
if(! $r) {
|
||||
$ret['message'] = t('Invalid room specifier.');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
build_sync_packet($channel['channel_id'],array('chatroom' => $r));
|
||||
|
||||
q("delete from chatroom where cr_id = %d",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
if($r[0]['cr_id']) {
|
||||
q("delete from chatpresence where cp_room = %d",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
q("delete from chat where chat_room = %d",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
}
|
||||
|
||||
$ret['success'] = true;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
static public function enter($observer_xchan, $room_id, $status, $client) {
|
||||
|
||||
if(! $room_id || ! $observer_xchan)
|
||||
return;
|
||||
|
||||
$r = q("select * from chatroom where cr_id = %d limit 1",
|
||||
intval($room_id)
|
||||
);
|
||||
if(! $r) {
|
||||
notice( t('Room not found.') . EOL);
|
||||
return false;
|
||||
}
|
||||
require_once('include/security.php');
|
||||
$sql_extra = permissions_sql($r[0]['cr_uid']);
|
||||
|
||||
$x = q("select * from chatroom where cr_id = %d and cr_uid = %d $sql_extra limit 1",
|
||||
intval($room_id),
|
||||
intval($r[0]['cr_uid'])
|
||||
);
|
||||
if(! $x) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return false;
|
||||
}
|
||||
|
||||
$limit = service_class_fetch($r[0]['cr_uid'], 'chatters_inroom');
|
||||
if($limit !== false) {
|
||||
$y = q("select count(*) as total from chatpresence where cp_room = %d",
|
||||
intval($room_id)
|
||||
);
|
||||
if($y && $y[0]['total'] > $limit) {
|
||||
notice( t('Room is full') . EOL);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(intval($x[0]['cr_expire'])) {
|
||||
$r = q("delete from chat where created < %s - INTERVAL %s and chat_room = %d",
|
||||
db_utcnow(),
|
||||
db_quoteinterval( intval($x[0]['cr_expire']) . ' MINUTE' ),
|
||||
intval($x[0]['cr_id'])
|
||||
);
|
||||
}
|
||||
|
||||
$r = q("select * from chatpresence where cp_xchan = '%s' and cp_room = %d limit 1",
|
||||
dbesc($observer_xchan),
|
||||
intval($room_id)
|
||||
);
|
||||
if($r) {
|
||||
q("update chatpresence set cp_last = '%s' where cp_id = %d and cp_client = '%s'",
|
||||
dbesc(datetime_convert()),
|
||||
intval($r[0]['cp_id']),
|
||||
dbesc($client)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
$r = q("insert into chatpresence ( cp_room, cp_xchan, cp_last, cp_status, cp_client )
|
||||
values ( %d, '%s', '%s', '%s', '%s' )",
|
||||
intval($room_id),
|
||||
dbesc($observer_xchan),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($status),
|
||||
dbesc($client)
|
||||
);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
||||
function leave($observer_xchan, $room_id, $client) {
|
||||
if(! $room_id || ! $observer_xchan)
|
||||
return;
|
||||
|
||||
$r = q("select * from chatpresence where cp_xchan = '%s' and cp_room = %d and cp_client = '%s' limit 1",
|
||||
dbesc($observer_xchan),
|
||||
intval($room_id),
|
||||
dbesc($client)
|
||||
);
|
||||
if($r) {
|
||||
q("delete from chatpresence where cp_id = %d",
|
||||
intval($r[0]['cp_id'])
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static public function roomlist($uid) {
|
||||
require_once('include/security.php');
|
||||
$sql_extra = permissions_sql($uid);
|
||||
|
||||
$r = q("select allow_cid, allow_gid, deny_cid, deny_gid, cr_name, cr_expire, cr_id, count(cp_id) as cr_inroom from chatroom left join chatpresence on cr_id = cp_room where cr_uid = %d $sql_extra group by cr_name, cr_id order by cr_name",
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
static public function list_count($uid) {
|
||||
require_once('include/security.php');
|
||||
$sql_extra = permissions_sql($uid);
|
||||
|
||||
$r = q("select count(*) as total from chatroom where cr_uid = %d $sql_extra",
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
return $r[0]['total'];
|
||||
}
|
||||
|
||||
/**
|
||||
* create a chat message via API.
|
||||
* It is the caller's responsibility to enter the room.
|
||||
*/
|
||||
|
||||
static public function message($uid, $room_id, $xchan, $text) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
if(! $text)
|
||||
return;
|
||||
|
||||
$sql_extra = permissions_sql($uid);
|
||||
|
||||
$r = q("select * from chatroom where cr_uid = %d and cr_id = %d $sql_extra",
|
||||
intval($uid),
|
||||
intval($room_id)
|
||||
);
|
||||
if(! $r)
|
||||
return $ret;
|
||||
|
||||
$arr = array(
|
||||
'chat_room' => $room_id,
|
||||
'chat_xchan' => $xchan,
|
||||
'chat_text' => $text
|
||||
);
|
||||
|
||||
call_hooks('chat_message', $arr);
|
||||
|
||||
$x = q("insert into chat ( chat_room, chat_xchan, created, chat_text )
|
||||
values( %d, '%s', '%s', '%s' )",
|
||||
intval($room_id),
|
||||
dbesc($xchan),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($arr['chat_text'])
|
||||
);
|
||||
|
||||
$ret['success'] = true;
|
||||
return $ret;
|
||||
}
|
||||
}
|
@ -1,10 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace Zotlabs\Lib;
|
||||
|
||||
/**
|
||||
* @file include/enotify.php
|
||||
*
|
||||
* @brief File with functions and a class for email notifications.
|
||||
* @brief File with functions and a class for generating system and email notifications.
|
||||
*/
|
||||
|
||||
|
||||
class Enotify {
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
@ -19,16 +23,15 @@
|
||||
* * \e string \b verb
|
||||
* * \e string \b activity
|
||||
*/
|
||||
function notification($params) {
|
||||
|
||||
|
||||
static public function submit($params) {
|
||||
|
||||
logger('notification: entry', LOGGER_DEBUG);
|
||||
|
||||
// throw a small amount of entropy into the system to breakup duplicates arriving at the same precise instant.
|
||||
usleep(mt_rand(0, 10000));
|
||||
|
||||
$a = get_app();
|
||||
|
||||
|
||||
if ($params['from_xchan']) {
|
||||
$x = q("select * from xchan where xchan_hash = '%s' limit 1",
|
||||
dbesc($params['from_xchan'])
|
||||
@ -62,7 +65,7 @@ function notification($params) {
|
||||
$site_admin = sprintf( t('%s Administrator'), $sitename);
|
||||
|
||||
$sender_name = $product;
|
||||
$hostname = App::get_hostname();
|
||||
$hostname = \App::get_hostname();
|
||||
if(strpos($hostname,':'))
|
||||
$hostname = substr($hostname,0,strpos($hostname,':'));
|
||||
|
||||
@ -87,7 +90,8 @@ function notification($params) {
|
||||
$title = $params['item']['title'];
|
||||
$body = $params['item']['body'];
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$title = $body = '';
|
||||
}
|
||||
|
||||
@ -424,7 +428,7 @@ function notification($params) {
|
||||
|
||||
// wretched hack, but we don't want to duplicate all the preamble variations and we also don't want to screw up a translation
|
||||
|
||||
if ((App::$language === 'en' || (! App::$language)) && strpos($msg,', '))
|
||||
if ((\App::$language === 'en' || (! \App::$language)) && strpos($msg,', '))
|
||||
$msg = substr($msg,strpos($msg,', ')+1);
|
||||
|
||||
$r = q("update notify set msg = '%s' where id = %d and uid = %d",
|
||||
@ -441,7 +445,7 @@ function notification($params) {
|
||||
logger('notification: sending notification email');
|
||||
|
||||
$hn = get_pconfig($recip['channel_id'],'system','email_notify_host');
|
||||
if($hn && (! stristr(App::get_hostname(),$hn))) {
|
||||
if($hn && (! stristr(\App::get_hostname(),$hn))) {
|
||||
// this isn't the email notification host
|
||||
pop_lang();
|
||||
return;
|
||||
@ -455,7 +459,7 @@ function notification($params) {
|
||||
// use $_SESSION['zid_override'] to force zid() to use
|
||||
// the recipient address instead of the current observer
|
||||
|
||||
$_SESSION['zid_override'] = $recip['channel_address'] . '@' . App::get_hostname();
|
||||
$_SESSION['zid_override'] = $recip['channel_address'] . '@' . \App::get_hostname();
|
||||
$_SESSION['zrl_override'] = z_root() . '/channel/' . $recip['channel_address'];
|
||||
|
||||
$textversion = zidify_links($textversion);
|
||||
@ -529,7 +533,7 @@ function notification($params) {
|
||||
$tpl = get_markup_template('email_notify_html.tpl');
|
||||
$email_html_body = replace_macros($tpl,array(
|
||||
'$banner' => $datarray['banner'],
|
||||
'$notify_icon' => Zotlabs\Lib\System::get_notify_icon(),
|
||||
'$notify_icon' => \Zotlabs\Lib\System::get_notify_icon(),
|
||||
'$product' => $datarray['product'],
|
||||
'$preamble' => $datarray['preamble'],
|
||||
'$sitename' => $datarray['sitename'],
|
||||
@ -570,7 +574,7 @@ function notification($params) {
|
||||
|
||||
// use the EmailNotification library to send the message
|
||||
|
||||
enotify::send(array(
|
||||
self::send(array(
|
||||
'fromName' => $sender_name,
|
||||
'fromEmail' => $sender_email,
|
||||
'replyTo' => $sender_email,
|
||||
@ -587,12 +591,6 @@ function notification($params) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief A class for sending email notifications.
|
||||
*
|
||||
* @fixme Class names start mostly with capital letter to distinguish them easier.
|
||||
*/
|
||||
class enotify {
|
||||
/**
|
||||
* @brief Send a multipart/alternative message with Text and HTML versions.
|
||||
*
|
||||
@ -649,4 +647,39 @@ class enotify {
|
||||
);
|
||||
logger("notification: enotify::send returns " . $res, LOGGER_DEBUG);
|
||||
}
|
||||
|
||||
static public function format($item) {
|
||||
|
||||
$ret = '';
|
||||
|
||||
require_once('include/conversation.php');
|
||||
|
||||
// Call localize_item with the "brief" flag to get a one line status for activities.
|
||||
// This should set $item['localized'] to indicate we have a brief summary.
|
||||
|
||||
localize_item($item);
|
||||
|
||||
if($item_localize) {
|
||||
$itemem_text = $item['localize'];
|
||||
}
|
||||
else {
|
||||
$itemem_text = (($item['item_thread_top'])
|
||||
? t('created a new post')
|
||||
: sprintf( t('commented on %s\'s post'), $item['owner']['xchan_name']));
|
||||
}
|
||||
|
||||
// convert this logic into a json array just like the system notifications
|
||||
|
||||
return array(
|
||||
'notify_link' => $item['llink'],
|
||||
'name' => $item['author']['xchan_name'],
|
||||
'url' => $item['author']['xchan_url'],
|
||||
'photo' => $item['author']['xchan_photo_s'],
|
||||
'when' => relative_date($item['created']),
|
||||
'class' => (intval($item['item_unseen']) ? 'notify-unseen' : 'notify-seen'),
|
||||
'message' => strip_tags(bbcode($itemem_text))
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -165,7 +165,7 @@ class ThreadStream {
|
||||
$item->set_commentable(can_comment_on_post($this->observer['xchan_hash'],$item->data));
|
||||
}
|
||||
}
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
$item->set_conversation($this);
|
||||
$this->threads[] = $item;
|
||||
|
@ -260,7 +260,7 @@ class Acl extends \Zotlabs\Web\Controller {
|
||||
|
||||
// logger('navbar_complete');
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -902,7 +902,6 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
// account delete button was submitted
|
||||
if (x($_POST, 'page_users_delete')) {
|
||||
require_once('include/Contact.php');
|
||||
foreach ($users as $uid){
|
||||
account_remove($uid, true, false);
|
||||
}
|
||||
@ -951,7 +950,6 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
switch (argv(2)){
|
||||
case 'delete':
|
||||
// delete user
|
||||
require_once('include/Contact.php');
|
||||
account_remove($uid,true,false);
|
||||
|
||||
notice( sprintf(t("Account '%s' deleted"), $account[0]['account_email']) . EOL);
|
||||
@ -1096,7 +1094,6 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
notice( sprintf( tt("%s channel code allowed/disallowed", "%s channels code allowed/disallowed", count($channels)), count($channels)) );
|
||||
}
|
||||
if (x($_POST,'page_channels_delete')){
|
||||
require_once("include/Contact.php");
|
||||
foreach($channels as $uid){
|
||||
channel_remove($uid,true);
|
||||
}
|
||||
@ -1128,7 +1125,6 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
case "delete":{
|
||||
check_form_security_token_redirectOnErr('/admin/channels', 'admin_channels', 't');
|
||||
// delete channel
|
||||
require_once("include/Contact.php");
|
||||
channel_remove($uid,true);
|
||||
|
||||
notice( sprintf(t("Channel '%s' deleted"), $channel[0]['channel_name']) . EOL);
|
||||
@ -1425,6 +1421,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
function listAddonRepos() {
|
||||
$addonrepos = [];
|
||||
$addonDir = __DIR__ . '/../../extend/addon/';
|
||||
if(is_dir($addonDir)) {
|
||||
if ($handle = opendir($addonDir)) {
|
||||
while (false !== ($entry = readdir($handle))) {
|
||||
if ($entry != "." && $entry != "..") {
|
||||
@ -1433,6 +1430,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
}
|
||||
return $addonrepos;
|
||||
}
|
||||
|
||||
@ -1735,7 +1733,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
} else {
|
||||
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
|
||||
}
|
||||
$extendDir = __DIR__ . '/../../store/git/sys/extend';
|
||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
||||
$addonDir = $extendDir . '/addon';
|
||||
if (!file_exists($extendDir)) {
|
||||
if (!mkdir($extendDir, 0770, true)) {
|
||||
@ -1748,7 +1746,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
}
|
||||
$repoDir = __DIR__ . '/../../store/git/sys/extend/addon/' . $repoName;
|
||||
$repoDir = __DIR__ . '/../../store/[data]/git/sys/extend/addon/' . $repoName;
|
||||
if (!is_dir($repoDir)) {
|
||||
logger('Repo directory does not exist: ' . $repoDir);
|
||||
json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
|
||||
@ -1785,7 +1783,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
} else {
|
||||
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
|
||||
}
|
||||
$extendDir = __DIR__ . '/../../store/git/sys/extend';
|
||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
||||
$addonDir = $extendDir . '/addon';
|
||||
if (!file_exists($extendDir)) {
|
||||
if (!mkdir($extendDir, 0770, true)) {
|
||||
@ -1798,7 +1796,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
}
|
||||
$repoDir = __DIR__ . '/../../store/git/sys/extend/addon/' . $repoName;
|
||||
$repoDir = __DIR__ . '/../../store/[data]/git/sys/extend/addon/' . $repoName;
|
||||
if (!is_dir($repoDir)) {
|
||||
logger('Repo directory does not exist: ' . $repoDir);
|
||||
json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
|
||||
@ -1818,7 +1816,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
if (array_key_exists('repoURL', $_REQUEST)) {
|
||||
require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
|
||||
$repoURL = $_REQUEST['repoURL'];
|
||||
$extendDir = __DIR__ . '/../../store/git/sys/extend';
|
||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
||||
$addonDir = $extendDir . '/addon';
|
||||
if (!file_exists($extendDir)) {
|
||||
if (!mkdir($extendDir, 0770, true)) {
|
||||
@ -1846,7 +1844,7 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
json_return_and_die(array('message' => 'Invalid git repo', 'success' => false));
|
||||
}
|
||||
$repoDir = $addonDir . '/' . $repoName;
|
||||
$tempRepoBaseDir = __DIR__ . '/../../store/git/sys/temp/';
|
||||
$tempRepoBaseDir = __DIR__ . '/../../store/[data]/git/sys/temp/';
|
||||
$tempAddonDir = $tempRepoBaseDir . $repoName;
|
||||
|
||||
if (!is_writable($addonDir) || !is_writable($tempAddonDir)) {
|
||||
@ -1880,9 +1878,9 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
if (array_key_exists('repoURL', $_REQUEST)) {
|
||||
require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
|
||||
$repoURL = $_REQUEST['repoURL'];
|
||||
$extendDir = __DIR__ . '/../../store/git/sys/extend';
|
||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
||||
$addonDir = $extendDir . '/addon';
|
||||
$tempAddonDir = __DIR__ . '/../../store/git/sys/temp';
|
||||
$tempAddonDir = __DIR__ . '/../../store/[data]/git/sys/temp';
|
||||
if (!file_exists($extendDir)) {
|
||||
if (!mkdir($extendDir, 0770, true)) {
|
||||
logger('Error creating extend folder: ' . $extendDir);
|
||||
@ -1894,6 +1892,12 @@ class Admin extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!is_dir($tempAddonDir)) {
|
||||
if (!mkdir($tempAddonDir, 0770, true)) {
|
||||
logger('Error creating temp plugin repo folder: ' . $tempAddonDir);
|
||||
json_return_and_die(array('message' => 'Error creating temp plugin repo folder: ' . $tempAddonDir, 'success' => false));
|
||||
}
|
||||
}
|
||||
$repoName = null;
|
||||
if (array_key_exists('repoName', $_REQUEST) && $_REQUEST['repoName'] !== '') {
|
||||
$repoName = $_REQUEST['repoName'];
|
||||
|
@ -2,8 +2,9 @@
|
||||
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/apps.php');
|
||||
//require_once('include/apps.php');
|
||||
|
||||
use \Zotlabs\Lib as Zlib;
|
||||
|
||||
class Appman extends \Zotlabs\Web\Controller {
|
||||
|
||||
@ -30,16 +31,16 @@ class Appman extends \Zotlabs\Web\Controller {
|
||||
'categories' => escape_tags($_REQUEST['categories'])
|
||||
);
|
||||
|
||||
$_REQUEST['appid'] = app_install(local_channel(),$arr);
|
||||
$_REQUEST['appid'] = Zlib\Apps::app_install(local_channel(),$arr);
|
||||
|
||||
if(app_installed(local_channel(),$arr))
|
||||
if(Zlib\Apps::app_installed(local_channel(),$arr))
|
||||
info( t('App installed.') . EOL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$papp = app_decode($_POST['papp']);
|
||||
$papp = Zlib\Apps::app_decode($_POST['papp']);
|
||||
|
||||
if(! is_array($papp)) {
|
||||
notice( t('Malformed app.') . EOL);
|
||||
@ -47,13 +48,13 @@ class Appman extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
if($_POST['install']) {
|
||||
app_install(local_channel(),$papp);
|
||||
if(app_installed(local_channel(),$papp))
|
||||
Zlib\Apps::app_install(local_channel(),$papp);
|
||||
if(Zlib\Apps::app_installed(local_channel(),$papp))
|
||||
info( t('App installed.') . EOL);
|
||||
}
|
||||
|
||||
if($_POST['delete']) {
|
||||
app_destroy(local_channel(),$papp);
|
||||
Zlib\Apps::app_destroy(local_channel(),$papp);
|
||||
}
|
||||
|
||||
if($_POST['edit']) {
|
||||
@ -100,7 +101,7 @@ class Appman extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
$embed = array('embed', t('Embed code'), app_encode($app,true),'', 'onclick="this.select();"');
|
||||
$embed = array('embed', t('Embed code'), Zlib\Apps::app_encode($app,true),'', 'onclick="this.select();"');
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,9 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/apps.php');
|
||||
//require_once('include/apps.php');
|
||||
|
||||
use \Zotlabs\Lib as Zlib;
|
||||
|
||||
class Apps extends \Zotlabs\Web\Controller {
|
||||
|
||||
@ -19,25 +20,25 @@ class Apps extends \Zotlabs\Web\Controller {
|
||||
|
||||
|
||||
if(local_channel()) {
|
||||
import_system_apps();
|
||||
Zlib\Apps::import_system_apps();
|
||||
$syslist = array();
|
||||
$list = app_list(local_channel(), false, $_GET['cat']);
|
||||
$list = Zlib\Apps::app_list(local_channel(), false, $_GET['cat']);
|
||||
if($list) {
|
||||
foreach($list as $x) {
|
||||
$syslist[] = app_encode($x);
|
||||
$syslist[] = Zlib\Apps::app_encode($x);
|
||||
}
|
||||
}
|
||||
translate_system_apps($syslist);
|
||||
Zlib\Apps::translate_system_apps($syslist);
|
||||
}
|
||||
else
|
||||
$syslist = get_system_apps(true);
|
||||
$syslist = Zlib\Apps::get_system_apps(true);
|
||||
|
||||
usort($syslist,'app_name_compare');
|
||||
usort($syslist,'Zotlabs\\Lib\\Apps::app_name_compare');
|
||||
|
||||
// logger('apps: ' . print_r($syslist,true));
|
||||
|
||||
foreach($syslist as $app) {
|
||||
$apps[] = app_render($app,$mode);
|
||||
$apps[] = Zlib\Apps::app_render($app,$mode);
|
||||
}
|
||||
|
||||
return replace_macros(get_markup_template('myapps.tpl'), array(
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
|
||||
|
@ -6,14 +6,12 @@ require_once('include/bbcode.php');
|
||||
require_once('include/datetime.php');
|
||||
require_once('include/event.php');
|
||||
require_once('include/items.php');
|
||||
require_once('include/Contact.php');
|
||||
|
||||
|
||||
|
||||
class Cal extends \Zotlabs\Web\Controller {
|
||||
|
||||
function init() {
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -49,11 +47,10 @@ class Cal extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get() {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$channel = null;
|
||||
|
||||
if(argc() > 1) {
|
||||
|
@ -67,7 +67,7 @@ function get($update = 0, $load = false) {
|
||||
$datequery = ((x($_GET,'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : '');
|
||||
$datequery2 = ((x($_GET,'dbegin') && is_a_date_arg($_GET['dbegin'])) ? notags($_GET['dbegin']) : '');
|
||||
|
||||
if(get_config('system','block_public') && (! get_account_id()) && (! remote_channel())) {
|
||||
if(observer_prohibited(true)) {
|
||||
return login();
|
||||
}
|
||||
|
||||
@ -180,7 +180,8 @@ function get($update = 0, $load = false) {
|
||||
dbesc($mid . '%'),
|
||||
intval(\App::$profile['profile_uid'])
|
||||
);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$r = q("SELECT distinct parent AS `item_id`, created from item
|
||||
left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids )
|
||||
WHERE uid = %d $item_normal
|
||||
@ -225,7 +226,8 @@ function get($update = 0, $load = false) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$r = q("SELECT distinct id AS item_id, created FROM item
|
||||
left join abook on item.author_xchan = abook.abook_xchan
|
||||
WHERE uid = %d $item_normal
|
||||
@ -265,7 +267,8 @@ function get($update = 0, $load = false) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$items = array();
|
||||
}
|
||||
|
||||
@ -345,7 +348,8 @@ function get($update = 0, $load = false) {
|
||||
|
||||
if($checkjs->disabled()) {
|
||||
$o .= conversation($a,$items,'channel',$update,'traditional');
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$o .= conversation($a,$items,'channel',$update,$page_mode);
|
||||
}
|
||||
|
||||
@ -360,6 +364,4 @@ function get($update = 0, $load = false) {
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/Contact.php');
|
||||
require_once('include/zot.php');
|
||||
|
||||
|
||||
class Chanview extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get() {
|
||||
@ -62,10 +60,8 @@ class Chanview extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
if($_REQUEST['address']) {
|
||||
$ret = zot_finger($_REQUEST['address'],null);
|
||||
if($ret['success']) {
|
||||
$j = json_decode($ret['body'],true);
|
||||
if($j)
|
||||
$j = \Zotlabs\Zot\Finger::run($_REQUEST['address'],null);
|
||||
if($j['success']) {
|
||||
import_xchan($j);
|
||||
$r = q("select * from xchan where xchan_addr = '%s' limit 1",
|
||||
dbesc($_REQUEST['address'])
|
||||
@ -73,7 +69,6 @@ class Chanview extends \Zotlabs\Web\Controller {
|
||||
if($r)
|
||||
\App::$poi = $r[0];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module; /** @file */
|
||||
<?php /** @file */
|
||||
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
|
||||
require_once('include/chat.php');
|
||||
require_once('include/bookmarks.php');
|
||||
|
||||
use \Zotlabs\Lib as Zlib;
|
||||
|
||||
class Chat extends \Zotlabs\Web\Controller {
|
||||
|
||||
@ -54,7 +56,7 @@ class Chat extends \Zotlabs\Web\Controller {
|
||||
|
||||
if($_POST['action'] === 'drop') {
|
||||
logger('delete chatroom');
|
||||
chatroom_destroy($channel,array('cr_name' => $room));
|
||||
Zlib\Chatroom::destroy($channel,array('cr_name' => $room));
|
||||
goaway(z_root() . '/chat/' . $channel['channel_address']);
|
||||
}
|
||||
|
||||
@ -67,7 +69,7 @@ class Chat extends \Zotlabs\Web\Controller {
|
||||
if(intval($arr['expire']) < 0)
|
||||
$arr['expire'] = 0;
|
||||
|
||||
chatroom_create($channel,$arr);
|
||||
Zlib\Chatroom::create($channel,$arr);
|
||||
|
||||
$x = q("select * from chatroom where cr_name = '%s' and cr_uid = %d limit 1",
|
||||
dbesc($room),
|
||||
@ -105,7 +107,7 @@ class Chat extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
if((argc() > 3) && intval(argv(2)) && (argv(3) === 'leave')) {
|
||||
chatroom_leave($observer,argv(2),$_SERVER['REMOTE_ADDR']);
|
||||
Zlib\Chatroom::leave($observer,argv(2),$_SERVER['REMOTE_ADDR']);
|
||||
goaway(z_root() . '/channel/' . argv(1));
|
||||
}
|
||||
|
||||
@ -158,7 +160,7 @@ class Chat extends \Zotlabs\Web\Controller {
|
||||
$room_id = intval(argv(2));
|
||||
$bookmark_link = get_bookmark_link($ob);
|
||||
|
||||
$x = chatroom_enter($observer,$room_id,'online',$_SERVER['REMOTE_ADDR']);
|
||||
$x = Zlib\Chatroom::enter($observer,$room_id,'online',$_SERVER['REMOTE_ADDR']);
|
||||
if(! $x)
|
||||
return;
|
||||
$x = q("select * from chatroom where cr_id = %d and cr_uid = %d $sql_extra limit 1",
|
||||
@ -238,7 +240,7 @@ class Chat extends \Zotlabs\Web\Controller {
|
||||
));
|
||||
}
|
||||
|
||||
$rooms = chatroom_list(\App::$profile['profile_uid']);
|
||||
$rooms = Zlib\Chatroom::roomlist(\App::$profile['profile_uid']);
|
||||
|
||||
$o .= replace_macros(get_markup_template('chatrooms.tpl'), array(
|
||||
'$header' => sprintf( t('%1$s\'s Chatrooms'), \App::$profile['name']),
|
||||
|
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module; /** @file */
|
||||
<?php /** @file */
|
||||
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/security.php');
|
||||
|
||||
use \Zotlabs\Lib as Zlib;
|
||||
|
||||
class Chatsvc extends \Zotlabs\Web\Controller {
|
||||
|
||||
|
@ -100,9 +100,12 @@ class Cloud extends \Zotlabs\Web\Controller {
|
||||
// require_once('\Zotlabs\Storage/QuotaPlugin.php');
|
||||
// $server->addPlugin(new \Zotlabs\Storage\\QuotaPlugin($auth));
|
||||
|
||||
ob_start();
|
||||
// All we need to do now, is to fire up the server
|
||||
$server->exec();
|
||||
|
||||
ob_end_flush();
|
||||
|
||||
killme();
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
namespace Zotlabs\Module; /** @file */
|
||||
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
require_once('include/contact_widgets.php');
|
||||
require_once('include/items.php');
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
require_once('include/socgraph.php');
|
||||
require_once('include/selectors.php');
|
||||
require_once('include/group.php');
|
||||
|
@ -7,7 +7,7 @@ namespace Zotlabs\Module;
|
||||
*
|
||||
*/
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
require_once('include/socgraph.php');
|
||||
require_once('include/selectors.php');
|
||||
require_once('include/group.php');
|
||||
@ -230,7 +230,7 @@ class Connedit extends \Zotlabs\Web\Controller {
|
||||
|
||||
if(\App::$poi && \App::$poi['abook_my_perms'] != $abook_my_perms
|
||||
&& (! intval(\App::$poi['abook_self']))) {
|
||||
\Zotlabs\Daemon\Master(array('Notifier', (($new_friend) ? 'permission_create' : 'permission_update'), $contact_id));
|
||||
\Zotlabs\Daemon\Master::Summon(array('Notifier', (($new_friend) ? 'permission_create' : 'permission_update'), $contact_id));
|
||||
}
|
||||
|
||||
if($new_friend) {
|
||||
@ -485,7 +485,6 @@ class Connedit extends \Zotlabs\Web\Controller {
|
||||
|
||||
if($cmd === 'drop') {
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
// FIXME
|
||||
// We need to send either a purge or a refresh packet to the other side (the channel being unfriended).
|
||||
|
@ -8,7 +8,7 @@ namespace Zotlabs\Module;
|
||||
*/
|
||||
|
||||
require_once('include/photo/photo_driver.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
|
||||
|
||||
|
@ -59,7 +59,7 @@ class Directory extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get() {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
@ -7,17 +7,13 @@ class Display extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get($update = 0, $load = false) {
|
||||
|
||||
// logger("mod-display: update = $update load = $load");
|
||||
|
||||
|
||||
$checkjs = new \Zotlabs\Web\CheckJS(1);
|
||||
|
||||
|
||||
if($load)
|
||||
$_SESSION['loadtime'] = datetime_convert();
|
||||
|
||||
|
||||
if(intval(get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
@ -185,7 +181,7 @@ class Display extends \Zotlabs\Web\Controller {
|
||||
if($load || ($checkjs->disabled())) {
|
||||
$r = null;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
$sys = get_sys_channel();
|
||||
$sysid = $sys['channel_id'];
|
||||
|
||||
@ -233,7 +229,7 @@ class Display extends \Zotlabs\Web\Controller {
|
||||
elseif($update && !$load) {
|
||||
$r = null;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
$sys = get_sys_channel();
|
||||
$sysid = $sys['channel_id'];
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
require_once('include/conversation.php');
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
require_once('include/conversation.php');
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/PermissionDescription.php');
|
||||
|
@ -232,7 +232,7 @@ class Events extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
if($share)
|
||||
\Zotlabs\Daemon\Master(array('Notifier','event',$item_id));
|
||||
\Zotlabs\Daemon\Master::Summon(array('Notifier','event',$item_id));
|
||||
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ class Feed extends \Zotlabs\Web\Controller {
|
||||
|
||||
$channel = $r[0];
|
||||
|
||||
if((intval(get_config('system','block_public'))) && (! get_account_id()))
|
||||
if(observer_prohibited(true))
|
||||
killme();
|
||||
|
||||
logger('mod_feed: public feed request from ' . $_SERVER['REMOTE_ADDR'] . ' for ' . $channel['channel_address']);
|
||||
|
@ -21,7 +21,6 @@ namespace Zotlabs\Module;
|
||||
|
||||
|
||||
|
||||
require_once('include/Contact.php');
|
||||
require_once('include/attach.php');
|
||||
|
||||
|
||||
|
@ -4,9 +4,9 @@ namespace Zotlabs\Module;
|
||||
// Import a channel, either by direct file upload or via
|
||||
// connection to original server.
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
require_once('include/zot.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/import.php');
|
||||
|
||||
|
||||
|
@ -17,10 +17,10 @@ namespace Zotlabs\Module;
|
||||
*/
|
||||
|
||||
require_once('include/crypto.php');
|
||||
require_once('include/enotify.php');
|
||||
require_once('include/items.php');
|
||||
require_once('include/attach.php');
|
||||
|
||||
use \Zotlabs\Lib as Zlib;
|
||||
|
||||
class Item extends \Zotlabs\Web\Controller {
|
||||
|
||||
@ -56,7 +56,7 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
$remote_xchan = $remote_observer = false;
|
||||
|
||||
$profile_uid = ((x($_REQUEST,'profile_uid')) ? intval($_REQUEST['profile_uid']) : 0);
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
$sys = get_sys_channel();
|
||||
if($sys && $profile_uid && ($sys['channel_id'] == $profile_uid) && is_site_admin()) {
|
||||
$uid = intval($sys['channel_id']);
|
||||
@ -925,7 +925,7 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
// otherwise it will happen during delivery
|
||||
|
||||
if(($datarray['owner_xchan'] != $datarray['author_xchan']) && (intval($parent_item['item_wall']))) {
|
||||
notification(array(
|
||||
Zlib\Enotify::submit(array(
|
||||
'type' => NOTIFY_COMMENT,
|
||||
'from_xchan' => $datarray['author_xchan'],
|
||||
'to_xchan' => $datarray['owner_xchan'],
|
||||
@ -943,7 +943,7 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
$parent = $post_id;
|
||||
|
||||
if(($datarray['owner_xchan'] != $datarray['author_xchan']) && ($datarray['item_type'] == ITEM_TYPE_POST)) {
|
||||
notification(array(
|
||||
Zlib\Enotify::submit(array(
|
||||
'type' => NOTIFY_WALL,
|
||||
'from_xchan' => $datarray['author_xchan'],
|
||||
'to_xchan' => $datarray['owner_xchan'],
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
|
||||
|
@ -47,10 +47,8 @@ class Magic extends \Zotlabs\Web\Controller {
|
||||
*
|
||||
*/
|
||||
|
||||
$ret = zot_finger((($addr) ? $addr : '[system]@' . $parsed['host']),null);
|
||||
if($ret['success']) {
|
||||
$j = json_decode($ret['body'],true);
|
||||
if($j)
|
||||
$j = \Zotlabs\Zot\Finger::run((($addr) ? $addr : '[system]@' . $parsed['host']),null);
|
||||
if($j['success']) {
|
||||
import_xchan($j);
|
||||
|
||||
// Now try again
|
||||
|
@ -5,7 +5,7 @@ require_once('include/acl_selectors.php');
|
||||
require_once('include/message.php');
|
||||
require_once('include/zot.php');
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/Contact.php');
|
||||
|
||||
|
||||
|
||||
|
||||
@ -32,17 +32,16 @@ class Mail extends \Zotlabs\Web\Controller {
|
||||
if(! $recipient) {
|
||||
$channel = \App::get_channel();
|
||||
|
||||
$ret = zot_finger($rstr,$channel);
|
||||
$j = \Zotlabs\Zot\Finger::run($rstr,$channel);
|
||||
|
||||
if(! $ret['success']) {
|
||||
if(! $j['success']) {
|
||||
notice( t('Unable to lookup recipient.') . EOL);
|
||||
return;
|
||||
}
|
||||
$j = json_decode($ret['body'],true);
|
||||
|
||||
logger('message_post: lookup: ' . $url . ' ' . print_r($j,true));
|
||||
|
||||
if(! ($j['success'] && $j['guid'])) {
|
||||
if(! $j['guid']) {
|
||||
notice( t('Unable to communicate with requested channel.'));
|
||||
return;
|
||||
}
|
||||
@ -306,11 +305,6 @@ class Mail extends \Zotlabs\Web\Controller {
|
||||
else
|
||||
\App::$poi = $messages[0]['to'];
|
||||
|
||||
// require_once('include/Contact.php');
|
||||
|
||||
// \App::set_widget('mail_conversant',vcard_from_xchan(\App::$poi,$get_observer_hash,'mail'));
|
||||
|
||||
|
||||
$tpl = get_markup_template('msg-header.tpl');
|
||||
|
||||
\App::$page['htmlhead'] .= replace_macros($tpl, array(
|
||||
|
@ -2,7 +2,7 @@
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/menu.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
|
||||
class Menu extends \Zotlabs\Web\Controller {
|
||||
|
@ -5,8 +5,6 @@ require_once('include/acl_selectors.php');
|
||||
require_once('include/message.php');
|
||||
require_once('include/zot.php');
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/Contact.php');
|
||||
|
||||
|
||||
|
||||
class Message extends \Zotlabs\Web\Controller {
|
||||
|
@ -385,7 +385,7 @@ class Network extends \Zotlabs\Web\Controller {
|
||||
$abook_uids = " and abook.abook_channel = " . local_channel() . " ";
|
||||
|
||||
if($firehose && (! get_config('system','disable_discover_tab'))) {
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
$sys = get_sys_channel();
|
||||
$uids = " and item.uid = " . intval($sys['channel_id']) . " ";
|
||||
\App::$data['firehose'] = intval($sys['channel_id']);
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/permissions.php');
|
||||
|
||||
|
||||
|
@ -181,8 +181,8 @@ class Oep extends \Zotlabs\Web\Controller {
|
||||
function oep_profile_reply($args) {
|
||||
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/Contact.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
$url = $args['url'];
|
||||
|
||||
if(preg_match('#//(.*?)/(.*?)/(.*?)(/|\?|&|$)#',$url,$matches)) {
|
||||
|
@ -1,12 +1,12 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/photo/photo_driver.php');
|
||||
require_once('include/photos.php');
|
||||
require_once('include/items.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/security.php');
|
||||
require_once('include/Contact.php');
|
||||
require_once('include/attach.php');
|
||||
require_once('include/text.php');
|
||||
require_once('include/PermissionDescription.php');
|
||||
@ -18,7 +18,7 @@ class Photos extends \Zotlabs\Web\Controller {
|
||||
function init() {
|
||||
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -518,7 +518,7 @@ class Photos extends \Zotlabs\Web\Controller {
|
||||
// photos/name/image/xxxxx
|
||||
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
@ -1,12 +1,13 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
/**
|
||||
* @file mod/ping.php
|
||||
*
|
||||
*/
|
||||
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/notify.php');
|
||||
|
||||
|
||||
/**
|
||||
* @brief do several updates when pinged.
|
||||
@ -285,7 +286,7 @@ class Ping extends \Zotlabs\Web\Controller {
|
||||
foreach($r as $item) {
|
||||
if((argv(1) === 'home') && (! intval($item['item_wall'])))
|
||||
continue;
|
||||
$result[] = format_notification($item);
|
||||
$result[] = \Zotlabs\Lib\Enotify::format($item);
|
||||
}
|
||||
}
|
||||
// logger('ping (network||home): ' . print_r($result, true), LOGGER_DATA);
|
||||
|
@ -20,17 +20,17 @@ class Probe extends \Zotlabs\Web\Controller {
|
||||
$channel = \App::get_channel();
|
||||
$addr = trim($_GET['addr']);
|
||||
$do_import = ((intval($_GET['import']) && is_site_admin()) ? true : false);
|
||||
$res = zot_finger($addr,$channel,false);
|
||||
|
||||
$j = \Zotlabs\Zot\Finger::run($addr,$channel,false);
|
||||
|
||||
// $res = zot_finger($addr,$channel,false);
|
||||
|
||||
$o .= '<pre>';
|
||||
if($res['success'])
|
||||
$j = json_decode($res['body'],true);
|
||||
else {
|
||||
if(! $j['success']) {
|
||||
$o .= sprintf( t('Fetching URL returns error: %1$s'),$res['error'] . "\r\n\r\n");
|
||||
$o .= "<strong>https connection failed. Trying again with auto failover to http.</strong>\r\n\r\n";
|
||||
$res = zot_finger($addr,$channel,true);
|
||||
if($res['success'])
|
||||
$j = json_decode($res['body'],true);
|
||||
else
|
||||
$j = \Zotlabs\Zot\Finger::run($addr,$channel,true);
|
||||
if(! $j['success'])
|
||||
$o .= sprintf( t('Fetching URL returns error: %1$s'),$res['error'] . "\r\n\r\n");
|
||||
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ class Profile extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get() {
|
||||
|
||||
if(get_config('system','block_public') && (! get_account_id()) && (! remote_channel())) {
|
||||
if(observer_prohibited(true)) {
|
||||
return login();
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/photo/photo_driver.php');
|
||||
require_once('include/photos.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
/* @brief Function for sync'ing permissions of profile-photos and their profile
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/selectors.php');
|
||||
|
||||
|
||||
@ -602,7 +602,7 @@ class Profiles extends \Zotlabs\Web\Controller {
|
||||
return;
|
||||
}
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
$profile_fields_basic = get_profile_fields_basic();
|
||||
$profile_fields_advanced = get_profile_fields_advanced();
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
require_once('include/photos.php');
|
||||
|
||||
|
||||
|
@ -28,9 +28,10 @@ class Pubsites extends \Zotlabs\Web\Controller {
|
||||
if($ret['success']) {
|
||||
$j = json_decode($ret['body'],true);
|
||||
if($j) {
|
||||
$o .= '<table class="table table-striped table-hover"><tr><td>' . t('Hub URL') . '</td><td>' . t('Access Type') . '</td><td>' . t('Registration Policy') . '</td><td>' . t('Software') . '</td><td colspan="2">' . t('Ratings') . '</td></tr>';
|
||||
$o .= '<table class="table table-striped table-hover"><tr><td>' . t('Hub URL') . '</td><td>' . t('Access Type') . '</td><td>' . t('Registration Policy') . '</td><td>' . t('Stats') . '</td><td>' . t('Software') . '</td><td colspan="2">' . t('Ratings') . '</td></tr>';
|
||||
if($j['sites']) {
|
||||
foreach($j['sites'] as $jj) {
|
||||
$m = parse_url($jj['url']);
|
||||
if(strpos($jj['project'],\Zotlabs\Lib\System::get_platform_name()) === false)
|
||||
continue;
|
||||
$host = strtolower(substr($jj['url'],strpos($jj['url'],'://')+3));
|
||||
@ -43,7 +44,7 @@ class Pubsites extends \Zotlabs\Web\Controller {
|
||||
$location = '<br /> ';
|
||||
}
|
||||
$urltext = str_replace(array('https://'), '', $jj['url']);
|
||||
$o .= '<tr><td><a href="'. (($jj['sellpage']) ? $jj['sellpage'] : $jj['url'] . '/register' ) . '" ><i class="fa fa-link"></i> ' . $urltext . '</a>' . $location . '</td><td>' . $jj['access'] . '</td><td>' . $jj['register'] . '</td><td>' . ucwords($jj['project']) . '</td><td><a href="ratings/' . $host . '" class="btn-btn-default"><i class="fa fa-eye"></i> ' . t('View') . '</a></td>' . $rate_links . '</tr>';
|
||||
$o .= '<tr><td><a href="'. (($jj['sellpage']) ? $jj['sellpage'] : $jj['url'] . '/register' ) . '" ><i class="fa fa-link"></i> ' . $urltext . '</a>' . $location . '</td><td>' . $jj['access'] . '</td><td>' . $jj['register'] . '</td><td>' . '<a target="stats" href="https://hubchart-tarine.rhcloud.com/hub.jsp?hubFqdn=' . $m['host'] . '"><i class="fa fa-area-chart"></i></a></td><td>' . ucwords($jj['project']) . '</td><td><a href="ratings/' . $host . '" class="btn-btn-default"><i class="fa fa-eye"></i> ' . t('View') . '</a></td>' . $rate_links . '</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
|
||||
$_SESSION['loadtime'] = datetime_convert();
|
||||
|
||||
|
||||
if(get_config('system','block_public') && (! get_account_id()) && (! remote_channel())) {
|
||||
if(observer_prohibited(true)) {
|
||||
return login();
|
||||
}
|
||||
|
||||
@ -71,7 +71,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
|
||||
$pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start']));
|
||||
}
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/security.php');
|
||||
|
||||
if(get_config('system','site_firehose')) {
|
||||
|
@ -6,7 +6,6 @@ namespace Zotlabs\Module;
|
||||
class Randprof extends \Zotlabs\Web\Controller {
|
||||
|
||||
function init() {
|
||||
require_once('include/Contact.php');
|
||||
$x = random_profile();
|
||||
if($x)
|
||||
goaway(chanlink_url($x));
|
||||
|
@ -8,7 +8,7 @@ class Ratings extends \Zotlabs\Web\Controller {
|
||||
|
||||
function init() {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ class Ratings extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get() {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
@ -60,16 +60,13 @@ class Regdir extends \Zotlabs\Web\Controller {
|
||||
json_return_and_die($result);
|
||||
}
|
||||
|
||||
$f = zot_finger('[system]@' . $m['host']);
|
||||
if($f['success']) {
|
||||
$j = json_decode($f['body'],true);
|
||||
$j = \Zotlabs\Zot\Finger::run('[system]@' . $m['host']);
|
||||
if($j['success'] && $j['guid']) {
|
||||
$x = import_xchan($j);
|
||||
if($x['success']) {
|
||||
$result['success'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(! $result['success'])
|
||||
$valid = 0;
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
|
||||
class Register extends \Zotlabs\Web\Controller {
|
||||
|
@ -36,16 +36,11 @@ class Removeaccount extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
$global_remove = intval($_POST['global']);
|
||||
|
||||
account_remove($account_id,true);
|
||||
|
||||
account_remove($account_id, 1 - $global_remove);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function get() {
|
||||
|
||||
if(! local_channel())
|
||||
|
@ -35,8 +35,6 @@ class Removeme extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
$global_remove = intval($_POST['global']);
|
||||
|
||||
channel_remove(local_channel(),1 - $global_remove,true);
|
||||
@ -44,7 +42,6 @@ class Removeme extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
|
||||
|
||||
function get() {
|
||||
|
||||
if(! local_channel())
|
||||
|
@ -139,7 +139,7 @@ class Search extends \Zotlabs\Web\Controller {
|
||||
$item_normal = item_normal();
|
||||
$pub_sql = public_permissions_sql($observer_hash);
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
$sys = get_sys_channel();
|
||||
|
||||
|
@ -483,7 +483,7 @@ class Settings extends \Zotlabs\Web\Controller {
|
||||
|
||||
if($username != $channel['channel_name']) {
|
||||
$name_change = true;
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
$err = validate_channelname($username);
|
||||
if($err) {
|
||||
notice($err);
|
||||
|
@ -12,7 +12,6 @@ namespace Zotlabs\Module;
|
||||
/**
|
||||
* @brief Initialisation for the setup module.
|
||||
*
|
||||
* @param[in,out] App &$a
|
||||
*/
|
||||
|
||||
class Setup extends \Zotlabs\Web\Controller {
|
||||
@ -54,16 +53,15 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
/**
|
||||
* @brief Handle the actions of the different setup steps.
|
||||
*
|
||||
* @param[in,out] App &$a
|
||||
*/
|
||||
|
||||
function post() {
|
||||
global $db;
|
||||
|
||||
switch($this->install_wizard_pass) {
|
||||
case 1:
|
||||
case 2:
|
||||
return;
|
||||
break; // just in case return don't return :)
|
||||
// implied break;
|
||||
case 3:
|
||||
$urlpath = \App::get_path();
|
||||
$dbhost = trim($_POST['dbhost']);
|
||||
@ -82,39 +80,15 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
$siteurl = rtrim($siteurl,'/');
|
||||
|
||||
require_once('include/dba/dba_driver.php');
|
||||
unset($db);
|
||||
$db = dba_factory($dbhost, $dbport, $dbuser, $dbpass, $dbdata, $dbtype, true);
|
||||
|
||||
if(! $db->connected) {
|
||||
echo 'Database Connect failed: ' . $db->error;
|
||||
$db = \DBA::dba_factory($dbhost, $dbport, $dbuser, $dbpass, $dbdata, $dbtype, true);
|
||||
|
||||
if(! \DBA::$dba->connected) {
|
||||
echo 'Database Connect failed: ' . DBA::$dba->error;
|
||||
killme();
|
||||
\App::$data['db_conn_failed']=true;
|
||||
}
|
||||
/*if(get_db_errno()) {
|
||||
unset($db);
|
||||
$db = dba_factory($dbhost, $dbport, $dbuser, $dbpass, '', true);
|
||||
|
||||
if(! get_db_errno()) {
|
||||
$r = q("CREATE DATABASE '%s'",
|
||||
dbesc($dbdata)
|
||||
);
|
||||
if($r) {
|
||||
unset($db);
|
||||
$db = new dba($dbhost, $dbport, $dbuser, $dbpass, $dbdata, true);
|
||||
} else {
|
||||
\App::$data['db_create_failed']=true;
|
||||
}
|
||||
} else {
|
||||
\App::$data['db_conn_failed']=true;
|
||||
return;
|
||||
}
|
||||
}*/
|
||||
//if(get_db_errno()) {
|
||||
|
||||
//}
|
||||
|
||||
return;
|
||||
break;
|
||||
// implied break;
|
||||
case 4:
|
||||
$urlpath = \App::get_path();
|
||||
$dbhost = notags(trim($_POST['dbhost']));
|
||||
@ -138,10 +112,12 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
if(! \DBA::$dba->connected) {
|
||||
// connect to db
|
||||
$db = dba_factory($dbhost, $dbport, $dbuser, $dbpass, $dbdata, $dbtype, true);
|
||||
$db = \DBA::dba_factory($dbhost, $dbport, $dbuser, $dbpass, $dbdata, $dbtype, true);
|
||||
}
|
||||
|
||||
if(! $db->connected) {
|
||||
if(! \DBA::$dba->connected) {
|
||||
echo 'CRITICAL: DB not connected.';
|
||||
killme();
|
||||
}
|
||||
@ -175,6 +151,8 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
\App::$data['db_installed'] = true;
|
||||
|
||||
return;
|
||||
// implied break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -191,11 +169,10 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
*
|
||||
* Depending on the state we are currently in it returns different content.
|
||||
*
|
||||
* @param App &$a
|
||||
* @return string parsed HTML output
|
||||
*/
|
||||
|
||||
function get() {
|
||||
global $db;
|
||||
|
||||
$o = '';
|
||||
$wizard_status = '';
|
||||
@ -228,7 +205,7 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
$txt .= "<pre>".\App::$data['db_failed'] . "</pre>". EOL ;
|
||||
$db_return_text .= $txt;
|
||||
}
|
||||
if($db && $db->connected) {
|
||||
if(\DBA::$dba && \DBA::$dba->connected) {
|
||||
$r = q("SELECT COUNT(*) as `total` FROM `account`");
|
||||
if($r && count($r) && $r[0]['total']) {
|
||||
$tpl = get_markup_template('install.tpl');
|
||||
@ -598,7 +575,7 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
if(! is_writable(TEMPLATE_BUILD_PATH) ) {
|
||||
$status = false;
|
||||
$help = t('Red uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.') .EOL;
|
||||
$help .= sprintf( t('In order to store these compiled templates, the web server needs to have write access to the directory %s under the Red top level folder.'), TEMPLATE_BUILD_PATH) . EOL;
|
||||
$help .= sprintf( t('In order to store these compiled templates, the web server needs to have write access to the directory %s under the top level web folder.'), TEMPLATE_BUILD_PATH) . EOL;
|
||||
$help .= t('Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder.').EOL;
|
||||
$help .= sprintf( t('Note: as a security measure, you should give the web server write access to %s only--not the template files (.tpl) that it contains.'), TEMPLATE_BUILD_PATH) . EOL;
|
||||
}
|
||||
@ -698,12 +675,12 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
|
||||
|
||||
function load_database($db) {
|
||||
$str = file_get_contents($db->get_install_script());
|
||||
$str = file_get_contents(\DBA::$dba->get_install_script());
|
||||
$arr = explode(';',$str);
|
||||
$errors = false;
|
||||
foreach($arr as $a) {
|
||||
if(strlen(trim($a))) {
|
||||
$r = @$db->q(trim($a));
|
||||
$r = dbq(trim($a));
|
||||
if(! $r) {
|
||||
$errors .= t('Errors encountered creating database tables.') . $a . EOL;
|
||||
}
|
||||
@ -734,7 +711,7 @@ class Setup extends \Zotlabs\Web\Controller {
|
||||
set_config('system','curl_ssl_ciphers','ALL:!eNULL');
|
||||
|
||||
// Create a system channel
|
||||
require_once ('include/identity.php');
|
||||
require_once ('include/channel.php');
|
||||
create_sys_channel();
|
||||
|
||||
$baseurl = z_root();
|
||||
|
@ -11,7 +11,7 @@ class Uexport extends \Zotlabs\Web\Controller {
|
||||
if(argc() > 1) {
|
||||
$channel = \App::get_channel();
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
if(argc() > 1 && intval(argv(1)) > 1900) {
|
||||
$year = intval(argv(1));
|
||||
|
@ -2,14 +2,12 @@
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/selectors.php');
|
||||
require_once('include/Contact.php');
|
||||
|
||||
|
||||
class Viewconnections extends \Zotlabs\Web\Controller {
|
||||
|
||||
function init() {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
return;
|
||||
}
|
||||
if(argc() > 1)
|
||||
@ -18,7 +16,7 @@ class Viewconnections extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get() {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/attach.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/photos.php');
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/photo/photo_driver.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/photos.php');
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
require_once('include/PermissionDescription.php');
|
||||
|
@ -15,7 +15,7 @@ class Zotfeed extends \Zotlabs\Web\Controller {
|
||||
if(! $mindate)
|
||||
$mindate = datetime_convert('UTC','UTC', 'now - 14 days');
|
||||
|
||||
if(get_config('system','block_public') && (! get_account_id()) && (! remote_channel())) {
|
||||
if(observer_prohibited()) {
|
||||
$result['message'] = 'Public access denied';
|
||||
json_return_and_die($result);
|
||||
}
|
||||
@ -45,8 +45,6 @@ class Zotfeed extends \Zotlabs\Web\Controller {
|
||||
$result['messages'] = zot_feed($r[0]['channel_id'],$observer['xchan_hash'],array('mindate' => $mindate));
|
||||
$result['success'] = true;
|
||||
json_return_and_die($result);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -256,6 +256,7 @@ class Browser extends DAV\Browser\Plugin {
|
||||
$func($a);
|
||||
}
|
||||
}
|
||||
$this->server->httpResponse->setHeader('Content-Security-Policy', "script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'");
|
||||
construct_page($a);
|
||||
}
|
||||
|
||||
|
130
Zotlabs/Web/WebServer.php
Normal file
130
Zotlabs/Web/WebServer.php
Normal file
@ -0,0 +1,130 @@
|
||||
<?php /** @file */
|
||||
|
||||
namespace Zotlabs\Web;
|
||||
|
||||
class WebServer {
|
||||
|
||||
public function run() {
|
||||
|
||||
|
||||
/*
|
||||
* Bootstrap the application, load configuration, load modules, load theme, etc.
|
||||
*/
|
||||
|
||||
require_once('boot.php');
|
||||
|
||||
sys_boot();
|
||||
|
||||
|
||||
\App::$language = get_best_language();
|
||||
load_translation_table(\App::$language,\App::$install);
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Important stuff we always need to do.
|
||||
*
|
||||
* The order of these may be important so use caution if you think they're all
|
||||
* intertwingled with no logical order and decide to sort it out. Some of the
|
||||
* dependencies have changed, but at least at one time in the recent past - the
|
||||
* order was critical to everything working properly
|
||||
*
|
||||
*/
|
||||
|
||||
if(\App::$session) {
|
||||
\App::$session->start();
|
||||
}
|
||||
else {
|
||||
session_start();
|
||||
register_shutdown_function('session_write_close');
|
||||
}
|
||||
|
||||
/**
|
||||
* Language was set earlier, but we can over-ride it in the session.
|
||||
* We have to do it here because the session was just now opened.
|
||||
*/
|
||||
|
||||
if(array_key_exists('system_language',$_POST)) {
|
||||
if(strlen($_POST['system_language']))
|
||||
$_SESSION['language'] = $_POST['system_language'];
|
||||
else
|
||||
unset($_SESSION['language']);
|
||||
}
|
||||
if((x($_SESSION, 'language')) && ($_SESSION['language'] !== $lang)) {
|
||||
\App::$language = $_SESSION['language'];
|
||||
load_translation_table(\App::$language);
|
||||
}
|
||||
|
||||
if((x($_GET,'zid')) && (! \App::$install)) {
|
||||
\App::$query_string = strip_zids(\App::$query_string);
|
||||
if(! local_channel()) {
|
||||
$_SESSION['my_address'] = $_GET['zid'];
|
||||
zid_init($a);
|
||||
}
|
||||
}
|
||||
|
||||
if((x($_SESSION, 'authenticated')) || (x($_POST, 'auth-params')) || (\App::$module === 'login'))
|
||||
require('include/auth.php');
|
||||
|
||||
if(! x($_SESSION, 'sysmsg'))
|
||||
$_SESSION['sysmsg'] = array();
|
||||
|
||||
if(! x($_SESSION, 'sysmsg_info'))
|
||||
$_SESSION['sysmsg_info'] = array();
|
||||
|
||||
/*
|
||||
* check_config() is responsible for running update scripts. These automatically
|
||||
* update the DB schema whenever we push a new one out. It also checks to see if
|
||||
* any plugins have been added or removed and reacts accordingly.
|
||||
*/
|
||||
|
||||
|
||||
if(\App::$install) {
|
||||
/* Allow an exception for the view module so that pcss will be interpreted during installation */
|
||||
if(\App::$module != 'view')
|
||||
\App::$module = 'setup';
|
||||
}
|
||||
else
|
||||
check_config($a);
|
||||
|
||||
nav_set_selected('nothing');
|
||||
|
||||
$Router = new Router($a);
|
||||
|
||||
/* initialise content region */
|
||||
|
||||
if(! x(\App::$page, 'content'))
|
||||
\App::$page['content'] = '';
|
||||
|
||||
call_hooks('page_content_top', \App::$page['content']);
|
||||
|
||||
|
||||
$Router->Dispatch($a);
|
||||
|
||||
|
||||
// If you're just visiting, let javascript take you home
|
||||
|
||||
if(x($_SESSION, 'visitor_home')) {
|
||||
$homebase = $_SESSION['visitor_home'];
|
||||
} elseif(local_channel()) {
|
||||
$homebase = z_root() . '/channel/' . \App::$channel['channel_address'];
|
||||
}
|
||||
|
||||
if(isset($homebase)) {
|
||||
\App::$page['content'] .= '<script>var homebase = "' . $homebase . '";</script>';
|
||||
}
|
||||
|
||||
// now that we've been through the module content, see if the page reported
|
||||
// a permission problem and if so, a 403 response would seem to be in order.
|
||||
|
||||
if(stristr(implode("", $_SESSION['sysmsg']), t('Permission denied'))) {
|
||||
header($_SERVER['SERVER_PROTOCOL'] . ' 403 ' . t('Permission denied.'));
|
||||
}
|
||||
|
||||
call_hooks('page_end', \App::$page['content']);
|
||||
|
||||
construct_page($a);
|
||||
|
||||
killme();
|
||||
}
|
||||
}
|
@ -80,10 +80,8 @@ class Auth {
|
||||
|
||||
if(! $x) {
|
||||
// finger them if they can't be found.
|
||||
$ret = zot_finger($address, null);
|
||||
if ($ret['success']) {
|
||||
$j = json_decode($ret['body'], true);
|
||||
if($j)
|
||||
$j = Finger::run($address, null);
|
||||
if ($j['success']) {
|
||||
import_xchan($j);
|
||||
$x = q("select * from hubloc left join xchan on xchan_hash = hubloc_hash
|
||||
where hubloc_addr = '%s' order by hubloc_id desc",
|
||||
|
130
Zotlabs/Zot/Finger.php
Normal file
130
Zotlabs/Zot/Finger.php
Normal file
@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
namespace Zotlabs\Zot;
|
||||
|
||||
|
||||
class Finger {
|
||||
|
||||
static private $token;
|
||||
|
||||
/**
|
||||
* @brief Look up information about channel.
|
||||
*
|
||||
* @param string $webbie
|
||||
* does not have to be host qualified e.g. 'foo' is treated as 'foo\@thishub'
|
||||
* @param array $channel
|
||||
* (optional), if supplied permissions will be enumerated specifically for $channel
|
||||
* @param boolean $autofallback
|
||||
* fallback/failover to http if https connection cannot be established. Default is true.
|
||||
*
|
||||
* @return zotinfo array (with 'success' => true) or array('success' => false);
|
||||
*/
|
||||
|
||||
static public function run($webbie, $channel = null, $autofallback = true) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
self::$token = random_string();
|
||||
|
||||
if (strpos($webbie,'@') === false) {
|
||||
$address = $webbie;
|
||||
$host = App::get_hostname();
|
||||
} else {
|
||||
$address = substr($webbie,0,strpos($webbie,'@'));
|
||||
$host = substr($webbie,strpos($webbie,'@')+1);
|
||||
}
|
||||
|
||||
$xchan_addr = $address . '@' . $host;
|
||||
|
||||
if ((! $address) || (! $xchan_addr)) {
|
||||
logger('zot_finger: no address :' . $webbie);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
logger('using xchan_addr: ' . $xchan_addr, LOGGER_DATA, LOG_DEBUG);
|
||||
|
||||
// potential issue here; the xchan_addr points to the primary hub.
|
||||
// The webbie we were called with may not, so it might not be found
|
||||
// unless we query for hubloc_addr instead of xchan_addr
|
||||
|
||||
$r = q("select xchan.*, hubloc.* from xchan
|
||||
left join hubloc on xchan_hash = hubloc_hash
|
||||
where xchan_addr = '%s' and hubloc_primary = 1 limit 1",
|
||||
dbesc($xchan_addr)
|
||||
);
|
||||
|
||||
if ($r) {
|
||||
$url = $r[0]['hubloc_url'];
|
||||
|
||||
if ($r[0]['hubloc_network'] && $r[0]['hubloc_network'] !== 'zot') {
|
||||
logger('zot_finger: alternate network: ' . $webbie);
|
||||
logger('url: '.$url.', net: '.var_export($r[0]['hubloc_network'],true), LOGGER_DATA, LOG_DEBUG);
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$url = 'https://' . $host;
|
||||
}
|
||||
|
||||
$rhs = '/.well-known/zot-info';
|
||||
$https = ((strpos($url,'https://') === 0) ? true : false);
|
||||
|
||||
logger('zot_finger: ' . $address . ' at ' . $url, LOGGER_DEBUG);
|
||||
|
||||
if ($channel) {
|
||||
$postvars = array(
|
||||
'address' => $address,
|
||||
'target' => $channel['channel_guid'],
|
||||
'target_sig' => $channel['channel_guid_sig'],
|
||||
'key' => $channel['channel_pubkey'],
|
||||
'token' => self::$token
|
||||
);
|
||||
|
||||
$result = z_post_url($url . $rhs,$postvars);
|
||||
|
||||
if ((! $result['success']) && ($autofallback)) {
|
||||
if ($https) {
|
||||
logger('zot_finger: https failed. falling back to http');
|
||||
$result = z_post_url('http://' . $host . $rhs,$postvars);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$rhs .= '?f=&address=' . urlencode($address) . '&token=' . self::$token;
|
||||
|
||||
$result = z_fetch_url($url . $rhs);
|
||||
if ((! $result['success']) && ($autofallback)) {
|
||||
if ($https) {
|
||||
logger('zot_finger: https failed. falling back to http');
|
||||
$result = z_fetch_url('http://' . $host . $rhs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(! $result['success']) {
|
||||
logger('zot_finger: no results');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$x = json_decode($result['body'],true);
|
||||
if($x) {
|
||||
$signed_token = ((is_array($x) && array_key_exists('signed_token',$x)) ? $x['signed_token'] : null);
|
||||
if($signed_token) {
|
||||
$valid = rsa_verify('token.' . self::$token,base64url_decode($signed_token),$x['key']);
|
||||
if(! $valid) {
|
||||
logger('invalid signed token: ' . $url . $rhs, LOGGER_NORMAL, LOG_ERR);
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
else {
|
||||
logger('No signed token from ' . $url . $rhs, LOGGER_NORMAL, LOG_WARNING);
|
||||
// after 2017-01-01 this will be a hard error unless you over-ride it.
|
||||
if((time() > 1483228800) && (! get_config('system','allow_unsigned_zotfinger')))
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
return $x;
|
||||
}
|
||||
|
||||
}
|
120
boot.php
120
boot.php
@ -39,14 +39,14 @@ require_once('include/permissions.php');
|
||||
require_once('library/Mobile_Detect/Mobile_Detect.php');
|
||||
require_once('include/features.php');
|
||||
require_once('include/taxonomy.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/Contact.php');
|
||||
require_once('include/channel.php');
|
||||
require_once('include/connections.php');
|
||||
require_once('include/account.php');
|
||||
|
||||
|
||||
define ( 'PLATFORM_NAME', 'hubzilla' );
|
||||
define ( 'STD_VERSION', '1.7.1' );
|
||||
define ( 'ZOT_REVISION', 1 );
|
||||
define ( 'ZOT_REVISION', 1.1 );
|
||||
|
||||
define ( 'DB_UPDATE_VERSION', 1168 );
|
||||
|
||||
@ -580,6 +580,72 @@ define ( 'ITEM_IS_STICKY', 1000 );
|
||||
define ( 'DBTYPE_MYSQL', 0 );
|
||||
define ( 'DBTYPE_POSTGRES', 1 );
|
||||
|
||||
|
||||
function sys_boot() {
|
||||
|
||||
// our central App object
|
||||
|
||||
App::init();
|
||||
|
||||
/*
|
||||
* Load the configuration file which contains our DB credentials.
|
||||
* Ignore errors. If the file doesn't exist or is empty, we are running in
|
||||
* installation mode.
|
||||
*/
|
||||
|
||||
// miniApp is a conversion object from old style .htconfig.php files
|
||||
|
||||
$a = new miniApp;
|
||||
|
||||
|
||||
App::$install = ((file_exists('.htconfig.php') && filesize('.htconfig.php')) ? false : true);
|
||||
|
||||
@include('.htconfig.php');
|
||||
|
||||
if(! defined('UNO'))
|
||||
define('UNO', 0);
|
||||
|
||||
if(array_key_exists('default_timezone',get_defined_vars())) {
|
||||
App::$config['system']['timezone'] = $default_timezone;
|
||||
}
|
||||
|
||||
$a->convert();
|
||||
|
||||
App::$timezone = ((App::$config['system']['timezone']) ? App::$config['system']['timezone'] : 'UTC');
|
||||
date_default_timezone_set(App::$timezone);
|
||||
|
||||
|
||||
/*
|
||||
* Try to open the database;
|
||||
*/
|
||||
|
||||
require_once('include/dba/dba_driver.php');
|
||||
|
||||
if(! App::$install) {
|
||||
DBA::dba_factory($db_host, $db_port, $db_user, $db_pass, $db_data, $db_type, App::$install);
|
||||
if(! DBA::$dba->connected) {
|
||||
system_unavailable();
|
||||
}
|
||||
|
||||
unset($db_host, $db_port, $db_user, $db_pass, $db_data, $db_type);
|
||||
|
||||
/**
|
||||
* Load configs from db. Overwrite configs from .htconfig.php
|
||||
*/
|
||||
|
||||
load_config('config');
|
||||
load_config('system');
|
||||
load_config('feature');
|
||||
|
||||
App::$session = new Zotlabs\Web\Session();
|
||||
App::$session->init();
|
||||
load_hooks();
|
||||
call_hooks('init_1');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Reverse the effect of magic_quotes_gpc if it is enabled.
|
||||
@ -1198,7 +1264,6 @@ class App {
|
||||
* @return App
|
||||
*/
|
||||
function get_app() {
|
||||
global $a;
|
||||
return $a;
|
||||
}
|
||||
|
||||
@ -1248,7 +1313,6 @@ function system_unavailable() {
|
||||
|
||||
|
||||
function clean_urls() {
|
||||
global $a;
|
||||
|
||||
// if(App::$config['system']['clean_urls'])
|
||||
return true;
|
||||
@ -1256,8 +1320,6 @@ function clean_urls() {
|
||||
}
|
||||
|
||||
function z_path() {
|
||||
global $a;
|
||||
|
||||
$base = z_root();
|
||||
if(! clean_urls())
|
||||
$base .= '/?q=';
|
||||
@ -1273,7 +1335,6 @@ function z_path() {
|
||||
* @return string
|
||||
*/
|
||||
function z_root() {
|
||||
global $a;
|
||||
return App::get_baseurl();
|
||||
}
|
||||
|
||||
@ -1605,7 +1666,6 @@ function fix_system_urls($oldurl, $newurl) {
|
||||
// returns the complete html for inserting into the page
|
||||
|
||||
function login($register = false, $form_id = 'main-login', $hiddens=false) {
|
||||
$a = get_app();
|
||||
$o = '';
|
||||
$reg = false;
|
||||
$reglink = get_config('system', 'register_link');
|
||||
@ -1675,9 +1735,7 @@ function goaway($s) {
|
||||
}
|
||||
|
||||
function shutdown() {
|
||||
global $db;
|
||||
if(is_object($db) && $db->connected)
|
||||
$db->close();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1767,7 +1825,6 @@ function remote_user() {
|
||||
* @param string $s Text to display
|
||||
*/
|
||||
function notice($s) {
|
||||
$a = get_app();
|
||||
if(! x($_SESSION, 'sysmsg')) $_SESSION['sysmsg'] = array();
|
||||
|
||||
// ignore duplicated error messages which haven't yet been displayed
|
||||
@ -1791,7 +1848,6 @@ function notice($s) {
|
||||
* @param string $s Text to display
|
||||
*/
|
||||
function info($s) {
|
||||
$a = get_app();
|
||||
if(! x($_SESSION, 'sysmsg_info')) $_SESSION['sysmsg_info'] = array();
|
||||
if(App::$interactive)
|
||||
$_SESSION['sysmsg_info'][] = $s;
|
||||
@ -1892,7 +1948,6 @@ function is_windows() {
|
||||
*/
|
||||
|
||||
function is_site_admin() {
|
||||
$a = get_app();
|
||||
|
||||
if($_SESSION['delegate'])
|
||||
return false;
|
||||
@ -1913,7 +1968,7 @@ function is_site_admin() {
|
||||
* @return bool true if user is a developer
|
||||
*/
|
||||
function is_developer() {
|
||||
$a = get_app();
|
||||
|
||||
if((intval($_SESSION['authenticated']))
|
||||
&& (is_array(App::$account))
|
||||
&& (App::$account['account_roles'] & ACCOUNT_ROLE_DEVELOPER))
|
||||
@ -1924,7 +1979,6 @@ function is_developer() {
|
||||
|
||||
|
||||
function load_contact_links($uid) {
|
||||
$a = get_app();
|
||||
|
||||
$ret = array();
|
||||
|
||||
@ -2242,7 +2296,6 @@ function appdirpath() {
|
||||
* @param string $icon
|
||||
*/
|
||||
function head_set_icon($icon) {
|
||||
global $a;
|
||||
|
||||
App::$data['pageicon'] = $icon;
|
||||
// logger('head_set_icon: ' . $icon);
|
||||
@ -2254,7 +2307,6 @@ function head_set_icon($icon) {
|
||||
* @return string absolut path to pageicon
|
||||
*/
|
||||
function head_get_icon() {
|
||||
global $a;
|
||||
|
||||
$icon = App::$data['pageicon'];
|
||||
if(! strpos($icon, '://'))
|
||||
@ -2320,7 +2372,7 @@ function z_get_temp_dir() {
|
||||
}
|
||||
|
||||
function z_check_cert() {
|
||||
$a = get_app();
|
||||
|
||||
if(strpos(z_root(),'https://') !== false) {
|
||||
$x = z_fetch_url(z_root() . '/siteinfo/json');
|
||||
if(! $x['success']) {
|
||||
@ -2341,8 +2393,6 @@ function z_check_cert() {
|
||||
*/
|
||||
function cert_bad_email() {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$email_tpl = get_intltext_template("cert_bad_eml.tpl");
|
||||
$email_msg = replace_macros($email_tpl, array(
|
||||
'$sitename' => App::$config['system']['sitename'],
|
||||
@ -2363,26 +2413,30 @@ function cert_bad_email() {
|
||||
*/
|
||||
function check_cron_broken() {
|
||||
|
||||
$t = get_config('system','lastpollcheck');
|
||||
$d = get_config('system','lastcron');
|
||||
|
||||
if((! $d) || ($d < datetime_convert('UTC','UTC','now - 4 hours'))) {
|
||||
Zotlabs\Daemon\Master::Summon(array('Cron'));
|
||||
}
|
||||
|
||||
$t = get_config('system','lastcroncheck');
|
||||
if(! $t) {
|
||||
// never checked before. Start the timer.
|
||||
set_config('system','lastpollcheck',datetime_convert());
|
||||
set_config('system','lastcroncheck',datetime_convert());
|
||||
return;
|
||||
}
|
||||
|
||||
if($t > datetime_convert('UTC','UTC','now - 3 days')) {
|
||||
// Wait for 3 days before we do anything so as not to swamp the admin with messages
|
||||
return;
|
||||
}
|
||||
|
||||
$d = get_config('system','lastpoll');
|
||||
if(($d) && ($d > datetime_convert('UTC','UTC','now - 3 days'))) {
|
||||
// Scheduled tasks have run successfully in the last 3 days.
|
||||
set_config('system','lastpollcheck',datetime_convert());
|
||||
set_config('system','lastcroncheck',datetime_convert());
|
||||
return;
|
||||
}
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$email_tpl = get_intltext_template("cron_bad_eml.tpl");
|
||||
$email_msg = replace_macros($email_tpl, array(
|
||||
'$sitename' => App::$config['system']['sitename'],
|
||||
@ -2396,8 +2450,16 @@ function check_cron_broken() {
|
||||
'From: Administrator' . '@' . App::get_hostname() . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
set_config('system','lastpollcheck',datetime_convert());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function observer_prohibited($allow_account = false) {
|
||||
|
||||
if($allow_account)
|
||||
return (((get_config('system','block_public')) && (! get_account_id()) && (! remote_channel())) ? true : false );
|
||||
return (((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) ? true : false );
|
||||
|
||||
}
|
||||
|
||||
|
@ -42,11 +42,11 @@ You MAY additionally provide other profile information. Any information which yo
|
||||
|
||||
Content you provide (status posts, photos, files, etc.) belongs to you. The $Projectname default is to publish content openly and visible to anybody on the internet (PUBLIC). You MAY control this in your channel settings and restrict the default permissions or you MAY restrict the visibility of any single published item separately (PRIVATE). $Projectname developers will ensure that restricted content is ONLY visible to those in the restriction list - to the best of their ability.
|
||||
|
||||
Content (especially status posts) that you share with other networks or that you have made visible to anybody on the internet (PUBLIC) cannot easily be taken back once it has been published. It MAY be shared with other networks and made available through RSS/Atom feeds. It may also be syndicated on other $Projectname sites. It MAY appear on spy networks and internet searches. If you do not wish this default behaviour please adjust your channel settings and restrict who can see your content.
|
||||
Content (especially status posts) that you share with other networks or that you have made visible to anybody on the internet (PUBLIC) cannot easily be taken back once it has been published. It MAY be shared with other networks and made available through RSS/Atom feeds. It may also be syndicated on other $Projectname sites. It MAY appear on other networks and websites and be visible in internet searches. If you do not wish this default behaviour please adjust your channel settings and restrict who can see your content.
|
||||
|
||||
**Comments and Forum posts**
|
||||
|
||||
Comments to posts that were created by others and posts which are designated as forum posts belong to you as the creator/author, but the distribution of these posts is not under your direct control. These posts/comments MAY be re-distributed to others, and MAY be visible to anybody on the internet. In the case of comments, the creator of the "first message" in the thread to which you are replying controls the distribution of all comments and replies to that message.
|
||||
Comments to posts that were created by others and posts which are designated as forum posts belong to you as the creator/author, but the distribution of these posts is not under your direct control, and you relinquish SOME rights to these items. These posts/comments MAY be re-distributed to others, and MAY be visible to anybody on the internet. In the case of comments, the creator of the "first message" in the thread (conversation) to which you are replying controls the distribution of all comments and replies to that message. They "own" and therefore have certain rights with regard to the entire conversation (including all comments contained within it). You can still edit or delete the comment, but the conversation owner also has rights to edit, delete, re-distribute, and backup/restore any or all the content from the conversation.
|
||||
|
||||
**Private Information**
|
||||
|
||||
|
16
doc/bugs.bb
16
doc/bugs.bb
@ -5,11 +5,6 @@
|
||||
|
||||
Hubzilla Community Server is open source software which is maintained by "the community" - essentially unpaid volunteers.
|
||||
|
||||
[b]Hubzilla Enterprise Server[/b]
|
||||
|
||||
Hubzilla Enterprise Server is commercial software with a variety of support plans depending on the specific license terms.
|
||||
|
||||
|
||||
The first thing you need to do is talk to your hub administrator - the person who runs and manages your site. They are in the unique position of having access to the internal software and database and [b]logfiles[/b] and will need to be involved in fixing your problem. Other people "on the net" can't really help with this. The first thing the hub administrator needs to do is look at their logs and/or try to reproduce the problem. So try to be as helpful and courteous as possible in helping them look into the problem.
|
||||
|
||||
To find your hub administrator (if you don't know who they are) please look at [url=[baseurl]/siteinfo]this page[/url]. If they have not provided any contact info on that page or provided an "Impressum" there, see [url=[baseurl]/siteinfo/json]this site info summary[/url] under the heading "admin:".
|
||||
@ -24,13 +19,6 @@ If you get a blank white screen when doing something, this is almost always a co
|
||||
|
||||
[h3]I'm stumped. I can't figure out what is wrong.[/h3]
|
||||
|
||||
[b]Hubzilla Enterprise Server[/b]
|
||||
|
||||
Please make contact with the vendor - who will have provided you with support contact details. Preferably this contact will be made by the hub administrator so that he/she can assist us in collecting the necessary issue details. We will assign a ticket and notify you of progress.
|
||||
|
||||
|
||||
[b]Hubzilla Community Server[/b]
|
||||
|
||||
At this point it might be worthwhile discussing the issue on one of the online forums. There may be several of these and some may be more suited to your spoken language. As a last resort, try "Channel One", which is in English.
|
||||
|
||||
If the community developers can't help you right away, understand that they are volunteers and may have a lot of other work and demands on their time. At this point you need to file a bug report. You will need an account on github.com to do this. So register, and then visit https://github.com/redmatrix/hubzilla/issues
|
||||
@ -39,7 +27,5 @@ If the community developers can't help you right away, understand that they are
|
||||
Then you wait. If it's a high profile issue, it may get fixed quickly. But nobody is in charge of fixing bugs. If it lingers without resolution, please spend some more time investigating the problem. Ask about anything you don't understand related to the behaviour. You will learn more about how the software works and quite possibly figure out why it isn't working now. Ultimately it is somebody in the community who is going to fix this and you are a member of the community; and this is how the open source process works.
|
||||
|
||||
|
||||
[b]In either case[/b]
|
||||
|
||||
Other developers working to fix the problem may need to find out more, so do your homework and document what is happening and everything you've tried. Don't say "I did xyz and it didn't work." That doesn't tell us anything. Tell us precisely what steps you took and what you expected the result to be, and precisely what happened as a result. If there were any error messages, don't say "there was an error message". Tell us exactly what the message said.
|
||||
Other developers working to fix the problem may need to find out more, so do your homework and document what is happening and everything you've tried. Don't say "I did xyz and it didn't work." That doesn't tell us anything. Tell us precisely what steps you took and what you expected the result to be, and precisely what happened as a result. If there were any error messages, don't say "there was an error message". Tell us exactly what the message said. Tell us what version you're running and any other details that may be unique about your site configuration.
|
||||
|
@ -26,9 +26,6 @@
|
||||
[zrl=[baseurl]/help/git_for_non_developers]Git per a No-Desenvolupadors[/zrl]
|
||||
[zrl=[baseurl]/help/dev_beginner]Manual pas-a-pas per a desenvolupadors principiants[/zrl]
|
||||
|
||||
[h3]Preguntes Més Freqüents (FAQ) Per Desenvolupadors[/h3]
|
||||
[zrl=[baseurl]/help/faq_developers]FAQ Per Desenvoupadors[/zrl]
|
||||
|
||||
[h3]Recursos Externs[/h3]
|
||||
[url=https://zothub.com/channel/one]Development Channel[/url]
|
||||
[url=https://federated.social/channel/postgres]Postgres-specific $Projectname Admin Support Channel[/url]
|
||||
|
@ -1,131 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||
<title>The Hubzilla: Member List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">The Hubzilla
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li><a href="classes.html"><span>Class Index</span></a></li>
|
||||
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
|
||||
<li><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('classHubzilla_1_1Import_1_1Import.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Pages</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Hubzilla\Import\Import Member List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>This is the complete list of members for <a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a>, including all inherited members.</p>
|
||||
<table class="directory">
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a864aac9fadb4846f5d9f840e8e0f440f">$credentials</a></td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#ad0d2bdc3b388220479063915b4f5c2fc">$itemlist</a></td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a0a05dac405ccc5b617b7b7b3c8ed783c">$items</a></td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a88c2eeba8d0cba3e7c12a2c45ba0fbc6">$src_items</a></td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a5434325afb2c633c52540127d717800a">convert_child</a>($child)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a107703a43a1b0ceb2af7ae470cb3f218">convert_item</a>($item_ident)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#addf6e53dacd971eaab49be4b17a767d6">convert_taxonomy</a>($item_ident)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a57561904b0f127e0d9a3e2c33688daf8">get_children</a>($item_ident)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a24134929d9a8a682da2036a0bf326367">get_credentials</a>()</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a27987a41cb703a796f1821baeb4774a2">get_item</a>($item_ident)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a772c28edf36aaf8e66007a95004c4059">get_item_ident</a>($item)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a855cd5a79b95d269ae8737fae774e3bc">get_itemlist</a>()</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#ae3c6472bea1a44025bc2e152604eb20c">get_taxonomy</a>($item_ident)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">run</a>()</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a33ed595de044c0ec1cd84cca719e31dc">store</a>($item, $update=false)</td><td class="entry"><a class="el" href="classHubzilla_1_1Import_1_1Import.html">Hubzilla\Import\Import</a></td><td class="entry"></td></tr>
|
||||
</table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
@ -1,446 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||
<title>The Hubzilla: Hubzilla\Import\Import Class Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">The Hubzilla
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li><a href="classes.html"><span>Class Index</span></a></li>
|
||||
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
|
||||
<li><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('classHubzilla_1_1Import_1_1Import.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Pages</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#pub-methods">Public Member Functions</a> |
|
||||
<a href="#pro-attribs">Protected Attributes</a> |
|
||||
<a href="#pri-attribs">Private Attributes</a> |
|
||||
<a href="classHubzilla_1_1Import_1_1Import-members.html">List of all members</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">Hubzilla\Import\Import Class Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
|
||||
Public Member Functions</h2></td></tr>
|
||||
<tr class="memitem:a24134929d9a8a682da2036a0bf326367"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a24134929d9a8a682da2036a0bf326367">get_credentials</a> ()</td></tr>
|
||||
<tr class="separator:a24134929d9a8a682da2036a0bf326367"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a855cd5a79b95d269ae8737fae774e3bc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a855cd5a79b95d269ae8737fae774e3bc">get_itemlist</a> ()</td></tr>
|
||||
<tr class="separator:a855cd5a79b95d269ae8737fae774e3bc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a772c28edf36aaf8e66007a95004c4059"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a772c28edf36aaf8e66007a95004c4059">get_item_ident</a> ($item)</td></tr>
|
||||
<tr class="separator:a772c28edf36aaf8e66007a95004c4059"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a27987a41cb703a796f1821baeb4774a2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a27987a41cb703a796f1821baeb4774a2">get_item</a> ($item_ident)</td></tr>
|
||||
<tr class="separator:a27987a41cb703a796f1821baeb4774a2"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ae3c6472bea1a44025bc2e152604eb20c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#ae3c6472bea1a44025bc2e152604eb20c">get_taxonomy</a> ($item_ident)</td></tr>
|
||||
<tr class="separator:ae3c6472bea1a44025bc2e152604eb20c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a57561904b0f127e0d9a3e2c33688daf8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a57561904b0f127e0d9a3e2c33688daf8">get_children</a> ($item_ident)</td></tr>
|
||||
<tr class="separator:a57561904b0f127e0d9a3e2c33688daf8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a107703a43a1b0ceb2af7ae470cb3f218"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a107703a43a1b0ceb2af7ae470cb3f218">convert_item</a> ($item_ident)</td></tr>
|
||||
<tr class="separator:a107703a43a1b0ceb2af7ae470cb3f218"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:addf6e53dacd971eaab49be4b17a767d6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#addf6e53dacd971eaab49be4b17a767d6">convert_taxonomy</a> ($item_ident)</td></tr>
|
||||
<tr class="separator:addf6e53dacd971eaab49be4b17a767d6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a5434325afb2c633c52540127d717800a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a5434325afb2c633c52540127d717800a">convert_child</a> ($child)</td></tr>
|
||||
<tr class="separator:a5434325afb2c633c52540127d717800a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a33ed595de044c0ec1cd84cca719e31dc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a33ed595de044c0ec1cd84cca719e31dc">store</a> ($item, $update=false)</td></tr>
|
||||
<tr class="separator:a33ed595de044c0ec1cd84cca719e31dc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a8d138a9a7d4f79b81d3446ca216a602c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">run</a> ()</td></tr>
|
||||
<tr class="separator:a8d138a9a7d4f79b81d3446ca216a602c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
|
||||
Protected Attributes</h2></td></tr>
|
||||
<tr class="memitem:ad0d2bdc3b388220479063915b4f5c2fc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#ad0d2bdc3b388220479063915b4f5c2fc">$itemlist</a> = null</td></tr>
|
||||
<tr class="separator:ad0d2bdc3b388220479063915b4f5c2fc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a88c2eeba8d0cba3e7c12a2c45ba0fbc6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a88c2eeba8d0cba3e7c12a2c45ba0fbc6">$src_items</a> = null</td></tr>
|
||||
<tr class="separator:a88c2eeba8d0cba3e7c12a2c45ba0fbc6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a0a05dac405ccc5b617b7b7b3c8ed783c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a0a05dac405ccc5b617b7b7b3c8ed783c">$items</a> = null</td></tr>
|
||||
<tr class="separator:a0a05dac405ccc5b617b7b7b3c8ed783c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
|
||||
Private Attributes</h2></td></tr>
|
||||
<tr class="memitem:a864aac9fadb4846f5d9f840e8e0f440f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classHubzilla_1_1Import_1_1Import.html#a864aac9fadb4846f5d9f840e8e0f440f">$credentials</a> = null</td></tr>
|
||||
<tr class="separator:a864aac9fadb4846f5d9f840e8e0f440f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<h2 class="groupheader">Member Function Documentation</h2>
|
||||
<a class="anchor" id="a5434325afb2c633c52540127d717800a"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::convert_child </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$child</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a107703a43a1b0ceb2af7ae470cb3f218"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::convert_item </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$item_ident</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="addf6e53dacd971eaab49be4b17a767d6"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::convert_taxonomy </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$item_ident</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a57561904b0f127e0d9a3e2c33688daf8"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::get_children </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$item_ident</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a24134929d9a8a682da2036a0bf326367"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::get_credentials </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a27987a41cb703a796f1821baeb4774a2"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::get_item </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$item_ident</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a772c28edf36aaf8e66007a95004c4059"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::get_item_ident </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$item</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a855cd5a79b95d269ae8737fae774e3bc"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::get_itemlist </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="ae3c6472bea1a44025bc2e152604eb20c"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::get_taxonomy </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$item_ident</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a8d138a9a7d4f79b81d3446ca216a602c">Hubzilla\Import\Import\run()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a8d138a9a7d4f79b81d3446ca216a602c"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::run </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a33ed595de044c0ec1cd84cca719e31dc"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::store </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$item</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype"> </td>
|
||||
<td class="paramname"><em>$update</em> = <code>false</code> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="groupheader">Member Data Documentation</h2>
|
||||
<a class="anchor" id="a864aac9fadb4846f5d9f840e8e0f440f"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::$credentials = null</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a24134929d9a8a682da2036a0bf326367">Hubzilla\Import\Import\get_credentials()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="ad0d2bdc3b388220479063915b4f5c2fc"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::$itemlist = null</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Referenced by <a class="el" href="classHubzilla_1_1Import_1_1Import.html#a855cd5a79b95d269ae8737fae774e3bc">Hubzilla\Import\Import\get_itemlist()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a0a05dac405ccc5b617b7b7b3c8ed783c"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::$items = null</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a88c2eeba8d0cba3e7c12a2c45ba0fbc6"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Hubzilla\Import\Import::$src_items = null</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr/>The documentation for this class was generated from the following file:<ul>
|
||||
<li>include/Import/<a class="el" href="Importer_8php.html">Importer.php</a></li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
@ -25,9 +25,6 @@
|
||||
[zrl=[baseurl]/help/git_for_non_developers]Git für Nicht-Entwickler[/zrl]
|
||||
[zrl=[baseurl]/help/dev_beginner]Schritt-für-Schritt-Einführung für neue Entwickler[/zrl]
|
||||
|
||||
[h3]Häufig gestellte Fragen für Entwickler[/h3]
|
||||
[zrl=[baseurl]/help/faq_developers]FAQ für Entwickler[/zrl]
|
||||
|
||||
[h3]Externe Ressourcen[/h3]
|
||||
[url=https://zothub.com/channel/one]Entwickler-Kanal[/url]
|
||||
[url=https://federated.social/channel/postgres]Postgres-spezifischer Admin-Support-Kanal[/url]
|
||||
|
@ -26,9 +26,6 @@
|
||||
[zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl]
|
||||
[zrl=[baseurl]/help/dev_beginner]Step-for-step manual for beginning developers[/zrl]
|
||||
|
||||
[h3]Frequently Asked Questions For Developers[/h3]
|
||||
[zrl=[baseurl]/help/faq_developers]FAQ For Developers[/zrl]
|
||||
|
||||
[h3]External Resources[/h3]
|
||||
[url=https://zothub.com/channel/one]Development Channel[/url]
|
||||
[url=https://federated.social/channel/postgres]Postgres-specific $Projectname Admin Support Channel[/url]
|
||||
|
@ -12,10 +12,6 @@ Returns authenticated numeric channel_id if authenticated and connected to a cha
|
||||
|
||||
Returns authenticated string hash of Red global identifier, if authenticated via remote auth, or an empty string.
|
||||
|
||||
[b]get_app()[/b]
|
||||
|
||||
Returns the global app structure ($a).
|
||||
|
||||
[b]App::get_observer()[/b]
|
||||
|
||||
returns an xchan structure representing the current viewer if authenticated (locally or remotely).
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -67,9 +67,6 @@ Zot är en fantastisk ny kommunikationsprotokoll uppfunnit speciellt för $Proje
|
||||
[zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl]
|
||||
[zrl=[baseurl]/help/dev_beginner]Sep-for-step manual for beginning developers[/zrl]
|
||||
|
||||
[h3]FAQ för utvecklare[/h3]
|
||||
[zrl=[baseurl]/help/faq_developers]FAQ For Developers[/zrl]
|
||||
|
||||
[h3]Externa resurser[/h3]
|
||||
[zrl=[baseurl]/help/external-resource-links]External Resource Links[/zrl]
|
||||
[url=https://github.com/friendica/red]Main Website[/url]
|
||||
|
@ -140,6 +140,8 @@ target_sig => an RSA signature (base64url encoded) of the guid
|
||||
|
||||
key => The public key needed to verify the signature
|
||||
|
||||
token => a string (possibly random) chosen by the requesting service. If provided, an entry in the discovered packet will be provided called 'signed_token' which consists of the base64url_encoded RSA signature of the concatenation of the string 'token.' and the provided token using the private key of the discovered channel. This can be verified using the provided 'key' entry, and provides assurance that the server is in possession of the private key for the discovered identity. After 2017-01-01 it is **required** that a server provide a signed_token *if* a token was provided in the request.
|
||||
|
||||
With no target provided, the permissions returned will be generic permissions
|
||||
for unknown or unauthenticated observers
|
||||
|
||||
@ -148,6 +150,7 @@ Example of discovery packet for 'mike@zothub.com'
|
||||
{
|
||||
|
||||
"success": true,
|
||||
"signed_token": "KBJrKTq1qrctNuxF3GwVh3GAGRqmgkirlXANPcJZAeWlvSt_9TMV097slR4AYnYCBEushbVqHEJ9Rb5wHTa0HzMbfRo8cRdl2yAirvvv5d98dtwHddQgX1jB0xEypXtmIYMdPGDLvhI1RNdIBhHkkrRcNreRzoy4xD--HM6m1W0-A8PJJJ9BcNxmGPcBtLzW08wzoP9trJ3M7DQ6Gkk6j7iwVsyApw1ZBaDvabGTdc_SFV-Iegtqw3rjzT_xXWsfzMlKBy-019MYn_KS-gu23YzjvGu5tS_zDfkQb8DMUlPLz5yyxM0yOMlUDtG2qQgIJAU2O0X6T5xDdJ6mtolNyhepg845PvFDEqBQGMIH1nc47CNumeudDi8IWymEALhjG_U8KAK7JVlQTJj2EKUb0au1g6fpiBFab5mmxCMtZEX3Jreyak5GOcFFz-WpxuXJD9TdSoIvaBfBFOoJnXkg2zE4RHXeQzZ2FotmrbBG5dm8B-_6byYGoHBc08ZsWze1K96JIeRnLpBaj6ifUDcVHxZMPcGHHT27dvU2PNbgLiBjlAsxhYqkhN5qOHN8XBcg2KRjcMBaI3V0YMxlzXz5MztmZq3fcB1p-ccIoIyMPMzSj3yMB7J9CEU2LYPSTHMdPkIeDE6GaCkQKviaQQJQde346tK_YjA2k7_SOBmvPYE",
|
||||
"guid": "sebQ-IC4rmFn9d9iu17m4BXO-kHuNutWo2ySjeV2SIW1LzksUkss12xVo3m3fykYxN5HMcc7gUZVYv26asx-Pg",
|
||||
"guid_sig": "Llenlbl4zHo6-g4sa63MlQmTP5dRCrsPmXHHFmoCHG63BLq5CUZJRLS1vRrrr_MNxr7zob_Ykt_m5xPKe5H0_i4pDj-UdP8dPZqH2fqhhx00kuYL4YUMJ8gRr5eO17vsZQ3XxTcyKewtgeW0j7ytwMp6-hFVUx_Cq08MrXas429ZrjzaEwgTfxGnbgeQYQ0R5EXpHpEmoERnZx77VaEahftmdjAUx9R4YKAp13pGYadJOX5xnLfqofHQD8DyRHWeMJ4G1OfWPSOlXfRayrV_jhnFlZjMU7vOdQwHoCMoR5TFsRsHuzd-qepbvo3pzvQZRWnTNu6oPucgbf94p13QbalYRpBXKOxdTXJrGdESNhGvhtaZnpT9c1QVqC46jdfP0LOX2xrVdbvvG2JMWFv7XJUVjLSk_yjzY6or2VD4V6ztYcjpCi9d_WoNHruoxro_br1YO3KatySxJs-LQ7SOkQI60FpysfbphNyvYMkotwUFI59G08IGKTMu3-GPnV1wp7NOQD1yzJbGGEGSEEysmEP0SO9vnN45kp3MiqbffBGc1r4_YM4e7DPmqOGM94qksOcLOJk1HNESw2dQYWxWQTBXPfOJT6jW9_crGLMEOsZ3Jcss0XS9KzBUA2p_9osvvhUKuKXbNztqH0oZIWlg37FEVsDs_hUwUJpv2Ar09k4",
|
||||
"key": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7QCwvuEIwCHjhjbpz3Oc\ntyei/Pz9nDksNbsc44Cm8jxYGMXsTPFXDZYCcCB5rcAhPPdZSlzaPkv4vPVcMIrw\n5cdX0tvbwa3rNTng6uFE7qkt15D3YCTkwF0Y9FVZiZ2Ko+G23QeBt9wqb9dlDN1d\nuPmu9BLYXIT/JXoBwf0vjIPFM9WBi5W/EHGaiuqw7lt0qI7zDGw77yO5yehKE4cu\n7dt3SakrXphL70LGiZh2XGoLg9Gmpz98t+gvPAUEotAJxIUqnoiTA8jlxoiQjeRK\nHlJkwMOGmRNPS33awPos0kcSxAywuBbh2X3aSqUMjcbE4cGJ++/13zoa6RUZRObC\nZnaLYJxqYBh13/N8SfH7d005hecDxWnoYXeYuuMeT3a2hV0J84ztkJX5OoxIwk7S\nWmvBq4+m66usn6LNL+p5IAcs93KbvOxxrjtQrzohBXc6+elfLVSQ1Rr9g5xbgpub\npSc+hvzbB6p0tleDRzwAy9X16NI4DYiTj4nkmVjigNo9v2VPnAle5zSam86eiYLO\nt2u9YRqysMLPKevNdj3CIvst+BaGGQONlQalRdIcq8Lin+BhuX+1TBgqyav4XD9K\nd+JHMb1aBk/rFLI9/f2S3BJ1XqpbjXz7AbYlaCwKiJ836+HS8PmLKxwVOnpLMbfH\nPYM8k83Lip4bEKIyAuf02qkCAwEAAQ==\n-----END PUBLIC KEY-----\n",
|
||||
@ -217,6 +220,8 @@ Discovery returns a JSON array with the following components:
|
||||
|
||||
'success' => ('1' or '') Operation was successful if '1'. Otherwise an optional 'message' may be present indicating the source of error.
|
||||
|
||||
'signed_token' => If a token parameter was provided in the request, it is prepended with the text 'token.' and then RSA signed with the channel private key and base64url encoded and returned as 'signed_token'.
|
||||
|
||||
'guid' => the guid of the address on the target system
|
||||
|
||||
'guid_sig' => the base64url encoded RSA signature of the guid, signed with the private key associated with that guid.
|
||||
|
@ -6,7 +6,6 @@ require_once('include/follow.php');
|
||||
require_once('include/photo/photo_driver.php');
|
||||
|
||||
function import_diaspora($data) {
|
||||
$a = get_app();
|
||||
|
||||
$account = App::get_account();
|
||||
if(! $account)
|
||||
|
@ -11,7 +11,7 @@ require_once('include/text.php');
|
||||
require_once('include/language.php');
|
||||
require_once('include/datetime.php');
|
||||
require_once('include/crypto.php');
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
|
||||
function check_account_email($email) {
|
||||
@ -656,7 +656,8 @@ function account_service_class_allows($aid, $property, $usage = false) {
|
||||
* @todo Should we merge this with account_service_class_fetch()?
|
||||
*/
|
||||
function service_class_fetch($uid, $property) {
|
||||
$a = get_app();
|
||||
|
||||
|
||||
if($uid == local_channel()) {
|
||||
$service_class = App::$account['account_service_class'];
|
||||
}
|
||||
|
@ -11,8 +11,6 @@ require_once("include/PermissionDescription.php");
|
||||
|
||||
function group_select($selname,$selclass,$preselected = false,$size = 4) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$o = '';
|
||||
|
||||
$o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"$size\" >\r\n";
|
||||
@ -51,7 +49,6 @@ function group_select($selname,$selclass,$preselected = false,$size = 4) {
|
||||
/* MicMee 20130114 function contact_selector no longer in use, sql table contact does no longer exist
|
||||
function contact_selector($selname, $selclass, $preselected = false, $options) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$mutual = false;
|
||||
$networks = null;
|
||||
@ -157,7 +154,6 @@ function contact_selector($selname, $selclass, $preselected = false, $options) {
|
||||
|
||||
function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$o = '';
|
||||
|
||||
@ -270,7 +266,6 @@ function populate_acl($defaults = null,$show_jotnets = true, $emptyACL_descripti
|
||||
$o = replace_macros($tpl, array(
|
||||
'$showall' => $showall_caption,
|
||||
'$onlyme' => t('Only me'),
|
||||
'$add_others' => t('Add others'),
|
||||
'$showallOrigin' => $showall_origin,
|
||||
'$showallIcon' => $showall_icon,
|
||||
'$select_label' => t('Who can see this?'),
|
||||
|
@ -1,7 +1,6 @@
|
||||
<?php /** @file */
|
||||
|
||||
function profile_activity($changed, $value) {
|
||||
$a = get_app();
|
||||
|
||||
if(! local_channel() || ! is_array($changed) || ! count($changed))
|
||||
return;
|
||||
|
@ -451,8 +451,6 @@ require_once('include/api_auth.php');
|
||||
*/
|
||||
function api_apply_template($templatename, $type, $data){
|
||||
|
||||
$a = get_app();
|
||||
|
||||
switch($type){
|
||||
case "atom":
|
||||
case "rss":
|
||||
@ -514,7 +512,7 @@ require_once('include/api_auth.php');
|
||||
return false;
|
||||
}
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
|
||||
json_return_and_die(identity_basic_export(api_user(),(($_REQUEST['posts']) ? intval($_REQUEST['posts']) : 0 )));
|
||||
}
|
||||
@ -1904,7 +1902,6 @@ require_once('include/api_auth.php');
|
||||
|
||||
//logger('api_format_items: ' . print_r($user_info,true));
|
||||
|
||||
$a = get_app();
|
||||
$ret = array();
|
||||
|
||||
if(! $r)
|
||||
|
658
include/apps.php
658
include/apps.php
@ -1,658 +0,0 @@
|
||||
<?php /** @file */
|
||||
|
||||
/**
|
||||
* apps
|
||||
*
|
||||
*/
|
||||
|
||||
require_once('include/plugin.php');
|
||||
require_once('include/identity.php');
|
||||
|
||||
function get_system_apps($translate = true) {
|
||||
|
||||
$ret = array();
|
||||
if(is_dir('apps'))
|
||||
$files = glob('apps/*.apd');
|
||||
else
|
||||
$files = glob('app/*.apd');
|
||||
if($files) {
|
||||
foreach($files as $f) {
|
||||
$x = parse_app_description($f,$translate);
|
||||
if($x) {
|
||||
$ret[] = $x;
|
||||
}
|
||||
}
|
||||
}
|
||||
$files = glob('addon/*/*.apd');
|
||||
if($files) {
|
||||
foreach($files as $f) {
|
||||
$n = basename($f,'.apd');
|
||||
if(plugin_is_installed($n)) {
|
||||
$x = parse_app_description($f,$translate);
|
||||
if($x) {
|
||||
$ret[] = $x;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function import_system_apps() {
|
||||
if(! local_channel())
|
||||
return;
|
||||
|
||||
// Eventually we want to look at modification dates and update system apps.
|
||||
|
||||
$installed = get_pconfig(local_channel(),'system','apps_installed');
|
||||
if($installed)
|
||||
return;
|
||||
$apps = get_system_apps(false);
|
||||
if($apps) {
|
||||
foreach($apps as $app) {
|
||||
$app['uid'] = local_channel();
|
||||
$app['guid'] = hash('whirlpool',$app['name']);
|
||||
$app['system'] = 1;
|
||||
app_install(local_channel(),$app);
|
||||
}
|
||||
}
|
||||
set_pconfig(local_channel(),'system','apps_installed',1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function app_name_compare($a,$b) {
|
||||
return strcmp($a['name'],$b['name']);
|
||||
}
|
||||
|
||||
|
||||
function parse_app_description($f,$translate = true) {
|
||||
$ret = array();
|
||||
|
||||
$baseurl = z_root();
|
||||
$channel = App::get_channel();
|
||||
$address = (($channel) ? $channel['channel_address'] : '');
|
||||
|
||||
//future expansion
|
||||
|
||||
$observer = App::get_observer();
|
||||
|
||||
|
||||
$lines = @file($f);
|
||||
if($lines) {
|
||||
foreach($lines as $x) {
|
||||
if(preg_match('/^([a-zA-Z].*?):(.*?)$/ism',$x,$matches)) {
|
||||
$ret[$matches[1]] = trim(str_replace(array('$baseurl','$nick'),array($baseurl,$address),$matches[2]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(! $ret['photo'])
|
||||
$ret['photo'] = $baseurl . '/' . get_default_profile_photo(80);
|
||||
|
||||
$ret['type'] = 'system';
|
||||
|
||||
foreach($ret as $k => $v) {
|
||||
if(strpos($v,'http') === 0)
|
||||
$ret[$k] = zid($v);
|
||||
}
|
||||
|
||||
if(array_key_exists('desc',$ret))
|
||||
$ret['desc'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['desc']);
|
||||
|
||||
if(array_key_exists('target',$ret))
|
||||
$ret['target'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['target']);
|
||||
|
||||
if(array_key_exists('requires',$ret)) {
|
||||
$requires = explode(',',$ret['requires']);
|
||||
foreach($requires as $require) {
|
||||
$require = trim(strtolower($require));
|
||||
switch($require) {
|
||||
case 'nologin':
|
||||
if(local_channel())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'admin':
|
||||
if(! is_site_admin())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'local_channel':
|
||||
if(! local_channel())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'public_profile':
|
||||
if(! is_public_profile())
|
||||
unset($ret);
|
||||
break;
|
||||
case 'observer':
|
||||
if(! $observer)
|
||||
unset($ret);
|
||||
break;
|
||||
default:
|
||||
if(! (local_channel() && feature_enabled(local_channel(),$require)))
|
||||
unset($ret);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if($ret) {
|
||||
if($translate)
|
||||
translate_system_apps($ret);
|
||||
return $ret;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function translate_system_apps(&$arr) {
|
||||
$apps = array(
|
||||
'Site Admin' => t('Site Admin'),
|
||||
'Bug Report' => t('Bug Report'),
|
||||
'View Bookmarks' => t('View Bookmarks'),
|
||||
'My Chatrooms' => t('My Chatrooms'),
|
||||
'Connections' => t('Connections'),
|
||||
'Firefox Share' => t('Firefox Share'),
|
||||
'Remote Diagnostics' => t('Remote Diagnostics'),
|
||||
'Suggest Channels' => t('Suggest Channels'),
|
||||
'Login' => t('Login'),
|
||||
'Channel Manager' => t('Channel Manager'),
|
||||
'Grid' => t('Grid'),
|
||||
'Settings' => t('Settings'),
|
||||
'Files' => t('Files'),
|
||||
'Webpages' => t('Webpages'),
|
||||
'Channel Home' => t('Channel Home'),
|
||||
'View Profile' => t('View Profile'),
|
||||
'Photos' => t('Photos'),
|
||||
'Events' => t('Events'),
|
||||
'Directory' => t('Directory'),
|
||||
'Help' => t('Help'),
|
||||
'Mail' => t('Mail'),
|
||||
'Mood' => t('Mood'),
|
||||
'Poke' => t('Poke'),
|
||||
'Chat' => t('Chat'),
|
||||
'Search' => t('Search'),
|
||||
'Probe' => t('Probe'),
|
||||
'Suggest' => t('Suggest'),
|
||||
'Random Channel' => t('Random Channel'),
|
||||
'Invite' => t('Invite'),
|
||||
'Features' => t('Features'),
|
||||
'Language' => t('Language'),
|
||||
'Post' => t('Post'),
|
||||
'Profile Photo' => t('Profile Photo')
|
||||
);
|
||||
|
||||
if(array_key_exists($arr['name'],$apps))
|
||||
$arr['name'] = $apps[$arr['name']];
|
||||
|
||||
}
|
||||
|
||||
|
||||
// papp is a portable app
|
||||
|
||||
function app_render($papp,$mode = 'view') {
|
||||
|
||||
/**
|
||||
* modes:
|
||||
* view: normal mode for viewing an app via bbcode from a conversation or page
|
||||
* provides install/update button if you're logged in locally
|
||||
* list: normal mode for viewing an app on the app page
|
||||
* no buttons are shown
|
||||
* edit: viewing the app page in editing mode provides a delete button
|
||||
*/
|
||||
|
||||
$installed = false;
|
||||
|
||||
if(! $papp)
|
||||
return;
|
||||
|
||||
if(! $papp['photo'])
|
||||
$papp['photo'] = z_root() . '/' . get_default_profile_photo(80);
|
||||
|
||||
|
||||
|
||||
$papp['papp'] = papp_encode($papp);
|
||||
|
||||
if(! strstr($papp['url'],'://'))
|
||||
$papp['url'] = z_root() . ((strpos($papp['url'],'/') === 0) ? '' : '/') . $papp['url'];
|
||||
|
||||
foreach($papp as $k => $v) {
|
||||
if(strpos($v,'http') === 0 && $k != 'papp')
|
||||
$papp[$k] = zid($v);
|
||||
if($k === 'desc')
|
||||
$papp['desc'] = str_replace(array('\'','"'),array(''','&dquot;'),$papp['desc']);
|
||||
|
||||
if($k === 'requires') {
|
||||
$requires = explode(',',$v);
|
||||
foreach($requires as $require) {
|
||||
$require = trim(strtolower($require));
|
||||
switch($require) {
|
||||
case 'nologin':
|
||||
if(local_channel())
|
||||
return '';
|
||||
break;
|
||||
case 'admin':
|
||||
if(! is_site_admin())
|
||||
return '';
|
||||
break;
|
||||
case 'local_channel':
|
||||
if(! local_channel())
|
||||
return '';
|
||||
break;
|
||||
case 'public_profile':
|
||||
if(! is_public_profile())
|
||||
return '';
|
||||
break;
|
||||
case 'observer':
|
||||
$observer = App::get_observer();
|
||||
if(! $observer)
|
||||
return '';
|
||||
break;
|
||||
default:
|
||||
if(! (local_channel() && feature_enabled(local_channel(),$require)))
|
||||
return '';
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$hosturl = '';
|
||||
|
||||
if(local_channel()) {
|
||||
$installed = app_installed(local_channel(),$papp);
|
||||
$hosturl = z_root() . '/';
|
||||
}
|
||||
elseif(remote_channel()) {
|
||||
$observer = App::get_observer();
|
||||
if($observer && $observer['xchan_network'] === 'zot') {
|
||||
// some folks might have xchan_url redirected offsite, use the connurl
|
||||
$x = parse_url($observer['xchan_connurl']);
|
||||
if($x) {
|
||||
$hosturl = $x['scheme'] . '://' . $x['host'] . '/';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$install_action = (($installed) ? t('Update') : t('Install'));
|
||||
|
||||
return replace_macros(get_markup_template('app.tpl'),array(
|
||||
'$app' => $papp,
|
||||
'$hosturl' => $hosturl,
|
||||
'$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''),
|
||||
'$install' => (($hosturl && $mode == 'view') ? $install_action : ''),
|
||||
'$edit' => ((local_channel() && $installed && $mode == 'edit') ? t('Edit') : ''),
|
||||
'$delete' => ((local_channel() && $installed && $mode == 'edit') ? t('Delete') : '')
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
function app_install($uid,$app) {
|
||||
$app['uid'] = $uid;
|
||||
|
||||
if(app_installed($uid,$app))
|
||||
$x = app_update($app);
|
||||
else
|
||||
$x = app_store($app);
|
||||
|
||||
if($x['success']) {
|
||||
$r = q("select * from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($x['app_id']),
|
||||
intval($uid)
|
||||
);
|
||||
if($r) {
|
||||
if(! $r[0]['app_system']) {
|
||||
if($app['categories'] && (! $app['term'])) {
|
||||
$r[0]['term'] = q("select * from term where otype = %d and oid = d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($r[0]['id'])
|
||||
);
|
||||
build_sync_packet($uid,array('app' => $r[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return $x['app_id'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function app_destroy($uid,$app) {
|
||||
|
||||
|
||||
if($uid && $app['guid']) {
|
||||
|
||||
$x = q("select * from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($app['guid']),
|
||||
intval($uid)
|
||||
);
|
||||
if($x) {
|
||||
$x[0]['app_deleted'] = 1;
|
||||
q("delete from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($x[0]['id'])
|
||||
);
|
||||
if($x[0]['app_system']) {
|
||||
$r = q("update app set app_deleted = 1 where app_id = '%s' and app_channel = %d",
|
||||
dbesc($app['guid']),
|
||||
intval($uid)
|
||||
);
|
||||
}
|
||||
else {
|
||||
$r = q("delete from app where app_id = '%s' and app_channel = %d",
|
||||
dbesc($app['guid']),
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
// we don't sync system apps - they may be completely different on the other system
|
||||
build_sync_packet($uid,array('app' => $x));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function app_installed($uid,$app) {
|
||||
|
||||
$r = q("select id from app where app_id = '%s' and app_version = '%s' and app_channel = %d limit 1",
|
||||
dbesc((array_key_exists('guid',$app)) ? $app['guid'] : ''),
|
||||
dbesc((array_key_exists('version',$app)) ? $app['version'] : ''),
|
||||
intval($uid)
|
||||
);
|
||||
return(($r) ? true : false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function app_list($uid, $deleted = false, $cat = '') {
|
||||
if($deleted)
|
||||
$sql_extra = " and app_deleted = 1 ";
|
||||
else
|
||||
$sql_extra = " and app_deleted = 0 ";
|
||||
|
||||
if($cat) {
|
||||
$r = q("select oid from term where otype = %d and term = '%s'",
|
||||
intval(TERM_OBJ_APP),
|
||||
dbesc($cat)
|
||||
);
|
||||
if(! $r)
|
||||
return $r;
|
||||
$sql_extra .= " and app.id in ( ";
|
||||
$s = '';
|
||||
foreach($r as $rr) {
|
||||
if($s)
|
||||
$s .= ',';
|
||||
$s .= intval($rr['oid']);
|
||||
}
|
||||
$sql_extra .= $s . ') ';
|
||||
}
|
||||
|
||||
$r = q("select * from app where app_channel = %d $sql_extra order by app_name asc",
|
||||
intval($uid)
|
||||
);
|
||||
if($r) {
|
||||
for($x = 0; $x < count($r); $x ++) {
|
||||
if(! $r[$x]['app_system'])
|
||||
$r[$x]['type'] = 'personal';
|
||||
$r[$x]['term'] = q("select * from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($r[$x]['id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
return($r);
|
||||
}
|
||||
|
||||
|
||||
function app_decode($s) {
|
||||
$x = base64_decode(str_replace(array('<br />',"\r","\n",' '),array('','','',''),$s));
|
||||
return json_decode($x,true);
|
||||
}
|
||||
|
||||
|
||||
function app_store($arr) {
|
||||
|
||||
// logger('app_store: ' . print_r($arr,true));
|
||||
|
||||
$darray = array();
|
||||
$ret = array('success' => false);
|
||||
|
||||
$darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : '');
|
||||
$darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0);
|
||||
|
||||
if((! $darray['app_url']) || (! $darray['app_channel']))
|
||||
return $ret;
|
||||
|
||||
if($arr['photo'] && ! strstr($arr['photo'],z_root())) {
|
||||
$x = import_xchan_photo($arr['photo'],get_observer_hash(),true);
|
||||
$arr['photo'] = $x[1];
|
||||
}
|
||||
|
||||
|
||||
$darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : random_string(). '.' . App::get_hostname());
|
||||
$darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : '');
|
||||
$darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash());
|
||||
$darray['app_name'] = ((x($arr,'name')) ? escape_tags($arr['name']) : t('Unknown'));
|
||||
$darray['app_desc'] = ((x($arr,'desc')) ? escape_tags($arr['desc']) : '');
|
||||
$darray['app_photo'] = ((x($arr,'photo')) ? $arr['photo'] : z_root() . '/' . get_default_profile_photo(80));
|
||||
$darray['app_version'] = ((x($arr,'version')) ? escape_tags($arr['version']) : '');
|
||||
$darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : '');
|
||||
$darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : '');
|
||||
$darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : '');
|
||||
$darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : '');
|
||||
$darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0);
|
||||
$darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0);
|
||||
|
||||
$created = datetime_convert();
|
||||
|
||||
$r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel, app_addr, app_price, app_page, app_requires, app_created, app_edited, app_system, app_deleted ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
|
||||
dbesc($darray['app_id']),
|
||||
dbesc($darray['app_sig']),
|
||||
dbesc($darray['app_author']),
|
||||
dbesc($darray['app_name']),
|
||||
dbesc($darray['app_desc']),
|
||||
dbesc($darray['app_url']),
|
||||
dbesc($darray['app_photo']),
|
||||
dbesc($darray['app_version']),
|
||||
intval($darray['app_channel']),
|
||||
dbesc($darray['app_addr']),
|
||||
dbesc($darray['app_price']),
|
||||
dbesc($darray['app_page']),
|
||||
dbesc($darray['app_requires']),
|
||||
dbesc($created),
|
||||
dbesc($created),
|
||||
intval($darray['app_system']),
|
||||
intval($darray['app_deleted'])
|
||||
);
|
||||
if($r) {
|
||||
$ret['success'] = true;
|
||||
$ret['app_id'] = $darray['app_id'];
|
||||
}
|
||||
if($arr['categories']) {
|
||||
$x = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($darray['app_id']),
|
||||
intval($darray['app_channel'])
|
||||
);
|
||||
$y = explode(',',$arr['categories']);
|
||||
if($y) {
|
||||
foreach($y as $t) {
|
||||
$t = trim($t);
|
||||
if($t) {
|
||||
store_item_tag($darray['app_channel'],$x[0]['id'],TERM_OBJ_APP,TERM_CATEGORY,escape_tags($t),escape_tags(z_root() . '/apps/?f=&cat=' . escape_tags($t)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function app_update($arr) {
|
||||
|
||||
$darray = array();
|
||||
$ret = array('success' => false);
|
||||
|
||||
$darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : '');
|
||||
$darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0);
|
||||
$darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : 0);
|
||||
|
||||
if((! $darray['app_url']) || (! $darray['app_channel']) || (! $darray['app_id']))
|
||||
return $ret;
|
||||
|
||||
if($arr['photo'] && ! strstr($arr['photo'],z_root())) {
|
||||
$x = import_xchan_photo($arr['photo'],get_observer_hash(),true);
|
||||
$arr['photo'] = $x[1];
|
||||
}
|
||||
|
||||
$darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : '');
|
||||
$darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash());
|
||||
$darray['app_name'] = ((x($arr,'name')) ? escape_tags($arr['name']) : t('Unknown'));
|
||||
$darray['app_desc'] = ((x($arr,'desc')) ? escape_tags($arr['desc']) : '');
|
||||
$darray['app_photo'] = ((x($arr,'photo')) ? $arr['photo'] : z_root() . '/' . get_default_profile_photo(80));
|
||||
$darray['app_version'] = ((x($arr,'version')) ? escape_tags($arr['version']) : '');
|
||||
$darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : '');
|
||||
$darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : '');
|
||||
$darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : '');
|
||||
$darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : '');
|
||||
$darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0);
|
||||
$darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0);
|
||||
|
||||
$edited = datetime_convert();
|
||||
|
||||
$r = q("update app set app_sig = '%s', app_author = '%s', app_name = '%s', app_desc = '%s', app_url = '%s', app_photo = '%s', app_version = '%s', app_addr = '%s', app_price = '%s', app_page = '%s', app_requires = '%s', app_edited = '%s', app_system = %d, app_deleted = %d where app_id = '%s' and app_channel = %d",
|
||||
dbesc($darray['app_sig']),
|
||||
dbesc($darray['app_author']),
|
||||
dbesc($darray['app_name']),
|
||||
dbesc($darray['app_desc']),
|
||||
dbesc($darray['app_url']),
|
||||
dbesc($darray['app_photo']),
|
||||
dbesc($darray['app_version']),
|
||||
dbesc($darray['app_addr']),
|
||||
dbesc($darray['app_price']),
|
||||
dbesc($darray['app_page']),
|
||||
dbesc($darray['app_requires']),
|
||||
dbesc($edited),
|
||||
intval($darray['app_system']),
|
||||
intval($darray['app_deleted']),
|
||||
dbesc($darray['app_id']),
|
||||
intval($darray['app_channel'])
|
||||
);
|
||||
if($r) {
|
||||
$ret['success'] = true;
|
||||
$ret['app_id'] = $darray['app_id'];
|
||||
}
|
||||
|
||||
$x = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
|
||||
dbesc($darray['app_id']),
|
||||
intval($darray['app_channel'])
|
||||
);
|
||||
if($x) {
|
||||
q("delete from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($x[0]['id'])
|
||||
);
|
||||
if($arr['categories']) {
|
||||
$y = explode(',',$arr['categories']);
|
||||
if($y) {
|
||||
foreach($y as $t) {
|
||||
$t = trim($t);
|
||||
if($t) {
|
||||
store_item_tag($darray['app_channel'],$x[0]['id'],TERM_OBJ_APP,TERM_CATEGORY,escape_tags($t),escape_tags(z_root() . '/apps/?f=&cat=' . escape_tags($t)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function app_encode($app,$embed = false) {
|
||||
|
||||
$ret = array();
|
||||
|
||||
$ret['type'] = 'personal';
|
||||
|
||||
if($app['app_id'])
|
||||
$ret['guid'] = $app['app_id'];
|
||||
|
||||
if($app['app_id'])
|
||||
$ret['guid'] = $app['app_id'];
|
||||
|
||||
if($app['app_sig'])
|
||||
$ret['sig'] = $app['app_sig'];
|
||||
|
||||
if($app['app_author'])
|
||||
$ret['author'] = $app['app_author'];
|
||||
|
||||
if($app['app_name'])
|
||||
$ret['name'] = $app['app_name'];
|
||||
|
||||
if($app['app_desc'])
|
||||
$ret['desc'] = $app['app_desc'];
|
||||
|
||||
if($app['app_url'])
|
||||
$ret['url'] = $app['app_url'];
|
||||
|
||||
if($app['app_photo'])
|
||||
$ret['photo'] = $app['app_photo'];
|
||||
|
||||
if($app['app_version'])
|
||||
$ret['version'] = $app['app_version'];
|
||||
|
||||
if($app['app_addr'])
|
||||
$ret['addr'] = $app['app_addr'];
|
||||
|
||||
if($app['app_price'])
|
||||
$ret['price'] = $app['app_price'];
|
||||
|
||||
if($app['app_page'])
|
||||
$ret['page'] = $app['app_page'];
|
||||
|
||||
if($app['app_requires'])
|
||||
$ret['requires'] = $app['app_requires'];
|
||||
|
||||
if($app['app_system'])
|
||||
$ret['system'] = $app['app_system'];
|
||||
|
||||
if($app['app_deleted'])
|
||||
$ret['deleted'] = $app['app_deleted'];
|
||||
|
||||
if($app['term']) {
|
||||
$s = '';
|
||||
foreach($app['term'] as $t) {
|
||||
if($s)
|
||||
$s .= ',';
|
||||
$s .= $t['term'];
|
||||
}
|
||||
$ret['categories'] = $s;
|
||||
}
|
||||
|
||||
|
||||
if(! $embed)
|
||||
return $ret;
|
||||
|
||||
if(array_key_exists('categories',$ret))
|
||||
unset($ret['categories']);
|
||||
|
||||
$j = json_encode($ret);
|
||||
return '[app]' . chunk_split(base64_encode($j),72,"\n") . '[/app]';
|
||||
|
||||
}
|
||||
|
||||
|
||||
function papp_encode($papp) {
|
||||
return chunk_split(base64_encode(json_encode($papp)),72,"\n");
|
||||
|
||||
}
|
||||
|
||||
|
@ -479,8 +479,6 @@ function unescape_underscores_in_links($m) {
|
||||
|
||||
function format_event_diaspora($ev) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
if(! ((is_array($ev)) && count($ev)))
|
||||
return '';
|
||||
|
||||
|
@ -165,11 +165,10 @@ function bb_parse_crypt($match) {
|
||||
}
|
||||
|
||||
function bb_parse_app($match) {
|
||||
require_once('include/apps.php');
|
||||
|
||||
$app = app_decode($match[1]);
|
||||
$app = Zotlabs\Lib\Apps::app_decode($match[1]);
|
||||
if ($app)
|
||||
return app_render($app);
|
||||
return Zotlabs\Lib\Apps::app_render($app);
|
||||
}
|
||||
|
||||
function bb_parse_element($match) {
|
||||
@ -276,7 +275,6 @@ function bb_location($match) {
|
||||
* @return string HTML iframe with content of $match[1]
|
||||
*/
|
||||
function bb_iframe($match) {
|
||||
$a = get_app();
|
||||
|
||||
$sandbox = ((strpos($match[1], App::get_hostname())) ? ' sandbox="allow-scripts" ' : '');
|
||||
|
||||
@ -450,8 +448,6 @@ function bb_sanitize_style($input) {
|
||||
|
||||
function bb_observer($Text) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$observer = App::get_observer();
|
||||
|
||||
if ((strpos($Text,'[/observer]') !== false) || (strpos($Text,'[/rpost]') !== false)) {
|
||||
@ -985,6 +981,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
|
||||
$Text = preg_replace("/\[event\-summary\](.*?)\[\/event\-summary\]/ism",'',$Text);
|
||||
$Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/ism",'',$Text);
|
||||
$Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/ism",'',$Text);
|
||||
$Text = preg_replace("/\[event\-id\](.*?)\[\/event\-id\]/ism",'',$Text);
|
||||
$Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/ism",'',$Text);
|
||||
$Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/ism",'',$Text);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @file include/identity.php
|
||||
* @file include/channel.php
|
||||
*/
|
||||
|
||||
require_once('include/zot.php');
|
||||
@ -847,7 +847,7 @@ function profile_load(&$a, $nickname, $profile = '') {
|
||||
|
||||
$extra_fields = array();
|
||||
|
||||
require_once('include/identity.php');
|
||||
require_once('include/channel.php');
|
||||
$profile_fields_basic = get_profile_fields_basic();
|
||||
$profile_fields_advanced = get_profile_fields_advanced();
|
||||
|
||||
@ -1004,8 +1004,6 @@ function profile_sidebar($profile, $block = 0, $show_connect = true, $zcard = fa
|
||||
|
||||
call_hooks('profile_sidebar_enter', $profile);
|
||||
|
||||
require_once('include/Contact.php');
|
||||
|
||||
if($show_connect) {
|
||||
|
||||
// This will return an empty string if we're already connected.
|
||||
@ -1569,7 +1567,7 @@ function get_online_status($nick) {
|
||||
|
||||
$ret = array('result' => false);
|
||||
|
||||
if(get_config('system','block_public') && ! local_channel() && ! remote_channel())
|
||||
if(observer_prohibited())
|
||||
return $ret;
|
||||
|
||||
$r = q("select channel_id, channel_hash from channel where channel_address = '%s' limit 1",
|
||||
@ -1947,3 +1945,26 @@ function get_zcard_embed($channel,$observer_hash = '',$args = array()) {
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function channelx_by_nick($nick) {
|
||||
$r = q("SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_address = '%s' and channel_removed = 0 LIMIT 1",
|
||||
dbesc($nick)
|
||||
);
|
||||
return(($r) ? $r[0] : false);
|
||||
}
|
||||
|
||||
function channelx_by_hash($hash) {
|
||||
$r = q("SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_hash = '%s' and channel_removed = 0 LIMIT 1",
|
||||
dbesc($hash)
|
||||
);
|
||||
return(($r) ? $r[0] : false);
|
||||
}
|
||||
|
||||
function channelx_by_n($id) {
|
||||
$r = q("SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_id = %d and channel_removed = 0 LIMIT 1",
|
||||
dbesc($id)
|
||||
);
|
||||
return(($r) ? $r[0] : false);
|
||||
}
|
||||
|
262
include/chat.php
262
include/chat.php
@ -1,262 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @file include/chat.php
|
||||
* @brief Chat related functions.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Creates a chatroom.
|
||||
*
|
||||
* @param array $channel
|
||||
* @param array $arr
|
||||
* @return An associative array containing:
|
||||
* - success: A boolean
|
||||
* - message: (optional) A string
|
||||
*/
|
||||
function chatroom_create($channel, $arr) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
$name = trim($arr['name']);
|
||||
if(! $name) {
|
||||
$ret['message'] = t('Missing room name');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select cr_id from chatroom where cr_uid = %d and cr_name = '%s' limit 1",
|
||||
intval($channel['channel_id']),
|
||||
dbesc($name)
|
||||
);
|
||||
if($r) {
|
||||
$ret['message'] = t('Duplicate room name');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select count(cr_id) as total from chatroom where cr_aid = %d",
|
||||
intval($channel['channel_account_id'])
|
||||
);
|
||||
if($r)
|
||||
$limit = service_class_fetch($channel['channel_id'], 'chatrooms');
|
||||
|
||||
if(($r) && ($limit !== false) && ($r[0]['total'] >= $limit)) {
|
||||
$ret['message'] = upgrade_message();
|
||||
return $ret;
|
||||
}
|
||||
|
||||
if(! array_key_exists('expire', $arr))
|
||||
$arr['expire'] = 120; // minutes, e.g. 2 hours
|
||||
|
||||
$created = datetime_convert();
|
||||
|
||||
$x = q("insert into chatroom ( cr_aid, cr_uid, cr_name, cr_created, cr_edited, cr_expire, allow_cid, allow_gid, deny_cid, deny_gid )
|
||||
values ( %d, %d , '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s' ) ",
|
||||
intval($channel['channel_account_id']),
|
||||
intval($channel['channel_id']),
|
||||
dbesc($name),
|
||||
dbesc($created),
|
||||
dbesc($created),
|
||||
intval($arr['expire']),
|
||||
dbesc($arr['allow_cid']),
|
||||
dbesc($arr['allow_gid']),
|
||||
dbesc($arr['deny_cid']),
|
||||
dbesc($arr['deny_gid'])
|
||||
);
|
||||
|
||||
if($x)
|
||||
$ret['success'] = true;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_destroy($channel,$arr) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
if(intval($arr['cr_id']))
|
||||
$sql_extra = " and cr_id = " . intval($arr['cr_id']) . " ";
|
||||
elseif(trim($arr['cr_name']))
|
||||
$sql_extra = " and cr_name = '" . protect_sprintf(dbesc(trim($arr['cr_name']))) . "' ";
|
||||
else {
|
||||
$ret['message'] = t('Invalid room specifier.');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select * from chatroom where cr_uid = %d $sql_extra limit 1",
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
if(! $r) {
|
||||
$ret['message'] = t('Invalid room specifier.');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
build_sync_packet($channel['channel_id'],array('chatroom' => $r));
|
||||
|
||||
q("delete from chatroom where cr_id = %d",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
if($r[0]['cr_id']) {
|
||||
q("delete from chatpresence where cp_room = %d",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
q("delete from chat where chat_room = %d",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
}
|
||||
|
||||
$ret['success'] = true;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_enter($observer_xchan, $room_id, $status, $client) {
|
||||
|
||||
if(! $room_id || ! $observer_xchan)
|
||||
return;
|
||||
|
||||
$r = q("select * from chatroom where cr_id = %d limit 1",
|
||||
intval($room_id)
|
||||
);
|
||||
if(! $r) {
|
||||
notice( t('Room not found.') . EOL);
|
||||
return false;
|
||||
}
|
||||
require_once('include/security.php');
|
||||
$sql_extra = permissions_sql($r[0]['cr_uid']);
|
||||
|
||||
$x = q("select * from chatroom where cr_id = %d and cr_uid = %d $sql_extra limit 1",
|
||||
intval($room_id),
|
||||
intval($r[0]['cr_uid'])
|
||||
);
|
||||
if(! $x) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return false;
|
||||
}
|
||||
|
||||
$limit = service_class_fetch($r[0]['cr_uid'], 'chatters_inroom');
|
||||
if($limit !== false) {
|
||||
$y = q("select count(*) as total from chatpresence where cp_room = %d",
|
||||
intval($room_id)
|
||||
);
|
||||
if($y && $y[0]['total'] > $limit) {
|
||||
notice( t('Room is full') . EOL);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(intval($x[0]['cr_expire'])) {
|
||||
$r = q("delete from chat where created < %s - INTERVAL %s and chat_room = %d",
|
||||
db_utcnow(),
|
||||
db_quoteinterval( intval($x[0]['cr_expire']) . ' MINUTE' ),
|
||||
intval($x[0]['cr_id'])
|
||||
);
|
||||
}
|
||||
|
||||
$r = q("select * from chatpresence where cp_xchan = '%s' and cp_room = %d limit 1",
|
||||
dbesc($observer_xchan),
|
||||
intval($room_id)
|
||||
);
|
||||
if($r) {
|
||||
q("update chatpresence set cp_last = '%s' where cp_id = %d and cp_client = '%s'",
|
||||
dbesc(datetime_convert()),
|
||||
intval($r[0]['cp_id']),
|
||||
dbesc($client)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
$r = q("insert into chatpresence ( cp_room, cp_xchan, cp_last, cp_status, cp_client )
|
||||
values ( %d, '%s', '%s', '%s', '%s' )",
|
||||
intval($room_id),
|
||||
dbesc($observer_xchan),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($status),
|
||||
dbesc($client)
|
||||
);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_leave($observer_xchan, $room_id, $client) {
|
||||
if(! $room_id || ! $observer_xchan)
|
||||
return;
|
||||
|
||||
$r = q("select * from chatpresence where cp_xchan = '%s' and cp_room = %d and cp_client = '%s' limit 1",
|
||||
dbesc($observer_xchan),
|
||||
intval($room_id),
|
||||
dbesc($client)
|
||||
);
|
||||
if($r) {
|
||||
q("delete from chatpresence where cp_id = %d",
|
||||
intval($r[0]['cp_id'])
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_list($uid) {
|
||||
require_once('include/security.php');
|
||||
$sql_extra = permissions_sql($uid);
|
||||
|
||||
$r = q("select allow_cid, allow_gid, deny_cid, deny_gid, cr_name, cr_expire, cr_id, count(cp_id) as cr_inroom from chatroom left join chatpresence on cr_id = cp_room where cr_uid = %d $sql_extra group by cr_name, cr_id order by cr_name",
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
function chatroom_list_count($uid) {
|
||||
require_once('include/security.php');
|
||||
$sql_extra = permissions_sql($uid);
|
||||
|
||||
$r = q("select count(*) as total from chatroom where cr_uid = %d $sql_extra",
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
return $r[0]['total'];
|
||||
}
|
||||
|
||||
/**
|
||||
* create a chat message via API.
|
||||
* It is the caller's responsibility to enter the room.
|
||||
*/
|
||||
|
||||
function chat_message($uid, $room_id, $xchan, $text) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
if(! $text)
|
||||
return;
|
||||
|
||||
$sql_extra = permissions_sql($uid);
|
||||
|
||||
$r = q("select * from chatroom where cr_uid = %d and cr_id = %d $sql_extra",
|
||||
intval($uid),
|
||||
intval($room_id)
|
||||
);
|
||||
if(! $r)
|
||||
return $ret;
|
||||
|
||||
$arr = array(
|
||||
'chat_room' => $room_id,
|
||||
'chat_xchan' => $xchan,
|
||||
'chat_text' => $text
|
||||
);
|
||||
|
||||
call_hooks('chat_message', $arr);
|
||||
|
||||
$x = q("insert into chat ( chat_room, chat_xchan, created, chat_text )
|
||||
values( %d, '%s', '%s', '%s' )",
|
||||
intval($room_id),
|
||||
dbesc($xchan),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($arr['chat_text'])
|
||||
);
|
||||
|
||||
$ret['success'] = true;
|
||||
return $ret;
|
||||
}
|
@ -6,37 +6,7 @@ require_once('boot.php');
|
||||
|
||||
function cli_startup() {
|
||||
|
||||
global $a, $db, $default_timezone;
|
||||
|
||||
if(is_null($a)) {
|
||||
$a = new miniApp;
|
||||
}
|
||||
|
||||
App::init();
|
||||
|
||||
if(is_null($db)) {
|
||||
@include(".htconfig.php");
|
||||
|
||||
$a->convert();
|
||||
|
||||
if(! defined('UNO'))
|
||||
define('UNO', 0);
|
||||
|
||||
App::$timezone = ((x($default_timezone)) ? $default_timezone : 'UTC');
|
||||
date_default_timezone_set(App::$timezone);
|
||||
|
||||
require_once('include/dba/dba_driver.php');
|
||||
$db = dba_factory($db_host, $db_port, $db_user, $db_pass, $db_data, $db_type);
|
||||
unset($db_host, $db_port, $db_user, $db_pass, $db_data, $db_type);
|
||||
};
|
||||
|
||||
App::$session = new Zotlabs\Web\Session();
|
||||
App::$session->init();
|
||||
|
||||
load_config('system');
|
||||
|
||||
sys_boot();
|
||||
App::set_baseurl(get_config('system','baseurl'));
|
||||
|
||||
load_hooks();
|
||||
|
||||
}
|
@ -44,7 +44,6 @@
|
||||
* The category of the configuration value
|
||||
*/
|
||||
function load_config($family) {
|
||||
global $a;
|
||||
|
||||
if(! array_key_exists($family, App::$config))
|
||||
App::$config[$family] = array();
|
||||
@ -81,7 +80,6 @@ function load_config($family) {
|
||||
* @return mixed Return value or false on error or if not set
|
||||
*/
|
||||
function get_config($family, $key) {
|
||||
global $a;
|
||||
|
||||
if((! array_key_exists($family, App::$config)) || (! array_key_exists('config_loaded', App::$config[$family])))
|
||||
load_config($family);
|
||||
@ -110,6 +108,7 @@ function get_config($family, $key) {
|
||||
* The configuration key to query
|
||||
* @return mixed
|
||||
*/
|
||||
|
||||
function get_config_from_storage($family, $key) {
|
||||
$ret = q("SELECT * FROM config WHERE cat = '%s' AND k = '%s' LIMIT 1",
|
||||
dbesc($family),
|
||||
@ -135,7 +134,6 @@ function get_config_from_storage($family, $key) {
|
||||
* Return the set value, or false if the database update failed
|
||||
*/
|
||||
function set_config($family, $key, $value) {
|
||||
global $a;
|
||||
|
||||
// manage array value
|
||||
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
|
||||
@ -180,7 +178,7 @@ function set_config($family, $key, $value) {
|
||||
* @return mixed
|
||||
*/
|
||||
function del_config($family, $key) {
|
||||
global $a;
|
||||
|
||||
$ret = false;
|
||||
|
||||
if(array_key_exists($family, App::$config) && array_key_exists($key, App::$config[$family]))
|
||||
@ -204,7 +202,6 @@ function del_config($family, $key) {
|
||||
* @return void|false Nothing or false if $uid is false
|
||||
*/
|
||||
function load_pconfig($uid) {
|
||||
global $a;
|
||||
|
||||
if($uid === false)
|
||||
return false;
|
||||
@ -249,7 +246,6 @@ function load_pconfig($uid) {
|
||||
*/
|
||||
function get_pconfig($uid, $family, $key, $instore = false) {
|
||||
// logger('include/config.php: get_pconfig() deprecated instore param used', LOGGER_DEBUG);
|
||||
global $a;
|
||||
|
||||
if($uid === false)
|
||||
return false;
|
||||
@ -285,7 +281,6 @@ function get_pconfig($uid, $family, $key, $instore = false) {
|
||||
* @return mixed Stored $value or false
|
||||
*/
|
||||
function set_pconfig($uid, $family, $key, $value) {
|
||||
global $a;
|
||||
|
||||
// this catches subtle errors where this function has been called
|
||||
// with local_channel() when not logged in (which returns false)
|
||||
@ -372,7 +367,7 @@ function set_pconfig($uid, $family, $key, $value) {
|
||||
* @return mixed
|
||||
*/
|
||||
function del_pconfig($uid, $family, $key) {
|
||||
global $a;
|
||||
|
||||
$ret = false;
|
||||
|
||||
if (x(App::$config[$uid][$family], $key))
|
||||
@ -398,7 +393,6 @@ function del_pconfig($uid, $family, $key) {
|
||||
* @return void|false Returns false if xchan is not set
|
||||
*/
|
||||
function load_xconfig($xchan) {
|
||||
global $a;
|
||||
|
||||
if(! $xchan)
|
||||
return false;
|
||||
@ -441,7 +435,6 @@ function load_xconfig($xchan) {
|
||||
* @return mixed Stored $value or false if it does not exist
|
||||
*/
|
||||
function get_xconfig($xchan, $family, $key) {
|
||||
global $a;
|
||||
|
||||
if(! $xchan)
|
||||
return false;
|
||||
@ -477,7 +470,6 @@ function get_xconfig($xchan, $family, $key) {
|
||||
* @return mixed Stored $value or false
|
||||
*/
|
||||
function set_xconfig($xchan, $family, $key, $value) {
|
||||
global $a;
|
||||
|
||||
// manage array value
|
||||
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
|
||||
@ -530,7 +522,7 @@ function set_xconfig($xchan, $family, $key, $value) {
|
||||
* @return mixed
|
||||
*/
|
||||
function del_xconfig($xchan, $family, $key) {
|
||||
global $a;
|
||||
|
||||
$ret = false;
|
||||
|
||||
if(x(App::$config[$xchan][$family], $key))
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user