/** * @return array[] * @throws CM_Exception */ private static function _readEmoticonData() { /** @var CM_File[] $configurationFiles */ $configurationFiles = []; /** @var CM_File[] $imageFiles */ $imageFiles = []; $bootloader = CM_Bootloader::getInstance(); foreach ($bootloader->getModules() as $namespace) { $emoticonDir = new CM_File(CM_Util::getModulePath($namespace) . 'layout/default/resource/img/emoticon/'); foreach ($emoticonDir->listFiles(true) as $file) { $name = strtolower($file->getFileNameWithoutExtension()); if ('json' === $file->getExtension()) { $configurationFiles[$name] = $file; } else { $imageFiles[$name] = $file; } } } $dataList = []; $codeList = []; foreach ($imageFiles as $name => $file) { $dataList[$name] = ['name' => $name, 'fileName' => $file->getFileName(), 'codes' => [":{$name}:"]]; $codeList[":{$name}:"] = $name; } foreach ($configurationFiles as $name => $file) { $additionalCodes = CM_Params::jsonDecode($file->read())['additionalCodes']; foreach ($additionalCodes as $code) { if (!array_key_exists($code, $codeList)) { $codeList[$code] = $name; $dataList[$name]['codes'][] = $code; } else { throw new CM_Exception('Emoticon codes overlap', null, ['overlapping emoticons' => [$name, $codeList[$code]], 'code' => $code]); } } } return $dataList; }