Merge pull request #5314 from MrPetovan/task/4889-fix-tests
Fix tests after enabling PHP Notices
This commit is contained in:
		
				commit
				
					
						3eec97aa6e
					
				
			
		
					 19 changed files with 348 additions and 268 deletions
				
			
		|  | @ -10,11 +10,10 @@ php: | ||||||
| services: | services: | ||||||
|  - mysql |  - mysql | ||||||
| env: | env: | ||||||
|  - USER=travis DB=test |  - MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USERNAME=travis MYSQL_PASSWORD= MYSQL_DATABASE=test | ||||||
| 
 | 
 | ||||||
| install: | install: | ||||||
|  - composer install |  - composer install | ||||||
| before_script: | before_script: | ||||||
|  - mysql -e 'CREATE DATABASE IF NOT EXISTS test;' |  - mysql -e 'CREATE DATABASE IF NOT EXISTS test;' | ||||||
|  # In order to avoid bin/worker.php warnings |  - mysql -utravis test < database.sql | ||||||
|  - touch .htconfig.php |  | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								boot.php
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								boot.php
									
										
									
									
									
								
							|  | @ -499,36 +499,6 @@ if (!defined("SIGTERM")) { | ||||||
| if (!defined('CURLE_OPERATION_TIMEDOUT')) { | if (!defined('CURLE_OPERATION_TIMEDOUT')) { | ||||||
| 	define('CURLE_OPERATION_TIMEDOUT', CURLE_OPERATION_TIMEOUTED); | 	define('CURLE_OPERATION_TIMEDOUT', CURLE_OPERATION_TIMEOUTED); | ||||||
| } | } | ||||||
| /** |  | ||||||
|  * Reverse the effect of magic_quotes_gpc if it is enabled. |  | ||||||
|  * Please disable magic_quotes_gpc so we don't have to do this. |  | ||||||
|  * See http://php.net/manual/en/security.magicquotes.disabling.php |  | ||||||
|  */ |  | ||||||
| function startup() |  | ||||||
| { |  | ||||||
| 	error_reporting(E_ERROR | E_WARNING | E_PARSE); |  | ||||||
| 
 |  | ||||||
| 	set_time_limit(0); |  | ||||||
| 
 |  | ||||||
| 	// This has to be quite large to deal with embedded private photos
 |  | ||||||
| 	ini_set('pcre.backtrack_limit', 500000); |  | ||||||
| 
 |  | ||||||
| 	if (get_magic_quotes_gpc()) { |  | ||||||
| 		$process = [&$_GET, &$_POST, &$_COOKIE, &$_REQUEST]; |  | ||||||
| 		while (list($key, $val) = each($process)) { |  | ||||||
| 			foreach ($val as $k => $v) { |  | ||||||
| 				unset($process[$key][$k]); |  | ||||||
| 				if (is_array($v)) { |  | ||||||
| 					$process[$key][stripslashes($k)] = $v; |  | ||||||
| 					$process[] = &$process[$key][stripslashes($k)]; |  | ||||||
| 				} else { |  | ||||||
| 					$process[$key][stripslashes($k)] = stripslashes($v); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		unset($process); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * @brief Retrieve the App structure |  * @brief Retrieve the App structure | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								htconfig.php
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								htconfig.php
									
										
									
									
									
								
							|  | @ -23,17 +23,19 @@ $db_data = 'mysqldatabasename'; | ||||||
| 
 | 
 | ||||||
| // Use environment variables for mysql if they are set beforehand
 | // Use environment variables for mysql if they are set beforehand
 | ||||||
| if (!empty(getenv('MYSQL_HOST')) | if (!empty(getenv('MYSQL_HOST')) | ||||||
| 	&& !empty(getenv('MYSQL_PORT')) |  | ||||||
| 	&& (!empty(getenv('MYSQL_USERNAME')) || !empty(getenv('MYSQL_USER'))) | 	&& (!empty(getenv('MYSQL_USERNAME')) || !empty(getenv('MYSQL_USER'))) | ||||||
| 	&& !empty(getenv('MYSQL_PASSWORD')) | 	&& !getenv('MYSQL_PASSWORD') === false | ||||||
| 	&& !empty(getenv('MYSQL_DATABASE'))) { | 	&& !empty(getenv('MYSQL_DATABASE'))) { | ||||||
| 	$db_host = getenv('MYSQL_HOST') . ':' . getenv('MYSQL_PORT'); | 	$db_host = getenv('MYSQL_HOST'); | ||||||
|  | 	if (!empty(getenv('MYSQL_PORT'))) { | ||||||
|  | 		$db_host .= ':' . getenv('MYSQL_PORT'); | ||||||
|  | 	} | ||||||
| 	if (!empty(getenv('MYSQL_USERNAME'))) { | 	if (!empty(getenv('MYSQL_USERNAME'))) { | ||||||
| 		$db_user = getenv('MYSQL_USERNAME'); | 		$db_user = getenv('MYSQL_USERNAME'); | ||||||
| 	} elseif (!empty(getenv('MYSQL_USER'))) { | 	} else { | ||||||
| 		$db_user = getenv('MYSQL_USER'); | 		$db_user = getenv('MYSQL_USER'); | ||||||
| 	} | 	} | ||||||
| 	$db_pass = getenv('MYSQL_PASSWORD'); | 	$db_pass = (string) getenv('MYSQL_PASSWORD'); | ||||||
| 	$db_data = getenv('MYSQL_DATABASE'); | 	$db_data = getenv('MYSQL_DATABASE'); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										162
									
								
								include/api.php
									
										
									
									
									
								
							
							
						
						
									
										162
									
								
								include/api.php
									
										
									
									
									
								
							|  | @ -16,6 +16,7 @@ use Friendica\Core\Config; | ||||||
| use Friendica\Core\L10n; | use Friendica\Core\L10n; | ||||||
| use Friendica\Core\NotificationsManager; | use Friendica\Core\NotificationsManager; | ||||||
| use Friendica\Core\PConfig; | use Friendica\Core\PConfig; | ||||||
|  | use Friendica\Core\Protocol; | ||||||
| use Friendica\Core\System; | use Friendica\Core\System; | ||||||
| use Friendica\Core\Worker; | use Friendica\Core\Worker; | ||||||
| use Friendica\Database\DBM; | use Friendica\Database\DBM; | ||||||
|  | @ -90,11 +91,15 @@ function api_source() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Support for known clients that doesn't send a source name
 | 	// Support for known clients that doesn't send a source name
 | ||||||
|  | 	if (!empty($_SERVER['HTTP_USER_AGENT'])) { | ||||||
| 		if(strpos($_SERVER['HTTP_USER_AGENT'], "Twidere") !== false) { | 		if(strpos($_SERVER['HTTP_USER_AGENT'], "Twidere") !== false) { | ||||||
| 			return "Twidere"; | 			return "Twidere"; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		logger("Unrecognized user-agent ".$_SERVER['HTTP_USER_AGENT'], LOGGER_DEBUG); | 		logger("Unrecognized user-agent ".$_SERVER['HTTP_USER_AGENT'], LOGGER_DEBUG); | ||||||
|  | 	} else { | ||||||
|  | 		logger("Empty user-agent", LOGGER_DEBUG); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	return "api"; | 	return "api"; | ||||||
| } | } | ||||||
|  | @ -193,8 +198,8 @@ function api_login(App $a) | ||||||
| 		throw new UnauthorizedException("This API requires login"); | 		throw new UnauthorizedException("This API requires login"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$user = $_SERVER['PHP_AUTH_USER']; | 	$user = defaults($_SERVER, 'PHP_AUTH_USER', ''); | ||||||
| 	$password = $_SERVER['PHP_AUTH_PW']; | 	$password = defaults($_SERVER, 'PHP_AUTH_PW', ''); | ||||||
| 
 | 
 | ||||||
| 	// allow "user@server" login (but ignore 'server' part)
 | 	// allow "user@server" login (but ignore 'server' part)
 | ||||||
| 	$at = strstr($user, "@", true); | 	$at = strstr($user, "@", true); | ||||||
|  | @ -258,7 +263,7 @@ function api_check_method($method) | ||||||
| 	if ($method == "*") { | 	if ($method == "*") { | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| 	return (strpos($method, $_SERVER['REQUEST_METHOD']) !== false); | 	return (stripos($method, defaults($_SERVER, 'REQUEST_METHOD', 'GET')) !== false); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  | @ -298,7 +303,7 @@ function api_call(App $a) | ||||||
| 				//unset($_SERVER['PHP_AUTH_USER']);
 | 				//unset($_SERVER['PHP_AUTH_USER']);
 | ||||||
| 
 | 
 | ||||||
| 				/// @TODO should be "true ==[=] $info['auth']", if you miss only one = character, you assign a variable (only with ==). Let's make all this even.
 | 				/// @TODO should be "true ==[=] $info['auth']", if you miss only one = character, you assign a variable (only with ==). Let's make all this even.
 | ||||||
| 				if ($info['auth'] === true && api_user() === false) { | 				if (!empty($info['auth']) && api_user() === false) { | ||||||
| 					api_login($a); | 					api_login($a); | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
|  | @ -475,7 +480,7 @@ function api_rss_extra(App $a, $arr, $user_info) | ||||||
| 		'base'         => System::baseUrl(), | 		'base'         => System::baseUrl(), | ||||||
| 		'updated'      => api_date(null), | 		'updated'      => api_date(null), | ||||||
| 		'atom_updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), | 		'atom_updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), | ||||||
| 		'language'     => $user_info['language'], | 		'language'     => $user_info['lang'], | ||||||
| 		'logo'         => System::baseUrl() . "/images/friendica-32.png", | 		'logo'         => System::baseUrl() . "/images/friendica-32.png", | ||||||
| 	]; | 	]; | ||||||
| 
 | 
 | ||||||
|  | @ -571,6 +576,7 @@ function api_get_user(App $a, $contact_id = null) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// $called_api is the API path exploded on / and is expected to have at least 2 elements
 | ||||||
| 	if (is_null($user) && ($a->argc > (count($called_api) - 1)) && (count($called_api) > 0)) { | 	if (is_null($user) && ($a->argc > (count($called_api) - 1)) && (count($called_api) > 0)) { | ||||||
| 		$argid = count($called_api); | 		$argid = count($called_api); | ||||||
| 		list($user, $null) = explode(".", $a->argv[$argid]); | 		list($user, $null) = explode(".", $a->argv[$argid]); | ||||||
|  | @ -773,13 +779,13 @@ function api_get_user(App $a, $contact_id = null) | ||||||
| 				$link_color = PConfig::get($ret['uid'], 'frio', 'link_color'); | 				$link_color = PConfig::get($ret['uid'], 'frio', 'link_color'); | ||||||
| 				$bgcolor = PConfig::get($ret['uid'], 'frio', 'background_color'); | 				$bgcolor = PConfig::get($ret['uid'], 'frio', 'background_color'); | ||||||
| 			} | 			} | ||||||
| 			if (!$nav_bg) { | 			if (empty($nav_bg)) { | ||||||
| 				$nav_bg = "#708fa0"; | 				$nav_bg = "#708fa0"; | ||||||
| 			} | 			} | ||||||
| 			if (!$link_color) { | 			if (empty($link_color)) { | ||||||
| 				$link_color = "#6fdbe8"; | 				$link_color = "#6fdbe8"; | ||||||
| 			} | 			} | ||||||
| 			if (!$bgcolor) { | 			if (empty($bgcolor)) { | ||||||
| 				$bgcolor = "#ededed"; | 				$bgcolor = "#ededed"; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
|  | @ -801,12 +807,12 @@ function api_get_user(App $a, $contact_id = null) | ||||||
|  */ |  */ | ||||||
| function api_item_get_user(App $a, $item) | function api_item_get_user(App $a, $item) | ||||||
| { | { | ||||||
| 	$status_user = api_get_user($a, $item["author-id"]); | 	$status_user = api_get_user($a, defaults($item, 'author-id', null)); | ||||||
| 
 | 
 | ||||||
| 	$status_user["protected"] = $item["private"]; | 	$status_user["protected"] = defaults($item, 'private', 0); | ||||||
| 
 | 
 | ||||||
| 	if ($item['thr-parent'] == $item['uri']) { | 	if (defaults($item, 'thr-parent', '') == defaults($item, 'uri', '')) { | ||||||
| 		$owner_user = api_get_user($a, $item["owner-id"]); | 		$owner_user = api_get_user($a, defaults($item, 'author-id', null)); | ||||||
| 	} else { | 	} else { | ||||||
| 		$owner_user = $status_user; | 		$owner_user = $status_user; | ||||||
| 	} | 	} | ||||||
|  | @ -880,7 +886,6 @@ function api_create_xml(array $data, $root_element) | ||||||
| { | { | ||||||
| 	$childname = key($data); | 	$childname = key($data); | ||||||
| 	$data2 = array_pop($data); | 	$data2 = array_pop($data); | ||||||
| 	$key = key($data2); |  | ||||||
| 
 | 
 | ||||||
| 	$namespaces = ["" => "http://api.twitter.com", | 	$namespaces = ["" => "http://api.twitter.com", | ||||||
| 				"statusnet" => "http://status.net/schema/api/1/", | 				"statusnet" => "http://status.net/schema/api/1/", | ||||||
|  | @ -893,8 +898,8 @@ function api_create_xml(array $data, $root_element) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (is_array($data2)) { | 	if (is_array($data2)) { | ||||||
|  | 		$key = key($data2); | ||||||
| 		api_walk_recursive($data2, "api_reformat_xml"); | 		api_walk_recursive($data2, "api_reformat_xml"); | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 		if ($key == "0") { | 		if ($key == "0") { | ||||||
| 			$data4 = []; | 			$data4 = []; | ||||||
|  | @ -906,6 +911,7 @@ function api_create_xml(array $data, $root_element) | ||||||
| 
 | 
 | ||||||
| 			$data2 = $data4; | 			$data2 = $data4; | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	$data3 = [$root_element => $data2]; | 	$data3 = [$root_element => $data2]; | ||||||
| 
 | 
 | ||||||
|  | @ -1299,19 +1305,19 @@ function api_status_show($type) | ||||||
| 			'in_reply_to_screen_name' => $in_reply_to['screen_name'], | 			'in_reply_to_screen_name' => $in_reply_to['screen_name'], | ||||||
| 			'user' => $user_info, | 			'user' => $user_info, | ||||||
| 			$geo => null, | 			$geo => null, | ||||||
| 			'coordinates' => "", | 			'coordinates' => '', | ||||||
| 			'place' => "", | 			'place' => '', | ||||||
| 			'contributors' => "", | 			'contributors' => '', | ||||||
| 			'is_quote_status' => false, | 			'is_quote_status' => false, | ||||||
| 			'retweet_count' => 0, | 			'retweet_count' => 0, | ||||||
| 			'favorite_count' => 0, | 			'favorite_count' => 0, | ||||||
| 			'favorited' => $lastwall['starred'] ? true : false, | 			'favorited' => $lastwall['starred'] ? true : false, | ||||||
| 			'retweeted' => false, | 			'retweeted' => false, | ||||||
| 			'possibly_sensitive' => false, | 			'possibly_sensitive' => false, | ||||||
| 			'lang' => "", | 			'lang' => '', | ||||||
| 			'statusnet_html' => $converted["html"], | 			'statusnet_html' => $converted["html"], | ||||||
| 			'statusnet_conversation_id' => $lastwall['parent'], | 			'statusnet_conversation_id' => $lastwall['parent'], | ||||||
| 			'external_url' => System::baseUrl() . "/display/" . $lastwall['guid'], | 			'external_url' => System::baseUrl() . '/display/' . $lastwall['guid'], | ||||||
| 		]; | 		]; | ||||||
| 
 | 
 | ||||||
| 		if (count($converted["attachments"]) > 0) { | 		if (count($converted["attachments"]) > 0) { | ||||||
|  | @ -1477,7 +1483,7 @@ function api_users_lookup($type) | ||||||
| { | { | ||||||
| 	$users = []; | 	$users = []; | ||||||
| 
 | 
 | ||||||
| 	if (x($_REQUEST['user_id'])) { | 	if (!empty($_REQUEST['user_id'])) { | ||||||
| 		foreach (explode(',', $_REQUEST['user_id']) as $id) { | 		foreach (explode(',', $_REQUEST['user_id']) as $id) { | ||||||
| 			if (!empty($id)) { | 			if (!empty($id)) { | ||||||
| 				$users[] = api_get_user(get_app(), $id); | 				$users[] = api_get_user(get_app(), $id); | ||||||
|  | @ -1801,20 +1807,20 @@ function api_statuses_show($type) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// params
 | 	// params
 | ||||||
| 	$id = intval($a->argv[3]); | 	$id = intval(defaults($a->argv, 3, 0)); | ||||||
| 
 | 
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($_REQUEST["id"]); | 		$id = intval(defaults($_REQUEST, 'id', 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Hotot workaround
 | 	// Hotot workaround
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($a->argv[4]); | 		$id = intval(defaults($a->argv, 4, 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	logger('API: api_statuses_show: ' . $id); | 	logger('API: api_statuses_show: ' . $id); | ||||||
| 
 | 
 | ||||||
| 	$conversation = (x($_REQUEST, 'conversation') ? 1 : 0); | 	$conversation = !empty($_REQUEST['conversation']); | ||||||
| 
 | 
 | ||||||
| 	// try to fetch the item for the local user - or the public item, if there is no local one
 | 	// try to fetch the item for the local user - or the public item, if there is no local one
 | ||||||
| 	$uri_item = dba::selectFirst('item', ['uri'], ['id' => $id]); | 	$uri_item = dba::selectFirst('item', ['uri'], ['id' => $id]); | ||||||
|  | @ -1874,24 +1880,24 @@ function api_conversation_show($type) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// params
 | 	// params
 | ||||||
| 	$id = intval($a->argv[3]); | 	$id       = intval(defaults($a->argv , 3         , 0)); | ||||||
| 	$count = (x($_REQUEST, 'count') ? $_REQUEST['count'] : 20); | 	$since_id = intval(defaults($_REQUEST, 'since_id', 0)); | ||||||
| 	$page = (x($_REQUEST, 'page') ? $_REQUEST['page'] - 1 : 0); | 	$max_id   = intval(defaults($_REQUEST, 'max_id'  , 0)); | ||||||
|  | 	$count    = intval(defaults($_REQUEST, 'count'   , 20)); | ||||||
|  | 	$page     = intval(defaults($_REQUEST, 'page'    , 1)) - 1; | ||||||
| 	if ($page < 0) { | 	if ($page < 0) { | ||||||
| 		$page = 0; | 		$page = 0; | ||||||
| 	} | 	} | ||||||
| 	$since_id = (x($_REQUEST, 'since_id') ? $_REQUEST['since_id'] : 0); |  | ||||||
| 	$max_id = (x($_REQUEST, 'max_id') ? $_REQUEST['max_id'] : 0); |  | ||||||
| 
 | 
 | ||||||
| 	$start = $page * $count; | 	$start = $page * $count; | ||||||
| 
 | 
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($_REQUEST["id"]); | 		$id = intval(defaults($_REQUEST, 'id', 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Hotot workaround
 | 	// Hotot workaround
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($a->argv[4]); | 		$id = intval(defaults($a->argv, 4, 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	logger('API: api_conversation_show: '.$id); | 	logger('API: api_conversation_show: '.$id); | ||||||
|  | @ -1954,15 +1960,15 @@ function api_statuses_repeat($type) | ||||||
| 	api_get_user($a); | 	api_get_user($a); | ||||||
| 
 | 
 | ||||||
| 	// params
 | 	// params
 | ||||||
| 	$id = intval($a->argv[3]); | 	$id = intval(defaults($a->argv, 3, 0)); | ||||||
| 
 | 
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($_REQUEST["id"]); | 		$id = intval(defaults($_REQUEST, 'id', 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Hotot workaround
 | 	// Hotot workaround
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($a->argv[4]); | 		$id = intval(defaults($a->argv, 4, 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	logger('API: api_statuses_repeat: '.$id); | 	logger('API: api_statuses_repeat: '.$id); | ||||||
|  | @ -2020,15 +2026,15 @@ function api_statuses_destroy($type) | ||||||
| 	api_get_user($a); | 	api_get_user($a); | ||||||
| 
 | 
 | ||||||
| 	// params
 | 	// params
 | ||||||
| 	$id = intval($a->argv[3]); | 	$id = intval(defaults($a->argv, 3, 0)); | ||||||
| 
 | 
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($_REQUEST["id"]); | 		$id = intval(defaults($_REQUEST, 'id', 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Hotot workaround
 | 	// Hotot workaround
 | ||||||
| 	if ($id == 0) { | 	if ($id == 0) { | ||||||
| 		$id = intval($a->argv[4]); | 		$id = intval(defaults($a->argv, 4, 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	logger('API: api_statuses_destroy: '.$id); | 	logger('API: api_statuses_destroy: '.$id); | ||||||
|  | @ -2205,7 +2211,7 @@ function api_favorites_create_destroy($type) | ||||||
| 	// for versioned api.
 | 	// for versioned api.
 | ||||||
| 	/// @TODO We need a better global soluton
 | 	/// @TODO We need a better global soluton
 | ||||||
| 	$action_argv_id = 2; | 	$action_argv_id = 2; | ||||||
| 	if ($a->argv[1] == "1.1") { | 	if (count($a->argv) > 1 && $a->argv[1] == "1.1") { | ||||||
| 		$action_argv_id = 3; | 		$action_argv_id = 3; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -2214,10 +2220,9 @@ function api_favorites_create_destroy($type) | ||||||
| 	} | 	} | ||||||
| 	$action = str_replace("." . $type, "", $a->argv[$action_argv_id]); | 	$action = str_replace("." . $type, "", $a->argv[$action_argv_id]); | ||||||
| 	if ($a->argc == $action_argv_id + 2) { | 	if ($a->argc == $action_argv_id + 2) { | ||||||
| 		$itemid = intval($a->argv[$action_argv_id + 1]); | 		$itemid = intval(defaults($a->argv, $action_argv_id + 1, 0)); | ||||||
| 	} else { | 	} else { | ||||||
| 		///  @TODO use x() to check if _REQUEST contains 'id'
 | 		$itemid = intval(defaults($_REQUEST, 'id', 0)); | ||||||
| 		$itemid = intval($_REQUEST['id']); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$item = Item::selectFirstForUser(api_user(), [], ['id' => $itemid, 'uid' => api_user()]); | 	$item = Item::selectFirstForUser(api_user(), [], ['id' => $itemid, 'uid' => api_user()]); | ||||||
|  | @ -2344,21 +2349,29 @@ function api_format_messages($item, $recipient, $sender) | ||||||
| 		'sender_id'             => $sender['id'] , | 		'sender_id'             => $sender['id'] , | ||||||
| 		'text'                  => "", | 		'text'                  => "", | ||||||
| 		'recipient_id'          => $recipient['id'], | 		'recipient_id'          => $recipient['id'], | ||||||
| 			'created_at'            => api_date($item['created']), | 		'created_at'            => api_date(defaults($item, 'created', DateTimeFormat::utcNow())), | ||||||
| 		'sender_screen_name'    => $sender['screen_name'], | 		'sender_screen_name'    => $sender['screen_name'], | ||||||
| 		'recipient_screen_name' => $recipient['screen_name'], | 		'recipient_screen_name' => $recipient['screen_name'], | ||||||
| 		'sender'                => $sender, | 		'sender'                => $sender, | ||||||
| 		'recipient'             => $recipient, | 		'recipient'             => $recipient, | ||||||
| 		'title'                 => "", | 		'title'                 => "", | ||||||
| 			'friendica_seen'        => $item['seen'], | 		'friendica_seen'        => defaults($item, 'seen', 0), | ||||||
| 			'friendica_parent_uri'  => $item['parent-uri'], | 		'friendica_parent_uri'  => defaults($item, 'parent-uri', ''), | ||||||
| 	]; | 	]; | ||||||
| 
 | 
 | ||||||
| 	// "uid" and "self" are only needed for some internal stuff, so remove it from here
 | 	// "uid" and "self" are only needed for some internal stuff, so remove it from here
 | ||||||
| 	unset($ret["sender"]["uid"]); | 	if (isset($ret['sender']['uid'])) { | ||||||
| 	unset($ret["sender"]["self"]); | 		unset($ret['sender']['uid']); | ||||||
| 	unset($ret["recipient"]["uid"]); | 	} | ||||||
| 	unset($ret["recipient"]["self"]); | 	if (isset($ret['sender']['self'])) { | ||||||
|  | 		unset($ret['sender']['self']); | ||||||
|  | 	} | ||||||
|  | 	if (isset($ret['recipient']['uid'])) { | ||||||
|  | 		unset($ret['recipient']['uid']); | ||||||
|  | 	} | ||||||
|  | 	if (isset($ret['recipient']['self'])) { | ||||||
|  | 		unset($ret['recipient']['self']); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	//don't send title to regular StatusNET requests to avoid confusing these apps
 | 	//don't send title to regular StatusNET requests to avoid confusing these apps
 | ||||||
| 	if (x($_GET, 'getText')) { | 	if (x($_GET, 'getText')) { | ||||||
|  | @ -2405,8 +2418,8 @@ function api_convert_item($item) | ||||||
| 		$statustext = trim($statustitle."\n\n".$statusbody); | 		$statustext = trim($statustitle."\n\n".$statusbody); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (($item["network"] == NETWORK_FEED) && (strlen($statustext)> 1000)) { | 	if ((defaults($item, 'network', Protocol::PHANTOM) == Protocol::FEED) && (strlen($statustext)> 1000)) { | ||||||
| 		$statustext = substr($statustext, 0, 1000)."... \n".$item["plink"]; | 		$statustext = substr($statustext, 0, 1000) . "... \n" . defaults($item, 'plink', ''); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$statushtml = BBCode::convert(api_clean_attachments($body), false); | 	$statushtml = BBCode::convert(api_clean_attachments($body), false); | ||||||
|  | @ -2440,7 +2453,7 @@ function api_convert_item($item) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// feeds without body should contain the link
 | 	// feeds without body should contain the link
 | ||||||
| 	if (($item['network'] == NETWORK_FEED) && (strlen($item['body']) == 0)) { | 	if ((defaults($item, 'network', Protocol::PHANTOM) == Protocol::FEED) && (strlen($item['body']) == 0)) { | ||||||
| 		$statushtml .= BBCode::convert($item['plink']); | 		$statushtml .= BBCode::convert($item['plink']); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -2482,7 +2495,7 @@ function api_get_attachments(&$body) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (strstr($_SERVER['HTTP_USER_AGENT'], "AndStatus")) { | 	if (strstr(defaults($_SERVER, 'HTTP_USER_AGENT', ''), "AndStatus")) { | ||||||
| 		foreach ($images[0] as $orig) { | 		foreach ($images[0] as $orig) { | ||||||
| 			$body = str_replace($orig, "", $body); | 			$body = str_replace($orig, "", $body); | ||||||
| 		} | 		} | ||||||
|  | @ -3324,18 +3337,15 @@ function api_statusnet_config($type) | ||||||
| { | { | ||||||
| 	$a = get_app(); | 	$a = get_app(); | ||||||
| 
 | 
 | ||||||
| 	$name = $a->config['sitename']; | 	$name      = Config::get('config', 'sitename'); | ||||||
| 	$server    = $a->get_hostname(); | 	$server    = $a->get_hostname(); | ||||||
| 	$logo      = System::baseUrl() . '/images/friendica-64.png'; | 	$logo      = System::baseUrl() . '/images/friendica-64.png'; | ||||||
| 	$email = $a->config['admin_email']; | 	$email     = Config::get('config', 'admin_email'); | ||||||
| 	$closed = (($a->config['register_policy'] == REGISTER_CLOSED) ? 'true' : 'false'); | 	$closed    = Config::get('config', 'register_policy') == REGISTER_CLOSED ? 'true' : 'false'; | ||||||
| 	$private = ((Config::get('system', 'block_public')) ? 'true' : 'false'); | 	$private   = Config::get('system', 'block_public') ? 'true' : 'false'; | ||||||
| 	$textlimit = (string) (($a->config['max_import_size']) ? $a->config['max_import_size'] : 200000); | 	$textlimit = (string) Config::get('config', 'api_import_size', Config::get('config', 'max_import_size', 200000)); | ||||||
| 	if ($a->config['api_import_size']) { | 	$ssl       = Config::get('system', 'have_ssl') ? 'true' : 'false'; | ||||||
| 		$textlimit = (string) $a->config['api_import_size']; | 	$sslserver = Config::get('system', 'have_ssl') ? str_replace('http:', 'https:', System::baseUrl()) : ''; | ||||||
| 	} |  | ||||||
| 	$ssl = ((Config::get('system', 'have_ssl')) ? 'true' : 'false'); |  | ||||||
| 	$sslserver = (($ssl === 'true') ? str_replace('http:', 'https:', System::baseUrl()) : ''); |  | ||||||
| 
 | 
 | ||||||
| 	$config = [ | 	$config = [ | ||||||
| 		'site' => ['name' => $name,'server' => $server, 'theme' => 'default', 'path' => '', | 		'site' => ['name' => $name,'server' => $server, 'theme' => 'default', 'path' => '', | ||||||
|  | @ -3457,34 +3467,40 @@ api_register_func('api/followers/ids', 'api_followers_ids', true); | ||||||
|  */ |  */ | ||||||
| function api_direct_messages_new($type) | function api_direct_messages_new($type) | ||||||
| { | { | ||||||
| 
 |  | ||||||
| 	$a = get_app(); | 	$a = get_app(); | ||||||
| 
 | 
 | ||||||
| 	if (api_user() === false) { | 	if (api_user() === false) { | ||||||
| 		throw new ForbiddenException(); | 		throw new ForbiddenException(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (!x($_POST, "text") || (!x($_POST, "screen_name") && !x($_POST, "user_id"))) { | 	if (empty($_POST["text"]) || empty($_POST["screen_name"]) && empty($_POST["user_id"])) { | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$sender = api_get_user($a); | 	$sender = api_get_user($a); | ||||||
| 
 | 
 | ||||||
| 	if ($_POST['screen_name']) { | 	$recipient = null; | ||||||
|  | 	if (!empty($_POST['screen_name'])) { | ||||||
| 		$r = q( | 		$r = q( | ||||||
| 			"SELECT `id`, `nurl`, `network` FROM `contact` WHERE `uid`=%d AND `nick`='%s'", | 			"SELECT `id`, `nurl`, `network` FROM `contact` WHERE `uid`=%d AND `nick`='%s'", | ||||||
| 			intval(api_user()), | 			intval(api_user()), | ||||||
| 			dbesc($_POST['screen_name']) | 			dbesc($_POST['screen_name']) | ||||||
| 		); | 		); | ||||||
| 
 | 
 | ||||||
|  | 		if (DBM::is_result($r)) { | ||||||
| 			// Selecting the id by priority, friendica first
 | 			// Selecting the id by priority, friendica first
 | ||||||
| 			api_best_nickname($r); | 			api_best_nickname($r); | ||||||
| 
 | 
 | ||||||
| 			$recipient = api_get_user($a, $r[0]['nurl']); | 			$recipient = api_get_user($a, $r[0]['nurl']); | ||||||
|  | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		$recipient = api_get_user($a, $_POST['user_id']); | 		$recipient = api_get_user($a, $_POST['user_id']); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if (empty($recipient)) { | ||||||
|  | 		throw new NotFoundException('Recipient not found'); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	$replyto = ''; | 	$replyto = ''; | ||||||
| 	$sub     = ''; | 	$sub     = ''; | ||||||
| 	if (x($_REQUEST, 'replyto')) { | 	if (x($_REQUEST, 'replyto')) { | ||||||
|  | @ -3622,17 +3638,17 @@ function api_direct_messages_box($type, $box, $verbose) | ||||||
| 		throw new ForbiddenException(); | 		throw new ForbiddenException(); | ||||||
| 	} | 	} | ||||||
| 	// params
 | 	// params
 | ||||||
| 	$count = (x($_GET, 'count') ? $_GET['count'] : 20); | 	$count = defaults($_GET, 'count', 20); | ||||||
| 	$page = (x($_REQUEST, 'page') ? $_REQUEST['page'] -1 : 0); | 	$page = defaults($_REQUEST, 'page', 1) - 1; | ||||||
| 	if ($page < 0) { | 	if ($page < 0) { | ||||||
| 		$page = 0; | 		$page = 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$since_id = (x($_REQUEST, 'since_id') ? $_REQUEST['since_id'] : 0); | 	$since_id = defaults($_REQUEST, 'since_id', 0); | ||||||
| 	$max_id = (x($_REQUEST, 'max_id') ? $_REQUEST['max_id'] : 0); | 	$max_id = defaults($_REQUEST, 'max_id', 0); | ||||||
| 
 | 
 | ||||||
| 	$user_id = (x($_REQUEST, 'user_id') ? $_REQUEST['user_id'] : ""); | 	$user_id = defaults($_REQUEST, 'user_id', ''); | ||||||
| 	$screen_name = (x($_REQUEST, 'screen_name') ? $_REQUEST['screen_name'] : ""); | 	$screen_name = defaults($_REQUEST, 'screen_name', ''); | ||||||
| 
 | 
 | ||||||
| 	//  caller user info
 | 	//  caller user info
 | ||||||
| 	unset($_REQUEST["user_id"]); | 	unset($_REQUEST["user_id"]); | ||||||
|  | @ -3656,7 +3672,7 @@ function api_direct_messages_box($type, $box, $verbose) | ||||||
| 	if ($box=="sentbox") { | 	if ($box=="sentbox") { | ||||||
| 		$sql_extra = "`mail`.`from-url`='" . dbesc($profile_url) . "'"; | 		$sql_extra = "`mail`.`from-url`='" . dbesc($profile_url) . "'"; | ||||||
| 	} elseif ($box == "conversation") { | 	} elseif ($box == "conversation") { | ||||||
| 		$sql_extra = "`mail`.`parent-uri`='" . dbesc($_GET["uri"])  . "'"; | 		$sql_extra = "`mail`.`parent-uri`='" . dbesc(defaults($_GET, 'uri', ''))  . "'"; | ||||||
| 	} elseif ($box == "all") { | 	} elseif ($box == "all") { | ||||||
| 		$sql_extra = "true"; | 		$sql_extra = "true"; | ||||||
| 	} elseif ($box == "inbox") { | 	} elseif ($box == "inbox") { | ||||||
|  | @ -5577,9 +5593,11 @@ function api_friendica_notification($type) | ||||||
| 
 | 
 | ||||||
| 	if ($type == "xml") { | 	if ($type == "xml") { | ||||||
| 		$xmlnotes = []; | 		$xmlnotes = []; | ||||||
|  | 		if (!empty($notes)) { | ||||||
| 			foreach ($notes as $note) { | 			foreach ($notes as $note) { | ||||||
| 				$xmlnotes[] = ["@attributes" => $note]; | 				$xmlnotes[] = ["@attributes" => $note]; | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		$notes = $xmlnotes; | 		$notes = $xmlnotes; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -1015,7 +1015,7 @@ class dba { | ||||||
| 		$commands = []; | 		$commands = []; | ||||||
| 
 | 
 | ||||||
| 		// Create a key for the loop prevention
 | 		// Create a key for the loop prevention
 | ||||||
| 		$key = $table . ':' . implode(':', array_keys($conditions)) . ':' . implode(':', $conditions); | 		$key = $table . ':' . json_encode($conditions); | ||||||
| 
 | 
 | ||||||
| 		// We quit when this key already exists in the callstack.
 | 		// We quit when this key already exists in the callstack.
 | ||||||
| 		if (isset($callstack[$key])) { | 		if (isset($callstack[$key])) { | ||||||
|  | @ -1042,7 +1042,7 @@ class dba { | ||||||
| 			$rel_def = array_values(self::$relation[$table])[0]; | 			$rel_def = array_values(self::$relation[$table])[0]; | ||||||
| 
 | 
 | ||||||
| 			// Create a key for preventing double queries
 | 			// Create a key for preventing double queries
 | ||||||
| 			$qkey = $field . '-' . $table . ':' . implode(':', array_keys($conditions)) . ':' . implode(':', $conditions); | 			$qkey = $field . '-' . $table . ':' . json_encode($conditions); | ||||||
| 
 | 
 | ||||||
| 			// When the search field is the relation field, we don't need to fetch the rows
 | 			// When the search field is the relation field, we don't need to fetch the rows
 | ||||||
| 			// This is useful when the leading record is already deleted in the frontend but the rest is done in the backend
 | 			// This is useful when the leading record is already deleted in the frontend but the rest is done in the backend
 | ||||||
|  |  | ||||||
|  | @ -41,7 +41,7 @@ function new_cookie($time, $user = []) | ||||||
| 	if ($user) { | 	if ($user) { | ||||||
| 		$value = json_encode(["uid" => $user["uid"], | 		$value = json_encode(["uid" => $user["uid"], | ||||||
| 			"hash" => cookie_hash($user), | 			"hash" => cookie_hash($user), | ||||||
| 			"ip" => $_SERVER['REMOTE_ADDR']]); | 			"ip" => defaults($_SERVER, 'REMOTE_ADDR', '0.0.0.0')]); | ||||||
| 	} else { | 	} else { | ||||||
| 		$value = ""; | 		$value = ""; | ||||||
| 	} | 	} | ||||||
|  | @ -70,7 +70,7 @@ function authenticate_success($user_record, $login_initial = false, $interactive | ||||||
| 	$_SESSION['page_flags'] = $user_record['page-flags']; | 	$_SESSION['page_flags'] = $user_record['page-flags']; | ||||||
| 	$_SESSION['my_url'] = System::baseUrl() . '/profile/' . $user_record['nickname']; | 	$_SESSION['my_url'] = System::baseUrl() . '/profile/' . $user_record['nickname']; | ||||||
| 	$_SESSION['my_address'] = $user_record['nickname'] . '@' . substr(System::baseUrl(), strpos(System::baseUrl(), '://') + 3); | 	$_SESSION['my_address'] = $user_record['nickname'] . '@' . substr(System::baseUrl(), strpos(System::baseUrl(), '://') + 3); | ||||||
| 	$_SESSION['addr'] = $_SERVER['REMOTE_ADDR']; | 	$_SESSION['addr'] = defaults($_SERVER, 'REMOTE_ADDR', '0.0.0.0'); | ||||||
| 
 | 
 | ||||||
| 	$a->user = $user_record; | 	$a->user = $user_record; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1156,7 +1156,7 @@ function put_item_in_cache(&$item, $update = false) | ||||||
| 	$rendered_html = defaults($item, 'rendered-html', ''); | 	$rendered_html = defaults($item, 'rendered-html', ''); | ||||||
| 
 | 
 | ||||||
| 	if ($rendered_hash == '' | 	if ($rendered_hash == '' | ||||||
| 		|| $item["rendered-html"] == "" | 		|| $rendered_html == "" | ||||||
| 		|| $rendered_hash != hash("md5", $item["body"]) | 		|| $rendered_hash != hash("md5", $item["body"]) | ||||||
| 		|| Config::get("system", "ignore_cache") | 		|| Config::get("system", "ignore_cache") | ||||||
| 	) { | 	) { | ||||||
|  | @ -1176,7 +1176,7 @@ function put_item_in_cache(&$item, $update = false) | ||||||
| 			$update = true; | 			$update = true; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if ($update && ($item["id"] > 0)) { | 		if ($update && !empty($item["id"])) { | ||||||
| 			Item::update(['rendered-html' => $item["rendered-html"], 'rendered-hash' => $item["rendered-hash"]], | 			Item::update(['rendered-html' => $item["rendered-html"], 'rendered-hash' => $item["rendered-hash"]], | ||||||
| 					['id' => $item["id"]]); | 					['id' => $item["id"]]); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								mod/item.php
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								mod/item.php
									
										
									
									
									
								
							|  | @ -178,6 +178,8 @@ function item_post(App $a) { | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	$categories = ''; | ||||||
|  | 
 | ||||||
| 	if ($orig_post) { | 	if ($orig_post) { | ||||||
| 		$str_group_allow   = $orig_post['allow_gid']; | 		$str_group_allow   = $orig_post['allow_gid']; | ||||||
| 		$str_contact_allow = $orig_post['allow_cid']; | 		$str_contact_allow = $orig_post['allow_cid']; | ||||||
|  | @ -223,12 +225,12 @@ function item_post(App $a) { | ||||||
| 			$str_contact_deny  = perms2str($_REQUEST['contact_deny']); | 			$str_contact_deny  = perms2str($_REQUEST['contact_deny']); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		$title             = notags(trim($_REQUEST['title'])); | 		$title             =      notags(trim(defaults($_REQUEST, 'title'   , ''))); | ||||||
| 		$location          = notags(trim($_REQUEST['location'])); | 		$location          =      notags(trim(defaults($_REQUEST, 'location', ''))); | ||||||
| 		$coord             = notags(trim($_REQUEST['coord'])); | 		$coord             =      notags(trim(defaults($_REQUEST, 'coord'   , ''))); | ||||||
| 		$verb              = notags(trim($_REQUEST['verb'])); | 		$verb              =      notags(trim(defaults($_REQUEST, 'verb'    , ''))); | ||||||
| 		$emailcc           = notags(trim($_REQUEST['emailcc'])); | 		$emailcc           =      notags(trim(defaults($_REQUEST, 'emailcc' , ''))); | ||||||
| 		$body              = escape_tags(trim($_REQUEST['body'])); | 		$body              = escape_tags(trim(defaults($_REQUEST, 'body'    , ''))); | ||||||
| 		$network           =      notags(trim(defaults($_REQUEST, 'network' , NETWORK_DFRN))); | 		$network           =      notags(trim(defaults($_REQUEST, 'network' , NETWORK_DFRN))); | ||||||
| 		$guid              = get_guid(32); | 		$guid              = get_guid(32); | ||||||
| 
 | 
 | ||||||
|  | @ -279,15 +281,15 @@ function item_post(App $a) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (strlen($categories)) { | 	if (!empty($categories)) { | ||||||
| 		// get the "fileas" tags for this post
 | 		// get the "fileas" tags for this post
 | ||||||
| 		$filedas = file_tag_file_to_list($categories, 'file'); | 		$filedas = file_tag_file_to_list($categories, 'file'); | ||||||
| 	} | 	} | ||||||
| 	// save old and new categories, so we can determine what needs to be deleted from pconfig
 | 	// save old and new categories, so we can determine what needs to be deleted from pconfig
 | ||||||
| 	$categories_old = $categories; | 	$categories_old = $categories; | ||||||
| 	$categories = file_tag_list_to_file(trim($_REQUEST['category']), 'category'); | 	$categories = file_tag_list_to_file(trim(defaults($_REQUEST, 'category', '')), 'category'); | ||||||
| 	$categories_new = $categories; | 	$categories_new = $categories; | ||||||
| 	if (strlen($filedas)) { | 	if (!empty($filedas)) { | ||||||
| 		// append the fileas stuff to the new categories list
 | 		// append the fileas stuff to the new categories list
 | ||||||
| 		$categories .= file_tag_list_to_file($filedas, 'file'); | 		$categories .= file_tag_list_to_file($filedas, 'file'); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -125,30 +125,38 @@ function wall_upload_post(App $a, $desktopmode = true) | ||||||
| 		$filetype = $_FILES['userfile']['type']; | 		$filetype = $_FILES['userfile']['type']; | ||||||
| 
 | 
 | ||||||
| 	} elseif (x($_FILES, 'media')) { | 	} elseif (x($_FILES, 'media')) { | ||||||
|  | 		if (!empty($_FILES['media']['tmp_name'])) { | ||||||
| 			if (is_array($_FILES['media']['tmp_name'])) { | 			if (is_array($_FILES['media']['tmp_name'])) { | ||||||
| 				$src = $_FILES['media']['tmp_name'][0]; | 				$src = $_FILES['media']['tmp_name'][0]; | ||||||
| 			} else { | 			} else { | ||||||
| 				$src = $_FILES['media']['tmp_name']; | 				$src = $_FILES['media']['tmp_name']; | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
|  | 		if (!empty($_FILES['media']['name'])) { | ||||||
| 			if (is_array($_FILES['media']['name'])) { | 			if (is_array($_FILES['media']['name'])) { | ||||||
| 				$filename = basename($_FILES['media']['name'][0]); | 				$filename = basename($_FILES['media']['name'][0]); | ||||||
| 			} else { | 			} else { | ||||||
| 				$filename = basename($_FILES['media']['name']); | 				$filename = basename($_FILES['media']['name']); | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
|  | 		if (!empty($_FILES['media']['size'])) { | ||||||
| 			if (is_array($_FILES['media']['size'])) { | 			if (is_array($_FILES['media']['size'])) { | ||||||
| 				$filesize = intval($_FILES['media']['size'][0]); | 				$filesize = intval($_FILES['media']['size'][0]); | ||||||
| 			} else { | 			} else { | ||||||
| 				$filesize = intval($_FILES['media']['size']); | 				$filesize = intval($_FILES['media']['size']); | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
|  | 		if (!empty($_FILES['media']['type'])) { | ||||||
| 			if (is_array($_FILES['media']['type'])) { | 			if (is_array($_FILES['media']['type'])) { | ||||||
| 				$filetype = $_FILES['media']['type'][0]; | 				$filetype = $_FILES['media']['type'][0]; | ||||||
| 			} else { | 			} else { | ||||||
| 				$filetype = $_FILES['media']['type']; | 				$filetype = $_FILES['media']['type']; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	if ($src == "") { | 	if ($src == "") { | ||||||
| 		if ($r_json) { | 		if ($r_json) { | ||||||
|  |  | ||||||
|  | @ -1,5 +1,7 @@ | ||||||
| <?xml version="1.0"?> | <?xml version="1.0"?> | ||||||
| <phpunit bootstrap="tests/bootstrap.php"> | <phpunit | ||||||
|  | 	bootstrap="tests/bootstrap.php" | ||||||
|  | 	verbose="true"> | ||||||
|     <testsuites> |     <testsuites> | ||||||
|         <testsuite> |         <testsuite> | ||||||
|             <directory>tests/</directory> |             <directory>tests/</directory> | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								src/App.php
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								src/App.php
									
										
									
									
									
								
							|  | @ -181,7 +181,10 @@ class App | ||||||
| 
 | 
 | ||||||
| 		$this->process_id = uniqid('log', true); | 		$this->process_id = uniqid('log', true); | ||||||
| 
 | 
 | ||||||
| 		startup(); | 		set_time_limit(0); | ||||||
|  | 
 | ||||||
|  | 		// This has to be quite large to deal with embedded private photos
 | ||||||
|  | 		ini_set('pcre.backtrack_limit', 500000); | ||||||
| 
 | 
 | ||||||
| 		$this->scheme = 'http'; | 		$this->scheme = 'http'; | ||||||
| 
 | 
 | ||||||
|  | @ -290,7 +293,7 @@ class App | ||||||
| 		$this->is_tablet = $mobile_detect->isTablet(); | 		$this->is_tablet = $mobile_detect->isTablet(); | ||||||
| 
 | 
 | ||||||
| 		// Friendica-Client
 | 		// Friendica-Client
 | ||||||
| 		$this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == 'Apache-HttpClient/UNAVAILABLE (java 1.4)'); | 		$this->is_friendica_app = isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] == 'Apache-HttpClient/UNAVAILABLE (java 1.4)'; | ||||||
| 
 | 
 | ||||||
| 		// Register template engines
 | 		// Register template engines
 | ||||||
| 		$this->register_template_engine('Friendica\Render\FriendicaSmartyEngine'); | 		$this->register_template_engine('Friendica\Render\FriendicaSmartyEngine'); | ||||||
|  | @ -863,7 +866,7 @@ class App | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		array_unshift($args, ((x($this->config, 'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php')); | 		array_unshift($args, $this->getConfigValue('config', 'php_path', 'php')); | ||||||
| 
 | 
 | ||||||
| 		for ($x = 0; $x < count($args); $x ++) { | 		for ($x = 0; $x < count($args); $x ++) { | ||||||
| 			$args[$x] = escapeshellarg($args[$x]); | 			$args[$x] = escapeshellarg($args[$x]); | ||||||
|  | @ -875,7 +878,7 @@ class App | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (Config::get('system', 'proc_windows')) { | 		if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { | ||||||
| 			$resource = proc_open('cmd /c start /b ' . $cmdline, [], $foo, $this->get_basepath()); | 			$resource = proc_open('cmd /c start /b ' . $cmdline, [], $foo, $this->get_basepath()); | ||||||
| 		} else { | 		} else { | ||||||
| 			$resource = proc_open($cmdline . ' &', [], $foo, $this->get_basepath()); | 			$resource = proc_open($cmdline . ' &', [], $foo, $this->get_basepath()); | ||||||
|  |  | ||||||
|  | @ -72,6 +72,7 @@ class System extends BaseObject | ||||||
| 				} | 				} | ||||||
| 			} elseif (!in_array($func['function'], $ignore)) { | 			} elseif (!in_array($func['function'], $ignore)) { | ||||||
| 				$callstack[] = $func['function']; | 				$callstack[] = $func['function']; | ||||||
|  | 				$func['class'] = ''; | ||||||
| 				$previous = $func; | 				$previous = $func; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -412,7 +412,7 @@ class DBStructure | ||||||
| 					$field_definition = $database[$name]["fields"][$fieldname]; | 					$field_definition = $database[$name]["fields"][$fieldname]; | ||||||
| 
 | 
 | ||||||
| 					// Define the default collation if not given
 | 					// Define the default collation if not given
 | ||||||
| 					if (!isset($parameters['Collation']) && !is_null($field_definition['Collation'])) { | 					if (!isset($parameters['Collation']) && !empty($field_definition['Collation'])) { | ||||||
| 						$parameters['Collation'] = 'utf8mb4_general_ci'; | 						$parameters['Collation'] = 'utf8mb4_general_ci'; | ||||||
| 					} else { | 					} else { | ||||||
| 						$parameters['Collation'] = null; | 						$parameters['Collation'] = null; | ||||||
|  | @ -536,26 +536,26 @@ class DBStructure | ||||||
| 	private static function FieldCommand($parameters, $create = true) { | 	private static function FieldCommand($parameters, $create = true) { | ||||||
| 		$fieldstruct = $parameters["type"]; | 		$fieldstruct = $parameters["type"]; | ||||||
| 
 | 
 | ||||||
| 		if (!is_null($parameters["Collation"])) { | 		if (!empty($parameters["Collation"])) { | ||||||
| 			$fieldstruct .= " COLLATE ".$parameters["Collation"]; | 			$fieldstruct .= " COLLATE ".$parameters["Collation"]; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if ($parameters["not null"]) { | 		if (!empty($parameters["not null"])) { | ||||||
| 			$fieldstruct .= " NOT NULL"; | 			$fieldstruct .= " NOT NULL"; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (isset($parameters["default"])) { | 		if (!empty($parameters["default"])) { | ||||||
| 			if (strpos(strtolower($parameters["type"]),"int")!==false) { | 			if (strpos(strtolower($parameters["type"]),"int")!==false) { | ||||||
| 				$fieldstruct .= " DEFAULT ".$parameters["default"]; | 				$fieldstruct .= " DEFAULT ".$parameters["default"]; | ||||||
| 			} else { | 			} else { | ||||||
| 				$fieldstruct .= " DEFAULT '".$parameters["default"]."'"; | 				$fieldstruct .= " DEFAULT '".$parameters["default"]."'"; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		if ($parameters["extra"] != "") { | 		if (!empty($parameters["extra"])) { | ||||||
| 			$fieldstruct .= " ".$parameters["extra"]; | 			$fieldstruct .= " ".$parameters["extra"]; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (!is_null($parameters["comment"])) { | 		if (!empty($parameters["comment"])) { | ||||||
| 			$fieldstruct .= " COMMENT '".dbesc($parameters["comment"])."'"; | 			$fieldstruct .= " COMMENT '".dbesc($parameters["comment"])."'"; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -579,7 +579,7 @@ class DBStructure | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (!is_null($structure["indexes"])) { | 		if (!empty($structure["indexes"])) { | ||||||
| 			foreach ($structure["indexes"] AS $indexname => $fieldnames) { | 			foreach ($structure["indexes"] AS $indexname => $fieldnames) { | ||||||
| 				$sql_index = self::createIndex($indexname, $fieldnames, ""); | 				$sql_index = self::createIndex($indexname, $fieldnames, ""); | ||||||
| 				if (!is_null($sql_index)) { | 				if (!is_null($sql_index)) { | ||||||
|  | @ -588,11 +588,11 @@ class DBStructure | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (!is_null($structure["engine"])) { | 		if (!empty($structure["engine"])) { | ||||||
| 			$engine = " ENGINE=" . $structure["engine"]; | 			$engine = " ENGINE=" . $structure["engine"]; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (!is_null($structure["comment"])) { | 		if (!empty($structure["comment"])) { | ||||||
| 			$comment = " COMMENT='" . dbesc($structure["comment"]) . "'"; | 			$comment = " COMMENT='" . dbesc($structure["comment"]) . "'"; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -61,7 +61,7 @@ class Conversation | ||||||
| 					unset($old_conv['source']); | 					unset($old_conv['source']); | ||||||
| 				} | 				} | ||||||
| 				// Update structure data all the time but the source only when its from a better protocol.
 | 				// Update structure data all the time but the source only when its from a better protocol.
 | ||||||
| 				if (($old_conv['protocol'] < $conversation['protocol']) && ($old_conv['protocol'] != 0)) { | 				if (isset($conversation['protocol']) && isset($conversation['source']) && ($old_conv['protocol'] < $conversation['protocol']) && ($old_conv['protocol'] != 0)) { | ||||||
| 					unset($conversation['protocol']); | 					unset($conversation['protocol']); | ||||||
| 					unset($conversation['source']); | 					unset($conversation['source']); | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|  | @ -809,8 +809,10 @@ class Item extends BaseObject | ||||||
| 		// If item has attachments, drop them
 | 		// If item has attachments, drop them
 | ||||||
| 		foreach (explode(", ", $item['attach']) as $attach) { | 		foreach (explode(", ", $item['attach']) as $attach) { | ||||||
| 			preg_match("|attach/(\d+)|", $attach, $matches); | 			preg_match("|attach/(\d+)|", $attach, $matches); | ||||||
|  | 			if (is_array($matches) && count($matches) > 1) { | ||||||
| 				dba::delete('attach', ['id' => $matches[1], 'uid' => $item['uid']]); | 				dba::delete('attach', ['id' => $matches[1], 'uid' => $item['uid']]); | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		// Delete tags that had been attached to other items
 | 		// Delete tags that had been attached to other items
 | ||||||
| 		self::deleteTagsFromItem($item); | 		self::deleteTagsFromItem($item); | ||||||
|  | @ -1997,7 +1999,7 @@ class Item extends BaseObject | ||||||
| 			Contact::unmarkForArchival($contact); | 			Contact::unmarkForArchival($contact); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		$update = (!$arr['private'] && (($arr["author-link"] === $arr["owner-link"]) || ($arr["parent-uri"] === $arr["uri"]))); | 		$update = (!$arr['private'] && ((defaults($arr, 'author-link', '') === defaults($arr, 'owner-link', '')) || ($arr["parent-uri"] === $arr["uri"]))); | ||||||
| 
 | 
 | ||||||
| 		// Is it a forum? Then we don't care about the rules from above
 | 		// Is it a forum? Then we don't care about the rules from above
 | ||||||
| 		if (!$update && ($arr["network"] == NETWORK_DFRN) && ($arr["parent-uri"] === $arr["uri"])) { | 		if (!$update && ($arr["network"] == NETWORK_DFRN) && ($arr["parent-uri"] === $arr["uri"])) { | ||||||
|  |  | ||||||
|  | @ -109,6 +109,7 @@ class Probe | ||||||
| 		$redirects = 0; | 		$redirects = 0; | ||||||
| 
 | 
 | ||||||
| 		logger("Probing for ".$host, LOGGER_DEBUG); | 		logger("Probing for ".$host, LOGGER_DEBUG); | ||||||
|  | 		$xrd = null; | ||||||
| 
 | 
 | ||||||
| 		$ret = Network::curl($ssl_url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); | 		$ret = Network::curl($ssl_url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); | ||||||
| 		if ($ret['success']) { | 		if ($ret['success']) { | ||||||
|  | @ -1510,6 +1511,7 @@ class Probe | ||||||
| 			return false; | 			return false; | ||||||
| 		} | 		} | ||||||
| 		$feed = $ret['body']; | 		$feed = $ret['body']; | ||||||
|  | 		$dummy1 = $dummy2 = $dummy3 = null; | ||||||
| 		$feed_data = Feed::import($feed, $dummy1, $dummy2, $dummy3, true); | 		$feed_data = Feed::import($feed, $dummy1, $dummy2, $dummy3, true); | ||||||
| 
 | 
 | ||||||
| 		if (!$feed_data) { | 		if (!$feed_data) { | ||||||
|  |  | ||||||
|  | @ -29,6 +29,10 @@ class ApiTest extends DatabaseTest | ||||||
| 		global $a; | 		global $a; | ||||||
| 		parent::setUp(); | 		parent::setUp(); | ||||||
| 
 | 
 | ||||||
|  | 		// Reusable App object
 | ||||||
|  | 		$this->app = new App(__DIR__.'/../'); | ||||||
|  | 		$a = $this->app; | ||||||
|  | 
 | ||||||
| 		// User data that the test database is populated with
 | 		// User data that the test database is populated with
 | ||||||
| 		$this->selfUser = [ | 		$this->selfUser = [ | ||||||
| 			'id' => 42, | 			'id' => 42, | ||||||
|  | @ -36,6 +40,12 @@ class ApiTest extends DatabaseTest | ||||||
| 			'nick' => 'selfcontact', | 			'nick' => 'selfcontact', | ||||||
| 			'nurl' => 'http://localhost/profile/selfcontact' | 			'nurl' => 'http://localhost/profile/selfcontact' | ||||||
| 		]; | 		]; | ||||||
|  | 		$this->friendUser = [ | ||||||
|  | 			'id' => 44, | ||||||
|  | 			'name' => 'Friend contact', | ||||||
|  | 			'nick' => 'friendcontact', | ||||||
|  | 			'nurl' => 'http://localhost/profile/friendcontact' | ||||||
|  | 		]; | ||||||
| 		$this->otherUser = [ | 		$this->otherUser = [ | ||||||
| 			'id' => 43, | 			'id' => 43, | ||||||
| 			'name' => 'othercontact', | 			'name' => 'othercontact', | ||||||
|  | @ -53,10 +63,6 @@ class ApiTest extends DatabaseTest | ||||||
| 			'uid' => $this->selfUser['id'] | 			'uid' => $this->selfUser['id'] | ||||||
| 		]; | 		]; | ||||||
| 
 | 
 | ||||||
| 		// Reusable App object
 |  | ||||||
| 		$this->app = new App(__DIR__.'/../'); |  | ||||||
| 		$a = $this->app; |  | ||||||
| 
 |  | ||||||
| 		// Default config
 | 		// Default config
 | ||||||
| 		Config::set('config', 'hostname', 'localhost'); | 		Config::set('config', 'hostname', 'localhost'); | ||||||
| 		Config::set('system', 'throttle_limit_day', 100); | 		Config::set('system', 'throttle_limit_day', 100); | ||||||
|  | @ -481,7 +487,7 @@ class ApiTest extends DatabaseTest | ||||||
| 
 | 
 | ||||||
| 		$this->app->query_string = 'api_path.rss'; | 		$this->app->query_string = 'api_path.rss'; | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL. | 			'<?xml version="1.0" encoding="UTF-8"?>'."\n". | ||||||
| 				'some_data', | 				'some_data', | ||||||
| 			api_call($this->app) | 			api_call($this->app) | ||||||
| 		); | 		); | ||||||
|  | @ -505,7 +511,7 @@ class ApiTest extends DatabaseTest | ||||||
| 
 | 
 | ||||||
| 		$this->app->query_string = 'api_path.atom'; | 		$this->app->query_string = 'api_path.atom'; | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL. | 			'<?xml version="1.0" encoding="UTF-8"?>'."\n". | ||||||
| 				'some_data', | 				'some_data', | ||||||
| 			api_call($this->app) | 			api_call($this->app) | ||||||
| 		); | 		); | ||||||
|  | @ -571,14 +577,14 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiErrorWithXml() | 	public function testApiErrorWithXml() | ||||||
| 	{ | 	{ | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0"?>'.PHP_EOL. | 			'<?xml version="1.0"?>'."\n". | ||||||
| 			'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | 			'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | ||||||
| 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | ||||||
| 				'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL. | 				'xmlns:georss="http://www.georss.org/georss">'."\n". | ||||||
| 			'  <error>error_message</error>'.PHP_EOL. | 			'  <error>error_message</error>'."\n". | ||||||
| 			'  <code>200 Friendica\Network\HTTP</code>'.PHP_EOL. | 			'  <code>200 Friendica\Network\HTTP</code>'."\n". | ||||||
| 			'  <request/>'.PHP_EOL. | 			'  <request/>'."\n". | ||||||
| 			'</status>'.PHP_EOL, | 			'</status>'."\n", | ||||||
| 			api_error('xml', new HTTPException('error_message')) | 			api_error('xml', new HTTPException('error_message')) | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
|  | @ -591,14 +597,14 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiErrorWithRss() | 	public function testApiErrorWithRss() | ||||||
| 	{ | 	{ | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0"?>'.PHP_EOL. | 			'<?xml version="1.0"?>'."\n". | ||||||
| 			'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | 			'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | ||||||
| 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | ||||||
| 				'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL. | 				'xmlns:georss="http://www.georss.org/georss">'."\n". | ||||||
| 			'  <error>error_message</error>'.PHP_EOL. | 			'  <error>error_message</error>'."\n". | ||||||
| 			'  <code>200 Friendica\Network\HTTP</code>'.PHP_EOL. | 			'  <code>200 Friendica\Network\HTTP</code>'."\n". | ||||||
| 			'  <request/>'.PHP_EOL. | 			'  <request/>'."\n". | ||||||
| 			'</status>'.PHP_EOL, | 			'</status>'."\n", | ||||||
| 			api_error('rss', new HTTPException('error_message')) | 			api_error('rss', new HTTPException('error_message')) | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
|  | @ -611,14 +617,14 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiErrorWithAtom() | 	public function testApiErrorWithAtom() | ||||||
| 	{ | 	{ | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0"?>'.PHP_EOL. | 			'<?xml version="1.0"?>'."\n". | ||||||
| 			'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | 			'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | ||||||
| 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | ||||||
| 				'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL. | 				'xmlns:georss="http://www.georss.org/georss">'."\n". | ||||||
| 			'  <error>error_message</error>'.PHP_EOL. | 			'  <error>error_message</error>'."\n". | ||||||
| 			'  <code>200 Friendica\Network\HTTP</code>'.PHP_EOL. | 			'  <code>200 Friendica\Network\HTTP</code>'."\n". | ||||||
| 			'  <request/>'.PHP_EOL. | 			'  <request/>'."\n". | ||||||
| 			'</status>'.PHP_EOL, | 			'</status>'."\n", | ||||||
| 			api_error('atom', new HTTPException('error_message')) | 			api_error('atom', new HTTPException('error_message')) | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
|  | @ -629,7 +635,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiRssExtra() | 	public function testApiRssExtra() | ||||||
| 	{ | 	{ | ||||||
| 		$user_info = ['url' => 'user_url']; | 		$user_info = ['url' => 'user_url', 'lang' => 'en']; | ||||||
| 		$result = api_rss_extra($this->app, [], $user_info); | 		$result = api_rss_extra($this->app, [], $user_info); | ||||||
| 		$this->assertEquals($user_info, $result['$user']); | 		$this->assertEquals($user_info, $result['$user']); | ||||||
| 		$this->assertEquals($user_info['url'], $result['$rss']['alternate']); | 		$this->assertEquals($user_info['url'], $result['$rss']['alternate']); | ||||||
|  | @ -818,7 +824,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiGetUserWithCalledApi() | 	public function testApiGetUserWithCalledApi() | ||||||
| 	{ | 	{ | ||||||
| 		global $called_api; | 		global $called_api; | ||||||
| 		$called_api = ['api_path']; | 		$called_api = ['api', 'api_path']; | ||||||
| 		$this->assertSelfUser(api_get_user($this->app)); | 		$this->assertSelfUser(api_get_user($this->app)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -853,7 +859,6 @@ class ApiTest extends DatabaseTest | ||||||
| 		$this->assertSelfUser(api_get_user($this->app, 0)); | 		$this->assertSelfUser(api_get_user($this->app, 0)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Test the api_item_get_user() function. | 	 * Test the api_item_get_user() function. | ||||||
| 	 * @return void | 	 * @return void | ||||||
|  | @ -957,12 +962,12 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiCreateXml() | 	public function testApiCreateXml() | ||||||
| 	{ | 	{ | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0"?>'.PHP_EOL. | 			'<?xml version="1.0"?>'."\n". | ||||||
| 			'<root_element xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | 			'<root_element xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | ||||||
| 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | ||||||
| 				'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL. | 				'xmlns:georss="http://www.georss.org/georss">'."\n". | ||||||
| 				'  <data>some_data</data>'.PHP_EOL. | 				'  <data>some_data</data>'."\n". | ||||||
| 			'</root_element>'.PHP_EOL, | 			'</root_element>'."\n", | ||||||
| 			api_create_xml(['data' => ['some_data']], 'root_element') | 			api_create_xml(['data' => ['some_data']], 'root_element') | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
|  | @ -974,10 +979,10 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiCreateXmlWithoutNamespaces() | 	public function testApiCreateXmlWithoutNamespaces() | ||||||
| 	{ | 	{ | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0"?>'.PHP_EOL. | 			'<?xml version="1.0"?>'."\n". | ||||||
| 			'<ok>'.PHP_EOL. | 			'<ok>'."\n". | ||||||
| 				'  <data>some_data</data>'.PHP_EOL. | 				'  <data>some_data</data>'."\n". | ||||||
| 			'</ok>'.PHP_EOL, | 			'</ok>'."\n", | ||||||
| 			api_create_xml(['data' => ['some_data']], 'ok') | 			api_create_xml(['data' => ['some_data']], 'ok') | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
|  | @ -999,12 +1004,12 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiFormatDataWithXml() | 	public function testApiFormatDataWithXml() | ||||||
| 	{ | 	{ | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'<?xml version="1.0"?>'.PHP_EOL. | 			'<?xml version="1.0"?>'."\n". | ||||||
| 			'<root_element xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | 			'<root_element xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '. | ||||||
| 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | 				'xmlns:friendica="http://friendi.ca/schema/api/1/" '. | ||||||
| 				'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL. | 				'xmlns:georss="http://www.georss.org/georss">'."\n". | ||||||
| 				'  <data>some_data</data>'.PHP_EOL. | 				'  <data>some_data</data>'."\n". | ||||||
| 			'</root_element>'.PHP_EOL, | 			'</root_element>'."\n", | ||||||
| 			api_format_data('root_element', 'xml', ['data' => ['some_data']]) | 			api_format_data('root_element', 'xml', ['data' => ['some_data']]) | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
|  | @ -1073,6 +1078,7 @@ class ApiTest extends DatabaseTest | ||||||
| 				'width' => 666, | 				'width' => 666, | ||||||
| 				'height' => 666, | 				'height' => 666, | ||||||
| 				'tmp_name' => $this->getTempImage(), | 				'tmp_name' => $this->getTempImage(), | ||||||
|  | 				'name' => 'spacer.png', | ||||||
| 				'type' => 'image/png' | 				'type' => 'image/png' | ||||||
| 			] | 			] | ||||||
| 		]; | 		]; | ||||||
|  | @ -1110,6 +1116,7 @@ class ApiTest extends DatabaseTest | ||||||
| 				'width' => 666, | 				'width' => 666, | ||||||
| 				'height' => 666, | 				'height' => 666, | ||||||
| 				'tmp_name' => $this->getTempImage(), | 				'tmp_name' => $this->getTempImage(), | ||||||
|  | 				'name' => 'spacer.png', | ||||||
| 				'type' => 'image/png' | 				'type' => 'image/png' | ||||||
| 			] | 			] | ||||||
| 		]; | 		]; | ||||||
|  | @ -1217,6 +1224,7 @@ class ApiTest extends DatabaseTest | ||||||
| 				'width' => 666, | 				'width' => 666, | ||||||
| 				'height' => 666, | 				'height' => 666, | ||||||
| 				'tmp_name' => $this->getTempImage(), | 				'tmp_name' => $this->getTempImage(), | ||||||
|  | 				'name' => 'spacer.png', | ||||||
| 				'type' => 'image/png' | 				'type' => 'image/png' | ||||||
| 			] | 			] | ||||||
| 		]; | 		]; | ||||||
|  | @ -1833,6 +1841,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFavoritesCreateDestroy() | 	public function testApiFavoritesCreateDestroy() | ||||||
| 	{ | 	{ | ||||||
|  | 		$this->app->argv = ['api', '1.1', 'favorites', 'create']; | ||||||
|  | 		$this->app->argc = count($this->app->argv); | ||||||
| 		api_favorites_create_destroy('json'); | 		api_favorites_create_destroy('json'); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1843,9 +1853,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFavoritesCreateDestroyWithInvalidId() | 	public function testApiFavoritesCreateDestroyWithInvalidId() | ||||||
| 	{ | 	{ | ||||||
| 		// This triggers a very specific condition ($action_argv_id + 2)
 | 		$this->app->argv = ['api', '1.1', 'favorites', 'create', '12.json']; | ||||||
| 		$this->app->argv[1] = '1.1'; | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$this->app->argc = 5; |  | ||||||
| 		api_favorites_create_destroy('json'); | 		api_favorites_create_destroy('json'); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1856,8 +1865,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFavoritesCreateDestroyWithInvalidAction() | 	public function testApiFavoritesCreateDestroyWithInvalidAction() | ||||||
| 	{ | 	{ | ||||||
| 		$this->app->argv[1] = '1.1'; | 		$this->app->argv = ['api', '1.1', 'favorites', 'change.json']; | ||||||
| 		$this->app->argc = 10; | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$_REQUEST['id'] = 1; | 		$_REQUEST['id'] = 1; | ||||||
| 		api_favorites_create_destroy('json'); | 		api_favorites_create_destroy('json'); | ||||||
| 	} | 	} | ||||||
|  | @ -1868,9 +1877,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFavoritesCreateDestroyWithCreateAction() | 	public function testApiFavoritesCreateDestroyWithCreateAction() | ||||||
| 	{ | 	{ | ||||||
| 		$this->app->argv[1] = '1.1'; | 		$this->app->argv = ['api', '1.1', 'favorites', 'create.json']; | ||||||
| 		$this->app->argv[3] = 'create'; | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$this->app->argc = 10; |  | ||||||
| 		$_REQUEST['id'] = 3; | 		$_REQUEST['id'] = 3; | ||||||
| 		$result = api_favorites_create_destroy('json'); | 		$result = api_favorites_create_destroy('json'); | ||||||
| 		$this->assertStatus($result['status']); | 		$this->assertStatus($result['status']); | ||||||
|  | @ -1882,9 +1890,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFavoritesCreateDestroyWithCreateActionAndRss() | 	public function testApiFavoritesCreateDestroyWithCreateActionAndRss() | ||||||
| 	{ | 	{ | ||||||
| 		$this->app->argv[1] = '1.1'; | 		$this->app->argv = ['api', '1.1', 'favorites', 'create.rss']; | ||||||
| 		$this->app->argv[3] = 'create'; | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$this->app->argc = 10; |  | ||||||
| 		$_REQUEST['id'] = 3; | 		$_REQUEST['id'] = 3; | ||||||
| 		$result = api_favorites_create_destroy('rss'); | 		$result = api_favorites_create_destroy('rss'); | ||||||
| 		$this->assertXml($result, 'status'); | 		$this->assertXml($result, 'status'); | ||||||
|  | @ -1896,9 +1903,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFavoritesCreateDestroyWithDestroyAction() | 	public function testApiFavoritesCreateDestroyWithDestroyAction() | ||||||
| 	{ | 	{ | ||||||
| 		$this->app->argv[1] = '1.1'; | 		$this->app->argv = ['api', '1.1', 'favorites', 'destroy.json']; | ||||||
| 		$this->app->argv[3] = 'destroy'; | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$this->app->argc = 10; |  | ||||||
| 		$_REQUEST['id'] = 3; | 		$_REQUEST['id'] = 3; | ||||||
| 		$result = api_favorites_create_destroy('json'); | 		$result = api_favorites_create_destroy('json'); | ||||||
| 		$this->assertStatus($result['status']); | 		$this->assertStatus($result['status']); | ||||||
|  | @ -1911,6 +1917,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFavoritesCreateDestroyWithoutAuthenticatedUser() | 	public function testApiFavoritesCreateDestroyWithoutAuthenticatedUser() | ||||||
| 	{ | 	{ | ||||||
|  | 		$this->app->argv = ['api', '1.1', 'favorites', 'create.json']; | ||||||
|  | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$_SESSION['authenticated'] = false; | 		$_SESSION['authenticated'] = false; | ||||||
| 		api_favorites_create_destroy('json'); | 		api_favorites_create_destroy('json'); | ||||||
| 	} | 	} | ||||||
|  | @ -1962,7 +1970,7 @@ class ApiTest extends DatabaseTest | ||||||
| 			['id' => 2, 'screen_name' => 'recipient_name'], | 			['id' => 2, 'screen_name' => 'recipient_name'], | ||||||
| 			['id' => 3, 'screen_name' => 'sender_name'] | 			['id' => 3, 'screen_name' => 'sender_name'] | ||||||
| 		); | 		); | ||||||
| 		$this->assertEquals('item_title'.PHP_EOL.'item_body', $result['text']); | 		$this->assertEquals('item_title'."\n".'item_body', $result['text']); | ||||||
| 		$this->assertEquals(1, $result['id']); | 		$this->assertEquals(1, $result['id']); | ||||||
| 		$this->assertEquals(2, $result['recipient_id']); | 		$this->assertEquals(2, $result['recipient_id']); | ||||||
| 		$this->assertEquals(3, $result['sender_id']); | 		$this->assertEquals(3, $result['sender_id']); | ||||||
|  | @ -2014,8 +2022,8 @@ class ApiTest extends DatabaseTest | ||||||
| 			['id' => 2, 'screen_name' => 'recipient_name'], | 			['id' => 2, 'screen_name' => 'recipient_name'], | ||||||
| 			['id' => 3, 'screen_name' => 'sender_name'] | 			['id' => 3, 'screen_name' => 'sender_name'] | ||||||
| 		); | 		); | ||||||
| 		$this->assertNull($result['sender']); | 		$this->assertTrue(!isset($result['sender'])); | ||||||
| 		$this->assertNull($result['recipient']); | 		$this->assertTrue(!isset($result['recipient'])); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
|  | @ -2051,7 +2059,8 @@ class ApiTest extends DatabaseTest | ||||||
| 				'repellat officia illum quos impedit quam iste esse unde qui '. | 				'repellat officia illum quos impedit quam iste esse unde qui '. | ||||||
| 				'suscipit aut facilis ut inventore omnis exercitationem quo magnam '. | 				'suscipit aut facilis ut inventore omnis exercitationem quo magnam '. | ||||||
| 				'consequatur maxime aut illum soluta quaerat natus unde aspernatur '. | 				'consequatur maxime aut illum soluta quaerat natus unde aspernatur '. | ||||||
| 				'et sed beatae nihil ullam temporibus corporis ratione blanditiis' | 				'et sed beatae nihil ullam temporibus corporis ratione blanditiis', | ||||||
|  | 				'plink' => 'item_plink' | ||||||
| 			] | 			] | ||||||
| 		); | 		); | ||||||
| 		$this->assertStringStartsWith('item_title', $result['text']); | 		$this->assertStringStartsWith('item_title', $result['text']); | ||||||
|  | @ -2108,7 +2117,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiGetAttachmentsWithImage() | 	public function testApiGetAttachmentsWithImage() | ||||||
| 	{ | 	{ | ||||||
| 		$body = '[img]img_url[/img]'; | 		$body = '[img]http://via.placeholder.com/1x1.png[/img]'; | ||||||
| 		$this->assertInternalType('array', api_get_attachments($body)); | 		$this->assertInternalType('array', api_get_attachments($body)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -2119,7 +2128,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiGetAttachmentsWithImageAndAndStatus() | 	public function testApiGetAttachmentsWithImageAndAndStatus() | ||||||
| 	{ | 	{ | ||||||
| 		$_SERVER['HTTP_USER_AGENT'] = 'AndStatus'; | 		$_SERVER['HTTP_USER_AGENT'] = 'AndStatus'; | ||||||
| 		$body = '[img]img_url[/img]'; | 		$body = '[img]http://via.placeholder.com/1x1.png[/img]'; | ||||||
| 		$this->assertInternalType('array', api_get_attachments($body)); | 		$this->assertInternalType('array', api_get_attachments($body)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -2155,7 +2164,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiFormatItemsEmbededImages() | 	public function testApiFormatItemsEmbededImages() | ||||||
| 	{ | 	{ | ||||||
| 		$this->assertEquals( | 		$this->assertEquals( | ||||||
| 			'text http://localhost/display/item_guid', | 			'text ' . \Friendica\Core\System::baseUrl() . '/display/item_guid', | ||||||
| 			api_format_items_embeded_images(['guid' => 'item_guid'], 'text data:image/foo') | 			api_format_items_embeded_images(['guid' => 'item_guid'], 'text data:image/foo') | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
|  | @ -2196,7 +2205,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFormatItemsActivities() | 	public function testApiFormatItemsActivities() | ||||||
| 	{ | 	{ | ||||||
| 		$item = []; | 		$item = ['uid' => 0, 'uri' => '']; | ||||||
| 		$result = api_format_items_activities($item); | 		$result = api_format_items_activities($item); | ||||||
| 		$this->assertArrayHasKey('like', $result); | 		$this->assertArrayHasKey('like', $result); | ||||||
| 		$this->assertArrayHasKey('dislike', $result); | 		$this->assertArrayHasKey('dislike', $result); | ||||||
|  | @ -2211,7 +2220,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFormatItemsActivitiesWithXml() | 	public function testApiFormatItemsActivitiesWithXml() | ||||||
| 	{ | 	{ | ||||||
| 		$item = []; | 		$item = ['uid' => 0, 'uri' => '']; | ||||||
| 		$result = api_format_items_activities($item, 'xml'); | 		$result = api_format_items_activities($item, 'xml'); | ||||||
| 		$this->assertArrayHasKey('friendica:like', $result); | 		$this->assertArrayHasKey('friendica:like', $result); | ||||||
| 		$this->assertArrayHasKey('friendica:dislike', $result); | 		$this->assertArrayHasKey('friendica:dislike', $result); | ||||||
|  | @ -2325,10 +2334,16 @@ class ApiTest extends DatabaseTest | ||||||
| 			[ | 			[ | ||||||
| 				'item_network' => 'item_network', | 				'item_network' => 'item_network', | ||||||
| 				'source' => 'web', | 				'source' => 'web', | ||||||
| 				'coord' => '5 7' | 				'coord' => '5 7', | ||||||
|  | 				'body' => '', | ||||||
|  | 				'verb' => '', | ||||||
|  | 				'author-id' => 43, | ||||||
|  | 				'author-network' => \Friendica\Core\Protocol::DFRN, | ||||||
|  | 				'author-link' => 'http://localhost/profile/othercontact', | ||||||
|  | 				'plink' => '', | ||||||
| 			] | 			] | ||||||
| 		]; | 		]; | ||||||
| 		$result = api_format_items($items, [], true); | 		$result = api_format_items($items, ['id' => 0], true); | ||||||
| 		foreach ($result as $status) { | 		foreach ($result as $status) { | ||||||
| 			$this->assertStatus($status); | 			$this->assertStatus($status); | ||||||
| 		} | 		} | ||||||
|  | @ -2342,10 +2357,16 @@ class ApiTest extends DatabaseTest | ||||||
| 	{ | 	{ | ||||||
| 		$items = [ | 		$items = [ | ||||||
| 			[ | 			[ | ||||||
| 				'coord' => '5 7' | 				'coord' => '5 7', | ||||||
|  | 				'body' => '', | ||||||
|  | 				'verb' => '', | ||||||
|  | 				'author-id' => 43, | ||||||
|  | 				'author-network' => \Friendica\Core\Protocol::DFRN, | ||||||
|  | 				'author-link' => 'http://localhost/profile/othercontact', | ||||||
|  | 				'plink' => '', | ||||||
| 			] | 			] | ||||||
| 		]; | 		]; | ||||||
| 		$result = api_format_items($items, [], true, 'xml'); | 		$result = api_format_items($items, ['id' => 0], true, 'xml'); | ||||||
| 		foreach ($result as $status) { | 		foreach ($result as $status) { | ||||||
| 			$this->assertStatus($status); | 			$this->assertStatus($status); | ||||||
| 		} | 		} | ||||||
|  | @ -2389,7 +2410,6 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiHelpTestWithXml() | 	public function testApiHelpTestWithXml() | ||||||
| 	{ | 	{ | ||||||
| 		$this->markTestIncomplete('Triggers this error: "key() expects parameter 1 to be array, string given"'); |  | ||||||
| 		$result = api_help_test('xml'); | 		$result = api_help_test('xml'); | ||||||
| 		$this->assertXml($result, 'ok'); | 		$this->assertXml($result, 'ok'); | ||||||
| 	} | 	} | ||||||
|  | @ -2615,7 +2635,7 @@ class ApiTest extends DatabaseTest | ||||||
| 		$result = api_statusnet_config('json'); | 		$result = api_statusnet_config('json'); | ||||||
| 		$this->assertEquals('localhost', $result['config']['site']['server']); | 		$this->assertEquals('localhost', $result['config']['site']['server']); | ||||||
| 		$this->assertEquals('default', $result['config']['site']['theme']); | 		$this->assertEquals('default', $result['config']['site']['theme']); | ||||||
| 		$this->assertEquals('http://localhost/images/friendica-64.png', $result['config']['site']['logo']); | 		$this->assertEquals(\Friendica\Core\System::baseUrl() . '/images/friendica-64.png', $result['config']['site']['logo']); | ||||||
| 		$this->assertTrue($result['config']['site']['fancy']); | 		$this->assertTrue($result['config']['site']['fancy']); | ||||||
| 		$this->assertEquals('en', $result['config']['site']['language']); | 		$this->assertEquals('en', $result['config']['site']['language']); | ||||||
| 		$this->assertEquals('UTC', $result['config']['site']['timezone']); | 		$this->assertEquals('UTC', $result['config']['site']['timezone']); | ||||||
|  | @ -2725,7 +2745,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiDirectMessagesNewWithScreenName() | 	public function testApiDirectMessagesNewWithScreenName() | ||||||
| 	{ | 	{ | ||||||
| 		$_POST['text'] = 'message_text'; | 		$_POST['text'] = 'message_text'; | ||||||
| 		$_POST['screen_name'] = $this->otherUser['nick']; | 		$_POST['screen_name'] = $this->friendUser['nick']; | ||||||
| 		$result = api_direct_messages_new('json'); | 		$result = api_direct_messages_new('json'); | ||||||
| 		$this->assertEquals(1, $result['direct_message']['id']); | 		$this->assertEquals(1, $result['direct_message']['id']); | ||||||
| 		$this->assertContains('message_text', $result['direct_message']['text']); | 		$this->assertContains('message_text', $result['direct_message']['text']); | ||||||
|  | @ -2740,7 +2760,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiDirectMessagesNewWithTitle() | 	public function testApiDirectMessagesNewWithTitle() | ||||||
| 	{ | 	{ | ||||||
| 		$_POST['text'] = 'message_text'; | 		$_POST['text'] = 'message_text'; | ||||||
| 		$_POST['screen_name'] = $this->otherUser['nick']; | 		$_POST['screen_name'] = $this->friendUser['nick']; | ||||||
| 		$_REQUEST['title'] = 'message_title'; | 		$_REQUEST['title'] = 'message_title'; | ||||||
| 		$result = api_direct_messages_new('json'); | 		$result = api_direct_messages_new('json'); | ||||||
| 		$this->assertEquals(1, $result['direct_message']['id']); | 		$this->assertEquals(1, $result['direct_message']['id']); | ||||||
|  | @ -2757,7 +2777,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	public function testApiDirectMessagesNewWithRss() | 	public function testApiDirectMessagesNewWithRss() | ||||||
| 	{ | 	{ | ||||||
| 		$_POST['text'] = 'message_text'; | 		$_POST['text'] = 'message_text'; | ||||||
| 		$_POST['screen_name'] = $this->otherUser['nick']; | 		$_POST['screen_name'] = $this->friendUser['nick']; | ||||||
| 		$result = api_direct_messages_new('rss'); | 		$result = api_direct_messages_new('rss'); | ||||||
| 		$this->assertXml($result, 'direct-messages'); | 		$this->assertXml($result, 'direct-messages'); | ||||||
| 	} | 	} | ||||||
|  | @ -3357,7 +3377,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiShareAsRetweet() | 	public function testApiShareAsRetweet() | ||||||
| 	{ | 	{ | ||||||
| 		$item = []; | 		$item = ['body' => '']; | ||||||
| 		$result = api_share_as_retweet($item); | 		$result = api_share_as_retweet($item); | ||||||
| 		$this->assertFalse($result); | 		$this->assertFalse($result); | ||||||
| 	} | 	} | ||||||
|  | @ -3397,7 +3417,7 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiInReplyTo() | 	public function testApiInReplyTo() | ||||||
| 	{ | 	{ | ||||||
| 		$result = api_in_reply_to([]); | 		$result = api_in_reply_to(['id' => 0, 'parent' => 0, 'uri' => '', 'thr-parent' => '']); | ||||||
| 		$this->assertArrayHasKey('status_id', $result); | 		$this->assertArrayHasKey('status_id', $result); | ||||||
| 		$this->assertArrayHasKey('user_id', $result); | 		$this->assertArrayHasKey('user_id', $result); | ||||||
| 		$this->assertArrayHasKey('status_id_str', $result); | 		$this->assertArrayHasKey('status_id_str', $result); | ||||||
|  | @ -3562,7 +3582,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFriendicaNotificationWithArgumentCount() | 	public function testApiFriendicaNotificationWithArgumentCount() | ||||||
| 	{ | 	{ | ||||||
| 		$this->app->argc = 3; | 		$this->app->argv = ['api', 'friendica', 'notification']; | ||||||
|  | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$result = api_friendica_notification('json'); | 		$result = api_friendica_notification('json'); | ||||||
| 		$this->assertEquals(['note' => false], $result); | 		$this->assertEquals(['note' => false], $result); | ||||||
| 	} | 	} | ||||||
|  | @ -3573,8 +3594,8 @@ class ApiTest extends DatabaseTest | ||||||
| 	 */ | 	 */ | ||||||
| 	public function testApiFriendicaNotificationWithXmlResult() | 	public function testApiFriendicaNotificationWithXmlResult() | ||||||
| 	{ | 	{ | ||||||
| 		$this->markTestIncomplete('Fails with "Invalid argument supplied for foreach()".'); | 		$this->app->argv = ['api', 'friendica', 'notification']; | ||||||
| 		$this->app->argc = 3; | 		$this->app->argc = count($this->app->argv); | ||||||
| 		$result = api_friendica_notification('xml'); | 		$result = api_friendica_notification('xml'); | ||||||
| 		$this->assertXml($result, 'notes'); | 		$this->assertXml($result, 'notes'); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -20,6 +20,54 @@ abstract class DatabaseTest extends TestCase | ||||||
| 
 | 
 | ||||||
| 	use TestCaseTrait; | 	use TestCaseTrait; | ||||||
| 
 | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renames an eventually existing .htconfig.php to .htconfig.php.tmp | ||||||
|  | 	 * Creates a new .htconfig.php for bin/worker.php execution | ||||||
|  | 	 */ | ||||||
|  | 	public static function setUpBeforeClass() | ||||||
|  | 	{ | ||||||
|  | 		parent::setUpBeforeClass(); | ||||||
|  | 
 | ||||||
|  | 		$base_config_file_name = 'htconfig.php'; | ||||||
|  | 		$config_file_name = '.htconfig.php'; | ||||||
|  | 
 | ||||||
|  | 		$base_config_file_path = stream_resolve_include_path($base_config_file_name); | ||||||
|  | 		$config_file_path = dirname($base_config_file_path) . DIRECTORY_SEPARATOR . $config_file_name; | ||||||
|  | 		$config_file_path_tmp = $config_file_path . '.tmp'; | ||||||
|  | 
 | ||||||
|  | 		if (file_exists($config_file_path)) { | ||||||
|  | 			rename($config_file_path, $config_file_path_tmp); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		$config_string = file_get_contents($base_config_file_path); | ||||||
|  | 
 | ||||||
|  | 		$config_string = str_replace('die(', '// die(', $config_string); | ||||||
|  | 
 | ||||||
|  | 		file_put_contents($config_file_path, $config_string); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Delete the created .htconfig.php | ||||||
|  | 	 * Renames an eventually existing .htconfig.php.tmp to .htconfig.php | ||||||
|  | 	 */ | ||||||
|  | 	public static function tearDownAfterClass() | ||||||
|  | 	{ | ||||||
|  | 		$base_config_file_name = 'htconfig.php'; | ||||||
|  | 		$config_file_name = '.htconfig.php'; | ||||||
|  | 
 | ||||||
|  | 		$base_config_file_path = stream_resolve_include_path($base_config_file_name); | ||||||
|  | 		$config_file_path = dirname($base_config_file_path) . DIRECTORY_SEPARATOR . $config_file_name; | ||||||
|  | 		$config_file_path_tmp = $config_file_path . '.tmp'; | ||||||
|  | 
 | ||||||
|  | 		if (file_exists($config_file_path)) { | ||||||
|  | 			unlink($config_file_path); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (file_exists($config_file_path_tmp)) { | ||||||
|  | 			rename($config_file_path_tmp, $config_file_path); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * Get database connection. | 	 * Get database connection. | ||||||
| 	 * | 	 * | ||||||
|  | @ -34,21 +82,23 @@ abstract class DatabaseTest extends TestCase | ||||||
| 	protected function getConnection() | 	protected function getConnection() | ||||||
| 	{ | 	{ | ||||||
| 		if (!dba::$connected) { | 		if (!dba::$connected) { | ||||||
| 			dba::connect('localhost', getenv('USER'), getenv('PASS'), getenv('DB')); | 			dba::connect(getenv('MYSQL_HOST') . ':' . getenv('MYSQL_PORT'), getenv('MYSQL_USERNAME'), getenv('MYSQL_PASSWORD'), getenv('MYSQL_DATABASE')); | ||||||
| 
 | 
 | ||||||
| 			if (dba::$connected) { | 			if (dba::$connected) { | ||||||
| 				$app = get_app(); | 				$app = get_app(); | ||||||
| 				// We need to do this in order to disable logging
 | 				// We need to do this in order to disable logging
 | ||||||
| 				$app->module = 'install'; | 				$app->mode = \Friendica\App::MODE_INSTALL; | ||||||
| 
 | 
 | ||||||
| 				// Create database structure
 | 				// Create database structure
 | ||||||
| 				DBStructure::update(false, true, true); | 				DBStructure::update(false, true, true); | ||||||
|  | 
 | ||||||
|  | 				$app->mode = \Friendica\App::MODE_NORMAL; | ||||||
| 			} else { | 			} else { | ||||||
| 				$this->markTestSkipped('Could not connect to the database.'); | 				$this->markTestSkipped('Could not connect to the database. Please check the MYSQL_* environment variables.'); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		return $this->createDefaultDBConnection(dba::get_db(), getenv('DB')); | 		return $this->createDefaultDBConnection(dba::get_db(), getenv('MYSQL_DATABASE')); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
|  |  | ||||||
|  | @ -48,7 +48,7 @@ contact: | ||||||
|         network: dfrn |         network: dfrn | ||||||
|     - |     - | ||||||
|         id: 44 |         id: 44 | ||||||
|         uid: 0 |         uid: 42 | ||||||
|         name: Friend contact |         name: Friend contact | ||||||
|         nick: friendcontact |         nick: friendcontact | ||||||
|         self: 0 |         self: 0 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue