/home/tuzdhajd/tuzdayscloset.com/wp-content/plugins/brizy-pro/content/placeholders/post-loop.php
<?php

use BrizyPlaceholders\ContentPlaceholder;
use BrizyPlaceholders\ContextInterface;

class BrizyPro_Content_Placeholders_PostLoop extends BrizyPro_Content_Placeholders_AbstractPostLoop
{
	/**
	 * BrizyPro_Content_Placeholders_PostLoop constructor.
     *
     * @param string $label
     * @param string $placeholder
     *
	 * @throws Exception
	 */
    public function __construct( $label, $placeholder )
    {
        $this->setLabel($label);
        $this->setPlaceholder($placeholder);
        $this->setDisplay(self::DISPLAY_BLOCK);
        $this->setGroup(null);
    }

    private function getDynamicContentConfig(Brizy_Content_Context $context)
    {
        $provider = new Brizy_Content_PlaceholderProvider($context);
        return $provider->getGroupedPlaceholdersForApiResponse();
    }

    /**
     * @param ContextInterface $context
     * @param ContentPlaceholder $contentPlaceholder
     * @return false|mixed|string
     */
    public function getValue(ContextInterface $context, ContentPlaceholder $contentPlaceholder)
    {
		global $post;

        $attributes = $contentPlaceholder->getAttributes();
	    $attributes = array_map( function ( $value ) {
		    return html_entity_decode( $value, ENT_QUOTES );
	    }, $attributes );

        $posts = $this->getPosts($attributes);
        $content = '';

        // that is bad.. but there is no easy way to return ids instead of content
        if (isset($attributes['content_type']) && $attributes['content_type'] === 'json') {
            return json_encode([
                'collection' => $posts,
                'config' => ['*' => ['dynamicContent' => $this->getDynamicContentConfig($context)]]
            ]);
        }

        //$placeholderProvider = new Brizy_Content_PlaceholderProvider( $context );
        //$extractor           = new \BrizyPlaceholders\Extractor( $context->getProvider() );
        //list( $contentPlaceholders, $placeholderInstances, $newContent ) = $extractor->extract( $content );
        $replacer = new \BrizyPlaceholders\Replacer($context->getProvider());

        foreach ((array)$posts as $postId) {

            // this method will initialize the WP_Post instance avoiding the adding it to cache
            // this way we avoid huge memory usage..
            $_post = $this->getWpPostInstance($postId);

	        if ( ! $_post ) {
		        continue;
	        }

			$post = $_post;

			unset( $_post );

	        setup_postdata( $post );



            $newContext = Brizy_Content_ContextFactory::createContext($context->getProject(), null, $post, null, true);
            $newContext->setProvider($context->getProvider());
            Brizy_Content_ContextFactory::makeContextGlobal($newContext);

	        $content .= do_shortcode( $replacer->replacePlaceholders( $contentPlaceholder->getContent(), $newContext ) );

            Brizy_Content_ContextFactory::clearGlobalContext();

			wp_reset_postdata();
        }

        return $content;
    }

    /**
     * @return mixed|string
     */
    protected function getOptionValue()
    {
        return $this->getReplacePlaceholder();
    }

}