You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
cosmopet.ae/wp-content/plugins copy 2/polylang/include/language-deprecated.php

256 lines
7.2 KiB

<?php
/**
* @package Polylang
*/
/**
* Holds everything related to deprecated properties of `PLL_Language`.
*
* @since 3.4
*/
abstract class PLL_Language_Deprecated {
/**
* List of deprecated term properties and related arguments to use with `get_tax_prop()`.
*
* @private
*
* @var string[][]
*/
const DEPRECATED_TERM_PROPERTIES = array(
'term_taxonomy_id' => array( 'language', 'term_taxonomy_id' ),
'count' => array( 'language', 'count' ),
'tl_term_id' => array( 'term_language', 'term_id' ),
'tl_term_taxonomy_id' => array( 'term_language', 'term_taxonomy_id' ),
'tl_count' => array( 'term_language', 'count' ),
);
/**
* List of deprecated URL properties and related getter to use.
*
* @private
*
* @var string[]
*/
const DEPRECATED_URL_PROPERTIES = array(
'home_url' => 'get_home_url',
'search_url' => 'get_search_url',
);
/**
* Returns a language term property value (term ID, term taxonomy ID, or count).
*
* @since 3.4
*
* @param string $taxonomy_name Name of the taxonomy.
* @param string $prop_name Name of the property: 'term_taxonomy_id', 'term_id', 'count'.
* @return int
*
* @phpstan-param non-empty-string $taxonomy_name
* @phpstan-param 'term_taxonomy_id'|'term_id'|'count' $prop_name
* @phpstan-return int<0, max>
*/
abstract public function get_tax_prop( $taxonomy_name, $prop_name );
/**
* Returns language's home URL. Takes care to render it dynamically if no cache is allowed.
*
* @since 3.4
*
* @return string Language home URL.
*
* @phpstan-return non-empty-string
*/
abstract public function get_home_url();
/**
* Returns language's search URL. Takes care to render it dynamically if no cache is allowed.
*
* @since 3.4
*
* @return string Language search URL.
*
* @phpstan-return non-empty-string
*/
abstract public function get_search_url();
/**
* Throws a depreciation notice if someone tries to get one of the following properties:
* `term_taxonomy_id`, `count`, `tl_term_id`, `tl_term_taxonomy_id` or `tl_count`.
*
* Backward compatibility with Polylang < 3.4.
*
* @since 3.4
*
* @param string $property Property to get.
* @return mixed Required property value.
*/
public function __get( $property ) {
// Deprecated property.
if ( $this->is_deprecated_term_property( $property ) ) {
$this->deprecated_property(
$property,
sprintf(
"get_tax_prop( '%s', '%s' )",
self::DEPRECATED_TERM_PROPERTIES[ $property ][0],
self::DEPRECATED_TERM_PROPERTIES[ $property ][1]
)
);
return $this->get_deprecated_term_property( $property );
}
if ( $this->is_deprecated_url_property( $property ) ) {
$this->deprecated_property( $property, "get_{$property}()" );
return $this->get_deprecated_url_property( $property );
}
// Undefined property.
if ( ! property_exists( $this, $property ) ) {
return null;
}
// The property is defined.
$ref = new ReflectionProperty( $this, $property );
// Public property.
if ( $ref->isPublic() ) {
return $this->{$property};
}
// Protected or private property.
$visibility = $ref->isPrivate() ? 'private' : 'protected';
$trace = debug_backtrace(); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection, WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
$file = isset( $trace[0]['file'] ) ? $trace[0]['file'] : '';
$line = isset( $trace[0]['line'] ) ? $trace[0]['line'] : 0;
trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
esc_html(
sprintf(
"Cannot access %s property %s::$%s in %s on line %d.\nError handler",
$visibility,
get_class( $this ),
$property,
$file,
$line
)
),
E_USER_ERROR
);
}
/**
* Checks for a deprecated property.
* Is triggered by calling `isset()` or `empty()` on inaccessible (protected or private) or non-existing properties.
*
* Backward compatibility with Polylang < 3.4.
*
* @since 3.4
*
* @param string $property A property name.
* @return bool
*/
public function __isset( $property ) {
return $this->is_deprecated_term_property( $property ) || $this->is_deprecated_url_property( $property );
}
/**
* Tells if the given term property is deprecated.
*
* @since 3.4
* @see PLL_Language::DEPRECATED_TERM_PROPERTIES for the list of deprecated properties.
*
* @param string $property A property name.
* @return bool
*
* @phpstan-assert-if-true key-of<PLL_Language::DEPRECATED_TERM_PROPERTIES> $property
*/
protected function is_deprecated_term_property( $property ) {
return array_key_exists( $property, self::DEPRECATED_TERM_PROPERTIES );
}
/**
* Returns a deprecated term property's value.
*
* @since 3.4
* @see PLL_Language::DEPRECATED_TERM_PROPERTIES for the list of deprecated properties.
*
* @param string $property A property name.
* @return int
*
* @phpstan-param key-of<PLL_Language::DEPRECATED_TERM_PROPERTIES> $property
* @phpstan-return int<0, max>
*/
protected function get_deprecated_term_property( $property ) {
return $this->get_tax_prop(
self::DEPRECATED_TERM_PROPERTIES[ $property ][0],
self::DEPRECATED_TERM_PROPERTIES[ $property ][1]
);
}
/**
* Tells if the given URL property is deprecated.
*
* @since 3.4
* @see PLL_Language::DEPRECATED_URL_PROPERTIES for the list of deprecated properties.
*
* @param string $property A property name.
* @return bool
*
* @phpstan-assert-if-true key-of<PLL_Language::DEPRECATED_URL_PROPERTIES> $property
*/
protected function is_deprecated_url_property( $property ) {
return array_key_exists( $property, self::DEPRECATED_URL_PROPERTIES );
}
/**
* Returns a deprecated URL property's value.
*
* @since 3.4
* @see PLL_Language::DEPRECATED_URL_PROPERTIES for the list of deprecated properties.
*
* @param string $property A property name.
* @return string
*
* @phpstan-param key-of<PLL_Language::DEPRECATED_URL_PROPERTIES> $property
* @phpstan-return non-empty-string
*/
protected function get_deprecated_url_property( $property ) {
return $this->{self::DEPRECATED_URL_PROPERTIES[ $property ]}();
}
/**
* Triggers a deprecated an error for a deprecated property.
*
* @since 3.4
*
* @param string $property Deprecated property name.
* @param string $replacement Method or property name to use instead.
* @return void
*/
private function deprecated_property( $property, $replacement ) {
/**
* Filters whether to trigger an error for deprecated properties.
*
* The filter name is intentionally not prefixed to use the same as WordPress
* in case it is added in the future.
*
* @since 3.4
*
* @param bool $trigger Whether to trigger the error for deprecated properties. Default true.
*/
if ( ! WP_DEBUG || ! apply_filters( 'deprecated_property_trigger_error', true ) ) {
return;
}
trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
sprintf(
"Class property %1\$s::\$%2\$s is deprecated, use %1\$s::%3\$s instead.\nError handler",
esc_html( get_class( $this ) ),
esc_html( $property ),
esc_html( $replacement )
),
E_USER_DEPRECATED
);
}
}