![]() 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/ |
<?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')); } }