Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/app/code/Soon/Faq/Block/Question/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/app/code/Soon/Faq/Block/Question/ListQuestion.php
<?php
/**
 * @license http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 * @author Hervé Guétin <[email protected]> <@herveguetin>
 * @copyright Copyright (c) 2016 Agence Soon (http://www.agence-soon.fr)
 */

namespace Soon\Faq\Block\Question;


use Magento\Cms\Model\Template\FilterProvider;
use Magento\Framework\Data\Collection as DataCollection;
use Magento\Framework\Data\CollectionFactory as DataCollectionFactory;
use Magento\Framework\DataObjectFactory;
use Magento\Framework\View\Element\Template;
use Magento\Store\Model\StoreManagerInterface;
use Soon\Faq\Model\Question;
use Soon\Faq\Model\ResourceModel\Question\Collection;
use Soon\Faq\Model\ResourceModel\Question\CollectionFactory;

class ListQuestion extends Template
{
    /**
     * @var CollectionFactory
     */
    private $collectionFactory;
    /**
     * @var array
     */
    private $categoriesWithQuestions = [];
    /**
     * @var DataObjectFactory
     */
    private $dataObjectFactory;
    /**
     * @var DataCollectionFactory
     */
    private $dataCollectionFactory;
    /**
     * @var FilterProvider
     */
    private $filterProvider;
    /**
     * @var StoreManagerInterface
     */
    private $storeManager;
    /**
     * @var Collection
     */
    private $questionCollectionSelect;

    public function __construct(
        Template\Context $context,
        CollectionFactory $collectionFactory,
        DataObjectFactory $dataObjectFactory,
        DataCollectionFactory $dataCollectionFactory,
        FilterProvider $filterProvider,
        array $data = []
    )
    {
        parent::__construct($context, $data);
        $this->collectionFactory = $collectionFactory;
        $this->dataObjectFactory = $dataObjectFactory;
        $this->dataCollectionFactory = $dataCollectionFactory;
        $this->filterProvider = $filterProvider;
        $this->storeManager = $context->getStoreManager();

        $this->prepareQuestionCollectionSelect();
    }

    /**
     * @return Collection
     */
    public function prepareQuestionCollectionSelect()
    {
        /** @var Collection $questionCollection */
        $questionCollection = $this->collectionFactory->create();
        $questionCollection->appendCategoryData();
        $questionCollection->addActiveFilter();
        $questionCollection->addCurrentStoreFilter();
        $questionCollection->sortBySortOrder();

        $this->setQuestionCollectionSelect($questionCollection);
    }

    /**
     * @param Collection $questionCollectionSelect
     */
    public function setQuestionCollectionSelect(Collection $questionCollectionSelect)
    {
        $this->questionCollectionSelect = $questionCollectionSelect;
    }

    /**
     * @return Collection
     */
    public function getQuestionCollectionSelect()
    {
        return $this->questionCollectionSelect;
    }

    /**
     * @return array
     */
    public function getCategoriesWithQuestions()
    {
        $this->buildCategoriesWithQuestionsFromCollectionSelect();
        return $this->categoriesWithQuestions;
    }

    /**
     * Make a collection of categories with each including its collection of questions
     */
    private function buildCategoriesWithQuestionsFromCollectionSelect()
    {
        array_map(function ($question) {
            /** @var Question $question */
            $this->initCategoryWithQuestion($question);
            /** @var DataCollection $questions */
            $questions = $this->categoriesWithQuestions[$question->getData('category_id')]->getData('category_questions');
            $questions->addItem($question);
        }, $this->getQuestionCollectionSelect()->getItems());
    }

    /**
     * @param Question $question
     */
    private function initCategoryWithQuestion(Question $question)
    {
        if (!isset($this->categoriesWithQuestions[$question->getData('category_id')])) {
            $category = $this->dataObjectFactory->create();
            /** @var DataCollection $categoryQuestions */
            $categoryQuestions = $this->dataCollectionFactory->create();
            $category->setData([
                'category_id' => $question->getData('category_id'),
                'category_name' => $question->getData('category_name'),
                'category_questions' => $categoryQuestions,
            ]);
            $this->categoriesWithQuestions[$question->getData('category_id')] = $category;
        }
    }

    /**
     * @param Question $question
     * @return string
     */
    public function getAnswerForQuestion(Question $question)
    {
        $storeId = $this->storeManager->getStore()->getId();
        $filter = $this->filterProvider->getBlockFilter();

        return $filter->setStoreId($storeId)->filter($question->getData('answer'));
    }
}

Spamworldpro Mini