Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack
File: class.json-api.php
}
[1000] Fix | Delete
[1001] Fix | Delete
/**
[1002] Fix | Delete
* Returns true if the specified blog ID is a restricted blog
[1003] Fix | Delete
*
[1004] Fix | Delete
* @param int $blog_id Blog ID.
[1005] Fix | Delete
* @return bool
[1006] Fix | Delete
*/
[1007] Fix | Delete
public function is_restricted_blog( $blog_id ) {
[1008] Fix | Delete
/**
[1009] Fix | Delete
* Filters all REST API access and return a 403 unauthorized response for all Restricted blog IDs.
[1010] Fix | Delete
*
[1011] Fix | Delete
* @module json-api
[1012] Fix | Delete
*
[1013] Fix | Delete
* @since 3.4.0
[1014] Fix | Delete
*
[1015] Fix | Delete
* @param array $array Array of Blog IDs.
[1016] Fix | Delete
*/
[1017] Fix | Delete
$restricted_blog_ids = apply_filters( 'wpcom_json_api_restricted_blog_ids', array() );
[1018] Fix | Delete
return true === in_array( $blog_id, $restricted_blog_ids ); // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict -- I don't trust filters to return the right types.
[1019] Fix | Delete
}
[1020] Fix | Delete
[1021] Fix | Delete
/**
[1022] Fix | Delete
* Post like count.
[1023] Fix | Delete
*
[1024] Fix | Delete
* @param int $blog_id Blog ID.
[1025] Fix | Delete
* @param int $post_id Post ID.
[1026] Fix | Delete
* @return int
[1027] Fix | Delete
*/
[1028] Fix | Delete
public function post_like_count( $blog_id, $post_id ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
[1029] Fix | Delete
return 0;
[1030] Fix | Delete
}
[1031] Fix | Delete
[1032] Fix | Delete
/**
[1033] Fix | Delete
* Is liked?
[1034] Fix | Delete
*
[1035] Fix | Delete
* @param int $blog_id Blog ID.
[1036] Fix | Delete
* @param int $post_id Post ID.
[1037] Fix | Delete
* @return bool
[1038] Fix | Delete
*/
[1039] Fix | Delete
public function is_liked( $blog_id, $post_id ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
[1040] Fix | Delete
return false;
[1041] Fix | Delete
}
[1042] Fix | Delete
[1043] Fix | Delete
/**
[1044] Fix | Delete
* Is reblogged?
[1045] Fix | Delete
*
[1046] Fix | Delete
* @param int $blog_id Blog ID.
[1047] Fix | Delete
* @param int $post_id Post ID.
[1048] Fix | Delete
* @return bool
[1049] Fix | Delete
*/
[1050] Fix | Delete
public function is_reblogged( $blog_id, $post_id ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
[1051] Fix | Delete
return false;
[1052] Fix | Delete
}
[1053] Fix | Delete
[1054] Fix | Delete
/**
[1055] Fix | Delete
* Is following?
[1056] Fix | Delete
*
[1057] Fix | Delete
* @param int $blog_id Blog ID.
[1058] Fix | Delete
* @return bool
[1059] Fix | Delete
*/
[1060] Fix | Delete
public function is_following( $blog_id ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
[1061] Fix | Delete
return false;
[1062] Fix | Delete
}
[1063] Fix | Delete
[1064] Fix | Delete
/**
[1065] Fix | Delete
* Add global ID.
[1066] Fix | Delete
*
[1067] Fix | Delete
* @param int $blog_id Blog ID.
[1068] Fix | Delete
* @param int $post_id Post ID.
[1069] Fix | Delete
* @return string
[1070] Fix | Delete
*/
[1071] Fix | Delete
public function add_global_ID( $blog_id, $post_id ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable, WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
[1072] Fix | Delete
return '';
[1073] Fix | Delete
}
[1074] Fix | Delete
[1075] Fix | Delete
/**
[1076] Fix | Delete
* Return a count of comment likes.
[1077] Fix | Delete
* This method is overridden by a child class in WPCOM.
[1078] Fix | Delete
*
[1079] Fix | Delete
* @since 13.5
[1080] Fix | Delete
* @return int
[1081] Fix | Delete
*/
[1082] Fix | Delete
public function comment_like_count() {
[1083] Fix | Delete
func_get_args(); // @phan-suppress-current-line PhanPluginUseReturnValueInternalKnown -- This is just here so Phan realizes the wpcom version does this.
[1084] Fix | Delete
return 0;
[1085] Fix | Delete
}
[1086] Fix | Delete
[1087] Fix | Delete
/**
[1088] Fix | Delete
* Get avatar URL.
[1089] Fix | Delete
*
[1090] Fix | Delete
* @param string $email Email.
[1091] Fix | Delete
* @param array $args Args for `get_avatar_url()`.
[1092] Fix | Delete
* @return string|false
[1093] Fix | Delete
*/
[1094] Fix | Delete
public function get_avatar_url( $email, $args = null ) {
[1095] Fix | Delete
if ( function_exists( 'wpcom_get_avatar_url' ) ) {
[1096] Fix | Delete
$ret = wpcom_get_avatar_url( $email, $args['size'] ?? 96, $args['default'] ?? '', false, $args['force_default'] ?? false );
[1097] Fix | Delete
return $ret ? $ret[0] : false;
[1098] Fix | Delete
} else {
[1099] Fix | Delete
return null === $args
[1100] Fix | Delete
? get_avatar_url( $email )
[1101] Fix | Delete
: get_avatar_url( $email, $args );
[1102] Fix | Delete
}
[1103] Fix | Delete
}
[1104] Fix | Delete
[1105] Fix | Delete
/**
[1106] Fix | Delete
* Counts the number of comments on a site, including certain comment types.
[1107] Fix | Delete
*
[1108] Fix | Delete
* @param int $post_id Post ID.
[1109] Fix | Delete
* @return array Array of counts, matching the output of https://developer.wordpress.org/reference/functions/get_comment_count/.
[1110] Fix | Delete
*/
[1111] Fix | Delete
public function wp_count_comments( $post_id ) {
[1112] Fix | Delete
global $wpdb;
[1113] Fix | Delete
if ( 0 !== $post_id ) {
[1114] Fix | Delete
return wp_count_comments( $post_id );
[1115] Fix | Delete
}
[1116] Fix | Delete
[1117] Fix | Delete
$counts = array(
[1118] Fix | Delete
'total_comments' => 0,
[1119] Fix | Delete
'all' => 0,
[1120] Fix | Delete
);
[1121] Fix | Delete
[1122] Fix | Delete
/**
[1123] Fix | Delete
* Exclude certain comment types from comment counts in the REST API.
[1124] Fix | Delete
*
[1125] Fix | Delete
* @since 6.9.0
[1126] Fix | Delete
* @deprecated 11.1
[1127] Fix | Delete
* @module json-api
[1128] Fix | Delete
*
[1129] Fix | Delete
* @param array Array of comment types to exclude (default: 'order_note', 'webhook_delivery', 'review', 'action_log')
[1130] Fix | Delete
*/
[1131] Fix | Delete
$exclude = apply_filters_deprecated( 'jetpack_api_exclude_comment_types_count', array( 'order_note', 'webhook_delivery', 'review', 'action_log' ), 'jetpack-11.1', 'jetpack_api_include_comment_types_count' ); // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
[1132] Fix | Delete
[1133] Fix | Delete
/**
[1134] Fix | Delete
* Include certain comment types in comment counts in the REST API.
[1135] Fix | Delete
* Note: the default array of comment types includes an empty string,
[1136] Fix | Delete
* to support comments posted before WP 5.5, that used an empty string as comment type.
[1137] Fix | Delete
*
[1138] Fix | Delete
* @since 11.1
[1139] Fix | Delete
* @module json-api
[1140] Fix | Delete
*
[1141] Fix | Delete
* @param array Array of comment types to include (default: 'comment', 'pingback', 'trackback')
[1142] Fix | Delete
*/
[1143] Fix | Delete
$include = apply_filters(
[1144] Fix | Delete
'jetpack_api_include_comment_types_count',
[1145] Fix | Delete
array( 'comment', 'pingback', 'trackback', '' )
[1146] Fix | Delete
);
[1147] Fix | Delete
[1148] Fix | Delete
if ( empty( $include ) ) {
[1149] Fix | Delete
return wp_count_comments( $post_id );
[1150] Fix | Delete
}
[1151] Fix | Delete
[1152] Fix | Delete
// The following caching mechanism is based on what the get_comments() function uses.
[1153] Fix | Delete
[1154] Fix | Delete
$key = md5( serialize( $include ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
[1155] Fix | Delete
$last_changed = wp_cache_get_last_changed( 'comment' );
[1156] Fix | Delete
[1157] Fix | Delete
$cache_key = "wp_count_comments:$key:$last_changed";
[1158] Fix | Delete
$count = wp_cache_get( $cache_key, 'jetpack-json-api' );
[1159] Fix | Delete
[1160] Fix | Delete
if ( false === $count ) {
[1161] Fix | Delete
array_walk( $include, 'esc_sql' );
[1162] Fix | Delete
$where = sprintf(
[1163] Fix | Delete
"WHERE comment_type IN ( '%s' )",
[1164] Fix | Delete
implode( "','", $include )
[1165] Fix | Delete
);
[1166] Fix | Delete
[1167] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- `$where` is built with escaping just above.
[1168] Fix | Delete
$count = $wpdb->get_results(
[1169] Fix | Delete
"SELECT comment_approved, COUNT(*) AS num_comments
[1170] Fix | Delete
FROM $wpdb->comments
[1171] Fix | Delete
{$where}
[1172] Fix | Delete
GROUP BY comment_approved
[1173] Fix | Delete
"
[1174] Fix | Delete
);
[1175] Fix | Delete
// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[1176] Fix | Delete
[1177] Fix | Delete
wp_cache_add( $cache_key, $count, 'jetpack-json-api' );
[1178] Fix | Delete
}
[1179] Fix | Delete
[1180] Fix | Delete
$approved = array(
[1181] Fix | Delete
'0' => 'moderated',
[1182] Fix | Delete
'1' => 'approved',
[1183] Fix | Delete
'spam' => 'spam',
[1184] Fix | Delete
'trash' => 'trash',
[1185] Fix | Delete
'post-trashed' => 'post-trashed',
[1186] Fix | Delete
);
[1187] Fix | Delete
[1188] Fix | Delete
// <https://developer.wordpress.org/reference/functions/get_comment_count/#source>
[1189] Fix | Delete
foreach ( $count as $row ) {
[1190] Fix | Delete
if ( ! in_array( $row->comment_approved, array( 'post-trashed', 'trash', 'spam' ), true ) ) {
[1191] Fix | Delete
$counts['all'] += $row->num_comments;
[1192] Fix | Delete
$counts['total_comments'] += $row->num_comments;
[1193] Fix | Delete
} elseif ( ! in_array( $row->comment_approved, array( 'post-trashed', 'trash' ), true ) ) {
[1194] Fix | Delete
$counts['total_comments'] += $row->num_comments;
[1195] Fix | Delete
}
[1196] Fix | Delete
if ( isset( $approved[ $row->comment_approved ] ) ) {
[1197] Fix | Delete
$counts[ $approved[ $row->comment_approved ] ] = $row->num_comments;
[1198] Fix | Delete
}
[1199] Fix | Delete
}
[1200] Fix | Delete
[1201] Fix | Delete
foreach ( $approved as $key ) {
[1202] Fix | Delete
if ( empty( $counts[ $key ] ) ) {
[1203] Fix | Delete
$counts[ $key ] = 0;
[1204] Fix | Delete
}
[1205] Fix | Delete
}
[1206] Fix | Delete
[1207] Fix | Delete
$counts = (object) $counts;
[1208] Fix | Delete
[1209] Fix | Delete
return $counts;
[1210] Fix | Delete
}
[1211] Fix | Delete
[1212] Fix | Delete
/**
[1213] Fix | Delete
* Traps `wp_die()` calls and outputs a JSON response instead.
[1214] Fix | Delete
* The result is always output, never returned.
[1215] Fix | Delete
*
[1216] Fix | Delete
* @param string|null $error_code Call with string to start the trapping. Call with null to stop.
[1217] Fix | Delete
* @param int $http_status HTTP status code, 400 by default.
[1218] Fix | Delete
*/
[1219] Fix | Delete
public function trap_wp_die( $error_code = null, $http_status = 400 ) {
[1220] Fix | Delete
// Determine the filter name; based on the conditionals inside the wp_die function.
[1221] Fix | Delete
if ( wp_is_json_request() ) {
[1222] Fix | Delete
$die_handler = 'wp_die_json_handler';
[1223] Fix | Delete
} elseif ( wp_is_jsonp_request() ) {
[1224] Fix | Delete
$die_handler = 'wp_die_jsonp_handler';
[1225] Fix | Delete
} elseif ( wp_is_xml_request() ) {
[1226] Fix | Delete
$die_handler = 'wp_die_xml_handler';
[1227] Fix | Delete
} else {
[1228] Fix | Delete
$die_handler = 'wp_die_handler';
[1229] Fix | Delete
}
[1230] Fix | Delete
[1231] Fix | Delete
if ( $error_code === null ) {
[1232] Fix | Delete
$this->trapped_error = null;
[1233] Fix | Delete
// Stop trapping.
[1234] Fix | Delete
remove_filter( $die_handler, array( $this, 'wp_die_handler_callback' ) );
[1235] Fix | Delete
return;
[1236] Fix | Delete
}
[1237] Fix | Delete
[1238] Fix | Delete
// If API called via PHP, bail: don't do our custom wp_die(). Do the normal wp_die().
[1239] Fix | Delete
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
[1240] Fix | Delete
if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST ) {
[1241] Fix | Delete
return;
[1242] Fix | Delete
}
[1243] Fix | Delete
} elseif ( ! defined( 'XMLRPC_REQUEST' ) || ! XMLRPC_REQUEST ) {
[1244] Fix | Delete
return;
[1245] Fix | Delete
}
[1246] Fix | Delete
[1247] Fix | Delete
$this->trapped_error = array(
[1248] Fix | Delete
'status' => $http_status,
[1249] Fix | Delete
'code' => $error_code,
[1250] Fix | Delete
'message' => '',
[1251] Fix | Delete
);
[1252] Fix | Delete
// Start trapping.
[1253] Fix | Delete
add_filter( $die_handler, array( $this, 'wp_die_handler_callback' ) );
[1254] Fix | Delete
}
[1255] Fix | Delete
[1256] Fix | Delete
/**
[1257] Fix | Delete
* Filter function for `wp_die_handler` and similar filters.
[1258] Fix | Delete
*
[1259] Fix | Delete
* @return callable
[1260] Fix | Delete
*/
[1261] Fix | Delete
public function wp_die_handler_callback() {
[1262] Fix | Delete
return array( $this, 'wp_die_handler' );
[1263] Fix | Delete
}
[1264] Fix | Delete
[1265] Fix | Delete
/**
[1266] Fix | Delete
* Handler for `wp_die` calls.
[1267] Fix | Delete
*
[1268] Fix | Delete
* @param string|WP_Error $message As for `wp_die()`.
[1269] Fix | Delete
* @param string|int $title As for `wp_die()`.
[1270] Fix | Delete
* @param string|array|int $args As for `wp_die()`.
[1271] Fix | Delete
* @return never
[1272] Fix | Delete
*/
[1273] Fix | Delete
public function wp_die_handler( $message, $title = '', $args = array() ) {
[1274] Fix | Delete
// Allow wp_die calls to override HTTP status code...
[1275] Fix | Delete
$args = wp_parse_args(
[1276] Fix | Delete
$args,
[1277] Fix | Delete
array(
[1278] Fix | Delete
'response' => $this->trapped_error['status'],
[1279] Fix | Delete
)
[1280] Fix | Delete
);
[1281] Fix | Delete
[1282] Fix | Delete
// ... unless it's 500
[1283] Fix | Delete
if ( 500 !== (int) $args['response'] ) {
[1284] Fix | Delete
$this->trapped_error['status'] = $args['response'];
[1285] Fix | Delete
}
[1286] Fix | Delete
[1287] Fix | Delete
if ( $title ) {
[1288] Fix | Delete
$message = "$title: $message";
[1289] Fix | Delete
}
[1290] Fix | Delete
[1291] Fix | Delete
$this->trapped_error['message'] = wp_kses( $message, array() );
[1292] Fix | Delete
[1293] Fix | Delete
switch ( $this->trapped_error['code'] ) {
[1294] Fix | Delete
case 'comment_failure':
[1295] Fix | Delete
if ( did_action( 'comment_duplicate_trigger' ) ) {
[1296] Fix | Delete
$this->trapped_error['code'] = 'comment_duplicate';
[1297] Fix | Delete
} elseif ( did_action( 'comment_flood_trigger' ) ) {
[1298] Fix | Delete
$this->trapped_error['code'] = 'comment_flood';
[1299] Fix | Delete
}
[1300] Fix | Delete
break;
[1301] Fix | Delete
}
[1302] Fix | Delete
[1303] Fix | Delete
// We still want to exit so that code execution stops where it should.
[1304] Fix | Delete
// Attach the JSON output to the WordPress shutdown handler.
[1305] Fix | Delete
add_action( 'shutdown', array( $this, 'output_trapped_error' ), 0 );
[1306] Fix | Delete
exit( 0 );
[1307] Fix | Delete
}
[1308] Fix | Delete
[1309] Fix | Delete
/**
[1310] Fix | Delete
* Output the trapped error.
[1311] Fix | Delete
*/
[1312] Fix | Delete
public function output_trapped_error() {
[1313] Fix | Delete
$this->exit = false; // We're already exiting once. Don't do it twice.
[1314] Fix | Delete
$this->output(
[1315] Fix | Delete
$this->trapped_error['status'],
[1316] Fix | Delete
(object) array(
[1317] Fix | Delete
'error' => $this->trapped_error['code'],
[1318] Fix | Delete
'message' => $this->trapped_error['message'],
[1319] Fix | Delete
)
[1320] Fix | Delete
);
[1321] Fix | Delete
}
[1322] Fix | Delete
[1323] Fix | Delete
/**
[1324] Fix | Delete
* Finish the request.
[1325] Fix | Delete
*/
[1326] Fix | Delete
public function finish_request() {
[1327] Fix | Delete
if ( function_exists( 'fastcgi_finish_request' ) ) {
[1328] Fix | Delete
return fastcgi_finish_request();
[1329] Fix | Delete
}
[1330] Fix | Delete
}
[1331] Fix | Delete
[1332] Fix | Delete
/**
[1333] Fix | Delete
* Initialize the locale if different from 'en'.
[1334] Fix | Delete
*
[1335] Fix | Delete
* @param string $locale The locale to initialize.
[1336] Fix | Delete
*/
[1337] Fix | Delete
public function init_locale( $locale ) {
[1338] Fix | Delete
if ( 'en' !== $locale ) {
[1339] Fix | Delete
// .org mo files are named slightly different from .com, and all we have is this the locale -- try to guess them.
[1340] Fix | Delete
$new_locale = $locale;
[1341] Fix | Delete
if ( str_contains( $locale, '-' ) ) {
[1342] Fix | Delete
$locale_pieces = explode( '-', $locale );
[1343] Fix | Delete
$new_locale = $locale_pieces[0];
[1344] Fix | Delete
$new_locale .= ( ! empty( $locale_pieces[1] ) ) ? '_' . strtoupper( $locale_pieces[1] ) : '';
[1345] Fix | Delete
} else { // phpcs:ignore Universal.ControlStructures.DisallowLonelyIf.Found
[1346] Fix | Delete
// .com might pass 'fr' because thats what our language files are named as, where core seems
[1347] Fix | Delete
// to do fr_FR - so try that if we don't think we can load the file.
[1348] Fix | Delete
if ( ! file_exists( WP_LANG_DIR . '/' . $locale . '.mo' ) ) {
[1349] Fix | Delete
$new_locale = $locale . '_' . strtoupper( $locale );
[1350] Fix | Delete
}
[1351] Fix | Delete
}
[1352] Fix | Delete
[1353] Fix | Delete
if ( file_exists( WP_LANG_DIR . '/' . $new_locale . '.mo' ) ) {
[1354] Fix | Delete
unload_textdomain( 'default' );
[1355] Fix | Delete
load_textdomain( 'default', WP_LANG_DIR . '/' . $new_locale . '.mo' );
[1356] Fix | Delete
}
[1357] Fix | Delete
}
[1358] Fix | Delete
}
[1359] Fix | Delete
}
[1360] Fix | Delete
[1361] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function