Log function
implement log() function.
This commit is contained in:
		
					parent
					
						
							
								d6d593d724
							
						
					
				
			
			
				commit
				
					
						14fde5dc9b
					
				
			
		
					 122 changed files with 1280 additions and 1161 deletions
				
			
		
							
								
								
									
										26
									
								
								src/App.php
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								src/App.php
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1101,10 +1101,10 @@ class App
 | 
			
		|||
 | 
			
		||||
		$processlist = DBA::processlist();
 | 
			
		||||
		if ($processlist['list'] != '') {
 | 
			
		||||
			logger('Processcheck: Processes: ' . $processlist['amount'] . ' - Processlist: ' . $processlist['list'], LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('Processcheck: Processes: ' . $processlist['amount'] . ' - Processlist: ' . $processlist['list'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			if ($processlist['amount'] > $max_processes) {
 | 
			
		||||
				logger('Processcheck: Maximum number of processes for ' . $process . ' tasks (' . $max_processes . ') reached.', LOGGER_DEBUG);
 | 
			
		||||
				Core\Logger::log('Processcheck: Maximum number of processes for ' . $process . ' tasks (' . $max_processes . ') reached.', LOGGER_DEBUG);
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1150,7 +1150,7 @@ class App
 | 
			
		|||
		$reached = ($free < $min_memory);
 | 
			
		||||
 | 
			
		||||
		if ($reached) {
 | 
			
		||||
			logger('Minimal memory reached: ' . $free . '/' . $meminfo['MemTotal'] . ' - limit ' . $min_memory, LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('Minimal memory reached: ' . $free . '/' . $meminfo['MemTotal'] . ' - limit ' . $min_memory, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return $reached;
 | 
			
		||||
| 
						 | 
				
			
			@ -1180,7 +1180,7 @@ class App
 | 
			
		|||
		$load = Core\System::currentLoad();
 | 
			
		||||
		if ($load) {
 | 
			
		||||
			if (intval($load) > $maxsysload) {
 | 
			
		||||
				logger('system: load ' . $load . ' for ' . $process . ' tasks (' . $maxsysload . ') too high.');
 | 
			
		||||
				Core\Logger::log('system: load ' . $load . ' for ' . $process . ' tasks (' . $maxsysload . ') too high.');
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1222,7 +1222,7 @@ class App
 | 
			
		|||
			$resource = proc_open($cmdline . ' &', [], $foo, $this->getBasePath());
 | 
			
		||||
		}
 | 
			
		||||
		if (!is_resource($resource)) {
 | 
			
		||||
			logger('We got no resource for command ' . $cmdline, LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('We got no resource for command ' . $cmdline, LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		proc_close($resource);
 | 
			
		||||
| 
						 | 
				
			
			@ -1253,27 +1253,27 @@ class App
 | 
			
		|||
	public static function isDirectoryUsable($directory, $check_writable = true)
 | 
			
		||||
	{
 | 
			
		||||
		if ($directory == '') {
 | 
			
		||||
			logger('Directory is empty. This shouldn\'t happen.', LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('Directory is empty. This shouldn\'t happen.', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!file_exists($directory)) {
 | 
			
		||||
			logger('Path "' . $directory . '" does not exist for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('Path "' . $directory . '" does not exist for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (is_file($directory)) {
 | 
			
		||||
			logger('Path "' . $directory . '" is a file for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('Path "' . $directory . '" is a file for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!is_dir($directory)) {
 | 
			
		||||
			logger('Path "' . $directory . '" is not a directory for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('Path "' . $directory . '" is not a directory for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($check_writable && !is_writable($directory)) {
 | 
			
		||||
			logger('Path "' . $directory . '" is not writable for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			Core\Logger::log('Path "' . $directory . '" is not writable for user ' . self::getSystemUser(), LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1646,7 +1646,7 @@ class App
 | 
			
		|||
				} else {
 | 
			
		||||
					// Someone came with an invalid parameter, maybe as a DDoS attempt
 | 
			
		||||
					// We simply stop processing here
 | 
			
		||||
					logger("Invalid ZRL parameter " . $_GET['zrl'], LOGGER_DEBUG);
 | 
			
		||||
					Core\Logger::log("Invalid ZRL parameter " . $_GET['zrl'], LOGGER_DEBUG);
 | 
			
		||||
					Core\System::httpExit(403, ['title' => '403 Forbidden']);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1785,11 +1785,11 @@ class App
 | 
			
		|||
				}
 | 
			
		||||
 | 
			
		||||
				if (!empty($_SERVER['QUERY_STRING']) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && isset($dreamhost_error_hack)) {
 | 
			
		||||
					logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']);
 | 
			
		||||
					Core\Logger::log('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']);
 | 
			
		||||
					$this->internalRedirect($_SERVER['REQUEST_URI']);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG);
 | 
			
		||||
				Core\Logger::log('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . Core\L10n::t('Not Found'));
 | 
			
		||||
				$tpl = get_markup_template("404.tpl");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
namespace Friendica;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -136,8 +137,8 @@ abstract class BaseModule extends BaseObject
 | 
			
		|||
	{
 | 
			
		||||
		if (!self::checkFormSecurityToken($typename, $formname)) {
 | 
			
		||||
			$a = get_app();
 | 
			
		||||
			logger('checkFormSecurityToken failed: user ' . $a->user['guid'] . ' - form element ' . $typename);
 | 
			
		||||
			logger('checkFormSecurityToken failed: _REQUEST data: ' . print_r($_REQUEST, true), LOGGER_DATA);
 | 
			
		||||
			Logger::log('checkFormSecurityToken failed: user ' . $a->user['guid'] . ' - form element ' . $typename);
 | 
			
		||||
			Logger::log('checkFormSecurityToken failed: _REQUEST data: ' . print_r($_REQUEST, true), LOGGER_DATA);
 | 
			
		||||
			notice(self::getFormSecurityStandardErrorMessage());
 | 
			
		||||
			$a->internalRedirect($err_redirect);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -147,8 +148,8 @@ abstract class BaseModule extends BaseObject
 | 
			
		|||
	{
 | 
			
		||||
		if (!self::checkFormSecurityToken($typename, $formname)) {
 | 
			
		||||
			$a = get_app();
 | 
			
		||||
			logger('checkFormSecurityToken failed: user ' . $a->user['guid'] . ' - form element ' . $typename);
 | 
			
		||||
			logger('checkFormSecurityToken failed: _REQUEST data: ' . print_r($_REQUEST, true), LOGGER_DATA);
 | 
			
		||||
			Logger::log('checkFormSecurityToken failed: user ' . $a->user['guid'] . ' - form element ' . $typename);
 | 
			
		||||
			Logger::log('checkFormSecurityToken failed: _REQUEST data: ' . print_r($_REQUEST, true), LOGGER_DATA);
 | 
			
		||||
			header('HTTP/1.1 403 Forbidden');
 | 
			
		||||
			killme();
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ use Friendica\Core\Addon;
 | 
			
		|||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
| 
						 | 
				
			
			@ -379,7 +380,7 @@ class BBCode extends BaseObject
 | 
			
		|||
		$c = preg_match_all('/\[img.*?\](.*?)\[\/img\]/ism', $s, $matches, PREG_SET_ORDER);
 | 
			
		||||
		if ($c) {
 | 
			
		||||
			foreach ($matches as $mtch) {
 | 
			
		||||
				logger('scale_external_image: ' . $mtch[1]);
 | 
			
		||||
				Logger::log('scale_external_image: ' . $mtch[1]);
 | 
			
		||||
 | 
			
		||||
				$hostname = str_replace('www.', '', substr(System::baseUrl(), strpos(System::baseUrl(), '://') + 3));
 | 
			
		||||
				if (stristr($mtch[1], $hostname)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -414,7 +415,7 @@ class BBCode extends BaseObject
 | 
			
		|||
							$Image->scaleDown(640);
 | 
			
		||||
							$new_width = $Image->getWidth();
 | 
			
		||||
							$new_height = $Image->getHeight();
 | 
			
		||||
							logger('scale_external_images: ' . $orig_width . '->' . $new_width . 'w ' . $orig_height . '->' . $new_height . 'h' . ' match: ' . $mtch[0], LOGGER_DEBUG);
 | 
			
		||||
							Logger::log('scale_external_images: ' . $orig_width . '->' . $new_width . 'w ' . $orig_height . '->' . $new_height . 'h' . ' match: ' . $mtch[0], LOGGER_DEBUG);
 | 
			
		||||
							$s = str_replace(
 | 
			
		||||
								$mtch[0],
 | 
			
		||||
								'[img=' . $new_width . 'x' . $new_height. ']' . $scaled . '[/img]'
 | 
			
		||||
| 
						 | 
				
			
			@ -423,7 +424,7 @@ class BBCode extends BaseObject
 | 
			
		|||
									: ''),
 | 
			
		||||
								$s
 | 
			
		||||
							);
 | 
			
		||||
							logger('scale_external_images: new string: ' . $s, LOGGER_DEBUG);
 | 
			
		||||
							Logger::log('scale_external_images: new string: ' . $s, LOGGER_DEBUG);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -451,7 +452,7 @@ class BBCode extends BaseObject
 | 
			
		|||
		// than the maximum, then don't waste time looking for the images
 | 
			
		||||
		if ($maxlen && (strlen($body) > $maxlen)) {
 | 
			
		||||
 | 
			
		||||
			logger('the total body length exceeds the limit', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('the total body length exceeds the limit', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$orig_body = $body;
 | 
			
		||||
			$new_body = '';
 | 
			
		||||
| 
						 | 
				
			
			@ -471,7 +472,7 @@ class BBCode extends BaseObject
 | 
			
		|||
 | 
			
		||||
					if (($textlen + $img_start) > $maxlen) {
 | 
			
		||||
						if ($textlen < $maxlen) {
 | 
			
		||||
							logger('the limit happens before an embedded image', LOGGER_DEBUG);
 | 
			
		||||
							Logger::log('the limit happens before an embedded image', LOGGER_DEBUG);
 | 
			
		||||
							$new_body = $new_body . substr($orig_body, 0, $maxlen - $textlen);
 | 
			
		||||
							$textlen = $maxlen;
 | 
			
		||||
						}
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +486,7 @@ class BBCode extends BaseObject
 | 
			
		|||
 | 
			
		||||
					if (($textlen + $img_end) > $maxlen) {
 | 
			
		||||
						if ($textlen < $maxlen) {
 | 
			
		||||
							logger('the limit happens before the end of a non-embedded image', LOGGER_DEBUG);
 | 
			
		||||
							Logger::log('the limit happens before the end of a non-embedded image', LOGGER_DEBUG);
 | 
			
		||||
							$new_body = $new_body . substr($orig_body, 0, $maxlen - $textlen);
 | 
			
		||||
							$textlen = $maxlen;
 | 
			
		||||
						}
 | 
			
		||||
| 
						 | 
				
			
			@ -508,11 +509,11 @@ class BBCode extends BaseObject
 | 
			
		|||
 | 
			
		||||
			if (($textlen + strlen($orig_body)) > $maxlen) {
 | 
			
		||||
				if ($textlen < $maxlen) {
 | 
			
		||||
					logger('the limit happens after the end of the last image', LOGGER_DEBUG);
 | 
			
		||||
					Logger::log('the limit happens after the end of the last image', LOGGER_DEBUG);
 | 
			
		||||
					$new_body = $new_body . substr($orig_body, 0, $maxlen - $textlen);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				logger('the text size with embedded images extracted did not violate the limit', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('the text size with embedded images extracted did not violate the limit', LOGGER_DEBUG);
 | 
			
		||||
				$new_body = $new_body . $orig_body;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Core;
 | 
			
		|||
 | 
			
		||||
use Friendica\App;
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +76,7 @@ class Addon extends BaseObject
 | 
			
		|||
	 */
 | 
			
		||||
	public static function uninstall($addon)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Addons: uninstalling " . $addon);
 | 
			
		||||
		Logger::log("Addons: uninstalling " . $addon);
 | 
			
		||||
		DBA::delete('addon', ['name' => $addon]);
 | 
			
		||||
 | 
			
		||||
		@include_once('addon/' . $addon . '/' . $addon . '.php');
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +101,7 @@ class Addon extends BaseObject
 | 
			
		|||
		if (!file_exists('addon/' . $addon . '/' . $addon . '.php')) {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		logger("Addons: installing " . $addon);
 | 
			
		||||
		Logger::log("Addons: installing " . $addon);
 | 
			
		||||
		$t = @filemtime('addon/' . $addon . '/' . $addon . '.php');
 | 
			
		||||
		@include_once('addon/' . $addon . '/' . $addon . '.php');
 | 
			
		||||
		if (function_exists($addon . '_install')) {
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +126,7 @@ class Addon extends BaseObject
 | 
			
		|||
			}
 | 
			
		||||
			return true;
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Addons: FAILED installing " . $addon);
 | 
			
		||||
			Logger::log("Addons: FAILED installing " . $addon);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -155,7 +156,7 @@ class Addon extends BaseObject
 | 
			
		|||
						$t = @filemtime($fname);
 | 
			
		||||
						foreach ($installed as $i) {
 | 
			
		||||
							if (($i['name'] == $addon) && ($i['timestamp'] != $t)) {
 | 
			
		||||
								logger('Reloading addon: ' . $i['name']);
 | 
			
		||||
								Logger::log('Reloading addon: ' . $i['name']);
 | 
			
		||||
								@include_once($fname);
 | 
			
		||||
 | 
			
		||||
								if (function_exists($addon . '_uninstall')) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use Friendica\BaseObject;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
| 
						 | 
				
			
			@ -153,10 +154,10 @@ class Authentication extends BaseObject
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($login_initial) {
 | 
			
		||||
			logger('auth_identities: ' . print_r($a->identities, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('auth_identities: ' . print_r($a->identities, true), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
		if ($login_refresh) {
 | 
			
		||||
			logger('auth_identities refresh: ' . print_r($a->identities, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('auth_identities refresh: ' . print_r($a->identities, true), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$contact = DBA::selectFirst('contact', [], ['uid' => $_SESSION['uid'], 'self' => true]);
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +185,7 @@ class Authentication extends BaseObject
 | 
			
		|||
			 * The week ensures that sessions will expire after some inactivity.
 | 
			
		||||
			 */
 | 
			
		||||
			if (!empty($_SESSION['remember'])) {
 | 
			
		||||
				logger('Injecting cookie for remembered user ' . $a->user['nickname']);
 | 
			
		||||
				Logger::log('Injecting cookie for remembered user ' . $a->user['nickname']);
 | 
			
		||||
				self::setCookie(604800, $user_record);
 | 
			
		||||
				unset($_SESSION['remember']);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
namespace Friendica\Core\Cache;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
use Friendica\Network\HTTPException\InternalServerErrorException;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +65,7 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr
 | 
			
		|||
		if ($this->memcached->getResultCode() == Memcached::RES_SUCCESS) {
 | 
			
		||||
			return $this->filterArrayKeysByPrefix($keys, $prefix);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('Memcached \'getAllKeys\' failed with ' . $this->memcached->getResultMessage(), LOGGER_ALL);
 | 
			
		||||
			Logger::log('Memcached \'getAllKeys\' failed with ' . $this->memcached->getResultMessage(), LOGGER_ALL);
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +84,7 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr
 | 
			
		|||
		if ($this->memcached->getResultCode() === Memcached::RES_SUCCESS) {
 | 
			
		||||
			$return = $value;
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('Memcached \'get\' failed with ' . $this->memcached->getResultMessage(), LOGGER_ALL);
 | 
			
		||||
			Logger::log('Memcached \'get\' failed with ' . $this->memcached->getResultMessage(), LOGGER_ALL);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return $return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Core;
 | 
			
		|||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
 | 
			
		||||
require_once 'boot.php';
 | 
			
		||||
| 
						 | 
				
			
			@ -271,7 +272,7 @@ class L10n extends BaseObject
 | 
			
		|||
	public static function tt($singular, $plural, $count)
 | 
			
		||||
	{
 | 
			
		||||
		if (!is_numeric($count)) {
 | 
			
		||||
			logger('Non numeric count called by ' . System::callstack(20));
 | 
			
		||||
			Logger::log('Non numeric count called by ' . System::callstack(20));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!self::$lang) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ namespace Friendica\Core;
 | 
			
		|||
 * @brief Functions for preventing parallel execution of functions
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Cache\CacheDriverFactory;
 | 
			
		||||
use Friendica\Core\Cache\IMemoryCacheDriver;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +84,7 @@ class Lock
 | 
			
		|||
				}
 | 
			
		||||
				return;
 | 
			
		||||
			} catch (\Exception $exception) {
 | 
			
		||||
				logger('Using Cache driver for locking failed: ' . $exception->getMessage());
 | 
			
		||||
				Logger::log('Using Cache driver for locking failed: ' . $exception->getMessage());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,7 @@ class Logger
 | 
			
		|||
     * @param string $msg
 | 
			
		||||
     * @param int $level
 | 
			
		||||
     */
 | 
			
		||||
    public static function logger($msg, $level = LOGGER_INFO)
 | 
			
		||||
    public static function log($msg, $level = LOGGER_INFO)
 | 
			
		||||
    {
 | 
			
		||||
        $a = get_app();
 | 
			
		||||
        global $LOGGER_LEVELS;
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ class Logger
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief An alternative logger for development.
 | 
			
		||||
     * Works largely as logger() but allows developers
 | 
			
		||||
     * Works largely as log() but allows developers
 | 
			
		||||
     * to isolate particular elements they are targetting
 | 
			
		||||
     * personally without background noise
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ class Logger
 | 
			
		|||
     * @param string $msg
 | 
			
		||||
     * @param int $level
 | 
			
		||||
     */
 | 
			
		||||
    public static function dlogger($msg, $level = LOGGER_INFO)
 | 
			
		||||
    public static function devLog($msg, $level = LOGGER_INFO)
 | 
			
		||||
    {
 | 
			
		||||
        $a = get_app();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ namespace Friendica\Core;
 | 
			
		|||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Content\Text\BBCode;
 | 
			
		||||
use Friendica\Content\Text\HTML;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
| 
						 | 
				
			
			@ -358,7 +359,7 @@ class NotificationsManager extends BaseObject
 | 
			
		|||
							break;
 | 
			
		||||
						}
 | 
			
		||||
						/// @todo Check if this part here is used at all
 | 
			
		||||
						logger('Complete data: ' . json_encode($it) . ' - ' . System::callstack(20), LOGGER_DEBUG);
 | 
			
		||||
						Logger::log('Complete data: ' . json_encode($it) . ' - ' . System::callstack(20), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
						$xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
 | 
			
		||||
						$obj = XML::parseString($xmlhead . $it['object']);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ namespace Friendica\Core\Session;
 | 
			
		|||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Session;
 | 
			
		||||
use SessionHandlerInterface;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +34,7 @@ class CacheSessionHandler extends BaseObject implements SessionHandlerInterface
 | 
			
		|||
			Session::$exists = true;
 | 
			
		||||
			return $data;
 | 
			
		||||
		}
 | 
			
		||||
		logger("no data for session $session_id", LOGGER_TRACE);
 | 
			
		||||
		Logger::log("no data for session $session_id", LOGGER_TRACE);
 | 
			
		||||
		return '';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
namespace Friendica\Core\Session;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Session;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use SessionHandlerInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +35,7 @@ class DatabaseSessionHandler extends BaseObject implements SessionHandlerInterfa
 | 
			
		|||
			Session::$exists = true;
 | 
			
		||||
			return $session['data'];
 | 
			
		||||
		}
 | 
			
		||||
		logger("no data for session $session_id", LOGGER_TRACE);
 | 
			
		||||
		Logger::log("no data for session $session_id", LOGGER_TRACE);
 | 
			
		||||
 | 
			
		||||
		return '';
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Core;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Network\HTTPException\InternalServerErrorException;
 | 
			
		||||
use Friendica\Util\XML;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +101,7 @@ class System extends BaseObject
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($st) {
 | 
			
		||||
			logger('xml_status returning non_zero: ' . $st . " message=" . $message);
 | 
			
		||||
			Logger::log('xml_status returning non_zero: ' . $st . " message=" . $message);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		header("Content-type: text/xml");
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +135,7 @@ class System extends BaseObject
 | 
			
		|||
			$err = 'OK';
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('http_status_exit ' . $val);
 | 
			
		||||
		Logger::log('http_status_exit ' . $val);
 | 
			
		||||
		header($_SERVER["SERVER_PROTOCOL"] . ' ' . $val . ' ' . $err);
 | 
			
		||||
 | 
			
		||||
		if (isset($description["title"])) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Friendica\Core;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
 | 
			
		||||
require_once 'boot.php';
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +107,7 @@ class Theme
 | 
			
		|||
	// install and uninstall theme
 | 
			
		||||
	public static function uninstall($theme)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Addons: uninstalling theme " . $theme);
 | 
			
		||||
		Logger::log("Addons: uninstalling theme " . $theme);
 | 
			
		||||
 | 
			
		||||
		include_once "view/theme/$theme/theme.php";
 | 
			
		||||
		if (function_exists("{$theme}_uninstall")) {
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +124,7 @@ class Theme
 | 
			
		|||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Addons: installing theme $theme");
 | 
			
		||||
		Logger::log("Addons: installing theme $theme");
 | 
			
		||||
 | 
			
		||||
		include_once "view/theme/$theme/theme.php";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +133,7 @@ class Theme
 | 
			
		|||
			$func();
 | 
			
		||||
			return true;
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Addons: FAILED installing theme $theme");
 | 
			
		||||
			Logger::log("Addons: FAILED installing theme $theme");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Core;
 | 
			
		||||
 | 
			
		||||
use Friendica\App;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\Photo;
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +38,7 @@ class UserImport
 | 
			
		|||
	private static function checkCols($table, &$arr)
 | 
			
		||||
	{
 | 
			
		||||
		$query = sprintf("SHOW COLUMNS IN `%s`", DBA::escape($table));
 | 
			
		||||
		logger("uimport: $query", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("uimport: $query", LOGGER_DEBUG);
 | 
			
		||||
		$r = q($query);
 | 
			
		||||
		$tcols = [];
 | 
			
		||||
		// get a plain array of column names
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +69,7 @@ class UserImport
 | 
			
		|||
		$cols = implode("`,`", array_map(['Friendica\Database\DBA', 'escape'], array_keys($arr)));
 | 
			
		||||
		$vals = implode("','", array_map(['Friendica\Database\DBA', 'escape'], array_values($arr)));
 | 
			
		||||
		$query = "INSERT INTO `$table` (`$cols`) VALUES ('$vals')";
 | 
			
		||||
		logger("uimport: $query", LOGGER_TRACE);
 | 
			
		||||
		Logger::log("uimport: $query", LOGGER_TRACE);
 | 
			
		||||
 | 
			
		||||
		if (self::IMPORT_DEBUG) {
 | 
			
		||||
			return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +86,7 @@ class UserImport
 | 
			
		|||
	 */
 | 
			
		||||
	public static function importAccount(App $a, $file)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Start user import from " . $file['tmp_name']);
 | 
			
		||||
		Logger::log("Start user import from " . $file['tmp_name']);
 | 
			
		||||
		/*
 | 
			
		||||
		STEPS
 | 
			
		||||
		1. checks
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +144,7 @@ class UserImport
 | 
			
		|||
		// import user
 | 
			
		||||
		$r = self::dbImportAssoc('user', $account['user']);
 | 
			
		||||
		if ($r === false) {
 | 
			
		||||
			logger("uimport:insert user : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
			Logger::log("uimport:insert user : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
			notice(L10n::t("User creation error"));
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +162,7 @@ class UserImport
 | 
			
		|||
			$profile['uid'] = $newuid;
 | 
			
		||||
			$r = self::dbImportAssoc('profile', $profile);
 | 
			
		||||
			if ($r === false) {
 | 
			
		||||
				logger("uimport:insert profile " . $profile['profile-name'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				Logger::log("uimport:insert profile " . $profile['profile-name'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				info(L10n::t("User profile creation error"));
 | 
			
		||||
				DBA::delete('user', ['uid' => $newuid]);
 | 
			
		||||
				return;
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +200,7 @@ class UserImport
 | 
			
		|||
			$contact['uid'] = $newuid;
 | 
			
		||||
			$r = self::dbImportAssoc('contact', $contact);
 | 
			
		||||
			if ($r === false) {
 | 
			
		||||
				logger("uimport:insert contact " . $contact['nick'] . "," . $contact['network'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				Logger::log("uimport:insert contact " . $contact['nick'] . "," . $contact['network'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				$errorcount++;
 | 
			
		||||
			} else {
 | 
			
		||||
				$contact['newid'] = self::lastInsertId();
 | 
			
		||||
| 
						 | 
				
			
			@ -213,7 +214,7 @@ class UserImport
 | 
			
		|||
			$group['uid'] = $newuid;
 | 
			
		||||
			$r = self::dbImportAssoc('group', $group);
 | 
			
		||||
			if ($r === false) {
 | 
			
		||||
				logger("uimport:insert group " . $group['name'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				Logger::log("uimport:insert group " . $group['name'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
			} else {
 | 
			
		||||
				$group['newid'] = self::lastInsertId();
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +239,7 @@ class UserImport
 | 
			
		|||
			if ($import == 2) {
 | 
			
		||||
				$r = self::dbImportAssoc('group_member', $group_member);
 | 
			
		||||
				if ($r === false) {
 | 
			
		||||
					logger("uimport:insert group member " . $group_member['id'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
					Logger::log("uimport:insert group member " . $group_member['id'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -256,7 +257,7 @@ class UserImport
 | 
			
		|||
			);
 | 
			
		||||
 | 
			
		||||
			if ($r === false) {
 | 
			
		||||
				logger("uimport:insert photo " . $photo['resource-id'] . "," . $photo['scale'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				Logger::log("uimport:insert photo " . $photo['resource-id'] . "," . $photo['scale'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -264,7 +265,7 @@ class UserImport
 | 
			
		|||
			$pconfig['uid'] = $newuid;
 | 
			
		||||
			$r = self::dbImportAssoc('pconfig', $pconfig);
 | 
			
		||||
			if ($r === false) {
 | 
			
		||||
				logger("uimport:insert pconfig " . $pconfig['id'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
				Logger::log("uimport:insert pconfig " . $pconfig['id'] . " : ERROR : " . DBA::errorMessage(), LOGGER_INFO);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Core;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\Process;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +43,7 @@ class Worker
 | 
			
		|||
 | 
			
		||||
		// At first check the maximum load. We shouldn't continue with a high load
 | 
			
		||||
		if ($a->isMaxLoadReached()) {
 | 
			
		||||
			logger('Pre check: maximum load reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Pre check: maximum load reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -58,25 +59,25 @@ class Worker
 | 
			
		|||
 | 
			
		||||
		// Count active workers and compare them with a maximum value that depends on the load
 | 
			
		||||
		if (self::tooMuchWorkers()) {
 | 
			
		||||
			logger('Pre check: Active worker limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Pre check: Active worker limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Do we have too few memory?
 | 
			
		||||
		if ($a->isMinMemoryReached()) {
 | 
			
		||||
			logger('Pre check: Memory limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Pre check: Memory limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Possibly there are too much database connections
 | 
			
		||||
		if (self::maxConnectionsReached()) {
 | 
			
		||||
			logger('Pre check: maximum connections reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Pre check: maximum connections reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Possibly there are too much database processes that block the system
 | 
			
		||||
		if ($a->isMaxProcessesReached()) {
 | 
			
		||||
			logger('Pre check: maximum processes reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Pre check: maximum processes reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +100,7 @@ class Worker
 | 
			
		|||
 | 
			
		||||
				// The work will be done
 | 
			
		||||
				if (!self::execute($entry)) {
 | 
			
		||||
					logger('Process execution failed, quitting.', LOGGER_DEBUG);
 | 
			
		||||
					Logger::log('Process execution failed, quitting.', LOGGER_DEBUG);
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -117,14 +118,14 @@ class Worker
 | 
			
		|||
				$stamp = (float)microtime(true);
 | 
			
		||||
				// Count active workers and compare them with a maximum value that depends on the load
 | 
			
		||||
				if (self::tooMuchWorkers()) {
 | 
			
		||||
					logger('Active worker limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
					Logger::log('Active worker limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
					Lock::release('worker');
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// Check free memory
 | 
			
		||||
				if ($a->isMinMemoryReached()) {
 | 
			
		||||
					logger('Memory limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
					Logger::log('Memory limit reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
					Lock::release('worker');
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +135,7 @@ class Worker
 | 
			
		|||
 | 
			
		||||
			// Quit the worker once every 5 minutes
 | 
			
		||||
			if (time() > ($starttime + 300)) {
 | 
			
		||||
				logger('Process lifetime reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Process lifetime reached, quitting.', LOGGER_DEBUG);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +144,7 @@ class Worker
 | 
			
		|||
		if (Config::get('system', 'worker_daemon_mode', false)) {
 | 
			
		||||
			self::IPCSetJobState(false);
 | 
			
		||||
		}
 | 
			
		||||
		logger("Couldn't select a workerqueue entry, quitting process " . getmypid() . ".", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Couldn't select a workerqueue entry, quitting process " . getmypid() . ".", LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -213,19 +214,19 @@ class Worker
 | 
			
		|||
 | 
			
		||||
		// Quit when in maintenance
 | 
			
		||||
		if (Config::get('system', 'maintenance', false, true)) {
 | 
			
		||||
			logger("Maintenance mode - quit process ".$mypid, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Maintenance mode - quit process ".$mypid, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Constantly check the number of parallel database processes
 | 
			
		||||
		if ($a->isMaxProcessesReached()) {
 | 
			
		||||
			logger("Max processes reached for process ".$mypid, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Max processes reached for process ".$mypid, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Constantly check the number of available database connections to let the frontend be accessible at any time
 | 
			
		||||
		if (self::maxConnectionsReached()) {
 | 
			
		||||
			logger("Max connection reached for process ".$mypid, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Max connection reached for process ".$mypid, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -270,7 +271,7 @@ class Worker
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!validate_include($include)) {
 | 
			
		||||
			logger("Include file ".$argv[0]." is not valid!");
 | 
			
		||||
			Logger::log("Include file ".$argv[0]." is not valid!");
 | 
			
		||||
			DBA::delete('workerqueue', ['id' => $queue["id"]]);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -302,7 +303,7 @@ class Worker
 | 
			
		|||
			}
 | 
			
		||||
			self::$db_duration = (microtime(true) - $stamp);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Function ".$funcname." does not exist");
 | 
			
		||||
			Logger::log("Function ".$funcname." does not exist");
 | 
			
		||||
			DBA::delete('workerqueue', ['id' => $queue["id"]]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -328,7 +329,7 @@ class Worker
 | 
			
		|||
 | 
			
		||||
		$new_process_id = System::processID("wrk");
 | 
			
		||||
 | 
			
		||||
		logger("Process ".$mypid." - Prio ".$queue["priority"]." - ID ".$queue["id"].": ".$funcname." ".$queue["parameter"]." - Process PID: ".$new_process_id);
 | 
			
		||||
		Logger::log("Process ".$mypid." - Prio ".$queue["priority"]." - ID ".$queue["id"].": ".$funcname." ".$queue["parameter"]." - Process PID: ".$new_process_id);
 | 
			
		||||
 | 
			
		||||
		$stamp = (float)microtime(true);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -378,7 +379,7 @@ class Worker
 | 
			
		|||
		 * The execution time is the productive time.
 | 
			
		||||
		 * By changing parameters like the maximum number of workers we can check the effectivness.
 | 
			
		||||
		*/
 | 
			
		||||
		logger(
 | 
			
		||||
		Logger::log(
 | 
			
		||||
			'DB: '.number_format(self::$db_duration, 2).
 | 
			
		||||
			' - Lock: '.number_format(self::$lock_duration, 2).
 | 
			
		||||
			' - Rest: '.number_format($up_duration - self::$db_duration - self::$lock_duration, 2).
 | 
			
		||||
| 
						 | 
				
			
			@ -389,16 +390,16 @@ class Worker
 | 
			
		|||
		self::$lock_duration = 0;
 | 
			
		||||
 | 
			
		||||
		if ($duration > 3600) {
 | 
			
		||||
			logger("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 1 hour (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 1 hour (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
		} elseif ($duration > 600) {
 | 
			
		||||
			logger("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 10 minutes (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 10 minutes (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
		} elseif ($duration > 300) {
 | 
			
		||||
			logger("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 5 minutes (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 5 minutes (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
		} elseif ($duration > 120) {
 | 
			
		||||
			logger("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 2 minutes (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Prio ".$queue["priority"].": ".$queue["parameter"]." - longer than 2 minutes (".round($duration/60, 3).")", LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Process ".$mypid." - Prio ".$queue["priority"]." - ID ".$queue["id"].": ".$funcname." - done in ".$duration." seconds. Process PID: ".$new_process_id);
 | 
			
		||||
		Logger::log("Process ".$mypid." - Prio ".$queue["priority"]." - ID ".$queue["id"].": ".$funcname." - done in ".$duration." seconds. Process PID: ".$new_process_id);
 | 
			
		||||
 | 
			
		||||
		// Write down the performance values into the log
 | 
			
		||||
		if (Config::get("system", "profiler")) {
 | 
			
		||||
| 
						 | 
				
			
			@ -453,7 +454,7 @@ class Worker
 | 
			
		|||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger(
 | 
			
		||||
			Logger::log(
 | 
			
		||||
				"ID ".$queue["id"].": ".$funcname.": ".sprintf(
 | 
			
		||||
					"DB: %s/%s, Cache: %s/%s, Net: %s, I/O: %s, Other: %s, Total: %s".$o,
 | 
			
		||||
					number_format($a->performance["database"] - $a->performance["database_write"], 2),
 | 
			
		||||
| 
						 | 
				
			
			@ -474,7 +475,7 @@ class Worker
 | 
			
		|||
		$cooldown = Config::get("system", "worker_cooldown", 0);
 | 
			
		||||
 | 
			
		||||
		if ($cooldown > 0) {
 | 
			
		||||
			logger("Process ".$mypid." - Prio ".$queue["priority"]." - ID ".$queue["id"].": ".$funcname." - in cooldown for ".$cooldown." seconds");
 | 
			
		||||
			Logger::log("Process ".$mypid." - Prio ".$queue["priority"]." - ID ".$queue["id"].": ".$funcname." - in cooldown for ".$cooldown." seconds");
 | 
			
		||||
			sleep($cooldown);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -518,12 +519,12 @@ class Worker
 | 
			
		|||
			$used = DBA::numRows($r);
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
 | 
			
		||||
			logger("Connection usage (user values): ".$used."/".$max, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Connection usage (user values): ".$used."/".$max, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$level = ($used / $max) * 100;
 | 
			
		||||
 | 
			
		||||
			if ($level >= $maxlevel) {
 | 
			
		||||
				logger("Maximum level (".$maxlevel."%) of user connections reached: ".$used."/".$max);
 | 
			
		||||
				Logger::log("Maximum level (".$maxlevel."%) of user connections reached: ".$used."/".$max);
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -546,14 +547,14 @@ class Worker
 | 
			
		|||
		if ($used == 0) {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		logger("Connection usage (system values): ".$used."/".$max, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Connection usage (system values): ".$used."/".$max, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$level = $used / $max * 100;
 | 
			
		||||
 | 
			
		||||
		if ($level < $maxlevel) {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		logger("Maximum level (".$level."%) of system connections reached: ".$used."/".$max);
 | 
			
		||||
		Logger::log("Maximum level (".$level."%) of system connections reached: ".$used."/".$max);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -594,7 +595,7 @@ class Worker
 | 
			
		|||
				// How long is the process already running?
 | 
			
		||||
				$duration = (time() - strtotime($entry["executed"])) / 60;
 | 
			
		||||
				if ($duration > $max_duration) {
 | 
			
		||||
					logger("Worker process ".$entry["pid"]." (".substr(json_encode($argv), 0, 50).") took more than ".$max_duration." minutes. It will be killed now.");
 | 
			
		||||
					Logger::log("Worker process ".$entry["pid"]." (".substr(json_encode($argv), 0, 50).") took more than ".$max_duration." minutes. It will be killed now.");
 | 
			
		||||
					posix_kill($entry["pid"], SIGTERM);
 | 
			
		||||
 | 
			
		||||
					// We killed the stale process.
 | 
			
		||||
| 
						 | 
				
			
			@ -614,7 +615,7 @@ class Worker
 | 
			
		|||
						['id' => $entry["id"]]
 | 
			
		||||
					);
 | 
			
		||||
				} else {
 | 
			
		||||
					logger("Worker process ".$entry["pid"]." (".substr(json_encode($argv), 0, 50).") now runs for ".round($duration)." of ".$max_duration." allowed minutes. That's okay.", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Worker process ".$entry["pid"]." (".substr(json_encode($argv), 0, 50).") now runs for ".round($duration)." of ".$max_duration." allowed minutes. That's okay.", LOGGER_DEBUG);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -697,16 +698,16 @@ class Worker
 | 
			
		|||
				$high_running = self::processWithPriorityActive($top_priority);
 | 
			
		||||
 | 
			
		||||
				if (!$high_running && ($top_priority > PRIORITY_UNDEFINED) && ($top_priority < PRIORITY_NEGLIGIBLE)) {
 | 
			
		||||
					logger("There are jobs with priority ".$top_priority." waiting but none is executed. Open a fastlane.", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("There are jobs with priority ".$top_priority." waiting but none is executed. Open a fastlane.", LOGGER_DEBUG);
 | 
			
		||||
					$queues = $active + 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger("Load: " . $load ."/" . $maxsysload . " - processes: " . $deferred . "/" . $active . "/" . $entries . $processlist . " - maximum: " . $queues . "/" . $maxqueues, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Load: " . $load ."/" . $maxsysload . " - processes: " . $deferred . "/" . $active . "/" . $entries . $processlist . " - maximum: " . $queues . "/" . $maxqueues, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			// Are there fewer workers running as possible? Then fork a new one.
 | 
			
		||||
			if (!Config::get("system", "worker_dont_fork", false) && ($queues > ($active + 1)) && ($entries > 1)) {
 | 
			
		||||
				logger("Active workers: ".$active."/".$queues." Fork a new worker.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Active workers: ".$active."/".$queues." Fork a new worker.", LOGGER_DEBUG);
 | 
			
		||||
				if (Config::get('system', 'worker_daemon_mode', false)) {
 | 
			
		||||
					self::IPCSetJobState(true);
 | 
			
		||||
				} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -779,11 +780,11 @@ class Worker
 | 
			
		|||
				++$high;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger("Highest priority: ".$highest_priority." Total processes: ".count($priorities)." Count high priority processes: ".$high, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Highest priority: ".$highest_priority." Total processes: ".count($priorities)." Count high priority processes: ".$high, LOGGER_DEBUG);
 | 
			
		||||
		$passing_slow = (($high/count($priorities)) > (2/3));
 | 
			
		||||
 | 
			
		||||
		if ($passing_slow) {
 | 
			
		||||
			logger("Passing slower processes than priority ".$highest_priority, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Passing slower processes than priority ".$highest_priority, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
		return $passing_slow;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -816,7 +817,7 @@ class Worker
 | 
			
		|||
		$slope = $queue_length / pow($lower_job_limit, $exponent);
 | 
			
		||||
		$limit = min($queue_length, ceil($slope * pow($jobs, $exponent)));
 | 
			
		||||
 | 
			
		||||
		logger('Deferred: ' . $deferred . ' - Total: ' . $jobs . ' - Maximum: ' . $queue_length . ' - jobs per queue: ' . $limit, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Deferred: ' . $deferred . ' - Total: ' . $jobs . ' - Maximum: ' . $queue_length . ' - jobs per queue: ' . $limit, LOGGER_DEBUG);
 | 
			
		||||
		$ids = [];
 | 
			
		||||
		if (self::passingSlow($highest_priority)) {
 | 
			
		||||
			// Are there waiting processes with a higher priority than the currently highest?
 | 
			
		||||
| 
						 | 
				
			
			@ -975,7 +976,7 @@ class Worker
 | 
			
		|||
 | 
			
		||||
			self::runCron();
 | 
			
		||||
 | 
			
		||||
			logger('Call worker', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Call worker', LOGGER_DEBUG);
 | 
			
		||||
			self::spawnWorker();
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1014,7 +1015,7 @@ class Worker
 | 
			
		|||
	 */
 | 
			
		||||
	private static function runCron()
 | 
			
		||||
	{
 | 
			
		||||
		logger('Add cron entries', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Add cron entries', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// Check for spooled items
 | 
			
		||||
		self::add(PRIORITY_HIGH, "SpoolPost");
 | 
			
		||||
| 
						 | 
				
			
			@ -1152,7 +1153,7 @@ class Worker
 | 
			
		|||
		$id = $queue['id'];
 | 
			
		||||
 | 
			
		||||
		if ($retrial > 14) {
 | 
			
		||||
			logger('Id ' . $id . ' had been tried 14 times. We stop now.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Id ' . $id . ' had been tried 14 times. We stop now.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1160,7 +1161,7 @@ class Worker
 | 
			
		|||
		$delay = (($retrial + 3) ** 4) + (rand(1, 30) * ($retrial + 1));
 | 
			
		||||
		$next = DateTimeFormat::utc('now + ' . $delay . ' seconds');
 | 
			
		||||
 | 
			
		||||
		logger('Defer execution ' . $retrial . ' of id ' . $id . ' to ' . $next, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Defer execution ' . $retrial . ' of id ' . $id . ' to ' . $next, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$fields = ['retrial' => $retrial + 1, 'next_try' => $next, 'executed' => DBA::NULL_DATETIME, 'pid' => 0];
 | 
			
		||||
		DBA::update('workerqueue', $fields, ['id' => $id]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Database;
 | 
			
		|||
// Please use App->getConfigVariable() instead.
 | 
			
		||||
//use Friendica\Core\Config;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
use mysqli;
 | 
			
		||||
| 
						 | 
				
			
			@ -412,7 +413,7 @@ class DBA
 | 
			
		|||
 | 
			
		||||
		if ((substr_count($sql, '?') != count($args)) && (count($args) > 0)) {
 | 
			
		||||
			// Question: Should we continue or stop the query here?
 | 
			
		||||
			logger('Parameter mismatch. Query "'.$sql.'" - Parameters '.print_r($args, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Parameter mismatch. Query "'.$sql.'" - Parameters '.print_r($args, true), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$sql = self::cleanQuery($sql);
 | 
			
		||||
| 
						 | 
				
			
			@ -552,7 +553,7 @@ class DBA
 | 
			
		|||
			$error = self::$error;
 | 
			
		||||
			$errorno = self::$errorno;
 | 
			
		||||
 | 
			
		||||
			logger('DB Error '.self::$errorno.': '.self::$error."\n".
 | 
			
		||||
			Logger::log('DB Error '.self::$errorno.': '.self::$error."\n".
 | 
			
		||||
				System::callstack(8)."\n".self::replaceParameters($sql, $args));
 | 
			
		||||
 | 
			
		||||
			// On a lost connection we try to reconnect - but only once.
 | 
			
		||||
| 
						 | 
				
			
			@ -560,14 +561,14 @@ class DBA
 | 
			
		|||
				if (self::$in_retrial || !self::reconnect()) {
 | 
			
		||||
					// It doesn't make sense to continue when the database connection was lost
 | 
			
		||||
					if (self::$in_retrial) {
 | 
			
		||||
						logger('Giving up retrial because of database error '.$errorno.': '.$error);
 | 
			
		||||
						Logger::log('Giving up retrial because of database error '.$errorno.': '.$error);
 | 
			
		||||
					} else {
 | 
			
		||||
						logger("Couldn't reconnect after database error ".$errorno.': '.$error);
 | 
			
		||||
						Logger::log("Couldn't reconnect after database error ".$errorno.': '.$error);
 | 
			
		||||
					}
 | 
			
		||||
					exit(1);
 | 
			
		||||
				} else {
 | 
			
		||||
					// We try it again
 | 
			
		||||
					logger('Reconnected after database error '.$errorno.': '.$error);
 | 
			
		||||
					Logger::log('Reconnected after database error '.$errorno.': '.$error);
 | 
			
		||||
					self::$in_retrial = true;
 | 
			
		||||
					$ret = self::p($sql, $args);
 | 
			
		||||
					self::$in_retrial = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -636,13 +637,13 @@ class DBA
 | 
			
		|||
			$error = self::$error;
 | 
			
		||||
			$errorno = self::$errorno;
 | 
			
		||||
 | 
			
		||||
			logger('DB Error '.self::$errorno.': '.self::$error."\n".
 | 
			
		||||
			Logger::log('DB Error '.self::$errorno.': '.self::$error."\n".
 | 
			
		||||
				System::callstack(8)."\n".self::replaceParameters($sql, $params));
 | 
			
		||||
 | 
			
		||||
			// On a lost connection we simply quit.
 | 
			
		||||
			// A reconnect like in self::p could be dangerous with modifications
 | 
			
		||||
			if ($errorno == 2006) {
 | 
			
		||||
				logger('Giving up because of database error '.$errorno.': '.$error);
 | 
			
		||||
				Logger::log('Giving up because of database error '.$errorno.': '.$error);
 | 
			
		||||
				exit(1);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -835,7 +836,7 @@ class DBA
 | 
			
		|||
	public static function insert($table, $param, $on_duplicate_update = false) {
 | 
			
		||||
 | 
			
		||||
		if (empty($table) || empty($param)) {
 | 
			
		||||
			logger('Table and fields have to be set');
 | 
			
		||||
			Logger::log('Table and fields have to be set');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1051,7 +1052,7 @@ class DBA
 | 
			
		|||
	public static function delete($table, array $conditions, array $options = [], $in_process = false, array &$callstack = [])
 | 
			
		||||
	{
 | 
			
		||||
		if (empty($table) || empty($conditions)) {
 | 
			
		||||
			logger('Table and conditions have to be set');
 | 
			
		||||
			Logger::log('Table and conditions have to be set');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1142,7 +1143,7 @@ class DBA
 | 
			
		|||
 | 
			
		||||
				if ((count($command['conditions']) > 1) || is_int($first_key)) {
 | 
			
		||||
					$sql = "DELETE FROM `" . $command['table'] . "`" . $condition_string;
 | 
			
		||||
					logger(self::replaceParameters($sql, $conditions), LOGGER_DATA);
 | 
			
		||||
					Logger::log(self::replaceParameters($sql, $conditions), LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
					if (!self::e($sql, $conditions)) {
 | 
			
		||||
						if ($do_transaction) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1172,7 +1173,7 @@ class DBA
 | 
			
		|||
						$sql = "DELETE FROM `" . $table . "` WHERE `" . $field . "` IN (" .
 | 
			
		||||
							substr(str_repeat("?, ", count($field_values)), 0, -2) . ");";
 | 
			
		||||
 | 
			
		||||
						logger(self::replaceParameters($sql, $field_values), LOGGER_DATA);
 | 
			
		||||
						Logger::log(self::replaceParameters($sql, $field_values), LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
						if (!self::e($sql, $field_values)) {
 | 
			
		||||
							if ($do_transaction) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1223,7 +1224,7 @@ class DBA
 | 
			
		|||
	public static function update($table, $fields, $condition, $old_fields = []) {
 | 
			
		||||
 | 
			
		||||
		if (empty($table) || empty($fields) || empty($condition)) {
 | 
			
		||||
			logger('Table, fields and condition have to be set');
 | 
			
		||||
			Logger::log('Table, fields and condition have to be set');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ use Exception;
 | 
			
		|||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Hook;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
require_once 'boot.php';
 | 
			
		||||
| 
						 | 
				
			
			@ -69,7 +70,7 @@ class DBStructure
 | 
			
		|||
 | 
			
		||||
		// No valid result?
 | 
			
		||||
		if (!DBA::isResult($adminlist)) {
 | 
			
		||||
			logger(sprintf('Cannot notify administrators about update_id=%d, error_message=%s', $update_id, $error_message), LOGGER_INFO);
 | 
			
		||||
			Logger::log(sprintf('Cannot notify administrators about update_id=%d, error_message=%s', $update_id, $error_message), LOGGER_INFO);
 | 
			
		||||
 | 
			
		||||
			// Don't continue
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +101,7 @@ class DBStructure
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		//try the logger
 | 
			
		||||
		logger("CRITICAL: Database structure update failed: ".$error_message);
 | 
			
		||||
		Logger::log("CRITICAL: Database structure update failed: ".$error_message);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +222,7 @@ class DBStructure
 | 
			
		|||
 | 
			
		||||
		$errors = '';
 | 
			
		||||
 | 
			
		||||
		logger('updating structure', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('updating structure', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// Get the current structure
 | 
			
		||||
		$database = [];
 | 
			
		||||
| 
						 | 
				
			
			@ -234,7 +235,7 @@ class DBStructure
 | 
			
		|||
			foreach ($tables AS $table) {
 | 
			
		||||
				$table = current($table);
 | 
			
		||||
 | 
			
		||||
				logger(sprintf('updating structure for table %s ...', $table), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log(sprintf('updating structure for table %s ...', $table), LOGGER_DEBUG);
 | 
			
		||||
				$database[$table] = self::tableStructure($table);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Database;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
use Friendica\Model\Item;
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +53,7 @@ class PostUpdate
 | 
			
		|||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Start", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Start", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$end_id = Config::get("system", "post_update_1194_end");
 | 
			
		||||
		if (!$end_id) {
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +64,7 @@ class PostUpdate
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("End ID: ".$end_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("End ID: ".$end_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$start_id = Config::get("system", "post_update_1194_start");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -82,14 +83,14 @@ class PostUpdate
 | 
			
		|||
			DBA::escape(Protocol::DFRN), DBA::escape(Protocol::DIASPORA), DBA::escape(Protocol::OSTATUS));
 | 
			
		||||
		if (!$r) {
 | 
			
		||||
			Config::set("system", "post_update_version", 1194);
 | 
			
		||||
			logger("Update is done", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Update is done", LOGGER_DEBUG);
 | 
			
		||||
			return true;
 | 
			
		||||
		} else {
 | 
			
		||||
			Config::set("system", "post_update_1194_start", $r[0]["id"]);
 | 
			
		||||
			$start_id = Config::get("system", "post_update_1194_start");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Start ID: ".$start_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Start ID: ".$start_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$r = q($query1.$query2.$query3."  ORDER BY `item`.`id` LIMIT 1000,1",
 | 
			
		||||
			intval($start_id), intval($end_id),
 | 
			
		||||
| 
						 | 
				
			
			@ -99,13 +100,13 @@ class PostUpdate
 | 
			
		|||
		} else {
 | 
			
		||||
			$pos_id = $end_id;
 | 
			
		||||
		}
 | 
			
		||||
		logger("Progress: Start: ".$start_id." position: ".$pos_id." end: ".$end_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Progress: Start: ".$start_id." position: ".$pos_id." end: ".$end_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		q("UPDATE `item` ".$query2." SET `item`.`global` = 1 ".$query3,
 | 
			
		||||
			intval($start_id), intval($pos_id),
 | 
			
		||||
			DBA::escape(Protocol::DFRN), DBA::escape(Protocol::DIASPORA), DBA::escape(Protocol::OSTATUS));
 | 
			
		||||
 | 
			
		||||
		logger("Done", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Done", LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +123,7 @@ class PostUpdate
 | 
			
		|||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Start", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Start", LOGGER_DEBUG);
 | 
			
		||||
		$r = q("SELECT `contact`.`id`, `contact`.`last-item`,
 | 
			
		||||
			(SELECT MAX(`changed`) FROM `item` USE INDEX (`uid_wall_changed`) WHERE `wall` AND `uid` = `user`.`uid`) AS `lastitem_date`
 | 
			
		||||
			FROM `user`
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +139,7 @@ class PostUpdate
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		Config::set("system", "post_update_version", 1206);
 | 
			
		||||
		logger("Done", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Done", LOGGER_DEBUG);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +157,7 @@ class PostUpdate
 | 
			
		|||
 | 
			
		||||
		$id = Config::get("system", "post_update_version_1279_id", 0);
 | 
			
		||||
 | 
			
		||||
		logger("Start from item " . $id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Start from item " . $id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$fields = array_merge(Item::MIXED_CONTENT_FIELDLIST, ['network', 'author-id', 'owner-id', 'tag', 'file',
 | 
			
		||||
			'author-name', 'author-avatar', 'author-link', 'owner-name', 'owner-avatar', 'owner-link', 'id',
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +171,7 @@ class PostUpdate
 | 
			
		|||
		$items = Item::select($fields, $condition, $params);
 | 
			
		||||
 | 
			
		||||
		if (DBA::errorNo() != 0) {
 | 
			
		||||
			logger('Database error ' . DBA::errorNo() . ':' . DBA::errorMessage());
 | 
			
		||||
			Logger::log('Database error ' . DBA::errorNo() . ':' . DBA::errorMessage());
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +226,7 @@ class PostUpdate
 | 
			
		|||
 | 
			
		||||
		Config::set("system", "post_update_version_1279_id", $id);
 | 
			
		||||
 | 
			
		||||
		logger("Processed rows: " . $rows . " - last processed item:  " . $id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Processed rows: " . $rows . " - last processed item:  " . $id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if ($start_id == $id) {
 | 
			
		||||
			// Set all deprecated fields to "null" if they contain an empty string
 | 
			
		||||
| 
						 | 
				
			
			@ -237,13 +238,13 @@ class PostUpdate
 | 
			
		|||
			foreach ($nullfields as $field) {
 | 
			
		||||
				$fields = [$field => null];
 | 
			
		||||
				$condition = [$field => ''];
 | 
			
		||||
				logger("Setting '" . $field . "' to null if empty.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Setting '" . $field . "' to null if empty.", LOGGER_DEBUG);
 | 
			
		||||
				// Important: This has to be a "DBA::update", not a "Item::update"
 | 
			
		||||
				DBA::update('item', $fields, $condition);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			Config::set("system", "post_update_version", 1279);
 | 
			
		||||
			logger("Done", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Done", LOGGER_DEBUG);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -306,7 +307,7 @@ class PostUpdate
 | 
			
		|||
 | 
			
		||||
		$id = Config::get("system", "post_update_version_1281_id", 0);
 | 
			
		||||
 | 
			
		||||
		logger("Start from item " . $id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Start from item " . $id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$fields = ['id', 'guid', 'uri', 'uri-id', 'parent-uri', 'parent-uri-id', 'thr-parent', 'thr-parent-id'];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -317,7 +318,7 @@ class PostUpdate
 | 
			
		|||
		$items = DBA::select('item', $fields, $condition, $params);
 | 
			
		||||
 | 
			
		||||
		if (DBA::errorNo() != 0) {
 | 
			
		||||
			logger('Database error ' . DBA::errorNo() . ':' . DBA::errorMessage());
 | 
			
		||||
			Logger::log('Database error ' . DBA::errorNo() . ':' . DBA::errorMessage());
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -358,17 +359,17 @@ class PostUpdate
 | 
			
		|||
 | 
			
		||||
		Config::set("system", "post_update_version_1281_id", $id);
 | 
			
		||||
 | 
			
		||||
		logger("Processed rows: " . $rows . " - last processed item:  " . $id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Processed rows: " . $rows . " - last processed item:  " . $id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if ($start_id == $id) {
 | 
			
		||||
			logger("Updating item-uri in item-activity", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Updating item-uri in item-activity", LOGGER_DEBUG);
 | 
			
		||||
			DBA::e("UPDATE `item-activity` INNER JOIN `item-uri` ON `item-uri`.`uri` = `item-activity`.`uri` SET `item-activity`.`uri-id` = `item-uri`.`id` WHERE `item-activity`.`uri-id` IS NULL");
 | 
			
		||||
 | 
			
		||||
			logger("Updating item-uri in item-content", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Updating item-uri in item-content", LOGGER_DEBUG);
 | 
			
		||||
			DBA::e("UPDATE `item-content` INNER JOIN `item-uri` ON `item-uri`.`uri` = `item-content`.`uri` SET `item-content`.`uri-id` = `item-uri`.`id` WHERE `item-content`.`uri-id` IS NULL");
 | 
			
		||||
 | 
			
		||||
			Config::set("system", "post_update_version", 1281);
 | 
			
		||||
			logger("Done", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Done", LOGGER_DEBUG);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@
 | 
			
		|||
namespace Friendica\Model;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Protocol\ActivityPub;
 | 
			
		||||
use Friendica\Util\Network;
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +193,7 @@ class APContact extends BaseObject
 | 
			
		|||
		// Update the gcontact table
 | 
			
		||||
		DBA::update('gcontact', $contact_fields, ['nurl' => normalise_link($url)]);
 | 
			
		||||
 | 
			
		||||
		logger('Updated profile for ' . $url, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Updated profile for ' . $url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $apcontact;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use Friendica\Content\Pager;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
| 
						 | 
				
			
			@ -586,7 +587,7 @@ class Contact extends BaseObject
 | 
			
		|||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		} elseif (!isset($contact['url'])) {
 | 
			
		||||
			logger('Empty contact: ' . json_encode($contact) . ' - ' . System::callstack(20), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty contact: ' . json_encode($contact) . ' - ' . System::callstack(20), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Contact already archived or "self" contact? => nothing to do
 | 
			
		||||
| 
						 | 
				
			
			@ -1027,7 +1028,7 @@ class Contact extends BaseObject
 | 
			
		|||
	 */
 | 
			
		||||
	public static function getIdForURL($url, $uid = 0, $no_update = false, $default = [], $in_loop = false)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Get contact data for url " . $url . " and user " . $uid . " - " . System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Get contact data for url " . $url . " and user " . $uid . " - " . System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$contact_id = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1618,7 +1619,7 @@ class Contact extends BaseObject
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (($network != '') && ($ret['network'] != $network)) {
 | 
			
		||||
			logger('Expected network ' . $network . ' does not match actual network ' . $ret['network']);
 | 
			
		||||
			Logger::log('Expected network ' . $network . ' does not match actual network ' . $ret['network']);
 | 
			
		||||
			return $result;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1770,10 +1771,10 @@ class Contact extends BaseObject
 | 
			
		|||
				}
 | 
			
		||||
			} elseif ($contact['network'] == Protocol::DIASPORA) {
 | 
			
		||||
				$ret = Diaspora::sendShare($a->user, $contact);
 | 
			
		||||
				logger('share returns: ' . $ret);
 | 
			
		||||
				Logger::log('share returns: ' . $ret);
 | 
			
		||||
			} elseif ($contact['network'] == Protocol::ACTIVITYPUB) {
 | 
			
		||||
				$ret = ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $uid);
 | 
			
		||||
				logger('Follow returns: ' . $ret);
 | 
			
		||||
				Logger::log('Follow returns: ' . $ret);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1855,7 +1856,7 @@ class Contact extends BaseObject
 | 
			
		|||
			// send email notification to owner?
 | 
			
		||||
		} else {
 | 
			
		||||
			if (DBA::exists('contact', ['nurl' => normalise_link($url), 'uid' => $importer['uid'], 'pending' => true])) {
 | 
			
		||||
				logger('ignoring duplicated connection request from pending contact ' . $url);
 | 
			
		||||
				Logger::log('ignoring duplicated connection request from pending contact ' . $url);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			// create contact record
 | 
			
		||||
| 
						 | 
				
			
			@ -1961,7 +1962,7 @@ class Contact extends BaseObject
 | 
			
		|||
		$r = q("SELECT * FROM `contact` WHERE `bd` != '' AND `bd` > '0001-01-01' AND SUBSTRING(`bd`, 1, 4) != `bdyear` ");
 | 
			
		||||
		if (DBA::isResult($r)) {
 | 
			
		||||
			foreach ($r as $rr) {
 | 
			
		||||
				logger('update_contact_birthday: ' . $rr['bd']);
 | 
			
		||||
				Logger::log('update_contact_birthday: ' . $rr['bd']);
 | 
			
		||||
 | 
			
		||||
				$nextbd = DateTimeFormat::utcNow('Y') . substr($rr['bd'], 4);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Friendica\Model;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
| 
						 | 
				
			
			@ -82,12 +83,12 @@ class Conversation
 | 
			
		|||
					unset($conversation['source']);
 | 
			
		||||
				}
 | 
			
		||||
				if (!DBA::update('conversation', $conversation, ['item-uri' => $conversation['item-uri']], $old_conv)) {
 | 
			
		||||
					logger('Conversation: update for ' . $conversation['item-uri'] . ' from ' . $old_conv['protocol'] . ' to ' . $conversation['protocol'] . ' failed',
 | 
			
		||||
					Logger::log('Conversation: update for ' . $conversation['item-uri'] . ' from ' . $old_conv['protocol'] . ' to ' . $conversation['protocol'] . ' failed',
 | 
			
		||||
						LOGGER_DEBUG);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				if (!DBA::insert('conversation', $conversation, true)) {
 | 
			
		||||
					logger('Conversation: insert for ' . $conversation['item-uri'] . ' (protocol ' . $conversation['protocol'] . ') failed',
 | 
			
		||||
					Logger::log('Conversation: insert for ' . $conversation['item-uri'] . ' (protocol ' . $conversation['protocol'] . ') failed',
 | 
			
		||||
						LOGGER_DEBUG);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use Friendica\BaseObject;
 | 
			
		|||
use Friendica\Content\Text\BBCode;
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -224,7 +225,7 @@ class Event extends BaseObject
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		DBA::delete('event', ['id' => $event_id]);
 | 
			
		||||
		logger("Deleted event ".$event_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Deleted event ".$event_id, LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ namespace Friendica\Model;
 | 
			
		|||
 | 
			
		||||
use Exception;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
| 
						 | 
				
			
			@ -256,7 +257,7 @@ class GContact
 | 
			
		|||
			intval($cid)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		// logger("countCommonFriends: $uid $cid {$r[0]['total']}");
 | 
			
		||||
		// Logger::log("countCommonFriends: $uid $cid {$r[0]['total']}");
 | 
			
		||||
		if (DBA::isResult($r)) {
 | 
			
		||||
			return $r[0]['total'];
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -588,7 +589,7 @@ class GContact
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($new_url != $url) {
 | 
			
		||||
			logger("Cleaned contact url ".$url." to ".$new_url." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Cleaned contact url ".$url." to ".$new_url." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return $new_url;
 | 
			
		||||
| 
						 | 
				
			
			@ -605,7 +606,7 @@ class GContact
 | 
			
		|||
		if (($contact["network"] == Protocol::OSTATUS) && PortableContact::alternateOStatusUrl($contact["url"])) {
 | 
			
		||||
			$data = Probe::uri($contact["url"]);
 | 
			
		||||
			if ($contact["network"] == Protocol::OSTATUS) {
 | 
			
		||||
				logger("Fix primary url from ".$contact["url"]." to ".$data["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Fix primary url from ".$contact["url"]." to ".$data["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
				$contact["url"] = $data["url"];
 | 
			
		||||
				$contact["addr"] = $data["addr"];
 | 
			
		||||
				$contact["alias"] = $data["alias"];
 | 
			
		||||
| 
						 | 
				
			
			@ -629,12 +630,12 @@ class GContact
 | 
			
		|||
		$last_contact_str = '';
 | 
			
		||||
 | 
			
		||||
		if (empty($contact["network"])) {
 | 
			
		||||
			logger("Empty network for contact url ".$contact["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Empty network for contact url ".$contact["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (in_array($contact["network"], [Protocol::PHANTOM])) {
 | 
			
		||||
			logger("Invalid network for contact url ".$contact["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Invalid network for contact url ".$contact["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -702,7 +703,7 @@ class GContact
 | 
			
		|||
		DBA::unlock();
 | 
			
		||||
 | 
			
		||||
		if ($doprobing) {
 | 
			
		||||
			logger("Last Contact: ". $last_contact_str." - Last Failure: ".$last_failure_str." - Checking: ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Last Contact: ". $last_contact_str." - Last Failure: ".$last_failure_str." - Checking: ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
			Worker::add(PRIORITY_LOW, 'GProbe', $contact["url"]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -807,19 +808,19 @@ class GContact
 | 
			
		|||
		if ((($contact["generation"] > 0) && ($contact["generation"] <= $public_contact[0]["generation"])) || ($public_contact[0]["generation"] == 0)) {
 | 
			
		||||
			foreach ($fields as $field => $data) {
 | 
			
		||||
				if ($contact[$field] != $public_contact[0][$field]) {
 | 
			
		||||
					logger("Difference for contact ".$contact["url"]." in field '".$field."'. New value: '".$contact[$field]."', old value '".$public_contact[0][$field]."'", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Difference for contact ".$contact["url"]." in field '".$field."'. New value: '".$contact[$field]."', old value '".$public_contact[0][$field]."'", LOGGER_DEBUG);
 | 
			
		||||
					$update = true;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ($contact["generation"] < $public_contact[0]["generation"]) {
 | 
			
		||||
				logger("Difference for contact ".$contact["url"]." in field 'generation'. new value: '".$contact["generation"]."', old value '".$public_contact[0]["generation"]."'", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Difference for contact ".$contact["url"]." in field 'generation'. new value: '".$contact["generation"]."', old value '".$public_contact[0]["generation"]."'", LOGGER_DEBUG);
 | 
			
		||||
				$update = true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($update) {
 | 
			
		||||
			logger("Update gcontact for ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Update gcontact for ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
			$condition = ['`nurl` = ? AND (`generation` = 0 OR `generation` >= ?)',
 | 
			
		||||
					normalise_link($contact["url"]), $contact["generation"]];
 | 
			
		||||
			$contact["updated"] = DateTimeFormat::utc($contact["updated"]);
 | 
			
		||||
| 
						 | 
				
			
			@ -843,7 +844,7 @@ class GContact
 | 
			
		|||
			// The quality of the gcontact table is mostly lower than the public contact
 | 
			
		||||
			$public_contact = DBA::selectFirst('contact', ['id'], ['nurl' => normalise_link($contact["url"]), 'uid' => 0]);
 | 
			
		||||
			if (DBA::isResult($public_contact)) {
 | 
			
		||||
				logger("Update public contact ".$public_contact["id"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Update public contact ".$public_contact["id"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				Contact::updateAvatar($contact["photo"], 0, $public_contact["id"]);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -885,7 +886,7 @@ class GContact
 | 
			
		|||
		$data = Probe::uri($url);
 | 
			
		||||
 | 
			
		||||
		if (in_array($data["network"], [Protocol::PHANTOM])) {
 | 
			
		||||
			logger("Invalid network for contact url ".$data["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Invalid network for contact url ".$data["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -916,7 +917,7 @@ class GContact
 | 
			
		|||
		);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($r)) {
 | 
			
		||||
			logger('Cannot find user with uid=' . $uid, LOGGER_INFO);
 | 
			
		||||
			Logger::log('Cannot find user with uid=' . $uid, LOGGER_INFO);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -953,7 +954,7 @@ class GContact
 | 
			
		|||
	 */
 | 
			
		||||
	public static function fetchGsUsers($server)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Fetching users from GNU Social server ".$server, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Fetching users from GNU Social server ".$server, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$url = $server."/main/statistics";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ namespace Friendica\Model;
 | 
			
		|||
use Friendica\BaseModule;
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\Security;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +326,7 @@ class Group extends BaseObject
 | 
			
		|||
				'selected' => $gid == $group['id'] ? 'true' : ''
 | 
			
		||||
			];
 | 
			
		||||
		}
 | 
			
		||||
		logger('groups: ' . print_r($display_groups, true));
 | 
			
		||||
		Logger::log('groups: ' . print_r($display_groups, true));
 | 
			
		||||
 | 
			
		||||
		if ($label == '') {
 | 
			
		||||
			$label = L10n::t('Default privacy group for new contacts');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ use Friendica\Content\Text\BBCode;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Lock;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
| 
						 | 
				
			
			@ -960,7 +961,7 @@ class Item extends BaseObject
 | 
			
		|||
			} elseif ($item['uid'] == $uid) {
 | 
			
		||||
				self::deleteById($item['id'], PRIORITY_HIGH);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger('Wrong ownership. Not deleting item ' . $item['id']);
 | 
			
		||||
				Logger::log('Wrong ownership. Not deleting item ' . $item['id']);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		DBA::close($items);
 | 
			
		||||
| 
						 | 
				
			
			@ -983,12 +984,12 @@ class Item extends BaseObject
 | 
			
		|||
			'icid', 'iaid', 'psid'];
 | 
			
		||||
		$item = self::selectFirst($fields, ['id' => $item_id]);
 | 
			
		||||
		if (!DBA::isResult($item)) {
 | 
			
		||||
			logger('Item with ID ' . $item_id . " hasn't been found.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Item with ID ' . $item_id . " hasn't been found.", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($item['deleted']) {
 | 
			
		||||
			logger('Item with ID ' . $item_id . ' has already been deleted.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Item with ID ' . $item_id . ' has already been deleted.', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1089,7 +1090,7 @@ class Item extends BaseObject
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Item with ID ' . $item_id . " has been deleted.", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Item with ID ' . $item_id . " has been deleted.", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1192,7 +1193,7 @@ class Item extends BaseObject
 | 
			
		|||
		if (!empty($contact_id)) {
 | 
			
		||||
			return $contact_id;
 | 
			
		||||
		}
 | 
			
		||||
		logger('Missing contact-id. Called by: '.System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Missing contact-id. Called by: '.System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
		/*
 | 
			
		||||
		 * First we are looking for a suitable contact that matches with the author of the post
 | 
			
		||||
		 * This is done only for comments
 | 
			
		||||
| 
						 | 
				
			
			@ -1213,7 +1214,7 @@ class Item extends BaseObject
 | 
			
		|||
				$contact_id = $self["id"];
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger("Contact-id was missing for post ".$item['guid']." from user id ".$item['uid']." - now set to ".$contact_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Contact-id was missing for post ".$item['guid']." from user id ".$item['uid']." - now set to ".$contact_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $contact_id;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1298,7 +1299,7 @@ class Item extends BaseObject
 | 
			
		|||
			$item['gravity'] = GRAVITY_COMMENT;
 | 
			
		||||
		} else {
 | 
			
		||||
			$item['gravity'] = GRAVITY_UNKNOWN;   // Should not happen
 | 
			
		||||
			logger('Unknown gravity for verb: ' . $item['verb'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Unknown gravity for verb: ' . $item['verb'], LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$uid = intval($item['uid']);
 | 
			
		||||
| 
						 | 
				
			
			@ -1315,7 +1316,7 @@ class Item extends BaseObject
 | 
			
		|||
			$expire_date = time() - ($expire_interval * 86400);
 | 
			
		||||
			$created_date = strtotime($item['created']);
 | 
			
		||||
			if ($created_date < $expire_date) {
 | 
			
		||||
				logger('item-store: item created ('.date('c', $created_date).') before expiration time ('.date('c', $expire_date).'). ignored. ' . print_r($item,true), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('item-store: item created ('.date('c', $created_date).') before expiration time ('.date('c', $expire_date).'). ignored. ' . print_r($item,true), LOGGER_DEBUG);
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1333,7 +1334,7 @@ class Item extends BaseObject
 | 
			
		|||
			if (DBA::isResult($existing)) {
 | 
			
		||||
				// We only log the entries with a different user id than 0. Otherwise we would have too many false positives
 | 
			
		||||
				if ($uid != 0) {
 | 
			
		||||
					logger("Item with uri ".$item['uri']." already existed for user ".$uid." with id ".$existing["id"]." target network ".$existing["network"]." - new network: ".$item['network']);
 | 
			
		||||
					Logger::log("Item with uri ".$item['uri']." already existed for user ".$uid." with id ".$existing["id"]." target network ".$existing["network"]." - new network: ".$item['network']);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				return $existing["id"];
 | 
			
		||||
| 
						 | 
				
			
			@ -1384,7 +1385,7 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
		// When there is no content then we don't post it
 | 
			
		||||
		if ($item['body'].$item['title'] == '') {
 | 
			
		||||
			logger('No body, no title.');
 | 
			
		||||
			Logger::log('No body, no title.');
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1411,7 +1412,7 @@ class Item extends BaseObject
 | 
			
		|||
		$item['author-id'] = defaults($item, 'author-id', Contact::getIdForURL($item["author-link"], 0, false, $default));
 | 
			
		||||
 | 
			
		||||
		if (Contact::isBlocked($item["author-id"])) {
 | 
			
		||||
			logger('Contact '.$item["author-id"].' is blocked, item '.$item["uri"].' will not be stored');
 | 
			
		||||
			Logger::log('Contact '.$item["author-id"].' is blocked, item '.$item["uri"].' will not be stored');
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1421,22 +1422,22 @@ class Item extends BaseObject
 | 
			
		|||
		$item['owner-id'] = defaults($item, 'owner-id', Contact::getIdForURL($item["owner-link"], 0, false, $default));
 | 
			
		||||
 | 
			
		||||
		if (Contact::isBlocked($item["owner-id"])) {
 | 
			
		||||
			logger('Contact '.$item["owner-id"].' is blocked, item '.$item["uri"].' will not be stored');
 | 
			
		||||
			Logger::log('Contact '.$item["owner-id"].' is blocked, item '.$item["uri"].' will not be stored');
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($item['network'] == Protocol::PHANTOM) {
 | 
			
		||||
			logger('Missing network. Called by: '.System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Missing network. Called by: '.System::callstack(), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$item['network'] = Protocol::DFRN;
 | 
			
		||||
			logger("Set network to " . $item["network"] . " for " . $item["uri"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Set network to " . $item["network"] . " for " . $item["uri"], LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Checking if there is already an item with the same guid
 | 
			
		||||
		logger('Checking for an item for user '.$item['uid'].' on network '.$item['network'].' with the guid '.$item['guid'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Checking for an item for user '.$item['uid'].' on network '.$item['network'].' with the guid '.$item['guid'], LOGGER_DEBUG);
 | 
			
		||||
		$condition = ['guid' => $item['guid'], 'network' => $item['network'], 'uid' => $item['uid']];
 | 
			
		||||
		if (self::exists($condition)) {
 | 
			
		||||
			logger('found item with guid '.$item['guid'].' for user '.$item['uid'].' on network '.$item['network'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('found item with guid '.$item['guid'].' for user '.$item['uid'].' on network '.$item['network'], LOGGER_DEBUG);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1517,15 +1518,15 @@ class Item extends BaseObject
 | 
			
		|||
				}
 | 
			
		||||
 | 
			
		||||
				// If its a post from myself then tag the thread as "mention"
 | 
			
		||||
				logger("Checking if parent ".$parent_id." has to be tagged as mention for user ".$item['uid'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Checking if parent ".$parent_id." has to be tagged as mention for user ".$item['uid'], LOGGER_DEBUG);
 | 
			
		||||
				$user = DBA::selectFirst('user', ['nickname'], ['uid' => $item['uid']]);
 | 
			
		||||
				if (DBA::isResult($user)) {
 | 
			
		||||
					$self = normalise_link(System::baseUrl() . '/profile/' . $user['nickname']);
 | 
			
		||||
					$self_id = Contact::getIdForURL($self, 0, true);
 | 
			
		||||
					logger("'myself' is ".$self_id." for parent ".$parent_id." checking against ".$item['author-id']." and ".$item['owner-id'], LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("'myself' is ".$self_id." for parent ".$parent_id." checking against ".$item['author-id']." and ".$item['owner-id'], LOGGER_DEBUG);
 | 
			
		||||
					if (($item['author-id'] == $self_id) || ($item['owner-id'] == $self_id)) {
 | 
			
		||||
						DBA::update('thread', ['mention' => true], ['iid' => $parent_id]);
 | 
			
		||||
						logger("tagged thread ".$parent_id." as mention for user ".$self, LOGGER_DEBUG);
 | 
			
		||||
						Logger::log("tagged thread ".$parent_id." as mention for user ".$self, LOGGER_DEBUG);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -1534,12 +1535,12 @@ class Item extends BaseObject
 | 
			
		|||
				 * we don't have or can't see the original post.
 | 
			
		||||
				 */
 | 
			
		||||
				if ($force_parent) {
 | 
			
		||||
					logger('$force_parent=true, reply converted to top-level post.');
 | 
			
		||||
					Logger::log('$force_parent=true, reply converted to top-level post.');
 | 
			
		||||
					$parent_id = 0;
 | 
			
		||||
					$item['parent-uri'] = $item['uri'];
 | 
			
		||||
					$item['gravity'] = GRAVITY_PARENT;
 | 
			
		||||
				} else {
 | 
			
		||||
					logger('item parent '.$item['parent-uri'].' for '.$item['uid'].' was not found - ignoring item');
 | 
			
		||||
					Logger::log('item parent '.$item['parent-uri'].' for '.$item['uid'].' was not found - ignoring item');
 | 
			
		||||
					return 0;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1553,7 +1554,7 @@ class Item extends BaseObject
 | 
			
		|||
		$condition = ["`uri` = ? AND `network` IN (?, ?) AND `uid` = ?",
 | 
			
		||||
			$item['uri'], $item['network'], Protocol::DFRN, $item['uid']];
 | 
			
		||||
		if (self::exists($condition)) {
 | 
			
		||||
			logger('duplicated item with the same uri found. '.print_r($item,true));
 | 
			
		||||
			Logger::log('duplicated item with the same uri found. '.print_r($item,true));
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1561,7 +1562,7 @@ class Item extends BaseObject
 | 
			
		|||
		if (in_array($item['network'], [Protocol::DFRN, Protocol::DIASPORA])) {
 | 
			
		||||
			$condition = ['guid' => $item['guid'], 'uid' => $item['uid']];
 | 
			
		||||
			if (self::exists($condition)) {
 | 
			
		||||
				logger('duplicated item with the same guid found. '.print_r($item,true));
 | 
			
		||||
				Logger::log('duplicated item with the same guid found. '.print_r($item,true));
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -1569,7 +1570,7 @@ class Item extends BaseObject
 | 
			
		|||
			$condition = ["`body` = ? AND `network` = ? AND `created` = ? AND `contact-id` = ? AND `uid` = ?",
 | 
			
		||||
					$item['body'], $item['network'], $item['created'], $item['contact-id'], $item['uid']];
 | 
			
		||||
			if (self::exists($condition)) {
 | 
			
		||||
				logger('duplicated item with the same body found. '.print_r($item,true));
 | 
			
		||||
				Logger::log('duplicated item with the same body found. '.print_r($item,true));
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1616,7 +1617,7 @@ class Item extends BaseObject
 | 
			
		|||
		unset($item['api_source']);
 | 
			
		||||
 | 
			
		||||
		if (x($item, 'cancel')) {
 | 
			
		||||
			logger('post cancelled by addon.');
 | 
			
		||||
			Logger::log('post cancelled by addon.');
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1627,12 +1628,12 @@ class Item extends BaseObject
 | 
			
		|||
		 */
 | 
			
		||||
		if ($item["uid"] == 0) {
 | 
			
		||||
			if (self::exists(['uri' => trim($item['uri']), 'uid' => 0])) {
 | 
			
		||||
				logger('Global item already stored. URI: '.$item['uri'].' on network '.$item['network'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Global item already stored. URI: '.$item['uri'].' on network '.$item['network'], LOGGER_DEBUG);
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('' . print_r($item,true), LOGGER_DATA);
 | 
			
		||||
		Logger::log('' . print_r($item,true), LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		if (array_key_exists('tag', $item)) {
 | 
			
		||||
			$tags = $item['tag'];
 | 
			
		||||
| 
						 | 
				
			
			@ -1700,14 +1701,14 @@ class Item extends BaseObject
 | 
			
		|||
				$item = array_merge($item, $delivery_data);
 | 
			
		||||
 | 
			
		||||
				file_put_contents($spool, json_encode($item));
 | 
			
		||||
				logger("Item wasn't stored - Item was spooled into file ".$file, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Item wasn't stored - Item was spooled into file ".$file, LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($current_post == 0) {
 | 
			
		||||
			// This is one of these error messages that never should occur.
 | 
			
		||||
			logger("couldn't find created item - we better quit now.");
 | 
			
		||||
			Logger::log("couldn't find created item - we better quit now.");
 | 
			
		||||
			DBA::rollback();
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1718,7 +1719,7 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
		if ($entries > 1) {
 | 
			
		||||
			// There are duplicates. We delete our just created entry.
 | 
			
		||||
			logger('Duplicated post occurred. uri = ' . $item['uri'] . ' uid = ' . $item['uid']);
 | 
			
		||||
			Logger::log('Duplicated post occurred. uri = ' . $item['uri'] . ' uid = ' . $item['uid']);
 | 
			
		||||
 | 
			
		||||
			// Yes, we could do a rollback here - but we are having many users with MyISAM.
 | 
			
		||||
			DBA::delete('item', ['id' => $current_post]);
 | 
			
		||||
| 
						 | 
				
			
			@ -1726,12 +1727,12 @@ class Item extends BaseObject
 | 
			
		|||
			return 0;
 | 
			
		||||
		} elseif ($entries == 0) {
 | 
			
		||||
			// This really should never happen since we quit earlier if there were problems.
 | 
			
		||||
			logger("Something is terribly wrong. We haven't found our created entry.");
 | 
			
		||||
			Logger::log("Something is terribly wrong. We haven't found our created entry.");
 | 
			
		||||
			DBA::rollback();
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('created item '.$current_post);
 | 
			
		||||
		Logger::log('created item '.$current_post);
 | 
			
		||||
		self::updateContact($item);
 | 
			
		||||
 | 
			
		||||
		if (!$parent_id || ($item['parent-uri'] === $item['uri'])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1759,7 +1760,7 @@ class Item extends BaseObject
 | 
			
		|||
			 */
 | 
			
		||||
			if (base64_encode(base64_decode(base64_decode($dsprsig->signature))) == base64_decode($dsprsig->signature)) {
 | 
			
		||||
				$dsprsig->signature = base64_decode($dsprsig->signature);
 | 
			
		||||
				logger("Repaired double encoded signature from handle ".$dsprsig->signer, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Repaired double encoded signature from handle ".$dsprsig->signer, LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!empty($dsprsig->signed_text) && empty($dsprsig->signature) && empty($dsprsig->signer)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1790,7 +1791,7 @@ class Item extends BaseObject
 | 
			
		|||
					Addon::callHooks('post_remote_end', $posted_item);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				logger('new item not found in DB, id ' . $current_post);
 | 
			
		||||
				Logger::log('new item not found in DB, id ' . $current_post);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1895,20 +1896,20 @@ class Item extends BaseObject
 | 
			
		|||
		// To avoid timing problems, we are using locks.
 | 
			
		||||
		$locked = Lock::acquire('item_insert_activity');
 | 
			
		||||
		if (!$locked) {
 | 
			
		||||
			logger("Couldn't acquire lock for URI " . $item['uri'] . " - proceeding anyway.");
 | 
			
		||||
			Logger::log("Couldn't acquire lock for URI " . $item['uri'] . " - proceeding anyway.");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Do we already have this content?
 | 
			
		||||
		$item_activity = DBA::selectFirst('item-activity', ['id'], ['uri-id' => $item['uri-id']]);
 | 
			
		||||
		if (DBA::isResult($item_activity)) {
 | 
			
		||||
			$item['iaid'] = $item_activity['id'];
 | 
			
		||||
			logger('Fetched activity for URI ' . $item['uri'] . ' (' . $item['iaid'] . ')');
 | 
			
		||||
			Logger::log('Fetched activity for URI ' . $item['uri'] . ' (' . $item['iaid'] . ')');
 | 
			
		||||
		} elseif (DBA::insert('item-activity', $fields)) {
 | 
			
		||||
			$item['iaid'] = DBA::lastInsertId();
 | 
			
		||||
			logger('Inserted activity for URI ' . $item['uri'] . ' (' . $item['iaid'] . ')');
 | 
			
		||||
			Logger::log('Inserted activity for URI ' . $item['uri'] . ' (' . $item['iaid'] . ')');
 | 
			
		||||
		} else {
 | 
			
		||||
			// This shouldn't happen.
 | 
			
		||||
			logger('Could not insert activity for URI ' . $item['uri'] . ' - should not happen');
 | 
			
		||||
			Logger::log('Could not insert activity for URI ' . $item['uri'] . ' - should not happen');
 | 
			
		||||
			Lock::release('item_insert_activity');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1937,20 +1938,20 @@ class Item extends BaseObject
 | 
			
		|||
		// To avoid timing problems, we are using locks.
 | 
			
		||||
		$locked = Lock::acquire('item_insert_content');
 | 
			
		||||
		if (!$locked) {
 | 
			
		||||
			logger("Couldn't acquire lock for URI " . $item['uri'] . " - proceeding anyway.");
 | 
			
		||||
			Logger::log("Couldn't acquire lock for URI " . $item['uri'] . " - proceeding anyway.");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Do we already have this content?
 | 
			
		||||
		$item_content = DBA::selectFirst('item-content', ['id'], ['uri-id' => $item['uri-id']]);
 | 
			
		||||
		if (DBA::isResult($item_content)) {
 | 
			
		||||
			$item['icid'] = $item_content['id'];
 | 
			
		||||
			logger('Fetched content for URI ' . $item['uri'] . ' (' . $item['icid'] . ')');
 | 
			
		||||
			Logger::log('Fetched content for URI ' . $item['uri'] . ' (' . $item['icid'] . ')');
 | 
			
		||||
		} elseif (DBA::insert('item-content', $fields)) {
 | 
			
		||||
			$item['icid'] = DBA::lastInsertId();
 | 
			
		||||
			logger('Inserted content for URI ' . $item['uri'] . ' (' . $item['icid'] . ')');
 | 
			
		||||
			Logger::log('Inserted content for URI ' . $item['uri'] . ' (' . $item['icid'] . ')');
 | 
			
		||||
		} else {
 | 
			
		||||
			// This shouldn't happen.
 | 
			
		||||
			logger('Could not insert content for URI ' . $item['uri'] . ' - should not happen');
 | 
			
		||||
			Logger::log('Could not insert content for URI ' . $item['uri'] . ' - should not happen');
 | 
			
		||||
		}
 | 
			
		||||
		if ($locked) {
 | 
			
		||||
			Lock::release('item_insert_content');
 | 
			
		||||
| 
						 | 
				
			
			@ -1976,7 +1977,7 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
		$fields = ['activity' => $activity_index];
 | 
			
		||||
 | 
			
		||||
		logger('Update activity for ' . json_encode($condition));
 | 
			
		||||
		Logger::log('Update activity for ' . json_encode($condition));
 | 
			
		||||
 | 
			
		||||
		DBA::update('item-activity', $fields, $condition, true);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2005,7 +2006,7 @@ class Item extends BaseObject
 | 
			
		|||
			$fields = $condition;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Update content for ' . json_encode($condition));
 | 
			
		||||
		Logger::log('Update content for ' . json_encode($condition));
 | 
			
		||||
 | 
			
		||||
		DBA::update('item-content', $fields, $condition, true);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -2144,9 +2145,9 @@ class Item extends BaseObject
 | 
			
		|||
		$distributed = self::insert($item, false, $notify, true);
 | 
			
		||||
 | 
			
		||||
		if (!$distributed) {
 | 
			
		||||
			logger("Distributed public item " . $itemid . " for user " . $uid . " wasn't stored", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Distributed public item " . $itemid . " for user " . $uid . " wasn't stored", LOGGER_DEBUG);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Distributed public item " . $itemid . " for user " . $uid . " with id " . $distributed, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Distributed public item " . $itemid . " for user " . $uid . " with id " . $distributed, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2209,7 +2210,7 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
			$public_shadow = self::insert($item, false, false, true);
 | 
			
		||||
 | 
			
		||||
			logger("Stored public shadow for thread ".$itemid." under id ".$public_shadow, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Stored public shadow for thread ".$itemid." under id ".$public_shadow, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2266,7 +2267,7 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
		$public_shadow = self::insert($item, false, false, true);
 | 
			
		||||
 | 
			
		||||
		logger("Stored public shadow for comment ".$item['uri']." under id ".$public_shadow, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Stored public shadow for comment ".$item['uri']." under id ".$public_shadow, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// If this was a comment to a Diaspora post we don't get our comment back.
 | 
			
		||||
		// This means that we have to distribute the comment by ourselves.
 | 
			
		||||
| 
						 | 
				
			
			@ -2543,7 +2544,7 @@ class Item extends BaseObject
 | 
			
		|||
			foreach ($matches as $mtch) {
 | 
			
		||||
				if (link_compare($link, $mtch[1]) || link_compare($dlink, $mtch[1])) {
 | 
			
		||||
					$mention = true;
 | 
			
		||||
					logger('mention found: ' . $mtch[2]);
 | 
			
		||||
					Logger::log('mention found: ' . $mtch[2]);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -2553,7 +2554,7 @@ class Item extends BaseObject
 | 
			
		|||
				  !$item['wall'] && !$item['origin'] && ($item['id'] == $item['parent'])) {
 | 
			
		||||
				// mmh.. no mention.. community page or private group... no wall.. no origin.. top-post (not a comment)
 | 
			
		||||
				// delete it!
 | 
			
		||||
				logger("no-mention top-level post to community or private group. delete.");
 | 
			
		||||
				Logger::log("no-mention top-level post to community or private group. delete.");
 | 
			
		||||
				DBA::delete('item', ['id' => $item_id]);
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -2612,29 +2613,29 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
		// Prevent the forwarding of posts that are forwarded
 | 
			
		||||
		if (!empty($datarray["extid"]) && ($datarray["extid"] == Protocol::DFRN)) {
 | 
			
		||||
			logger('Already forwarded', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Already forwarded', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Prevent to forward already forwarded posts
 | 
			
		||||
		if ($datarray["app"] == $a->getHostName()) {
 | 
			
		||||
			logger('Already forwarded (second test)', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Already forwarded (second test)', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Only forward posts
 | 
			
		||||
		if ($datarray["verb"] != ACTIVITY_POST) {
 | 
			
		||||
			logger('No post', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No post', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (($contact['network'] != Protocol::FEED) && $datarray['private']) {
 | 
			
		||||
			logger('Not public', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Not public', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$datarray2 = $datarray;
 | 
			
		||||
		logger('remote-self start - Contact '.$contact['url'].' - '.$contact['remote_self'].' Item '.print_r($datarray, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('remote-self start - Contact '.$contact['url'].' - '.$contact['remote_self'].' Item '.print_r($datarray, true), LOGGER_DEBUG);
 | 
			
		||||
		if ($contact['remote_self'] == 2) {
 | 
			
		||||
			$self = DBA::selectFirst('contact', ['id', 'name', 'url', 'thumb'],
 | 
			
		||||
					['uid' => $contact['uid'], 'self' => true]);
 | 
			
		||||
| 
						 | 
				
			
			@ -2674,7 +2675,7 @@ class Item extends BaseObject
 | 
			
		|||
		if ($contact['network'] != Protocol::FEED) {
 | 
			
		||||
			// Store the original post
 | 
			
		||||
			$result = self::insert($datarray2, false, false);
 | 
			
		||||
			logger('remote-self post original item - Contact '.$contact['url'].' return '.$result.' Item '.print_r($datarray2, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('remote-self post original item - Contact '.$contact['url'].' return '.$result.' Item '.print_r($datarray2, true), LOGGER_DEBUG);
 | 
			
		||||
		} else {
 | 
			
		||||
			$datarray["app"] = "Feed";
 | 
			
		||||
			$result = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -2704,7 +2705,7 @@ class Item extends BaseObject
 | 
			
		|||
			return $s;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('check for photos', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('check for photos', LOGGER_DEBUG);
 | 
			
		||||
		$site = substr(System::baseUrl(), strpos(System::baseUrl(), '://'));
 | 
			
		||||
 | 
			
		||||
		$orig_body = $s;
 | 
			
		||||
| 
						 | 
				
			
			@ -2718,7 +2719,7 @@ class Item extends BaseObject
 | 
			
		|||
			$img_st_close++; // make it point to AFTER the closing bracket
 | 
			
		||||
			$image = substr($orig_body, $img_start + $img_st_close, $img_len);
 | 
			
		||||
 | 
			
		||||
			logger('found photo ' . $image, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('found photo ' . $image, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			if (stristr($image, $site . '/photo/')) {
 | 
			
		||||
				// Only embed locally hosted photos
 | 
			
		||||
| 
						 | 
				
			
			@ -2760,7 +2761,7 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
							// If a custom width and height were specified, apply before embedding
 | 
			
		||||
							if (preg_match("/\[img\=([0-9]*)x([0-9]*)\]/is", substr($orig_body, $img_start, $img_st_close), $match)) {
 | 
			
		||||
								logger('scaling photo', LOGGER_DEBUG);
 | 
			
		||||
								Logger::log('scaling photo', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
								$width = intval($match[1]);
 | 
			
		||||
								$height = intval($match[2]);
 | 
			
		||||
| 
						 | 
				
			
			@ -2773,9 +2774,9 @@ class Item extends BaseObject
 | 
			
		|||
								}
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
							logger('replacing photo', LOGGER_DEBUG);
 | 
			
		||||
							Logger::log('replacing photo', LOGGER_DEBUG);
 | 
			
		||||
							$image = 'data:' . $type . ';base64,' . base64_encode($data);
 | 
			
		||||
							logger('replaced: ' . $image, LOGGER_DATA);
 | 
			
		||||
							Logger::log('replaced: ' . $image, LOGGER_DATA);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -2938,7 +2939,7 @@ class Item extends BaseObject
 | 
			
		|||
			++$expired;
 | 
			
		||||
		}
 | 
			
		||||
		DBA::close($items);
 | 
			
		||||
		logger('User ' . $uid . ": expired $expired items; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos");
 | 
			
		||||
		Logger::log('User ' . $uid . ": expired $expired items; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function firstPostDate($uid, $wall = false)
 | 
			
		||||
| 
						 | 
				
			
			@ -2994,18 +2995,18 @@ class Item extends BaseObject
 | 
			
		|||
				$activity = ACTIVITY_ATTENDMAYBE;
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				logger('like: unknown verb ' . $verb . ' for item ' . $item_id);
 | 
			
		||||
				Logger::log('like: unknown verb ' . $verb . ' for item ' . $item_id);
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Enable activity toggling instead of on/off
 | 
			
		||||
		$event_verb_flag = $activity === ACTIVITY_ATTEND || $activity === ACTIVITY_ATTENDNO || $activity === ACTIVITY_ATTENDMAYBE;
 | 
			
		||||
 | 
			
		||||
		logger('like: verb ' . $verb . ' item ' . $item_id);
 | 
			
		||||
		Logger::log('like: verb ' . $verb . ' item ' . $item_id);
 | 
			
		||||
 | 
			
		||||
		$item = self::selectFirst(self::ITEM_FIELDLIST, ['`id` = ? OR `uri` = ?', $item_id, $item_id]);
 | 
			
		||||
		if (!DBA::isResult($item)) {
 | 
			
		||||
			logger('like: unknown item ' . $item_id);
 | 
			
		||||
			Logger::log('like: unknown item ' . $item_id);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3017,14 +3018,14 @@ class Item extends BaseObject
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!Security::canWriteToUserWall($uid)) {
 | 
			
		||||
			logger('like: unable to write on wall ' . $uid);
 | 
			
		||||
			Logger::log('like: unable to write on wall ' . $uid);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Retrieves the local post owner
 | 
			
		||||
		$owner_self_contact = DBA::selectFirst('contact', [], ['uid' => $uid, 'self' => true]);
 | 
			
		||||
		if (!DBA::isResult($owner_self_contact)) {
 | 
			
		||||
			logger('like: unknown owner ' . $uid);
 | 
			
		||||
			Logger::log('like: unknown owner ' . $uid);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3033,7 +3034,7 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
		$author_contact = DBA::selectFirst('contact', ['url'], ['id' => $author_id]);
 | 
			
		||||
		if (!DBA::isResult($author_contact)) {
 | 
			
		||||
			logger('like: unknown author ' . $author_id);
 | 
			
		||||
			Logger::log('like: unknown author ' . $author_id);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3045,7 +3046,7 @@ class Item extends BaseObject
 | 
			
		|||
			$item_contact_id = Contact::getIdForURL($author_contact['url'], $uid, true);
 | 
			
		||||
			$item_contact = DBA::selectFirst('contact', [], ['id' => $item_contact_id]);
 | 
			
		||||
			if (!DBA::isResult($item_contact)) {
 | 
			
		||||
				logger('like: unknown item contact ' . $item_contact_id);
 | 
			
		||||
				Logger::log('like: unknown item contact ' . $item_contact_id);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -3147,7 +3148,7 @@ class Item extends BaseObject
 | 
			
		|||
		if (!$onlyshadow) {
 | 
			
		||||
			$result = DBA::insert('thread', $item);
 | 
			
		||||
 | 
			
		||||
			logger("Add thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Add thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3179,26 +3180,26 @@ class Item extends BaseObject
 | 
			
		|||
 | 
			
		||||
		$result = DBA::update('thread', $fields, ['iid' => $itemid]);
 | 
			
		||||
 | 
			
		||||
		logger("Update thread for item ".$itemid." - guid ".$item["guid"]." - ".(int)$result, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Update thread for item ".$itemid." - guid ".$item["guid"]." - ".(int)$result, LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private static function deleteThread($itemid, $itemuri = "")
 | 
			
		||||
	{
 | 
			
		||||
		$item = DBA::selectFirst('thread', ['uid'], ['iid' => $itemid]);
 | 
			
		||||
		if (!DBA::isResult($item)) {
 | 
			
		||||
			logger('No thread found for id '.$itemid, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No thread found for id '.$itemid, LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$result = DBA::delete('thread', ['iid' => $itemid], ['cascade' => false]);
 | 
			
		||||
 | 
			
		||||
		logger("deleteThread: Deleted thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("deleteThread: Deleted thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if ($itemuri != "") {
 | 
			
		||||
			$condition = ["`uri` = ? AND NOT `deleted` AND NOT (`uid` IN (?, 0))", $itemuri, $item["uid"]];
 | 
			
		||||
			if (!self::exists($condition)) {
 | 
			
		||||
				DBA::delete('item', ['uri' => $itemuri, 'uid' => 0]);
 | 
			
		||||
				logger("deleteThread: Deleted shadow for item ".$itemuri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("deleteThread: Deleted shadow for item ".$itemuri, LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
namespace Friendica\Model;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -87,7 +88,7 @@ class Mail
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$convid) {
 | 
			
		||||
			logger('send message: conversation not found.');
 | 
			
		||||
			Logger::log('send message: conversation not found.');
 | 
			
		||||
			return -4;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -200,7 +201,7 @@ class Mail
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$convid) {
 | 
			
		||||
			logger('send message: conversation not found.');
 | 
			
		||||
			Logger::log('send message: conversation not found.');
 | 
			
		||||
			return -4;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ use Friendica\Core\Addon;
 | 
			
		|||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +107,7 @@ class Profile
 | 
			
		|||
		$user = DBA::selectFirst('user', ['uid'], ['nickname' => $nickname, 'account_removed' => false]);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($user) && empty($profiledata)) {
 | 
			
		||||
			logger('profile error: ' . $a->query_string, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('profile error: ' . $a->query_string, LOGGER_DEBUG);
 | 
			
		||||
			notice(L10n::t('Requested account is not available.') . EOL);
 | 
			
		||||
			$a->error = 404;
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +125,7 @@ class Profile
 | 
			
		|||
		$pdata = self::getByNickname($nickname, $user['uid'], $profile);
 | 
			
		||||
 | 
			
		||||
		if (empty($pdata) && empty($profiledata)) {
 | 
			
		||||
			logger('profile error: ' . $a->query_string, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('profile error: ' . $a->query_string, LOGGER_DEBUG);
 | 
			
		||||
			notice(L10n::t('Requested profile is not available.') . EOL);
 | 
			
		||||
			$a->error = 404;
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -1020,27 +1021,27 @@ class Profile
 | 
			
		|||
		// Try to find the public contact entry of the visitor.
 | 
			
		||||
		$cid = Contact::getIdForURL($my_url);
 | 
			
		||||
		if (!$cid) {
 | 
			
		||||
			logger('No contact record found for ' . $my_url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No contact record found for ' . $my_url, LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$contact = DBA::selectFirst('contact',['id', 'url'], ['id' => $cid]);
 | 
			
		||||
 | 
			
		||||
		if (DBA::isResult($contact) && remote_user() && remote_user() == $contact['id']) {
 | 
			
		||||
			logger('The visitor ' . $my_url . ' is already authenticated', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('The visitor ' . $my_url . ' is already authenticated', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Avoid endless loops
 | 
			
		||||
		$cachekey = 'zrlInit:' . $my_url;
 | 
			
		||||
		if (Cache::get($cachekey)) {
 | 
			
		||||
			logger('URL ' . $my_url . ' already tried to authenticate.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('URL ' . $my_url . ' already tried to authenticate.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		} else {
 | 
			
		||||
			Cache::set($cachekey, true, Cache::MINUTE);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Not authenticated. Invoking reverse magic-auth for ' . $my_url, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Not authenticated. Invoking reverse magic-auth for ' . $my_url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		Worker::add(PRIORITY_LOW, 'GProbe', $my_url);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1061,7 +1062,7 @@ class Profile
 | 
			
		|||
			// We have to check if the remote server does understand /magic without invoking something
 | 
			
		||||
			$serverret = Network::curl($basepath . '/magic');
 | 
			
		||||
			if ($serverret->isSuccess()) {
 | 
			
		||||
				logger('Doing magic auth for visitor ' . $my_url . ' to ' . $magic_path, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Doing magic auth for visitor ' . $my_url . ' to ' . $magic_path, LOGGER_DEBUG);
 | 
			
		||||
				System::externalRedirect($magic_path);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1092,7 +1093,7 @@ class Profile
 | 
			
		|||
		// Try to find the public contact entry of the visitor.
 | 
			
		||||
		$cid = Contact::getIdForURL($visitor_handle);
 | 
			
		||||
		if(!$cid) {
 | 
			
		||||
			logger('owt: unable to finger ' . $visitor_handle, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('owt: unable to finger ' . $visitor_handle, LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1121,7 +1122,7 @@ class Profile
 | 
			
		|||
 | 
			
		||||
		info(L10n::t('OpenWebAuth: %1$s welcomes %2$s', $a->getHostName(), $visitor['name']));
 | 
			
		||||
 | 
			
		||||
		logger('OpenWebAuth: auth success from ' . $visitor['addr'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('OpenWebAuth: auth success from ' . $visitor['addr'], LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function zrl($s, $force = false)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@
 | 
			
		|||
 */
 | 
			
		||||
namespace Friendica\Model;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +46,7 @@ class PushSubscriber
 | 
			
		|||
				$priority = $default_priority;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger('Publish feed to ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' with priority ' . $priority, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Publish feed to ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' with priority ' . $priority, LOGGER_DEBUG);
 | 
			
		||||
			Worker::add($priority, 'PubSubPublish', (int)$subscriber['id']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -88,9 +89,9 @@ class PushSubscriber
 | 
			
		|||
				'secret' => $hub_secret];
 | 
			
		||||
			DBA::insert('push_subscriber', $fields);
 | 
			
		||||
 | 
			
		||||
			logger("Successfully subscribed [$hub_callback] for $nick");
 | 
			
		||||
			Logger::log("Successfully subscribed [$hub_callback] for $nick");
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Successfully unsubscribed [$hub_callback] for $nick");
 | 
			
		||||
			Logger::log("Successfully unsubscribed [$hub_callback] for $nick");
 | 
			
		||||
			// we do nothing here, since the row was already deleted
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -115,10 +116,10 @@ class PushSubscriber
 | 
			
		|||
 | 
			
		||||
			if ($days > 60) {
 | 
			
		||||
				DBA::update('push_subscriber', ['push' => -1, 'next_try' => DBA::NULL_DATETIME], ['id' => $id]);
 | 
			
		||||
				logger('Delivery error: Subscription ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' is marked as ended.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Delivery error: Subscription ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' is marked as ended.', LOGGER_DEBUG);
 | 
			
		||||
			} else {
 | 
			
		||||
				DBA::update('push_subscriber', ['push' => 0, 'next_try' => DBA::NULL_DATETIME], ['id' => $id]);
 | 
			
		||||
				logger('Delivery error: Giving up ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' for now.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Delivery error: Giving up ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' for now.', LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			// Calculate the delay until the next trial
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +129,7 @@ class PushSubscriber
 | 
			
		|||
			$retrial = $retrial + 1;
 | 
			
		||||
 | 
			
		||||
			DBA::update('push_subscriber', ['push' => $retrial, 'next_try' => $next], ['id' => $id]);
 | 
			
		||||
			logger('Delivery error: Next try (' . $retrial . ') ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' at ' . $next, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Delivery error: Next try (' . $retrial . ') ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' at ' . $next, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -148,6 +149,6 @@ class PushSubscriber
 | 
			
		|||
		// set last_update to the 'created' date of the last item, and reset push=0
 | 
			
		||||
		$fields = ['push' => 0, 'next_try' => DBA::NULL_DATETIME, 'last_update' => $last_update];
 | 
			
		||||
		DBA::update('push_subscriber', $fields, ['id' => $id]);
 | 
			
		||||
		logger('Subscriber ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' is marked as vital', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Subscriber ' . $subscriber['callback_url'] . ' for ' . $subscriber['nickname'] . ' is marked as vital', LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Model;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +18,7 @@ class Queue
 | 
			
		|||
	 */
 | 
			
		||||
	public static function updateTime($id)
 | 
			
		||||
	{
 | 
			
		||||
		logger('queue: requeue item ' . $id);
 | 
			
		||||
		Logger::log('queue: requeue item ' . $id);
 | 
			
		||||
		$queue = DBA::selectFirst('queue', ['retrial'], ['id' => $id]);
 | 
			
		||||
		if (!DBA::isResult($queue)) {
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +42,7 @@ class Queue
 | 
			
		|||
	 */
 | 
			
		||||
	public static function removeItem($id)
 | 
			
		||||
	{
 | 
			
		||||
		logger('queue: remove queue item ' . $id);
 | 
			
		||||
		Logger::log('queue: remove queue item ' . $id);
 | 
			
		||||
		DBA::delete('queue', ['id' => $id]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,10 +101,10 @@ class Queue
 | 
			
		|||
 | 
			
		||||
		if (DBA::isResult($r)) {
 | 
			
		||||
			if ($batch &&  ($r[0]['total'] > $batch_queue)) {
 | 
			
		||||
				logger('too many queued items for batch server ' . $cid . ' - discarding message');
 | 
			
		||||
				Logger::log('too many queued items for batch server ' . $cid . ' - discarding message');
 | 
			
		||||
				return;
 | 
			
		||||
			} elseif ((! $batch) && ($r[0]['total'] > $max_queue)) {
 | 
			
		||||
				logger('too many queued items for contact ' . $cid . ' - discarding message');
 | 
			
		||||
				Logger::log('too many queued items for contact ' . $cid . ' - discarding message');
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -117,6 +118,6 @@ class Queue
 | 
			
		|||
			'content' => $msg,
 | 
			
		||||
			'batch'   =>($batch) ? 1 : 0
 | 
			
		||||
		]);
 | 
			
		||||
		logger('Added item ' . $guid . ' for ' . $cid);
 | 
			
		||||
		Logger::log('Added item ' . $guid . ' for ' . $cid);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ use Exception;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
| 
						 | 
				
			
			@ -470,7 +471,7 @@ class User
 | 
			
		|||
		$username_max_length = max(1, min(64, intval(Config::get('system', 'username_max_length', 48))));
 | 
			
		||||
 | 
			
		||||
		if ($username_min_length > $username_max_length) {
 | 
			
		||||
			logger(L10n::t('system.username_min_length (%s) and system.username_max_length (%s) are excluding each other, swapping values.', $username_min_length, $username_max_length), LOGGER_WARNING);
 | 
			
		||||
			Logger::log(L10n::t('system.username_min_length (%s) and system.username_max_length (%s) are excluding each other, swapping values.', $username_min_length, $username_max_length), LOGGER_WARNING);
 | 
			
		||||
			$tmp = $username_min_length;
 | 
			
		||||
			$username_min_length = $username_max_length;
 | 
			
		||||
			$username_max_length = $tmp;
 | 
			
		||||
| 
						 | 
				
			
			@ -785,7 +786,7 @@ class User
 | 
			
		|||
 | 
			
		||||
		$a = get_app();
 | 
			
		||||
 | 
			
		||||
		logger('Removing user: ' . $uid);
 | 
			
		||||
		Logger::log('Removing user: ' . $uid);
 | 
			
		||||
 | 
			
		||||
		$user = DBA::selectFirst('user', [], ['uid' => $uid]);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ class Inbox extends BaseModule
 | 
			
		|||
		$tempfile = tempnam(get_temppath(), $filename);
 | 
			
		||||
		file_put_contents($tempfile, json_encode(['argv' => $a->argv, 'header' => $_SERVER, 'body' => $postdata], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
 | 
			
		||||
 | 
			
		||||
		logger('Incoming message stored under ' . $tempfile);
 | 
			
		||||
		Logger::log('Incoming message stored under ' . $tempfile);
 | 
			
		||||
*/
 | 
			
		||||
		if (!empty($a->argv[1])) {
 | 
			
		||||
			$user = DBA::selectFirst('user', ['uid'], ['nickname' => $a->argv[1]]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ use Friendica\Core\Addon;
 | 
			
		|||
use Friendica\Core\Authentication;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\User;
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +147,7 @@ class Login extends BaseModule
 | 
			
		|||
				);
 | 
			
		||||
			}
 | 
			
		||||
		} catch (Exception $e) {
 | 
			
		||||
			logger('authenticate: failed login attempt: ' . notags($username) . ' from IP ' . $_SERVER['REMOTE_ADDR']);
 | 
			
		||||
			Logger::log('authenticate: failed login attempt: ' . notags($username) . ' from IP ' . $_SERVER['REMOTE_ADDR']);
 | 
			
		||||
			info('Login failed. Please check your credentials.' . EOL);
 | 
			
		||||
			$a->internalRedirect();
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +196,7 @@ class Login extends BaseModule
 | 
			
		|||
				);
 | 
			
		||||
				if (DBA::isResult($user)) {
 | 
			
		||||
					if ($data->hash != Authentication::getCookieHashForUser($user)) {
 | 
			
		||||
						logger("Hash for user " . $data->uid . " doesn't fit.");
 | 
			
		||||
						Logger::log("Hash for user " . $data->uid . " doesn't fit.");
 | 
			
		||||
						Authentication::deleteSession();
 | 
			
		||||
						$a->internalRedirect();
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +232,7 @@ class Login extends BaseModule
 | 
			
		|||
				$check = Config::get('system', 'paranoia');
 | 
			
		||||
				// extra paranoia - if the IP changed, log them out
 | 
			
		||||
				if ($check && ($_SESSION['addr'] != $_SERVER['REMOTE_ADDR'])) {
 | 
			
		||||
					logger('Session address changed. Paranoid setting in effect, blocking session. ' .
 | 
			
		||||
					Logger::log('Session address changed. Paranoid setting in effect, blocking session. ' .
 | 
			
		||||
						$_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']);
 | 
			
		||||
					Authentication::deleteSession();
 | 
			
		||||
					$a->internalRedirect();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,9 +5,10 @@
 | 
			
		|||
namespace Friendica\Module;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseModule;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Util\HTTPSignature;
 | 
			
		||||
use Friendica\Util\Network;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -22,9 +23,9 @@ class Magic extends BaseModule
 | 
			
		|||
	{
 | 
			
		||||
		$a = self::getApp();
 | 
			
		||||
		$ret = ['success' => false, 'url' => '', 'message' => ''];
 | 
			
		||||
		logger('magic mdule: invoked', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('magic mdule: invoked', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		logger('args: ' . print_r($_REQUEST, true), LOGGER_DATA);
 | 
			
		||||
		Logger::log('args: ' . print_r($_REQUEST, true), LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		$addr = ((x($_REQUEST, 'addr')) ? $_REQUEST['addr'] : '');
 | 
			
		||||
		$dest = ((x($_REQUEST, 'dest')) ? $_REQUEST['dest'] : '');
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +42,7 @@ class Magic extends BaseModule
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$cid) {
 | 
			
		||||
			logger('No contact record found: ' . print_r($_REQUEST, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No contact record found: ' . print_r($_REQUEST, true), LOGGER_DEBUG);
 | 
			
		||||
			// @TODO Finding a more elegant possibility to redirect to either internal or external URL
 | 
			
		||||
			$a->redirect($dest);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +56,7 @@ class Magic extends BaseModule
 | 
			
		|||
				return $ret;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger('Contact is already authenticated', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Contact is already authenticated', LOGGER_DEBUG);
 | 
			
		||||
			System::externalRedirect($dest);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Module;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseModule;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
| 
						 | 
				
			
			@ -57,8 +58,8 @@ class Owa extends BaseModule
 | 
			
		|||
							$verified = HTTPSignature::verifyMagic($contact['pubkey']);
 | 
			
		||||
 | 
			
		||||
							if ($verified && $verified['header_signed'] && $verified['header_valid']) {
 | 
			
		||||
								logger('OWA header: ' . print_r($verified, true), LOGGER_DATA);
 | 
			
		||||
								logger('OWA success: ' . $contact['addr'], LOGGER_DATA);
 | 
			
		||||
								Logger::log('OWA header: ' . print_r($verified, true), LOGGER_DATA);
 | 
			
		||||
								Logger::log('OWA success: ' . $contact['addr'], LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
								$ret['success'] = true;
 | 
			
		||||
								$token = random_string(32);
 | 
			
		||||
| 
						 | 
				
			
			@ -75,10 +76,10 @@ class Owa extends BaseModule
 | 
			
		|||
								openssl_public_encrypt($token, $result, $contact['pubkey']);
 | 
			
		||||
								$ret['encrypted_token'] = base64url_encode($result);
 | 
			
		||||
							} else {
 | 
			
		||||
								logger('OWA fail: ' . $contact['id'] . ' ' . $contact['addr'] . ' ' . $contact['url'], LOGGER_DEBUG);
 | 
			
		||||
								Logger::log('OWA fail: ' . $contact['id'] . ' ' . $contact['addr'] . ' ' . $contact['url'], LOGGER_DEBUG);
 | 
			
		||||
							}
 | 
			
		||||
						} else {
 | 
			
		||||
							logger('Contact not found: ' . $handle, LOGGER_DEBUG);
 | 
			
		||||
							Logger::log('Contact not found: ' . $handle, LOGGER_DEBUG);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Friendica\Network;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Network\HTTPException\InternalServerErrorException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +104,7 @@ class CurlResult
 | 
			
		|||
		$this->errorNumber = $errorNumber;
 | 
			
		||||
		$this->error = $error;
 | 
			
		||||
 | 
			
		||||
		logger($url . ': ' . $this->returnCode . " " . $result, LOGGER_DATA);
 | 
			
		||||
		Logger::log($url . ': ' . $this->returnCode . " " . $result, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		$this->parseBodyHeader($result);
 | 
			
		||||
		$this->checkSuccess();
 | 
			
		||||
| 
						 | 
				
			
			@ -134,8 +134,8 @@ class CurlResult
 | 
			
		|||
		$this->isSuccess = ($this->returnCode >= 200 && $this->returnCode <= 299) || $this->errorNumber == 0;
 | 
			
		||||
 | 
			
		||||
		if (!$this->isSuccess) {
 | 
			
		||||
			logger('error: ' . $this->url . ': ' . $this->returnCode . ' - ' . $this->error, LOGGER_INFO);
 | 
			
		||||
			logger('debug: ' . print_r($this->info, true), LOGGER_DATA);
 | 
			
		||||
			Logger::log('error: ' . $this->url . ': ' . $this->returnCode . ' - ' . $this->error, LOGGER_INFO);
 | 
			
		||||
			Logger::log('debug: ' . print_r($this->info, true), LOGGER_DATA);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$this->isSuccess && $this->errorNumber == CURLE_OPERATION_TIMEDOUT) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Network;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -34,12 +35,12 @@ class FKOAuth1 extends OAuthServer
 | 
			
		|||
	 */
 | 
			
		||||
	public function loginUser($uid)
 | 
			
		||||
	{
 | 
			
		||||
		logger("FKOAuth1::loginUser $uid");
 | 
			
		||||
		Logger::log("FKOAuth1::loginUser $uid");
 | 
			
		||||
		$a = get_app();
 | 
			
		||||
		$record = DBA::selectFirst('user', [], ['uid' => $uid, 'blocked' => 0, 'account_expired' => 0, 'account_removed' => 0, 'verified' => 1]);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($record)) {
 | 
			
		||||
			logger('FKOAuth1::loginUser failure: ' . print_r($_SERVER, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('FKOAuth1::loginUser failure: ' . print_r($_SERVER, true), LOGGER_DEBUG);
 | 
			
		||||
			header('HTTP/1.0 401 Unauthorized');
 | 
			
		||||
			die('This api requires login');
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@
 | 
			
		|||
namespace Friendica\Network;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use OAuthConsumer;
 | 
			
		||||
use OAuthDataStore;
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +40,7 @@ class FKOAuthDataStore extends OAuthDataStore
 | 
			
		|||
	 */
 | 
			
		||||
	public function lookup_consumer($consumer_key)
 | 
			
		||||
	{
 | 
			
		||||
		logger(__function__ . ":" . $consumer_key);
 | 
			
		||||
		Logger::log(__function__ . ":" . $consumer_key);
 | 
			
		||||
 | 
			
		||||
		$s = DBA::select('clients', ['client_id', 'pw', 'redirect_uri'], ['client_id' => $consumer_key]);
 | 
			
		||||
		$r = DBA::toArray($s);
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +60,7 @@ class FKOAuthDataStore extends OAuthDataStore
 | 
			
		|||
	 */
 | 
			
		||||
	public function lookup_token($consumer, $token_type, $token)
 | 
			
		||||
	{
 | 
			
		||||
		logger(__function__ . ":" . $consumer . ", " . $token_type . ", " . $token);
 | 
			
		||||
		Logger::log(__function__ . ":" . $consumer . ", " . $token_type . ", " . $token);
 | 
			
		||||
 | 
			
		||||
		$s = DBA::select('tokens', ['id', 'secret', 'scope', 'expires', 'uid'], ['client_id' => $consumer->key, 'scope' => $token_type, 'id' => $token]);
 | 
			
		||||
		$r = DBA::toArray($s);
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +100,7 @@ class FKOAuthDataStore extends OAuthDataStore
 | 
			
		|||
	 */
 | 
			
		||||
	public function new_request_token($consumer, $callback = null)
 | 
			
		||||
	{
 | 
			
		||||
		logger(__function__ . ":" . $consumer . ", " . $callback);
 | 
			
		||||
		Logger::log(__function__ . ":" . $consumer . ", " . $callback);
 | 
			
		||||
		$key = self::genToken();
 | 
			
		||||
		$sec = self::genToken();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +135,7 @@ class FKOAuthDataStore extends OAuthDataStore
 | 
			
		|||
	 */
 | 
			
		||||
	public function new_access_token($token, $consumer, $verifier = null)
 | 
			
		||||
	{
 | 
			
		||||
		logger(__function__ . ":" . $token . ", " . $consumer . ", " . $verifier);
 | 
			
		||||
		Logger::log(__function__ . ":" . $token . ", " . $consumer . ", " . $verifier);
 | 
			
		||||
 | 
			
		||||
		// return a new access token attached to this consumer
 | 
			
		||||
		// for the user associated with this token if the request token
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +146,7 @@ class FKOAuthDataStore extends OAuthDataStore
 | 
			
		|||
 | 
			
		||||
		// get user for this verifier
 | 
			
		||||
		$uverifier = Config::get("oauth", $verifier);
 | 
			
		||||
		logger(__function__ . ":" . $verifier . "," . $uverifier);
 | 
			
		||||
		Logger::log(__function__ . ":" . $verifier . "," . $uverifier);
 | 
			
		||||
 | 
			
		||||
		if (is_null($verifier) || ($uverifier !== false)) {
 | 
			
		||||
			$key = self::genToken();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ namespace Friendica\Network;
 | 
			
		|||
use DOMDocument;
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +110,7 @@ class Probe
 | 
			
		|||
		$xrd_timeout = Config::get('system', 'xrd_timeout', 20);
 | 
			
		||||
		$redirects = 0;
 | 
			
		||||
 | 
			
		||||
		logger("Probing for ".$host, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Probing for ".$host, LOGGER_DEBUG);
 | 
			
		||||
		$xrd = null;
 | 
			
		||||
 | 
			
		||||
		$curlResult = Network::curl($ssl_url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +123,7 @@ class Probe
 | 
			
		|||
		if (!is_object($xrd)) {
 | 
			
		||||
			$curlResult = Network::curl($url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
 | 
			
		||||
			if ($curlResult->isTimeout()) {
 | 
			
		||||
				logger("Probing timeout for " . $url, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Probing timeout for " . $url, LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			$xml = $curlResult->getBody();
 | 
			
		||||
| 
						 | 
				
			
			@ -130,13 +131,13 @@ class Probe
 | 
			
		|||
			$host_url = 'http://'.$host;
 | 
			
		||||
		}
 | 
			
		||||
		if (!is_object($xrd)) {
 | 
			
		||||
			logger("No xrd object found for ".$host, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No xrd object found for ".$host, LOGGER_DEBUG);
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$links = XML::elementToArray($xrd);
 | 
			
		||||
		if (!isset($links["xrd"]["link"])) {
 | 
			
		||||
			logger("No xrd data found for ".$host, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No xrd data found for ".$host, LOGGER_DEBUG);
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +165,7 @@ class Probe
 | 
			
		|||
 | 
			
		||||
		self::$baseurl = "http://".$host;
 | 
			
		||||
 | 
			
		||||
		logger("Probing successful for ".$host, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Probing successful for ".$host, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $lrdd;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +195,7 @@ class Probe
 | 
			
		|||
		$profile_link = '';
 | 
			
		||||
 | 
			
		||||
		$links = self::lrdd($webbie);
 | 
			
		||||
		logger('webfingerDfrn: '.$webbie.':'.print_r($links, true), LOGGER_DATA);
 | 
			
		||||
		Logger::log('webfingerDfrn: '.$webbie.':'.print_r($links, true), LOGGER_DATA);
 | 
			
		||||
		if (count($links)) {
 | 
			
		||||
			foreach ($links as $link) {
 | 
			
		||||
				if ($link['@attributes']['rel'] === NAMESPACE_DFRN) {
 | 
			
		||||
| 
						 | 
				
			
			@ -253,7 +254,7 @@ class Probe
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$lrdd) {
 | 
			
		||||
			logger("No lrdd data found for ".$uri, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No lrdd data found for ".$uri, LOGGER_DEBUG);
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -285,7 +286,7 @@ class Probe
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!is_array($webfinger["links"])) {
 | 
			
		||||
			logger("No webfinger links found for ".$uri, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No webfinger links found for ".$uri, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -595,7 +596,7 @@ class Probe
 | 
			
		|||
				$lrdd = self::hostMeta($host);
 | 
			
		||||
			}
 | 
			
		||||
			if (!$lrdd) {
 | 
			
		||||
				logger('No XRD data was found for '.$uri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('No XRD data was found for '.$uri, LOGGER_DEBUG);
 | 
			
		||||
				return self::feed($uri);
 | 
			
		||||
			}
 | 
			
		||||
			$nick = array_pop($path_parts);
 | 
			
		||||
| 
						 | 
				
			
			@ -630,12 +631,12 @@ class Probe
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if (!$lrdd) {
 | 
			
		||||
				logger('No XRD data was found for '.$uri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('No XRD data was found for '.$uri, LOGGER_DEBUG);
 | 
			
		||||
				return self::mail($uri, $uid);
 | 
			
		||||
			}
 | 
			
		||||
			$addr = $uri;
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Uri ".$uri." was not detectable", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Uri ".$uri." was not detectable", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -680,7 +681,7 @@ class Probe
 | 
			
		|||
 | 
			
		||||
		$result = false;
 | 
			
		||||
 | 
			
		||||
		logger("Probing ".$uri, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Probing ".$uri, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (in_array($network, ["", Protocol::DFRN])) {
 | 
			
		||||
			$result = self::dfrn($webfinger);
 | 
			
		||||
| 
						 | 
				
			
			@ -716,7 +717,7 @@ class Probe
 | 
			
		|||
			$result["url"] = $uri;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger($uri." is ".$result["network"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log($uri." is ".$result["network"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (empty($result["baseurl"])) {
 | 
			
		||||
			$pos = strpos($result["url"], $host);
 | 
			
		||||
| 
						 | 
				
			
			@ -751,7 +752,7 @@ class Probe
 | 
			
		|||
		$webfinger = json_decode($data, true);
 | 
			
		||||
		if (is_array($webfinger)) {
 | 
			
		||||
			if (!isset($webfinger["links"])) {
 | 
			
		||||
				logger("No json webfinger links for ".$url, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("No json webfinger links for ".$url, LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			return $webfinger;
 | 
			
		||||
| 
						 | 
				
			
			@ -760,13 +761,13 @@ class Probe
 | 
			
		|||
		// If it is not JSON, maybe it is XML
 | 
			
		||||
		$xrd = XML::parseString($data, false);
 | 
			
		||||
		if (!is_object($xrd)) {
 | 
			
		||||
			logger("No webfinger data retrievable for ".$url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No webfinger data retrievable for ".$url, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$xrd_arr = XML::elementToArray($xrd);
 | 
			
		||||
		if (!isset($xrd_arr["xrd"]["link"])) {
 | 
			
		||||
			logger("No XML webfinger links for ".$url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No XML webfinger links for ".$url, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -815,13 +816,13 @@ class Probe
 | 
			
		|||
		}
 | 
			
		||||
		$content = $curlResult->getBody();
 | 
			
		||||
		if (!$content) {
 | 
			
		||||
			logger("Empty body for ".$noscrape_url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Empty body for ".$noscrape_url, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$json = json_decode($content, true);
 | 
			
		||||
		if (!is_array($json)) {
 | 
			
		||||
			logger("No json data for ".$noscrape_url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No json data for ".$noscrape_url, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -927,7 +928,7 @@ class Probe
 | 
			
		|||
	{
 | 
			
		||||
		$data = [];
 | 
			
		||||
 | 
			
		||||
		logger("Check profile ".$profile_link, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Check profile ".$profile_link, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// Fetch data via noscrape - this is faster
 | 
			
		||||
		$noscrape_url = str_replace(["/hcard/", "/profile/"], "/noscrape/", $profile_link);
 | 
			
		||||
| 
						 | 
				
			
			@ -961,7 +962,7 @@ class Probe
 | 
			
		|||
		$prof_data["fn"]           = defaults($data, 'name'   , null);
 | 
			
		||||
		$prof_data["key"]          = defaults($data, 'pubkey' , null);
 | 
			
		||||
 | 
			
		||||
		logger("Result for profile ".$profile_link.": ".print_r($prof_data, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Result for profile ".$profile_link.": ".print_r($prof_data, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $prof_data;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1632,7 +1633,7 @@ class Probe
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		$msgs = Email::poll($mbox, $uri);
 | 
			
		||||
		logger('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (!count($msgs)) {
 | 
			
		||||
			return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -1714,7 +1715,7 @@ class Probe
 | 
			
		|||
 | 
			
		||||
		$fixed = $scheme.$host.$port.$path.$query.$fragment;
 | 
			
		||||
 | 
			
		||||
		logger('Base: '.$base.' - Avatar: '.$avatar.' - Fixed: '.$fixed, LOGGER_DATA);
 | 
			
		||||
		Logger::log('Base: '.$base.' - Avatar: '.$avatar.' - Fixed: '.$fixed, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		return $fixed;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use Friendica\App;
 | 
			
		|||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
| 
						 | 
				
			
			@ -482,7 +483,7 @@ class Image
 | 
			
		|||
				break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//	logger('exif: ' . print_r($exif,true));
 | 
			
		||||
		//	Logger::log('exif: ' . print_r($exif,true));
 | 
			
		||||
		return $exif;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -726,7 +727,7 @@ class Image
 | 
			
		|||
	 */
 | 
			
		||||
	public static function guessType($filename, $fromcurl = false, $header = '')
 | 
			
		||||
	{
 | 
			
		||||
		logger('Image: guessType: '.$filename . ($fromcurl?' from curl headers':''), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Image: guessType: '.$filename . ($fromcurl?' from curl headers':''), LOGGER_DEBUG);
 | 
			
		||||
		$type = null;
 | 
			
		||||
		if ($fromcurl) {
 | 
			
		||||
			$a = get_app();
 | 
			
		||||
| 
						 | 
				
			
			@ -764,7 +765,7 @@ class Image
 | 
			
		|||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger('Image: guessType: type='.$type, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Image: guessType: type='.$type, LOGGER_DEBUG);
 | 
			
		||||
		return $type;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -890,7 +891,7 @@ class Image
 | 
			
		|||
		);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($r)) {
 | 
			
		||||
			logger("Can't detect user data for uid ".$uid, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Can't detect user data for uid ".$uid, LOGGER_DEBUG);
 | 
			
		||||
			return([]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -901,10 +902,10 @@ class Image
 | 
			
		|||
		/// $community_page   = (($r[0]['page-flags'] == Contact::PAGE_COMMUNITY) ? true : false);
 | 
			
		||||
 | 
			
		||||
		if ((strlen($imagedata) == 0) && ($url == "")) {
 | 
			
		||||
			logger("No image data and no url provided", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No image data and no url provided", LOGGER_DEBUG);
 | 
			
		||||
			return([]);
 | 
			
		||||
		} elseif (strlen($imagedata) == 0) {
 | 
			
		||||
			logger("Uploading picture from ".$url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Uploading picture from ".$url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$stamp1 = microtime(true);
 | 
			
		||||
			$imagedata = @file_get_contents($url);
 | 
			
		||||
| 
						 | 
				
			
			@ -914,7 +915,7 @@ class Image
 | 
			
		|||
		$maximagesize = Config::get('system', 'maximagesize');
 | 
			
		||||
 | 
			
		||||
		if (($maximagesize) && (strlen($imagedata) > $maximagesize)) {
 | 
			
		||||
			logger("Image exceeds size limit of ".$maximagesize, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Image exceeds size limit of ".$maximagesize, LOGGER_DEBUG);
 | 
			
		||||
			return([]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -928,7 +929,7 @@ class Image
 | 
			
		|||
 | 
			
		||||
		if (!isset($data["mime"])) {
 | 
			
		||||
			unlink($tempfile);
 | 
			
		||||
			logger("File is no picture", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("File is no picture", LOGGER_DEBUG);
 | 
			
		||||
			return([]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -936,7 +937,7 @@ class Image
 | 
			
		|||
 | 
			
		||||
		if (!$Image->isValid()) {
 | 
			
		||||
			unlink($tempfile);
 | 
			
		||||
			logger("Picture is no valid picture", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Picture is no valid picture", LOGGER_DEBUG);
 | 
			
		||||
			return([]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -967,7 +968,7 @@ class Image
 | 
			
		|||
		$r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 0, 0, $defperm);
 | 
			
		||||
 | 
			
		||||
		if (!$r) {
 | 
			
		||||
			logger("Picture couldn't be stored", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Picture couldn't be stored", LOGGER_DEBUG);
 | 
			
		||||
			return([]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ use Friendica\Content\Feature;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -487,10 +488,10 @@ class Post extends BaseObject
 | 
			
		|||
	{
 | 
			
		||||
		$item_id = $item->getId();
 | 
			
		||||
		if (!$item_id) {
 | 
			
		||||
			logger('[ERROR] Post::addChild : Item has no ID!!', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('[ERROR] Post::addChild : Item has no ID!!', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		} elseif ($this->getChild($item->getId())) {
 | 
			
		||||
			logger('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		/*
 | 
			
		||||
| 
						 | 
				
			
			@ -584,7 +585,7 @@ class Post extends BaseObject
 | 
			
		|||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger('[WARN] Item::removeChild : Item is not a child (' . $id . ').', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('[WARN] Item::removeChild : Item is not a child (' . $id . ').', LOGGER_DEBUG);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -650,7 +651,7 @@ class Post extends BaseObject
 | 
			
		|||
	public function getDataValue($name)
 | 
			
		||||
	{
 | 
			
		||||
		if (!isset($this->data[$name])) {
 | 
			
		||||
			// logger('[ERROR] Item::getDataValue : Item has no value name "'. $name .'".', LOGGER_DEBUG);
 | 
			
		||||
			// Logger::log('[ERROR] Item::getDataValue : Item has no value name "'. $name .'".', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -667,7 +668,7 @@ class Post extends BaseObject
 | 
			
		|||
	private function setTemplate($name)
 | 
			
		||||
	{
 | 
			
		||||
		if (!x($this->available_templates, $name)) {
 | 
			
		||||
			logger('[ERROR] Item::setTemplate : Template not available ("' . $name . '").', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('[ERROR] Item::setTemplate : Template not available ("' . $name . '").', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Object;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Object\Post;
 | 
			
		||||
use Friendica\Util\Security;
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +78,7 @@ class Thread extends BaseObject
 | 
			
		|||
				$this->writable = $writable;
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				logger('[ERROR] Conversation::setMode : Unhandled mode ('. $mode .').', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('[ERROR] Conversation::setMode : Unhandled mode ('. $mode .').', LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -137,12 +138,12 @@ class Thread extends BaseObject
 | 
			
		|||
		$item_id = $item->getId();
 | 
			
		||||
 | 
			
		||||
		if (!$item_id) {
 | 
			
		||||
			logger('[ERROR] Conversation::addThread : Item has no ID!!', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('[ERROR] Conversation::addThread : Item has no ID!!', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($this->getParent($item->getId())) {
 | 
			
		||||
			logger('[WARN] Conversation::addThread : Thread already exists ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('[WARN] Conversation::addThread : Thread already exists ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -150,12 +151,12 @@ class Thread extends BaseObject
 | 
			
		|||
		 * Only add will be displayed
 | 
			
		||||
		 */
 | 
			
		||||
		if ($item->getDataValue('network') === Protocol::MAIL && local_user() != $item->getDataValue('uid')) {
 | 
			
		||||
			logger('[WARN] Conversation::addThread : Thread is a mail ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('[WARN] Conversation::addThread : Thread is a mail ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($item->getDataValue('verb') === ACTIVITY_LIKE || $item->getDataValue('verb') === ACTIVITY_DISLIKE) {
 | 
			
		||||
			logger('[WARN] Conversation::addThread : Thread is a (dis)like ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('[WARN] Conversation::addThread : Thread is a (dis)like ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +190,7 @@ class Thread extends BaseObject
 | 
			
		|||
			$item_data = $item->getTemplateData($conv_responses);
 | 
			
		||||
 | 
			
		||||
			if (!$item_data) {
 | 
			
		||||
				logger('[ERROR] Conversation::getTemplateData : Failed to get item template data ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('[ERROR] Conversation::getTemplateData : Failed to get item template data ('. $item->getId() .').', LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			$result[] = $item_data;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Protocol\ActivityPub;
 | 
			
		||||
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Model\Conversation;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +141,7 @@ class Processor
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (($activity['id'] != $activity['reply-to-id']) && !Item::exists(['uri' => $activity['reply-to-id']])) {
 | 
			
		||||
			logger('Parent ' . $activity['reply-to-id'] . ' not found. Try to refetch it.');
 | 
			
		||||
			Logger::log('Parent ' . $activity['reply-to-id'] . ' not found. Try to refetch it.');
 | 
			
		||||
			self::fetchMissingActivity($activity['reply-to-id'], $activity);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +159,7 @@ class Processor
 | 
			
		|||
	{
 | 
			
		||||
		$owner = Contact::getIdForURL($activity['actor']);
 | 
			
		||||
 | 
			
		||||
		logger('Deleting item ' . $activity['object_id'] . ' from ' . $owner, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Deleting item ' . $activity['object_id'] . ' from ' . $owner, LOGGER_DEBUG);
 | 
			
		||||
		Item::delete(['uri' => $activity['object_id'], 'owner-id' => $owner]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +212,7 @@ class Processor
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		$event_id = Event::store($event);
 | 
			
		||||
		logger('Event '.$event_id.' was stored', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Event '.$event_id.' was stored', LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +226,7 @@ class Processor
 | 
			
		|||
		/// @todo What to do with $activity['context']?
 | 
			
		||||
 | 
			
		||||
		if (($item['gravity'] != GRAVITY_PARENT) && !Item::exists(['uri' => $item['parent-uri']])) {
 | 
			
		||||
			logger('Parent ' . $item['parent-uri'] . ' not found, message will be discarded.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Parent ' . $item['parent-uri'] . ' not found, message will be discarded.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +239,7 @@ class Processor
 | 
			
		|||
			$item['owner-link'] = $activity['actor'];
 | 
			
		||||
			$item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, true);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('Ignoring actor because of thread completion.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Ignoring actor because of thread completion.', LOGGER_DEBUG);
 | 
			
		||||
			$item['owner-link'] = $item['author-link'];
 | 
			
		||||
			$item['owner-id'] = $item['author-id'];
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -284,7 +285,7 @@ class Processor
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			$item_id = Item::insert($item);
 | 
			
		||||
			logger('Storing for user ' . $item['uid'] . ': ' . $item_id);
 | 
			
		||||
			Logger::log('Storing for user ' . $item['uid'] . ': ' . $item_id);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -302,7 +303,7 @@ class Processor
 | 
			
		|||
 | 
			
		||||
		$object = ActivityPub::fetchContent($url);
 | 
			
		||||
		if (empty($object)) {
 | 
			
		||||
			logger('Activity ' . $url . ' was not fetchable, aborting.');
 | 
			
		||||
			Logger::log('Activity ' . $url . ' was not fetchable, aborting.');
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +323,7 @@ class Processor
 | 
			
		|||
		$ldactivity['thread-completion'] = true;
 | 
			
		||||
 | 
			
		||||
		ActivityPub\Receiver::processActivity($ldactivity);
 | 
			
		||||
		logger('Activity ' . $url . ' had been fetched and processed.');
 | 
			
		||||
		Logger::log('Activity ' . $url . ' had been fetched and processed.');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -360,7 +361,7 @@ class Processor
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		DBA::update('contact', ['hub-verify' => $activity['id']], ['id' => $cid]);
 | 
			
		||||
		logger('Follow user ' . $uid . ' from contact ' . $cid . ' with id ' . $activity['id']);
 | 
			
		||||
		Logger::log('Follow user ' . $uid . ' from contact ' . $cid . ' with id ' . $activity['id']);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -374,7 +375,7 @@ class Processor
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Updating profile for ' . $activity['object_id'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Updating profile for ' . $activity['object_id'], LOGGER_DEBUG);
 | 
			
		||||
		APContact::getByURL($activity['object_id'], true);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -386,12 +387,12 @@ class Processor
 | 
			
		|||
	public static function deletePerson($activity)
 | 
			
		||||
	{
 | 
			
		||||
		if (empty($activity['object_id']) || empty($activity['actor'])) {
 | 
			
		||||
			logger('Empty object id or actor.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty object id or actor.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($activity['object_id'] != $activity['actor']) {
 | 
			
		||||
			logger('Object id does not match actor.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Object id does not match actor.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -401,7 +402,7 @@ class Processor
 | 
			
		|||
		}
 | 
			
		||||
		DBA::close($contacts);
 | 
			
		||||
 | 
			
		||||
		logger('Deleted contact ' . $activity['object_id'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Deleted contact ' . $activity['object_id'], LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -420,7 +421,7 @@ class Processor
 | 
			
		|||
 | 
			
		||||
		$cid = Contact::getIdForURL($activity['actor'], $uid);
 | 
			
		||||
		if (empty($cid)) {
 | 
			
		||||
			logger('No contact found for ' . $activity['actor'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No contact found for ' . $activity['actor'], LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -435,7 +436,7 @@ class Processor
 | 
			
		|||
 | 
			
		||||
		$condition = ['id' => $cid];
 | 
			
		||||
		DBA::update('contact', $fields, $condition);
 | 
			
		||||
		logger('Accept contact request from contact ' . $cid . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Accept contact request from contact ' . $cid . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -454,7 +455,7 @@ class Processor
 | 
			
		|||
 | 
			
		||||
		$cid = Contact::getIdForURL($activity['actor'], $uid);
 | 
			
		||||
		if (empty($cid)) {
 | 
			
		||||
			logger('No contact found for ' . $activity['actor'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No contact found for ' . $activity['actor'], LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -462,9 +463,9 @@ class Processor
 | 
			
		|||
 | 
			
		||||
		if (DBA::exists('contact', ['id' => $cid, 'rel' => Contact::SHARING, 'pending' => true])) {
 | 
			
		||||
			Contact::remove($cid);
 | 
			
		||||
			logger('Rejected contact request from contact ' . $cid . ' for user ' . $uid . ' - contact had been removed.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Rejected contact request from contact ' . $cid . ' for user ' . $uid . ' - contact had been removed.', LOGGER_DEBUG);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('Rejected contact request from contact ' . $cid . ' for user ' . $uid . '.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Rejected contact request from contact ' . $cid . ' for user ' . $uid . '.', LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -507,7 +508,7 @@ class Processor
 | 
			
		|||
 | 
			
		||||
		$cid = Contact::getIdForURL($activity['actor'], $uid);
 | 
			
		||||
		if (empty($cid)) {
 | 
			
		||||
			logger('No contact found for ' . $activity['actor'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No contact found for ' . $activity['actor'], LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -519,7 +520,7 @@ class Processor
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		Contact::removeFollower($owner, $contact);
 | 
			
		||||
		logger('Undo following request from contact ' . $cid . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Undo following request from contact ' . $cid . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -534,7 +535,7 @@ class Processor
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Change existing contact ' . $cid . ' from ' . $contact['network'] . ' to ActivityPub.');
 | 
			
		||||
		Logger::log('Change existing contact ' . $cid . ' from ' . $contact['network'] . ' to ActivityPub.');
 | 
			
		||||
		Contact::updateFromProbe($cid, Protocol::ACTIVITYPUB);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Protocol\ActivityPub;
 | 
			
		|||
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\HTTPSignature;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Model\Contact;
 | 
			
		||||
use Friendica\Model\APContact;
 | 
			
		||||
| 
						 | 
				
			
			@ -59,16 +60,16 @@ class Receiver
 | 
			
		|||
	{
 | 
			
		||||
		$http_signer = HTTPSignature::getSigner($body, $header);
 | 
			
		||||
		if (empty($http_signer)) {
 | 
			
		||||
			logger('Invalid HTTP signature, message will be discarded.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Invalid HTTP signature, message will be discarded.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('HTTP signature is signed by ' . $http_signer, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('HTTP signature is signed by ' . $http_signer, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$activity = json_decode($body, true);
 | 
			
		||||
 | 
			
		||||
		if (empty($activity)) {
 | 
			
		||||
			logger('Invalid body.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Invalid body.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,31 +77,31 @@ class Receiver
 | 
			
		|||
 | 
			
		||||
		$actor = JsonLD::fetchElement($ldactivity, 'as:actor');
 | 
			
		||||
 | 
			
		||||
		logger('Message for user ' . $uid . ' is from actor ' . $actor, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Message for user ' . $uid . ' is from actor ' . $actor, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (LDSignature::isSigned($activity)) {
 | 
			
		||||
			$ld_signer = LDSignature::getSigner($activity);
 | 
			
		||||
			if (empty($ld_signer)) {
 | 
			
		||||
				logger('Invalid JSON-LD signature from ' . $actor, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Invalid JSON-LD signature from ' . $actor, LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
			if (!empty($ld_signer && ($actor == $http_signer))) {
 | 
			
		||||
				logger('The HTTP and the JSON-LD signature belong to ' . $ld_signer, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('The HTTP and the JSON-LD signature belong to ' . $ld_signer, LOGGER_DEBUG);
 | 
			
		||||
				$trust_source = true;
 | 
			
		||||
			} elseif (!empty($ld_signer)) {
 | 
			
		||||
				logger('JSON-LD signature is signed by ' . $ld_signer, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('JSON-LD signature is signed by ' . $ld_signer, LOGGER_DEBUG);
 | 
			
		||||
				$trust_source = true;
 | 
			
		||||
			} elseif ($actor == $http_signer) {
 | 
			
		||||
				logger('Bad JSON-LD signature, but HTTP signer fits the actor.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Bad JSON-LD signature, but HTTP signer fits the actor.', LOGGER_DEBUG);
 | 
			
		||||
				$trust_source = true;
 | 
			
		||||
			} else {
 | 
			
		||||
				logger('Invalid JSON-LD signature and the HTTP signer is different.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Invalid JSON-LD signature and the HTTP signer is different.', LOGGER_DEBUG);
 | 
			
		||||
				$trust_source = false;
 | 
			
		||||
			}
 | 
			
		||||
		} elseif ($actor == $http_signer) {
 | 
			
		||||
			logger('Trusting post without JSON-LD signature, The actor fits the HTTP signer.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Trusting post without JSON-LD signature, The actor fits the HTTP signer.', LOGGER_DEBUG);
 | 
			
		||||
			$trust_source = true;
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('No JSON-LD signature, different actor.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No JSON-LD signature, different actor.', LOGGER_DEBUG);
 | 
			
		||||
			$trust_source = false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +160,7 @@ class Receiver
 | 
			
		|||
	{
 | 
			
		||||
		$actor = JsonLD::fetchElement($activity, 'as:actor');
 | 
			
		||||
		if (empty($actor)) {
 | 
			
		||||
			logger('Empty actor', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty actor', LOGGER_DEBUG);
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -175,11 +176,11 @@ class Receiver
 | 
			
		|||
			$receivers = array_merge($receivers, $additional);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Receivers: ' . json_encode($receivers), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Receivers: ' . json_encode($receivers), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$object_id = JsonLD::fetchElement($activity, 'as:object');
 | 
			
		||||
		if (empty($object_id)) {
 | 
			
		||||
			logger('No object found', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No object found', LOGGER_DEBUG);
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +193,7 @@ class Receiver
 | 
			
		|||
			}
 | 
			
		||||
			$object_data = self::fetchObject($object_id, $activity['as:object'], $trust_source);
 | 
			
		||||
			if (empty($object_data)) {
 | 
			
		||||
				logger("Object data couldn't be processed", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Object data couldn't be processed", LOGGER_DEBUG);
 | 
			
		||||
				return [];
 | 
			
		||||
			}
 | 
			
		||||
			// We had been able to retrieve the object data - so we can trust the source
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +230,7 @@ class Receiver
 | 
			
		|||
		$object_data['actor'] = $actor;
 | 
			
		||||
		$object_data['receiver'] = array_merge(defaults($object_data, 'receiver', []), $receivers);
 | 
			
		||||
 | 
			
		||||
		logger('Processing ' . $object_data['type'] . ' ' . $object_data['object_type'] . ' ' . $object_data['id'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Processing ' . $object_data['type'] . ' ' . $object_data['object_type'] . ' ' . $object_data['id'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $object_data;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -272,17 +273,17 @@ class Receiver
 | 
			
		|||
	{
 | 
			
		||||
		$type = JsonLD::fetchElement($activity, '@type');
 | 
			
		||||
		if (!$type) {
 | 
			
		||||
			logger('Empty type', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty type', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!JsonLD::fetchElement($activity, 'as:object')) {
 | 
			
		||||
			logger('Empty object', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty object', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!JsonLD::fetchElement($activity, 'as:actor')) {
 | 
			
		||||
			logger('Empty actor', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty actor', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -290,12 +291,12 @@ class Receiver
 | 
			
		|||
		// $trust_source is called by reference and is set to true if the content was retrieved successfully
 | 
			
		||||
		$object_data = self::prepareObjectData($activity, $uid, $trust_source);
 | 
			
		||||
		if (empty($object_data)) {
 | 
			
		||||
			logger('No object data found', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No object data found', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$trust_source) {
 | 
			
		||||
			logger('No trust for activity type "' . $type . '", so we quit now.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No trust for activity type "' . $type . '", so we quit now.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -384,7 +385,7 @@ class Receiver
 | 
			
		|||
				break;
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
				logger('Unknown activity: ' . $type . ' ' . $object_data['object_type'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Unknown activity: ' . $type . ' ' . $object_data['object_type'], LOGGER_DEBUG);
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -414,9 +415,9 @@ class Receiver
 | 
			
		|||
			$profile = APContact::getByURL($actor);
 | 
			
		||||
			$followers = defaults($profile, 'followers', '');
 | 
			
		||||
 | 
			
		||||
			logger('Actor: ' . $actor . ' - Followers: ' . $followers, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Actor: ' . $actor . ' - Followers: ' . $followers, LOGGER_DEBUG);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('Empty actor', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty actor', LOGGER_DEBUG);
 | 
			
		||||
			$followers = '';
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -486,7 +487,7 @@ class Receiver
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Switch contact ' . $cid . ' (' . $profile['url'] . ') for user ' . $uid . ' to ActivityPub');
 | 
			
		||||
		Logger::log('Switch contact ' . $cid . ' (' . $profile['url'] . ') for user ' . $uid . ' to ActivityPub');
 | 
			
		||||
 | 
			
		||||
		$photo = defaults($profile, 'photo', null);
 | 
			
		||||
		unset($profile['photo']);
 | 
			
		||||
| 
						 | 
				
			
			@ -500,7 +501,7 @@ class Receiver
 | 
			
		|||
		// Send a new follow request to be sure that the connection still exists
 | 
			
		||||
		if (($uid != 0) && DBA::exists('contact', ['id' => $cid, 'rel' => [Contact::SHARING, Contact::FRIEND]])) {
 | 
			
		||||
			ActivityPub\Transmitter::sendActivity('Follow', $profile['url'], $uid);
 | 
			
		||||
			logger('Send a new follow request to ' . $profile['url'] . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Send a new follow request to ' . $profile['url'] . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -570,27 +571,27 @@ class Receiver
 | 
			
		|||
			$data = ActivityPub::fetchContent($object_id);
 | 
			
		||||
			if (!empty($data)) {
 | 
			
		||||
				$object = JsonLD::compact($data);
 | 
			
		||||
				logger('Fetched content for ' . $object_id, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Fetched content for ' . $object_id, LOGGER_DEBUG);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger('Empty content for ' . $object_id . ', check if content is available locally.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Empty content for ' . $object_id . ', check if content is available locally.', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				$item = Item::selectFirst([], ['uri' => $object_id]);
 | 
			
		||||
				if (!DBA::isResult($item)) {
 | 
			
		||||
					logger('Object with url ' . $object_id . ' was not found locally.', LOGGER_DEBUG);
 | 
			
		||||
					Logger::log('Object with url ' . $object_id . ' was not found locally.', LOGGER_DEBUG);
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				logger('Using already stored item for url ' . $object_id, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Using already stored item for url ' . $object_id, LOGGER_DEBUG);
 | 
			
		||||
				$data = ActivityPub\Transmitter::createNote($item);
 | 
			
		||||
				$object = JsonLD::compact($data);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('Using original object for url ' . $object_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Using original object for url ' . $object_id, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$type = JsonLD::fetchElement($object, '@type');
 | 
			
		||||
 | 
			
		||||
		if (empty($type)) {
 | 
			
		||||
			logger('Empty type', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Empty type', LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -606,7 +607,7 @@ class Receiver
 | 
			
		|||
			return self::fetchObject($object_id);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Unhandled object type: ' . $type, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Unhandled object type: ' . $type, LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Protocol\ActivityPub;
 | 
			
		|||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Util\HTTPSignature;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
| 
						 | 
				
			
			@ -1015,7 +1016,7 @@ class Transmitter
 | 
			
		|||
 | 
			
		||||
		$signed = LDSignature::sign($data, $owner);
 | 
			
		||||
 | 
			
		||||
		logger('Deliver profile deletion for user ' . $uid . ' to ' . $inbox . ' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Deliver profile deletion for user ' . $uid . ' to ' . $inbox . ' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
		return HTTPSignature::transmit($signed, $inbox, $uid);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1044,7 +1045,7 @@ class Transmitter
 | 
			
		|||
 | 
			
		||||
		$signed = LDSignature::sign($data, $owner);
 | 
			
		||||
 | 
			
		||||
		logger('Deliver profile deletion for user ' . $uid . ' to ' . $inbox . ' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Deliver profile deletion for user ' . $uid . ' to ' . $inbox . ' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
		return HTTPSignature::transmit($signed, $inbox, $uid);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1073,7 +1074,7 @@ class Transmitter
 | 
			
		|||
 | 
			
		||||
		$signed = LDSignature::sign($data, $owner);
 | 
			
		||||
 | 
			
		||||
		logger('Deliver profile update for user ' . $uid . ' to ' . $inbox . ' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Deliver profile update for user ' . $uid . ' to ' . $inbox . ' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
		return HTTPSignature::transmit($signed, $inbox, $uid);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1098,7 +1099,7 @@ class Transmitter
 | 
			
		|||
			'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()],
 | 
			
		||||
			'to' => $profile['url']];
 | 
			
		||||
 | 
			
		||||
		logger('Sending activity ' . $activity . ' to ' . $target . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Sending activity ' . $activity . ' to ' . $target . ' for user ' . $uid, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$signed = LDSignature::sign($data, $owner);
 | 
			
		||||
		HTTPSignature::transmit($signed, $profile['inbox'], $uid);
 | 
			
		||||
| 
						 | 
				
			
			@ -1126,7 +1127,7 @@ class Transmitter
 | 
			
		|||
			'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()],
 | 
			
		||||
			'to' => $profile['url']];
 | 
			
		||||
 | 
			
		||||
		logger('Sending accept to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Sending accept to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$signed = LDSignature::sign($data, $owner);
 | 
			
		||||
		HTTPSignature::transmit($signed, $profile['inbox'], $uid);
 | 
			
		||||
| 
						 | 
				
			
			@ -1154,7 +1155,7 @@ class Transmitter
 | 
			
		|||
			'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()],
 | 
			
		||||
			'to' => $profile['url']];
 | 
			
		||||
 | 
			
		||||
		logger('Sending reject to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Sending reject to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$signed = LDSignature::sign($data, $owner);
 | 
			
		||||
		HTTPSignature::transmit($signed, $profile['inbox'], $uid);
 | 
			
		||||
| 
						 | 
				
			
			@ -1183,7 +1184,7 @@ class Transmitter
 | 
			
		|||
			'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()],
 | 
			
		||||
			'to' => $profile['url']];
 | 
			
		||||
 | 
			
		||||
		logger('Sending undo to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Sending undo to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$signed = LDSignature::sign($data, $owner);
 | 
			
		||||
		HTTPSignature::transmit($signed, $profile['inbox'], $uid);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ use Friendica\Content\Text\HTML;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +176,7 @@ class DFRN
 | 
			
		|||
		);
 | 
			
		||||
 | 
			
		||||
		if (! DBA::isResult($r)) {
 | 
			
		||||
			logger(sprintf('No contact found for nickname=%d', $owner_nick), LOGGER_WARNING);
 | 
			
		||||
			Logger::log(sprintf('No contact found for nickname=%d', $owner_nick), LOGGER_WARNING);
 | 
			
		||||
			killme();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +212,7 @@ class DFRN
 | 
			
		|||
			);
 | 
			
		||||
 | 
			
		||||
			if (! DBA::isResult($r)) {
 | 
			
		||||
				logger(sprintf('No contact found for uid=%d', $owner_id), LOGGER_WARNING);
 | 
			
		||||
				Logger::log(sprintf('No contact found for uid=%d', $owner_id), LOGGER_WARNING);
 | 
			
		||||
				killme();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1171,7 +1172,7 @@ class DFRN
 | 
			
		|||
		if (!$dissolve && !$legacy_transport) {
 | 
			
		||||
			$curlResult = self::transmit($owner, $contact, $atom);
 | 
			
		||||
			if ($curlResult >= 200) {
 | 
			
		||||
				logger('Delivery via Diaspora transport layer was successful with status ' . $curlResult);
 | 
			
		||||
				Logger::log('Delivery via Diaspora transport layer was successful with status ' . $curlResult);
 | 
			
		||||
				return $curlResult;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1188,7 +1189,7 @@ class DFRN
 | 
			
		|||
		$rino = Config::get('system', 'rino_encrypt');
 | 
			
		||||
		$rino = intval($rino);
 | 
			
		||||
 | 
			
		||||
		logger("Local rino version: ". $rino, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Local rino version: ". $rino, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$ssl_val = intval(Config::get('system', 'ssl_policy'));
 | 
			
		||||
		$ssl_policy = '';
 | 
			
		||||
| 
						 | 
				
			
			@ -1208,7 +1209,7 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
		$url = $contact['notify'] . '&dfrn_id=' . $idtosend . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . (($rino) ? '&rino='.$rino : '');
 | 
			
		||||
 | 
			
		||||
		logger('dfrn_deliver: ' . $url);
 | 
			
		||||
		Logger::log('dfrn_deliver: ' . $url);
 | 
			
		||||
 | 
			
		||||
		$curlResult = Network::curl($url);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1225,7 +1226,7 @@ class DFRN
 | 
			
		|||
			return -3; // timed out
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('dfrn_deliver: ' . $xml, LOGGER_DATA);
 | 
			
		||||
		Logger::log('dfrn_deliver: ' . $xml, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		if (empty($xml)) {
 | 
			
		||||
			Contact::markForArchival($contact);
 | 
			
		||||
| 
						 | 
				
			
			@ -1233,8 +1234,8 @@ class DFRN
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (strpos($xml, '<?xml') === false) {
 | 
			
		||||
			logger('dfrn_deliver: no valid XML returned');
 | 
			
		||||
			logger('dfrn_deliver: returned XML: ' . $xml, LOGGER_DATA);
 | 
			
		||||
			Logger::log('dfrn_deliver: no valid XML returned');
 | 
			
		||||
			Logger::log('dfrn_deliver: returned XML: ' . $xml, LOGGER_DATA);
 | 
			
		||||
			Contact::markForArchival($contact);
 | 
			
		||||
			return 3;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1261,7 +1262,7 @@ class DFRN
 | 
			
		|||
		$rino_remote_version = intval($res->rino);
 | 
			
		||||
		$page         = (($owner['page-flags'] == Contact::PAGE_COMMUNITY) ? 1 : 0);
 | 
			
		||||
 | 
			
		||||
		logger("Remote rino version: ".$rino_remote_version." for ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Remote rino version: ".$rino_remote_version." for ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if ($owner['page-flags'] == Contact::PAGE_PRVGROUP) {
 | 
			
		||||
			$page = 2;
 | 
			
		||||
| 
						 | 
				
			
			@ -1297,7 +1298,7 @@ class DFRN
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($final_dfrn_id != $orig_id) {
 | 
			
		||||
			logger('dfrn_deliver: wrong dfrn_id.');
 | 
			
		||||
			Logger::log('dfrn_deliver: wrong dfrn_id.');
 | 
			
		||||
			// did not decode properly - cannot trust this site
 | 
			
		||||
			Contact::markForArchival($contact);
 | 
			
		||||
			return 3;
 | 
			
		||||
| 
						 | 
				
			
			@ -1325,7 +1326,7 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
		if ($rino > 0 && $rino_remote_version > 0 && (! $dissolve)) {
 | 
			
		||||
			logger('rino version: '. $rino_remote_version);
 | 
			
		||||
			Logger::log('rino version: '. $rino_remote_version);
 | 
			
		||||
 | 
			
		||||
			switch ($rino_remote_version) {
 | 
			
		||||
				case 1:
 | 
			
		||||
| 
						 | 
				
			
			@ -1334,7 +1335,7 @@ class DFRN
 | 
			
		|||
					break;
 | 
			
		||||
 | 
			
		||||
				default:
 | 
			
		||||
					logger("rino: invalid requested version '$rino_remote_version'");
 | 
			
		||||
					Logger::log("rino: invalid requested version '$rino_remote_version'");
 | 
			
		||||
					Contact::markForArchival($contact);
 | 
			
		||||
					return -8;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1359,19 +1360,19 @@ class DFRN
 | 
			
		|||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger('md5 rawkey ' . md5($postvars['key']));
 | 
			
		||||
			Logger::log('md5 rawkey ' . md5($postvars['key']));
 | 
			
		||||
 | 
			
		||||
			$postvars['key'] = bin2hex($postvars['key']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		logger('dfrn_deliver: ' . "SENDING: " . print_r($postvars, true), LOGGER_DATA);
 | 
			
		||||
		Logger::log('dfrn_deliver: ' . "SENDING: " . print_r($postvars, true), LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		$postResult = Network::post($contact['notify'], $postvars);
 | 
			
		||||
 | 
			
		||||
		$xml = $postResult->getBody();
 | 
			
		||||
 | 
			
		||||
		logger('dfrn_deliver: ' . "RECEIVED: " . $xml, LOGGER_DATA);
 | 
			
		||||
		Logger::log('dfrn_deliver: ' . "RECEIVED: " . $xml, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		$curl_stat = $postResult->getReturnCode();
 | 
			
		||||
		if (empty($curl_stat) || empty($xml)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1385,8 +1386,8 @@ class DFRN
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (strpos($xml, '<?xml') === false) {
 | 
			
		||||
			logger('dfrn_deliver: phase 2: no valid XML returned');
 | 
			
		||||
			logger('dfrn_deliver: phase 2: returned XML: ' . $xml, LOGGER_DATA);
 | 
			
		||||
			Logger::log('dfrn_deliver: phase 2: no valid XML returned');
 | 
			
		||||
			Logger::log('dfrn_deliver: phase 2: returned XML: ' . $xml, LOGGER_DATA);
 | 
			
		||||
			Contact::markForArchival($contact);
 | 
			
		||||
			return 3;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1404,7 +1405,7 @@ class DFRN
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!empty($res->message)) {
 | 
			
		||||
			logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (($res->status >= 200) && ($res->status <= 299)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1429,14 +1430,14 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
		if (!$public_batch) {
 | 
			
		||||
			if (empty($contact['addr'])) {
 | 
			
		||||
				logger('Empty contact handle for ' . $contact['id'] . ' - ' . $contact['url'] . ' - trying to update it.');
 | 
			
		||||
				Logger::log('Empty contact handle for ' . $contact['id'] . ' - ' . $contact['url'] . ' - trying to update it.');
 | 
			
		||||
				if (Contact::updateFromProbe($contact['id'])) {
 | 
			
		||||
					$new_contact = DBA::selectFirst('contact', ['addr'], ['id' => $contact['id']]);
 | 
			
		||||
					$contact['addr'] = $new_contact['addr'];
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (empty($contact['addr'])) {
 | 
			
		||||
					logger('Unable to find contact handle for ' . $contact['id'] . ' - ' . $contact['url']);
 | 
			
		||||
					Logger::log('Unable to find contact handle for ' . $contact['id'] . ' - ' . $contact['url']);
 | 
			
		||||
					Contact::markForArchival($contact);
 | 
			
		||||
					return -21;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -1444,7 +1445,7 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
			$fcontact = Diaspora::personByHandle($contact['addr']);
 | 
			
		||||
			if (empty($fcontact)) {
 | 
			
		||||
				logger('Unable to find contact details for ' . $contact['id'] . ' - ' . $contact['addr']);
 | 
			
		||||
				Logger::log('Unable to find contact details for ' . $contact['id'] . ' - ' . $contact['addr']);
 | 
			
		||||
				Contact::markForArchival($contact);
 | 
			
		||||
				return -22;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1473,7 +1474,7 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
		$curl_stat = $postResult->getReturnCode();
 | 
			
		||||
		if (empty($curl_stat) || empty($xml)) {
 | 
			
		||||
			logger('Empty answer from ' . $contact['id'] . ' - ' . $dest_url);
 | 
			
		||||
			Logger::log('Empty answer from ' . $contact['id'] . ' - ' . $dest_url);
 | 
			
		||||
			Contact::markForArchival($contact);
 | 
			
		||||
			return -9; // timed out
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1484,8 +1485,8 @@ class DFRN
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (strpos($xml, '<?xml') === false) {
 | 
			
		||||
			logger('No valid XML returned from ' . $contact['id'] . ' - ' . $dest_url);
 | 
			
		||||
			logger('Returned XML: ' . $xml, LOGGER_DATA);
 | 
			
		||||
			Logger::log('No valid XML returned from ' . $contact['id'] . ' - ' . $dest_url);
 | 
			
		||||
			Logger::log('Returned XML: ' . $xml, LOGGER_DATA);
 | 
			
		||||
			Contact::markForArchival($contact);
 | 
			
		||||
			return 3;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1498,7 +1499,7 @@ class DFRN
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!empty($res->message)) {
 | 
			
		||||
			logger('Transmit to ' . $dest_url . ' returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Transmit to ' . $dest_url . ' returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (($res->status >= 200) && ($res->status <= 299)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1525,7 +1526,7 @@ class DFRN
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('updating birthday: ' . $birthday . ' for contact ' . $contact['id']);
 | 
			
		||||
		Logger::log('updating birthday: ' . $birthday . ' for contact ' . $contact['id']);
 | 
			
		||||
 | 
			
		||||
		$bdtext = L10n::t('%s\'s birthday', $contact['name']);
 | 
			
		||||
		$bdtext2 = L10n::t('Happy Birthday %s', ' [url=' . $contact['url'] . ']' . $contact['name'] . '[/url]');
 | 
			
		||||
| 
						 | 
				
			
			@ -1575,7 +1576,7 @@ class DFRN
 | 
			
		|||
			$author["network"] = $contact_old["network"];
 | 
			
		||||
		} else {
 | 
			
		||||
			if (!$onlyfetch) {
 | 
			
		||||
				logger("Contact ".$author["link"]." wasn't found for user ".$importer["importer_uid"]." XML: ".$xml, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Contact ".$author["link"]." wasn't found for user ".$importer["importer_uid"]." XML: ".$xml, LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			$author["contact-unknown"] = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -1624,11 +1625,11 @@ class DFRN
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (empty($author['avatar'])) {
 | 
			
		||||
			logger('Empty author: ' . $xml);
 | 
			
		||||
			Logger::log('Empty author: ' . $xml);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (DBA::isResult($contact_old) && !$onlyfetch) {
 | 
			
		||||
			logger("Check if contact details for contact " . $contact_old["id"] . " (" . $contact_old["nick"] . ") have to be updated.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Check if contact details for contact " . $contact_old["id"] . " (" . $contact_old["nick"] . ") have to be updated.", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$poco = ["url" => $contact_old["url"]];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1689,7 +1690,7 @@ class DFRN
 | 
			
		|||
			// If the "hide" element is present then the profile isn't searchable.
 | 
			
		||||
			$hide = intval(XML::getFirstNodeValue($xpath, $element . "/dfrn:hide/text()", $context) == "true");
 | 
			
		||||
 | 
			
		||||
			logger("Hidden status for contact " . $contact_old["url"] . ": " . $hide, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Hidden status for contact " . $contact_old["url"] . ": " . $hide, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			// If the contact isn't searchable then set the contact to "hidden".
 | 
			
		||||
			// Problem: This can be manually overridden by the user.
 | 
			
		||||
| 
						 | 
				
			
			@ -1761,20 +1762,20 @@ class DFRN
 | 
			
		|||
				$contact[$field] = DateTimeFormat::utc($contact[$field]);
 | 
			
		||||
 | 
			
		||||
				if (strtotime($contact[$field]) > strtotime($contact_old[$field])) {
 | 
			
		||||
					logger("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", LOGGER_DEBUG);
 | 
			
		||||
					$update = true;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			foreach ($fields as $field => $data) {
 | 
			
		||||
				if ($contact[$field] != $contact_old[$field]) {
 | 
			
		||||
					logger("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", LOGGER_DEBUG);
 | 
			
		||||
					$update = true;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ($update) {
 | 
			
		||||
				logger("Update contact data for contact " . $contact["id"] . " (" . $contact["nick"] . ")", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Update contact data for contact " . $contact["id"] . " (" . $contact["nick"] . ")", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				q(
 | 
			
		||||
					"UPDATE `contact` SET `name` = '%s', `nick` = '%s', `about` = '%s', `location` = '%s',
 | 
			
		||||
| 
						 | 
				
			
			@ -1881,7 +1882,7 @@ class DFRN
 | 
			
		|||
	 */
 | 
			
		||||
	private static function processMail($xpath, $mail, $importer)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Processing mails");
 | 
			
		||||
		Logger::log("Processing mails");
 | 
			
		||||
 | 
			
		||||
		/// @TODO Rewrite this to one statement
 | 
			
		||||
		$msg = [];
 | 
			
		||||
| 
						 | 
				
			
			@ -1921,7 +1922,7 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
		notification($notif_params);
 | 
			
		||||
 | 
			
		||||
		logger("Mail is processed, notification was sent.");
 | 
			
		||||
		Logger::log("Mail is processed, notification was sent.");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -1937,7 +1938,7 @@ class DFRN
 | 
			
		|||
	{
 | 
			
		||||
		$a = get_app();
 | 
			
		||||
 | 
			
		||||
		logger("Processing suggestions");
 | 
			
		||||
		Logger::log("Processing suggestions");
 | 
			
		||||
 | 
			
		||||
		/// @TODO Rewrite this to one statement
 | 
			
		||||
		$suggest = [];
 | 
			
		||||
| 
						 | 
				
			
			@ -2053,7 +2054,7 @@ class DFRN
 | 
			
		|||
	 */
 | 
			
		||||
	private static function processRelocation($xpath, $relocation, $importer)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Processing relocations");
 | 
			
		||||
		Logger::log("Processing relocations");
 | 
			
		||||
 | 
			
		||||
		/// @TODO Rewrite this to one statement
 | 
			
		||||
		$relocate = [];
 | 
			
		||||
| 
						 | 
				
			
			@ -2088,7 +2089,7 @@ class DFRN
 | 
			
		|||
		);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($r)) {
 | 
			
		||||
			logger("Query failed to execute, no result returned in " . __FUNCTION__);
 | 
			
		||||
			Logger::log("Query failed to execute, no result returned in " . __FUNCTION__);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2115,7 +2116,7 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
		Contact::updateAvatar($relocate["avatar"], $importer["importer_uid"], $importer["id"], true);
 | 
			
		||||
 | 
			
		||||
		logger('Contacts are updated.');
 | 
			
		||||
		Logger::log('Contacts are updated.');
 | 
			
		||||
 | 
			
		||||
		/// @TODO
 | 
			
		||||
		/// merge with current record, current contents have priority
 | 
			
		||||
| 
						 | 
				
			
			@ -2174,7 +2175,7 @@ class DFRN
 | 
			
		|||
			if ($importer["page-flags"] == Contact::PAGE_COMMUNITY || $importer["page-flags"] == Contact::PAGE_PRVGROUP) {
 | 
			
		||||
				$sql_extra = "";
 | 
			
		||||
				$community = true;
 | 
			
		||||
				logger("possible community action");
 | 
			
		||||
				Logger::log("possible community action");
 | 
			
		||||
			} else {
 | 
			
		||||
				$sql_extra = " AND `contact`.`self` AND `item`.`wall` ";
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -2211,7 +2212,7 @@ class DFRN
 | 
			
		|||
			 */
 | 
			
		||||
			if ($is_a_remote_action && $community && (!$r[0]["forum_mode"]) && (!$r[0]["wall"])) {
 | 
			
		||||
				$is_a_remote_action = false;
 | 
			
		||||
				logger("not a community action");
 | 
			
		||||
				Logger::log("not a community action");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ($is_a_remote_action) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2298,7 +2299,7 @@ class DFRN
 | 
			
		|||
	 */
 | 
			
		||||
	private static function processVerbs($entrytype, $importer, &$item, &$is_like)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Process verb ".$item["verb"]." and object-type ".$item["object-type"]." for entrytype ".$entrytype, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Process verb ".$item["verb"]." and object-type ".$item["object-type"]." for entrytype ".$entrytype, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (($entrytype == DFRN::TOP_LEVEL)) {
 | 
			
		||||
			// The filling of the the "contact" variable is done for legcy reasons
 | 
			
		||||
| 
						 | 
				
			
			@ -2310,22 +2311,22 @@ class DFRN
 | 
			
		|||
			// Big question: Do we need these functions? They were part of the "consume_feed" function.
 | 
			
		||||
			// This function once was responsible for DFRN and OStatus.
 | 
			
		||||
			if (activity_match($item["verb"], ACTIVITY_FOLLOW)) {
 | 
			
		||||
				logger("New follower");
 | 
			
		||||
				Logger::log("New follower");
 | 
			
		||||
				Contact::addRelationship($importer, $contact, $item, $nickname);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			if (activity_match($item["verb"], ACTIVITY_UNFOLLOW)) {
 | 
			
		||||
				logger("Lost follower");
 | 
			
		||||
				Logger::log("Lost follower");
 | 
			
		||||
				Contact::removeFollower($importer, $contact, $item);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			if (activity_match($item["verb"], ACTIVITY_REQ_FRIEND)) {
 | 
			
		||||
				logger("New friend request");
 | 
			
		||||
				Logger::log("New friend request");
 | 
			
		||||
				Contact::addRelationship($importer, $contact, $item, $nickname, true);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			if (activity_match($item["verb"], ACTIVITY_UNFRIEND)) {
 | 
			
		||||
				logger("Lost sharer");
 | 
			
		||||
				Logger::log("Lost sharer");
 | 
			
		||||
				Contact::removeSharer($importer, $contact, $item);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -2369,7 +2370,7 @@ class DFRN
 | 
			
		|||
					$item_tag = Item::selectFirst(['id', 'tag'], ['uri' => $xt->id, 'uid' => $importer["importer_uid"]]);
 | 
			
		||||
 | 
			
		||||
					if (!DBA::isResult($item_tag)) {
 | 
			
		||||
						logger("Query failed to execute, no result returned in " . __FUNCTION__);
 | 
			
		||||
						Logger::log("Query failed to execute, no result returned in " . __FUNCTION__);
 | 
			
		||||
						return false;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2445,7 +2446,7 @@ class DFRN
 | 
			
		|||
	 */
 | 
			
		||||
	private static function processEntry($header, $xpath, $entry, $importer, $xml)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Processing entries");
 | 
			
		||||
		Logger::log("Processing entries");
 | 
			
		||||
 | 
			
		||||
		$item = $header;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2463,7 +2464,7 @@ class DFRN
 | 
			
		|||
		);
 | 
			
		||||
		// Is there an existing item?
 | 
			
		||||
		if (DBA::isResult($current) && !self::isEditedTimestampNewer($current, $item)) {
 | 
			
		||||
			logger("Item ".$item["uri"]." (".$item['edited'].") already existed.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Item ".$item["uri"]." (".$item['edited'].") already existed.", LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2671,10 +2672,10 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
			// Is it an event?
 | 
			
		||||
			if (($item["object-type"] == ACTIVITY_OBJ_EVENT) && !$owner_unknown) {
 | 
			
		||||
				logger("Item ".$item["uri"]." seems to contain an event.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Item ".$item["uri"]." seems to contain an event.", LOGGER_DEBUG);
 | 
			
		||||
				$ev = Event::fromBBCode($item["body"]);
 | 
			
		||||
				if ((x($ev, "desc") || x($ev, "summary")) && x($ev, "start")) {
 | 
			
		||||
					logger("Event in item ".$item["uri"]." was found.", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Event in item ".$item["uri"]." was found.", LOGGER_DEBUG);
 | 
			
		||||
					$ev["cid"]     = $importer["id"];
 | 
			
		||||
					$ev["uid"]     = $importer["importer_uid"];
 | 
			
		||||
					$ev["uri"]     = $item["uri"];
 | 
			
		||||
| 
						 | 
				
			
			@ -2690,20 +2691,20 @@ class DFRN
 | 
			
		|||
					}
 | 
			
		||||
 | 
			
		||||
					$event_id = Event::store($ev);
 | 
			
		||||
					logger("Event ".$event_id." was stored", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Event ".$event_id." was stored", LOGGER_DEBUG);
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!self::processVerbs($entrytype, $importer, $item, $is_like)) {
 | 
			
		||||
			logger("Exiting because 'processVerbs' told us so", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Exiting because 'processVerbs' told us so", LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// This check is done here to be able to receive connection requests in "processVerbs"
 | 
			
		||||
		if (($entrytype == DFRN::TOP_LEVEL) && $owner_unknown) {
 | 
			
		||||
			logger("Item won't be stored because user " . $importer["importer_uid"] . " doesn't follow " . $item["owner-link"] . ".", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Item won't be stored because user " . $importer["importer_uid"] . " doesn't follow " . $item["owner-link"] . ".", LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2711,9 +2712,9 @@ class DFRN
 | 
			
		|||
		// Update content if 'updated' changes
 | 
			
		||||
		if (DBA::isResult($current)) {
 | 
			
		||||
			if (self::updateContent($current, $item, $importer, $entrytype)) {
 | 
			
		||||
				logger("Item ".$item["uri"]." was updated.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Item ".$item["uri"]." was updated.", LOGGER_DEBUG);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("Item " . $item["uri"] . " already existed.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Item " . $item["uri"] . " already existed.", LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -2723,7 +2724,7 @@ class DFRN
 | 
			
		|||
			$parent = 0;
 | 
			
		||||
 | 
			
		||||
			if ($posted_id) {
 | 
			
		||||
				logger("Reply from contact ".$item["contact-id"]." was stored with id ".$posted_id, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Reply from contact ".$item["contact-id"]." was stored with id ".$posted_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				if ($item['uid'] == 0) {
 | 
			
		||||
					Item::distribute($posted_id);
 | 
			
		||||
| 
						 | 
				
			
			@ -2733,7 +2734,7 @@ class DFRN
 | 
			
		|||
			}
 | 
			
		||||
		} else { // $entrytype == DFRN::TOP_LEVEL
 | 
			
		||||
			if (($importer["uid"] == 0) && ($importer["importer_uid"] != 0)) {
 | 
			
		||||
				logger("Contact ".$importer["id"]." isn't known to user ".$importer["importer_uid"].". The post will be ignored.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Contact ".$importer["id"]." isn't known to user ".$importer["importer_uid"].". The post will be ignored.", LOGGER_DEBUG);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			if (!link_compare($item["owner-link"], $importer["url"])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2743,13 +2744,13 @@ class DFRN
 | 
			
		|||
				 * the tgroup delivery code called from Item::insert will correct it if it's a forum,
 | 
			
		||||
				 * but we're going to unconditionally correct it here so that the post will always be owned by our contact.
 | 
			
		||||
				 */
 | 
			
		||||
				logger('Correcting item owner.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Correcting item owner.', LOGGER_DEBUG);
 | 
			
		||||
				$item["owner-link"] = $importer["url"];
 | 
			
		||||
				$item["owner-id"] = Contact::getIdForURL($importer["url"], 0);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (($importer["rel"] == Contact::FOLLOWER) && (!self::tgroupCheck($importer["importer_uid"], $item))) {
 | 
			
		||||
				logger("Contact ".$importer["id"]." is only follower and tgroup check was negative.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Contact ".$importer["id"]." is only follower and tgroup check was negative.", LOGGER_DEBUG);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2763,7 +2764,7 @@ class DFRN
 | 
			
		|||
				$posted_id = $notify;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger("Item was stored with id ".$posted_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Item was stored with id ".$posted_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			if ($item['uid'] == 0) {
 | 
			
		||||
				Item::distribute($posted_id);
 | 
			
		||||
| 
						 | 
				
			
			@ -2786,7 +2787,7 @@ class DFRN
 | 
			
		|||
	 */
 | 
			
		||||
	private static function processDeletion($xpath, $deletion, $importer)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Processing deletions");
 | 
			
		||||
		Logger::log("Processing deletions");
 | 
			
		||||
		$uri = null;
 | 
			
		||||
 | 
			
		||||
		foreach ($deletion->attributes as $attributes) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2802,18 +2803,18 @@ class DFRN
 | 
			
		|||
		$condition = ['uri' => $uri, 'uid' => $importer["importer_uid"]];
 | 
			
		||||
		$item = Item::selectFirst(['id', 'parent', 'contact-id', 'file', 'deleted'], $condition);
 | 
			
		||||
		if (!DBA::isResult($item)) {
 | 
			
		||||
			logger("Item with uri " . $uri . " for user " . $importer["importer_uid"] . " wasn't found.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Item with uri " . $uri . " for user " . $importer["importer_uid"] . " wasn't found.", LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (strstr($item['file'], '[')) {
 | 
			
		||||
			logger("Item with uri " . $uri . " for user " . $importer["importer_uid"] . " is filed. So it won't be deleted.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Item with uri " . $uri . " for user " . $importer["importer_uid"] . " is filed. So it won't be deleted.", LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// When it is a starting post it has to belong to the person that wants to delete it
 | 
			
		||||
		if (($item['id'] == $item['parent']) && ($item['contact-id'] != $importer["id"])) {
 | 
			
		||||
			logger("Item with uri " . $uri . " don't belong to contact " . $importer["id"] . " - ignoring deletion.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Item with uri " . $uri . " don't belong to contact " . $importer["id"] . " - ignoring deletion.", LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2821,7 +2822,7 @@ class DFRN
 | 
			
		|||
		if (($item['id'] != $item['parent']) && ($item['contact-id'] != $importer["id"])) {
 | 
			
		||||
			$condition = ['id' => $item['parent'], 'contact-id' => $importer["id"]];
 | 
			
		||||
			if (!Item::exists($condition)) {
 | 
			
		||||
				logger("Item with uri " . $uri . " wasn't found or mustn't be deleted by contact " . $importer["id"] . " - ignoring deletion.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Item with uri " . $uri . " wasn't found or mustn't be deleted by contact " . $importer["id"] . " - ignoring deletion.", LOGGER_DEBUG);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -2830,7 +2831,7 @@ class DFRN
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('deleting item '.$item['id'].' uri='.$uri, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('deleting item '.$item['id'].' uri='.$uri, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		Item::delete(['id' => $item['id']]);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -2884,7 +2885,7 @@ class DFRN
 | 
			
		|||
			self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", false, $xml);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Import DFRN message for user " . $importer["importer_uid"] . " from contact " . $importer["id"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Import DFRN message for user " . $importer["importer_uid"] . " from contact " . $importer["id"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// is it a public forum? Private forums aren't exposed with this method
 | 
			
		||||
		$forum = intval(XML::getFirstNodeValue($xpath, "/atom:feed/dfrn:community/text()"));
 | 
			
		||||
| 
						 | 
				
			
			@ -2950,7 +2951,7 @@ class DFRN
 | 
			
		|||
				self::processEntry($header, $xpath, $entry, $importer, $xml);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger("Import done for user " . $importer["importer_uid"] . " from contact " . $importer["id"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Import done for user " . $importer["importer_uid"] . " from contact " . $importer["id"], LOGGER_DEBUG);
 | 
			
		||||
		return 200;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3035,7 +3036,7 @@ class DFRN
 | 
			
		|||
 | 
			
		||||
			$url = curPageURL();
 | 
			
		||||
 | 
			
		||||
			logger('auto_redir: ' . $r[0]['name'] . ' ' . $sec, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('auto_redir: ' . $r[0]['name'] . ' ' . $sec, LOGGER_DEBUG);
 | 
			
		||||
			$dest = (($url) ? '&destination_url=' . $url : '');
 | 
			
		||||
			System::externalRedirect($r[0]['poll'] . '?dfrn_id=' . $dfrn_id
 | 
			
		||||
				. '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec . $dest);
 | 
			
		||||
| 
						 | 
				
			
			@ -3090,7 +3091,7 @@ class DFRN
 | 
			
		|||
			foreach ($matches as $mtch) {
 | 
			
		||||
				if (link_compare($link, $mtch[1]) || link_compare($dlink, $mtch[1])) {
 | 
			
		||||
					$mention = true;
 | 
			
		||||
					logger('mention found: ' . $mtch[2]);
 | 
			
		||||
					Logger::log('mention found: ' . $mtch[2]);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ use Friendica\Content\Text\Markdown;
 | 
			
		|||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
| 
						 | 
				
			
			@ -260,7 +261,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		if (base64_encode(base64_decode(base64_decode($signature))) == base64_decode($signature)) {
 | 
			
		||||
			$signature = base64_decode($signature);
 | 
			
		||||
			logger("Repaired double encoded signature from Diaspora/Hubzilla handle ".$handle." - level ".$level, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Repaired double encoded signature from Diaspora/Hubzilla handle ".$handle." - level ".$level, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			// Do a recursive call to be able to fix even multiple levels
 | 
			
		||||
			if ($level < 10) {
 | 
			
		||||
| 
						 | 
				
			
			@ -283,14 +284,14 @@ class Diaspora
 | 
			
		|||
		$basedom = XML::parseString($envelope);
 | 
			
		||||
 | 
			
		||||
		if (!is_object($basedom)) {
 | 
			
		||||
			logger("Envelope is no XML file");
 | 
			
		||||
			Logger::log("Envelope is no XML file");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$children = $basedom->children('http://salmon-protocol.org/ns/magic-env');
 | 
			
		||||
 | 
			
		||||
		if (sizeof($children) == 0) {
 | 
			
		||||
			logger("XML has no children");
 | 
			
		||||
			Logger::log("XML has no children");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -315,19 +316,19 @@ class Diaspora
 | 
			
		|||
		$signable_data = $msg.".".base64url_encode($type).".".base64url_encode($encoding).".".base64url_encode($alg);
 | 
			
		||||
 | 
			
		||||
		if ($handle == '') {
 | 
			
		||||
			logger('No author could be decoded. Discarding. Message: ' . $envelope);
 | 
			
		||||
			Logger::log('No author could be decoded. Discarding. Message: ' . $envelope);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$key = self::key($handle);
 | 
			
		||||
		if ($key == '') {
 | 
			
		||||
			logger("Couldn't get a key for handle " . $handle . ". Discarding.");
 | 
			
		||||
			Logger::log("Couldn't get a key for handle " . $handle . ". Discarding.");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$verify = Crypto::rsaVerify($signable_data, $sig, $key);
 | 
			
		||||
		if (!$verify) {
 | 
			
		||||
			logger('Message from ' . $handle . ' did not verify. Discarding.');
 | 
			
		||||
			Logger::log('Message from ' . $handle . ' did not verify. Discarding.');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -388,7 +389,7 @@ class Diaspora
 | 
			
		|||
			$j_outer_key_bundle = json_decode($outer_key_bundle);
 | 
			
		||||
 | 
			
		||||
			if (!is_object($j_outer_key_bundle)) {
 | 
			
		||||
				logger('Outer Salmon did not verify. Discarding.');
 | 
			
		||||
				Logger::log('Outer Salmon did not verify. Discarding.');
 | 
			
		||||
				if ($no_exit) {
 | 
			
		||||
					return false;
 | 
			
		||||
				} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -407,7 +408,7 @@ class Diaspora
 | 
			
		|||
		$basedom = XML::parseString($xml);
 | 
			
		||||
 | 
			
		||||
		if (!is_object($basedom)) {
 | 
			
		||||
			logger('Received data does not seem to be an XML. Discarding. '.$xml);
 | 
			
		||||
			Logger::log('Received data does not seem to be an XML. Discarding. '.$xml);
 | 
			
		||||
			if ($no_exit) {
 | 
			
		||||
				return false;
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -433,7 +434,7 @@ class Diaspora
 | 
			
		|||
		$key_id = $base->sig[0]->attributes()->key_id[0];
 | 
			
		||||
		$author_addr = base64_decode($key_id);
 | 
			
		||||
		if ($author_addr == '') {
 | 
			
		||||
			logger('No author could be decoded. Discarding. Message: ' . $xml);
 | 
			
		||||
			Logger::log('No author could be decoded. Discarding. Message: ' . $xml);
 | 
			
		||||
			if ($no_exit) {
 | 
			
		||||
				return false;
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -443,7 +444,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$key = self::key($author_addr);
 | 
			
		||||
		if ($key == '') {
 | 
			
		||||
			logger("Couldn't get a key for handle " . $author_addr . ". Discarding.");
 | 
			
		||||
			Logger::log("Couldn't get a key for handle " . $author_addr . ". Discarding.");
 | 
			
		||||
			if ($no_exit) {
 | 
			
		||||
				return false;
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -453,7 +454,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$verify = Crypto::rsaVerify($signed_data, $signature, $key);
 | 
			
		||||
		if (!$verify) {
 | 
			
		||||
			logger('Message did not verify. Discarding.');
 | 
			
		||||
			Logger::log('Message did not verify. Discarding.');
 | 
			
		||||
			if ($no_exit) {
 | 
			
		||||
				return false;
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -483,7 +484,7 @@ class Diaspora
 | 
			
		|||
		$basedom = XML::parseString($xml);
 | 
			
		||||
 | 
			
		||||
		if (!is_object($basedom)) {
 | 
			
		||||
			logger("XML is not parseable.");
 | 
			
		||||
			Logger::log("XML is not parseable.");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$children = $basedom->children('https://joindiaspora.com/protocol');
 | 
			
		||||
| 
						 | 
				
			
			@ -497,7 +498,7 @@ class Diaspora
 | 
			
		|||
		} else {
 | 
			
		||||
			// This happens with posts from a relais
 | 
			
		||||
			if (!$importer) {
 | 
			
		||||
				logger("This is no private post in the old format", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("This is no private post in the old format", LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -516,7 +517,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
			$decrypted = self::aesDecrypt($outer_key, $outer_iv, $ciphertext);
 | 
			
		||||
 | 
			
		||||
			logger('decrypted: '.$decrypted, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('decrypted: '.$decrypted, LOGGER_DEBUG);
 | 
			
		||||
			$idom = XML::parseString($decrypted);
 | 
			
		||||
 | 
			
		||||
			$inner_iv = base64_decode($idom->iv);
 | 
			
		||||
| 
						 | 
				
			
			@ -539,7 +540,7 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$base) {
 | 
			
		||||
			logger('unable to locate salmon data in xml');
 | 
			
		||||
			Logger::log('unable to locate salmon data in xml');
 | 
			
		||||
			System::httpExit(400);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -577,29 +578,29 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$author_link) {
 | 
			
		||||
			logger('Could not retrieve author URI.');
 | 
			
		||||
			Logger::log('Could not retrieve author URI.');
 | 
			
		||||
			System::httpExit(400);
 | 
			
		||||
		}
 | 
			
		||||
		// Once we have the author URI, go to the web and try to find their public key
 | 
			
		||||
		// (first this will look it up locally if it is in the fcontact cache)
 | 
			
		||||
		// This will also convert diaspora public key from pkcs#1 to pkcs#8
 | 
			
		||||
 | 
			
		||||
		logger('Fetching key for '.$author_link);
 | 
			
		||||
		Logger::log('Fetching key for '.$author_link);
 | 
			
		||||
		$key = self::key($author_link);
 | 
			
		||||
 | 
			
		||||
		if (!$key) {
 | 
			
		||||
			logger('Could not retrieve author key.');
 | 
			
		||||
			Logger::log('Could not retrieve author key.');
 | 
			
		||||
			System::httpExit(400);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$verify = Crypto::rsaVerify($signed_data, $signature, $key);
 | 
			
		||||
 | 
			
		||||
		if (!$verify) {
 | 
			
		||||
			logger('Message did not verify. Discarding.');
 | 
			
		||||
			Logger::log('Message did not verify. Discarding.');
 | 
			
		||||
			System::httpExit(400);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Message verified.');
 | 
			
		||||
		Logger::log('Message verified.');
 | 
			
		||||
 | 
			
		||||
		return ['message' => (string)$inner_decrypted,
 | 
			
		||||
				'author' => unxmlify($author_link),
 | 
			
		||||
| 
						 | 
				
			
			@ -618,12 +619,12 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$enabled = intval(Config::get("system", "diaspora_enabled"));
 | 
			
		||||
		if (!$enabled) {
 | 
			
		||||
			logger("diaspora is disabled");
 | 
			
		||||
			Logger::log("diaspora is disabled");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!($fields = self::validPosting($msg))) {
 | 
			
		||||
			logger("Invalid posting");
 | 
			
		||||
			Logger::log("Invalid posting");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -652,7 +653,7 @@ class Diaspora
 | 
			
		|||
		if (is_null($fields)) {
 | 
			
		||||
			$private = true;
 | 
			
		||||
			if (!($fields = self::validPosting($msg))) {
 | 
			
		||||
				logger("Invalid posting");
 | 
			
		||||
				Logger::log("Invalid posting");
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -661,12 +662,12 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$type = $fields->getName();
 | 
			
		||||
 | 
			
		||||
		logger("Received message type ".$type." from ".$sender." for user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Received message type ".$type." from ".$sender." for user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		switch ($type) {
 | 
			
		||||
			case "account_migration":
 | 
			
		||||
				if (!$private) {
 | 
			
		||||
					logger('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					Logger::log('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				return self::receiveAccountMigration($importer, $fields);
 | 
			
		||||
| 
						 | 
				
			
			@ -679,14 +680,14 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
			case "contact":
 | 
			
		||||
				if (!$private) {
 | 
			
		||||
					logger('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					Logger::log('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				return self::receiveContactRequest($importer, $fields);
 | 
			
		||||
 | 
			
		||||
			case "conversation":
 | 
			
		||||
				if (!$private) {
 | 
			
		||||
					logger('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					Logger::log('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				return self::receiveConversation($importer, $msg, $fields);
 | 
			
		||||
| 
						 | 
				
			
			@ -696,14 +697,14 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
			case "message":
 | 
			
		||||
				if (!$private) {
 | 
			
		||||
					logger('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					Logger::log('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				return self::receiveMessage($importer, $fields);
 | 
			
		||||
 | 
			
		||||
			case "participation":
 | 
			
		||||
				if (!$private) {
 | 
			
		||||
					logger('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					Logger::log('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				return self::receiveParticipation($importer, $fields);
 | 
			
		||||
| 
						 | 
				
			
			@ -716,7 +717,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
			case "profile":
 | 
			
		||||
				if (!$private) {
 | 
			
		||||
					logger('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					Logger::log('Message with type ' . $type . ' is not private, quitting.');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				return self::receiveProfile($importer, $fields);
 | 
			
		||||
| 
						 | 
				
			
			@ -731,7 +732,7 @@ class Diaspora
 | 
			
		|||
				return self::receiveStatusMessage($importer, $fields, $msg["message"]);
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
				logger("Unknown message type ".$type);
 | 
			
		||||
				Logger::log("Unknown message type ".$type);
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -753,7 +754,7 @@ class Diaspora
 | 
			
		|||
		$data = XML::parseString($msg["message"]);
 | 
			
		||||
 | 
			
		||||
		if (!is_object($data)) {
 | 
			
		||||
			logger("No valid XML ".$msg["message"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No valid XML ".$msg["message"], LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -771,7 +772,7 @@ class Diaspora
 | 
			
		|||
		$type = $element->getName();
 | 
			
		||||
		$orig_type = $type;
 | 
			
		||||
 | 
			
		||||
		logger("Got message type ".$type.": ".$msg["message"], LOGGER_DATA);
 | 
			
		||||
		Logger::log("Got message type ".$type.": ".$msg["message"], LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		// All retractions are handled identically from now on.
 | 
			
		||||
		// In the new version there will only be "retraction".
 | 
			
		||||
| 
						 | 
				
			
			@ -847,7 +848,7 @@ class Diaspora
 | 
			
		|||
		// This is something that shouldn't happen at all.
 | 
			
		||||
		if (in_array($type, ["status_message", "reshare", "profile"])) {
 | 
			
		||||
			if ($msg["author"] != $fields->author) {
 | 
			
		||||
				logger("Message handle is not the same as envelope sender. Quitting this message.");
 | 
			
		||||
				Logger::log("Message handle is not the same as envelope sender. Quitting this message.");
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -858,31 +859,31 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
		// No author_signature? This is a must, so we quit.
 | 
			
		||||
		if (!isset($author_signature)) {
 | 
			
		||||
			logger("No author signature for type ".$type." - Message: ".$msg["message"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No author signature for type ".$type." - Message: ".$msg["message"], LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (isset($parent_author_signature)) {
 | 
			
		||||
			$key = self::key($msg["author"]);
 | 
			
		||||
			if (empty($key)) {
 | 
			
		||||
				logger("No key found for parent author ".$msg["author"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("No key found for parent author ".$msg["author"], LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!Crypto::rsaVerify($signed_data, $parent_author_signature, $key, "sha256")) {
 | 
			
		||||
				logger("No valid parent author signature for parent author ".$msg["author"]. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$parent_author_signature, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("No valid parent author signature for parent author ".$msg["author"]. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$parent_author_signature, LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$key = self::key($fields->author);
 | 
			
		||||
		if (empty($key)) {
 | 
			
		||||
			logger("No key found for author ".$fields->author, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No key found for author ".$fields->author, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!Crypto::rsaVerify($signed_data, $author_signature, $key, "sha256")) {
 | 
			
		||||
			logger("No valid author signature for author ".$fields->author. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$author_signature, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("No valid author signature for author ".$fields->author. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$author_signature, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		} else {
 | 
			
		||||
			return $fields;
 | 
			
		||||
| 
						 | 
				
			
			@ -900,7 +901,7 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$handle = strval($handle);
 | 
			
		||||
 | 
			
		||||
		logger("Fetching diaspora key for: ".$handle);
 | 
			
		||||
		Logger::log("Fetching diaspora key for: ".$handle);
 | 
			
		||||
 | 
			
		||||
		$r = self::personByHandle($handle);
 | 
			
		||||
		if ($r) {
 | 
			
		||||
| 
						 | 
				
			
			@ -923,7 +924,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$person = DBA::selectFirst('fcontact', [], ['network' => Protocol::DIASPORA, 'addr' => $handle]);
 | 
			
		||||
		if (DBA::isResult($person)) {
 | 
			
		||||
			logger("In cache " . print_r($person, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("In cache " . print_r($person, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			// update record occasionally so it doesn't get stale
 | 
			
		||||
			$d = strtotime($person["updated"]." +00:00");
 | 
			
		||||
| 
						 | 
				
			
			@ -937,7 +938,7 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($person) || $update) {
 | 
			
		||||
			logger("create or refresh", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("create or refresh", LOGGER_DEBUG);
 | 
			
		||||
			$r = Probe::uri($handle, Protocol::DIASPORA);
 | 
			
		||||
 | 
			
		||||
			// Note that Friendica contacts will return a "Diaspora person"
 | 
			
		||||
| 
						 | 
				
			
			@ -989,7 +990,7 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$handle = false;
 | 
			
		||||
 | 
			
		||||
		logger("contact id is ".$contact_id." - pcontact id is ".$pcontact_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("contact id is ".$contact_id." - pcontact id is ".$pcontact_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if ($pcontact_id != 0) {
 | 
			
		||||
			$contact = DBA::selectFirst('contact', ['addr'], ['id' => $pcontact_id]);
 | 
			
		||||
| 
						 | 
				
			
			@ -1007,7 +1008,7 @@ class Diaspora
 | 
			
		|||
		if (DBA::isResult($r)) {
 | 
			
		||||
			$contact = $r[0];
 | 
			
		||||
 | 
			
		||||
			logger("contact 'self' = ".$contact['self']." 'url' = ".$contact['url'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("contact 'self' = ".$contact['self']." 'url' = ".$contact['url'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			if ($contact['addr'] != "") {
 | 
			
		||||
				$handle = $contact['addr'];
 | 
			
		||||
| 
						 | 
				
			
			@ -1033,7 +1034,7 @@ class Diaspora
 | 
			
		|||
	 */
 | 
			
		||||
	public static function urlFromContactGuid($fcontact_guid)
 | 
			
		||||
	{
 | 
			
		||||
		logger("fcontact guid is ".$fcontact_guid, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("fcontact guid is ".$fcontact_guid, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$r = q(
 | 
			
		||||
			"SELECT `url` FROM `fcontact` WHERE `url` != '' AND `network` = '%s' AND `guid` = '%s'",
 | 
			
		||||
| 
						 | 
				
			
			@ -1068,14 +1069,14 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$cid) {
 | 
			
		||||
			logger("Haven't found a contact for user " . $uid . " and handle " . $handle, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Haven't found a contact for user " . $uid . " and handle " . $handle, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$contact = DBA::selectFirst('contact', [], ['id' => $cid]);
 | 
			
		||||
		if (!DBA::isResult($contact)) {
 | 
			
		||||
			// This here shouldn't happen at all
 | 
			
		||||
			logger("Haven't found a contact for user " . $uid . " and handle " . $handle, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Haven't found a contact for user " . $uid . " and handle " . $handle, LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1108,7 +1109,7 @@ class Diaspora
 | 
			
		|||
		//	);
 | 
			
		||||
		//
 | 
			
		||||
		//	$contact["rel"] = Contact::FRIEND;
 | 
			
		||||
		//	logger("defining user ".$contact["nick"]." as friend");
 | 
			
		||||
		//	Logger::log("defining user ".$contact["nick"]." as friend");
 | 
			
		||||
		//}
 | 
			
		||||
 | 
			
		||||
		// We don't seem to like that person
 | 
			
		||||
| 
						 | 
				
			
			@ -1145,7 +1146,7 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$contact = self::contactByHandle($importer["uid"], $handle);
 | 
			
		||||
		if (!$contact) {
 | 
			
		||||
			logger("A Contact for handle ".$handle." and user ".$importer["uid"]." was not found");
 | 
			
		||||
			Logger::log("A Contact for handle ".$handle." and user ".$importer["uid"]." was not found");
 | 
			
		||||
			// If a contact isn't found, we accept it anyway if it is a comment
 | 
			
		||||
			if ($is_comment && ($importer["uid"] != 0)) {
 | 
			
		||||
				return self::contactByHandle(0, $handle);
 | 
			
		||||
| 
						 | 
				
			
			@ -1157,7 +1158,7 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!self::postAllow($importer, $contact, $is_comment)) {
 | 
			
		||||
			logger("The handle: ".$handle." is not allowed to post to user ".$importer["uid"]);
 | 
			
		||||
			Logger::log("The handle: ".$handle." is not allowed to post to user ".$importer["uid"]);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		return $contact;
 | 
			
		||||
| 
						 | 
				
			
			@ -1175,7 +1176,7 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$item = Item::selectFirst(['id'], ['uid' => $uid, 'guid' => $guid]);
 | 
			
		||||
		if (DBA::isResult($item)) {
 | 
			
		||||
			logger("message ".$guid." already exists for user ".$uid);
 | 
			
		||||
			Logger::log("message ".$guid." already exists for user ".$uid);
 | 
			
		||||
			return $item["id"];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1277,7 +1278,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$server = $serverparts["scheme"]."://".$serverparts["host"];
 | 
			
		||||
 | 
			
		||||
		logger("Trying to fetch item ".$guid." from ".$server, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Trying to fetch item ".$guid." from ".$server, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$msg = self::message($guid, $server);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1285,7 +1286,7 @@ class Diaspora
 | 
			
		|||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Successfully fetched item ".$guid." from ".$server, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Successfully fetched item ".$guid." from ".$server, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// Now call the dispatcher
 | 
			
		||||
		return self::dispatchPublic($msg);
 | 
			
		||||
| 
						 | 
				
			
			@ -1312,16 +1313,16 @@ class Diaspora
 | 
			
		|||
		// This will work for new Diaspora servers and Friendica servers from 3.5
 | 
			
		||||
		$source_url = $server."/fetch/post/".urlencode($guid);
 | 
			
		||||
 | 
			
		||||
		logger("Fetch post from ".$source_url, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Fetch post from ".$source_url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$envelope = Network::fetchUrl($source_url);
 | 
			
		||||
		if ($envelope) {
 | 
			
		||||
			logger("Envelope was fetched.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Envelope was fetched.", LOGGER_DEBUG);
 | 
			
		||||
			$x = self::verifyMagicEnvelope($envelope);
 | 
			
		||||
			if (!$x) {
 | 
			
		||||
				logger("Envelope could not be verified.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Envelope could not be verified.", LOGGER_DEBUG);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("Envelope was verified.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Envelope was verified.", LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			$x = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -1330,7 +1331,7 @@ class Diaspora
 | 
			
		|||
		// This will work for older Diaspora and Friendica servers
 | 
			
		||||
		if (!$x) {
 | 
			
		||||
			$source_url = $server."/p/".urlencode($guid).".xml";
 | 
			
		||||
			logger("Fetch post from ".$source_url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Fetch post from ".$source_url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$x = Network::fetchUrl($source_url);
 | 
			
		||||
			if (!$x) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1346,11 +1347,11 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		if ($source_xml->post->reshare) {
 | 
			
		||||
			// Reshare of a reshare - old Diaspora version
 | 
			
		||||
			logger("Message is a reshare", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Message is a reshare", LOGGER_DEBUG);
 | 
			
		||||
			return self::message($source_xml->post->reshare->root_guid, $server, ++$level);
 | 
			
		||||
		} elseif ($source_xml->getName() == "reshare") {
 | 
			
		||||
			// Reshare of a reshare - new Diaspora version
 | 
			
		||||
			logger("Message is a new reshare", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Message is a new reshare", LOGGER_DEBUG);
 | 
			
		||||
			return self::message($source_xml->root_guid, $server, ++$level);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1365,7 +1366,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		// If this isn't a "status_message" then quit
 | 
			
		||||
		if (!$author) {
 | 
			
		||||
			logger("Message doesn't seem to be a status message", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Message doesn't seem to be a status message", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1404,17 +1405,17 @@ class Diaspora
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if ($result) {
 | 
			
		||||
				logger("Fetched missing item ".$guid." - result: ".$result, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Fetched missing item ".$guid." - result: ".$result, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				$item = Item::selectFirst($fields, $condition);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($item)) {
 | 
			
		||||
			logger("parent item not found: parent: ".$guid." - user: ".$uid);
 | 
			
		||||
			Logger::log("parent item not found: parent: ".$guid." - user: ".$uid);
 | 
			
		||||
			return false;
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("parent item found: parent: ".$guid." - user: ".$uid);
 | 
			
		||||
			Logger::log("parent item found: parent: ".$guid." - user: ".$uid);
 | 
			
		||||
			return $item;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1510,17 +1511,17 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$contact = self::contactByHandle($importer["uid"], $old_handle);
 | 
			
		||||
		if (!$contact) {
 | 
			
		||||
			logger("cannot find contact for sender: ".$old_handle." and user ".$importer["uid"]);
 | 
			
		||||
			Logger::log("cannot find contact for sender: ".$old_handle." and user ".$importer["uid"]);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Got migration for ".$old_handle.", to ".$new_handle." with user ".$importer["uid"]);
 | 
			
		||||
		Logger::log("Got migration for ".$old_handle.", to ".$new_handle." with user ".$importer["uid"]);
 | 
			
		||||
 | 
			
		||||
		// Check signature
 | 
			
		||||
		$signed_text = 'AccountMigration:'.$old_handle.':'.$new_handle;
 | 
			
		||||
		$key = self::key($old_handle);
 | 
			
		||||
		if (!Crypto::rsaVerify($signed_text, $signature, $key, "sha256")) {
 | 
			
		||||
			logger('No valid signature for migration.');
 | 
			
		||||
			Logger::log('No valid signature for migration.');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1530,7 +1531,7 @@ class Diaspora
 | 
			
		|||
		// change the technical stuff in contact and gcontact
 | 
			
		||||
		$data = Probe::uri($new_handle);
 | 
			
		||||
		if ($data['network'] == Protocol::PHANTOM) {
 | 
			
		||||
			logger('Account for '.$new_handle." couldn't be probed.");
 | 
			
		||||
			Logger::log('Account for '.$new_handle." couldn't be probed.");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1550,7 +1551,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		DBA::update('gcontact', $fields, ['addr' => $old_handle]);
 | 
			
		||||
 | 
			
		||||
		logger('Contacts are updated.');
 | 
			
		||||
		Logger::log('Contacts are updated.');
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1573,7 +1574,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		DBA::delete('gcontact', ['addr' => $author]);
 | 
			
		||||
 | 
			
		||||
		logger('Removed contacts for ' . $author);
 | 
			
		||||
		Logger::log('Removed contacts for ' . $author);
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1634,7 +1635,7 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$item = Item::selectFirst(['uid'], ['origin' => true, 'guid' => $guid]);
 | 
			
		||||
		if (DBA::isResult($item)) {
 | 
			
		||||
			logger("Found user ".$item['uid']." as owner of item ".$guid, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Found user ".$item['uid']." as owner of item ".$guid, LOGGER_DEBUG);
 | 
			
		||||
			$contact = DBA::selectFirst('contact', [], ['self' => true, 'uid' => $item['uid']]);
 | 
			
		||||
			if (DBA::isResult($contact)) {
 | 
			
		||||
				return $contact;
 | 
			
		||||
| 
						 | 
				
			
			@ -1690,7 +1691,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$person = self::personByHandle($author);
 | 
			
		||||
		if (!is_array($person)) {
 | 
			
		||||
			logger("unable to find author details");
 | 
			
		||||
			Logger::log("unable to find author details");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1749,7 +1750,7 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($message_id) {
 | 
			
		||||
			logger("Stored comment ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Stored comment ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			if ($datarray['uid'] == 0) {
 | 
			
		||||
				Item::distribute($message_id, json_encode($data));
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1792,7 +1793,7 @@ class Diaspora
 | 
			
		|||
		$msg_created_at = DateTimeFormat::utc(notags(unxmlify($mesg->created_at)));
 | 
			
		||||
 | 
			
		||||
		if ($msg_conversation_guid != $guid) {
 | 
			
		||||
			logger("message conversation guid does not belong to the current conversation.");
 | 
			
		||||
			Logger::log("message conversation guid does not belong to the current conversation.");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1804,7 +1805,7 @@ class Diaspora
 | 
			
		|||
		DBA::lock('mail');
 | 
			
		||||
 | 
			
		||||
		if (DBA::exists('mail', ['guid' => $msg_guid, 'uid' => $importer["uid"]])) {
 | 
			
		||||
			logger("duplicate message already delivered.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("duplicate message already delivered.", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1869,7 +1870,7 @@ class Diaspora
 | 
			
		|||
		$messages = $data->message;
 | 
			
		||||
 | 
			
		||||
		if (!count($messages)) {
 | 
			
		||||
			logger("empty conversation");
 | 
			
		||||
			Logger::log("empty conversation");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1896,7 +1897,7 @@ class Diaspora
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (!$conversation) {
 | 
			
		||||
			logger("unable to create conversation.");
 | 
			
		||||
			Logger::log("unable to create conversation.");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1947,7 +1948,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$person = self::personByHandle($author);
 | 
			
		||||
		if (!is_array($person)) {
 | 
			
		||||
			logger("unable to find author details");
 | 
			
		||||
			Logger::log("unable to find author details");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2008,7 +2009,7 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($message_id) {
 | 
			
		||||
			logger("Stored like ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Stored like ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			if ($datarray['uid'] == 0) {
 | 
			
		||||
				Item::distribute($message_id, json_encode($data));
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -2044,7 +2045,7 @@ class Diaspora
 | 
			
		|||
		$conversation = DBA::selectFirst('conv', [], $condition);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($conversation)) {
 | 
			
		||||
			logger("conversation not available.");
 | 
			
		||||
			Logger::log("conversation not available.");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2052,7 +2053,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$person = self::personByHandle($author);
 | 
			
		||||
		if (!$person) {
 | 
			
		||||
			logger("unable to find author details");
 | 
			
		||||
			Logger::log("unable to find author details");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2063,7 +2064,7 @@ class Diaspora
 | 
			
		|||
		DBA::lock('mail');
 | 
			
		||||
 | 
			
		||||
		if (DBA::exists('mail', ['guid' => $guid, 'uid' => $importer["uid"]])) {
 | 
			
		||||
			logger("duplicate message already delivered.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("duplicate message already delivered.", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2107,19 +2108,19 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$contact_id = Contact::getIdForURL($author);
 | 
			
		||||
		if (!$contact_id) {
 | 
			
		||||
			logger('Contact not found: '.$author);
 | 
			
		||||
			Logger::log('Contact not found: '.$author);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$person = self::personByHandle($author);
 | 
			
		||||
		if (!is_array($person)) {
 | 
			
		||||
			logger("Person not found: ".$author);
 | 
			
		||||
			Logger::log("Person not found: ".$author);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$item = Item::selectFirst(['id'], ['guid' => $parent_guid, 'origin' => true, 'private' => false]);
 | 
			
		||||
		if (!DBA::isResult($item)) {
 | 
			
		||||
			logger('Item not found, no origin or private: '.$parent_guid);
 | 
			
		||||
			Logger::log('Item not found, no origin or private: '.$parent_guid);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2131,7 +2132,7 @@ class Diaspora
 | 
			
		|||
			$server = $author;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Received participation for ID: '.$item['id'].' - Contact: '.$contact_id.' - Server: '.$server, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Received participation for ID: '.$item['id'].' - Contact: '.$contact_id.' - Server: '.$server, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::exists('participation', ['iid' => $item['id'], 'server' => $server])) {
 | 
			
		||||
			DBA::insert('participation', ['iid' => $item['id'], 'cid' => $contact_id, 'fid' => $person['id'], 'server' => $server]);
 | 
			
		||||
| 
						 | 
				
			
			@ -2148,7 +2149,7 @@ class Diaspora
 | 
			
		|||
			} else {
 | 
			
		||||
				$cmd = $comment['self'] ? 'like' : 'comment-import';
 | 
			
		||||
			}
 | 
			
		||||
			logger("Send ".$cmd." for item ".$comment['id']." to contact ".$contact_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Send ".$cmd." for item ".$comment['id']." to contact ".$contact_id, LOGGER_DEBUG);
 | 
			
		||||
			Worker::add(PRIORITY_HIGH, 'Delivery', $cmd, $comment['id'], $contact_id);
 | 
			
		||||
		}
 | 
			
		||||
		DBA::close($comments);
 | 
			
		||||
| 
						 | 
				
			
			@ -2274,7 +2275,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		GContact::link($gcid, $importer["uid"], $contact["id"]);
 | 
			
		||||
 | 
			
		||||
		logger("Profile of contact ".$contact["id"]." stored for user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Profile of contact ".$contact["id"]." stored for user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -2336,7 +2337,7 @@ class Diaspora
 | 
			
		|||
		// That makes us friends.
 | 
			
		||||
		if ($contact) {
 | 
			
		||||
			if ($following) {
 | 
			
		||||
				logger("Author ".$author." (Contact ".$contact["id"].") wants to follow us.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Author ".$author." (Contact ".$contact["id"].") wants to follow us.", LOGGER_DEBUG);
 | 
			
		||||
				self::receiveRequestMakeFriend($importer, $contact);
 | 
			
		||||
 | 
			
		||||
				// refetch the contact array
 | 
			
		||||
| 
						 | 
				
			
			@ -2347,36 +2348,36 @@ class Diaspora
 | 
			
		|||
				if (in_array($contact["rel"], [Contact::FRIEND])) {
 | 
			
		||||
					$user = DBA::selectFirst('user', [], ['uid' => $importer["uid"]]);
 | 
			
		||||
					if (DBA::isResult($user)) {
 | 
			
		||||
						logger("Sending share message to author ".$author." - Contact: ".$contact["id"]." - User: ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
						Logger::log("Sending share message to author ".$author." - Contact: ".$contact["id"]." - User: ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
						$ret = self::sendShare($user, $contact);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				return true;
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("Author ".$author." doesn't want to follow us anymore.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Author ".$author." doesn't want to follow us anymore.", LOGGER_DEBUG);
 | 
			
		||||
				Contact::removeFollower($importer, $contact);
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$following && $sharing && in_array($importer["page-flags"], [Contact::PAGE_SOAPBOX, Contact::PAGE_NORMAL])) {
 | 
			
		||||
			logger("Author ".$author." wants to share with us - but doesn't want to listen. Request is ignored.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Author ".$author." wants to share with us - but doesn't want to listen. Request is ignored.", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		} elseif (!$following && !$sharing) {
 | 
			
		||||
			logger("Author ".$author." doesn't want anything - and we don't know the author. Request is ignored.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Author ".$author." doesn't want anything - and we don't know the author. Request is ignored.", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		} elseif (!$following && $sharing) {
 | 
			
		||||
			logger("Author ".$author." wants to share with us.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Author ".$author." wants to share with us.", LOGGER_DEBUG);
 | 
			
		||||
		} elseif ($following && $sharing) {
 | 
			
		||||
			logger("Author ".$author." wants to have a bidirectional conection.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Author ".$author." wants to have a bidirectional conection.", LOGGER_DEBUG);
 | 
			
		||||
		} elseif ($following && !$sharing) {
 | 
			
		||||
			logger("Author ".$author." wants to listen to us.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Author ".$author." wants to listen to us.", LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$ret = self::personByHandle($author);
 | 
			
		||||
 | 
			
		||||
		if (!$ret || ($ret["network"] != Protocol::DIASPORA)) {
 | 
			
		||||
			logger("Cannot resolve diaspora handle ".$author." for ".$recipient);
 | 
			
		||||
			Logger::log("Cannot resolve diaspora handle ".$author." for ".$recipient);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2407,18 +2408,18 @@ class Diaspora
 | 
			
		|||
		$contact_record = self::contactByHandle($importer["uid"], $author);
 | 
			
		||||
 | 
			
		||||
		if (!$contact_record) {
 | 
			
		||||
			logger("unable to locate newly created contact record.");
 | 
			
		||||
			Logger::log("unable to locate newly created contact record.");
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Author ".$author." was added as contact number ".$contact_record["id"].".", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Author ".$author." was added as contact number ".$contact_record["id"].".", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		Group::addMember(User::getDefaultGroup($importer['uid'], $ret["network"]), $contact_record['id']);
 | 
			
		||||
 | 
			
		||||
		Contact::updateAvatar($ret["photo"], $importer['uid'], $contact_record["id"], true);
 | 
			
		||||
 | 
			
		||||
		if (in_array($importer["page-flags"], [Contact::PAGE_NORMAL, Contact::PAGE_PRVGROUP])) {
 | 
			
		||||
			logger("Sending intra message for author ".$author.".", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Sending intra message for author ".$author.".", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$hash = random_string().(string)time();   // Generate a confirm_key
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2436,7 +2437,7 @@ class Diaspora
 | 
			
		|||
		} else {
 | 
			
		||||
			// automatic friend approval
 | 
			
		||||
 | 
			
		||||
			logger("Does an automatic friend approval for author ".$author.".", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Does an automatic friend approval for author ".$author.".", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			Contact::updateAvatar($contact_record["photo"], $importer["uid"], $contact_record["id"]);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2470,7 +2471,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
			$user = DBA::selectFirst('user', [], ['uid' => $importer["uid"]]);
 | 
			
		||||
			if (DBA::isResult($user)) {
 | 
			
		||||
				logger("Sending share message (Relation: ".$new_relation.") to author ".$author." - Contact: ".$contact_record["id"]." - User: ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Sending share message (Relation: ".$new_relation.") to author ".$author." - Contact: ".$contact_record["id"]." - User: ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
				$ret = self::sendShare($user, $contact_record);
 | 
			
		||||
 | 
			
		||||
				// Send the profile data, maybe it weren't transmitted before
 | 
			
		||||
| 
						 | 
				
			
			@ -2493,7 +2494,7 @@ class Diaspora
 | 
			
		|||
	public static function originalItem($guid, $orig_author)
 | 
			
		||||
	{
 | 
			
		||||
		if (empty($guid)) {
 | 
			
		||||
			logger('Empty guid. Quitting.');
 | 
			
		||||
			Logger::log('Empty guid. Quitting.');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2504,7 +2505,7 @@ class Diaspora
 | 
			
		|||
		$item = Item::selectFirst($fields, $condition);
 | 
			
		||||
 | 
			
		||||
		if (DBA::isResult($item)) {
 | 
			
		||||
			logger("reshared message ".$guid." already exists on system.");
 | 
			
		||||
			Logger::log("reshared message ".$guid." already exists on system.");
 | 
			
		||||
 | 
			
		||||
			// Maybe it is already a reshared item?
 | 
			
		||||
			// Then refetch the content, if it is a reshare from a reshare.
 | 
			
		||||
| 
						 | 
				
			
			@ -2527,17 +2528,17 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		if (!DBA::isResult($item)) {
 | 
			
		||||
			if (empty($orig_author)) {
 | 
			
		||||
				logger('Empty author for guid ' . $guid . '. Quitting.');
 | 
			
		||||
				Logger::log('Empty author for guid ' . $guid . '. Quitting.');
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			$server = "https://".substr($orig_author, strpos($orig_author, "@") + 1);
 | 
			
		||||
			logger("1st try: reshared message ".$guid." will be fetched via SSL from the server ".$server);
 | 
			
		||||
			Logger::log("1st try: reshared message ".$guid." will be fetched via SSL from the server ".$server);
 | 
			
		||||
			$stored = self::storeByGuid($guid, $server);
 | 
			
		||||
 | 
			
		||||
			if (!$stored) {
 | 
			
		||||
				$server = "http://".substr($orig_author, strpos($orig_author, "@") + 1);
 | 
			
		||||
				logger("2nd try: reshared message ".$guid." will be fetched without SSL from the server ".$server);
 | 
			
		||||
				Logger::log("2nd try: reshared message ".$guid." will be fetched without SSL from the server ".$server);
 | 
			
		||||
				$stored = self::storeByGuid($guid, $server);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2643,7 +2644,7 @@ class Diaspora
 | 
			
		|||
		self::sendParticipation($contact, $datarray);
 | 
			
		||||
 | 
			
		||||
		if ($message_id) {
 | 
			
		||||
			logger("Stored reshare ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Stored reshare ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			if ($datarray['uid'] == 0) {
 | 
			
		||||
				Item::distribute($message_id);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -2670,7 +2671,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$person = self::personByHandle($author);
 | 
			
		||||
		if (!is_array($person)) {
 | 
			
		||||
			logger("unable to find author detail for ".$author);
 | 
			
		||||
			Logger::log("unable to find author detail for ".$author);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2690,13 +2691,13 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$r = Item::select($fields, $condition);
 | 
			
		||||
		if (!DBA::isResult($r)) {
 | 
			
		||||
			logger("Target guid ".$target_guid." was not found on this system for user ".$importer['uid'].".");
 | 
			
		||||
			Logger::log("Target guid ".$target_guid." was not found on this system for user ".$importer['uid'].".");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		while ($item = Item::fetch($r)) {
 | 
			
		||||
			if (strstr($item['file'], '[')) {
 | 
			
		||||
				logger("Target guid " . $target_guid . " for user " . $item['uid'] . " is filed. So it won't be deleted.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Target guid " . $target_guid . " for user " . $item['uid'] . " is filed. So it won't be deleted.", LOGGER_DEBUG);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2705,13 +2706,13 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
			// Only delete it if the parent author really fits
 | 
			
		||||
			if (!link_compare($parent["author-link"], $contact["url"]) && !link_compare($item["author-link"], $contact["url"])) {
 | 
			
		||||
				logger("Thread author ".$parent["author-link"]." and item author ".$item["author-link"]." don't fit to expected contact ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Thread author ".$parent["author-link"]." and item author ".$item["author-link"]." don't fit to expected contact ".$contact["url"], LOGGER_DEBUG);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			Item::delete(['id' => $item['id']]);
 | 
			
		||||
 | 
			
		||||
			logger("Deleted target ".$target_guid." (".$item["id"].") from user ".$item["uid"]." parent: ".$item["parent"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Deleted target ".$target_guid." (".$item["id"].") from user ".$item["uid"]." parent: ".$item["parent"], LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -2732,7 +2733,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$contact = self::contactByHandle($importer["uid"], $sender);
 | 
			
		||||
		if (!$contact && (in_array($target_type, ["Contact", "Person"]))) {
 | 
			
		||||
			logger("cannot find contact for sender: ".$sender." and user ".$importer["uid"]);
 | 
			
		||||
			Logger::log("cannot find contact for sender: ".$sender." and user ".$importer["uid"]);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2740,7 +2741,7 @@ class Diaspora
 | 
			
		|||
			$contact = [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Got retraction for ".$target_type.", sender ".$sender." and user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Got retraction for ".$target_type.", sender ".$sender." and user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		switch ($target_type) {
 | 
			
		||||
			case "Comment":
 | 
			
		||||
| 
						 | 
				
			
			@ -2756,7 +2757,7 @@ class Diaspora
 | 
			
		|||
				break;
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
				logger("Unknown target type ".$target_type);
 | 
			
		||||
				Logger::log("Unknown target type ".$target_type);
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -2870,7 +2871,7 @@ class Diaspora
 | 
			
		|||
		self::sendParticipation($contact, $datarray);
 | 
			
		||||
 | 
			
		||||
		if ($message_id) {
 | 
			
		||||
			logger("Stored item ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Stored item ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
 | 
			
		||||
			if ($datarray['uid'] == 0) {
 | 
			
		||||
				Item::distribute($message_id);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -2922,11 +2923,11 @@ class Diaspora
 | 
			
		|||
	 */
 | 
			
		||||
	public static function encodePrivateData($msg, array $user, array $contact, $prvkey, $pubkey)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Message: ".$msg, LOGGER_DATA);
 | 
			
		||||
		Logger::log("Message: ".$msg, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		// without a public key nothing will work
 | 
			
		||||
		if (!$pubkey) {
 | 
			
		||||
			logger("pubkey missing: contact id: ".$contact["id"]);
 | 
			
		||||
			Logger::log("pubkey missing: contact id: ".$contact["id"]);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3068,11 +3069,11 @@ class Diaspora
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$dest_url) {
 | 
			
		||||
			logger("no url for contact: ".$contact["id"]." batch mode =".$public_batch);
 | 
			
		||||
			Logger::log("no url for contact: ".$contact["id"]." batch mode =".$public_batch);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("transmit: ".$logid."-".$guid." ".$dest_url);
 | 
			
		||||
		Logger::log("transmit: ".$logid."-".$guid." ".$dest_url);
 | 
			
		||||
 | 
			
		||||
		if (!$queue_run && Queue::wasDelayed($contact["id"])) {
 | 
			
		||||
			$return_code = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -3083,16 +3084,16 @@ class Diaspora
 | 
			
		|||
				$postResult = Network::post($dest_url."/", $envelope, ["Content-Type: ".$content_type]);
 | 
			
		||||
				$return_code = $postResult->getReturnCode();
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("test_mode");
 | 
			
		||||
				Logger::log("test_mode");
 | 
			
		||||
				return 200;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("transmit: ".$logid."-".$guid." to ".$dest_url." returns: ".$return_code);
 | 
			
		||||
		Logger::log("transmit: ".$logid."-".$guid." to ".$dest_url." returns: ".$return_code);
 | 
			
		||||
 | 
			
		||||
		if (!$return_code || (($return_code == 503) && (stristr($postResult->getHeader(), "retry-after")))) {
 | 
			
		||||
			if (!$no_queue && !empty($contact['contact-type']) && ($contact['contact-type'] != Contact::ACCOUNT_TYPE_RELAY)) {
 | 
			
		||||
				logger("queue message");
 | 
			
		||||
				Logger::log("queue message");
 | 
			
		||||
				// queue message for redelivery
 | 
			
		||||
				Queue::add($contact["id"], Protocol::DIASPORA, $envelope, $public_batch, $guid);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -3140,8 +3141,8 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$msg = self::buildPostXml($type, $message);
 | 
			
		||||
 | 
			
		||||
		logger('message: '.$msg, LOGGER_DATA);
 | 
			
		||||
		logger('send guid '.$guid, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('message: '.$msg, LOGGER_DATA);
 | 
			
		||||
		Logger::log('send guid '.$guid, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// Fallback if the private key wasn't transmitted in the expected field
 | 
			
		||||
		if (empty($owner['uprvkey'])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -3157,7 +3158,7 @@ class Diaspora
 | 
			
		|||
			$return_code = self::transmit($owner, $contact, $envelope, $public_batch, false, $guid);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("guid: ".$guid." result ".$return_code, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("guid: ".$guid." result ".$return_code, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $return_code;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -3202,7 +3203,7 @@ class Diaspora
 | 
			
		|||
				"parent_type" => "Post",
 | 
			
		||||
				"parent_guid" => $item["guid"]];
 | 
			
		||||
 | 
			
		||||
		logger("Send participation for ".$item["guid"]." by ".$author, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Send participation for ".$item["guid"]." by ".$author, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// It doesn't matter what we store, we only want to avoid sending repeated notifications for the same item
 | 
			
		||||
		Cache::set($cachekey, $item["guid"], Cache::QUARTER_HOUR);
 | 
			
		||||
| 
						 | 
				
			
			@ -3231,7 +3232,7 @@ class Diaspora
 | 
			
		|||
				"profile" => $profile,
 | 
			
		||||
				"signature" => $signature];
 | 
			
		||||
 | 
			
		||||
		logger("Send account migration ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Send account migration ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return self::buildAndTransmit($owner, $contact, "account_migration", $message);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -3274,7 +3275,7 @@ class Diaspora
 | 
			
		|||
				"following" => "true",
 | 
			
		||||
				"sharing" => "true"];
 | 
			
		||||
 | 
			
		||||
		logger("Send share ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Send share ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return self::buildAndTransmit($owner, $contact, "contact", $message);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -3294,7 +3295,7 @@ class Diaspora
 | 
			
		|||
				"following" => "false",
 | 
			
		||||
				"sharing" => "false"];
 | 
			
		||||
 | 
			
		||||
		logger("Send unshare ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Send unshare ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return self::buildAndTransmit($owner, $contact, "contact", $message);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -3654,7 +3655,7 @@ class Diaspora
 | 
			
		|||
				$attend_answer = 'tentative';
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				logger('Unknown verb '.$item['verb'].' in item '.$item['guid']);
 | 
			
		||||
				Logger::log('Unknown verb '.$item['verb'].' in item '.$item['guid']);
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3807,7 +3808,7 @@ class Diaspora
 | 
			
		|||
			$type = "comment";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Got relayable data ".$type." for item ".$item["guid"]." (".$item["id"].")", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Got relayable data ".$type." for item ".$item["guid"]." (".$item["id"].")", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// Old way - is used by the internal Friendica functions
 | 
			
		||||
		/// @todo Change all signatur storing functions to the new format
 | 
			
		||||
| 
						 | 
				
			
			@ -3831,13 +3832,13 @@ class Diaspora
 | 
			
		|||
					$message[$field] = $data;
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("Signature text for item ".$item["guid"]." (".$item["id"].") couldn't be extracted: ".$item['signed_text'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Signature text for item ".$item["guid"]." (".$item["id"].") couldn't be extracted: ".$item['signed_text'], LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$message["parent_author_signature"] = self::signature($owner, $message);
 | 
			
		||||
 | 
			
		||||
		logger("Relayed data ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Relayed data ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return self::buildAndTransmit($owner, $contact, $type, $message, $public_batch, $item["guid"]);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -3871,7 +3872,7 @@ class Diaspora
 | 
			
		|||
				"target_guid" => $item['guid'],
 | 
			
		||||
				"target_type" => $target_type];
 | 
			
		||||
 | 
			
		||||
		logger("Got message ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Got message ".print_r($message, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return self::buildAndTransmit($owner, $contact, $msg_type, $message, $public_batch, $item["guid"]);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -3891,7 +3892,7 @@ class Diaspora
 | 
			
		|||
 | 
			
		||||
		$cnv = DBA::selectFirst('conv', [], ['id' => $item["convid"], 'uid' => $item["uid"]]);
 | 
			
		||||
		if (!DBA::isResult($cnv)) {
 | 
			
		||||
			logger("conversation not found.");
 | 
			
		||||
			Logger::log("conversation not found.");
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4107,7 +4108,7 @@ class Diaspora
 | 
			
		|||
		$message = self::createProfileData($uid);
 | 
			
		||||
 | 
			
		||||
		foreach ($recips as $recip) {
 | 
			
		||||
			logger("Send updated profile data for user ".$uid." to contact ".$recip["id"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Send updated profile data for user ".$uid." to contact ".$recip["id"], LOGGER_DEBUG);
 | 
			
		||||
			self::buildAndTransmit($owner, $recip, "profile", $message, false, "", false);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -4124,6 +4125,7 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$owner = User::getOwnerDataById($uid);
 | 
			
		||||
		if (empty($owner)) {
 | 
			
		||||
			Logger::log("No owner post, so not storing signature", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4153,6 +4155,7 @@ class Diaspora
 | 
			
		|||
	{
 | 
			
		||||
		$owner = User::getOwnerDataById($uid);
 | 
			
		||||
		if (empty($owner)) {
 | 
			
		||||
			Logger::log("No owner post, so not storing signature", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@
 | 
			
		|||
 */
 | 
			
		||||
namespace Friendica\Protocol;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Content\Text\HTML;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -28,12 +29,12 @@ class Email
 | 
			
		|||
 | 
			
		||||
		$errors = imap_errors();
 | 
			
		||||
		if (!empty($errors)) {
 | 
			
		||||
			logger('IMAP Errors occured: ' . json_encode($errors));
 | 
			
		||||
			Logger::log('IMAP Errors occured: ' . json_encode($errors));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$alerts = imap_alerts();
 | 
			
		||||
		if (!empty($alerts)) {
 | 
			
		||||
			logger('IMAP Alerts occured: ' . json_encode($alerts));
 | 
			
		||||
			Logger::log('IMAP Alerts occured: ' . json_encode($alerts));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return $mbox;
 | 
			
		||||
| 
						 | 
				
			
			@ -54,21 +55,21 @@ class Email
 | 
			
		|||
		if (!$search1) {
 | 
			
		||||
			$search1 = [];
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Found mails from ".$email_addr, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Found mails from ".$email_addr, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$search2 = @imap_search($mbox, 'TO "' . $email_addr . '"', SE_UID);
 | 
			
		||||
		if (!$search2) {
 | 
			
		||||
			$search2 = [];
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Found mails to ".$email_addr, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Found mails to ".$email_addr, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$search3 = @imap_search($mbox, 'CC "' . $email_addr . '"', SE_UID);
 | 
			
		||||
		if (!$search3) {
 | 
			
		||||
			$search3 = [];
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Found mails cc ".$email_addr, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Found mails cc ".$email_addr, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$res = array_unique(array_merge($search1, $search2, $search3));
 | 
			
		||||
| 
						 | 
				
			
			@ -351,7 +352,7 @@ class Email
 | 
			
		|||
 | 
			
		||||
		//$message = '<html><body>' . $html . '</body></html>';
 | 
			
		||||
		//$message = html2plain($html);
 | 
			
		||||
		logger('notifier: email delivery to ' . $addr);
 | 
			
		||||
		Logger::log('notifier: email delivery to ' . $addr);
 | 
			
		||||
		mail($addr, $subject, $body, $headers);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ namespace Friendica\Protocol;
 | 
			
		|||
use DOMDocument;
 | 
			
		||||
use DOMXPath;
 | 
			
		||||
use Friendica\Content\Text\HTML;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -40,12 +41,12 @@ class Feed {
 | 
			
		|||
		$a = get_app();
 | 
			
		||||
 | 
			
		||||
		if (!$simulate) {
 | 
			
		||||
			logger("Import Atom/RSS feed '".$contact["name"]."' (Contact ".$contact["id"].") for user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Import Atom/RSS feed '".$contact["name"]."' (Contact ".$contact["id"].") for user ".$importer["uid"], LOGGER_DEBUG);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("Test Atom/RSS feed", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Test Atom/RSS feed", LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
		if (empty($xml)) {
 | 
			
		||||
			logger('XML is empty.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('XML is empty.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +200,7 @@ class Feed {
 | 
			
		|||
		$header["contact-id"] = $contact["id"];
 | 
			
		||||
 | 
			
		||||
		if (!is_object($entries)) {
 | 
			
		||||
			logger("There are no entries in this feed.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("There are no entries in this feed.", LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +249,7 @@ class Feed {
 | 
			
		|||
					$importer["uid"], $item["uri"], Protocol::FEED, Protocol::DFRN];
 | 
			
		||||
				$previous = Item::selectFirst(['id'], $condition);
 | 
			
		||||
				if (DBA::isResult($previous)) {
 | 
			
		||||
					logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$previous["id"], LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$previous["id"], LOGGER_DEBUG);
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -423,7 +424,7 @@ class Feed {
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if (!$simulate) {
 | 
			
		||||
				logger("Stored feed: ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Stored feed: ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				$notify = Item::isRemoteSelf($contact, $item);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -440,7 +441,7 @@ class Feed {
 | 
			
		|||
 | 
			
		||||
				$id = Item::insert($item, false, $notify);
 | 
			
		||||
 | 
			
		||||
				logger("Feed for contact ".$contact["url"]." stored under id ".$id);
 | 
			
		||||
				Logger::log("Feed for contact ".$contact["url"]." stored under id ".$id);
 | 
			
		||||
			} else {
 | 
			
		||||
				$items[] = $item;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ use Friendica\Content\Text\HTML;
 | 
			
		|||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Lock;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +196,7 @@ class OStatus
 | 
			
		|||
			DBA::update('contact', $contact, ['id' => $contact["id"]], $current);
 | 
			
		||||
 | 
			
		||||
			if (!empty($author["author-avatar"]) && ($author["author-avatar"] != $current['avatar'])) {
 | 
			
		||||
				logger("Update profile picture for contact ".$contact["id"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Update profile picture for contact ".$contact["id"], LOGGER_DEBUG);
 | 
			
		||||
				Contact::updateAvatar($author["author-avatar"], $importer["uid"], $contact["id"]);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +323,7 @@ class OStatus
 | 
			
		|||
			self::$conv_list = [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Import OStatus message for user ' . $importer['uid'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Import OStatus message for user ' . $importer['uid'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if ($xml == "") {
 | 
			
		||||
			return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -348,7 +349,7 @@ class OStatus
 | 
			
		|||
				foreach ($hub_attributes as $hub_attribute) {
 | 
			
		||||
					if ($hub_attribute->name == "href") {
 | 
			
		||||
						$hub = $hub_attribute->textContent;
 | 
			
		||||
						logger("Found hub ".$hub, LOGGER_DEBUG);
 | 
			
		||||
						Logger::log("Found hub ".$hub, LOGGER_DEBUG);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -433,27 +434,27 @@ class OStatus
 | 
			
		|||
 | 
			
		||||
			if (in_array($item["verb"], [NAMESPACE_OSTATUS."/unfavorite", ACTIVITY_UNFAVORITE])) {
 | 
			
		||||
				// Ignore "Unfavorite" message
 | 
			
		||||
				logger("Ignore unfavorite message ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Ignore unfavorite message ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Deletions come with the same uri, so we check for duplicates after processing deletions
 | 
			
		||||
			if (Item::exists(['uid' => $importer["uid"], 'uri' => $item["uri"]])) {
 | 
			
		||||
				logger('Post with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Post with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
				continue;
 | 
			
		||||
			} else {
 | 
			
		||||
				logger('Processing post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Processing post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ($item["verb"] == ACTIVITY_JOIN) {
 | 
			
		||||
				// ignore "Join" messages
 | 
			
		||||
				logger("Ignore join message ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Ignore join message ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ($item["verb"] == "http://mastodon.social/schema/1.0/block") {
 | 
			
		||||
				// ignore mastodon "block" messages
 | 
			
		||||
				logger("Ignore block message ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Ignore block message ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -470,7 +471,7 @@ class OStatus
 | 
			
		|||
 | 
			
		||||
			if ($item["verb"] == ACTIVITY_FAVORITE) {
 | 
			
		||||
				$orig_uri = $xpath->query("activity:object/atom:id", $entry)->item(0)->nodeValue;
 | 
			
		||||
				logger("Favorite ".$orig_uri." ".print_r($item, true));
 | 
			
		||||
				Logger::log("Favorite ".$orig_uri." ".print_r($item, true));
 | 
			
		||||
 | 
			
		||||
				$item["verb"] = ACTIVITY_LIKE;
 | 
			
		||||
				$item["parent-uri"] = $orig_uri;
 | 
			
		||||
| 
						 | 
				
			
			@ -480,7 +481,7 @@ class OStatus
 | 
			
		|||
 | 
			
		||||
			// http://activitystrea.ms/schema/1.0/rsvp-yes
 | 
			
		||||
			if (!in_array($item["verb"], [ACTIVITY_POST, ACTIVITY_LIKE, ACTIVITY_SHARE])) {
 | 
			
		||||
				logger("Unhandled verb ".$item["verb"]." ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Unhandled verb ".$item["verb"]." ".print_r($item, true), LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			self::processPost($xpath, $entry, $item, $importer);
 | 
			
		||||
| 
						 | 
				
			
			@ -493,10 +494,10 @@ class OStatus
 | 
			
		|||
						// If not, then it depends on this setting
 | 
			
		||||
						$valid = !Config::get('system', 'ostatus_full_threads');
 | 
			
		||||
						if ($valid) {
 | 
			
		||||
							logger("Item with uri ".self::$itemlist[0]['uri']." will be imported due to the system settings.", LOGGER_DEBUG);
 | 
			
		||||
							Logger::log("Item with uri ".self::$itemlist[0]['uri']." will be imported due to the system settings.", LOGGER_DEBUG);
 | 
			
		||||
						}
 | 
			
		||||
					} else {
 | 
			
		||||
						logger("Item with uri ".self::$itemlist[0]['uri']." belongs to a contact (".self::$itemlist[0]['contact-id']."). It will be imported.", LOGGER_DEBUG);
 | 
			
		||||
						Logger::log("Item with uri ".self::$itemlist[0]['uri']." belongs to a contact (".self::$itemlist[0]['contact-id']."). It will be imported.", LOGGER_DEBUG);
 | 
			
		||||
					}
 | 
			
		||||
					if ($valid) {
 | 
			
		||||
						// Never post a thread when the only interaction by our contact was a like
 | 
			
		||||
| 
						 | 
				
			
			@ -508,14 +509,14 @@ class OStatus
 | 
			
		|||
							}
 | 
			
		||||
						}
 | 
			
		||||
						if ($valid) {
 | 
			
		||||
							logger("Item with uri ".self::$itemlist[0]['uri']." will be imported since the thread contains posts or shares.", LOGGER_DEBUG);
 | 
			
		||||
							Logger::log("Item with uri ".self::$itemlist[0]['uri']." will be imported since the thread contains posts or shares.", LOGGER_DEBUG);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					// But we will only import complete threads
 | 
			
		||||
					$valid = Item::exists(['uid' => $importer["uid"], 'uri' => self::$itemlist[0]['parent-uri']]);
 | 
			
		||||
					if ($valid) {
 | 
			
		||||
						logger("Item with uri ".self::$itemlist[0]["uri"]." belongs to parent ".self::$itemlist[0]['parent-uri']." of user ".$importer["uid"].". It will be imported.", LOGGER_DEBUG);
 | 
			
		||||
						Logger::log("Item with uri ".self::$itemlist[0]["uri"]." belongs to parent ".self::$itemlist[0]['parent-uri']." of user ".$importer["uid"].". It will be imported.", LOGGER_DEBUG);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -532,25 +533,25 @@ class OStatus
 | 
			
		|||
					foreach (self::$itemlist as $item) {
 | 
			
		||||
						$found = Item::exists(['uid' => $importer["uid"], 'uri' => $item["uri"]]);
 | 
			
		||||
						if ($found) {
 | 
			
		||||
							logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already exists.", LOGGER_DEBUG);
 | 
			
		||||
							Logger::log("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already exists.", LOGGER_DEBUG);
 | 
			
		||||
						} elseif ($item['contact-id'] < 0) {
 | 
			
		||||
							logger("Item with uri ".$item["uri"]." is from a blocked contact.", LOGGER_DEBUG);
 | 
			
		||||
							Logger::log("Item with uri ".$item["uri"]." is from a blocked contact.", LOGGER_DEBUG);
 | 
			
		||||
						} else {
 | 
			
		||||
							// We are having duplicated entries. Hopefully this solves it.
 | 
			
		||||
							if (Lock::acquire('ostatus_process_item_insert')) {
 | 
			
		||||
								$ret = Item::insert($item);
 | 
			
		||||
								Lock::release('ostatus_process_item_insert');
 | 
			
		||||
								logger("Item with uri ".$item["uri"]." for user ".$importer["uid"].' stored. Return value: '.$ret);
 | 
			
		||||
								Logger::log("Item with uri ".$item["uri"]." for user ".$importer["uid"].' stored. Return value: '.$ret);
 | 
			
		||||
							} else {
 | 
			
		||||
								$ret = Item::insert($item);
 | 
			
		||||
								logger("We couldn't lock - but tried to store the item anyway. Return value is ".$ret);
 | 
			
		||||
								Logger::log("We couldn't lock - but tried to store the item anyway. Return value is ".$ret);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				self::$itemlist = [];
 | 
			
		||||
			}
 | 
			
		||||
			logger('Processing done for post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Processing done for post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -564,13 +565,13 @@ class OStatus
 | 
			
		|||
	{
 | 
			
		||||
		$condition = ['uid' => $item['uid'], 'author-id' => $item['author-id'], 'uri' => $item['uri']];
 | 
			
		||||
		if (!Item::exists($condition)) {
 | 
			
		||||
			logger('Item from '.$item['author-link'].' with uri '.$item['uri'].' for user '.$item['uid']." wasn't found. We don't delete it.");
 | 
			
		||||
			Logger::log('Item from '.$item['author-link'].' with uri '.$item['uri'].' for user '.$item['uid']." wasn't found. We don't delete it.");
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Item::delete($condition);
 | 
			
		||||
 | 
			
		||||
		logger('Deleted item with uri '.$item['uri'].' for user '.$item['uid']);
 | 
			
		||||
		Logger::log('Deleted item with uri '.$item['uri'].' for user '.$item['uid']);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -706,7 +707,7 @@ class OStatus
 | 
			
		|||
					self::fetchRelated($related, $item["parent-uri"], $importer);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				logger('Reply with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Reply with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			$item["parent-uri"] = $item["uri"];
 | 
			
		||||
| 
						 | 
				
			
			@ -852,11 +853,11 @@ class OStatus
 | 
			
		|||
 | 
			
		||||
			$condition = ['item-uri' => $conv_data['uri'],'protocol' => Conversation::PARCEL_FEED];
 | 
			
		||||
			if (DBA::exists('conversation', $condition)) {
 | 
			
		||||
				logger('Delete deprecated entry for URI '.$conv_data['uri'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Delete deprecated entry for URI '.$conv_data['uri'], LOGGER_DEBUG);
 | 
			
		||||
				DBA::delete('conversation', ['item-uri' => $conv_data['uri']]);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger('Store conversation data for uri '.$conv_data['uri'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Store conversation data for uri '.$conv_data['uri'], LOGGER_DEBUG);
 | 
			
		||||
			Conversation::insert($conv_data);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -876,7 +877,7 @@ class OStatus
 | 
			
		|||
	{
 | 
			
		||||
		$condition = ['`item-uri` = ? AND `protocol` IN (?, ?)', $self, Conversation::PARCEL_DFRN, Conversation::PARCEL_SALMON];
 | 
			
		||||
		if (DBA::exists('conversation', $condition)) {
 | 
			
		||||
			logger('Conversation '.$item['uri'].' is already stored.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Conversation '.$item['uri'].' is already stored.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -896,7 +897,7 @@ class OStatus
 | 
			
		|||
		$item["protocol"] = Conversation::PARCEL_SALMON;
 | 
			
		||||
		$item["source"] = $xml;
 | 
			
		||||
 | 
			
		||||
		logger('Conversation '.$item['uri'].' is now fetched.', LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Conversation '.$item['uri'].' is now fetched.', LOGGER_DEBUG);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -915,11 +916,11 @@ class OStatus
 | 
			
		|||
			$stored = true;
 | 
			
		||||
			$xml = $conversation['source'];
 | 
			
		||||
			if (self::process($xml, $importer, $contact, $hub, $stored, false)) {
 | 
			
		||||
				logger('Got valid cached XML for URI '.$related_uri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Got valid cached XML for URI '.$related_uri, LOGGER_DEBUG);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			if ($conversation['protocol'] == Conversation::PARCEL_SALMON) {
 | 
			
		||||
				logger('Delete invalid cached XML for URI '.$related_uri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Delete invalid cached XML for URI '.$related_uri, LOGGER_DEBUG);
 | 
			
		||||
				DBA::delete('conversation', ['item-uri' => $related_uri]);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -934,7 +935,7 @@ class OStatus
 | 
			
		|||
		$xml = '';
 | 
			
		||||
 | 
			
		||||
		if (stristr($curlResult->getHeader(), 'Content-Type: application/atom+xml')) {
 | 
			
		||||
			logger('Directly fetched XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Directly fetched XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
			$xml = $curlResult->getBody();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -959,7 +960,7 @@ class OStatus
 | 
			
		|||
					$curlResult = Network::curl($atom_file);
 | 
			
		||||
 | 
			
		||||
					if ($curlResult->isSuccess()) {
 | 
			
		||||
						logger('Fetched XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
						Logger::log('Fetched XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
						$xml = $curlResult->getBody();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -971,7 +972,7 @@ class OStatus
 | 
			
		|||
			$curlResult = Network::curl(str_replace('/notice/', '/api/statuses/show/', $related).'.atom');
 | 
			
		||||
 | 
			
		||||
			if ($curlResult->isSuccess()) {
 | 
			
		||||
				logger('GNU Social workaround to fetch XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('GNU Social workaround to fetch XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
				$xml = $curlResult->getBody();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -982,7 +983,7 @@ class OStatus
 | 
			
		|||
			$curlResult = Network::curl(str_replace('/notice/', '/api/statuses/show/', $related_guess).'.atom');
 | 
			
		||||
 | 
			
		||||
			if ($curlResult->isSuccess()) {
 | 
			
		||||
				logger('GNU Social workaround 2 to fetch XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('GNU Social workaround 2 to fetch XML for URI ' . $related_uri, LOGGER_DEBUG);
 | 
			
		||||
				$xml = $curlResult->getBody();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -993,7 +994,7 @@ class OStatus
 | 
			
		|||
			$conversation = DBA::selectFirst('conversation', ['source'], $condition);
 | 
			
		||||
			if (DBA::isResult($conversation)) {
 | 
			
		||||
				$stored = true;
 | 
			
		||||
				logger('Got cached XML from conversation for URI '.$related_uri, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Got cached XML from conversation for URI '.$related_uri, LOGGER_DEBUG);
 | 
			
		||||
				$xml = $conversation['source'];
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1001,7 +1002,7 @@ class OStatus
 | 
			
		|||
		if ($xml != '') {
 | 
			
		||||
			self::process($xml, $importer, $contact, $hub, $stored, false);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger("XML couldn't be fetched for URI: ".$related_uri." - href: ".$related, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("XML couldn't be fetched for URI: ".$related_uri." - href: ".$related, LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1651,7 +1652,7 @@ class OStatus
 | 
			
		|||
	private static function reshareEntry(DOMDocument $doc, array $item, array $owner, $repeated_guid, $toplevel)
 | 
			
		||||
	{
 | 
			
		||||
		if (($item["id"] != $item["parent"]) && (normalise_link($item["author-link"]) != normalise_link($owner["url"]))) {
 | 
			
		||||
			logger("OStatus entry is from author ".$owner["url"]." - not from ".$item["author-link"].". Quitting.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("OStatus entry is from author ".$owner["url"]." - not from ".$item["author-link"].". Quitting.", LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$title = self::entryHeader($doc, $entry, $owner, $item, $toplevel);
 | 
			
		||||
| 
						 | 
				
			
			@ -1714,7 +1715,7 @@ class OStatus
 | 
			
		|||
	private static function likeEntry(DOMDocument $doc, array $item, array $owner, $toplevel)
 | 
			
		||||
	{
 | 
			
		||||
		if (($item["id"] != $item["parent"]) && (normalise_link($item["author-link"]) != normalise_link($owner["url"]))) {
 | 
			
		||||
			logger("OStatus entry is from author ".$owner["url"]." - not from ".$item["author-link"].". Quitting.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("OStatus entry is from author ".$owner["url"]." - not from ".$item["author-link"].". Quitting.", LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$title = self::entryHeader($doc, $entry, $owner, $item, $toplevel);
 | 
			
		||||
| 
						 | 
				
			
			@ -1861,7 +1862,7 @@ class OStatus
 | 
			
		|||
	private static function noteEntry(DOMDocument $doc, array $item, array $owner, $toplevel)
 | 
			
		||||
	{
 | 
			
		||||
		if (($item["id"] != $item["parent"]) && (normalise_link($item["author-link"]) != normalise_link($owner["url"]))) {
 | 
			
		||||
			logger("OStatus entry is from author ".$owner["url"]." - not from ".$item["author-link"].". Quitting.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("OStatus entry is from author ".$owner["url"]." - not from ".$item["author-link"].". Quitting.", LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$title = self::entryHeader($doc, $entry, $owner, $item, $toplevel);
 | 
			
		||||
| 
						 | 
				
			
			@ -2152,7 +2153,7 @@ class OStatus
 | 
			
		|||
		if ((time() - strtotime($owner['last-item'])) < 15*60) {
 | 
			
		||||
			$result = Cache::get($cachekey);
 | 
			
		||||
			if (!$nocache && !is_null($result)) {
 | 
			
		||||
				logger('Feed duration: ' . number_format(microtime(true) - $stamp, 3) . ' - ' . $owner_nick . ' - ' . $filter . ' - ' . $previous_created . ' (cached)', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Feed duration: ' . number_format(microtime(true) - $stamp, 3) . ' - ' . $owner_nick . ' - ' . $filter . ' - ' . $previous_created . ' (cached)', LOGGER_DEBUG);
 | 
			
		||||
				$last_update = $result['last_update'];
 | 
			
		||||
				return $result['feed'];
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -2212,7 +2213,7 @@ class OStatus
 | 
			
		|||
		$msg = ['feed' => $feeddata, 'last_update' => $last_update];
 | 
			
		||||
		Cache::set($cachekey, $msg, Cache::QUARTER_HOUR);
 | 
			
		||||
 | 
			
		||||
		logger('Feed duration: ' . number_format(microtime(true) - $stamp, 3) . ' - ' . $owner_nick . ' - ' . $filter . ' - ' . $previous_created, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Feed duration: ' . number_format(microtime(true) - $stamp, 3) . ' - ' . $owner_nick . ' - ' . $filter . ' - ' . $previous_created, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $feeddata;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ use DOMXPath;
 | 
			
		|||
use Exception;
 | 
			
		||||
use Friendica\Content\Text\HTML;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -84,14 +85,14 @@ class PortableContact
 | 
			
		|||
 | 
			
		||||
		$url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation') ;
 | 
			
		||||
 | 
			
		||||
		logger('load: ' . $url, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('load: ' . $url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$fetchresult = Network::fetchUrlFull($url);
 | 
			
		||||
		$s = $fetchresult->getBody();
 | 
			
		||||
 | 
			
		||||
		logger('load: returns ' . $s, LOGGER_DATA);
 | 
			
		||||
		Logger::log('load: returns ' . $s, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		logger('load: return code: ' . $fetchresult->getReturnCode(), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('load: return code: ' . $fetchresult->getReturnCode(), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (($fetchresult->getReturnCode() > 299) || (! $s)) {
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +100,7 @@ class PortableContact
 | 
			
		|||
 | 
			
		||||
		$j = json_decode($s, true);
 | 
			
		||||
 | 
			
		||||
		logger('load: json: ' . print_r($j, true), LOGGER_DATA);
 | 
			
		||||
		Logger::log('load: json: ' . print_r($j, true), LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		if (!isset($j['entry'])) {
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -199,10 +200,10 @@ class PortableContact
 | 
			
		|||
 | 
			
		||||
				GContact::link($gcid, $uid, $cid, $zcid);
 | 
			
		||||
			} catch (Exception $e) {
 | 
			
		||||
				logger($e->getMessage(), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log($e->getMessage(), LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger("load: loaded $total entries", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("load: loaded $total entries", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$condition = ["`cid` = ? AND `uid` = ? AND `zcid` = ? AND `updated` < UTC_TIMESTAMP - INTERVAL 2 DAY", $cid, $uid, $zcid];
 | 
			
		||||
		DBA::delete('glink', $condition);
 | 
			
		||||
| 
						 | 
				
			
			@ -335,7 +336,7 @@ class PortableContact
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!in_array($gcontacts[0]["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::FEED, Protocol::OSTATUS, ""])) {
 | 
			
		||||
			logger("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -346,7 +347,7 @@ class PortableContact
 | 
			
		|||
					DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				logger("Profile ".$profile.": Server ".$server_url." wasn't reachable.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Profile ".$profile.": Server ".$server_url." wasn't reachable.", LOGGER_DEBUG);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			$contact['server_url'] = $server_url;
 | 
			
		||||
| 
						 | 
				
			
			@ -426,7 +427,7 @@ class PortableContact
 | 
			
		|||
							$fields = ['last_contact' => DateTimeFormat::utcNow()];
 | 
			
		||||
							DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 | 
			
		||||
 | 
			
		||||
							logger("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", LOGGER_DEBUG);
 | 
			
		||||
							Logger::log("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
							return $noscrape["updated"];
 | 
			
		||||
						}
 | 
			
		||||
| 
						 | 
				
			
			@ -437,7 +438,7 @@ class PortableContact
 | 
			
		|||
 | 
			
		||||
		// If we only can poll the feed, then we only do this once a while
 | 
			
		||||
		if (!$force && !self::updateNeeded($gcontacts[0]["created"], $gcontacts[0]["updated"], $gcontacts[0]["last_failure"], $gcontacts[0]["last_contact"])) {
 | 
			
		||||
			logger("Profile ".$profile." was last updated at ".$gcontacts[0]["updated"]." (cached)", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Profile ".$profile." was last updated at ".$gcontacts[0]["updated"]." (cached)", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			GContact::update($contact);
 | 
			
		||||
			return $gcontacts[0]["updated"];
 | 
			
		||||
| 
						 | 
				
			
			@ -464,10 +465,10 @@ class PortableContact
 | 
			
		|||
 | 
			
		||||
				self::lastUpdated($data["url"], $force);
 | 
			
		||||
			} catch (Exception $e) {
 | 
			
		||||
				logger($e->getMessage(), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log($e->getMessage(), LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger("Profile ".$profile." was deleted", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Profile ".$profile." was deleted", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -475,7 +476,7 @@ class PortableContact
 | 
			
		|||
			$fields = ['last_failure' => DateTimeFormat::utcNow()];
 | 
			
		||||
			DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 | 
			
		||||
 | 
			
		||||
			logger("Profile ".$profile." wasn't reachable (profile)", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Profile ".$profile." wasn't reachable (profile)", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -491,7 +492,7 @@ class PortableContact
 | 
			
		|||
			$fields = ['last_failure' => DateTimeFormat::utcNow()];
 | 
			
		||||
			DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 | 
			
		||||
 | 
			
		||||
			logger("Profile ".$profile." wasn't reachable (no feed)", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Profile ".$profile." wasn't reachable (no feed)", LOGGER_DEBUG);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -539,7 +540,7 @@ class PortableContact
 | 
			
		|||
			DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Profile ".$profile." was last updated at ".$last_updated, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Profile ".$profile." was last updated at ".$last_updated, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return $last_updated;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -662,7 +663,7 @@ class PortableContact
 | 
			
		|||
 | 
			
		||||
		foreach ($nodeinfo['links'] as $link) {
 | 
			
		||||
			if (!is_array($link) || empty($link['rel'])) {
 | 
			
		||||
				logger('Invalid nodeinfo format for ' . $server_url, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Invalid nodeinfo format for ' . $server_url, LOGGER_DEBUG);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if ($link['rel'] == 'http://nodeinfo.diaspora.software/ns/schema/1.0') {
 | 
			
		||||
| 
						 | 
				
			
			@ -963,7 +964,7 @@ class PortableContact
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if (!$force && !self::updateNeeded($gserver["created"], "", $last_failure, $last_contact)) {
 | 
			
		||||
				logger("Use cached data for server ".$server_url, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Use cached data for server ".$server_url, LOGGER_DEBUG);
 | 
			
		||||
				return ($last_contact >= $last_failure);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -979,7 +980,7 @@ class PortableContact
 | 
			
		|||
			$last_contact = DBA::NULL_DATETIME;
 | 
			
		||||
			$last_failure = DBA::NULL_DATETIME;
 | 
			
		||||
		}
 | 
			
		||||
		logger("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$gserver["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$gserver["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$failure = false;
 | 
			
		||||
		$possible_failure = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -1004,7 +1005,7 @@ class PortableContact
 | 
			
		|||
		// But we want to make sure to only quit if we are mostly sure that this server url fits.
 | 
			
		||||
		if (DBA::isResult($gserver) && ($orig_server_url == $server_url) &&
 | 
			
		||||
			($curlResult->isTimeout())) {
 | 
			
		||||
			logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
 | 
			
		||||
			DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1019,7 +1020,7 @@ class PortableContact
 | 
			
		|||
 | 
			
		||||
			// Quit if there is a timeout
 | 
			
		||||
			if ($curlResult->isTimeout()) {
 | 
			
		||||
				logger("Connection to server " . $server_url . " timed out.", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Connection to server " . $server_url . " timed out.", LOGGER_DEBUG);
 | 
			
		||||
				DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1398,9 +1399,9 @@ class PortableContact
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (($last_contact <= $last_failure) && !$failure) {
 | 
			
		||||
			logger("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", LOGGER_DEBUG);
 | 
			
		||||
		} elseif (($last_contact >= $last_failure) && $failure) {
 | 
			
		||||
			logger("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Check again if the server exists
 | 
			
		||||
| 
						 | 
				
			
			@ -1429,7 +1430,7 @@ class PortableContact
 | 
			
		|||
			self::discoverRelay($server_url);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("End discovery for server " . $server_url, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("End discovery for server " . $server_url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return !$failure;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1441,7 +1442,7 @@ class PortableContact
 | 
			
		|||
	 */
 | 
			
		||||
	private static function discoverRelay($server_url)
 | 
			
		||||
	{
 | 
			
		||||
		logger("Discover relay data for server " . $server_url, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Discover relay data for server " . $server_url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$curlResult = Network::curl($server_url . "/.well-known/x-social-relay");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1557,7 +1558,7 @@ class PortableContact
 | 
			
		|||
			$r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", DBA::escape(normalise_link($server_url)));
 | 
			
		||||
 | 
			
		||||
			if (!DBA::isResult($r)) {
 | 
			
		||||
				logger("Call server check for server ".$server_url, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Call server check for server ".$server_url, LOGGER_DEBUG);
 | 
			
		||||
				Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", $server_url);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1642,7 +1643,7 @@ class PortableContact
 | 
			
		|||
		// Fetch all users from the other server
 | 
			
		||||
		$url = $server["poco"] . "/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation";
 | 
			
		||||
 | 
			
		||||
		logger("Fetch all users from the server " . $server["url"], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Fetch all users from the server " . $server["url"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$curlResult = Network::curl($url);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1670,7 +1671,7 @@ class PortableContact
 | 
			
		|||
				$curlResult = Network::curl($url);
 | 
			
		||||
 | 
			
		||||
				if ($curlResult->isSuccess() && !empty($curlResult->getBody())) {
 | 
			
		||||
					logger("Fetch all global contacts from the server " . $server["nurl"], LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Fetch all global contacts from the server " . $server["nurl"], LOGGER_DEBUG);
 | 
			
		||||
					$data = json_decode($curlResult->getBody(), true);
 | 
			
		||||
 | 
			
		||||
					if (!empty($data)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1679,7 +1680,7 @@ class PortableContact
 | 
			
		|||
				}
 | 
			
		||||
 | 
			
		||||
				if (!$success && (Config::get('system', 'poco_discovery') > 2)) {
 | 
			
		||||
					logger("Fetch contacts from users of the server " . $server["nurl"], LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Fetch contacts from users of the server " . $server["nurl"], LOGGER_DEBUG);
 | 
			
		||||
					self::discoverServerUsers($data, $server);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1732,7 +1733,7 @@ class PortableContact
 | 
			
		|||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				logger('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], LOGGER_DEBUG);
 | 
			
		||||
				Worker::add(PRIORITY_LOW, 'DiscoverPoCo', 'update_server_directory', (int) $gserver['id']);
 | 
			
		||||
 | 
			
		||||
				if (!$complete && ( --$no_of_queries == 0)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1762,7 +1763,7 @@ class PortableContact
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if ($username != '') {
 | 
			
		||||
				logger('Fetch contacts for the user ' . $username . ' from the server ' . $server['nurl'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Fetch contacts for the user ' . $username . ' from the server ' . $server['nurl'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				// Fetch all contacts from a given user from the other server
 | 
			
		||||
				$url = $server['poco'] . '/' . $username . '/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation';
 | 
			
		||||
| 
						 | 
				
			
			@ -1865,7 +1866,7 @@ class PortableContact
 | 
			
		|||
			if ($generation > 0) {
 | 
			
		||||
				$success = true;
 | 
			
		||||
 | 
			
		||||
				logger("Store profile ".$profile_url, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Store profile ".$profile_url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				$gcontact = ["url" => $profile_url,
 | 
			
		||||
						"name" => $name,
 | 
			
		||||
| 
						 | 
				
			
			@ -1884,10 +1885,10 @@ class PortableContact
 | 
			
		|||
					$gcontact = GContact::sanitize($gcontact);
 | 
			
		||||
					GContact::update($gcontact);
 | 
			
		||||
				} catch (Exception $e) {
 | 
			
		||||
					logger($e->getMessage(), LOGGER_DEBUG);
 | 
			
		||||
					Logger::log($e->getMessage(), LOGGER_DEBUG);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				logger("Done for profile ".$profile_url, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Done for profile ".$profile_url, LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return $success;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@
 | 
			
		|||
 */
 | 
			
		||||
namespace Friendica\Protocol;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Network\Probe;
 | 
			
		||||
use Friendica\Util\Crypto;
 | 
			
		||||
use Friendica\Util\Network;
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +26,7 @@ class Salmon
 | 
			
		|||
	{
 | 
			
		||||
		$ret = [];
 | 
			
		||||
 | 
			
		||||
		logger('Fetching salmon key for '.$uri);
 | 
			
		||||
		Logger::log('Fetching salmon key for '.$uri);
 | 
			
		||||
 | 
			
		||||
		$arr = Probe::lrdd($uri);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +58,7 @@ class Salmon
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		logger('Key located: ' . print_r($ret, true));
 | 
			
		||||
		Logger::log('Key located: ' . print_r($ret, true));
 | 
			
		||||
 | 
			
		||||
		if (count($ret) == 1) {
 | 
			
		||||
			// We only found one one key so we don't care if the hash matches.
 | 
			
		||||
| 
						 | 
				
			
			@ -94,12 +95,12 @@ class Salmon
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (! $owner['sprvkey']) {
 | 
			
		||||
			logger(sprintf("user '%s' (%d) does not have a salmon private key. Send failed.",
 | 
			
		||||
			Logger::log(sprintf("user '%s' (%d) does not have a salmon private key. Send failed.",
 | 
			
		||||
			$owner['username'], $owner['uid']));
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('slapper called for '.$url.'. Data: ' . $slap);
 | 
			
		||||
		Logger::log('slapper called for '.$url.'. Data: ' . $slap);
 | 
			
		||||
 | 
			
		||||
		// create a magic envelope
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +144,7 @@ class Salmon
 | 
			
		|||
		// check for success, e.g. 2xx
 | 
			
		||||
 | 
			
		||||
		if ($return_code > 299) {
 | 
			
		||||
			logger('GNU Social salmon failed. Falling back to compliant mode');
 | 
			
		||||
			Logger::log('GNU Social salmon failed. Falling back to compliant mode');
 | 
			
		||||
 | 
			
		||||
			// Now try the compliant mode that normally isn't used for GNU Social
 | 
			
		||||
			$xmldata = ["me:env" => ["me:data" => $data,
 | 
			
		||||
| 
						 | 
				
			
			@ -166,7 +167,7 @@ class Salmon
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($return_code > 299) {
 | 
			
		||||
			logger('compliant salmon failed. Falling back to old status.net');
 | 
			
		||||
			Logger::log('compliant salmon failed. Falling back to old status.net');
 | 
			
		||||
 | 
			
		||||
			// Last try. This will most likely fail as well.
 | 
			
		||||
			$xmldata = ["me:env" => ["me:data" => $data,
 | 
			
		||||
| 
						 | 
				
			
			@ -187,7 +188,7 @@ class Salmon
 | 
			
		|||
			$return_code = $postResult->getReturnCode();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('slapper for '.$url.' returned ' . $return_code);
 | 
			
		||||
		Logger::log('slapper for '.$url.' returned ' . $return_code);
 | 
			
		||||
 | 
			
		||||
		if (! $return_code) {
 | 
			
		||||
			return -1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Util;
 | 
			
		|||
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use ASN_BASE;
 | 
			
		||||
use ASNValue;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -232,7 +233,7 @@ class Crypto
 | 
			
		|||
		$result = openssl_pkey_new($openssl_options);
 | 
			
		||||
 | 
			
		||||
		if (empty($result)) {
 | 
			
		||||
			logger('new_keypair: failed');
 | 
			
		||||
			Logger::log('new_keypair: failed');
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -347,7 +348,7 @@ class Crypto
 | 
			
		|||
	private static function encapsulateOther($data, $pubkey, $alg)
 | 
			
		||||
	{
 | 
			
		||||
		if (!$pubkey) {
 | 
			
		||||
			logger('no key. data: '.$data);
 | 
			
		||||
			Logger::log('no key. data: '.$data);
 | 
			
		||||
		}
 | 
			
		||||
		$fn = 'encrypt' . strtoupper($alg);
 | 
			
		||||
		if (method_exists(__CLASS__, $fn)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -359,7 +360,7 @@ class Crypto
 | 
			
		|||
			// log the offending call so we can track it down
 | 
			
		||||
			if (!openssl_public_encrypt($key, $k, $pubkey)) {
 | 
			
		||||
				$x = debug_backtrace();
 | 
			
		||||
				logger('RSA failed. ' . print_r($x[0], true));
 | 
			
		||||
				Logger::log('RSA failed. ' . print_r($x[0], true));
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			$result['alg'] = $alg;
 | 
			
		||||
| 
						 | 
				
			
			@ -388,7 +389,7 @@ class Crypto
 | 
			
		|||
	private static function encapsulateAes($data, $pubkey)
 | 
			
		||||
	{
 | 
			
		||||
		if (!$pubkey) {
 | 
			
		||||
			logger('aes_encapsulate: no key. data: ' . $data);
 | 
			
		||||
			Logger::log('aes_encapsulate: no key. data: ' . $data);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$key = random_bytes(32);
 | 
			
		||||
| 
						 | 
				
			
			@ -399,7 +400,7 @@ class Crypto
 | 
			
		|||
		// log the offending call so we can track it down
 | 
			
		||||
		if (!openssl_public_encrypt($key, $k, $pubkey)) {
 | 
			
		||||
			$x = debug_backtrace();
 | 
			
		||||
			logger('aes_encapsulate: RSA failed. ' . print_r($x[0], true));
 | 
			
		||||
			Logger::log('aes_encapsulate: RSA failed. ' . print_r($x[0], true));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$result['alg'] = 'aes256cbc';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Friendica\Util;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use DateTime;
 | 
			
		||||
use DateTimeZone;
 | 
			
		||||
use Exception;
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +126,7 @@ class DateTimeFormat
 | 
			
		|||
		try {
 | 
			
		||||
			$d = new DateTime($s, $from_obj);
 | 
			
		||||
		} catch (Exception $e) {
 | 
			
		||||
			logger('DateTimeFormat::convert: exception: ' . $e->getMessage());
 | 
			
		||||
			Logger::log('DateTimeFormat::convert: exception: ' . $e->getMessage());
 | 
			
		||||
			$d = new DateTime('now', $from_obj);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Util;
 | 
			
		|||
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Protocol\Email;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -96,8 +97,8 @@ class Emailer
 | 
			
		|||
			$hookdata['headers'],
 | 
			
		||||
			$hookdata['parameters']
 | 
			
		||||
		);
 | 
			
		||||
		logger("header " . 'To: ' . $params['toEmail'] . "\n" . $messageHeader, LOGGER_DEBUG);
 | 
			
		||||
		logger("return value " . (($res)?"true":"false"), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("header " . 'To: ' . $params['toEmail'] . "\n" . $messageHeader, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("return value " . (($res)?"true":"false"), LOGGER_DEBUG);
 | 
			
		||||
		return $res;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ namespace Friendica\Util;
 | 
			
		|||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\User;
 | 
			
		||||
use Friendica\Model\APContact;
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +60,7 @@ class HTTPSignature
 | 
			
		|||
		$sig_block = self::parseSigheader($headers['authorization']);
 | 
			
		||||
 | 
			
		||||
		if (!$sig_block) {
 | 
			
		||||
			logger('no signature provided.');
 | 
			
		||||
			Logger::log('no signature provided.');
 | 
			
		||||
			return $result;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +90,7 @@ class HTTPSignature
 | 
			
		|||
			$key = $key($sig_block['keyId']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Got keyID ' . $sig_block['keyId']);
 | 
			
		||||
		Logger::log('Got keyID ' . $sig_block['keyId']);
 | 
			
		||||
 | 
			
		||||
		if (!$key) {
 | 
			
		||||
			return $result;
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +98,7 @@ class HTTPSignature
 | 
			
		|||
 | 
			
		||||
		$x = Crypto::rsaVerify($signed_data, $sig_block['signature'], $key, $algorithm);
 | 
			
		||||
 | 
			
		||||
		logger('verified: ' . $x, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('verified: ' . $x, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (!$x) {
 | 
			
		||||
			return $result;
 | 
			
		||||
| 
						 | 
				
			
			@ -307,7 +308,7 @@ class HTTPSignature
 | 
			
		|||
		$postResult = Network::post($target, $content, $headers);
 | 
			
		||||
		$return_code = $postResult->getReturnCode();
 | 
			
		||||
 | 
			
		||||
		logger('Transmit to ' . $target . ' returned ' . $return_code);
 | 
			
		||||
		Logger::log('Transmit to ' . $target . ' returned ' . $return_code);
 | 
			
		||||
 | 
			
		||||
		return ($return_code >= 200) && ($return_code <= 299);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -432,12 +433,12 @@ class HTTPSignature
 | 
			
		|||
 | 
			
		||||
		$profile = APContact::getByURL($url);
 | 
			
		||||
		if (!empty($profile)) {
 | 
			
		||||
			logger('Taking key from id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Taking key from id ' . $id, LOGGER_DEBUG);
 | 
			
		||||
			return ['url' => $url, 'pubkey' => $profile['pubkey']];
 | 
			
		||||
		} elseif ($url != $actor) {
 | 
			
		||||
			$profile = APContact::getByURL($actor);
 | 
			
		||||
			if (!empty($profile)) {
 | 
			
		||||
				logger('Taking key from actor ' . $actor, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Taking key from actor ' . $actor, LOGGER_DEBUG);
 | 
			
		||||
				return ['url' => $actor, 'pubkey' => $profile['pubkey']];
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Util;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +34,7 @@ class JsonLD
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($recursion > 5) {
 | 
			
		||||
			logger('jsonld bomb detected at: ' . $url);
 | 
			
		||||
			Logger::log('jsonld bomb detected at: ' . $url);
 | 
			
		||||
			exit();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +66,7 @@ class JsonLD
 | 
			
		|||
		}
 | 
			
		||||
		catch (Exception $e) {
 | 
			
		||||
			$normalized = false;
 | 
			
		||||
			logger('normalise error:' . print_r($e, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('normalise error:' . print_r($e, true), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return $normalized;
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +99,7 @@ class JsonLD
 | 
			
		|||
		}
 | 
			
		||||
		catch (Exception $e) {
 | 
			
		||||
			$compacted = false;
 | 
			
		||||
			logger('compacting error:' . print_r($e, true), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('compacting error:' . print_r($e, true), LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return json_decode(json_encode($compacted, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE), true);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Friendica\Util;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Util\JsonLD;
 | 
			
		||||
use Friendica\Util\DateTimeFormat;
 | 
			
		||||
use Friendica\Protocol\ActivityPub;
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +41,7 @@ class LDSignature
 | 
			
		|||
		$dhash = self::hash(self::signableData($data));
 | 
			
		||||
 | 
			
		||||
		$x = Crypto::rsaVerify($ohash . $dhash, base64_decode($data['signature']['signatureValue']), $pubkey);
 | 
			
		||||
		logger('LD-verify: ' . intval($x));
 | 
			
		||||
		Logger::log('LD-verify: ' . intval($x));
 | 
			
		||||
 | 
			
		||||
		if (empty($x)) {
 | 
			
		||||
			return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
namespace Friendica\Util;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Network\CurlResult;
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +107,7 @@ class Network
 | 
			
		|||
		$url = self::unparseURL($parts);
 | 
			
		||||
 | 
			
		||||
		if (self::isUrlBlocked($url)) {
 | 
			
		||||
			logger('domain of ' . $url . ' is blocked', LOGGER_DATA);
 | 
			
		||||
			Logger::log('domain of ' . $url . ' is blocked', LOGGER_DATA);
 | 
			
		||||
			return CurlResult::createErrorCurl($url);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +213,7 @@ class Network
 | 
			
		|||
 | 
			
		||||
		if ($curlResponse->isRedirectUrl()) {
 | 
			
		||||
			$redirects++;
 | 
			
		||||
			logger('curl: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
 | 
			
		||||
			Logger::log('curl: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
 | 
			
		||||
			@curl_close($ch);
 | 
			
		||||
			return self::curl($curlResponse->getRedirectUrl(), $binary, $redirects, $opts);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -240,7 +241,7 @@ class Network
 | 
			
		|||
		$stamp1 = microtime(true);
 | 
			
		||||
 | 
			
		||||
		if (self::isUrlBlocked($url)) {
 | 
			
		||||
			logger('post_url: domain of ' . $url . ' is blocked', LOGGER_DATA);
 | 
			
		||||
			Logger::log('post_url: domain of ' . $url . ' is blocked', LOGGER_DATA);
 | 
			
		||||
			return CurlResult::createErrorCurl($url);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -251,7 +252,7 @@ class Network
 | 
			
		|||
			return CurlResult::createErrorCurl($url);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('post_url: start ' . $url, LOGGER_DATA);
 | 
			
		||||
		Logger::log('post_url: start ' . $url, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		curl_setopt($ch, CURLOPT_HEADER, true);
 | 
			
		||||
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +315,7 @@ class Network
 | 
			
		|||
 | 
			
		||||
		if ($curlResponse->isRedirectUrl()) {
 | 
			
		||||
			$redirects++;
 | 
			
		||||
			logger('post_url: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
 | 
			
		||||
			Logger::log('post_url: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
 | 
			
		||||
			curl_close($ch);
 | 
			
		||||
			return self::post($curlResponse->getRedirectUrl(), $params, $headers, $redirects, $timeout);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -323,7 +324,7 @@ class Network
 | 
			
		|||
 | 
			
		||||
		$a->saveTimestamp($stamp1, 'network');
 | 
			
		||||
 | 
			
		||||
		logger('post_url: end ' . $url, LOGGER_DATA);
 | 
			
		||||
		Logger::log('post_url: end ' . $url, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		return $curlResponse;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -527,7 +528,7 @@ class Network
 | 
			
		|||
			$avatar['url'] = System::baseUrl() . '/images/person-300.jpg';
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Avatar: ' . $avatar['email'] . ' ' . $avatar['url'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Avatar: ' . $avatar['email'] . ' ' . $avatar['url'], LOGGER_DEBUG);
 | 
			
		||||
		return $avatar['url'];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use DOMDocument;
 | 
			
		|||
use DOMXPath;
 | 
			
		||||
use Friendica\Content\OEmbed;
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Object\Image;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +124,7 @@ class ParseUrl
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($count > 10) {
 | 
			
		||||
			logger('Endless loop detected for ' . $url, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Endless loop detected for ' . $url, LOGGER_DEBUG);
 | 
			
		||||
			return $siteinfo;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -187,7 +188,7 @@ class ParseUrl
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (($charset != '') && (strtoupper($charset) != 'UTF-8')) {
 | 
			
		||||
			logger('detected charset ' . $charset, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('detected charset ' . $charset, LOGGER_DEBUG);
 | 
			
		||||
			$body = iconv($charset, 'UTF-8//TRANSLIT', $body);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -421,7 +422,7 @@ class ParseUrl
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Siteinfo for ' . $url . ' ' . print_r($siteinfo, true), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Siteinfo for ' . $url . ' ' . print_r($siteinfo, true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		Addon::callHooks('getsiteinfo', $siteinfo);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@
 | 
			
		|||
 */
 | 
			
		||||
namespace Friendica\Util;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use DOMXPath;
 | 
			
		||||
use SimpleXMLElement;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +249,7 @@ class XML
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!function_exists('xml_parser_create')) {
 | 
			
		||||
			logger('Xml::toArray: parser function missing');
 | 
			
		||||
			Logger::log('Xml::toArray: parser function missing');
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -263,7 +264,7 @@ class XML
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (! $parser) {
 | 
			
		||||
			logger('Xml::toArray: xml_parser_create: no resource');
 | 
			
		||||
			Logger::log('Xml::toArray: xml_parser_create: no resource');
 | 
			
		||||
			return [];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,9 +276,9 @@ class XML
 | 
			
		|||
		@xml_parser_free($parser);
 | 
			
		||||
 | 
			
		||||
		if (! $xml_values) {
 | 
			
		||||
			logger('Xml::toArray: libxml: parse error: ' . $contents, LOGGER_DATA);
 | 
			
		||||
			Logger::log('Xml::toArray: libxml: parse error: ' . $contents, LOGGER_DATA);
 | 
			
		||||
			foreach (libxml_get_errors() as $err) {
 | 
			
		||||
				logger('libxml: parse: ' . $err->code . " at " . $err->line . ":" . $err->column . " : " . $err->message, LOGGER_DATA);
 | 
			
		||||
				Logger::log('libxml: parse: ' . $err->code . " at " . $err->line . ":" . $err->column . " : " . $err->message, LOGGER_DATA);
 | 
			
		||||
			}
 | 
			
		||||
			libxml_clear_errors();
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -423,9 +424,9 @@ class XML
 | 
			
		|||
 | 
			
		||||
		$x = @simplexml_load_string($s);
 | 
			
		||||
		if (!$x) {
 | 
			
		||||
			logger('libxml: parse: error: ' . $s, LOGGER_DATA);
 | 
			
		||||
			Logger::log('libxml: parse: error: ' . $s, LOGGER_DATA);
 | 
			
		||||
			foreach (libxml_get_errors() as $err) {
 | 
			
		||||
				logger('libxml: parse: ' . $err->code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA);
 | 
			
		||||
				Logger::log('libxml: parse: ' . $err->code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA);
 | 
			
		||||
			}
 | 
			
		||||
			libxml_clear_errors();
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,9 +5,10 @@
 | 
			
		|||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Protocol\ActivityPub;
 | 
			
		||||
use Friendica\Model\Item;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Util\HTTPSignature;
 | 
			
		||||
 | 
			
		||||
class APDelivery extends BaseObject
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +23,7 @@ class APDelivery extends BaseObject
 | 
			
		|||
	 */
 | 
			
		||||
	public static function execute($cmd, $item_id, $inbox, $uid)
 | 
			
		||||
	{
 | 
			
		||||
		logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $inbox, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $inbox, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$success = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\Network;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +22,7 @@ class CheckVersion
 | 
			
		|||
{
 | 
			
		||||
	public static function execute()
 | 
			
		||||
	{
 | 
			
		||||
		logger('checkversion: start');
 | 
			
		||||
		Logger::log('checkversion: start');
 | 
			
		||||
 | 
			
		||||
		$checkurl = Config::get('system', 'check_new_version_url', 'none');
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -36,15 +37,15 @@ class CheckVersion
 | 
			
		|||
				// don't check
 | 
			
		||||
				return;
 | 
			
		||||
		}
 | 
			
		||||
		logger("Checking VERSION from: ".$checked_url, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Checking VERSION from: ".$checked_url, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// fetch the VERSION file
 | 
			
		||||
		$gitversion = DBA::escape(trim(Network::fetchUrl($checked_url)));
 | 
			
		||||
		logger("Upstream VERSION is: ".$gitversion, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Upstream VERSION is: ".$gitversion, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		Config::set('system', 'git_friendica_version', $gitversion);
 | 
			
		||||
 | 
			
		||||
		logger('checkversion: end');
 | 
			
		||||
		Logger::log('checkversion: end');
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ use Friendica\BaseObject;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Hook;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -38,12 +39,12 @@ class Cron
 | 
			
		|||
		if ($last) {
 | 
			
		||||
			$next = $last + ($poll_interval * 60);
 | 
			
		||||
			if ($next > time()) {
 | 
			
		||||
				logger('cron intervall not reached');
 | 
			
		||||
				Logger::log('cron intervall not reached');
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('cron: start');
 | 
			
		||||
		Logger::log('cron: start');
 | 
			
		||||
 | 
			
		||||
		// Fork the cron jobs in separate parts to avoid problems when one of them is crashing
 | 
			
		||||
		Hook::fork($a->queue['priority'], "cron");
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +125,7 @@ class Cron
 | 
			
		|||
		// Poll contacts
 | 
			
		||||
		self::pollContacts($parameter, $generation);
 | 
			
		||||
 | 
			
		||||
		logger('cron: end');
 | 
			
		||||
		Logger::log('cron: end');
 | 
			
		||||
 | 
			
		||||
		Config::set('system', 'last_cron', time());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +288,7 @@ class Cron
 | 
			
		|||
				$priority = PRIORITY_LOW;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger("Polling " . $contact["network"] . " " . $contact["id"] . " " . $contact['priority'] . " " . $contact["nick"] . " " . $contact["name"]);
 | 
			
		||||
			Logger::log("Polling " . $contact["network"] . " " . $contact["id"] . " " . $contact['priority'] . " " . $contact["nick"] . " " . $contact["name"]);
 | 
			
		||||
 | 
			
		||||
			Worker::add(['priority' => $priority, 'dont_fork' => true], 'OnePoll', (int)$contact['id']);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ use Friendica\App;
 | 
			
		|||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Database\PostUpdate;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +34,7 @@ class CronJobs
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Starting cronjob " . $command, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Starting cronjob " . $command, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// Call possible post update functions
 | 
			
		||||
		// see src/Database/PostUpdate.php for more details
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +83,7 @@ class CronJobs
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Xronjob " . $command . " is unknown.", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Xronjob " . $command . " is unknown.", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +212,7 @@ class CronJobs
 | 
			
		|||
				// Calculate fragmentation
 | 
			
		||||
				$fragmentation = $table["Data_free"] / ($table["Data_length"] + $table["Index_length"]);
 | 
			
		||||
 | 
			
		||||
				logger("Table " . $table["Name"] . " - Fragmentation level: " . round($fragmentation * 100, 2), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Table " . $table["Name"] . " - Fragmentation level: " . round($fragmentation * 100, 2), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				// Don't optimize tables that needn't to be optimized
 | 
			
		||||
				if ($fragmentation < $fragmentation_level) {
 | 
			
		||||
| 
						 | 
				
			
			@ -219,7 +220,7 @@ class CronJobs
 | 
			
		|||
				}
 | 
			
		||||
 | 
			
		||||
				// So optimize it
 | 
			
		||||
				logger("Optimize Table " . $table["Name"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Optimize Table " . $table["Name"], LOGGER_DEBUG);
 | 
			
		||||
				q("OPTIMIZE TABLE `%s`", DBA::escape($table["Name"]));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -258,7 +259,7 @@ class CronJobs
 | 
			
		|||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger("Repair contact " . $contact["id"] . " " . $contact["url"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Repair contact " . $contact["id"] . " " . $contact["url"], LOGGER_DEBUG);
 | 
			
		||||
			q("UPDATE `contact` SET `batch` = '%s', `notify` = '%s', `poll` = '%s', pubkey = '%s' WHERE `id` = %d",
 | 
			
		||||
				DBA::escape($data["batch"]), DBA::escape($data["notify"]), DBA::escape($data["poll"]), DBA::escape($data["pubkey"]),
 | 
			
		||||
				intval($contact["id"]));
 | 
			
		||||
| 
						 | 
				
			
			@ -276,7 +277,7 @@ class CronJobs
 | 
			
		|||
		$r = q("SELECT `uid` FROM `user` WHERE NOT EXISTS (SELECT `uid` FROM `contact` WHERE `contact`.`uid` = `user`.`uid` AND `contact`.`self`)");
 | 
			
		||||
		if (DBA::isResult($r)) {
 | 
			
		||||
			foreach ($r AS $user) {
 | 
			
		||||
				logger('Create missing self contact for user ' . $user['uid']);
 | 
			
		||||
				Logger::log('Create missing self contact for user ' . $user['uid']);
 | 
			
		||||
				Contact::createSelfFromUserId($user['uid']);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@
 | 
			
		|||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -80,46 +81,46 @@ class DBClean {
 | 
			
		|||
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-1', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting old global item entries from item table without user copy. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting old global item entries from item table without user copy. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `id` FROM `item` WHERE `uid` = 0 AND
 | 
			
		||||
						NOT EXISTS (SELECT `guid` FROM `item` AS `i` WHERE `item`.`guid` = `i`.`guid` AND `i`.`uid` != 0) AND
 | 
			
		||||
						`received` < UTC_TIMESTAMP() - INTERVAL ? DAY AND `id` >= ?
 | 
			
		||||
					ORDER BY `id` LIMIT ?", $days_unclaimed, $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found global item orphans: ".$count);
 | 
			
		||||
				Logger::log("found global item orphans: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["id"];
 | 
			
		||||
					DBA::delete('item', ['id' => $orphan["id"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 1, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No global item orphans found");
 | 
			
		||||
				Logger::log("No global item orphans found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." old global item entries from item table without user copy. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." old global item entries from item table without user copy. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-1', $last_id);
 | 
			
		||||
		} elseif ($stage == 2) {
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-2', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting items without parents. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting items without parents. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `id` FROM `item`
 | 
			
		||||
					WHERE NOT EXISTS (SELECT `id` FROM `item` AS `i` WHERE `item`.`parent` = `i`.`id`)
 | 
			
		||||
					AND `id` >= ? ORDER BY `id` LIMIT ?", $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found item orphans without parents: ".$count);
 | 
			
		||||
				Logger::log("found item orphans without parents: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["id"];
 | 
			
		||||
					DBA::delete('item', ['id' => $orphan["id"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 2, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No item orphans without parents found");
 | 
			
		||||
				Logger::log("No item orphans without parents found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." items without parents. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." items without parents. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-2', $last_id);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -129,23 +130,23 @@ class DBClean {
 | 
			
		|||
		} elseif ($stage == 3) {
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-3', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting orphaned data from thread table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting orphaned data from thread table. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `iid` FROM `thread`
 | 
			
		||||
					WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `thread`.`iid`) AND `iid` >= ?
 | 
			
		||||
					ORDER BY `iid` LIMIT ?", $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found thread orphans: ".$count);
 | 
			
		||||
				Logger::log("found thread orphans: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["iid"];
 | 
			
		||||
					DBA::delete('thread', ['iid' => $orphan["iid"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 3, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No thread orphans found");
 | 
			
		||||
				Logger::log("No thread orphans found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." orphaned data from thread table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." orphaned data from thread table. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-3', $last_id);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -155,23 +156,23 @@ class DBClean {
 | 
			
		|||
		} elseif ($stage == 4) {
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-4', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting orphaned data from notify table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting orphaned data from notify table. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `iid`, `id` FROM `notify`
 | 
			
		||||
					WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `notify`.`iid`) AND `id` >= ?
 | 
			
		||||
					ORDER BY `id` LIMIT ?", $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found notify orphans: ".$count);
 | 
			
		||||
				Logger::log("found notify orphans: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["id"];
 | 
			
		||||
					DBA::delete('notify', ['iid' => $orphan["iid"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 4, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No notify orphans found");
 | 
			
		||||
				Logger::log("No notify orphans found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." orphaned data from notify table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." orphaned data from notify table. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-4', $last_id);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -181,23 +182,23 @@ class DBClean {
 | 
			
		|||
		} elseif ($stage == 5) {
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-5', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting orphaned data from notify-threads table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting orphaned data from notify-threads table. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `id` FROM `notify-threads`
 | 
			
		||||
					WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `notify-threads`.`master-parent-item`) AND `id` >= ?
 | 
			
		||||
					ORDER BY `id` LIMIT ?", $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found notify-threads orphans: ".$count);
 | 
			
		||||
				Logger::log("found notify-threads orphans: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["id"];
 | 
			
		||||
					DBA::delete('notify-threads', ['id' => $orphan["id"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 5, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No notify-threads orphans found");
 | 
			
		||||
				Logger::log("No notify-threads orphans found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." orphaned data from notify-threads table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." orphaned data from notify-threads table. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-5', $last_id);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -207,23 +208,23 @@ class DBClean {
 | 
			
		|||
		} elseif ($stage == 6) {
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-6', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting orphaned data from sign table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting orphaned data from sign table. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `iid`, `id` FROM `sign`
 | 
			
		||||
					WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `sign`.`iid`) AND `id` >= ?
 | 
			
		||||
					ORDER BY `id` LIMIT ?", $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found sign orphans: ".$count);
 | 
			
		||||
				Logger::log("found sign orphans: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["id"];
 | 
			
		||||
					DBA::delete('sign', ['iid' => $orphan["iid"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 6, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No sign orphans found");
 | 
			
		||||
				Logger::log("No sign orphans found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." orphaned data from sign table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." orphaned data from sign table. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-6', $last_id);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -233,23 +234,23 @@ class DBClean {
 | 
			
		|||
		} elseif ($stage == 7) {
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-7', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting orphaned data from term table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting orphaned data from term table. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `oid`, `tid` FROM `term`
 | 
			
		||||
					WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `term`.`oid`) AND `tid` >= ?
 | 
			
		||||
					ORDER BY `tid` LIMIT ?", $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found term orphans: ".$count);
 | 
			
		||||
				Logger::log("found term orphans: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["tid"];
 | 
			
		||||
					DBA::delete('term', ['oid' => $orphan["oid"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 7, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No term orphans found");
 | 
			
		||||
				Logger::log("No term orphans found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." orphaned data from term table. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." orphaned data from term table. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-7', $last_id);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -263,7 +264,7 @@ class DBClean {
 | 
			
		|||
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-8', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting expired threads. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting expired threads. Last ID: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `thread`.`iid` FROM `thread`
 | 
			
		||||
	                                INNER JOIN `contact` ON `thread`.`contact-id` = `contact`.`id` AND NOT `notify_new_posts`
 | 
			
		||||
	                                WHERE `thread`.`received` < UTC_TIMESTAMP() - INTERVAL ? DAY
 | 
			
		||||
| 
						 | 
				
			
			@ -278,17 +279,17 @@ class DBClean {
 | 
			
		|||
	                                ORDER BY `thread`.`iid` LIMIT ?", $days, $last_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found expired threads: ".$count);
 | 
			
		||||
				Logger::log("found expired threads: ".$count);
 | 
			
		||||
				while ($thread = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $thread["iid"];
 | 
			
		||||
					DBA::delete('thread', ['iid' => $thread["iid"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 8, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No expired threads found");
 | 
			
		||||
				Logger::log("No expired threads found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." expired threads. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." expired threads. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-8', $last_id);
 | 
			
		||||
		} elseif ($stage == 9) {
 | 
			
		||||
| 
						 | 
				
			
			@ -299,47 +300,47 @@ class DBClean {
 | 
			
		|||
			$last_id = Config::get('system', 'dbclean-last-id-9', 0);
 | 
			
		||||
			$till_id = Config::get('system', 'dbclean-last-id-8', 0);
 | 
			
		||||
 | 
			
		||||
			logger("Deleting old global item entries from expired threads from ID ".$last_id." to ID ".$till_id);
 | 
			
		||||
			Logger::log("Deleting old global item entries from expired threads from ID ".$last_id." to ID ".$till_id);
 | 
			
		||||
			$r = DBA::p("SELECT `id` FROM `item` WHERE `uid` = 0 AND
 | 
			
		||||
						NOT EXISTS (SELECT `guid` FROM `item` AS `i` WHERE `item`.`guid` = `i`.`guid` AND `i`.`uid` != 0) AND
 | 
			
		||||
						`received` < UTC_TIMESTAMP() - INTERVAL 90 DAY AND `id` >= ? AND `id` <= ?
 | 
			
		||||
					ORDER BY `id` LIMIT ?", $last_id, $till_id, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found global item entries from expired threads: ".$count);
 | 
			
		||||
				Logger::log("found global item entries from expired threads: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["id"];
 | 
			
		||||
					DBA::delete('item', ['id' => $orphan["id"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 9, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No global item entries from expired threads");
 | 
			
		||||
				Logger::log("No global item entries from expired threads");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." old global item entries from expired threads. Last ID: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." old global item entries from expired threads. Last ID: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-9', $last_id);
 | 
			
		||||
		} elseif ($stage == 10) {
 | 
			
		||||
			$last_id = Config::get('system', 'dbclean-last-id-10', 0);
 | 
			
		||||
			$days = intval(Config::get('system', 'dbclean_expire_conversation', 90));
 | 
			
		||||
 | 
			
		||||
			logger("Deleting old conversations. Last created: ".$last_id);
 | 
			
		||||
			Logger::log("Deleting old conversations. Last created: ".$last_id);
 | 
			
		||||
			$r = DBA::p("SELECT `received`, `item-uri` FROM `conversation`
 | 
			
		||||
					WHERE `received` < UTC_TIMESTAMP() - INTERVAL ? DAY
 | 
			
		||||
					ORDER BY `received` LIMIT ?", $days, $limit);
 | 
			
		||||
			$count = DBA::numRows($r);
 | 
			
		||||
			if ($count > 0) {
 | 
			
		||||
				logger("found old conversations: ".$count);
 | 
			
		||||
				Logger::log("found old conversations: ".$count);
 | 
			
		||||
				while ($orphan = DBA::fetch($r)) {
 | 
			
		||||
					$last_id = $orphan["received"];
 | 
			
		||||
					DBA::delete('conversation', ['item-uri' => $orphan["item-uri"]]);
 | 
			
		||||
				}
 | 
			
		||||
				Worker::add(PRIORITY_MEDIUM, 'DBClean', 10, $last_id);
 | 
			
		||||
			} else {
 | 
			
		||||
				logger("No old conversations found");
 | 
			
		||||
				Logger::log("No old conversations found");
 | 
			
		||||
			}
 | 
			
		||||
			DBA::close($r);
 | 
			
		||||
			logger("Done deleting ".$count." conversations. Last created: ".$last_id);
 | 
			
		||||
			Logger::log("Done deleting ".$count." conversations. Last created: ".$last_id);
 | 
			
		||||
 | 
			
		||||
			Config::set('system', 'dbclean-last-id-10', $last_id);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ namespace Friendica\Worker;
 | 
			
		|||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\L10n;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +34,7 @@ class Delivery extends BaseObject
 | 
			
		|||
 | 
			
		||||
	public static function execute($cmd, $item_id, $contact_id)
 | 
			
		||||
	{
 | 
			
		||||
		logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $contact_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $contact_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$top_level = false;
 | 
			
		||||
		$followup = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -78,12 +79,12 @@ class Delivery extends BaseObject
 | 
			
		|||
			DBA::close($itemdata);
 | 
			
		||||
 | 
			
		||||
			if (empty($target_item)) {
 | 
			
		||||
				logger('Item ' . $item_id . "wasn't found. Quitting here.");
 | 
			
		||||
				Logger::log('Item ' . $item_id . "wasn't found. Quitting here.");
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (empty($parent)) {
 | 
			
		||||
				logger('Parent ' . $parent_id . ' for item ' . $item_id . "wasn't found. Quitting here.");
 | 
			
		||||
				Logger::log('Parent ' . $parent_id . ' for item ' . $item_id . "wasn't found. Quitting here.");
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +101,7 @@ class Delivery extends BaseObject
 | 
			
		|||
			// The count then showed more than one entry. The additional check should help.
 | 
			
		||||
			// The check for the "count" should be superfluous, but I'm not totally sure by now, so we keep it.
 | 
			
		||||
			if ((($parent['id'] == $item_id) || (count($items) == 1)) && ($parent['uri'] === $parent['parent-uri'])) {
 | 
			
		||||
				logger('Top level post');
 | 
			
		||||
				Logger::log('Top level post');
 | 
			
		||||
				$top_level = true;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +126,7 @@ class Delivery extends BaseObject
 | 
			
		|||
			 */
 | 
			
		||||
 | 
			
		||||
			if (!$top_level && ($parent['wall'] == 0) && stristr($target_item['uri'], $localhost)) {
 | 
			
		||||
				logger('Followup ' . $target_item["guid"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Followup ' . $target_item["guid"], LOGGER_DEBUG);
 | 
			
		||||
				// local followup to remote post
 | 
			
		||||
				$followup = true;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +141,7 @@ class Delivery extends BaseObject
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (empty($items)) {
 | 
			
		||||
			logger('No delivery data for  ' . $cmd . ' - Item ID: ' .$item_id . ' - Contact ID: ' . $contact_id);
 | 
			
		||||
			Logger::log('No delivery data for  ' . $cmd . ' - Item ID: ' .$item_id . ' - Contact ID: ' . $contact_id);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$owner = User::getOwnerDataById($uid);
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +163,7 @@ class Delivery extends BaseObject
 | 
			
		|||
			$contact['network'] = Protocol::DIASPORA;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("Delivering " . $cmd . " followup=$followup - via network " . $contact['network']);
 | 
			
		||||
		Logger::log("Delivering " . $cmd . " followup=$followup - via network " . $contact['network']);
 | 
			
		||||
 | 
			
		||||
		switch ($contact['network']) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +213,7 @@ class Delivery extends BaseObject
 | 
			
		|||
	 */
 | 
			
		||||
	private static function deliverDFRN($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup)
 | 
			
		||||
	{
 | 
			
		||||
		logger('Deliver ' . $target_item["guid"] . ' via DFRN to ' . (empty($contact['addr']) ? $contact['url'] : $contact['addr']));
 | 
			
		||||
		Logger::log('Deliver ' . $target_item["guid"] . ' via DFRN to ' . (empty($contact['addr']) ? $contact['url'] : $contact['addr']));
 | 
			
		||||
 | 
			
		||||
		if ($cmd == self::MAIL) {
 | 
			
		||||
			$item = $target_item;
 | 
			
		||||
| 
						 | 
				
			
			@ -240,7 +241,7 @@ class Delivery extends BaseObject
 | 
			
		|||
			$atom = DFRN::entries($msgitems, $owner);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Notifier entry: ' . $contact["url"] . ' ' . $target_item["guid"] . ' entry: ' . $atom, LOGGER_DATA);
 | 
			
		||||
		Logger::log('Notifier entry: ' . $contact["url"] . ' ' . $target_item["guid"] . ' entry: ' . $atom, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		$basepath =  implode('/', array_slice(explode('/', $contact['url']), 0, 3));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -284,7 +285,7 @@ class Delivery extends BaseObject
 | 
			
		|||
 | 
			
		||||
			// We never spool failed relay deliveries
 | 
			
		||||
			if ($public_dfrn) {
 | 
			
		||||
				logger('Relay delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status);
 | 
			
		||||
				Logger::log('Relay delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,10 +300,10 @@ class Delivery extends BaseObject
 | 
			
		|||
			$deliver_status = DFRN::deliver($owner, $contact, $atom, false, true);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status);
 | 
			
		||||
		Logger::log('Delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status);
 | 
			
		||||
 | 
			
		||||
		if ($deliver_status < 0) {
 | 
			
		||||
			logger('Delivery failed: queuing message ' . $target_item["guid"] );
 | 
			
		||||
			Logger::log('Delivery failed: queuing message ' . $target_item["guid"] );
 | 
			
		||||
			Queue::add($contact['id'], Protocol::DFRN, $atom, false, $target_item['guid']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -342,7 +343,7 @@ class Delivery extends BaseObject
 | 
			
		|||
			$loc = $contact['addr'];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Deliver ' . $target_item["guid"] . ' via Diaspora to ' . $loc);
 | 
			
		||||
		Logger::log('Deliver ' . $target_item["guid"] . ' via Diaspora to ' . $loc);
 | 
			
		||||
 | 
			
		||||
		if (Config::get('system', 'dfrn_only') || !Config::get('system', 'diaspora_enabled')) {
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -360,7 +361,7 @@ class Delivery extends BaseObject
 | 
			
		|||
		}
 | 
			
		||||
		if (($target_item['deleted']) && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) {
 | 
			
		||||
			// top-level retraction
 | 
			
		||||
			logger('diaspora retract: ' . $loc);
 | 
			
		||||
			Logger::log('diaspora retract: ' . $loc);
 | 
			
		||||
			Diaspora::sendRetraction($target_item, $owner, $contact, $public_message);
 | 
			
		||||
			return;
 | 
			
		||||
		} elseif ($cmd == self::RELOCATION) {
 | 
			
		||||
| 
						 | 
				
			
			@ -368,22 +369,22 @@ class Delivery extends BaseObject
 | 
			
		|||
			return;
 | 
			
		||||
		} elseif ($followup) {
 | 
			
		||||
			// send comments and likes to owner to relay
 | 
			
		||||
			logger('diaspora followup: ' . $loc);
 | 
			
		||||
			Logger::log('diaspora followup: ' . $loc);
 | 
			
		||||
			Diaspora::sendFollowup($target_item, $owner, $contact, $public_message);
 | 
			
		||||
			return;
 | 
			
		||||
		} elseif ($target_item['uri'] !== $target_item['parent-uri']) {
 | 
			
		||||
			// we are the relay - send comments, likes and relayable_retractions to our conversants
 | 
			
		||||
			logger('diaspora relay: ' . $loc);
 | 
			
		||||
			Logger::log('diaspora relay: ' . $loc);
 | 
			
		||||
			Diaspora::sendRelay($target_item, $owner, $contact, $public_message);
 | 
			
		||||
			return;
 | 
			
		||||
		} elseif ($top_level && !$walltowall) {
 | 
			
		||||
			// currently no workable solution for sending walltowall
 | 
			
		||||
			logger('diaspora status: ' . $loc);
 | 
			
		||||
			Logger::log('diaspora status: ' . $loc);
 | 
			
		||||
			Diaspora::sendStatus($target_item, $owner, $contact, $public_message);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Unknown mode ' . $cmd . ' for ' . $loc);
 | 
			
		||||
		Logger::log('Unknown mode ' . $cmd . ' for ' . $loc);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -415,7 +416,7 @@ class Delivery extends BaseObject
 | 
			
		|||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('Deliver ' . $target_item["guid"] . ' via mail to ' . $contact['addr']);
 | 
			
		||||
		Logger::log('Deliver ' . $target_item["guid"] . ' via mail to ' . $contact['addr']);
 | 
			
		||||
 | 
			
		||||
		$reply_to = '';
 | 
			
		||||
		$mailacct = DBA::selectFirst('mailacct', ['reply_to'], ['uid' => $owner['uid']]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ namespace Friendica\Worker;
 | 
			
		|||
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Util\Network;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +34,7 @@ class Directory
 | 
			
		|||
 | 
			
		||||
		Addon::callHooks('globaldir_update', $arr);
 | 
			
		||||
 | 
			
		||||
		logger('Updating directory: ' . $arr['url'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('Updating directory: ' . $arr['url'], LOGGER_DEBUG);
 | 
			
		||||
		if (strlen($arr['url'])) {
 | 
			
		||||
			Network::fetchUrl($dir . '?url=' . bin2hex($arr['url']));
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ namespace Friendica\Worker;
 | 
			
		|||
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -52,11 +53,11 @@ class DiscoverPoCo
 | 
			
		|||
		} elseif ($command == "check_profile") {
 | 
			
		||||
			$mode = 8;
 | 
			
		||||
		} elseif ($command !== "") {
 | 
			
		||||
			logger("Unknown or missing parameter ".$command."\n");
 | 
			
		||||
			Logger::log("Unknown or missing parameter ".$command."\n");
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('start '.$search);
 | 
			
		||||
		Logger::log('start '.$search);
 | 
			
		||||
 | 
			
		||||
		if ($mode == 8) {
 | 
			
		||||
			if ($param1 != "") {
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +90,7 @@ class DiscoverPoCo
 | 
			
		|||
			} else {
 | 
			
		||||
				$result .= "failed";
 | 
			
		||||
			}
 | 
			
		||||
			logger($result, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log($result, LOGGER_DEBUG);
 | 
			
		||||
		} elseif ($mode == 3) {
 | 
			
		||||
			GContact::updateSuggestions();
 | 
			
		||||
		} elseif (($mode == 2) && Config::get('system', 'poco_completion')) {
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +108,7 @@ class DiscoverPoCo
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('end '.$search);
 | 
			
		||||
		Logger::log('end '.$search);
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +130,7 @@ class DiscoverPoCo
 | 
			
		|||
			if (!PortableContact::updateNeeded($server["created"], "", $server["last_failure"], $server["last_contact"])) {
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			logger('Update server status for server '.$server["url"], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Update server status for server '.$server["url"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", $server["url"]);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +141,7 @@ class DiscoverPoCo
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	private static function discoverUsers() {
 | 
			
		||||
		logger("Discover users", LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Discover users", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$starttime = time();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +185,7 @@ class DiscoverPoCo
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if ((($server_url == "") && ($user["network"] == Protocol::FEED)) || $force_update || PortableContact::checkServer($server_url, $user["network"])) {
 | 
			
		||||
				logger('Check profile '.$user["url"]);
 | 
			
		||||
				Logger::log('Check profile '.$user["url"]);
 | 
			
		||||
				Worker::add(PRIORITY_LOW, "DiscoverPoCo", "check_profile", $user["url"]);
 | 
			
		||||
 | 
			
		||||
				if (++$checked > 100) {
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +209,7 @@ class DiscoverPoCo
 | 
			
		|||
		if (!is_null($data)) {
 | 
			
		||||
			// Only search for the same item every 24 hours
 | 
			
		||||
			if (time() < $data + (60 * 60 * 24)) {
 | 
			
		||||
				logger("Already searched for ".$search." in the last 24 hours", LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Already searched for ".$search." in the last 24 hours", LOGGER_DEBUG);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +222,7 @@ class DiscoverPoCo
 | 
			
		|||
				// Check if the contact already exists
 | 
			
		||||
				$exists = q("SELECT `id`, `last_contact`, `last_failure`, `updated` FROM `gcontact` WHERE `nurl` = '%s'", normalise_link($jj->url));
 | 
			
		||||
				if (DBA::isResult($exists)) {
 | 
			
		||||
					logger("Profile ".$jj->url." already exists (".$search.")", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Profile ".$jj->url." already exists (".$search.")", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
					if (($exists[0]["last_contact"] < $exists[0]["last_failure"]) &&
 | 
			
		||||
						($exists[0]["updated"] < $exists[0]["last_failure"])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -235,16 +236,16 @@ class DiscoverPoCo
 | 
			
		|||
				$server_url = PortableContact::detectServer($jj->url);
 | 
			
		||||
				if ($server_url != '') {
 | 
			
		||||
					if (!PortableContact::checkServer($server_url)) {
 | 
			
		||||
						logger("Friendica server ".$server_url." doesn't answer.", LOGGER_DEBUG);
 | 
			
		||||
						Logger::log("Friendica server ".$server_url." doesn't answer.", LOGGER_DEBUG);
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
					logger("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				$data = Probe::uri($jj->url);
 | 
			
		||||
				if ($data["network"] == Protocol::DFRN) {
 | 
			
		||||
					logger("Profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG);
 | 
			
		||||
					logger("Add profile ".$jj->url." to local directory (".$search.")", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Add profile ".$jj->url." to local directory (".$search.")", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
					if ($jj->tags != "") {
 | 
			
		||||
						$data["keywords"] = $jj->tags;
 | 
			
		||||
| 
						 | 
				
			
			@ -254,7 +255,7 @@ class DiscoverPoCo
 | 
			
		|||
 | 
			
		||||
					GContact::update($data);
 | 
			
		||||
				} else {
 | 
			
		||||
					logger("Profile ".$jj->url." is not responding or no Friendica contact - but network ".$data["network"], LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Profile ".$jj->url." is not responding or no Friendica contact - but network ".$data["network"], LOGGER_DEBUG);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ namespace Friendica\Worker;
 | 
			
		|||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Hook;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\Item;
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +27,7 @@ class Expire
 | 
			
		|||
		Hook::loadHooks();
 | 
			
		||||
 | 
			
		||||
		if ($param == 'delete') {
 | 
			
		||||
			logger('Delete expired items', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Delete expired items', LOGGER_DEBUG);
 | 
			
		||||
			// physically remove anything that has been deleted for more than two months
 | 
			
		||||
			$condition = ["`deleted` AND `changed` < UTC_TIMESTAMP() - INTERVAL 60 DAY"];
 | 
			
		||||
			$rows = DBA::select('item', ['id'],  $condition);
 | 
			
		||||
| 
						 | 
				
			
			@ -37,62 +38,62 @@ class Expire
 | 
			
		|||
 | 
			
		||||
			// Normally we shouldn't have orphaned data at all.
 | 
			
		||||
			// If we do have some, then we have to check why.
 | 
			
		||||
			logger('Deleting orphaned item activities - start', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Deleting orphaned item activities - start', LOGGER_DEBUG);
 | 
			
		||||
			$condition = ["NOT EXISTS (SELECT `iaid` FROM `item` WHERE `item`.`iaid` = `item-activity`.`id`)"];
 | 
			
		||||
			DBA::delete('item-activity', $condition);
 | 
			
		||||
			logger('Orphaned item activities deleted: ' . DBA::affectedRows(), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Orphaned item activities deleted: ' . DBA::affectedRows(), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			logger('Deleting orphaned item content - start', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Deleting orphaned item content - start', LOGGER_DEBUG);
 | 
			
		||||
			$condition = ["NOT EXISTS (SELECT `icid` FROM `item` WHERE `item`.`icid` = `item-content`.`id`)"];
 | 
			
		||||
			DBA::delete('item-content', $condition);
 | 
			
		||||
			logger('Orphaned item content deleted: ' . DBA::affectedRows(), LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Orphaned item content deleted: ' . DBA::affectedRows(), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			// make this optional as it could have a performance impact on large sites
 | 
			
		||||
			if (intval(Config::get('system', 'optimize_items'))) {
 | 
			
		||||
				DBA::e("OPTIMIZE TABLE `item`");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger('Delete expired items - done', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Delete expired items - done', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		} elseif (intval($param) > 0) {
 | 
			
		||||
			$user = DBA::selectFirst('user', ['uid', 'username', 'expire'], ['uid' => $param]);
 | 
			
		||||
			if (DBA::isResult($user)) {
 | 
			
		||||
				logger('Expire items for user '.$user['uid'].' ('.$user['username'].') - interval: '.$user['expire'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Expire items for user '.$user['uid'].' ('.$user['username'].') - interval: '.$user['expire'], LOGGER_DEBUG);
 | 
			
		||||
				Item::expire($user['uid'], $user['expire']);
 | 
			
		||||
				logger('Expire items for user '.$user['uid'].' ('.$user['username'].') - done ', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Expire items for user '.$user['uid'].' ('.$user['username'].') - done ', LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
			return;
 | 
			
		||||
		} elseif ($param == 'hook' && !empty($hook_function)) {
 | 
			
		||||
			foreach (Hook::getByName('expire') as $hook) {
 | 
			
		||||
				if ($hook[1] == $hook_function) {
 | 
			
		||||
					logger("Calling expire hook '" . $hook[1] . "'", LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Calling expire hook '" . $hook[1] . "'", LOGGER_DEBUG);
 | 
			
		||||
					Hook::callSingle($a, 'expire', $hook, $data);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('expire: start');
 | 
			
		||||
		Logger::log('expire: start');
 | 
			
		||||
 | 
			
		||||
		Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
				'Expire', 'delete');
 | 
			
		||||
 | 
			
		||||
		$r = DBA::p("SELECT `uid`, `username` FROM `user` WHERE `expire` != 0");
 | 
			
		||||
		while ($row = DBA::fetch($r)) {
 | 
			
		||||
			logger('Calling expiry for user '.$row['uid'].' ('.$row['username'].')', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Calling expiry for user '.$row['uid'].' ('.$row['username'].')', LOGGER_DEBUG);
 | 
			
		||||
			Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
					'Expire', (int)$row['uid']);
 | 
			
		||||
		}
 | 
			
		||||
		DBA::close($r);
 | 
			
		||||
 | 
			
		||||
		logger('expire: calling hooks');
 | 
			
		||||
		Logger::log('expire: calling hooks');
 | 
			
		||||
		foreach (Hook::getByName('expire') as $hook) {
 | 
			
		||||
			logger("Calling expire hook for '" . $hook[1] . "'", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Calling expire hook for '" . $hook[1] . "'", LOGGER_DEBUG);
 | 
			
		||||
			Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
					'Expire', 'hook', $hook[1]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('expire: end');
 | 
			
		||||
		Logger::log('expire: end');
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\GContact;
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +25,7 @@ class GProbe {
 | 
			
		|||
			DBA::escape(normalise_link($url))
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		logger("gprobe start for ".normalise_link($url), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("gprobe start for ".normalise_link($url), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($r)) {
 | 
			
		||||
			// Is it a DDoS attempt?
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +34,7 @@ class GProbe {
 | 
			
		|||
			$result = Cache::get("gprobe:".$urlparts["host"]);
 | 
			
		||||
			if (!is_null($result)) {
 | 
			
		||||
				if (in_array($result["network"], [Protocol::FEED, Protocol::PHANTOM])) {
 | 
			
		||||
					logger("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG);
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +61,7 @@ class GProbe {
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger("gprobe end for ".normalise_link($url), LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("gprobe end for ".normalise_link($url), LOGGER_DEBUG);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ use Friendica\BaseObject;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Hook;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +58,7 @@ class Notifier
 | 
			
		|||
	{
 | 
			
		||||
		$a = BaseObject::getApp();
 | 
			
		||||
 | 
			
		||||
		logger('notifier: invoked: '.$cmd.': '.$item_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('notifier: invoked: '.$cmd.': '.$item_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$top_level = false;
 | 
			
		||||
		$recipients = [];
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +105,7 @@ class Notifier
 | 
			
		|||
 | 
			
		||||
			$inboxes = ActivityPub\Transmitter::fetchTargetInboxesforUser(0);
 | 
			
		||||
			foreach ($inboxes as $inbox) {
 | 
			
		||||
				logger('Account removal for user ' . $item_id . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Account removal for user ' . $item_id . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
				Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
					'APDelivery', Delivery::REMOVAL, '', $inbox, $item_id);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +148,7 @@ class Notifier
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if ((count($items) == 1) && ($items[0]['id'] === $target_item['id']) && ($items[0]['uri'] === $items[0]['parent-uri'])) {
 | 
			
		||||
				logger('notifier: top level post');
 | 
			
		||||
				Logger::log('notifier: top level post');
 | 
			
		||||
				$top_level = true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +185,7 @@ class Notifier
 | 
			
		|||
			$condition = ['uri' => $target_item["thr-parent"], 'uid' => $target_item["uid"]];
 | 
			
		||||
			$thr_parent = Item::selectFirst($fields, $condition);
 | 
			
		||||
 | 
			
		||||
			logger('GUID: '.$target_item["guid"].': Parent is '.$parent['network'].'. Thread parent is '.$thr_parent['network'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('GUID: '.$target_item["guid"].': Parent is '.$parent['network'].'. Thread parent is '.$thr_parent['network'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			// This is IMPORTANT!!!!
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +249,7 @@ class Notifier
 | 
			
		|||
				$recipients = [$parent['contact-id']];
 | 
			
		||||
				$recipients_followup  = [$parent['contact-id']];
 | 
			
		||||
 | 
			
		||||
				logger('notifier: followup '.$target_item["guid"].' to '.$conversant_str, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('notifier: followup '.$target_item["guid"].' to '.$conversant_str, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				//if (!$target_item['private'] && $target_item['wall'] &&
 | 
			
		||||
				if (!$target_item['private'] &&
 | 
			
		||||
| 
						 | 
				
			
			@ -278,16 +279,16 @@ class Notifier
 | 
			
		|||
					$push_notify = false;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				logger("Notify ".$target_item["guid"]." via PuSH: ".($push_notify?"Yes":"No"), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Notify ".$target_item["guid"]." via PuSH: ".($push_notify?"Yes":"No"), LOGGER_DEBUG);
 | 
			
		||||
			} else {
 | 
			
		||||
				$followup = false;
 | 
			
		||||
 | 
			
		||||
				logger('Distributing directly '.$target_item["guid"], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Distributing directly '.$target_item["guid"], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				// don't send deletions onward for other people's stuff
 | 
			
		||||
 | 
			
		||||
				if ($target_item['deleted'] && !intval($target_item['wall'])) {
 | 
			
		||||
					logger('notifier: ignoring delete notification for non-wall item');
 | 
			
		||||
					Logger::log('notifier: ignoring delete notification for non-wall item');
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -328,7 +329,7 @@ class Notifier
 | 
			
		|||
				}
 | 
			
		||||
 | 
			
		||||
				if (count($url_recipients)) {
 | 
			
		||||
					logger('notifier: '.$target_item["guid"].' url_recipients ' . print_r($url_recipients,true));
 | 
			
		||||
					Logger::log('notifier: '.$target_item["guid"].' url_recipients ' . print_r($url_recipients,true));
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				$conversants = array_unique($conversants);
 | 
			
		||||
| 
						 | 
				
			
			@ -345,31 +346,31 @@ class Notifier
 | 
			
		|||
			if (($thr_parent && ($thr_parent['network'] == Protocol::OSTATUS)) || ($parent['network'] == Protocol::OSTATUS)) {
 | 
			
		||||
				$diaspora_delivery = false;
 | 
			
		||||
 | 
			
		||||
				logger('Some parent is OStatus for '.$target_item["guid"]." - Author: ".$thr_parent['author-id']." - Owner: ".$thr_parent['owner-id'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Some parent is OStatus for '.$target_item["guid"]." - Author: ".$thr_parent['author-id']." - Owner: ".$thr_parent['owner-id'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				// Send a salmon to the parent author
 | 
			
		||||
				$probed_contact = DBA::selectFirst('contact', ['url', 'notify'], ['id' => $thr_parent['author-id']]);
 | 
			
		||||
				if (DBA::isResult($probed_contact) && !empty($probed_contact["notify"])) {
 | 
			
		||||
					logger('Notify parent author '.$probed_contact["url"].': '.$probed_contact["notify"]);
 | 
			
		||||
					Logger::log('Notify parent author '.$probed_contact["url"].': '.$probed_contact["notify"]);
 | 
			
		||||
					$url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// Send a salmon to the parent owner
 | 
			
		||||
				$probed_contact = DBA::selectFirst('contact', ['url', 'notify'], ['id' => $thr_parent['owner-id']]);
 | 
			
		||||
				if (DBA::isResult($probed_contact) && !empty($probed_contact["notify"])) {
 | 
			
		||||
					logger('Notify parent owner '.$probed_contact["url"].': '.$probed_contact["notify"]);
 | 
			
		||||
					Logger::log('Notify parent owner '.$probed_contact["url"].': '.$probed_contact["notify"]);
 | 
			
		||||
					$url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// Send a salmon notification to every person we mentioned in the post
 | 
			
		||||
				$arr = explode(',',$target_item['tag']);
 | 
			
		||||
				foreach ($arr as $x) {
 | 
			
		||||
					//logger('Checking tag '.$x, LOGGER_DEBUG);
 | 
			
		||||
					//Logger::log('Checking tag '.$x, LOGGER_DEBUG);
 | 
			
		||||
					$matches = null;
 | 
			
		||||
					if (preg_match('/@\[url=([^\]]*)\]/',$x,$matches)) {
 | 
			
		||||
							$probed_contact = Probe::uri($matches[1]);
 | 
			
		||||
						if ($probed_contact["notify"] != "") {
 | 
			
		||||
							logger('Notify mentioned user '.$probed_contact["url"].': '.$probed_contact["notify"]);
 | 
			
		||||
							Logger::log('Notify mentioned user '.$probed_contact["url"].': '.$probed_contact["notify"]);
 | 
			
		||||
							$url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +420,7 @@ class Notifier
 | 
			
		|||
		// delivery loop
 | 
			
		||||
		if (DBA::isResult($r)) {
 | 
			
		||||
			foreach ($r as $contact) {
 | 
			
		||||
				logger("Deliver ".$item_id." to ".$contact['url']." via network ".$contact['network'], LOGGER_DEBUG);
 | 
			
		||||
				Logger::log("Deliver ".$item_id." to ".$contact['url']." via network ".$contact['network'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
						'Delivery', $cmd, $item_id, (int)$contact['id']);
 | 
			
		||||
| 
						 | 
				
			
			@ -432,7 +433,7 @@ class Notifier
 | 
			
		|||
			$slap = OStatus::salmon($target_item, $owner);
 | 
			
		||||
			foreach ($url_recipients as $url) {
 | 
			
		||||
				if ($url) {
 | 
			
		||||
					logger('notifier: urldelivery: ' . $url);
 | 
			
		||||
					Logger::log('notifier: urldelivery: ' . $url);
 | 
			
		||||
					$deliver_status = Salmon::slapper($owner, $url, $slap);
 | 
			
		||||
					/// @TODO Redeliver/queue these items on failure, though there is no contact record
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -469,19 +470,19 @@ class Notifier
 | 
			
		|||
			$r = array_merge($r2, $r1);
 | 
			
		||||
 | 
			
		||||
			if (DBA::isResult($r)) {
 | 
			
		||||
				logger('pubdeliver '.$target_item["guid"].': '.print_r($r,true), LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('pubdeliver '.$target_item["guid"].': '.print_r($r,true), LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				foreach ($r as $rr) {
 | 
			
		||||
					// except for Diaspora batch jobs
 | 
			
		||||
					// Don't deliver to folks who have already been delivered to
 | 
			
		||||
 | 
			
		||||
					if (($rr['network'] !== Protocol::DIASPORA) && (in_array($rr['id'], $conversants))) {
 | 
			
		||||
						logger('notifier: already delivered id=' . $rr['id']);
 | 
			
		||||
						Logger::log('notifier: already delivered id=' . $rr['id']);
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					if (!in_array($cmd, [Delivery::MAIL, Delivery::SUGGESTION]) && !$followup) {
 | 
			
		||||
						logger('notifier: delivery agent: '.$rr['name'].' '.$rr['id'].' '.$rr['network'].' '.$target_item["guid"]);
 | 
			
		||||
						Logger::log('notifier: delivery agent: '.$rr['name'].' '.$rr['id'].' '.$rr['network'].' '.$target_item["guid"]);
 | 
			
		||||
						Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
								'Delivery', $cmd, $item_id, (int)$rr['id']);
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			@ -493,13 +494,13 @@ class Notifier
 | 
			
		|||
 | 
			
		||||
		// Notify PuSH subscribers (Used for OStatus distribution of regular posts)
 | 
			
		||||
		if ($push_notify) {
 | 
			
		||||
			logger('Activating internal PuSH for item '.$item_id, LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Activating internal PuSH for item '.$item_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			// Handling the pubsubhubbub requests
 | 
			
		||||
			PushSubscriber::publishFeed($owner['uid'], $a->queue['priority']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		logger('notifier: calling hooks for ' . $cmd . ' ' . $item_id, LOGGER_DEBUG);
 | 
			
		||||
		Logger::log('notifier: calling hooks for ' . $cmd . ' ' . $item_id, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		if ($normal_mode) {
 | 
			
		||||
			Hook::fork($a->queue['priority'], 'notifier_normal', $target_item);
 | 
			
		||||
| 
						 | 
				
			
			@ -517,15 +518,15 @@ class Notifier
 | 
			
		|||
 | 
			
		||||
		if ($target_item['origin']) {
 | 
			
		||||
			$inboxes = ActivityPub\Transmitter::fetchTargetInboxes($target_item, $uid);
 | 
			
		||||
			logger('Origin item ' . $item_id . ' with URL ' . $target_item['uri'] . ' will be distributed.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Origin item ' . $item_id . ' with URL ' . $target_item['uri'] . ' will be distributed.', LOGGER_DEBUG);
 | 
			
		||||
		} elseif (!DBA::exists('conversation', ['item-uri' => $target_item['uri'], 'protocol' => Conversation::PARCEL_ACTIVITYPUB])) {
 | 
			
		||||
			logger('Remote item ' . $item_id . ' with URL ' . $target_item['uri'] . ' is no AP post. It will not be distributed.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Remote item ' . $item_id . ' with URL ' . $target_item['uri'] . ' is no AP post. It will not be distributed.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		} else {
 | 
			
		||||
			// Remote items are transmitted via the personal inboxes.
 | 
			
		||||
			// Doing so ensures that the dedicated receiver will get the message.
 | 
			
		||||
			$personal = true;
 | 
			
		||||
			logger('Remote item ' . $item_id . ' with URL ' . $target_item['uri'] . ' will be distributed.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Remote item ' . $item_id . ' with URL ' . $target_item['uri'] . ' will be distributed.', LOGGER_DEBUG);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($parent['origin']) {
 | 
			
		||||
| 
						 | 
				
			
			@ -534,7 +535,7 @@ class Notifier
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (empty($inboxes)) {
 | 
			
		||||
			logger('No inboxes found for item ' . $item_id . ' with URL ' . $target_item['uri'] . '. It will not be distributed.', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('No inboxes found for item ' . $item_id . ' with URL ' . $target_item['uri'] . '. It will not be distributed.', LOGGER_DEBUG);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -542,7 +543,7 @@ class Notifier
 | 
			
		|||
		ActivityPub\Transmitter::createCachedActivityFromItem($item_id, true);
 | 
			
		||||
 | 
			
		||||
		foreach ($inboxes as $inbox) {
 | 
			
		||||
			logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
					'APDelivery', $cmd, $item_id, $inbox, $uid);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ namespace Friendica\Worker;
 | 
			
		|||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Content\Text\BBCode;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\PConfig;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +30,7 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
		require_once 'include/items.php';
 | 
			
		||||
 | 
			
		||||
		logger('start');
 | 
			
		||||
		Logger::log('start');
 | 
			
		||||
 | 
			
		||||
		$manual_id  = 0;
 | 
			
		||||
		$generation = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +43,7 @@ class OnePoll
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if (!$contact_id) {
 | 
			
		||||
			logger('no contact');
 | 
			
		||||
			Logger::log('no contact');
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +51,7 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
		$contact = DBA::selectFirst('contact', [], ['id' => $contact_id]);
 | 
			
		||||
		if (!DBA::isResult($contact)) {
 | 
			
		||||
			logger('Contact not found or cannot be used.');
 | 
			
		||||
			Logger::log('Contact not found or cannot be used.');
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +87,7 @@ class OnePoll
 | 
			
		|||
			$updated = DateTimeFormat::utcNow();
 | 
			
		||||
 | 
			
		||||
			if ($last_updated) {
 | 
			
		||||
				logger('Contact '.$contact['id'].' had last update on '.$last_updated, LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Contact '.$contact['id'].' had last update on '.$last_updated, LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
				// The last public item can be older than the last item we got
 | 
			
		||||
				if ($last_updated < $contact['last-item']) {
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +100,7 @@ class OnePoll
 | 
			
		|||
			} else {
 | 
			
		||||
				self::updateContact($contact, ['last-update' => $updated, 'failure_update' => $updated]);
 | 
			
		||||
				Contact::markForArchival($contact);
 | 
			
		||||
				logger('Contact '.$contact['id'].' is marked for archival', LOGGER_DEBUG);
 | 
			
		||||
				Logger::log('Contact '.$contact['id'].' is marked for archival', LOGGER_DEBUG);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +130,7 @@ class OnePoll
 | 
			
		|||
		// Update the contact entry
 | 
			
		||||
		if (($contact['network'] === Protocol::OSTATUS) || ($contact['network'] === Protocol::DIASPORA) || ($contact['network'] === Protocol::DFRN)) {
 | 
			
		||||
			if (!PortableContact::reachable($contact['url'])) {
 | 
			
		||||
				logger("Skipping probably dead contact ".$contact['url']);
 | 
			
		||||
				Logger::log("Skipping probably dead contact ".$contact['url']);
 | 
			
		||||
 | 
			
		||||
				// set the last-update so we don't keep polling
 | 
			
		||||
				DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +139,7 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
			if (!Contact::updateFromProbe($contact["id"])) {
 | 
			
		||||
				Contact::markForArchival($contact);
 | 
			
		||||
				logger('Contact is marked dead');
 | 
			
		||||
				Logger::log('Contact is marked dead');
 | 
			
		||||
 | 
			
		||||
				// set the last-update so we don't keep polling
 | 
			
		||||
				DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +154,7 @@ class OnePoll
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if ($importer_uid == 0) {
 | 
			
		||||
			logger('Ignore public contacts');
 | 
			
		||||
			Logger::log('Ignore public contacts');
 | 
			
		||||
 | 
			
		||||
			// set the last-update so we don't keep polling
 | 
			
		||||
			DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +166,7 @@ class OnePoll
 | 
			
		|||
		);
 | 
			
		||||
 | 
			
		||||
		if (!DBA::isResult($r)) {
 | 
			
		||||
			logger('No self contact for user '.$importer_uid);
 | 
			
		||||
			Logger::log('No self contact for user '.$importer_uid);
 | 
			
		||||
 | 
			
		||||
			// set the last-update so we don't keep polling
 | 
			
		||||
			DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +176,7 @@ class OnePoll
 | 
			
		|||
		$importer = $r[0];
 | 
			
		||||
		$url = '';
 | 
			
		||||
 | 
			
		||||
		logger("poll: ({$contact['network']}-{$contact['id']}) IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}");
 | 
			
		||||
		Logger::log("poll: ({$contact['network']}-{$contact['id']}) IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}");
 | 
			
		||||
 | 
			
		||||
		if ($contact['network'] === Protocol::DFRN) {
 | 
			
		||||
			$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
 | 
			
		||||
| 
						 | 
				
			
			@ -213,10 +214,10 @@ class OnePoll
 | 
			
		|||
			$handshake_xml = $curlResult->getBody();
 | 
			
		||||
			$html_code = $curlResult->getReturnCode();
 | 
			
		||||
 | 
			
		||||
			logger('handshake with url ' . $url . ' returns xml: ' . $handshake_xml, LOGGER_DATA);
 | 
			
		||||
			Logger::log('handshake with url ' . $url . ' returns xml: ' . $handshake_xml, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
			if (!strlen($handshake_xml) || ($html_code >= 400) || !$html_code) {
 | 
			
		||||
				logger("$url appears to be dead - marking for death ");
 | 
			
		||||
				Logger::log("$url appears to be dead - marking for death ");
 | 
			
		||||
 | 
			
		||||
				// dead connection - might be a transient event, or this might
 | 
			
		||||
				// mean the software was uninstalled or the domain expired.
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +232,7 @@ class OnePoll
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if (!strstr($handshake_xml, '<')) {
 | 
			
		||||
				logger('response from ' . $url . ' did not contain XML.');
 | 
			
		||||
				Logger::log('response from ' . $url . ' did not contain XML.');
 | 
			
		||||
 | 
			
		||||
				Contact::markForArchival($contact);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -244,7 +245,7 @@ class OnePoll
 | 
			
		|||
			$res = XML::parseString($handshake_xml);
 | 
			
		||||
 | 
			
		||||
			if (intval($res->status) == 1) {
 | 
			
		||||
				logger("$url replied status 1 - marking for death ");
 | 
			
		||||
				Logger::log("$url replied status 1 - marking for death ");
 | 
			
		||||
 | 
			
		||||
				// we may not be friends anymore. Will keep trying for one month.
 | 
			
		||||
				// set the last-update so we don't keep polling
 | 
			
		||||
| 
						 | 
				
			
			@ -253,7 +254,7 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
				Contact::markForArchival($contact);
 | 
			
		||||
			} elseif ($contact['term-date'] > DBA::NULL_DATETIME) {
 | 
			
		||||
				logger("$url back from the dead - removing mark for death");
 | 
			
		||||
				Logger::log("$url back from the dead - removing mark for death");
 | 
			
		||||
				Contact::unmarkForArchival($contact);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +292,7 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
			if ($final_dfrn_id != $orig_id) {
 | 
			
		||||
				// did not decode properly - cannot trust this site
 | 
			
		||||
				logger('ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);
 | 
			
		||||
				Logger::log('ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);
 | 
			
		||||
 | 
			
		||||
				// set the last-update so we don't keep polling
 | 
			
		||||
				DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
 | 
			
		||||
| 
						 | 
				
			
			@ -347,7 +348,7 @@ class OnePoll
 | 
			
		|||
			$xml = $curlResult->getBody();
 | 
			
		||||
 | 
			
		||||
		} elseif ($contact['network'] === Protocol::MAIL) {
 | 
			
		||||
			logger("Mail: Fetching for ".$contact['addr'], LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Mail: Fetching for ".$contact['addr'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$mail_disabled = ((function_exists('imap_open') && !Config::get('system', 'imap_disabled')) ? 0 : 1);
 | 
			
		||||
			if ($mail_disabled) {
 | 
			
		||||
| 
						 | 
				
			
			@ -357,7 +358,7 @@ class OnePoll
 | 
			
		|||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger("Mail: Enabled", LOGGER_DEBUG);
 | 
			
		||||
			Logger::log("Mail: Enabled", LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
			$mbox = null;
 | 
			
		||||
			$user = DBA::selectFirst('user', ['prvkey'], ['uid' => $importer_uid]);
 | 
			
		||||
| 
						 | 
				
			
			@ -370,13 +371,13 @@ class OnePoll
 | 
			
		|||
				openssl_private_decrypt(hex2bin($mailconf['pass']), $password, $user['prvkey']);
 | 
			
		||||
				$mbox = Email::connect($mailbox, $mailconf['user'], $password);
 | 
			
		||||
				unset($password);
 | 
			
		||||
				logger("Mail: Connect to " . $mailconf['user']);
 | 
			
		||||
				Logger::log("Mail: Connect to " . $mailconf['user']);
 | 
			
		||||
				if ($mbox) {
 | 
			
		||||
					$fields = ['last_check' => DateTimeFormat::utcNow()];
 | 
			
		||||
					DBA::update('mailacct', $fields, ['id' => $mailconf['id']]);
 | 
			
		||||
					logger("Mail: Connected to " . $mailconf['user']);
 | 
			
		||||
					Logger::log("Mail: Connected to " . $mailconf['user']);
 | 
			
		||||
				} else {
 | 
			
		||||
					logger("Mail: Connection error ".$mailconf['user']." ".print_r(imap_errors(), true));
 | 
			
		||||
					Logger::log("Mail: Connection error ".$mailconf['user']." ".print_r(imap_errors(), true));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -384,17 +385,17 @@ class OnePoll
 | 
			
		|||
				$msgs = Email::poll($mbox, $contact['addr']);
 | 
			
		||||
 | 
			
		||||
				if (count($msgs)) {
 | 
			
		||||
					logger("Mail: Parsing ".count($msgs)." mails from ".$contact['addr']." for ".$mailconf['user'], LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Mail: Parsing ".count($msgs)." mails from ".$contact['addr']." for ".$mailconf['user'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
					$metas = Email::messageMeta($mbox, implode(',', $msgs));
 | 
			
		||||
 | 
			
		||||
					if (count($metas) != count($msgs)) {
 | 
			
		||||
						logger("for " . $mailconf['user'] . " there are ". count($msgs) . " messages but received " . count($metas) . " metas", LOGGER_DEBUG);
 | 
			
		||||
						Logger::log("for " . $mailconf['user'] . " there are ". count($msgs) . " messages but received " . count($metas) . " metas", LOGGER_DEBUG);
 | 
			
		||||
					} else {
 | 
			
		||||
						$msgs = array_combine($msgs, $metas);
 | 
			
		||||
 | 
			
		||||
						foreach ($msgs as $msg_uid => $meta) {
 | 
			
		||||
							logger("Mail: Parsing mail ".$msg_uid, LOGGER_DATA);
 | 
			
		||||
							Logger::log("Mail: Parsing mail ".$msg_uid, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
							$datarray = [];
 | 
			
		||||
							$datarray['verb'] = ACTIVITY_POST;
 | 
			
		||||
| 
						 | 
				
			
			@ -409,7 +410,7 @@ class OnePoll
 | 
			
		|||
							$condition = ['uid' => $importer_uid, 'uri' => $datarray['uri']];
 | 
			
		||||
							$item = Item::selectFirst($fields, $condition);
 | 
			
		||||
							if (DBA::isResult($item)) {
 | 
			
		||||
								logger("Mail: Seen before ".$msg_uid." for ".$mailconf['user']." UID: ".$importer_uid." URI: ".$datarray['uri'],LOGGER_DEBUG);
 | 
			
		||||
								Logger::log("Mail: Seen before ".$msg_uid." for ".$mailconf['user']." UID: ".$importer_uid." URI: ".$datarray['uri'],LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
								// Only delete when mails aren't automatically moved or deleted
 | 
			
		||||
								if (($mailconf['action'] != 1) && ($mailconf['action'] != 3))
 | 
			
		||||
| 
						 | 
				
			
			@ -420,18 +421,18 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
								switch ($mailconf['action']) {
 | 
			
		||||
									case 0:
 | 
			
		||||
										logger("Mail: Seen before ".$msg_uid." for ".$mailconf['user'].". Doing nothing.", LOGGER_DEBUG);
 | 
			
		||||
										Logger::log("Mail: Seen before ".$msg_uid." for ".$mailconf['user'].". Doing nothing.", LOGGER_DEBUG);
 | 
			
		||||
										break;
 | 
			
		||||
									case 1:
 | 
			
		||||
										logger("Mail: Deleting ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
										Logger::log("Mail: Deleting ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
										imap_delete($mbox, $msg_uid, FT_UID);
 | 
			
		||||
										break;
 | 
			
		||||
									case 2:
 | 
			
		||||
										logger("Mail: Mark as seen ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
										Logger::log("Mail: Mark as seen ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
										imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
 | 
			
		||||
										break;
 | 
			
		||||
									case 3:
 | 
			
		||||
										logger("Mail: Moving ".$msg_uid." to ".$mailconf['movetofolder']." for ".$mailconf['user']);
 | 
			
		||||
										Logger::log("Mail: Moving ".$msg_uid." to ".$mailconf['movetofolder']." for ".$mailconf['user']);
 | 
			
		||||
										imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
 | 
			
		||||
										if ($mailconf['movetofolder'] != "") {
 | 
			
		||||
											imap_mail_move($mbox, $msg_uid, $mailconf['movetofolder'], FT_UID);
 | 
			
		||||
| 
						 | 
				
			
			@ -502,13 +503,13 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
							$r = Email::getMessage($mbox, $msg_uid, $reply);
 | 
			
		||||
							if (!$r) {
 | 
			
		||||
								logger("Mail: can't fetch msg ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
								Logger::log("Mail: can't fetch msg ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
								continue;
 | 
			
		||||
							}
 | 
			
		||||
							$datarray['body'] = escape_tags($r['body']);
 | 
			
		||||
							$datarray['body'] = BBCode::limitBodySize($datarray['body']);
 | 
			
		||||
 | 
			
		||||
							logger("Mail: Importing ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
							Logger::log("Mail: Importing ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
 | 
			
		||||
							/// @TODO Adding a gravatar for the original author would be cool
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -554,18 +555,18 @@ class OnePoll
 | 
			
		|||
 | 
			
		||||
							switch ($mailconf['action']) {
 | 
			
		||||
								case 0:
 | 
			
		||||
									logger("Mail: Seen before ".$msg_uid." for ".$mailconf['user'].". Doing nothing.", LOGGER_DEBUG);
 | 
			
		||||
									Logger::log("Mail: Seen before ".$msg_uid." for ".$mailconf['user'].". Doing nothing.", LOGGER_DEBUG);
 | 
			
		||||
									break;
 | 
			
		||||
								case 1:
 | 
			
		||||
									logger("Mail: Deleting ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
									Logger::log("Mail: Deleting ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
									imap_delete($mbox, $msg_uid, FT_UID);
 | 
			
		||||
									break;
 | 
			
		||||
								case 2:
 | 
			
		||||
									logger("Mail: Mark as seen ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
									Logger::log("Mail: Mark as seen ".$msg_uid." for ".$mailconf['user']);
 | 
			
		||||
									imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
 | 
			
		||||
									break;
 | 
			
		||||
								case 3:
 | 
			
		||||
									logger("Mail: Moving ".$msg_uid." to ".$mailconf['movetofolder']." for ".$mailconf['user']);
 | 
			
		||||
									Logger::log("Mail: Moving ".$msg_uid." to ".$mailconf['movetofolder']." for ".$mailconf['user']);
 | 
			
		||||
									imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
 | 
			
		||||
									if ($mailconf['movetofolder'] != "") {
 | 
			
		||||
										imap_mail_move($mbox, $msg_uid, $mailconf['movetofolder'], FT_UID);
 | 
			
		||||
| 
						 | 
				
			
			@ -575,18 +576,18 @@ class OnePoll
 | 
			
		|||
						}
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					logger("Mail: no mails for ".$mailconf['user']);
 | 
			
		||||
					Logger::log("Mail: no mails for ".$mailconf['user']);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				logger("Mail: closing connection for ".$mailconf['user']);
 | 
			
		||||
				Logger::log("Mail: closing connection for ".$mailconf['user']);
 | 
			
		||||
				imap_close($mbox);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ($xml) {
 | 
			
		||||
			logger('received xml : ' . $xml, LOGGER_DATA);
 | 
			
		||||
			Logger::log('received xml : ' . $xml, LOGGER_DATA);
 | 
			
		||||
			if (!strstr($xml, '<')) {
 | 
			
		||||
				logger('post_handshake: response from ' . $url . ' did not contain XML.');
 | 
			
		||||
				Logger::log('post_handshake: response from ' . $url . ' did not contain XML.');
 | 
			
		||||
 | 
			
		||||
				$fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()];
 | 
			
		||||
				self::updateContact($contact, $fields);
 | 
			
		||||
| 
						 | 
				
			
			@ -595,7 +596,7 @@ class OnePoll
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			logger("Consume feed of contact ".$contact['id']);
 | 
			
		||||
			Logger::log("Consume feed of contact ".$contact['id']);
 | 
			
		||||
 | 
			
		||||
			consume_feed($xml, $importer, $contact, $hub);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -617,10 +618,10 @@ class OnePoll
 | 
			
		|||
				$hub_update = true;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			logger("Contact ".$contact['id']." returned hub: ".$hub." Network: ".$contact['network']." Relation: ".$contact['rel']." Update: ".$hub_update);
 | 
			
		||||
			Logger::log("Contact ".$contact['id']." returned hub: ".$hub." Network: ".$contact['network']." Relation: ".$contact['rel']." Update: ".$hub_update);
 | 
			
		||||
 | 
			
		||||
			if (strlen($hub) && $hub_update && (($contact['rel'] != Contact::FOLLOWER) || $contact['network'] == Protocol::FEED)) {
 | 
			
		||||
				logger('hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
 | 
			
		||||
				Logger::log('hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
 | 
			
		||||
				$hubs = explode(',', $hub);
 | 
			
		||||
 | 
			
		||||
				if (count($hubs)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,9 +7,10 @@
 | 
			
		|||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Protocol\Diaspora;
 | 
			
		||||
use Friendica\Protocol\ActivityPub;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
 | 
			
		||||
class ProfileUpdate {
 | 
			
		||||
	public static function execute($uid = 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +23,7 @@ class ProfileUpdate {
 | 
			
		|||
		$inboxes = ActivityPub\Transmitter::fetchTargetInboxesforUser($uid);
 | 
			
		||||
 | 
			
		||||
		foreach ($inboxes as $inbox) {
 | 
			
		||||
			logger('Profile update for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
			Logger::log('Profile update for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
 | 
			
		||||
			Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
 | 
			
		||||
				'APDelivery', Delivery::PROFILEUPDATE, '', $inbox, $uid);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\BaseObject;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\System;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Model\PushSubscriber;
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +38,7 @@ class PubSubPublish
 | 
			
		|||
		/// @todo Check server status with PortableContact::checkServer()
 | 
			
		||||
		// Before this can be done we need a way to safely detect the server url.
 | 
			
		||||
 | 
			
		||||
		logger("Generate feed of user " . $subscriber['nickname']. " to " . $subscriber['callback_url']. " - last updated " . $subscriber['last_update'], LOGGER_DEBUG);
 | 
			
		||||
		Logger::log("Generate feed of user " . $subscriber['nickname']. " to " . $subscriber['callback_url']. " - last updated " . $subscriber['last_update'], LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		$last_update = $subscriber['last_update'];
 | 
			
		||||
		$params = OStatus::feed($subscriber['nickname'], $last_update);
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +55,7 @@ class PubSubPublish
 | 
			
		|||
					$subscriber['topic']),
 | 
			
		||||
				"X-Hub-Signature: sha1=" . $hmac_sig];
 | 
			
		||||
 | 
			
		||||
		logger('POST ' . print_r($headers, true) . "\n" . $params, LOGGER_DATA);
 | 
			
		||||
		Logger::log('POST ' . print_r($headers, true) . "\n" . $params, LOGGER_DATA);
 | 
			
		||||
 | 
			
		||||
		$postResult = Network::post($subscriber['callback_url'], $params, $headers);
 | 
			
		||||
		$ret = $postResult->getReturnCode();
 | 
			
		||||
| 
						 | 
				
			
			@ -62,11 +63,11 @@ class PubSubPublish
 | 
			
		|||
		$condition = ['id' => $subscriber['id']];
 | 
			
		||||
 | 
			
		||||
		if ($ret >= 200 && $ret <= 299) {
 | 
			
		||||
			logger('Successfully pushed to ' . $subscriber['callback_url']);
 | 
			
		||||
			Logger::log('Successfully pushed to ' . $subscriber['callback_url']);
 | 
			
		||||
 | 
			
		||||
			PushSubscriber::reset($subscriber['id'], $last_update);
 | 
			
		||||
		} else {
 | 
			
		||||
			logger('Delivery error when pushing to ' . $subscriber['callback_url'] . ' HTTP: ' . $ret);
 | 
			
		||||
			Logger::log('Delivery error when pushing to ' . $subscriber['callback_url'] . ' HTTP: ' . $ret);
 | 
			
		||||
 | 
			
		||||
			PushSubscriber::delay($subscriber['id']);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ namespace Friendica\Worker;
 | 
			
		|||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Cache;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Core\Worker;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +33,7 @@ class Queue
 | 
			
		|||
		$no_dead_check = Config::get('system', 'queue_no_dead_check', false);
 | 
			
		||||
 | 
			
		||||
		if (!$queue_id) {
 | 
			
		||||
			logger('filling queue jobs - start');
 | 
			
		||||
			Logger::log('filling queue jobs - start');
 | 
			
		||||
 | 
			
		||||
			// Handling the pubsubhubbub requests
 | 
			
		||||
			PushSubscriber::requeue();
 | 
			
		||||
| 
						 | 
				
			
			@ -43,11 +44,11 @@ class Queue
 | 
			
		|||
 | 
			
		||||
			if (DBA::isResult($r)) {
 | 
			
		||||
				foreach ($r as $q_item) {
 | 
			
		||||
					logger('Call queue for id ' . $q_item['id']);
 | 
			
		||||
					Logger::log('Call queue for id ' . $q_item['id']);
 | 
			
		||||
					Worker::add(['priority' => PRIORITY_LOW, 'dont_fork' => true], "Queue", (int) $q_item['id']);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			logger('filling queue jobs - end');
 | 
			
		||||
			Logger::log('filling queue jobs - end');
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +73,7 @@ class Queue
 | 
			
		|||
		$dead = Cache::get($cachekey_deadguy . $contact['notify']);
 | 
			
		||||
 | 
			
		||||
		if (!is_null($dead) && $dead && !$no_dead_check) {
 | 
			
		||||
			logger('queue: skipping known dead url: ' . $contact['notify']);
 | 
			
		||||
			Logger::log('queue: skipping known dead url: ' . $contact['notify']);
 | 
			
		||||
			QueueModel::updateTime($q_item['id']);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -84,14 +85,14 @@ class Queue
 | 
			
		|||
				$vital = Cache::get($cachekey_server . $server);
 | 
			
		||||
 | 
			
		||||
				if (is_null($vital)) {
 | 
			
		||||
					logger("Check server " . $server . " (" . $contact["network"] . ")");
 | 
			
		||||
					Logger::log("Check server " . $server . " (" . $contact["network"] . ")");
 | 
			
		||||
 | 
			
		||||
					$vital = PortableContact::checkServer($server, $contact["network"], true);
 | 
			
		||||
					Cache::set($cachekey_server . $server, $vital, Cache::MINUTE);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (!is_null($vital) && !$vital) {
 | 
			
		||||
					logger('queue: skipping dead server: ' . $server);
 | 
			
		||||
					Logger::log('queue: skipping dead server: ' . $server);
 | 
			
		||||
					QueueModel::updateTime($q_item['id']);
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +113,7 @@ class Queue
 | 
			
		|||
 | 
			
		||||
		switch ($contact['network']) {
 | 
			
		||||
			case Protocol::DFRN:
 | 
			
		||||
				logger('queue: dfrndelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
				Logger::log('queue: dfrndelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
				$deliver_status = DFRN::deliver($owner, $contact, $data);
 | 
			
		||||
 | 
			
		||||
				if (($deliver_status >= 200) && ($deliver_status <= 299)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +125,7 @@ class Queue
 | 
			
		|||
				break;
 | 
			
		||||
 | 
			
		||||
			case Protocol::OSTATUS:
 | 
			
		||||
				logger('queue: slapdelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
				Logger::log('queue: slapdelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
				$deliver_status = Salmon::slapper($owner, $contact['notify'], $data);
 | 
			
		||||
 | 
			
		||||
				if ($deliver_status == -1) {
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +137,7 @@ class Queue
 | 
			
		|||
				break;
 | 
			
		||||
 | 
			
		||||
			case Protocol::DIASPORA:
 | 
			
		||||
				logger('queue: diaspora_delivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
				Logger::log('queue: diaspora_delivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
				$deliver_status = Diaspora::transmit($owner, $contact, $data, $public, true, 'Queue:' . $q_item['id'], true);
 | 
			
		||||
 | 
			
		||||
				if ((($deliver_status >= 200) && ($deliver_status <= 299)) ||
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +160,7 @@ class Queue
 | 
			
		|||
				}
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		logger('Deliver status ' . (int)$deliver_status . ' for item ' . $q_item['id'] . ' to ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
		Logger::log('Deliver status ' . (int)$deliver_status . ' for item ' . $q_item['id'] . ' to ' . $contact['name'] . ' <' . $contact['url'] . '>');
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,11 @@
 | 
			
		|||
 */
 | 
			
		||||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\Model\Item;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Model\Item;
 | 
			
		||||
 | 
			
		||||
require_once("include/items.php");
 | 
			
		||||
require_once "include/items.php";
 | 
			
		||||
 | 
			
		||||
class SpoolPost {
 | 
			
		||||
	public static function execute() {
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +50,7 @@ class SpoolPost {
 | 
			
		|||
 | 
			
		||||
					$result = Item::insert($arr);
 | 
			
		||||
 | 
			
		||||
					logger("Spool file ".$file." stored: ".$result, LOGGER_DEBUG);
 | 
			
		||||
					Logger::log("Spool file ".$file." stored: ".$result, LOGGER_DEBUG);
 | 
			
		||||
					unlink($fullfile);
 | 
			
		||||
				}
 | 
			
		||||
				closedir($dh);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
 | 
			
		||||
class TagUpdate
 | 
			
		||||
| 
						 | 
				
			
			@ -10,7 +11,7 @@ class TagUpdate
 | 
			
		|||
	{
 | 
			
		||||
		$messages = DBA::p("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''");
 | 
			
		||||
 | 
			
		||||
		logger('fetched messages: ' . DBA::numRows($messages));
 | 
			
		||||
		Logger::log('fetched messages: ' . DBA::numRows($messages));
 | 
			
		||||
		while ($message = DBA::fetch($messages)) {
 | 
			
		||||
			if ($message['uid'] == 0) {
 | 
			
		||||
				$global = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +30,7 @@ class TagUpdate
 | 
			
		|||
 | 
			
		||||
		$messages = DBA::select('item', ['guid'], ['uid' => 0]);
 | 
			
		||||
 | 
			
		||||
		logger('fetched messages: ' . DBA::numRows($messages));
 | 
			
		||||
		Logger::log('fetched messages: ' . DBA::numRows($messages));
 | 
			
		||||
		while ($message = DBA::fetch(messages)) {
 | 
			
		||||
			DBA::update('item', ['global' => true], ['guid' => $message['guid']]);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Friendica\Worker;
 | 
			
		||||
 | 
			
		||||
use Friendica\Core\Logger;
 | 
			
		||||
use Friendica\Core\Protocol;
 | 
			
		||||
use Friendica\Database\DBA;
 | 
			
		||||
use Friendica\Network\Probe;
 | 
			
		||||
| 
						 | 
				
			
			@ -16,10 +17,10 @@ class UpdateGContact
 | 
			
		|||
{
 | 
			
		||||
	public static function execute($contact_id)
 | 
			
		||||
	{
 | 
			
		||||
		logger('update_gcontact: start');
 | 
			
		||||
		Logger::log('update_gcontact: start');
 | 
			
		||||
 | 
			
		||||
		if (empty($contact_id)) {
 | 
			
		||||
			logger('update_gcontact: no contact');
 | 
			
		||||
			Logger::log('update_gcontact: no contact');
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue