Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/addons/wpml-page-builders/classes/Shared/tm/class-wpml-tm-page-builders-field-wrapper.php
2023-09-12 21:41:04 +02:00

197 lines
3.9 KiB
PHP

<?php
/**
* WPML_TM_Page_Builders_Field_Wrapper class file.
*
* @package wpml-page-builders
*/
/**
* Class WPML_TM_Page_Builders_Field_Wrapper
*/
class WPML_TM_Page_Builders_Field_Wrapper {
const SLUG_BASE = 'package-string-';
/**
* Field slug.
*
* @var false|string
*/
private $field_slug;
/**
* Package id.
*
* @var string|false|null
*/
private $package_id;
/**
* String id.
*
* @var string|false|null
*/
private $string_id;
/**
* WPML_TM_Page_Builders_Field_Wrapper constructor.
*
* @param string $field_slug Field slug.
*/
public function __construct( $field_slug ) {
$this->field_slug = $field_slug;
}
/**
* Check if package is valid.
*
* @param bool $package_must_exist Demand existence of the package.
*
* @return bool
*/
public function is_valid( $package_must_exist = false ) {
$result = $this->get_package_id() && $this->get_string_id();
if ( $result && $package_must_exist ) {
$result = $this->get_package() !== null;
}
return $result;
}
/**
* Get package id.
*
* @return false|string
*/
public function get_package_id() {
if ( null === $this->package_id ) {
$this->package_id = $this->extract_string_package_id( $this->field_slug );
}
return $this->package_id;
}
/**
* Get package.
*
* @return WPML_Package|null
*/
public function get_package() {
if ( ! $this->get_package_id() ) {
return null;
}
return apply_filters( 'wpml_st_get_string_package', false, $this->get_package_id() );
}
/**
* Get string id.
*
* @return false|string
*/
public function get_string_id() {
if ( null === $this->string_id ) {
$this->string_id = $this->extract_string_id( $this->field_slug );
}
return $this->string_id;
}
/**
* Get field slug.
*
* @return string
*/
public function get_field_slug() {
return $this->field_slug;
}
/**
* Get string type.
*
* @return false|string
*/
public function get_string_type() {
$result = false;
if ( $this->is_valid( true ) ) {
$package_strings = $this->get_package()->get_package_strings();
if ( ! $package_strings ) {
return false;
}
$package_strings = wp_list_pluck( $package_strings, 'type', 'id' );
$result = $package_strings[ $this->get_string_id() ];
}
return $result;
}
/**
* Get string wrap tag.
*
* @param stdClass $string WPML string.
*
* @return string
*/
public static function get_wrap_tag( $string ) {
return isset( $string->wrap_tag ) ? $string->wrap_tag : '';
}
/**
* Generate field slug.
*
* @param int $package_id Package id.
* @param int $string_id String id.
*
* @return string
*/
public static function generate_field_slug( $package_id, $string_id ) {
return self::SLUG_BASE . $package_id . '-' . $string_id;
}
/**
* Extract string id.
*
* @param string $field_slug Field slug.
*
* @return false|string
*/
private function extract_string_id( $field_slug ) {
$result = false;
if ( is_string( $field_slug ) && preg_match( '#^' . self::SLUG_BASE . '#', $field_slug ) ) {
$result = preg_replace( '#^' . self::SLUG_BASE . '([0-9]+)-([0-9]+)$#', '$2', $field_slug, 1 );
}
return is_numeric( $result ) ? $result : false;
}
/**
* Extract string package id.
*
* @param string $field_slug Field slug.
*
* @return false|string
*/
private function extract_string_package_id( $field_slug ) {
$result = false;
if ( is_string( $field_slug ) && preg_match( '#^' . self::SLUG_BASE . '#', $field_slug ) ) {
$result = preg_replace( '#^' . self::SLUG_BASE . '([0-9]+)-([0-9]+)$#', '$1', $field_slug, 1 );
}
return is_numeric( $result ) ? $result : false;
}
/**
* Get string title.
*
* @return string|bool
*/
public function get_string_title() {
if ( null === $this->string_id ) {
$this->string_id = $this->extract_string_id( $this->field_slug );
}
return apply_filters( 'wpml_string_title_from_id', false, $this->string_id );
}
}