Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/elemento.../modules/variable.../storage
File: variables-collection.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace Elementor\Modules\Variables\Storage;
[2] Fix | Delete
[3] Fix | Delete
use Elementor\Core\Utils\Collection;
[4] Fix | Delete
use Elementor\Modules\AtomicWidgets\Utils\Utils;
[5] Fix | Delete
use Elementor\Modules\Variables\Storage\Entities\Variable;
[6] Fix | Delete
use Elementor\Modules\Variables\Storage\Exceptions\DuplicatedLabel;
[7] Fix | Delete
use Elementor\Modules\Variables\Storage\Exceptions\RecordNotFound;
[8] Fix | Delete
use Elementor\Modules\Variables\Storage\Exceptions\VariablesLimitReached;
[9] Fix | Delete
[10] Fix | Delete
/**
[11] Fix | Delete
* TODO: a tradeoff when you want to use collection base methods they are
[12] Fix | Delete
* performing immutable process ( creating new instances )
[13] Fix | Delete
* we will see if we need to extend collection as time goes on
[14] Fix | Delete
*/
[15] Fix | Delete
class Variables_Collection extends Collection {
[16] Fix | Delete
const FORMAT_VERSION_V1 = 1;
[17] Fix | Delete
const FORMAT_VERSION_V2 = 2;
[18] Fix | Delete
const TOTAL_VARIABLES_COUNT = 100;
[19] Fix | Delete
[20] Fix | Delete
private int $watermark;
[21] Fix | Delete
[22] Fix | Delete
private int $version;
[23] Fix | Delete
[24] Fix | Delete
private function __construct( array $items = [], ?int $watermark = 0, ?int $version = null ) {
[25] Fix | Delete
parent::__construct();
[26] Fix | Delete
[27] Fix | Delete
$this->items = $items;
[28] Fix | Delete
$this->watermark = $watermark;
[29] Fix | Delete
$this->version = $version ?? self::FORMAT_VERSION_V1;
[30] Fix | Delete
}
[31] Fix | Delete
[32] Fix | Delete
public static function hydrate( array $record ): self {
[33] Fix | Delete
$variables = [];
[34] Fix | Delete
[35] Fix | Delete
foreach ( $record['data'] ?? [] as $id => $item ) {
[36] Fix | Delete
$data = array_merge( [ 'id' => $id ], $item );
[37] Fix | Delete
[38] Fix | Delete
$variables[ $id ] = Variable::from_array( $data );
[39] Fix | Delete
}
[40] Fix | Delete
[41] Fix | Delete
$watermark = $record['watermark'];
[42] Fix | Delete
$version = $record['version'] ?? null;
[43] Fix | Delete
[44] Fix | Delete
return new self( $variables, $watermark, $version );
[45] Fix | Delete
}
[46] Fix | Delete
[47] Fix | Delete
public function serialize( bool $include_deleted_key = false ): array {
[48] Fix | Delete
$data = [];
[49] Fix | Delete
[50] Fix | Delete
foreach ( $this->all() as $variable ) {
[51] Fix | Delete
$var = $variable->to_array();
[52] Fix | Delete
[53] Fix | Delete
if ( $include_deleted_key && $variable->is_deleted() ) {
[54] Fix | Delete
$var['deleted'] = true;
[55] Fix | Delete
}
[56] Fix | Delete
[57] Fix | Delete
$data[ $variable->id() ] = $var;
[58] Fix | Delete
}
[59] Fix | Delete
[60] Fix | Delete
return [
[61] Fix | Delete
'data' => $data,
[62] Fix | Delete
'watermark' => $this->watermark,
[63] Fix | Delete
'version' => $this->version,
[64] Fix | Delete
];
[65] Fix | Delete
}
[66] Fix | Delete
[67] Fix | Delete
[68] Fix | Delete
public function set_version( $version ): void {
[69] Fix | Delete
$this->version = $version;
[70] Fix | Delete
}
[71] Fix | Delete
[72] Fix | Delete
[73] Fix | Delete
public static function default(): self {
[74] Fix | Delete
return new self(
[75] Fix | Delete
[],
[76] Fix | Delete
0,
[77] Fix | Delete
self::FORMAT_VERSION_V1
[78] Fix | Delete
);
[79] Fix | Delete
}
[80] Fix | Delete
[81] Fix | Delete
public function watermark(): int {
[82] Fix | Delete
return $this->watermark;
[83] Fix | Delete
}
[84] Fix | Delete
[85] Fix | Delete
private function reset_watermark() {
[86] Fix | Delete
$this->watermark = 0;
[87] Fix | Delete
}
[88] Fix | Delete
[89] Fix | Delete
public function increment_watermark() {
[90] Fix | Delete
if ( PHP_INT_MAX === $this->watermark ) {
[91] Fix | Delete
$this->reset_watermark();
[92] Fix | Delete
}
[93] Fix | Delete
[94] Fix | Delete
++$this->watermark;
[95] Fix | Delete
}
[96] Fix | Delete
[97] Fix | Delete
public function add_variable( Variable $variable ): void {
[98] Fix | Delete
$this->items[ $variable->id() ] = $variable;
[99] Fix | Delete
}
[100] Fix | Delete
[101] Fix | Delete
/**
[102] Fix | Delete
* @throws RecordNotFound When a variable is not found.
[103] Fix | Delete
*/
[104] Fix | Delete
public function find_or_fail( string $id ): Variable {
[105] Fix | Delete
$variable = $this->get( $id );
[106] Fix | Delete
[107] Fix | Delete
if ( ! isset( $variable ) ) {
[108] Fix | Delete
throw new RecordNotFound( 'Variable not found' );
[109] Fix | Delete
}
[110] Fix | Delete
[111] Fix | Delete
return $variable;
[112] Fix | Delete
}
[113] Fix | Delete
[114] Fix | Delete
/**
[115] Fix | Delete
* @throws DuplicatedLabel If there is a duplicate label in the database.
[116] Fix | Delete
*/
[117] Fix | Delete
public function assert_label_is_unique( string $label, ?string $ignore_id = null ): void {
[118] Fix | Delete
foreach ( $this->all() as $variable ) {
[119] Fix | Delete
if ( $variable->is_deleted() ) {
[120] Fix | Delete
continue;
[121] Fix | Delete
}
[122] Fix | Delete
[123] Fix | Delete
if ( null !== $ignore_id && $variable->id() === $ignore_id ) {
[124] Fix | Delete
continue;
[125] Fix | Delete
}
[126] Fix | Delete
[127] Fix | Delete
if ( strcasecmp( $variable->label(), $label ) === 0 ) {
[128] Fix | Delete
throw new DuplicatedLabel( esc_html( "Variable label '$label' already exists." ) );
[129] Fix | Delete
}
[130] Fix | Delete
}
[131] Fix | Delete
}
[132] Fix | Delete
[133] Fix | Delete
/**
[134] Fix | Delete
* @throws VariablesLimitReached If variable limit reached.
[135] Fix | Delete
*/
[136] Fix | Delete
public function assert_limit_not_reached(): void {
[137] Fix | Delete
$active_count = 0;
[138] Fix | Delete
[139] Fix | Delete
foreach ( $this->all() as $variable ) {
[140] Fix | Delete
if ( ! $variable->is_deleted() ) {
[141] Fix | Delete
++$active_count;
[142] Fix | Delete
}
[143] Fix | Delete
}
[144] Fix | Delete
[145] Fix | Delete
if ( self::TOTAL_VARIABLES_COUNT <= $active_count ) {
[146] Fix | Delete
throw new VariablesLimitReached( 'Total variables count limit reached' );
[147] Fix | Delete
}
[148] Fix | Delete
}
[149] Fix | Delete
[150] Fix | Delete
public function next_id(): string {
[151] Fix | Delete
return Utils::generate_id( 'e-gv-', array_keys( $this->all() ) );
[152] Fix | Delete
}
[153] Fix | Delete
[154] Fix | Delete
[155] Fix | Delete
public function get_next_order(): int {
[156] Fix | Delete
$highest_order = 0;
[157] Fix | Delete
[158] Fix | Delete
foreach ( $this->all() as $variable ) {
[159] Fix | Delete
if ( $variable->is_deleted() ) {
[160] Fix | Delete
continue;
[161] Fix | Delete
}
[162] Fix | Delete
[163] Fix | Delete
if ( $variable->has_order() && $variable->order() > $highest_order ) {
[164] Fix | Delete
$highest_order = $variable->order();
[165] Fix | Delete
}
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
return $highest_order + 1;
[169] Fix | Delete
}
[170] Fix | Delete
}
[171] Fix | Delete
[172] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function