| | |
| | | namespace JVBase\blocks; |
| | | |
| | | use JVBase\managers\Cache; |
| | | use JVBase\forms\TaxonomySelector; |
| | | use WP_Block; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | |
| | | |
| | | public function __construct() |
| | | { |
| | | $this->cache = Cache::for('summary_block', WEEK_IN_SECONDS); |
| | | $this->cache = Cache::for('summary_block', 'post', WEEK_IN_SECONDS); |
| | | add_action('init', [ $this, 'registerBlock' ]); |
| | | add_action('wp_enqueue_scripts', [$this, 'enqueueScripts']); |
| | | if (JVB_TESTING) { |
| | | $this->cache->flush(); |
| | | } |
| | | |
| | | } |
| | | |
| | | public function registerBlock() |
| | |
| | | return (is_tax()) ? 'tax' : 'content'; |
| | | } |
| | | |
| | | protected function generateKey():string |
| | | { |
| | | $obj = get_queried_object(); |
| | | return match (true) { |
| | | is_tax() => jvbNoBase($obj->taxonomy) . $obj->term_id, |
| | | is_a($obj, 'WP_Post_type') => jvbNoBase($obj->name), |
| | | is_a($obj, 'WP_User') => jvbUserRole($obj->ID), |
| | | default => jvbNoBase($obj->post_type) . $obj->ID, |
| | | }; |
| | | } |
| | | |
| | | public function render(array $attributes, string $content, WP_Block $block) |
| | | { |
| | | $this->config = $this->getConfig(); |
| | | $key = $this->generateKey(); |
| | | $cache = $this->cache->get($key); |
| | | |
| | | if (is_tax()) { |
| | | $this->cache = Cache::for('summary_tax', 'term', WEEK_IN_SECONDS); |
| | | } elseif (is_author()) { |
| | | $this->cache = Cache::for('summary_auth', 'user', WEEK_IN_SECONDS); |
| | | } else { |
| | | $this->cache = Cache::for('summary_post', 'post', WEEK_IN_SECONDS); |
| | | } |
| | | |
| | | $cache = $this->cache->get(get_queried_object_id()); |
| | | |
| | | if ($cache) { |
| | | return $cache; |
| | |
| | | ob_start(); |
| | | $this->renderBlock(); |
| | | $content = ob_get_clean(); |
| | | $this->cache->set($key, $content); |
| | | $this->cache->set(get_queried_object_id(), $content); |
| | | return $content; |
| | | } |
| | | |
| | |
| | | } |
| | | $open = $this->isOpen ? ' open' : ''; |
| | | ?> |
| | | <details class="info"<?=$open?>> |
| | | <section><details class="info"<?=$open?>> |
| | | <summary class="row x-btw"><?= $this->detailsTitle ?></summary> |
| | | <?php |
| | | foreach ($this->details as $key => $details) { |
| | |
| | | <?php |
| | | } |
| | | ?> |
| | | </details> |
| | | </details></section> |
| | | <?php |
| | | } |
| | | |