Files
doitinpoland.com/wp-content/plugins/wpml-translation-management/inc/translation-proxy/translationproxy-api.class.php
2023-09-12 21:41:04 +02:00

150 lines
3.6 KiB
PHP

<?php
/**
* @package wpml-core
* @subpackage wpml-core
*/
class TranslationProxy_Api {
const API_VERSION = 1.1;
public static function proxy_request(
$path,
$params = array(),
$method = 'GET',
$multi_part = false,
$has_return_value = true
) {
return wpml_tm_load_tp_networking()->send_request(
OTG_TRANSLATION_PROXY_URL . $path,
$params,
$method,
$has_return_value
);
}
public static function proxy_download( $path, $params ) {
return wpml_tm_load_tp_networking()->send_request(
OTG_TRANSLATION_PROXY_URL . $path,
$params,
'GET',
true,
false
);
}
public static function service_request(
$url,
$params = array(),
$method = 'GET',
$has_return_value = true,
$json_response = false,
$has_api_response = false
) {
return wpml_tm_load_tp_networking()->send_request(
$url,
$params,
$method,
$has_return_value,
$json_response,
$has_api_response
);
}
public static function add_parameters_to_url( $url, $params ) {
if ( preg_match_all( '/\{.+?\}/', $url, $symbs ) ) {
foreach ( $symbs[0] as $symb ) {
$without_braces = preg_replace( '/\{|\}/', '', $symb );
if ( preg_match_all( '/\w+/', $without_braces, $indexes ) ) {
foreach ( $indexes[0] as $index ) {
if ( isset( $params[ $index ] ) ) {
$value = $params[ $index ];
$url = preg_replace( preg_quote( "/$symb/" ), $value, $url );
}
}
}
}
}
return $url;
}
}
if ( ! function_exists( 'gzdecode' ) ) {
/**
* Inflates a string enriched with gzip headers. Counterpart to gzencode().
* Extracted from upgradephp
* http://include-once.org/p/upgradephp/
*
* officially available by default in php @since 5.4.
*/
function gzdecode( $gzdata, $maxlen = null ) {
// -- decode header
$len = strlen( $gzdata );
if ( $len < 20 ) {
return;
}
$head = substr( $gzdata, 0, 10 );
$head = unpack( 'n1id/C1cm/C1flg/V1mtime/C1xfl/C1os', $head );
list( $ID, $CM, $FLG, $MTIME, $XFL, $OS ) = array_values( $head );
$FTEXT = 1 << 0;
$FHCRC = 1 << 1;
$FEXTRA = 1 << 2;
$FNAME = 1 << 3;
$FCOMMENT = 1 << 4;
$head = unpack( 'V1crc/V1isize', substr( $gzdata, $len - 8, 8 ) );
list( $CRC32, $ISIZE ) = array_values( $head );
// -- check gzip stream identifier
if ( $ID != 0x1f8b ) {
trigger_error( 'gzdecode: not in gzip format', E_USER_WARNING );
return;
}
// -- check for deflate algorithm
if ( $CM != 8 ) {
trigger_error( 'gzdecode: cannot decode anything but deflated streams', E_USER_WARNING );
return;
}
// -- start of data, skip bonus fields
$s = 10;
if ( $FLG & $FEXTRA ) {
$s += $XFL;
}
if ( $FLG & $FNAME ) {
$s = strpos( $gzdata, "\000", $s ) + 1;
}
if ( $FLG & $FCOMMENT ) {
$s = strpos( $gzdata, "\000", $s ) + 1;
}
if ( $FLG & $FHCRC ) {
$s += 2; // cannot check
}
// -- get data, uncompress
$gzdata = substr( $gzdata, $s, $len - $s );
if ( $maxlen ) {
$gzdata = gzinflate( $gzdata, $maxlen );
return ( $gzdata ); // no checks(?!)
} else {
$gzdata = gzinflate( $gzdata );
}
// -- check+fin
$chk = crc32( $gzdata );
if ( $CRC32 != $chk ) {
trigger_error( "gzdecode: checksum failed (real$chk != comp$CRC32)", E_USER_WARNING );
} elseif ( $ISIZE != strlen( $gzdata ) ) {
trigger_error( 'gzdecode: stream size mismatch', E_USER_WARNING );
} else {
return ( $gzdata );
}
}
}