X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fapi.php;h=a7d8ab3ca3a3af8fec7c6b19190f3b41c21473f4;hb=c69fa859c468bb881530abfa0ce8f78d43f68a89;hp=da7a83f51c421e5401e287f96dad7f3dd20a56a8;hpb=b3e6a1d2832be024819328e51e9e1df4c25b560f;p=friendica.git diff --git a/include/api.php b/include/api.php index da7a83f51c..a7d8ab3ca3 100644 --- a/include/api.php +++ b/include/api.php @@ -5,17 +5,22 @@ * @file include/api.php * @todo Automatically detect if incoming data is HTML or BBCode */ + use Friendica\App; use Friendica\Content\ContactSelector; use Friendica\Content\Feature; -use Friendica\Core\System; +use Friendica\Content\Text\BBCode; +use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\NotificationsManager; use Friendica\Core\PConfig; +use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Model\Contact; use Friendica\Model\Group; +use Friendica\Model\Item; use Friendica\Model\Mail; use Friendica\Model\Photo; use Friendica\Model\User; @@ -27,14 +32,14 @@ use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Network\HTTPException\MethodNotAllowedException; use Friendica\Network\HTTPException\NotFoundException; use Friendica\Network\HTTPException\NotImplementedException; -use Friendica\Network\HTTPException\UnauthorizedException; use Friendica\Network\HTTPException\TooManyRequestsException; +use Friendica\Network\HTTPException\UnauthorizedException; use Friendica\Object\Image; use Friendica\Protocol\Diaspora; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; use Friendica\Util\XML; -require_once 'include/bbcode.php'; -require_once 'include/datetime.php'; require_once 'include/conversation.php'; require_once 'include/html2plain.php'; require_once 'mod/share.php'; @@ -43,15 +48,13 @@ require_once 'include/security.php'; require_once 'include/html2bbcode.php'; require_once 'mod/wall_upload.php'; require_once 'mod/proxy.php'; -require_once 'include/like.php'; -require_once 'include/plaintext.php'; define('API_METHOD_ANY', '*'); define('API_METHOD_GET', 'GET'); define('API_METHOD_POST', 'POST,PUT'); define('API_METHOD_DELETE', 'POST,DELETE'); -$API = array(); +$API = []; $called_api = null; /** @@ -106,7 +109,7 @@ function api_source() function api_date($str) { // Wed May 23 06:01:13 +0000 2007 - return datetime_convert('UTC', 'UTC', $str, "D M d H:i:s +0000 Y"); + return DateTimeFormat::utc($str, "D M d H:i:s +0000 Y"); } /** @@ -125,20 +128,20 @@ function api_register_func($path, $func, $auth = false, $method = API_METHOD_ANY { global $API; - $API[$path] = array( + $API[$path] = [ 'func' => $func, 'auth' => $auth, 'method' => $method, - ); + ]; // Workaround for hotot $path = str_replace("api/", "api/1.1/", $path); - $API[$path] = array( + $API[$path] = [ 'func' => $func, 'auth' => $auth, 'method' => $method, - ); + ]; } /** @@ -165,7 +168,7 @@ function api_login(App $a) list($consumer, $token) = $oauth1->verify_request(OAuthRequest::from_request()); if (!is_null($token)) { $oauth1->loginUser($token->uid); - call_hooks('logged_in', $a->user); + Addon::callHooks('logged_in', $a->user); return; } echo __FILE__.__LINE__.__FUNCTION__ . "
";
@@ -203,19 +206,19 @@ function api_login(App $a)
 	// next code from mod/auth.php. needs better solution
 	$record = null;
 
-	$addon_auth = array(
+	$addon_auth = [
 		'username' => trim($user),
 		'password' => trim($password),
 		'authenticated' => 0,
 		'user_record' => null,
-	);
+	];
 
 	/*
-		* A plugin indicates successful login by setting 'authenticated' to non-zero value and returning a user record
-		* Plugins should never set 'authenticated' except to indicate success - as hooks may be chained
-		* and later plugins should not interfere with an earlier one that succeeded.
-		*/
-	call_hooks('authenticate', $addon_auth);
+	* An addon indicates successful login by setting 'authenticated' to non-zero value and returning a user record
+	* Addons should never set 'authenticated' except to indicate success - as hooks may be chained
+	* and later addons should not interfere with an earlier one that succeeded.
+	*/
+	Addon::callHooks('authenticate', $addon_auth);
 
 	if ($addon_auth['authenticated'] && count($addon_auth['user_record'])) {
 		$record = $addon_auth['user_record'];
@@ -238,7 +241,7 @@ function api_login(App $a)
 
 	$_SESSION["allow_api"] = true;
 
-	call_hooks('logged_in', $a->user);
+	Addon::callHooks('logged_in', $a->user);
 }
 
 /**
@@ -409,11 +412,11 @@ function api_error($type, $e)
 	$error = ($e->getMessage() !== "" ? $e->getMessage() : $e->httpdesc);
 	/// @TODO:  https://dev.twitter.com/overview/api/response-codes
 
-	$error = array("error" => $error,
+	$error = ["error" => $error,
 			"code" => $e->httpcode . " " . $e->httpdesc,
-			"request" => $a->query_string);
+			"request" => $a->query_string];
 
-	$return = api_format_data('status', $type, array('status' => $error));
+	$return = api_format_data('status', $type, ['status' => $error]);
 
 	switch ($type) {
 		case "xml":
@@ -450,15 +453,15 @@ function api_rss_extra(App $a, $arr, $user_info)
 	}
 
 	$arr['$user'] = $user_info;
-	$arr['$rss'] = array(
+	$arr['$rss'] = [
 		'alternate'    => $user_info['url'],
 		'self'         => System::baseUrl() . "/" . $a->query_string,
 		'base'         => System::baseUrl(),
 		'updated'      => api_date(null),
-		'atom_updated' => datetime_convert('UTC', 'UTC', 'now', ATOM_TIME),
+		'atom_updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
 		'language'     => $user_info['language'],
 		'logo'         => System::baseUrl() . "/images/friendica-32.png",
-	);
+	];
 
 	return $arr;
 }
@@ -473,7 +476,7 @@ function api_rss_extra(App $a, $arr, $user_info)
  */
 function api_unique_id_to_nurl($id)
 {
-	$r = dba::selectFirst('contact', array('nurl'), array('uid' => 0, 'id' => $id));
+	$r = dba::selectFirst('contact', ['nurl'], ['uid' => 0, 'id' => $id]);
 
 	if (DBM::is_result($r)) {
 		return $r["nurl"];
@@ -603,7 +606,7 @@ function api_get_user(App $a, $contact_id = null)
 
 	// if the contact wasn't found, fetch it from the contacts with uid = 0
 	if (!DBM::is_result($uinfo)) {
-		$r = array();
+		$r = [];
 
 		if ($url != "") {
 			$r = q("SELECT * FROM `contact` WHERE `uid` = 0 AND `nurl` = '%s' LIMIT 1", dbesc(normalise_link($url)));
@@ -617,7 +620,7 @@ function api_get_user(App $a, $contact_id = null)
 				$r[0]['nick'] = api_get_nick($r[0]["url"]);
 			}
 
-			$ret = array(
+			$ret = [
 				'id' => $r[0]["id"],
 				'id_str' => (string) $r[0]["id"],
 				'name' => $r[0]["name"],
@@ -651,7 +654,7 @@ function api_get_user(App $a, $contact_id = null)
 				'cid' => Contact::getIdForURL($r[0]["url"], api_user(), true),
 				'self' => 0,
 				'network' => $r[0]["network"],
-			);
+			];
 
 			return $ret;
 		} else {
@@ -752,7 +755,7 @@ function api_get_user(App $a, $contact_id = null)
 		$location = $network_name;
 	}
 
-	$ret = array(
+	$ret = [
 		'id' => intval($pcontact_id),
 		'id_str' => (string) intval($pcontact_id),
 		'name' => (($uinfo[0]['name']) ? $uinfo[0]['name'] : $uinfo[0]['nick']),
@@ -788,7 +791,7 @@ function api_get_user(App $a, $contact_id = null)
 		'cid' => intval($uinfo[0]['cid']),
 		'self' => $uinfo[0]['self'],
 		'network' => $uinfo[0]['network'],
-	);
+	];
 
 	// If this is a local user and it uses Frio, we can get its color preferences.
 	if ($ret['self']) {
@@ -847,7 +850,7 @@ function api_item_get_user(App $a, $item)
 		$owner_user = $status_user;
 	}
 
-	return (array($status_user, $owner_user));
+	return ([$status_user, $owner_user]);
 }
 
 /**
@@ -860,7 +863,7 @@ function api_item_get_user(App $a, $item)
  */
 function api_walk_recursive(array &$array, callable $callback)
 {
-	$new_array = array();
+	$new_array = [];
 
 	foreach ($array as $k => $v) {
 		if (is_array($v)) {
@@ -918,14 +921,14 @@ function api_create_xml($data, $root_element)
 	$data2 = array_pop($data);
 	$key = key($data2);
 
-	$namespaces = array("" => "http://api.twitter.com",
+	$namespaces = ["" => "http://api.twitter.com",
 				"statusnet" => "http://status.net/schema/api/1/",
 				"friendica" => "http://friendi.ca/schema/api/1/",
-				"georss" => "http://www.georss.org/georss");
+				"georss" => "http://www.georss.org/georss"];
 
 	/// @todo Auto detection of needed namespaces
-	if (in_array($root_element, array("ok", "hash", "config", "version", "ids", "notes", "photos"))) {
-		$namespaces = array();
+	if (in_array($root_element, ["ok", "hash", "config", "version", "ids", "notes", "photos"])) {
+		$namespaces = [];
 	}
 
 	if (is_array($data2)) {
@@ -933,7 +936,7 @@ function api_create_xml($data, $root_element)
 	}
 
 	if ($key == "0") {
-		$data4 = array();
+		$data4 = [];
 		$i = 1;
 
 		foreach ($data2 as $item) {
@@ -943,7 +946,7 @@ function api_create_xml($data, $root_element)
 		$data2 = $data4;
 	}
 
-	$data3 = array($root_element => $data2);
+	$data3 = [$root_element => $data2];
 
 	$ret = XML::fromArray($data3, $xml, false, $namespaces);
 	return $ret;
@@ -1021,7 +1024,7 @@ function api_account_verify_credentials($type)
 	unset($user_info["uid"]);
 	unset($user_info["self"]);
 
-	return api_format_data("user", $type, array('user' => $user_info));
+	return api_format_data("user", $type, ['user' => $user_info]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1157,7 +1160,7 @@ function api_statuses_update($type)
 		// Check for throttling (maximum posts per day, week and month)
 		$throttle_day = Config::get('system', 'throttle_limit_day');
 		if ($throttle_day > 0) {
-			$datefrom = date("Y-m-d H:i:s", time() - 24*60*60);
+			$datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60);
 
 			$r = q(
 				"SELECT COUNT(*) AS `posts_day` FROM `item` WHERE `uid`=%d AND `wall`
@@ -1174,14 +1177,14 @@ function api_statuses_update($type)
 
 			if ($posts_day > $throttle_day) {
 				logger('Daily posting limit reached for user '.api_user(), LOGGER_DEBUG);
-				// die(api_error($type, sprintf(t("Daily posting limit of %d posts reached. The post was rejected."), $throttle_day)));
-				throw new TooManyRequestsException(sprintf(t("Daily posting limit of %d posts reached. The post was rejected."), $throttle_day));
+				// die(api_error($type, L10n::t("Daily posting limit of %d posts reached. The post was rejected.", $throttle_day));
+				throw new TooManyRequestsException(L10n::tt("Daily posting limit of %d post reached. The post was rejected.", "Daily posting limit of %d posts reached. The post was rejected.", $throttle_day));
 			}
 		}
 
 		$throttle_week = Config::get('system', 'throttle_limit_week');
 		if ($throttle_week > 0) {
-			$datefrom = date("Y-m-d H:i:s", time() - 24*60*60*7);
+			$datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*7);
 
 			$r = q(
 				"SELECT COUNT(*) AS `posts_week` FROM `item` WHERE `uid`=%d AND `wall`
@@ -1198,14 +1201,14 @@ function api_statuses_update($type)
 
 			if ($posts_week > $throttle_week) {
 				logger('Weekly posting limit reached for user '.api_user(), LOGGER_DEBUG);
-				// die(api_error($type, sprintf(t("Weekly posting limit of %d posts reached. The post was rejected."), $throttle_week)));
-				throw new TooManyRequestsException(sprintf(t("Weekly posting limit of %d posts reached. The post was rejected."), $throttle_week));
+				// die(api_error($type, L10n::t("Weekly posting limit of %d posts reached. The post was rejected.", $throttle_week)));
+				throw new TooManyRequestsException(L10n::tt("Weekly posting limit of %d post reached. The post was rejected.", "Weekly posting limit of %d posts reached. The post was rejected.", $throttle_week));
 			}
 		}
 
 		$throttle_month = Config::get('system', 'throttle_limit_month');
 		if ($throttle_month > 0) {
-			$datefrom = date("Y-m-d H:i:s", time() - 24*60*60*30);
+			$datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*30);
 
 			$r = q(
 				"SELECT COUNT(*) AS `posts_month` FROM `item` WHERE `uid`=%d AND `wall`
@@ -1222,8 +1225,8 @@ function api_statuses_update($type)
 
 			if ($posts_month > $throttle_month) {
 				logger('Monthly posting limit reached for user '.api_user(), LOGGER_DEBUG);
-				// die(api_error($type, sprintf(t("Monthly posting limit of %d posts reached. The post was rejected."), $throttle_month)));
-				throw new TooManyRequestsException(sprintf(t("Monthly posting limit of %d posts reached. The post was rejected."), $throttle_month));
+				// die(api_error($type, L10n::t("Monthly posting limit of %d posts reached. The post was rejected.", $throttle_month));
+				throw new TooManyRequestsException(L10n::t("Monthly posting limit of %d post reached. The post was rejected.", "Monthly posting limit of %d posts reached. The post was rejected.", $throttle_month));
 			}
 		}
 
@@ -1301,17 +1304,17 @@ function api_media_upload()
 		throw new InternalServerErrorException();
 	}
 
-	$returndata = array();
+	$returndata = [];
 	$returndata["media_id"] = $media["id"];
 	$returndata["media_id_string"] = (string)$media["id"];
 	$returndata["size"] = $media["size"];
-	$returndata["image"] = array("w" => $media["width"],
+	$returndata["image"] = ["w" => $media["width"],
 					"h" => $media["height"],
-					"image_type" => $media["type"]);
+					"image_type" => $media["type"]];
 
 	logger("Media uploaded: " . print_r($returndata, true), LOGGER_DEBUG);
 
-	return array("media" => $returndata);
+	return ["media" => $returndata];
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1367,7 +1370,7 @@ function api_status_show($type)
 			$geo = "geo";
 		}
 
-		$status_info = array(
+		$status_info = [
 			'created_at' => api_date($lastwall['created']),
 			'id' => intval($lastwall['id']),
 			'id_str' => (string) $lastwall['id'],
@@ -1394,7 +1397,7 @@ function api_status_show($type)
 			'statusnet_html' => $converted["html"],
 			'statusnet_conversation_id' => $lastwall['parent'],
 			'external_url' => System::baseUrl() . "/display/" . $lastwall['guid'],
-		);
+		];
 
 		if (count($converted["attachments"]) > 0) {
 			$status_info["attachments"] = $converted["attachments"];
@@ -1421,7 +1424,7 @@ function api_status_show($type)
 		return $status_info;
 	}
 
-	return api_format_data("statuses", $type, array('status' => $status_info));
+	return api_format_data("statuses", $type, ['status' => $status_info]);
 }
 
 /**
@@ -1468,7 +1471,7 @@ function api_users_show($type)
 			$geo = "geo";
 		}
 
-		$user_info['status'] = array(
+		$user_info['status'] = [
 			'text' => $converted["text"],
 			'truncated' => false,
 			'created_at' => api_date($lastwall['created']),
@@ -1485,7 +1488,7 @@ function api_users_show($type)
 			'statusnet_html' => $converted["html"],
 			'statusnet_conversation_id' => $lastwall['parent'],
 			'external_url' => System::baseUrl() . "/display/" . $lastwall['guid'],
-		);
+		];
 
 		if (count($converted["attachments"]) > 0) {
 			$user_info["status"]["attachments"] = $converted["attachments"];
@@ -1508,7 +1511,7 @@ function api_users_show($type)
 	unset($user_info["uid"]);
 	unset($user_info["self"]);
 
-	return api_format_data("user", $type, array('user' => $user_info));
+	return api_format_data("user", $type, ['user' => $user_info]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1527,7 +1530,7 @@ function api_users_search($type)
 {
 	$a = get_app();
 
-	$userlist = array();
+	$userlist = [];
 
 	if (x($_GET, 'q')) {
 		$r = q("SELECT id FROM `contact` WHERE `uid` = 0 AND `name` = '%s'", dbesc($_GET["q"]));
@@ -1547,7 +1550,7 @@ function api_users_search($type)
 					$userlist[] = $user_info;
 				}
 			}
-			$userlist = array("users" => $userlist);
+			$userlist = ["users" => $userlist];
 		} else {
 			throw new BadRequestException("User not found.");
 		}
@@ -1573,7 +1576,7 @@ api_register_func('api/users/search', 'api_users_search');
  */
 function api_users_lookup($type)
 {
-	$users = array();
+	$users = [];
 
 	if (x($_REQUEST['user_id'])) {
 		foreach (explode(',', $_REQUEST['user_id']) as $id) {
@@ -1587,7 +1590,7 @@ function api_users_lookup($type)
 		throw new NotFoundException;
 	}
 
-	return api_format_data("users", $type, array('users' => $users));
+	return api_format_data("users", $type, ['users' => $users]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1605,7 +1608,8 @@ api_register_func('api/users/lookup', 'api_users_lookup', true);
  */
 function api_search($type)
 {
-	$data = array();
+	$data = [];
+	$sql_extra = '';
 
 	if (!x($_REQUEST, 'q')) {
 		throw new BadRequestException("q parameter is required.");
@@ -1726,7 +1730,7 @@ function api_statuses_home_timeline($type)
 	$ret = api_format_items($r, $user_info, false, $type);
 
 	// Set all posts from the query above to seen
-	$idarray = array();
+	$idarray = [];
 	foreach ($r as $item) {
 		$idarray[] = intval($item["id"]);
 	}
@@ -1741,7 +1745,7 @@ function api_statuses_home_timeline($type)
 		}
 	}
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	switch ($type) {
 		case "atom":
 		case "rss":
@@ -1787,6 +1791,7 @@ function api_statuses_public_timeline($type)
 	$conversation_id = (x($_REQUEST, 'conversation_id') ? $_REQUEST['conversation_id'] : 0);
 
 	$start = $page * $count;
+	$sql_extra = '';
 
 	if ($exclude_replies && !$conversation_id) {
 		if ($max_id > 0) {
@@ -1848,7 +1853,7 @@ function api_statuses_public_timeline($type)
 
 	$ret = api_format_items($r, $user_info, false, $type);
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	switch ($type) {
 		case "atom":
 		case "rss":
@@ -1920,7 +1925,7 @@ function api_statuses_networkpublic_timeline($type)
 
 	$ret = api_format_items($r, $user_info, false, $type);
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	switch ($type) {
 		case "atom":
 		case "rss":
@@ -1998,10 +2003,10 @@ function api_statuses_show($type)
 	$ret = api_format_items($r, $user_info, false, $type);
 
 	if ($conversation) {
-		$data = array('status' => $ret);
+		$data = ['status' => $ret];
 		return api_format_data("statuses", $type, $data);
 	} else {
-		$data = array('status' => $ret[0]);
+		$data = ['status' => $ret[0]];
 		return api_format_data("status", $type, $data);
 	}
 }
@@ -2091,7 +2096,7 @@ function api_conversation_show($type)
 
 	$ret = api_format_items($r, $user_info, false, $type);
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	return api_format_data("statuses", $type, $data);
 }
 
@@ -2143,7 +2148,6 @@ function api_statuses_repeat($type)
 		WHERE `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
 		AND NOT `item`.`private` AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = ''
 		AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = ''
-		$sql_extra
 		AND `item`.`id`=%d",
 		intval($id)
 	);
@@ -2214,7 +2218,7 @@ function api_statuses_destroy($type)
 
 	$ret = api_statuses_show($type);
 
-	drop_item($id, false);
+	Item::deleteById($id);
 
 	return $ret;
 }
@@ -2263,8 +2267,10 @@ function api_statuses_mentions($type)
 	$myurl = substr($myurl, strpos($myurl, '://') + 3);
 	$myurl = str_replace('www.', '', $myurl);
 
+	$sql_extra = '';
+
 	if ($max_id > 0) {
-		$sql_extra = ' AND `item`.`id` <= ' . intval($max_id);
+		$sql_extra .= ' AND `item`.`id` <= ' . intval($max_id);
 	}
 
 	$r = q(
@@ -2294,7 +2300,7 @@ function api_statuses_mentions($type)
 
 	$ret = api_format_items($r, $user_info, false, $type);
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	switch ($type) {
 		case "atom":
 		case "rss":
@@ -2390,7 +2396,7 @@ function api_statuses_user_timeline($type)
 
 	$ret = api_format_items($r, $user_info, true, $type);
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	switch ($type) {
 		case "atom":
 		case "rss":
@@ -2455,9 +2461,7 @@ function api_favorites_create_destroy($type)
 			throw new BadRequestException("Invalid action ".$action);
 	}
 
-	$r = q("UPDATE item SET starred=%d WHERE id=%d AND uid=%d", $item[0]['starred'], $itemid, api_user());
-
-	q("UPDATE thread SET starred=%d WHERE iid=%d AND uid=%d", $item[0]['starred'], $itemid, api_user());
+	$r = Item::update(['starred' => $item[0]['starred']], ['id' => $itemid]);
 
 	if ($r === false) {
 		throw new InternalServerErrorException("DB error");
@@ -2468,7 +2472,7 @@ function api_favorites_create_destroy($type)
 	$rets = api_format_items($item, $user_info, false, $type);
 	$ret = $rets[0];
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	switch ($type) {
 		case "atom":
 		case "rss":
@@ -2499,7 +2503,7 @@ function api_favorites($type)
 		throw new ForbiddenException();
 	}
 
-	$called_api = array();
+	$called_api = [];
 
 	$user_info = api_get_user($a);
 
@@ -2508,7 +2512,7 @@ function api_favorites($type)
 	logger('api_favorites: self:' . $user_info['self']);
 
 	if ($user_info['self'] == 0) {
-		$ret = array();
+		$ret = [];
 	} else {
 		$sql_extra = "";
 
@@ -2550,7 +2554,7 @@ function api_favorites($type)
 		$ret = api_format_items($r, $user_info, false, $type);
 	}
 
-	$data = array('status' => $ret);
+	$data = ['status' => $ret];
 	switch ($type) {
 		case "atom":
 		case "rss":
@@ -2574,7 +2578,7 @@ api_register_func('api/favorites', 'api_favorites', true);
 function api_format_messages($item, $recipient, $sender)
 {
 	// standard meta information
-	$ret = array(
+	$ret = [
 			'id'                    => $item['id'],
 			'sender_id'             => $sender['id'] ,
 			'text'                  => "",
@@ -2587,7 +2591,7 @@ function api_format_messages($item, $recipient, $sender)
 			'title'                 => "",
 			'friendica_seen'        => $item['seen'],
 			'friendica_parent_uri'  => $item['parent-uri'],
-	);
+	];
 
 	// "uid" and "self" are only needed for some internal stuff, so remove it from here
 	unset($ret["sender"]["uid"]);
@@ -2599,13 +2603,12 @@ function api_format_messages($item, $recipient, $sender)
 	if (x($_GET, 'getText')) {
 		$ret['title'] = $item['title'];
 		if ($_GET['getText'] == 'html') {
-			$ret['text'] = bbcode($item['body'], false, false);
+			$ret['text'] = BBCode::convert($item['body'], false);
 		} elseif ($_GET['getText'] == 'plain') {
-			//$ret['text'] = html2plain(bbcode($item['body'], false, false, true), 0);
-			$ret['text'] = trim(html2plain(bbcode(api_clean_plain_items($item['body']), false, false, 2, true), 0));
+			$ret['text'] = trim(html2plain(BBCode::convert(api_clean_plain_items($item['body']), false, 2, true), 0));
 		}
 	} else {
-		$ret['text'] = $item['title'] . "\n" . html2plain(bbcode(api_clean_plain_items($item['body']), false, false, 2, true), 0);
+		$ret['text'] = $item['title'] . "\n" . html2plain(BBCode::convert(api_clean_plain_items($item['body']), false, 2, true), 0);
 	}
 	if (x($_GET, 'getUserObjects') && $_GET['getUserObjects'] == 'false') {
 		unset($ret['sender']);
@@ -2627,7 +2630,7 @@ function api_convert_item($item)
 	$attachments = api_get_attachments($body);
 
 	// Workaround for ostatus messages where the title is identically to the body
-	$html = bbcode(api_clean_plain_items($body), false, false, 2, true);
+	$html = BBCode::convert(api_clean_plain_items($body), false, 2, true);
 	$statusbody = trim(html2plain($html, 0));
 
 	// handle data: images
@@ -2645,21 +2648,21 @@ function api_convert_item($item)
 		$statustext = substr($statustext, 0, 1000)."... \n".$item["plink"];
 	}
 
-	$statushtml = trim(bbcode($body, false, false));
+	$statushtml = BBCode::convert(api_clean_attachments($body), false);
 
 	// Workaround for clients with limited HTML parser functionality
-	$search = array("
", "
", "
", + $search = ["
", "
", "
", "

", "

", "

", "

", "

", "

", "

", "

", - "
", "
", "
", "
"); - $replace = array("
", "
", "

", + "
", "
", "
", "
"]; + $replace = ["
", "
", "

", "

", "


", "

", "


", "

", "


", "

", "


", - "
", "

", "
", "

"); + "
", "

", "
", "

"]; $statushtml = str_replace($search, $replace, $statushtml); if ($item['title'] != "") { - $statushtml = "

" . bbcode($item['title']) . "


" . $statushtml; + $statushtml = "

" . BBCode::convert($item['title']) . "


" . $statushtml; } do { @@ -2677,17 +2680,17 @@ function api_convert_item($item) // feeds without body should contain the link if (($item['network'] == NETWORK_FEED) && (strlen($item['body']) == 0)) { - $statushtml .= bbcode($item['plink']); + $statushtml .= BBCode::convert($item['plink']); } $entities = api_get_entitities($statustext, $body); - return array( + return [ "text" => $statustext, "html" => $statushtml, "attachments" => $attachments, "entities" => $entities - ); + ]; } /** @@ -2708,13 +2711,13 @@ function api_get_attachments(&$body) return false; } - $attachments = array(); + $attachments = []; foreach ($images[1] as $image) { $imagedata = Image::getInfoFromURL($image); if ($imagedata) { - $attachments[] = array("url" => $image, "mimetype" => $imagedata["mime"], "size" => $imagedata["size"]); + $attachments[] = ["url" => $image, "mimetype" => $imagedata["mime"], "size" => $imagedata["size"]]; } } @@ -2746,19 +2749,19 @@ function api_get_entitities(&$text, $bbcode) $replace = proxy_url($image); $text = str_replace($image, $replace, $text); } - return array(); + return []; } - $bbcode = bb_CleanPictureLinks($bbcode); + $bbcode = BBCode::cleanPictureLinks($bbcode); // Change pure links in text to bbcode uris $bbcode = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2]$2[/url]', $bbcode); - $entities = array(); - $entities["hashtags"] = array(); - $entities["symbols"] = array(); - $entities["urls"] = array(); - $entities["user_mentions"] = array(); + $entities = []; + $entities["hashtags"] = []; + $entities["symbols"] = []; + $entities["urls"] = []; + $entities["user_mentions"] = []; $URLSearchString = "^\[\]"; @@ -2787,12 +2790,12 @@ function api_get_entitities(&$text, $bbcode) //preg_match_all("/\[url\]([$URLSearchString]*)\[\/url\]/ism", $bbcode, $urls1); preg_match_all("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $bbcode, $urls); - $ordered_urls = array(); + $ordered_urls = []; foreach ($urls[1] as $id => $url) { //$start = strpos($text, $url, $offset); $start = iconv_strpos($text, $url, 0, "UTF-8"); if (!($start === false)) { - $ordered_urls[$start] = array("url" => $url, "title" => $urls[2][$id]); + $ordered_urls[$start] = ["url" => $url, "title" => $urls[2][$id]]; } } @@ -2806,8 +2809,8 @@ function api_get_entitities(&$text, $bbcode) ) { $display_url = $url["title"]; } else { - $display_url = str_replace(array("http://www.", "https://www."), array("", ""), $url["url"]); - $display_url = str_replace(array("http://", "https://"), array("", ""), $display_url); + $display_url = str_replace(["http://www.", "https://www."], ["", ""], $url["url"]); + $display_url = str_replace(["http://", "https://"], ["", ""], $display_url); if (strlen($display_url) > 26) { $display_url = substr($display_url, 0, 25)."…"; @@ -2817,16 +2820,16 @@ function api_get_entitities(&$text, $bbcode) //$start = strpos($text, $url, $offset); $start = iconv_strpos($text, $url["url"], $offset, "UTF-8"); if (!($start === false)) { - $entities["urls"][] = array("url" => $url["url"], + $entities["urls"][] = ["url" => $url["url"], "expanded_url" => $url["url"], "display_url" => $display_url, - "indices" => array($start, $start+strlen($url["url"]))); + "indices" => [$start, $start+strlen($url["url"])]]; $offset = $start + 1; } } preg_match_all("/\[img](.*?)\[\/img\]/ism", $bbcode, $images); - $ordered_images = array(); + $ordered_images = []; foreach ($images[1] as $image) { //$start = strpos($text, $url, $offset); $start = iconv_strpos($text, $image, 0, "UTF-8"); @@ -2838,8 +2841,8 @@ function api_get_entitities(&$text, $bbcode) $offset = 0; foreach ($ordered_images as $url) { - $display_url = str_replace(array("http://www.", "https://www."), array("", ""), $url); - $display_url = str_replace(array("http://", "https://"), array("", ""), $display_url); + $display_url = str_replace(["http://www.", "https://www."], ["", ""], $url); + $display_url = str_replace(["http://", "https://"], ["", ""], $display_url); if (strlen($display_url) > 26) { $display_url = substr($display_url, 0, 25)."…"; @@ -2854,38 +2857,38 @@ function api_get_entitities(&$text, $bbcode) if (!Config::get("system", "proxy_disabled")) { $media_url = proxy_url($url); - $sizes = array(); + $sizes = []; $scale = Image::getScalingDimensions($image[0], $image[1], 150); - $sizes["thumb"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); + $sizes["thumb"] = ["w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"]; if (($image[0] > 150) || ($image[1] > 150)) { $scale = Image::getScalingDimensions($image[0], $image[1], 340); - $sizes["small"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); + $sizes["small"] = ["w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"]; } $scale = Image::getScalingDimensions($image[0], $image[1], 600); - $sizes["medium"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); + $sizes["medium"] = ["w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"]; if (($image[0] > 600) || ($image[1] > 600)) { $scale = Image::getScalingDimensions($image[0], $image[1], 1024); - $sizes["large"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); + $sizes["large"] = ["w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"]; } } else { $media_url = $url; - $sizes["medium"] = array("w" => $image[0], "h" => $image[1], "resize" => "fit"); + $sizes["medium"] = ["w" => $image[0], "h" => $image[1], "resize" => "fit"]; } - $entities["media"][] = array( + $entities["media"][] = [ "id" => $start+1, "id_str" => (string)$start+1, - "indices" => array($start, $start+strlen($url)), + "indices" => [$start, $start+strlen($url)], "media_url" => normalise_link($media_url), "media_url_https" => $media_url, "url" => $url, "display_url" => $display_url, "expanded_url" => $url, "type" => "photo", - "sizes" => $sizes); + "sizes" => $sizes]; } $offset = $start + 1; } @@ -2923,18 +2926,18 @@ function api_format_items_embeded_images($item, $text) */ function api_contactlink_to_array($txt) { - $match = array(); + $match = []; $r = preg_match_all('|([^<]*)|', $txt, $match); if ($r && count($match)==3) { - $res = array( + $res = [ 'name' => $match[2], 'url' => $match[1] - ); + ]; } else { - $res = array( - 'name' => $text, + $res = [ + 'name' => $txt, 'url' => "" - ); + ]; } return $res; } @@ -2954,13 +2957,13 @@ function api_format_items_activities(&$item, $type = "json") { $a = get_app(); - $activities = array( - 'like' => array(), - 'dislike' => array(), - 'attendyes' => array(), - 'attendno' => array(), - 'attendmaybe' => array(), - ); + $activities = [ + 'like' => [], + 'dislike' => [], + 'attendyes' => [], + 'attendno' => [], + 'attendmaybe' => [], + ]; $items = q( 'SELECT * FROM item @@ -2997,7 +3000,7 @@ function api_format_items_activities(&$item, $type = "json") } if ($type == "xml") { - $xml_activities = array(); + $xml_activities = []; foreach ($activities as $k => $v) { // change xml element from "like" to "friendica:like" $xml_activities["friendica:".$k] = $v; @@ -3022,7 +3025,7 @@ function api_format_items_activities(&$item, $type = "json") */ function api_format_items_profiles($profile_row) { - $profile = array( + $profile = [ 'profile_id' => $profile_row['id'], 'profile_name' => $profile_row['profile-name'], 'is_default' => $profile_row['is-default'] ? true : false, @@ -3048,21 +3051,21 @@ function api_format_items_profiles($profile_row) 'religion' => $profile_row['religion'], 'public_keywords' => $profile_row['pub_keywords'], 'private_keywords' => $profile_row['prv_keywords'], - 'likes' => bbcode(api_clean_plain_items($profile_row['likes']) , false, false, 2, false), - 'dislikes' => bbcode(api_clean_plain_items($profile_row['dislikes']) , false, false, 2, false), - 'about' => bbcode(api_clean_plain_items($profile_row['about']) , false, false, 2, false), - 'music' => bbcode(api_clean_plain_items($profile_row['music']) , false, false, 2, false), - 'book' => bbcode(api_clean_plain_items($profile_row['book']) , false, false, 2, false), - 'tv' => bbcode(api_clean_plain_items($profile_row['tv']) , false, false, 2, false), - 'film' => bbcode(api_clean_plain_items($profile_row['film']) , false, false, 2, false), - 'interest' => bbcode(api_clean_plain_items($profile_row['interest']) , false, false, 2, false), - 'romance' => bbcode(api_clean_plain_items($profile_row['romance']) , false, false, 2, false), - 'work' => bbcode(api_clean_plain_items($profile_row['work']) , false, false, 2, false), - 'education' => bbcode(api_clean_plain_items($profile_row['education']), false, false, 2, false), - 'social_networks' => bbcode(api_clean_plain_items($profile_row['contact']) , false, false, 2, false), + 'likes' => BBCode::convert(api_clean_plain_items($profile_row['likes']) , false, 2), + 'dislikes' => BBCode::convert(api_clean_plain_items($profile_row['dislikes']) , false, 2), + 'about' => BBCode::convert(api_clean_plain_items($profile_row['about']) , false, 2), + 'music' => BBCode::convert(api_clean_plain_items($profile_row['music']) , false, 2), + 'book' => BBCode::convert(api_clean_plain_items($profile_row['book']) , false, 2), + 'tv' => BBCode::convert(api_clean_plain_items($profile_row['tv']) , false, 2), + 'film' => BBCode::convert(api_clean_plain_items($profile_row['film']) , false, 2), + 'interest' => BBCode::convert(api_clean_plain_items($profile_row['interest']) , false, 2), + 'romance' => BBCode::convert(api_clean_plain_items($profile_row['romance']) , false, 2), + 'work' => BBCode::convert(api_clean_plain_items($profile_row['work']) , false, 2), + 'education' => BBCode::convert(api_clean_plain_items($profile_row['education']), false, 2), + 'social_networks' => BBCode::convert(api_clean_plain_items($profile_row['contact']) , false, 2), 'homepage' => $profile_row['homepage'], 'users' => null - ); + ]; return $profile; } @@ -3078,7 +3081,7 @@ function api_format_items($r, $user_info, $filter_user = false, $type = "json") { $a = get_app(); - $ret = array(); + $ret = []; foreach ($r as $item) { localize_item($item); @@ -3099,7 +3102,7 @@ function api_format_items($r, $user_info, $filter_user = false, $type = "json") $geo = "geo"; } - $status = array( + $status = [ 'text' => $converted["text"], 'truncated' => false, 'created_at'=> api_date($item['created']), @@ -3120,7 +3123,7 @@ function api_format_items($r, $user_info, $filter_user = false, $type = "json") 'statusnet_conversation_id' => $item['parent'], 'external_url' => System::baseUrl() . "/display/" . $item['guid'], 'friendica_activities' => api_format_items_activities($item, $type), - ); + ]; if (count($converted["attachments"]) > 0) { $status["attachments"] = $converted["attachments"]; @@ -3153,7 +3156,7 @@ function api_format_items($r, $user_info, $filter_user = false, $type = "json") } catch (BadRequestException $e) { // user not found. should be found? /// @todo check if the user should be always found - $retweeted_status["user"] = array(); + $retweeted_status["user"] = []; } $rt_converted = api_convert_item($retweeted_item); @@ -3174,9 +3177,9 @@ function api_format_items($r, $user_info, $filter_user = false, $type = "json") $coords = explode(' ', $item["coord"]); if (count($coords) == 2) { if ($type == "json") { - $status["geo"] = array('type' => 'Point', - 'coordinates' => array((float) $coords[0], - (float) $coords[1])); + $status["geo"] = ['type' => 'Point', + 'coordinates' => [(float) $coords[0], + (float) $coords[1]]]; } else {// Not sure if this is the official format - if someone founds a documentation we can check $status["georss:point"] = $item["coord"]; } @@ -3197,26 +3200,26 @@ function api_format_items($r, $user_info, $filter_user = false, $type = "json") function api_account_rate_limit_status($type) { if ($type == "xml") { - $hash = array( + $hash = [ 'remaining-hits' => '150', - '@attributes' => array("type" => "integer"), + '@attributes' => ["type" => "integer"], 'hourly-limit' => '150', - '@attributes2' => array("type" => "integer"), - 'reset-time' => datetime_convert('UTC', 'UTC', 'now + 1 hour', ATOM_TIME), - '@attributes3' => array("type" => "datetime"), + '@attributes2' => ["type" => "integer"], + 'reset-time' => DateTimeFormat::utc('now + 1 hour', DateTimeFormat::ATOM), + '@attributes3' => ["type" => "datetime"], 'reset_time_in_seconds' => strtotime('now + 1 hour'), - '@attributes4' => array("type" => "integer"), - ); + '@attributes4' => ["type" => "integer"], + ]; } else { - $hash = array( + $hash = [ 'reset_time_in_seconds' => strtotime('now + 1 hour'), 'remaining_hits' => '150', 'hourly_limit' => '150', - 'reset_time' => api_date(datetime_convert('UTC', 'UTC', 'now + 1 hour', ATOM_TIME)), - ); + 'reset_time' => api_date(DateTimeFormat::utc('now + 1 hour', DateTimeFormat::ATOM)), + ]; } - return api_format_data('hash', $type, array('hash' => $hash)); + return api_format_data('hash', $type, ['hash' => $hash]); } /// @TODO move to top of file or somewhere better @@ -3237,7 +3240,7 @@ function api_help_test($type) $ok = "ok"; } - return api_format_data('ok', $type, array("ok" => $ok)); + return api_format_data('ok', $type, ["ok" => $ok]); } /// @TODO move to top of file or somewhere better @@ -3251,9 +3254,9 @@ api_register_func('api/help/test', 'api_help_test', false); */ function api_lists($type) { - $ret = array(); + $ret = []; /// @TODO $ret is not filled here? - return api_format_data('lists', $type, array("lists_list" => $ret)); + return api_format_data('lists', $type, ["lists_list" => $ret]); } /// @TODO move to top of file or somewhere better @@ -3269,9 +3272,9 @@ api_register_func('api/lists', 'api_lists', true); */ function api_lists_list($type) { - $ret = array(); + $ret = []; /// @TODO $ret is not filled here? - return api_format_data('lists', $type, array("lists_list" => $ret)); + return api_format_data('lists', $type, ["lists_list" => $ret]); } /// @TODO move to top of file or somewhere better @@ -3350,7 +3353,7 @@ function api_statuses_f($qtype) intval($count) ); - $ret = array(); + $ret = []; foreach ($r as $cid) { $user = api_get_user($a, $cid['nurl']); // "uid" and "self" are only needed for some internal stuff, so remove it from here @@ -3362,7 +3365,7 @@ function api_statuses_f($qtype) } } - return array('user' => $ret); + return ['user' => $ret]; } @@ -3445,12 +3448,12 @@ function api_friendships_incoming($type) return false; } - $ids = array(); + $ids = []; foreach ($data['user'] as $user) { $ids[] = $user['id']; } - return api_format_data("ids", $type, array('id' => $ids)); + return api_format_data("ids", $type, ['id' => $ids]); } /// @TODO move to top of file or somewhere better @@ -3480,22 +3483,22 @@ function api_statusnet_config($type) $ssl = ((Config::get('system', 'have_ssl')) ? 'true' : 'false'); $sslserver = (($ssl === 'true') ? str_replace('http:', 'https:', System::baseUrl()) : ''); - $config = array( - 'site' => array('name' => $name,'server' => $server, 'theme' => 'default', 'path' => '', + $config = [ + 'site' => ['name' => $name,'server' => $server, 'theme' => 'default', 'path' => '', 'logo' => $logo, 'fancy' => true, 'language' => 'en', 'email' => $email, 'broughtby' => '', 'broughtbyurl' => '', 'timezone' => 'UTC', 'closed' => $closed, 'inviteonly' => false, 'private' => $private, 'textlimit' => $textlimit, 'sslserver' => $sslserver, 'ssl' => $ssl, 'shorturllength' => '30', - 'friendica' => array( + 'friendica' => [ 'FRIENDICA_PLATFORM' => FRIENDICA_PLATFORM, 'FRIENDICA_VERSION' => FRIENDICA_VERSION, 'DFRN_PROTOCOL_VERSION' => DFRN_PROTOCOL_VERSION, 'DB_UPDATE_VERSION' => DB_UPDATE_VERSION - ) - ), - ); + ] + ], + ]; - return api_format_data('config', $type, array('config' => $config)); + return api_format_data('config', $type, ['config' => $config]); } /// @TODO move to top of file or somewhere better @@ -3513,7 +3516,7 @@ function api_statusnet_version($type) // liar $fake_statusnet_version = "0.9.7"; - return api_format_data('version', $type, array('version' => $fake_statusnet_version)); + return api_format_data('version', $type, ['version' => $fake_statusnet_version]); } /// @TODO move to top of file or somewhere better @@ -3532,6 +3535,8 @@ function api_ff_ids($type) throw new ForbiddenException(); } + $a = get_app(); + api_get_user($a); $stringify_ids = defaults($_REQUEST, 'stringify_ids', false); @@ -3546,7 +3551,7 @@ function api_ff_ids($type) return; } - $ids = array(); + $ids = []; foreach ($r as $rr) { if ($stringify_ids) { $ids[] = $rr['id']; @@ -3555,7 +3560,7 @@ function api_ff_ids($type) } } - return api_format_data("ids", $type, array('id' => $ids)); + return api_format_data("ids", $type, ['id' => $ids]); } /** @@ -3650,15 +3655,15 @@ function api_direct_messages_new($type) $r = q("SELECT * FROM `mail` WHERE id=%d", intval($id)); $ret = api_format_messages($r[0], $recipient, $sender); } else { - $ret = array("error"=>$id); + $ret = ["error"=>$id]; } - $data = array('direct_message'=>$ret); + $data = ['direct_message'=>$ret]; switch ($type) { case "atom": case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($a, $data, $sender); } return api_format_data("direct-messages", $type, $data); @@ -3696,8 +3701,8 @@ function api_direct_messages_destroy($type) $uid = $user_info['uid']; // error if no id or parenturi specified (for clients posting parent-uri as well) if ($verbose == "true" && ($id == 0 || $parenturi == "")) { - $answer = array('result' => 'error', 'message' => 'message id or parenturi not specified'); - return api_format_data("direct_messages_delete", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'message id or parenturi not specified']; + return api_format_data("direct_messages_delete", $type, ['$result' => $answer]); } // BadRequestException if no id specified (for clients using Twitter API) @@ -3718,8 +3723,8 @@ function api_direct_messages_destroy($type) // error message if specified id is not in database if (!DBM::is_result($r)) { if ($verbose == "true") { - $answer = array('result' => 'error', 'message' => 'message id not in database'); - return api_format_data("direct_messages_delete", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'message id not in database']; + return api_format_data("direct_messages_delete", $type, ['$result' => $answer]); } /// @todo BadRequestException ok for Twitter API clients? throw new BadRequestException('message id not in database'); @@ -3735,11 +3740,11 @@ function api_direct_messages_destroy($type) if ($verbose == "true") { if ($result) { // return success - $answer = array('result' => 'ok', 'message' => 'message deleted'); - return api_format_data("direct_message_delete", $type, array('$result' => $answer)); + $answer = ['result' => 'ok', 'message' => 'message deleted']; + return api_format_data("direct_message_delete", $type, ['$result' => $answer]); } else { - $answer = array('result' => 'error', 'message' => 'unknown error'); - return api_format_data("direct_messages_delete", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'unknown error']; + return api_format_data("direct_messages_delete", $type, ['$result' => $answer]); } } /// @todo return JSON data like Twitter API not yet implemented @@ -3790,6 +3795,8 @@ function api_direct_messages_box($type, $box, $verbose) // pagination $start = $page * $count; + $sql_extra = ""; + // filters if ($box=="sentbox") { $sql_extra = "`mail`.`from-url`='" . dbesc($profile_url) . "'"; @@ -3819,11 +3826,11 @@ function api_direct_messages_box($type, $box, $verbose) intval($count) ); if ($verbose == "true" && !DBM::is_result($r)) { - $answer = array('result' => 'error', 'message' => 'no mails available'); - return api_format_data("direct_messages_all", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'no mails available']; + return api_format_data("direct_messages_all", $type, ['$result' => $answer]); } - $ret = array(); + $ret = []; foreach ($r as $item) { if ($box == "inbox" || $item['from-url'] != $profile_url) { $recipient = $user_info; @@ -3837,7 +3844,7 @@ function api_direct_messages_box($type, $box, $verbose) } - $data = array('direct_message' => $ret); + $data = ['direct_message' => $ret]; switch ($type) { case "atom": case "rss": @@ -3987,16 +3994,16 @@ function api_fr_photoalbum_delete($type) if (!DBM::is_result($photo_item)) { throw new InternalServerErrorException("problem with deleting items occured"); } - drop_item($photo_item[0]['id'], false); + Item::deleteById($photo_item[0]['id']); } // now let's delete all photos from the album - $result = dba::delete('photo', array('uid' => api_user(), 'album' => $album)); + $result = dba::delete('photo', ['uid' => api_user(), 'album' => $album]); // return success of deletion or error message if ($result) { - $answer = array('result' => 'deleted', 'message' => 'album `' . $album . '` with all containing photos has been deleted.'); - return api_format_data("photoalbum_delete", $type, array('$result' => $answer)); + $answer = ['result' => 'deleted', 'message' => 'album `' . $album . '` with all containing photos has been deleted.']; + return api_format_data("photoalbum_delete", $type, ['$result' => $answer]); } else { throw new InternalServerErrorException("unknown error - deleting from database failed"); } @@ -4043,8 +4050,8 @@ function api_fr_photoalbum_update($type) // return success of updating or error message if ($result) { - $answer = array('result' => 'updated', 'message' => 'album `' . $album . '` with all containing photos has been renamed to `' . $album_new . '`.'); - return api_format_data("photoalbum_update", $type, array('$result' => $answer)); + $answer = ['result' => 'updated', 'message' => 'album `' . $album . '` with all containing photos has been renamed to `' . $album_new . '`.']; + return api_format_data("photoalbum_update", $type, ['$result' => $answer]); } else { throw new InternalServerErrorException("unknown error - updating in database failed"); } @@ -4068,15 +4075,15 @@ function api_fr_photos_list($type) WHERE `uid` = %d AND `album` != 'Contact Photos' GROUP BY `resource-id`", intval(local_user()) ); - $typetoext = array( + $typetoext = [ 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif' - ); - $data = array('photo'=>array()); + ]; + $data = ['photo'=>[]]; if (DBM::is_result($r)) { foreach ($r as $rr) { - $photo = array(); + $photo = []; $photo['id'] = $rr['resource-id']; $photo['album'] = $rr['album']; $photo['filename'] = $rr['filename']; @@ -4087,7 +4094,7 @@ function api_fr_photos_list($type) $photo['desc'] = $rr['desc']; if ($type == "xml") { - $data['photo'][] = array("@attributes" => $photo, "1" => $thumb); + $data['photo'][] = ["@attributes" => $photo, "1" => $thumb]; } else { $photo['thumb'] = $thumb; $data['photo'][] = $photo; @@ -4211,7 +4218,7 @@ function api_fr_photo_create_update($type) $result = q( "UPDATE `photo` SET %s, `edited`='%s' WHERE `uid` = %d AND `resource-id` = '%s' AND `album` = '%s'", $sql_extra, - datetime_convert(), // update edited timestamp + DateTimeFormat::utcNow(), // update edited timestamp intval(api_user()), dbesc($photo_id), dbesc($album) @@ -4231,12 +4238,12 @@ function api_fr_photo_create_update($type) // return success of updating or error message if ($result) { - $answer = array('result' => 'updated', 'message' => 'Image id `' . $photo_id . '` has been updated.'); - return api_format_data("photo_update", $type, array('$result' => $answer)); + $answer = ['result' => 'updated', 'message' => 'Image id `' . $photo_id . '` has been updated.']; + return api_format_data("photo_update", $type, ['$result' => $answer]); } else { if ($nothingtodo) { - $answer = array('result' => 'cancelled', 'message' => 'Nothing to update for image id `' . $photo_id . '`.'); - return api_format_data("photo_update", $type, array('$result' => $answer)); + $answer = ['result' => 'cancelled', 'message' => 'Nothing to update for image id `' . $photo_id . '`.']; + return api_format_data("photo_update", $type, ['$result' => $answer]); } throw new InternalServerErrorException("unknown error - update photo entry in database failed"); } @@ -4274,7 +4281,7 @@ function api_fr_photo_delete($type) throw new BadRequestException("photo not available"); } // now we can perform on the deletion of the photo - $result = dba::delete('photo', array('uid' => api_user(), 'resource-id' => $photo_id)); + $result = dba::delete('photo', ['uid' => api_user(), 'resource-id' => $photo_id]); // return success of deletion or error message if ($result) { @@ -4290,10 +4297,10 @@ function api_fr_photo_delete($type) } // function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore // to the user and the contacts of the users (drop_items() do all the necessary magic to avoid orphans in database and federate deletion) - drop_item($photo_item[0]['id'], false); + Item::deleteById($photo_item[0]['id']); - $answer = array('result' => 'deleted', 'message' => 'photo with id `' . $photo_id . '` has been deleted from server.'); - return api_format_data("photo_delete", $type, array('$result' => $answer)); + $answer = ['result' => 'deleted', 'message' => 'photo with id `' . $photo_id . '` has been deleted from server.']; + return api_format_data("photo_delete", $type, ['$result' => $answer]); } else { throw new InternalServerErrorException("unknown error on deleting photo from database table"); } @@ -4372,7 +4379,7 @@ function api_account_update_profile_image($type) $media = $_FILES['media']; } // save new profile image - $data = save_media_to_database("profileimage", $media, $type, t('Profile Photos'), "", "", "", "", "", $is_default_profile); + $data = save_media_to_database("profileimage", $media, $type, L10n::t('Profile Photos'), "", "", "", "", "", $is_default_profile); // get filetype if (is_array($media['type'])) { @@ -4415,7 +4422,7 @@ function api_account_update_profile_image($type) q( "UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d", - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), intval(local_user()) ); @@ -4607,7 +4614,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ $height = $Image->getHeight(); // create a new resource-id if not already provided - $hash = ($photo_id == null) ? photo_new_resource() : $photo_id; + $hash = ($photo_id == null) ? Photo::newResource() : $photo_id; if ($mediatype == "photo") { // upload normal image (scales 0, 1, 2) @@ -4692,7 +4699,7 @@ function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $f $uri = item_new_uri(get_app()->get_hostname(), intval(api_user())); $owner_record = q("SELECT * FROM `contact` WHERE `uid`= %d AND `self` LIMIT 1", intval(api_user())); - $arr = array(); + $arr = []; $arr['guid'] = get_guid(32); $arr['uid'] = intval(api_user()); $arr['uri'] = $uri; @@ -4712,15 +4719,14 @@ function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $f $arr['allow_gid'] = $allow_gid; $arr['deny_cid'] = $deny_cid; $arr['deny_gid'] = $deny_gid; - $arr['last-child'] = 1; $arr['visible'] = $visibility; $arr['origin'] = 1; - $typetoext = array( + $typetoext = [ 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif' - ); + ]; // adds link to the thumbnail scale photo $arr['body'] = '[url=' . System::baseUrl() . '/photos/' . $owner_record[0]['nick'] . '/image/' . $hash . ']' @@ -4728,7 +4734,7 @@ function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $f . '[/url]'; // do the magic for storing the item in the database and trigger the federation to other contacts - item_store($arr); + Item::insert($arr); } /** @@ -4757,15 +4763,15 @@ function prepare_photo_data($type, $scale, $photo_id) $scale_sql ); - $typetoext = array( + $typetoext = [ 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif' - ); + ]; // prepare output data for photo if (DBM::is_result($r)) { - $data = array('photo' => $r[0]); + $data = ['photo' => $r[0]]; $data['photo']['id'] = $data['photo']['resource-id']; if ($scale !== false) { $data['photo']['data'] = base64_encode($data['photo']['data']); @@ -4773,14 +4779,14 @@ function prepare_photo_data($type, $scale, $photo_id) unset($data['photo']['datasize']); //needed only with scale param } if ($type == "xml") { - $data['photo']['links'] = array(); + $data['photo']['links'] = []; for ($k = intval($data['photo']['minscale']); $k <= intval($data['photo']['maxscale']); $k++) { - $data['photo']['links'][$k . ":link"]["@attributes"] = array("type" => $data['photo']['type'], + $data['photo']['links'][$k . ":link"]["@attributes"] = ["type" => $data['photo']['type'], "scale" => $k, - "href" => System::baseUrl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]); + "href" => System::baseUrl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]]; } } else { - $data['photo']['link'] = array(); + $data['photo']['link'] = []; // when we have profile images we could have only scales from 4 to 6, but index of array always needs to start with 0 $i = 0; for ($k = intval($data['photo']['minscale']); $k <= intval($data['photo']['maxscale']); $k++) { @@ -4822,7 +4828,7 @@ function prepare_photo_data($type, $scale, $photo_id) // prepare output of comments $commentData = api_format_items($r, api_get_user(get_app()), false, $type); - $comments = array(); + $comments = []; if ($type == "xml") { $k = 0; foreach ($commentData as $comment) { @@ -4906,7 +4912,7 @@ function api_friendica_remoteauth() goaway( $contact['poll'] . '?dfrn_id=' . $dfrn_id . '&dfrn_version=' . DFRN_PROTOCOL_VERSION - . '&type=profile&sec=' . $sec . $dest . $quiet + . '&type=profile&sec=' . $sec . $dest ); } api_register_func('api/friendica/remoteauth', 'api_friendica_remoteauth', true); @@ -5071,7 +5077,7 @@ function api_get_nick($profile) if ($StatusnetHost != $profile) { $StatusnetUser = preg_replace("=https?://(.*)/user/(.*)=ism", "$2", $profile); if ($StatusnetUser != $profile) { - $UserData = fetch_url("http://".$StatusnetHost."/api/users/show.json?user_id=".$StatusnetUser); + $UserData = Network::fetchUrl("http://".$StatusnetHost."/api/users/show.json?user_id=".$StatusnetUser); $user = json_decode($UserData); if ($user) { $nick = $user->screen_name; @@ -5104,7 +5110,7 @@ function api_get_nick($profile) */ function api_in_reply_to($item) { - $in_reply_to = array(); + $in_reply_to = []; $in_reply_to['status_id'] = null; $in_reply_to['user_id'] = null; @@ -5170,7 +5176,7 @@ function api_clean_plain_items($Text) { $include_entities = strtolower(x($_REQUEST, 'include_entities') ? $_REQUEST['include_entities'] : "false"); - $Text = bb_CleanPictureLinks($Text); + $Text = BBCode::cleanPictureLinks($Text); $URLSearchString = "^\[\]"; $Text = preg_replace("/([!#@])\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '$1$3', $Text); @@ -5194,7 +5200,7 @@ function api_clean_plain_items($Text) */ function api_clean_attachments($body) { - $data = get_attachment_data($body); + $data = BBCode::getAttachmentData($body); if (!$data) { return $body; @@ -5223,23 +5229,23 @@ function api_clean_attachments($body) */ function api_best_nickname(&$contacts) { - $best_contact = array(); + $best_contact = []; - if (count($contact) == 0) { + if (count($contacts) == 0) { return; } foreach ($contacts as $contact) { if ($contact["network"] == "") { $contact["network"] = "dfrn"; - $best_contact = array($contact); + $best_contact = [$contact]; } } if (sizeof($best_contact) == 0) { foreach ($contacts as $contact) { if ($contact["network"] == "dfrn") { - $best_contact = array($contact); + $best_contact = [$contact]; } } } @@ -5247,7 +5253,7 @@ function api_best_nickname(&$contacts) if (sizeof($best_contact) == 0) { foreach ($contacts as $contact) { if ($contact["network"] == "dspr") { - $best_contact = array($contact); + $best_contact = [$contact]; } } } @@ -5255,7 +5261,7 @@ function api_best_nickname(&$contacts) if (sizeof($best_contact) == 0) { foreach ($contacts as $contact) { if ($contact["network"] == "stat") { - $best_contact = array($contact); + $best_contact = [$contact]; } } } @@ -5263,7 +5269,7 @@ function api_best_nickname(&$contacts) if (sizeof($best_contact) == 0) { foreach ($contacts as $contact) { if ($contact["network"] == "pump") { - $best_contact = array($contact); + $best_contact = [$contact]; } } } @@ -5271,7 +5277,7 @@ function api_best_nickname(&$contacts) if (sizeof($best_contact) == 0) { foreach ($contacts as $contact) { if ($contact["network"] == "twit") { - $best_contact = array($contact); + $best_contact = [$contact]; } } } @@ -5279,7 +5285,7 @@ function api_best_nickname(&$contacts) if (sizeof($best_contact) == 1) { $contacts = $best_contact; } else { - $contacts = array($contacts[0]); + $contacts = [$contacts[0]]; } } @@ -5324,7 +5330,7 @@ function api_friendica_group_show($type) // loop through all groups and retrieve all members for adding data in the user array foreach ($r as $rr) { $members = Contact::getByGroupId($rr['id']); - $users = array(); + $users = []; if ($type == "xml") { $user_element = "users"; @@ -5340,9 +5346,9 @@ function api_friendica_group_show($type) $users[] = $user; } } - $grps[] = array('name' => $rr['name'], 'gid' => $rr['id'], $user_element => $users); + $grps[] = ['name' => $rr['name'], 'gid' => $rr['id'], $user_element => $users]; } - return api_format_data("groups", $type, array('group' => $grps)); + return api_format_data("groups", $type, ['group' => $grps]); } api_register_func('api/friendica/group_show', 'api_friendica_group_show', true); @@ -5400,8 +5406,8 @@ function api_friendica_group_delete($type) $ret = Group::removeByName($uid, $name); if ($ret) { // return success - $success = array('success' => $ret, 'gid' => $gid, 'name' => $name, 'status' => 'deleted', 'wrong users' => array()); - return api_format_data("group_delete", $type, array('result' => $success)); + $success = ['success' => $ret, 'gid' => $gid, 'name' => $name, 'status' => 'deleted', 'wrong users' => []]; + return api_format_data("group_delete", $type, ['result' => $success]); } else { throw new BadRequestException('other API error'); } @@ -5468,7 +5474,7 @@ function api_friendica_group_create($type) // add members $erroraddinguser = false; - $errorusers = array(); + $errorusers = []; foreach ($users as $user) { $cid = $user['cid']; // check if user really exists as contact @@ -5487,8 +5493,8 @@ function api_friendica_group_create($type) // return success message incl. missing users in array $status = ($erroraddinguser ? "missing user" : ($reactivate_group ? "reactivated" : "ok")); - $success = array('success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers); - return api_format_data("group_create", $type, array('result' => $success)); + $success = ['success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers]; + return api_format_data("group_create", $type, ['result' => $success]); } api_register_func('api/friendica/group_create', 'api_friendica_group_create', true, API_METHOD_POST); @@ -5540,7 +5546,7 @@ function api_friendica_group_update($type) // add members $erroraddinguser = false; - $errorusers = array(); + $errorusers = []; foreach ($users as $user) { $cid = $user['cid']; // check if user really exists as contact @@ -5560,8 +5566,8 @@ function api_friendica_group_update($type) // return success message incl. missing users in array $status = ($erroraddinguser ? "missing user" : "ok"); - $success = array('success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers); - return api_format_data("group_update", $type, array('result' => $success)); + $success = ['success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers]; + return api_format_data("group_update", $type, ['result' => $success]); } api_register_func('api/friendica/group_update', 'api_friendica_group_update', true, API_METHOD_POST); @@ -5584,7 +5590,7 @@ function api_friendica_activity($type) $id = (x($_REQUEST, 'id') ? $_REQUEST['id'] : 0); - $res = do_like($id, $verb); + $res = Item::performLike($id, $verb); if ($res) { if ($type == "xml") { @@ -5592,7 +5598,7 @@ function api_friendica_activity($type) } else { $ok = "ok"; } - return api_format_data('ok', $type, array('ok' => $ok)); + return api_format_data('ok', $type, ['ok' => $ok]); } else { throw new BadRequestException('Error adding activity'); } @@ -5628,18 +5634,18 @@ function api_friendica_notification($type) } $nm = new NotificationsManager(); - $notes = $nm->getAll(array(), "+seen -date", 50); + $notes = $nm->getAll([], "+seen -date", 50); if ($type == "xml") { - $xmlnotes = array(); + $xmlnotes = []; foreach ($notes as $note) { - $xmlnotes[] = array("@attributes" => $note); + $xmlnotes[] = ["@attributes" => $note]; } $notes = $xmlnotes; } - return api_format_data("notes", $type, array('note' => $notes)); + return api_format_data("notes", $type, ['note' => $notes]); } /** @@ -5681,12 +5687,12 @@ function api_friendica_notification_seen($type) // we found the item, return it to the user $user_info = api_get_user($a); $ret = api_format_items($r, $user_info, false, $type); - $data = array('status' => $ret); + $data = ['status' => $ret]; return api_format_data("status", $type, $data); } // the item can't be found, but we set the note as seen, so we count this as a success } - return api_format_data('result', $type, array('result' => "success")); + return api_format_data('result', $type, ['result' => "success"]); } /// @TODO move to top of file or somewhere better @@ -5713,8 +5719,8 @@ function api_friendica_direct_messages_setseen($type) // return error if id is zero if ($id == "") { - $answer = array('result' => 'error', 'message' => 'message id not specified'); - return api_format_data("direct_messages_setseen", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'message id not specified']; + return api_format_data("direct_messages_setseen", $type, ['$result' => $answer]); } // get data of the specified message id @@ -5726,8 +5732,8 @@ function api_friendica_direct_messages_setseen($type) // error message if specified id is not in database if (!DBM::is_result($r)) { - $answer = array('result' => 'error', 'message' => 'message id not in database'); - return api_format_data("direct_messages_setseen", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'message id not in database']; + return api_format_data("direct_messages_setseen", $type, ['$result' => $answer]); } // update seen indicator @@ -5739,11 +5745,11 @@ function api_friendica_direct_messages_setseen($type) if ($result) { // return success - $answer = array('result' => 'ok', 'message' => 'message set to seen'); - return api_format_data("direct_message_setseen", $type, array('$result' => $answer)); + $answer = ['result' => 'ok', 'message' => 'message set to seen']; + return api_format_data("direct_message_setseen", $type, ['$result' => $answer]); } else { - $answer = array('result' => 'error', 'message' => 'unknown error'); - return api_format_data("direct_messages_setseen", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'unknown error']; + return api_format_data("direct_messages_setseen", $type, ['$result' => $answer]); } } @@ -5754,11 +5760,12 @@ api_register_func('api/friendica/direct_messages_setseen', 'api_friendica_direct * @brief search for direct_messages containing a searchstring through api * * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @param string $box * @return string (success: success=true if found and search_result contains found messages, * success=false if nothing was found, search_result='nothing found', * error: result=error with error message) */ -function api_friendica_direct_messages_search($type) +function api_friendica_direct_messages_search($type, $box = "") { $a = get_app(); @@ -5773,8 +5780,8 @@ function api_friendica_direct_messages_search($type) // error if no searchstring specified if ($searchstring == "") { - $answer = array('result' => 'error', 'message' => 'searchstring not specified'); - return api_format_data("direct_messages_search", $type, array('$result' => $answer)); + $answer = ['result' => 'error', 'message' => 'searchstring not specified']; + return api_format_data("direct_messages_search", $type, ['$result' => $answer]); } // get data for the specified searchstring @@ -5788,11 +5795,11 @@ function api_friendica_direct_messages_search($type) // message if nothing was found if (!DBM::is_result($r)) { - $success = array('success' => false, 'search_results' => 'problem with query'); + $success = ['success' => false, 'search_results' => 'problem with query']; } elseif (count($r) == 0) { - $success = array('success' => false, 'search_results' => 'nothing found'); + $success = ['success' => false, 'search_results' => 'nothing found']; } else { - $ret = array(); + $ret = []; foreach ($r as $item) { if ($box == "inbox" || $item['from-url'] != $profile_url) { $recipient = $user_info; @@ -5804,10 +5811,10 @@ function api_friendica_direct_messages_search($type) $ret[] = api_format_messages($item, $recipient, $sender); } - $success = array('success' => true, 'search_results' => $ret); + $success = ['success' => true, 'search_results' => $ret]; } - return api_format_data("direct_message_search", $type, array('$result' => $success)); + return api_format_data("direct_message_search", $type, ['$result' => $success]); } /// @TODO move to top of file or somewhere better @@ -5858,7 +5865,7 @@ function api_friendica_profile_show($type) $profile = api_format_items_profiles($rr); // select all users from contact table, loop and prepare standard return for user data - $users = array(); + $users = []; $r = q( "SELECT `id`, `nurl` FROM `contact` WHERE `uid`= %d AND `profile-id` = %d", intval(api_user()), @@ -5882,11 +5889,11 @@ function api_friendica_profile_show($type) // return settings, authenticated user and profiles data $self = q("SELECT `nurl` FROM `contact` WHERE `uid`= %d AND `self` LIMIT 1", intval(api_user())); - $result = array('multi_profiles' => $multi_profiles ? true : false, + $result = ['multi_profiles' => $multi_profiles ? true : false, 'global_dir' => $directory, 'friendica_owner' => api_get_user($a, $self[0]['nurl']), - 'profiles' => $profiles); - return api_format_data("friendica_profiles", $type, array('$result' => $result)); + 'profiles' => $profiles]; + return api_format_data("friendica_profiles", $type, ['$result' => $result]); } api_register_func('api/friendica/profile/show', 'api_friendica_profile_show', true, API_METHOD_GET); @@ -5901,21 +5908,23 @@ api_register_func('api/friendica/profile/show', 'api_friendica_profile_show', tr */ function api_saved_searches_list($type) { - $terms = dba::select('search', array('id', 'term'), array('uid' => local_user())); + $terms = dba::select('search', ['id', 'term'], ['uid' => local_user()]); - $result = array(); + $result = []; while ($term = $terms->fetch()) { - $result[] = array( - 'name' => $term['term'], - 'query' => $term['term'], + $result[] = [ + 'created_at' => api_date(time()), + 'id' => intval($term['id']), 'id_str' => $term['id'], - 'id' => intval($term['id']) - ); + 'name' => $term['term'], + 'position' => null, + 'query' => $term['term'] + ]; } dba::close($terms); - return api_format_data("terms", $type, array('terms' => $result)); + return api_format_data("terms", $type, ['terms' => $result]); } /// @TODO move to top of file or somewhere better