155 lines
3.7 KiB
PHP
155 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* @package wpml-core
|
|
* @subpackage wpml-core
|
|
*/
|
|
|
|
if( class_exists( 'TranslationProxy_Api' ) ) {
|
|
// Workaround for UnitTests.
|
|
return;
|
|
}
|
|
|
|
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 );
|
|
}
|
|
}
|
|
}
|