| | |
| | | <?php |
| | | namespace JVBase\forms; |
| | | |
| | | use JVBase\managers\CacheManager; |
| | | use JVBase\managers\Cache; |
| | | use JVBase\managers\Roles; |
| | | use WP_REST_Request; |
| | | use WP_REST_Response; |
| | | use WP_Query; |
| | |
| | | { |
| | | protected string $post_type; |
| | | protected array $config; |
| | | protected CacheManager $cache; |
| | | protected Cache $cache; |
| | | |
| | | public function __construct(string $post_type, array $config = []) |
| | | { |
| | | $this->post_type = $post_type; |
| | | $this->cache = new CacheManager('posts'); |
| | | $this->cache = Cache::for(jvbNoBase($post_type), 'post',WEEK_IN_SECONDS); |
| | | |
| | | $this->config = wp_parse_args($config, [ |
| | | 'multiple' => true, |
| | |
| | | */ |
| | | public function render(array $selected = [], string $containerId = ''): string |
| | | { |
| | | // Mark that selectors are present for footer output |
| | | TaxonomySelector::markSelectorsPresent(); |
| | | |
| | | // Process selected posts |
| | | $processedSelected = $this->processSelectedPosts($selected); |
| | | |
| | |
| | | } |
| | | |
| | | // Check cache |
| | | $cache_key = $this->cache->generateKey($args); |
| | | $cached_result = $this->cache->get($cache_key); |
| | | |
| | | $cached_result = $this->cache->get($args); |
| | | if ($cached_result) { |
| | | return new WP_REST_Response($cached_result); |
| | | } |
| | |
| | | ]; |
| | | |
| | | // Cache the result |
| | | $this->cache->set($cache_key, $result, 300); // 5 minute cache |
| | | $this->cache->set($args, $result, 300); // 5 minute cache |
| | | |
| | | return new WP_REST_Response($result); |
| | | } |
| | |
| | | 'methods' => 'GET', |
| | | 'callback' => [new self('post'), 'searchPosts'], |
| | | 'permission_callback' => function($request) { |
| | | return JVB()->roles()->checkRole(get_current_user(), $request->get_param('post_type')); |
| | | return Roles::getInstance()()->checkRole(get_current_user(), $request->get_param('post_type')); |
| | | }, |
| | | 'args' => [ |
| | | 'post_type' => [ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Render post selector field for MetaForm integration |
| | | * Render post selector field for Meta's Form integration |
| | | * |
| | | * @param string $name Field name |
| | | * @param mixed $value Current value |