shortcodes = new \SplObjectStorage(); $fileRepository = new FileRepository(); $parserFactory = new ParserFactory(); $this->fqcnRepository = new FqcnRepository($fileRepository, $parserFactory); foreach ($this->shortcodesDirs as $shortcodesDir) { $allShortcodesClasses = $this->fqcnRepository->findIn(USLP_PLUGIN_BASE_PATH . 'src/Classes/LabelDataMakers/Shortcodes/' . $shortcodesDir); foreach ($allShortcodesClasses as $class) { $reflectionClass = new \ReflectionClass($class); if ($reflectionClass->isAbstract() || $reflectionClass->isInterface()) { continue; } $classRegistered = $class::register(); if ($classRegistered) { $this->attach($class::getInstance()); } } } } public function attach($shortcode) { $this->shortcodes->attach($shortcode); } public function detach($shortcode) { $this->shortcodes->detach($shortcode); } public function getShortcodesInfoArray() { $shortcodesInfoArr = array(); foreach ($this->shortcodes as $shortcode) { $shortcode->addInfo($shortcodesInfoArr); } return $shortcodesInfoArr; } public function getDoc($shortcodesData) { $docTabsTitles = array(); $docTabsContent = array(); $shortcodesInfoArr = $this->getShortcodesInfoArray(); usort($shortcodesInfoArr, function ($a, $b) { if ($a['order'] < $b['order']) { return -1; } elseif ($a['order'] > $b['order']) { return 1; } return 0; }); foreach ($shortcodesInfoArr as $sd) { if ($sd['show_in_doc'] !== 1) { continue; } if ( !empty($sd['doc_tab_name_slug']) && !empty($sd['doc_tab_name_title']) && !isset($docTabsTitles[$sd['doc_tab_name_slug']]) ) { $docTabsTitles[$sd['doc_tab_name_slug']] = $sd['doc_tab_name_title']; } if ( !empty($sd['doc_tab_content_slug']) && !isset($docTabsContent[$sd['doc_tab_content_slug']]) ) { $docTabsContent[$sd['doc_tab_content_slug']] = array(); } if ( !empty($sd['doc_tab_content_slug']) && !empty($sd['doc_section_name']) && !isset($docTabsContent[$sd['doc_tab_content_slug']][$sd['doc_section_name']]) ) { $docTabsContent[$sd['doc_tab_content_slug']][$sd['doc_section_name']] = array(); } if ( !empty($sd['doc_lines']) && is_array($sd['doc_lines']) && isset($docTabsContent[$sd['doc_tab_content_slug']][$sd['doc_section_name']]) ) { foreach ($sd['doc_lines'] as $docLineDescription => $docLineExample) { $docTabsContent [$sd['doc_tab_content_slug']] [$sd['doc_section_name']] [$docLineDescription] = $docLineExample; } } } return array_merge($docTabsTitles, $docTabsContent); } }