Merge branch 'dev' of https://framagit.org/hubzilla/core into xdev_merge
This commit is contained in:
commit
7e29bd10b6
18
CHANGELOG
18
CHANGELOG
@ -1,3 +1,21 @@
|
||||
Hubzilla 3.8.8 (2018-12-22)
|
||||
- Fix issue with linkinfo
|
||||
- Fix cURL with HTTP/2
|
||||
- Remove scale_external_images()
|
||||
- Style highlight bbcode via css
|
||||
- Make mod channel deal with b64 encoded mid's
|
||||
- Fix email retrieval in OAuth2Storage
|
||||
- Add reinstall option to util/addons
|
||||
- Remove deprecated caching protection from mod photo
|
||||
- Add missing check for observer in mod like
|
||||
- Articles: default to logged in channel if channel name is not passed
|
||||
- Wiki: fix preview issue with hyperlinks
|
||||
- Cart: backport fixes from osada
|
||||
- Gallery: provide file extensions for better compatibility
|
||||
- Hsse: fix issue when linkinfo data was inserted
|
||||
- Diaspora: remove deprecated scale_external_images()
|
||||
|
||||
|
||||
Hubzilla 3.8.7 (2018-12-14)
|
||||
- Fix issue with linkdropper in comment area
|
||||
- Fix regression wit app ordering
|
||||
|
@ -16,8 +16,6 @@ if(array_search( __file__ , get_included_files()) === 0) {
|
||||
|
||||
class Master {
|
||||
|
||||
static public $queueworker = null;
|
||||
|
||||
static public function Summon($arr) {
|
||||
proc_run('php','Zotlabs/Daemon/Master.php',$arr);
|
||||
}
|
||||
@ -25,126 +23,21 @@ class Master {
|
||||
static public function Release($argc,$argv) {
|
||||
cli_startup();
|
||||
|
||||
$maxworkers = get_config('system','max_queue_workers');
|
||||
$hookinfo = [
|
||||
'argv'=>$argv
|
||||
];
|
||||
|
||||
if (!$maxworkers || $maxworkers == 0) {
|
||||
logger('Master: release: ' . print_r($argv,true), LOGGER_ALL,LOG_DEBUG);
|
||||
$cls = '\\Zotlabs\\Daemon\\' . $argv[0];
|
||||
$cls::run($argc,$argv);
|
||||
self::ClearQueue();
|
||||
} else {
|
||||
logger('Master: enqueue: ' . print_r($argv,true), LOGGER_ALL,LOG_DEBUG);
|
||||
$workinfo = ['argc'=>$argc,'argv'=>$argv];
|
||||
q("insert into config (cat,k,v) values ('queuework','%s','%s')",
|
||||
dbesc(uniqid('workitem:',true)),
|
||||
dbesc(serialize($workinfo)));
|
||||
self::Process();
|
||||
call_hooks ('daemon_master_release',$hookinfo);
|
||||
|
||||
$argv = $hookinfo['argv'];
|
||||
$argc = count($argv);
|
||||
|
||||
if ((!is_array($argv) || (count($argv) < 1))) {
|
||||
return;
|
||||
}
|
||||
|
||||
logger('Master: release: ' . json_encode($argv), LOGGER_ALL,LOG_DEBUG);
|
||||
$cls = '\\Zotlabs\\Daemon\\' . $argv[0];
|
||||
$cls::run($argc,$argv);
|
||||
}
|
||||
|
||||
static public function GetWorkerID() {
|
||||
$maxworkers = get_config('system','max_queue_workers');
|
||||
$maxworkers = ($maxworkers) ? $maxworkers : 3;
|
||||
|
||||
$workermaxage = get_config('system','max_queue_worker_age');
|
||||
$workermaxage = ($workermaxage) ? $workermaxage : 300;
|
||||
|
||||
$workers = q("select * from config where cat='queueworkers' and k like '%s'", 'workerstarted_%');
|
||||
|
||||
if (count($workers) > $maxworkers) {
|
||||
foreach ($workers as $idx => $worker) {
|
||||
$curtime = time();
|
||||
$age = (intval($curtime) - intval($worker['v']));
|
||||
if ( $age > $workermaxage) {
|
||||
logger("Prune worker: ".$worker['k'], LOGGER_ALL, LOGGER_DEBUG);
|
||||
$k = explode('_',$worker['k']);
|
||||
q("delete from config where cat='queueworkers' and k='%s'",
|
||||
'workerstarted_'.$k[1]);
|
||||
q("update config set k='%s' where cat='queuework' and k='%s'",
|
||||
dbesc(uniqid('workitem:',true)),
|
||||
'workitem_'.$k[1]);
|
||||
unset($workers[$idx]);
|
||||
}
|
||||
}
|
||||
if (count($workers) > $maxworkers) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return uniqid('',true);
|
||||
|
||||
}
|
||||
|
||||
static public function Process() {
|
||||
|
||||
self::$queueworker = self::GetWorkerID();
|
||||
|
||||
if (!self::$queueworker) {
|
||||
logger('Master: unable to obtain worker ID.');
|
||||
killme();
|
||||
}
|
||||
|
||||
set_config('queueworkers','workerstarted_'.self::$queueworker,time());
|
||||
|
||||
$workersleep = get_config('system','queue_worker_sleep');
|
||||
$workersleep = ($workersleep) ? $workersleep : 5;
|
||||
cli_startup();
|
||||
|
||||
$work = q("update config set k='%s' where cat='queuework' and k like '%s' limit 1",
|
||||
'workitem_'.self::$queueworker,
|
||||
dbesc('workitem:%'));
|
||||
$jobs = 0;
|
||||
while ($work) {
|
||||
$workitem = q("select * from config where cat='queuework' and k='%s'",
|
||||
'workitem_'.self::$queueworker);
|
||||
|
||||
if (isset($workitem[0])) {
|
||||
$jobs++;
|
||||
$workinfo = unserialize($workitem[0]['v']);
|
||||
$argc = $workinfo['argc'];
|
||||
$argv = $workinfo['argv'];
|
||||
logger('Master: process: ' . print_r($argv,true), LOGGER_ALL,LOG_DEBUG);
|
||||
|
||||
//Delete unclaimed duplicate workitems.
|
||||
q("delete from config where cat='queuework' and k='workitem' and v='%s'",
|
||||
serialize($argv));
|
||||
|
||||
$cls = '\\Zotlabs\\Daemon\\' . $argv[0];
|
||||
$cls::run($argc,$argv);
|
||||
|
||||
//Right now we assume that if we get a return, everything is OK.
|
||||
//At some point we may want to test whether the run returns true/false
|
||||
// and requeue the work to be tried again. But we probably want
|
||||
// to implement some sort of "retry interval" first.
|
||||
|
||||
q("delete from config where cat='queuework' and k='%s'",
|
||||
'workitem_'.self::$queueworker);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
sleep ($workersleep);
|
||||
$work = q("update config set k='%s' where cat='queuework' and k like '%s' limit 1",
|
||||
'workitem_'.self::$queueworker,
|
||||
dbesc('workitem:%'));
|
||||
|
||||
}
|
||||
logger('Master: Worker Thread: queue items processed:' . $jobs);
|
||||
q("delete from config where cat='queueworkers' and k='%s'",
|
||||
'workerstarted_'.self::$queueworker);
|
||||
}
|
||||
|
||||
static public function ClearQueue() {
|
||||
$work = q("select * from config where cat='queuework' and k like '%s'",
|
||||
dbesc('workitem%'));
|
||||
foreach ($work as $workitem) {
|
||||
$workinfo = unserialize($workitem['v']);
|
||||
$argc = $workinfo['argc'];
|
||||
$argv = $workinfo['argv'];
|
||||
logger('Master: process: ' . print_r($argv,true), LOGGER_ALL,LOG_DEBUG);
|
||||
$cls = '\\Zotlabs\\Daemon\\' . $argv[0];
|
||||
$cls::run($argc,$argv);
|
||||
}
|
||||
$work = q("delete from config where cat='queuework' and k like '%s'",
|
||||
dbesc('workitem%'));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ class Queue {
|
||||
require_once('include/items.php');
|
||||
require_once('include/bbcode.php');
|
||||
|
||||
|
||||
if($argc > 1)
|
||||
$queue_id = $argv[1];
|
||||
else
|
||||
@ -61,10 +60,20 @@ class Queue {
|
||||
// or just prior to this query based on recent and long-term delivery history. If we have good reason to believe
|
||||
// the site is permanently down, there's no reason to attempt delivery at all, or at most not more than once
|
||||
// or twice a day.
|
||||
|
||||
$r = q("SELECT * FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s ",
|
||||
|
||||
$sqlrandfunc = db_getfunc('rand');
|
||||
|
||||
$r = q("SELECT *,$sqlrandfunc as rn FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s order by rn limit 1",
|
||||
db_utcnow()
|
||||
);
|
||||
while ($r) {
|
||||
foreach($r as $rv) {
|
||||
queue_deliver($rv);
|
||||
}
|
||||
$r = q("SELECT *,$sqlrandfunc as rn FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s order by rn limit 1",
|
||||
db_utcnow()
|
||||
);
|
||||
}
|
||||
}
|
||||
if(! $r)
|
||||
return;
|
||||
|
@ -93,11 +93,19 @@ class DReport {
|
||||
if(! $c)
|
||||
return false;
|
||||
|
||||
// legacy zot recipients add a space and their name to the xchan. remove it if true.
|
||||
|
||||
$legacy_recipient = strpos($dr['recipient'], ' ');
|
||||
if($legacy_recipient !== false) {
|
||||
$legacy_recipient_parts = explode(' ', $dr['recipient'], 2);
|
||||
$rxchan = $legacy_recipient_parts[0];
|
||||
}
|
||||
else {
|
||||
$rxchan = $dr['recipient'];
|
||||
}
|
||||
|
||||
// is the recipient one of our connections, or do we want to store every report?
|
||||
|
||||
|
||||
$rxchan = $dr['recipient'];
|
||||
$pcf = get_pconfig($c[0]['channel_id'],'system','dreport_store_all');
|
||||
if($pcf)
|
||||
return true;
|
||||
|
@ -998,6 +998,15 @@ logger('4');
|
||||
foreach($x['delivery_report'] as $xx) {
|
||||
call_hooks('dreport_process',$xx);
|
||||
if(is_array($xx) && array_key_exists('message_id',$xx) && DReport::is_storable($xx)) {
|
||||
|
||||
// legacy recipients add a space and their name to the xchan. split those if true.
|
||||
$legacy_recipient = strpos($xx['recipient'], ' ');
|
||||
if($legacy_recipient !== false) {
|
||||
$legacy_recipient_parts = explode(' ', $xx['recipient'], 2);
|
||||
$xx['recipient'] = $legacy_recipient_parts[0];
|
||||
$xx['name'] = $legacy_recipient_parts[1];
|
||||
}
|
||||
|
||||
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s', '%s','%s','%s','%s','%s' ) ",
|
||||
dbesc($xx['message_id']),
|
||||
dbesc($xx['location']),
|
||||
|
@ -131,14 +131,19 @@ class PConfig {
|
||||
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
|
||||
$dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue);
|
||||
|
||||
$now = datetime_convert();
|
||||
if (! $updated) {
|
||||
$updated = datetime_convert();
|
||||
//Sometimes things happen fast... very fast.
|
||||
//To make sure legitimate updates aren't rejected
|
||||
//because not enough time has passed. We say our updates
|
||||
//happened just a short time in the past rather than right now.
|
||||
$updated = datetime_convert('UTC','UTC','-2 seconds');
|
||||
}
|
||||
|
||||
$hash = hash('sha256',$family.':'.$key);
|
||||
|
||||
if (self::Get($uid, 'hz_delpconfig', $hash) !== false) {
|
||||
if (self::Get($uid, 'hz_delpconfig', $hash) > $updated) {
|
||||
if (self::Get($uid, 'hz_delpconfig', $hash) > $now) {
|
||||
logger('Refusing to update pconfig with outdated info (Item deleted more recently).', LOGGER_NORMAL, LOG_ERR);
|
||||
return self::Get($uid,$family,$key);
|
||||
} else {
|
||||
@ -173,7 +178,7 @@ class PConfig {
|
||||
|
||||
}
|
||||
else {
|
||||
$new = (\App::$config[$uid][$family]['pcfgud:'.$key] < $updated);
|
||||
$new = (\App::$config[$uid][$family]['pcfgud:'.$key] < $now);
|
||||
|
||||
if ($new) {
|
||||
|
||||
@ -241,9 +246,9 @@ class PConfig {
|
||||
if(is_null($uid) || $uid === false)
|
||||
return false;
|
||||
|
||||
$updated = ($updated) ? $updated : datetime_convert();
|
||||
|
||||
$newer = (\App::$config[$uid][$family]['pcfgud:'.$key] < $updated);
|
||||
$updated = ($updated) ? $updated : datetime_convert('UTC','UTC','-2 seconds');
|
||||
$now = datetime_convert();
|
||||
$newer = (\App::$config[$uid][$family]['pcfgud:'.$key] < $now);
|
||||
|
||||
if (! $newer) {
|
||||
logger('Refusing to delete pconfig with outdated delete request.', LOGGER_NORMAL, LOG_ERR);
|
||||
|
@ -124,6 +124,11 @@ class Channel extends Controller {
|
||||
|
||||
$mid = ((x($_REQUEST,'mid')) ? $_REQUEST['mid'] : '');
|
||||
|
||||
if(strpos($mid,'b64.') === 0)
|
||||
$decoded = @base64url_decode(substr($mid,4));
|
||||
if($decoded)
|
||||
$mid = $decoded;
|
||||
|
||||
$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']) : '');
|
||||
|
||||
@ -375,6 +380,9 @@ class Channel extends Controller {
|
||||
|
||||
if((! $update) && (! $load)) {
|
||||
|
||||
if($decoded)
|
||||
$mid = 'b64.' . base64url_encode($mid);
|
||||
|
||||
// This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
|
||||
// because browser prefetching might change it on us. We have to deliver it with the page.
|
||||
|
||||
|
@ -75,6 +75,10 @@ class Group extends Controller {
|
||||
);
|
||||
if($r)
|
||||
info( t('Privacy group updated.') . EOL );
|
||||
|
||||
$hookinfo = [ 'pgrp_extras' => '', 'group'=>$group['id'] ];
|
||||
call_hooks ('privacygroup_extras_post',$hookinfo);
|
||||
|
||||
build_sync_packet(local_channel(),null,true);
|
||||
}
|
||||
|
||||
@ -127,6 +131,10 @@ class Group extends Controller {
|
||||
$i++;
|
||||
}
|
||||
|
||||
$hookinfo = [ 'pgrp_extras' => '', 'group'=>argv(1) ];
|
||||
call_hooks ('privacygroup_extras',$hookinfo);
|
||||
$pgrp_extras = $hookinfo['pgrp_extras'];
|
||||
|
||||
$tpl = get_markup_template('privacy_groups.tpl');
|
||||
$o = replace_macros($tpl, [
|
||||
'$title' => t('Privacy Groups'),
|
||||
@ -136,6 +144,7 @@ class Group extends Controller {
|
||||
// new group form
|
||||
'$gname' => array('groupname',t('Privacy group name')),
|
||||
'$public' => array('public',t('Members are visible to other channels'), false),
|
||||
'$pgrp_extras' => $pgrp_extras,
|
||||
'$form_security_token' => get_form_security_token("group_edit"),
|
||||
'$submit' => t('Submit'),
|
||||
|
||||
@ -166,8 +175,11 @@ class Group extends Controller {
|
||||
);
|
||||
if($r)
|
||||
$result = group_rmv(local_channel(),$r[0]['gname']);
|
||||
if($result)
|
||||
if($result) {
|
||||
$hookinfo = [ 'pgrp_extras' => '', 'group'=>$argv(2) ];
|
||||
call_hooks ('privacygroup_extras_drop',$hookinfo);
|
||||
info( t('Privacy group removed.') . EOL);
|
||||
}
|
||||
else
|
||||
notice( t('Unable to remove privacy group.') . EOL);
|
||||
}
|
||||
|
@ -251,6 +251,9 @@ class Like extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
if(! $observer)
|
||||
killme();
|
||||
|
||||
// this is used to like an item or comment
|
||||
|
||||
|
@ -138,8 +138,8 @@ class Linkinfo extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
$image = "";
|
||||
|
||||
if(sizeof($siteinfo["images"]) > 0){
|
||||
|
||||
if(is_array($siteinfo["images"]) && count($siteinfo["images"])){
|
||||
/* Execute below code only if image is present in siteinfo */
|
||||
|
||||
$total_images = 0;
|
||||
@ -161,7 +161,7 @@ class Linkinfo extends \Zotlabs\Web\Controller {
|
||||
$total_images ++;
|
||||
if($max_images && $max_images >= $total_images)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(strlen($text)) {
|
||||
|
@ -134,7 +134,7 @@ class New_channel extends \Zotlabs\Web\Controller {
|
||||
$default_role = '';
|
||||
$aid = get_account_id();
|
||||
if($aid) {
|
||||
$r = q("select count(channel_id) as total from channel where channel_account_id = %d",
|
||||
$r = q("select count(channel_id) as total from channel where channel_account_id = %d and channel_removed = 0",
|
||||
intval($aid)
|
||||
);
|
||||
if($r && (! intval($r[0]['total']))) {
|
||||
|
@ -24,7 +24,7 @@ class Pconfig extends \Zotlabs\Web\Controller {
|
||||
$aj = intval($_POST['aj']);
|
||||
|
||||
// Do not store "serialized" data received in the $_POST
|
||||
if (preg_match('|^a:[0-9]+:{.*}$|s',$v) || preg_match('O:8:"stdClass":[0-9]+:{.*}$|s',$v)) {
|
||||
if (preg_match('|^a:[0-9]+:{.*}$|s',$v) || preg_match('|O:8:"stdClass":[0-9]+:{.*}$|s',$v)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -159,14 +159,15 @@ class Photo extends \Zotlabs\Web\Controller {
|
||||
// Validate cache
|
||||
$cache = array(
|
||||
'resid' => $photo,
|
||||
'url' => htmlspecialchars_decode($r[0]['display_path'])
|
||||
'status' => false
|
||||
);
|
||||
if($cache_mode['on'])
|
||||
call_hooks('cache_url_hook', $cache);
|
||||
if($cache['url'] != '') {
|
||||
if(strpos(z_root(),'https:') !== false && strpos($cache['url'],'https:') === false)
|
||||
$cache['url'] = z_root() . '/sslify/' . $filename . '?f=&url=' . urlencode($cache['url']);
|
||||
header("Location: " . $cache['url']);
|
||||
if(! $cache['status']) {
|
||||
$url = htmlspecialchars_decode($r[0]['display_path']);
|
||||
if(strpos(z_root(),'https:') !== false && strpos($url,'https:') === false)
|
||||
$url = z_root() . '/sslify/' . $filename . '?f=&url=' . urlencode($url);
|
||||
header("Location: " . $url);
|
||||
killme();
|
||||
}
|
||||
}
|
||||
|
@ -988,7 +988,7 @@ class Photos extends \Zotlabs\Web\Controller {
|
||||
$photo = array(
|
||||
'href' => z_root() . '/photo/' . $hires['resource_id'] . '-' . $hires['imgscale'] . '.' . $phototypes[$hires['mimetype']],
|
||||
'title'=> t('View Full Size'),
|
||||
'src' => z_root() . '/photo/' . $lores['resource_id'] . '-' . $lores['imgscale'] . '.' . $phototypes[$lores['mimetype']] . '?f=&_u=' . datetime_convert('','','','ymdhis')
|
||||
'src' => z_root() . '/photo/' . $lores['resource_id'] . '-' . $lores['imgscale'] . '.' . $phototypes[$lores['mimetype']]
|
||||
);
|
||||
|
||||
if($nextlink)
|
||||
|
3
boot.php
3
boot.php
@ -84,7 +84,8 @@ define ( 'DIRECTORY_FALLBACK_MASTER', 'https://zotadel.net');
|
||||
|
||||
$DIRECTORY_FALLBACK_SERVERS = array(
|
||||
'https://hubzilla.zottel.net',
|
||||
'https://zotadel.net'
|
||||
'https://zotadel.net',
|
||||
'https://zotsite.net'
|
||||
);
|
||||
|
||||
|
||||
|
340
composer.lock
generated
340
composer.lock
generated
@ -63,16 +63,16 @@
|
||||
},
|
||||
{
|
||||
"name": "bshaffer/oauth2-server-php",
|
||||
"version": "v1.10.0",
|
||||
"version": "v1.11.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/bshaffer/oauth2-server-php.git",
|
||||
"reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9"
|
||||
"reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/d158878425392fe5a0cc34f15dbaf46315ae0ed9",
|
||||
"reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9",
|
||||
"url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/5a0c8000d4763b276919e2106f54eddda6bc50fa",
|
||||
"reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -117,7 +117,7 @@
|
||||
"oauth",
|
||||
"oauth2"
|
||||
],
|
||||
"time": "2017-11-15T01:41:02+00:00"
|
||||
"time": "2018-12-04T00:29:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "commerceguys/intl",
|
||||
@ -251,16 +251,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/html-to-markdown",
|
||||
"version": "4.8.0",
|
||||
"version": "4.8.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/html-to-markdown.git",
|
||||
"reference": "f9a879a068c68ff47b722de63f58bec79e448f9d"
|
||||
"reference": "250d1bf45f80d15594fb6b316df777d6d4c97ad1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/f9a879a068c68ff47b722de63f58bec79e448f9d",
|
||||
"reference": "f9a879a068c68ff47b722de63f58bec79e448f9d",
|
||||
"url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/250d1bf45f80d15594fb6b316df777d6d4c97ad1",
|
||||
"reference": "250d1bf45f80d15594fb6b316df777d6d4c97ad1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -311,7 +311,7 @@
|
||||
"html",
|
||||
"markdown"
|
||||
],
|
||||
"time": "2018-09-18T12:18:08+00:00"
|
||||
"time": "2018-12-24T17:21:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "lukasreschke/id3parser",
|
||||
@ -1925,32 +1925,33 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "1.4.2",
|
||||
"version": "1.5.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
|
||||
"reference": "9f83dded91781a01c63574e387eaa769be769115"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
|
||||
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
|
||||
"reference": "9f83dded91781a01c63574e387eaa769be769115",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"psr/http-message": "~1.0"
|
||||
"psr/http-message": "~1.0",
|
||||
"ralouphie/getallheaders": "^2.0.5"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-message-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.0"
|
||||
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.4-dev"
|
||||
"dev-master": "1.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -1980,13 +1981,14 @@
|
||||
"keywords": [
|
||||
"http",
|
||||
"message",
|
||||
"psr-7",
|
||||
"request",
|
||||
"response",
|
||||
"stream",
|
||||
"uri",
|
||||
"url"
|
||||
],
|
||||
"time": "2017-03-20T17:10:46+00:00"
|
||||
"time": "2018-12-04T20:46:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
@ -2571,6 +2573,7 @@
|
||||
"testing",
|
||||
"xunit"
|
||||
],
|
||||
"abandoned": true,
|
||||
"time": "2018-02-07T06:47:59+00:00"
|
||||
},
|
||||
{
|
||||
@ -2827,16 +2830,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "7.4.4",
|
||||
"version": "7.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd"
|
||||
"reference": "c23d78776ad415d5506e0679723cb461d71f488f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b1be2c8530c4c29c3519a052c9fb6cee55053bbd",
|
||||
"reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c23d78776ad415d5506e0679723cb461d71f488f",
|
||||
"reference": "c23d78776ad415d5506e0679723cb461d71f488f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2857,7 +2860,7 @@
|
||||
"phpunit/php-timer": "^2.0",
|
||||
"sebastian/comparator": "^3.0",
|
||||
"sebastian/diff": "^3.0",
|
||||
"sebastian/environment": "^3.1 || ^4.0",
|
||||
"sebastian/environment": "^4.0",
|
||||
"sebastian/exporter": "^3.1",
|
||||
"sebastian/global-state": "^2.0",
|
||||
"sebastian/object-enumerator": "^3.0.3",
|
||||
@ -2881,7 +2884,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "7.4-dev"
|
||||
"dev-master": "7.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -2907,7 +2910,7 @@
|
||||
"testing",
|
||||
"xunit"
|
||||
],
|
||||
"time": "2018-11-14T16:52:02+00:00"
|
||||
"time": "2018-12-12T07:20:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
@ -3008,6 +3011,46 @@
|
||||
],
|
||||
"time": "2016-08-06T14:39:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
"version": "2.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ralouphie/getallheaders.git",
|
||||
"reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
|
||||
"reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~3.7.0",
|
||||
"satooshi/php-coveralls": ">=1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/getallheaders.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ralph Khattar",
|
||||
"email": "ralph.khattar@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A polyfill for getallheaders.",
|
||||
"time": "2016-02-11T07:05:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/code-unit-reverse-lookup",
|
||||
"version": "1.0.1",
|
||||
@ -3175,28 +3218,28 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/environment",
|
||||
"version": "3.1.0",
|
||||
"version": "4.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/environment.git",
|
||||
"reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
|
||||
"reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
|
||||
"reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/febd209a219cea7b56ad799b30ebbea34b71eb8f",
|
||||
"reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.0"
|
||||
"php": "^7.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6.1"
|
||||
"phpunit/phpunit": "^7.4"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.1.x-dev"
|
||||
"dev-master": "4.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -3221,7 +3264,7 @@
|
||||
"environment",
|
||||
"hhvm"
|
||||
],
|
||||
"time": "2017-07-01T08:51:00+00:00"
|
||||
"time": "2018-11-25T09:31:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
@ -3573,16 +3616,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/browser-kit",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/browser-kit.git",
|
||||
"reference": "c55fe9257003b2d95c0211b3f6941e8dfd26dffd"
|
||||
"reference": "db7e59fec9c82d45e745eb500e6ede2d96f4a6e9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/c55fe9257003b2d95c0211b3f6941e8dfd26dffd",
|
||||
"reference": "c55fe9257003b2d95c0211b3f6941e8dfd26dffd",
|
||||
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/db7e59fec9c82d45e745eb500e6ede2d96f4a6e9",
|
||||
"reference": "db7e59fec9c82d45e745eb500e6ede2d96f4a6e9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3599,7 +3642,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -3626,20 +3669,20 @@
|
||||
],
|
||||
"description": "Symfony BrowserKit Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-07-26T09:10:45+00:00"
|
||||
"time": "2018-11-26T11:49:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/class-loader",
|
||||
"version": "v3.4.18",
|
||||
"version": "v3.4.20",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/class-loader.git",
|
||||
"reference": "5605edec7b8f034ead2497ff4aab17bb70d558c1"
|
||||
"reference": "420458095cf60025eb0841276717e0da7f75e50e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/class-loader/zipball/5605edec7b8f034ead2497ff4aab17bb70d558c1",
|
||||
"reference": "5605edec7b8f034ead2497ff4aab17bb70d558c1",
|
||||
"url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e",
|
||||
"reference": "420458095cf60025eb0841276717e0da7f75e50e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3682,20 +3725,20 @@
|
||||
],
|
||||
"description": "Symfony ClassLoader Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-31T09:06:03+00:00"
|
||||
"time": "2018-11-11T19:48:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/config",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/config.git",
|
||||
"reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238"
|
||||
"reference": "005d9a083d03f588677d15391a716b1ac9b887c0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/991fec8bbe77367fc8b48ecbaa8a4bd6e905a238",
|
||||
"reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/005d9a083d03f588677d15391a716b1ac9b887c0",
|
||||
"reference": "005d9a083d03f588677d15391a716b1ac9b887c0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3718,7 +3761,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -3745,24 +3788,25 @@
|
||||
],
|
||||
"description": "Symfony Config Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-31T09:09:42+00:00"
|
||||
"time": "2018-11-30T22:21:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "432122af37d8cd52fba1b294b11976e0d20df595"
|
||||
"reference": "4dff24e5d01e713818805c1862d2e3f901ee7dd0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595",
|
||||
"reference": "432122af37d8cd52fba1b294b11976e0d20df595",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/4dff24e5d01e713818805c1862d2e3f901ee7dd0",
|
||||
"reference": "4dff24e5d01e713818805c1862d2e3f901ee7dd0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3",
|
||||
"symfony/contracts": "^1.0",
|
||||
"symfony/polyfill-mbstring": "~1.0"
|
||||
},
|
||||
"conflict": {
|
||||
@ -3786,7 +3830,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -3813,20 +3857,88 @@
|
||||
],
|
||||
"description": "Symfony Console Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-31T09:30:44+00:00"
|
||||
"time": "2018-11-27T07:40:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
"version": "v3.4.18",
|
||||
"name": "symfony/contracts",
|
||||
"version": "v1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/css-selector.git",
|
||||
"reference": "3503415d4aafabc31cd08c3a4ebac7f43fde8feb"
|
||||
"url": "https://github.com/symfony/contracts.git",
|
||||
"reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/css-selector/zipball/3503415d4aafabc31cd08c3a4ebac7f43fde8feb",
|
||||
"reference": "3503415d4aafabc31cd08c3a4ebac7f43fde8feb",
|
||||
"url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf",
|
||||
"reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/cache": "^1.0",
|
||||
"psr/container": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"psr/cache": "When using the Cache contracts",
|
||||
"psr/container": "When using the Service contracts",
|
||||
"symfony/cache-contracts-implementation": "",
|
||||
"symfony/service-contracts-implementation": "",
|
||||
"symfony/translation-contracts-implementation": ""
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Contracts\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"**/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "A set of abstractions extracted out of the Symfony components",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"abstractions",
|
||||
"contracts",
|
||||
"decoupling",
|
||||
"interfaces",
|
||||
"interoperability",
|
||||
"standards"
|
||||
],
|
||||
"time": "2018-12-05T08:06:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
"version": "v3.4.20",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/css-selector.git",
|
||||
"reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8",
|
||||
"reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3866,37 +3978,39 @@
|
||||
],
|
||||
"description": "Symfony CssSelector Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-02T16:33:53+00:00"
|
||||
"time": "2018-11-11T19:48:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dependency-injection",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dependency-injection.git",
|
||||
"reference": "e72ee2c23d952e4c368ee98610fa22b79b89b483"
|
||||
"reference": "e4adc57a48d3fa7f394edfffa9e954086d7740e5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e72ee2c23d952e4c368ee98610fa22b79b89b483",
|
||||
"reference": "e72ee2c23d952e4c368ee98610fa22b79b89b483",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e4adc57a48d3fa7f394edfffa9e954086d7740e5",
|
||||
"reference": "e4adc57a48d3fa7f394edfffa9e954086d7740e5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3",
|
||||
"psr/container": "^1.0"
|
||||
"psr/container": "^1.0",
|
||||
"symfony/contracts": "^1.0"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/config": "<4.1.1",
|
||||
"symfony/config": "<4.2",
|
||||
"symfony/finder": "<3.4",
|
||||
"symfony/proxy-manager-bridge": "<3.4",
|
||||
"symfony/yaml": "<3.4"
|
||||
},
|
||||
"provide": {
|
||||
"psr/container-implementation": "1.0"
|
||||
"psr/container-implementation": "1.0",
|
||||
"symfony/service-contracts-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/config": "~4.1",
|
||||
"symfony/config": "~4.2",
|
||||
"symfony/expression-language": "~3.4|~4.0",
|
||||
"symfony/yaml": "~3.4|~4.0"
|
||||
},
|
||||
@ -3910,7 +4024,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -3937,20 +4051,20 @@
|
||||
],
|
||||
"description": "Symfony DependencyInjection Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-31T10:54:16+00:00"
|
||||
"time": "2018-12-02T15:59:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dom-crawler.git",
|
||||
"reference": "80e60271bb288de2a2259662cff125cff4f93f95"
|
||||
"reference": "7438a32108fdd555295f443605d6de2cce473159"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/80e60271bb288de2a2259662cff125cff4f93f95",
|
||||
"reference": "80e60271bb288de2a2259662cff125cff4f93f95",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7438a32108fdd555295f443605d6de2cce473159",
|
||||
"reference": "7438a32108fdd555295f443605d6de2cce473159",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3967,7 +4081,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -3994,24 +4108,25 @@
|
||||
],
|
||||
"description": "Symfony DomCrawler Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-02T12:40:59+00:00"
|
||||
"time": "2018-11-26T10:55:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "552541dad078c85d9414b09c041ede488b456cd5"
|
||||
"reference": "921f49c3158a276d27c0d770a5a347a3b718b328"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/552541dad078c85d9414b09c041ede488b456cd5",
|
||||
"reference": "552541dad078c85d9414b09c041ede488b456cd5",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/921f49c3158a276d27c0d770a5a347a3b718b328",
|
||||
"reference": "921f49c3158a276d27c0d770a5a347a3b718b328",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3"
|
||||
"php": "^7.1.3",
|
||||
"symfony/contracts": "^1.0"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/dependency-injection": "<3.4"
|
||||
@ -4030,7 +4145,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -4057,20 +4172,20 @@
|
||||
],
|
||||
"description": "Symfony EventDispatcher Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-10T13:52:42+00:00"
|
||||
"time": "2018-12-01T08:52:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/filesystem.git",
|
||||
"reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981"
|
||||
"reference": "2f4c8b999b3b7cadb2a69390b01af70886753710"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/fd7bd6535beb1f0a0a9e3ee960666d0598546981",
|
||||
"reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/2f4c8b999b3b7cadb2a69390b01af70886753710",
|
||||
"reference": "2f4c8b999b3b7cadb2a69390b01af70886753710",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4080,7 +4195,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -4107,7 +4222,7 @@
|
||||
],
|
||||
"description": "Symfony Filesystem Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-30T13:18:25+00:00"
|
||||
"time": "2018-11-11T19:52:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
@ -4170,20 +4285,21 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/translation.git",
|
||||
"reference": "aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c"
|
||||
"reference": "c0e2191e9bed845946ab3d99767513b56ca7dcd6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c",
|
||||
"reference": "aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/c0e2191e9bed845946ab3d99767513b56ca7dcd6",
|
||||
"reference": "c0e2191e9bed845946ab3d99767513b56ca7dcd6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3",
|
||||
"symfony/contracts": "^1.0.2",
|
||||
"symfony/polyfill-mbstring": "~1.0"
|
||||
},
|
||||
"conflict": {
|
||||
@ -4191,6 +4307,9 @@
|
||||
"symfony/dependency-injection": "<3.4",
|
||||
"symfony/yaml": "<3.4"
|
||||
},
|
||||
"provide": {
|
||||
"symfony/translation-contracts-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/log": "~1.0",
|
||||
"symfony/config": "~3.4|~4.0",
|
||||
@ -4208,7 +4327,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -4235,20 +4354,20 @@
|
||||
],
|
||||
"description": "Symfony Translation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-28T18:38:52+00:00"
|
||||
"time": "2018-12-06T10:45:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v4.1.7",
|
||||
"version": "v4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
"reference": "367e689b2fdc19965be435337b50bc8adf2746c9"
|
||||
"reference": "c41175c801e3edfda90f32e292619d10c27103d7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/367e689b2fdc19965be435337b50bc8adf2746c9",
|
||||
"reference": "367e689b2fdc19965be435337b50bc8adf2746c9",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/c41175c801e3edfda90f32e292619d10c27103d7",
|
||||
"reference": "c41175c801e3edfda90f32e292619d10c27103d7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4267,7 +4386,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -4294,7 +4413,7 @@
|
||||
],
|
||||
"description": "Symfony Yaml Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-10-02T16:36:10+00:00"
|
||||
"time": "2018-11-11T19:52:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "theseer/tokenizer",
|
||||
@ -4338,20 +4457,21 @@
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
"version": "1.3.0",
|
||||
"version": "1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/webmozart/assert.git",
|
||||
"reference": "0df1908962e7a3071564e857d86874dad1ef204a"
|
||||
"reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
|
||||
"reference": "0df1908962e7a3071564e857d86874dad1ef204a",
|
||||
"url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
|
||||
"reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.3.3 || ^7.0"
|
||||
"php": "^5.3.3 || ^7.0",
|
||||
"symfony/polyfill-ctype": "^1.8"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.6",
|
||||
@ -4384,7 +4504,7 @@
|
||||
"check",
|
||||
"validate"
|
||||
],
|
||||
"time": "2018-01-29T19:49:41+00:00"
|
||||
"time": "2018-12-25T11:19:39+00:00"
|
||||
}
|
||||
],
|
||||
"aliases": [],
|
||||
|
42
doc/hook/collect_public_recipients.bb
Normal file
42
doc/hook/collect_public_recipients.bb
Normal file
@ -0,0 +1,42 @@
|
||||
[h2]collect_public_recipients[/h2]
|
||||
|
||||
Replace the default list of public recipients (i.e., all contacts).
|
||||
|
||||
Allow plugins to create a list of recipients for public messages instead of the default
|
||||
of all channel connections.
|
||||
|
||||
Called with the following array:
|
||||
[
|
||||
'recipients' => [],
|
||||
'item' => $item,
|
||||
'private_envelope' => $private_envelope,
|
||||
'include_groups' => $include_groups
|
||||
];
|
||||
|
||||
[code]
|
||||
if(array_key_exists('public_policy',$item) && $item['public_policy'] !== 'self') {
|
||||
|
||||
$hookinfo = [
|
||||
'recipients' => [],
|
||||
'item' => $item,
|
||||
'private_envelope' => $private_envelope,
|
||||
'include_groups' => $include_groups
|
||||
];
|
||||
|
||||
call_hooks('collect_public_recipients',$hookinfo);
|
||||
|
||||
if ($hookinfo['recipients']) {
|
||||
$r = $hookinfo['recipients'];
|
||||
} else {
|
||||
$r = q("select abook_xchan, xchan_network from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and abook_self = 0 and abook_pending = 0 and abook_archived = 0 ",
|
||||
intval($item['uid'])
|
||||
);
|
||||
}
|
||||
|
||||
if($r) {
|
||||
|
||||
. . .
|
||||
|
||||
[/code]
|
||||
|
||||
see: include/item.php
|
5
doc/hook/daemon_master_release.bb
Normal file
5
doc/hook/daemon_master_release.bb
Normal file
@ -0,0 +1,5 @@
|
||||
[h2]daemon_master_release[/h2]
|
||||
|
||||
Permit filtering or alternate methods of processing of background processes when [code] \Zotlabs\Daemon\Master::Release() [/code] is called.
|
||||
|
||||
Default behavior is for a new PHP process to fire immediately upon a call to Master::Summon(). This hook permits pre-emption and the ability to provide queuing or other alternatives to this procedure.
|
12
doc/hook/privacygroup_extras.bb
Normal file
12
doc/hook/privacygroup_extras.bb
Normal file
@ -0,0 +1,12 @@
|
||||
[h2]privacygroup_extras[/h2]
|
||||
|
||||
Add items to the Privacy Group edit form
|
||||
|
||||
[code]
|
||||
$hookinfo = [ 'pgrp_extras' => '', 'group'=>$argv(1) ];
|
||||
call_hooks ('privacygroup_extras',$hookinfo);
|
||||
$pgrp_extras = $hookinfo['pgrp_extras'];
|
||||
[/code]
|
||||
|
||||
see: Zotlabs/Module/Group.php
|
||||
see: view/tpl/privacy_groups.tpl
|
11
doc/hook/privacygroup_extras_drop.bb
Normal file
11
doc/hook/privacygroup_extras_drop.bb
Normal file
@ -0,0 +1,11 @@
|
||||
[h2]privacygroup_extras_drop[/h2]
|
||||
|
||||
Called after privacy group is dropped
|
||||
|
||||
[code]
|
||||
$hookinfo = [ 'pgrp_extras' => '', 'group'=>$argv(2) ];
|
||||
call_hooks ('privacygroup_extras_drop',$hookinfo);
|
||||
[/code]
|
||||
|
||||
see: Zotlabs/Module/Group.php
|
||||
see: view/tpl/privacy_groups.tpl
|
11
doc/hook/privacygroup_extras_post.bb
Normal file
11
doc/hook/privacygroup_extras_post.bb
Normal file
@ -0,0 +1,11 @@
|
||||
[h2]privacygroup_extras_post[/h2]
|
||||
|
||||
Called as privacy group edit form is edited.
|
||||
|
||||
[code]
|
||||
$hookinfo = [ 'pgrp_extras' => '', 'group'=>$group['id'] ];
|
||||
call_hooks ('privacygroup_extras_post',$hookinfo);
|
||||
[/code]
|
||||
|
||||
see: Zotlabs/Module/Group.php
|
||||
see: view/tpl/privacy_groups.tpl
|
@ -136,6 +136,9 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
|
||||
[zrl=[baseurl]/help/hook/check_siteallowed]check_siteallowed[/zrl]
|
||||
Used to over-ride or bypass the site black/white block lists
|
||||
|
||||
[zrl=[baseurl]/help/hook/collect_public_recipients]collect_public_recipients[/zrl]
|
||||
Used to establish a list of recipients to send a public message to.
|
||||
|
||||
[zrl=[baseurl]/help/hook/comment_buttons]comment_buttons[/zrl]
|
||||
Called when rendering the edit buttons for comments
|
||||
|
||||
@ -190,6 +193,9 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
|
||||
[zrl=[baseurl]/help/hook/daemon_addon]daemon_addon[/zrl]
|
||||
Called when invoking the extensible background daemon
|
||||
|
||||
[zrl=[baseurl]/help/hook/daemon_master_release]daemon_master_release[/zrl]
|
||||
Called at the start of processing \Zotlabs\Daemon\Master::Release()
|
||||
|
||||
[zrl=[baseurl]/help/hook/directory_item]directory_item[/zrl]
|
||||
Called when generating a directory listing for display
|
||||
|
||||
@ -553,6 +559,15 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
|
||||
[zrl=[baseurl]/help/hook/prepare_body_init]prepare_body_init[/zrl]
|
||||
Called before generating the HTML for a displayed conversation item
|
||||
|
||||
[zrl=[baseurl]/help/hook/privacygroup_extras]privacygroup_extras[/zrl]
|
||||
Called before generating the HTML for the Privacy Group edit options
|
||||
|
||||
[zrl=[baseurl]/help/hook/privacygroup_extras_delete]privacygroup_extras_delete[/zrl]
|
||||
Called after privacy group is dropped.
|
||||
|
||||
[zrl=[baseurl]/help/hook/privacygroup_extras_post]privacygroup_extras_post[/zrl]
|
||||
Called when privacy group edit form is submitted.
|
||||
|
||||
[zrl=[baseurl]/help/hook/proc_run]proc_run[/zrl]
|
||||
Called when invoking PHP sub processes
|
||||
|
||||
|
@ -326,22 +326,11 @@ function bb_ShareAttributes($match) {
|
||||
$auth = is_matrix_url($profile);
|
||||
}
|
||||
|
||||
// message_id is never used, do we still need it?
|
||||
$message_id = "";
|
||||
preg_match("/message_id='(.*?)'/ism", $attributes, $matches);
|
||||
if ($matches[1] != "")
|
||||
$message_id = $matches[1];
|
||||
|
||||
if(! $message_id) {
|
||||
preg_match("/guid='(.*?)'/ism", $attributes, $matches);
|
||||
if ($matches[1] != "")
|
||||
$message_id = $matches[1];
|
||||
}
|
||||
|
||||
$rnd = mt_rand();
|
||||
|
||||
$reldate = '<span class="autotime" title="' . datetime_convert('UTC', date_default_timezone_get(), $posted, 'c') . '" >' . datetime_convert('UTC', date_default_timezone_get(), $posted, 'r') . '</span>';
|
||||
|
||||
$headline = '<div class="shared_container"> <div class="shared_header">';
|
||||
$headline = '<div id="shared_container_' . $rnd . '" class="shared_container"> <div id="shared_header_' . $rnd . '" class="shared_header">';
|
||||
|
||||
if ($avatar != "")
|
||||
$headline .= '<a href="' . (($auth) ? zid($profile) : $profile) . '" ><img src="' . $avatar . '" alt="' . $author . '" height="32" width="32" /></a>';
|
||||
@ -363,7 +352,7 @@ function bb_ShareAttributes($match) {
|
||||
|
||||
$headline .= '<span>' . $fmt . '</span></div>';
|
||||
|
||||
$text = $headline . '<div class="reshared-content">' . trim($match[2]) . '</div></div>';
|
||||
$text = $headline . '<div id="reshared-content-' . $rnd . '" class="reshared-content">' . trim($match[2]) . '</div></div>';
|
||||
|
||||
return $text;
|
||||
}
|
||||
@ -1021,7 +1010,7 @@ function bbcode($Text, $options = []) {
|
||||
}
|
||||
// Check for colored text
|
||||
if (strpos($Text,'[/hl]') !== false) {
|
||||
$Text = preg_replace("(\[hl\](.*?)\[\/hl\])ism", "<span style=\"background-color: yellow;\">$1</span>", $Text);
|
||||
$Text = preg_replace("(\[hl\](.*?)\[\/hl\])ism", "<span class=\"default-highlight\">$1</span>", $Text);
|
||||
$Text = preg_replace("(\[hl=(.*?)\](.*?)\[\/hl\])ism", "<span style=\"background-color: $1;\">$2</span>", $Text);
|
||||
}
|
||||
|
||||
|
@ -95,9 +95,24 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) {
|
||||
//$sys = get_sys_channel();
|
||||
|
||||
if(array_key_exists('public_policy',$item) && $item['public_policy'] !== 'self') {
|
||||
$r = q("select abook_xchan, xchan_network from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and abook_self = 0 and abook_pending = 0 and abook_archived = 0 ",
|
||||
|
||||
$hookinfo = [
|
||||
'recipients' => [],
|
||||
'item' => $item,
|
||||
'private_envelope' => $private_envelope,
|
||||
'include_groups' => $include_groups
|
||||
];
|
||||
|
||||
call_hooks('collect_public_recipients',$hookinfo);
|
||||
|
||||
if ($hookinfo['recipients']) {
|
||||
$r = $hookinfo['recipients'];
|
||||
} else {
|
||||
$r = q("select abook_xchan, xchan_network from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and abook_self = 0 and abook_pending = 0 and abook_archived = 0 ",
|
||||
intval($item['uid'])
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
if($r) {
|
||||
|
||||
// filter out restrictive public_policy settings from remote networks
|
||||
|
@ -91,8 +91,6 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) {
|
||||
// remove duplicate adjacent code tags
|
||||
$s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s);
|
||||
|
||||
// Don't show link to full picture (until it is fixed)
|
||||
$s = scale_external_images($s, false);
|
||||
|
||||
/**
|
||||
* @hooks markdown_to_bb
|
||||
|
@ -120,13 +120,8 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
|
||||
@curl_setopt($ch, CURLOPT_USERPWD, $opts['http_auth']);
|
||||
}
|
||||
|
||||
if(array_key_exists('http_version',$opts)) {
|
||||
if(array_key_exists('http_version',$opts))
|
||||
@curl_setopt($ch,CURLOPT_HTTP_VERSION,$opts['http_version']);
|
||||
}
|
||||
else {
|
||||
@curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
|
||||
}
|
||||
|
||||
|
||||
if(x($opts,'cookiejar'))
|
||||
@curl_setopt($ch, CURLOPT_COOKIEJAR, $opts['cookiejar']);
|
||||
@ -165,7 +160,7 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
|
||||
// Pull out multiple headers, e.g. proxy and continuation headers
|
||||
// allow for HTTP/2.x without fixing code
|
||||
|
||||
while(preg_match('/^HTTP\/[1-3].+? [1-5][0-9][0-9]/',$base)) {
|
||||
while(preg_match('/^HTTP\/[1-3](\.\d)? [1-5][0-9][0-9]/',$base)) {
|
||||
$chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
|
||||
$header .= $chunk;
|
||||
$base = substr($base,strlen($chunk));
|
||||
@ -298,12 +293,8 @@ function z_post_url($url, $params, $redirects = 0, $opts = array()) {
|
||||
@curl_setopt($ch, CURLOPT_USERPWD, $opts['http_auth']);
|
||||
}
|
||||
|
||||
if(array_key_exists('http_version',$opts)) {
|
||||
if(array_key_exists('http_version',$opts))
|
||||
@curl_setopt($ch,CURLOPT_HTTP_VERSION,$opts['http_version']);
|
||||
}
|
||||
else {
|
||||
@curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
|
||||
}
|
||||
|
||||
if(x($opts,'cookiejar'))
|
||||
@curl_setopt($ch, CURLOPT_COOKIEJAR, $opts['cookiejar']);
|
||||
@ -338,7 +329,7 @@ function z_post_url($url, $params, $redirects = 0, $opts = array()) {
|
||||
// Pull out multiple headers, e.g. proxy and continuation headers
|
||||
// allow for HTTP/2.x without fixing code
|
||||
|
||||
while(preg_match('/^HTTP\/[1-3].+? [1-5][0-9][0-9]/',$base)) {
|
||||
while(preg_match('/^HTTP\/[1-3](\.\d)? [1-5][0-9][0-9]/',$base)) {
|
||||
$chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
|
||||
$header .= $chunk;
|
||||
$base = substr($base,strlen($chunk));
|
||||
@ -709,99 +700,6 @@ function sxml2array ( $xmlObject, $out = array () )
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Scales an external image.
|
||||
*
|
||||
* @param string $s
|
||||
* @param string $include_link default true
|
||||
* @param string $scale_replace default false
|
||||
* @return string
|
||||
*/
|
||||
function scale_external_images($s, $include_link = true, $scale_replace = false) {
|
||||
|
||||
// Picture addresses can contain special characters
|
||||
$s = htmlspecialchars_decode($s, ENT_COMPAT);
|
||||
|
||||
$matches = null;
|
||||
$c = preg_match_all('/\[([zi])mg(.*?)\](.*?)\[\/[zi]mg\]/ism', $s, $matches, PREG_SET_ORDER);
|
||||
if($c) {
|
||||
require_once('include/photo/photo_driver.php');
|
||||
|
||||
foreach($matches as $mtch) {
|
||||
logger('data: ' . $mtch[2] . ' ' . $mtch[3]);
|
||||
|
||||
if(substr($mtch[2],0,1) == '=') {
|
||||
$owidth = intval(substr($mtch[2],1));
|
||||
if($owidth > 0 && $owidth < 1024)
|
||||
continue;
|
||||
}
|
||||
|
||||
$hostname = str_replace('www.','',substr(z_root(),strpos(z_root(),'://')+3));
|
||||
if(stristr($mtch[3],$hostname))
|
||||
continue;
|
||||
|
||||
// $scale_replace, if passed, is an array of two elements. The
|
||||
// first is the name of the full-size image. The second is the
|
||||
// name of a remote, scaled-down version of the full size image.
|
||||
// This allows Friendica to display the smaller remote image if
|
||||
// one exists, while still linking to the full-size image
|
||||
if($scale_replace)
|
||||
$scaled = str_replace($scale_replace[0], $scale_replace[1], $mtch[3]);
|
||||
else
|
||||
$scaled = $mtch[3];
|
||||
|
||||
if(! strpbrk(substr($scaled, 0, 1), 'zhfmt'))
|
||||
continue;
|
||||
|
||||
$i = z_fetch_url($scaled, true);
|
||||
|
||||
$cache = get_config('system', 'itemcache');
|
||||
if (($cache != '') and is_dir($cache)) {
|
||||
$cachefile = $cache . '/' . hash('md5', $scaled);
|
||||
file_put_contents($cachefile, $i['body']);
|
||||
}
|
||||
|
||||
// guess mimetype from headers or filename
|
||||
|
||||
$type = guess_image_type($mtch[3], $i['header']);
|
||||
if(strpos($type, 'image') === false)
|
||||
continue;
|
||||
|
||||
if($i['success']) {
|
||||
$ph = photo_factory($i['body'], $type);
|
||||
|
||||
if(! is_object($ph))
|
||||
continue;
|
||||
|
||||
if($ph->is_valid()) {
|
||||
$orig_width = $ph->getWidth();
|
||||
$orig_height = $ph->getHeight();
|
||||
|
||||
if($orig_width > 1024 || $orig_height > 1024) {
|
||||
$tag = (($match[1] == 'z') ? 'zmg' : 'img');
|
||||
$linktag = (($match[1] == 'z') ? 'zrl' : 'url');
|
||||
$ph->scaleImage(1024);
|
||||
$new_width = $ph->getWidth();
|
||||
$new_height = $ph->getHeight();
|
||||
logger('data: ' . $orig_width . '->' . $new_width . 'w ' . $orig_height . '->' . $new_height . 'h' . ' match: ' . $mtch[0], LOGGER_DEBUG);
|
||||
$s = str_replace($mtch[0],'[' . $tag . '=' . $new_width . 'x' . $new_height. ']' . $scaled . '[/' . $tag . ']'
|
||||
. "\n" . (($include_link)
|
||||
? '[' . $linktag . '=' . $mtch[3] . ']' . t('view full size') . '[/' . $linktag . ']' . "\n"
|
||||
: ''),$s);
|
||||
logger('new string: ' . $s, LOGGER_DEBUG);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// replace the special char encoding
|
||||
|
||||
$s = htmlspecialchars($s, ENT_COMPAT, 'UTF-8');
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief xml2array() will convert the given XML text to an array in the XML structure.
|
||||
*
|
||||
|
@ -482,7 +482,6 @@ function guess_image_type($filename, $headers = '') {
|
||||
// logger('Photo: guess_image_type: '.$filename . ($headers?' from curl headers':''), LOGGER_DEBUG);
|
||||
$type = null;
|
||||
if ($headers) {
|
||||
|
||||
$hdrs=array();
|
||||
$h = explode("\n",$headers);
|
||||
foreach ($h as $l) {
|
||||
@ -490,11 +489,16 @@ function guess_image_type($filename, $headers = '') {
|
||||
$hdrs[strtolower($k)] = $v;
|
||||
}
|
||||
logger('Curl headers: '.var_export($hdrs, true), LOGGER_DEBUG);
|
||||
if (array_key_exists('content-type', $hdrs))
|
||||
$type = $hdrs['content-type'];
|
||||
}
|
||||
if (is_null($type)){
|
||||
if (array_key_exists('content-type', $hdrs)) {
|
||||
$ph = photo_factory('');
|
||||
$types = $ph->supportedTypes();
|
||||
|
||||
if(array_key_exists($hdrs['content-type'], $types))
|
||||
$type = $hdrs['content-type'];
|
||||
}
|
||||
}
|
||||
|
||||
if (is_null($type)){
|
||||
$ignore_imagick = get_config('system', 'ignore_imagick');
|
||||
// Guessing from extension? Isn't that... dangerous?
|
||||
if(class_exists('Imagick') && file_exists($filename) && is_readable($filename) && !$ignore_imagick) {
|
||||
@ -638,7 +642,6 @@ function import_xchan_photo($photo,$xchan,$thing = false,$force = false) {
|
||||
$img_str = $result['body'];
|
||||
$type = guess_image_type($photo, $result['header']);
|
||||
$modified = gmdate('Y-m-d H:i:s', (preg_match('/last-modified: (.+) \S+/i', $result['header'], $o) ? strtotime($o[1] . 'Z') : time()));
|
||||
|
||||
if(is_null($type))
|
||||
$photo_failure = true;
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ function update_queue_item($id, $add_priority = 0) {
|
||||
return;
|
||||
|
||||
|
||||
$y = q("select min(outq_created) as earliest from outq where outq_posturl = '%s'",
|
||||
$y = q("select outq_created as earliest from outq where outq_posturl = '%s' order by earliest limit 1",
|
||||
dbesc($x[0]['outq_posturl'])
|
||||
);
|
||||
|
||||
@ -311,4 +311,4 @@ function queue_deliver($outq, $immediate = false) {
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1691,7 +1691,14 @@ function prepare_body(&$item,$attach = false,$opts = false) {
|
||||
if(local_channel() == $item['uid'])
|
||||
$filer = format_filer($item);
|
||||
|
||||
$s = sslify($s);
|
||||
if($s)
|
||||
$s = sslify($s);
|
||||
|
||||
if($photo)
|
||||
$photo = sslify($photo);
|
||||
|
||||
if($event)
|
||||
$event = sslify($event);
|
||||
|
||||
$prep_arr = array(
|
||||
'item' => $item,
|
||||
@ -3305,8 +3312,6 @@ function cleanup_bbcode($body) {
|
||||
|
||||
$body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body);
|
||||
|
||||
$body = scale_external_images($body, false);
|
||||
|
||||
return $body;
|
||||
}
|
||||
|
||||
|
@ -1100,6 +1100,8 @@ function zot_process_response($hub, $arr, $outq) {
|
||||
return;
|
||||
}
|
||||
|
||||
$dreport = true;
|
||||
|
||||
$x = json_decode($arr['body'], true);
|
||||
|
||||
if(! $x) {
|
||||
@ -1116,31 +1118,44 @@ function zot_process_response($hub, $arr, $outq) {
|
||||
}
|
||||
if(! (is_array($x['delivery_report']) && count($x['delivery_report']))) {
|
||||
logger('encrypted delivery report could not be decrypted');
|
||||
return;
|
||||
$dreport = false;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($x['delivery_report'] as $xx) {
|
||||
call_hooks('dreport_process',$xx);
|
||||
if(is_array($xx) && array_key_exists('message_id',$xx) && DReport::is_storable($xx)) {
|
||||
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s','%s' ) ",
|
||||
dbesc($xx['message_id']),
|
||||
dbesc($xx['location']),
|
||||
dbesc($xx['recipient']),
|
||||
dbesc($xx['name']),
|
||||
dbesc($xx['status']),
|
||||
dbesc(datetime_convert('UTC','UTC',$xx['date'])),
|
||||
dbesc($xx['sender'])
|
||||
);
|
||||
if($dreport) {
|
||||
foreach($x['delivery_report'] as $xx) {
|
||||
call_hooks('dreport_process',$xx);
|
||||
if(is_array($xx) && array_key_exists('message_id',$xx) && DReport::is_storable($xx)) {
|
||||
|
||||
// legacy zot recipients add a space and their name to the xchan. split those if true.
|
||||
$legacy_recipient = strpos($xx['recipient'], ' ');
|
||||
if($legacy_recipient !== false) {
|
||||
$legacy_recipient_parts = explode(' ', $xx['recipient'], 2);
|
||||
$xx['recipient'] = $legacy_recipient_parts[0];
|
||||
$xx['name'] = $legacy_recipient_parts[1];
|
||||
}
|
||||
|
||||
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s','%s' ) ",
|
||||
dbesc($xx['message_id']),
|
||||
dbesc($xx['location']),
|
||||
dbesc($xx['recipient']),
|
||||
dbesc($xx['name']),
|
||||
dbesc($xx['status']),
|
||||
dbesc(datetime_convert('UTC','UTC',$xx['date'])),
|
||||
dbesc($xx['sender'])
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// we have a more descriptive delivery report, so discard the per hub 'queued' report.
|
||||
|
||||
q("delete from dreport where dreport_queue = '%s' ",
|
||||
dbesc($outq['outq_hash'])
|
||||
);
|
||||
if($dreport) {
|
||||
// we have a more descriptive delivery report, so discard the per hub 'queued' report.
|
||||
q("delete from dreport where dreport_queue = '%s' ",
|
||||
dbesc($outq['outq_hash'])
|
||||
);
|
||||
}
|
||||
|
||||
// update the timestamp for this site
|
||||
|
||||
@ -4924,12 +4939,13 @@ function zot_reply_pickup($data) {
|
||||
|
||||
/*
|
||||
* Everything is good if we made it here, so find all messages that are going to this location
|
||||
* and send them all.
|
||||
* and send them all - or a reasonable number if there are a lot so we don't overflow memory.
|
||||
*/
|
||||
|
||||
$r = q("select * from outq where outq_posturl = '%s'",
|
||||
$r = q("select * from outq where outq_posturl = '%s' limit 100",
|
||||
dbesc($data['callback'])
|
||||
);
|
||||
|
||||
if($r) {
|
||||
logger('mod_zot: successful pickup message received from ' . $data['callback'] . ' ' . count($r) . ' message(s) picked up', LOGGER_DEBUG);
|
||||
|
||||
@ -4955,6 +4971,19 @@ function zot_reply_pickup($data) {
|
||||
}
|
||||
}
|
||||
|
||||
// It's possible that we have more than 100 messages waiting to be sent.
|
||||
|
||||
// See if there are any more messages in the queue.
|
||||
$x = q("select * from outq where outq_posturl = '%s' order by outq_created limit 1",
|
||||
dbesc($data['callback'])
|
||||
);
|
||||
|
||||
// If so, kick off a new delivery notification for the next batch
|
||||
if ($x) {
|
||||
logger("Send additional pickup request.", LOGGER_DEBUG);
|
||||
queue_deliver($x[0],true);
|
||||
}
|
||||
|
||||
// this is a bit of a hack because we don't have the hubloc_url here, only the callback url.
|
||||
// worst case is we'll end up using aes256cbc if they've got a different post endpoint
|
||||
|
||||
@ -4966,6 +4995,8 @@ function zot_reply_pickup($data) {
|
||||
$encrypted = crypto_encapsulate(json_encode($ret),$sitekey,$algorithm);
|
||||
|
||||
json_return_and_die($encrypted);
|
||||
// @FIXME: There is a possibility that the transmission will get interrupted
|
||||
// and fail - in which case this packet of messages will be lost.
|
||||
/* pickup: end */
|
||||
}
|
||||
|
||||
|
15
util/addons
15
util/addons
@ -10,6 +10,7 @@ echo <<< EOT
|
||||
util/addons list all # list all addons (*)= installed, (!)= disabled due to version compatibility
|
||||
util/addons install foo # install addon named 'foo'
|
||||
util/addons uninstall foo # uninstall addon named 'foo'
|
||||
util/addons reinstall # reinstall all plugins
|
||||
|
||||
EOT;
|
||||
}
|
||||
@ -68,6 +69,20 @@ if($argc == 2 && $argv[1] === 'list') {
|
||||
killme();
|
||||
}
|
||||
|
||||
if($argc == 2 && $argv[1] === 'reinstall') {
|
||||
require_once("include/plugin.php");
|
||||
if($plugins) {
|
||||
foreach($plugins as $p) {
|
||||
if($p[1]) {
|
||||
echo "Reinstall: ". $p[0] . "\n";
|
||||
uninstall_plugin($p[0]);
|
||||
install_plugin($p[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
killme();
|
||||
}
|
||||
|
||||
if($argc == 3 && $argv[1] === 'list' && $argv[2] === 'all') {
|
||||
|
||||
if($plugins) {
|
||||
|
@ -8,7 +8,7 @@ To see the files changed for a given bug, go to https://github.com/bshaffer/oaut
|
||||
To get the diff between two versions, go to https://github.com/bshaffer/oauth2-server-php/compare/v1.0...v1.1
|
||||
To get the diff for a specific change, go to https://github.com/bshaffer/oauth2-server-php/commit/XXX where XXX is the change hash
|
||||
|
||||
* 1.10.0 (2017-12-14)
|
||||
* 1.10.0 (2017-11-15)
|
||||
|
||||
PR: https://github.com/bshaffer/oauth2-server-php/pull/889
|
||||
|
||||
@ -26,7 +26,7 @@ To get the diff for a specific change, go to https://github.com/bshaffer/oauth2-
|
||||
* #794 - [docs] Fix typo in composer.json
|
||||
* #885 - [testing] Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase
|
||||
|
||||
* 1.9.0 (2016-01-06)
|
||||
* 1.9.0 (2017-01-06)
|
||||
|
||||
PR: https://github.com/bshaffer/oauth2-server-php/pull/788
|
||||
|
||||
|
2
vendor/bshaffer/oauth2-server-php/README.md
vendored
2
vendor/bshaffer/oauth2-server-php/README.md
vendored
@ -1,7 +1,7 @@
|
||||
oauth2-server-php
|
||||
=================
|
||||
|
||||
[](https://travis-ci.org/bshaffer/oauth2-server-php)
|
||||
[](https://travis-ci.org/bshaffer/oauth2-server-php)
|
||||
|
||||
[](https://packagist.org/packages/bshaffer/oauth2-server-php)
|
||||
|
||||
|
@ -64,7 +64,12 @@ class Request implements RequestInterface
|
||||
$this->files = $files;
|
||||
$this->server = $server;
|
||||
$this->content = $content;
|
||||
$this->headers = is_null($headers) ? $this->getHeadersFromServer($this->server) : $headers;
|
||||
|
||||
if ($headers === null) {
|
||||
$headers = array();
|
||||
}
|
||||
|
||||
$this->headers = $headers + $this->getHeadersFromServer($this->server);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -366,7 +366,7 @@ class Response implements ResponseInterface
|
||||
if (count($this->parameters) > 0) {
|
||||
// add parameters to URL redirection
|
||||
$parts = parse_url($url);
|
||||
$sep = isset($parts['query']) && count($parts['query']) > 0 ? '&' : '?';
|
||||
$sep = isset($parts['query']) && !empty($parts['query']) ? '&' : '?';
|
||||
$url .= $sep . http_build_query($this->parameters);
|
||||
}
|
||||
|
||||
|
@ -128,7 +128,7 @@ class JwtAccessToken extends AccessToken
|
||||
$expires = time() + $this->config['access_lifetime'];
|
||||
$id = $this->generateAccessToken();
|
||||
|
||||
return array(
|
||||
$payload = array(
|
||||
'id' => $id, // for BC (see #591)
|
||||
'jti' => $id,
|
||||
'iss' => $this->config['issuer'],
|
||||
@ -139,5 +139,21 @@ class JwtAccessToken extends AccessToken
|
||||
'token_type' => $this->config['token_type'],
|
||||
'scope' => $scope
|
||||
);
|
||||
|
||||
if (isset($this->config['jwt_extra_payload_callable'])) {
|
||||
if (!is_callable($this->config['jwt_extra_payload_callable'])) {
|
||||
throw new \InvalidArgumentException('jwt_extra_payload_callable is not callable');
|
||||
}
|
||||
|
||||
$extra = call_user_func($this->config['jwt_extra_payload_callable'], $client_id, $user_id, $scope);
|
||||
|
||||
if (!is_array($extra)) {
|
||||
throw new \InvalidArgumentException('jwt_extra_payload_callable must return array');
|
||||
}
|
||||
|
||||
$payload = array_merge($extra, $payload);
|
||||
}
|
||||
|
||||
return $payload;
|
||||
}
|
||||
}
|
||||
|
@ -88,12 +88,12 @@ class Server implements ResourceControllerInterface,
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $grantTypes = [];
|
||||
protected $grantTypes = array();
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $responseTypes = [];
|
||||
protected $responseTypes = array();
|
||||
|
||||
/**
|
||||
* @var TokenTypeInterface
|
||||
@ -161,6 +161,7 @@ class Server implements ResourceControllerInterface,
|
||||
// merge all config values. These get passed to our controller objects
|
||||
$this->config = array_merge(array(
|
||||
'use_jwt_access_tokens' => false,
|
||||
'jwt_extra_payload_callable' => null,
|
||||
'store_encrypted_token_string' => true,
|
||||
'use_openid_connect' => false,
|
||||
'id_lifetime' => 3600,
|
||||
@ -840,7 +841,7 @@ class Server implements ResourceControllerInterface,
|
||||
$refreshStorage = $this->storages['refresh_token'];
|
||||
}
|
||||
|
||||
$config = array_intersect_key($this->config, array_flip(explode(' ', 'store_encrypted_token_string issuer access_lifetime refresh_token_lifetime')));
|
||||
$config = array_intersect_key($this->config, array_flip(explode(' ', 'store_encrypted_token_string issuer access_lifetime refresh_token_lifetime jwt_extra_payload_callable')));
|
||||
|
||||
return new JwtAccessToken($this->storages['public_key'], $tokenStorage, $refreshStorage, $config);
|
||||
}
|
||||
@ -1015,4 +1016,4 @@ class Server implements ResourceControllerInterface,
|
||||
{
|
||||
return isset($this->config[$name]) ? $this->config[$name] : $default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -86,6 +86,24 @@ class RequestTest extends TestCase
|
||||
$this->assertEquals('correct', $request->query('client_id', $request->request('client_id')));
|
||||
}
|
||||
|
||||
public function testRequestHasHeadersAndServerHeaders()
|
||||
{
|
||||
$request = new Request(
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
array('CONTENT_TYPE' => 'text/xml', 'PHP_AUTH_USER' => 'client_id', 'PHP_AUTH_PW' => 'client_pass'),
|
||||
null,
|
||||
array('CONTENT_TYPE' => 'application/json')
|
||||
);
|
||||
|
||||
$this->assertSame('client_id', $request->headers('PHP_AUTH_USER'));
|
||||
$this->assertSame('client_pass', $request->headers('PHP_AUTH_PW'));
|
||||
$this->assertSame('application/json', $request->headers('CONTENT_TYPE'));
|
||||
}
|
||||
|
||||
private function getTestServer($config = array())
|
||||
{
|
||||
$storage = Bootstrap::getInstance()->getMemoryStorage();
|
||||
|
@ -1,6 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace OAuth2;use PHPUnit\Framework\TestCase;
|
||||
namespace OAuth2;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ResponseTest extends TestCase
|
||||
{
|
||||
@ -14,4 +16,23 @@ class ResponseTest extends TestCase
|
||||
$string = $response->getResponseBody('xml');
|
||||
$this->assertContains('<response><foo>bar</foo><halland>oates</halland></response>', $string);
|
||||
}
|
||||
|
||||
public function testSetRedirect()
|
||||
{
|
||||
$response = new Response();
|
||||
$url = 'https://foo/bar';
|
||||
$state = 'stateparam';
|
||||
$response->setRedirect(301, $url, $state);
|
||||
$this->assertEquals(
|
||||
sprintf('%s?state=%s', $url, $state),
|
||||
$response->getHttpHeader('Location')
|
||||
);
|
||||
|
||||
$query = 'query=foo';
|
||||
$response->setRedirect(301, $url . '?' . $query, $state);
|
||||
$this->assertEquals(
|
||||
sprintf('%s?%s&state=%s', $url, $query, $state),
|
||||
$response->getHttpHeader('Location')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,23 @@ class JwtAccessTokenTest extends TestCase
|
||||
$this->assertEquals(3600, $delta);
|
||||
$this->assertEquals($decodedAccessToken['id'], $decodedAccessToken['jti']);
|
||||
}
|
||||
|
||||
public function testExtraPayloadCallback()
|
||||
{
|
||||
$jwtconfig = array('jwt_extra_payload_callable' => function() {
|
||||
return array('custom_param' => 'custom_value');
|
||||
});
|
||||
|
||||
$server = $this->getTestServer($jwtconfig);
|
||||
$jwtResponseType = $server->getResponseType('token');
|
||||
|
||||
$accessToken = $jwtResponseType->createAccessToken('Test Client ID', 123, 'test', false);
|
||||
$jwt = new Jwt;
|
||||
$decodedAccessToken = $jwt->decode($accessToken['access_token'], null, false);
|
||||
|
||||
$this->assertArrayHasKey('custom_param', $decodedAccessToken);
|
||||
$this->assertEquals('custom_value', $decodedAccessToken['custom_param']);
|
||||
}
|
||||
|
||||
public function testGrantJwtAccessToken()
|
||||
{
|
||||
@ -140,7 +157,7 @@ class JwtAccessTokenTest extends TestCase
|
||||
$this->assertNotNull($response->getParameter('access_token'));
|
||||
}
|
||||
|
||||
private function getTestServer()
|
||||
private function getTestServer($jwtconfig = array())
|
||||
{
|
||||
$memoryStorage = Bootstrap::getInstance()->getMemoryStorage();
|
||||
|
||||
@ -153,7 +170,7 @@ class JwtAccessTokenTest extends TestCase
|
||||
$server->addGrantType(new ClientCredentials($memoryStorage));
|
||||
|
||||
// make the "token" response type a JwtAccessToken
|
||||
$config = array('issuer' => 'https://api.example.com');
|
||||
$config = array_merge(array('issuer' => 'https://api.example.com'), $jwtconfig);
|
||||
$server->addResponseType(new JwtAccessToken($memoryStorage, $memoryStorage, null, $config));
|
||||
|
||||
return $server;
|
||||
|
@ -6,7 +6,8 @@ class PdoTest extends BaseTest
|
||||
{
|
||||
public function testCreatePdoStorageUsingPdoClass()
|
||||
{
|
||||
$pdo = new \PDO(sprintf('sqlite://%s', Bootstrap::getInstance()->getSqliteDir()));
|
||||
$dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());
|
||||
$pdo = new \PDO($dsn);
|
||||
$storage = new Pdo($pdo);
|
||||
|
||||
$this->assertNotNull($storage->getClientDetails('oauth_test_client'));
|
||||
@ -14,7 +15,7 @@ class PdoTest extends BaseTest
|
||||
|
||||
public function testCreatePdoStorageUsingDSN()
|
||||
{
|
||||
$dsn = sprintf('sqlite://%s', Bootstrap::getInstance()->getSqliteDir());
|
||||
$dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());
|
||||
$storage = new Pdo($dsn);
|
||||
|
||||
$this->assertNotNull($storage->getClientDetails('oauth_test_client'));
|
||||
@ -22,7 +23,8 @@ class PdoTest extends BaseTest
|
||||
|
||||
public function testCreatePdoStorageUsingConfig()
|
||||
{
|
||||
$config = array('dsn' => sprintf('sqlite://%s', Bootstrap::getInstance()->getSqliteDir()));
|
||||
$dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());
|
||||
$config = array('dsn' => $dsn);
|
||||
$storage = new Pdo($config);
|
||||
|
||||
$this->assertNotNull($storage->getClientDetails('oauth_test_client'));
|
||||
|
@ -36,7 +36,7 @@ class Bootstrap
|
||||
{
|
||||
if (!$this->sqlite) {
|
||||
$this->removeSqliteDb();
|
||||
$pdo = new \PDO(sprintf('sqlite://%s', $this->getSqliteDir()));
|
||||
$pdo = new \PDO(sprintf('sqlite:%s', $this->getSqliteDir()));
|
||||
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
|
||||
$this->createSqliteDb($pdo);
|
||||
|
||||
|
5
vendor/composer/autoload_classmap.php
vendored
5
vendor/composer/autoload_classmap.php
vendored
@ -380,9 +380,6 @@ return array(
|
||||
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
|
||||
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
|
||||
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
|
||||
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
||||
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
||||
'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
|
||||
'Ramsey\\Uuid\\BinaryUtils' => $vendorDir . '/ramsey/uuid/src/BinaryUtils.php',
|
||||
'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php',
|
||||
'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php',
|
||||
@ -1343,6 +1340,8 @@ return array(
|
||||
'Zotlabs\\Update\\_1226' => $baseDir . '/Zotlabs/Update/_1226.php',
|
||||
'Zotlabs\\Update\\_1227' => $baseDir . '/Zotlabs/Update/_1227.php',
|
||||
'Zotlabs\\Update\\_1228' => $baseDir . '/Zotlabs/Update/_1228.php',
|
||||
'Zotlabs\\Update\\_1229' => $baseDir . '/Zotlabs/Update/_1229.php',
|
||||
'Zotlabs\\Update\\_1230' => $baseDir . '/Zotlabs/Update/_1230.php',
|
||||
'Zotlabs\\Web\\Controller' => $baseDir . '/Zotlabs/Web/Controller.php',
|
||||
'Zotlabs\\Web\\HTTPHeaders' => $baseDir . '/Zotlabs/Web/HTTPHeaders.php',
|
||||
'Zotlabs\\Web\\HTTPSig' => $baseDir . '/Zotlabs/Web/HTTPSig.php',
|
||||
|
5
vendor/composer/autoload_static.php
vendored
5
vendor/composer/autoload_static.php
vendored
@ -548,9 +548,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
|
||||
'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
|
||||
'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
|
||||
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
|
||||
'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
||||
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
||||
'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
|
||||
'Ramsey\\Uuid\\BinaryUtils' => __DIR__ . '/..' . '/ramsey/uuid/src/BinaryUtils.php',
|
||||
'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php',
|
||||
'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php',
|
||||
@ -1511,6 +1508,8 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
|
||||
'Zotlabs\\Update\\_1226' => __DIR__ . '/../..' . '/Zotlabs/Update/_1226.php',
|
||||
'Zotlabs\\Update\\_1227' => __DIR__ . '/../..' . '/Zotlabs/Update/_1227.php',
|
||||
'Zotlabs\\Update\\_1228' => __DIR__ . '/../..' . '/Zotlabs/Update/_1228.php',
|
||||
'Zotlabs\\Update\\_1229' => __DIR__ . '/../..' . '/Zotlabs/Update/_1229.php',
|
||||
'Zotlabs\\Update\\_1230' => __DIR__ . '/../..' . '/Zotlabs/Update/_1230.php',
|
||||
'Zotlabs\\Web\\Controller' => __DIR__ . '/../..' . '/Zotlabs/Web/Controller.php',
|
||||
'Zotlabs\\Web\\HTTPHeaders' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPHeaders.php',
|
||||
'Zotlabs\\Web\\HTTPSig' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPSig.php',
|
||||
|
24
vendor/composer/installed.json
vendored
24
vendor/composer/installed.json
vendored
@ -58,17 +58,17 @@
|
||||
},
|
||||
{
|
||||
"name": "bshaffer/oauth2-server-php",
|
||||
"version": "v1.10.0",
|
||||
"version_normalized": "1.10.0.0",
|
||||
"version": "v1.11.1",
|
||||
"version_normalized": "1.11.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/bshaffer/oauth2-server-php.git",
|
||||
"reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9"
|
||||
"reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/d158878425392fe5a0cc34f15dbaf46315ae0ed9",
|
||||
"reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9",
|
||||
"url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/5a0c8000d4763b276919e2106f54eddda6bc50fa",
|
||||
"reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -89,7 +89,7 @@
|
||||
"predis/predis": "Required to use Redis storage",
|
||||
"thobbs/phpcassa": "Required to use Cassandra storage"
|
||||
},
|
||||
"time": "2017-11-15T01:41:02+00:00",
|
||||
"time": "2018-12-04T00:29:32+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -254,17 +254,17 @@
|
||||
},
|
||||
{
|
||||
"name": "league/html-to-markdown",
|
||||
"version": "4.8.0",
|
||||
"version_normalized": "4.8.0.0",
|
||||
"version": "4.8.1",
|
||||
"version_normalized": "4.8.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/html-to-markdown.git",
|
||||
"reference": "f9a879a068c68ff47b722de63f58bec79e448f9d"
|
||||
"reference": "250d1bf45f80d15594fb6b316df777d6d4c97ad1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/f9a879a068c68ff47b722de63f58bec79e448f9d",
|
||||
"reference": "f9a879a068c68ff47b722de63f58bec79e448f9d",
|
||||
"url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/250d1bf45f80d15594fb6b316df777d6d4c97ad1",
|
||||
"reference": "250d1bf45f80d15594fb6b316df777d6d4c97ad1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -277,7 +277,7 @@
|
||||
"phpunit/phpunit": "4.*",
|
||||
"scrutinizer/ocular": "~1.1"
|
||||
},
|
||||
"time": "2018-09-18T12:18:08+00:00",
|
||||
"time": "2018-12-24T17:21:44+00:00",
|
||||
"bin": [
|
||||
"bin/html-to-markdown"
|
||||
],
|
||||
|
11
vendor/league/html-to-markdown/CHANGELOG.md
vendored
11
vendor/league/html-to-markdown/CHANGELOG.md
vendored
@ -4,6 +4,14 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip
|
||||
|
||||
## [Unreleased][unreleased]
|
||||
|
||||
## [4.8.1] - 2018-12-24
|
||||
### Added
|
||||
- Added support for PHP 7.3
|
||||
|
||||
### Fixed
|
||||
- Fixed paragraphs following tables (#165, #166)
|
||||
- Fixed incorrect list item escaping (#168, #169)
|
||||
|
||||
## [4.8.0] - 2018-09-18
|
||||
### Added
|
||||
- Added support for email auto-linking
|
||||
@ -235,7 +243,8 @@ not ideally set, so this releases fixes that. Moving forwards this should reduce
|
||||
### Added
|
||||
- Initial release
|
||||
|
||||
[unreleased]: https://github.com/thephpleague/html-to-markdown/compare/4.8.0...master
|
||||
[unreleased]: https://github.com/thephpleague/html-to-markdown/compare/4.8.1...master
|
||||
[4.8.1]: https://github.com/thephpleague/html-to-markdown/compare/4.8.0...4.8.1
|
||||
[4.8.0]: https://github.com/thephpleague/html-to-markdown/compare/4.7.0...4.8.0
|
||||
[4.7.0]: https://github.com/thephpleague/html-to-markdown/compare/4.6.2...4.7.0
|
||||
[4.6.2]: https://github.com/thephpleague/html-to-markdown/compare/4.6.1...4.6.2
|
||||
|
@ -37,7 +37,13 @@ class DefaultConverter implements ConverterInterface, ConfigurationAwareInterfac
|
||||
return $element->getValue();
|
||||
}
|
||||
|
||||
return html_entity_decode($element->getChildrenAsString());
|
||||
$markdown = html_entity_decode($element->getChildrenAsString());
|
||||
|
||||
if ($element->getTagName() === 'table') {
|
||||
$markdown .= "\n\n";
|
||||
}
|
||||
|
||||
return $markdown;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -35,7 +35,10 @@ class HardBreakConverter implements ConverterInterface, ConfigurationAwareInterf
|
||||
$next_value = $next->getValue();
|
||||
if ($next_value) {
|
||||
if (in_array(substr($next_value, 0, 2), array('- ', '* ', '+ '))) {
|
||||
$return .= '\\';
|
||||
$parent = $element->getParent();
|
||||
if ($parent && $parent->getTagName() == 'li') {
|
||||
$return .= '\\';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -216,8 +216,6 @@ function string2bb(element) {
|
||||
});
|
||||
textcomplete.register([contacts,forums,smilies,tags]);
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
})( jQuery );
|
||||
|
||||
|
@ -44,6 +44,17 @@ $(document).ready(function() {
|
||||
$(document).on('click', '.conversation-settings-link', getConversationSettings);
|
||||
$(document).on('click', '#settings_module_ajax_submit', postConversationSettings);
|
||||
|
||||
$(document).on('click focus', '.comment-edit-form textarea', function(e) {
|
||||
if(! this.autocomplete_handled) {
|
||||
/* autocomplete @nicknames */
|
||||
$(this).editor_autocomplete(baseurl+"/acl?f=&n=1");
|
||||
/* autocomplete bbcode */
|
||||
$(this).bbco_autocomplete('bbcode');
|
||||
|
||||
this.autocomplete_handled = true;
|
||||
}
|
||||
});
|
||||
|
||||
var tf = new Function('n', 's', 'var k = s.split("/")['+aStr['plural_func']+']; return (k ? k : s);');
|
||||
|
||||
jQuery.timeago.settings.strings = {
|
||||
@ -239,7 +250,11 @@ function handle_comment_form(e) {
|
||||
},10000);
|
||||
});
|
||||
|
||||
function commentSaveChanges(convId,isFinal = false) {
|
||||
function commentSaveChanges(convId, isFinal) {
|
||||
|
||||
if(typeof isFinal === 'undefined')
|
||||
isFinal = false;
|
||||
|
||||
if(auto_save_draft) {
|
||||
tmp = $('#' + emptyCommentElm).val();
|
||||
if(tmp) {
|
||||
@ -751,11 +766,6 @@ function updateConvItems(mode,data) {
|
||||
mediaPlaying = false;
|
||||
});
|
||||
|
||||
/* autocomplete @nicknames */
|
||||
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1");
|
||||
/* autocomplete bbcode */
|
||||
$(".comment-edit-form textarea").bbco_autocomplete('bbcode');
|
||||
|
||||
var bimgs = ((preloadImages) ? false : $(".wall-item-body img").not(function() { return this.complete; }));
|
||||
var bimgcount = bimgs.length;
|
||||
|
||||
|
@ -1803,3 +1803,8 @@ dl.bb-dl > dd > li {
|
||||
.hover-fx-show:hover .hover-fx-hide {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* default highlighted text if not specified by schema: */
|
||||
span.default-highlight {
|
||||
background-color: yellow;
|
||||
}
|
||||
|
@ -322,20 +322,6 @@ a, a:visited, a:link, .fakelink, .fakelink:visited, .fakelink:link {
|
||||
.text-dark {
|
||||
color: #aaa !important;
|
||||
}
|
||||
a.text-dark:focus, a.text-dark:hover {
|
||||
color: #ddd !important;
|
||||
}
|
||||
|
||||
.badge-warning {
|
||||
background-color: #ffc927;
|
||||
}
|
||||
.badge-warning a.text-dark {
|
||||
color: #333 !important;
|
||||
}
|
||||
.badge-warning a.text-dark:focus, .badge-warning a.text-dark:hover {
|
||||
color: red !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.group-selected, .fileas-selected, .categories-selected, .search-selected, a.active {
|
||||
color: #fff !important;
|
||||
@ -492,10 +478,25 @@ pre {
|
||||
background-color: #222;
|
||||
}
|
||||
|
||||
/* change color of [hl] tag: */
|
||||
div.wall-item-body span /*strong:only-of-type */{
|
||||
color: #1212b6;
|
||||
padding: 2px 3px;
|
||||
/* font-weight: 500; */
|
||||
white-space: nowrap;
|
||||
|
||||
/* category badge fix: */
|
||||
a.text-dark:focus, a.text-dark:hover {
|
||||
color: #ddd !important;
|
||||
}
|
||||
|
||||
.badge-warning {
|
||||
/* background-color: #ffc927; */
|
||||
}
|
||||
.badge-warning a.text-dark {
|
||||
color: #333 !important;
|
||||
}
|
||||
.badge-warning a.text-dark:focus, .badge-warning a.text-dark:hover {
|
||||
color: red !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* fix color for highlithed text */
|
||||
span.default-highlight {
|
||||
color: #333;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
@ -9,12 +9,12 @@
|
||||
<div class="wall-item-outside-wrapper{{if $item.is_comment}} comment{{/if}}{{if $item.previewing}} preview{{/if}}" id="wall-item-outside-wrapper-{{$item.id}}" >
|
||||
<div class="clearfix wall-item-content-wrapper{{if $item.is_comment}} comment{{/if}}" id="wall-item-content-wrapper-{{$item.id}}">
|
||||
{{if $item.photo}}
|
||||
<div class="wall-photo-item" id="wall-photo-item-{{$item.id}}">
|
||||
<div class="wall-photo-item{{if $item.is_new && !$item.title}} wall-item-head-new rounded-top{{/if}}" id="wall-photo-item-{{$item.id}}">
|
||||
{{$item.photo}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if $item.event}}
|
||||
<div class="wall-event-item" id="wall-event-item-{{$item.id}}">
|
||||
<div class="wall-event-item{{if $item.is_new && !$item.title}} wall-item-head-new rounded-top{{/if}}" id="wall-event-item-{{$item.id}}">
|
||||
{{$item.event}}
|
||||
</div>
|
||||
{{/if}}
|
||||
@ -26,7 +26,7 @@
|
||||
<hr class="m-0">
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<div class="p-2 clearfix wall-item-head{{if $item.is_new && !$item.title && !$item.event && !$item.is_comment}} wall-item-head-new rounded-top{{/if}}">
|
||||
<div class="p-2 clearfix wall-item-head{{if $item.is_new && !$item.title && !$item.event && !$item.is_comment && !$item.photo}} wall-item-head-new rounded-top{{/if}}">
|
||||
<div class="wall-item-info " id="wall-item-info-{{$item.id}}" >
|
||||
<div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$item.id}}">
|
||||
<img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-toggle="dropdown" />
|
||||
|
@ -9,12 +9,12 @@
|
||||
<div class="wall-item-outside-wrapper{{if $item.is_comment}} comment{{/if}}{{if $item.previewing}} preview{{/if}}" id="wall-item-outside-wrapper-{{$item.id}}" >
|
||||
<div class="clearfix wall-item-content-wrapper{{if $item.is_comment}} comment{{/if}}" id="wall-item-content-wrapper-{{$item.id}}">
|
||||
{{if $item.photo}}
|
||||
<div class="wall-photo-item" id="wall-photo-item-{{$item.id}}">
|
||||
<div class="wall-photo-item{{if $item.is_new && !$item.title}} wall-item-head-new rounded-top{{/if}}" id="wall-photo-item-{{$item.id}}">
|
||||
{{$item.photo}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if $item.event}}
|
||||
<div class="wall-event-item" id="wall-event-item-{{$item.id}}">
|
||||
<div class="wall-event-item{{if $item.is_new && !$item.title}} wall-item-head-new rounded-top{{/if}}" id="wall-event-item-{{$item.id}}">
|
||||
{{$item.event}}
|
||||
</div>
|
||||
{{/if}}
|
||||
@ -26,7 +26,7 @@
|
||||
<hr class="m-0">
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<div class="p-2 clearfix wall-item-head{{if $item.is_new && !$item.title && !$item.event && !$item.is_comment}} wall-item-head-new rounded-top{{/if}}">
|
||||
<div class="p-2 clearfix wall-item-head{{if $item.is_new && !$item.title && !$item.event && !$item.is_comment && !$item.photo}} wall-item-head-new rounded-top{{/if}}">
|
||||
<div class="wall-item-info" id="wall-item-info-{{$item.id}}" >
|
||||
<div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$item.id}}">
|
||||
<img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-toggle="dropdown" /></a>
|
||||
|
@ -24,7 +24,7 @@
|
||||
});
|
||||
|
||||
window.onpopstate = function(e) {
|
||||
if(e.state !== null)
|
||||
if(e.state !== null && e.state.b64mid !== bParam_mid)
|
||||
getData(e.state.b64mid, '');
|
||||
};
|
||||
});
|
||||
|
@ -8,6 +8,7 @@
|
||||
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
|
||||
{{include file="field_input.tpl" field=$gname}}
|
||||
{{include file="field_checkbox.tpl" field=$public}}
|
||||
{{$pgrp_extras}}
|
||||
<button type="submit" name="submit" class="btn btn-sm btn-primary float-right">{{$submit}}</button>
|
||||
</form>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user