shell bypass 403
<?php
namespace Happy_Addons\Elementor\Classes;
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
}
class Conditions_Cache {
private static $instance = null;
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
const OPTION_NAME = 'happy_theme_elements_conditions';
protected $conditions = [];
public function __construct() {
$this->refresh();
}
/**
* @param Theme_Document $document
* @param array $conditions
*
* @return $this
*/
public function add($location, $post_id, array $conditions) {
if ($location) {
if (is_array($this->conditions) && !isset($this->conditions[$location])) {
$this->conditions[$location] = [];
}
$this->conditions[$location][$post_id] = $conditions;
}
return $this;
}
/**
* @param int $post_id
*
* @return $this
*/
public function remove($post_id) {
$post_id = absint($post_id);
foreach ($this->conditions as $location => $templates) {
foreach ($templates as $id => $template) {
if ($post_id === $id) {
unset($this->conditions[$location][$id]);
}
}
}
return $this;
}
/**
* @param Theme_Document $document
* @param array $conditions
*
* @return $this
*/
public function update($location, $post_id, $conditions) {
return $this->remove($post_id)->add($location, $post_id, $conditions);
}
public function save() {
return update_option(self::OPTION_NAME, $this->conditions);
}
public function refresh() {
$this->conditions = get_option(self::OPTION_NAME, []);
return $this;
}
public function clear() {
$this->conditions = [];
return $this;
}
public function get_by_location($location) {
if (isset($this->conditions[$location])) {
return $this->conditions[$location];
}
return [];
}
public function regenerate() {
$this->clear();
$document_types = array_keys(Theme_Builder::get_template_types());
$post_types = [
Theme_Builder::CPT,
];
$query = new \WP_Query([
'posts_per_page' => -1,
'post_type' => $post_types,
'fields' => 'ids',
'meta_key' => '_ha_display_cond',
]);
foreach ($query->posts as $post_id) {
$conditions = get_post_meta($post_id,'_ha_display_cond',true);
$location = get_post_meta($post_id,'_ha_library_type',true);
$this->add($location, $post_id, $conditions);
}
$this->save();
return $this;
}
}