/** * Resolves a CKEditor toolbar item. * * @param string|array $item The CKEditor item. * @param array $items The CKEditor items. * * @throws \Ivory\CKEditorBundle\Exception\DependencyInjectionException If the toolbar item does not exist. * * @return array The resolved CKEditor toolbar item. */ protected function resolveToolbarItem($item, array $items) { if (is_string($item) && $item[0] === '@') { $itemName = substr($item, 1); if (!isset($items[$itemName])) { throw DependencyInjectionException::invalidToolbarItem($itemName); } return $items[$itemName]; } return $item; }
/** * Merges the toolbars into the CKEditor configurations. * * @param array $config The CKEditor configuration. * * @return array The CKEditor configuration with merged toolbars. */ protected function mergeToolbars(array $config) { $toolbars = array(); $toolbarConfigs = array_merge($this->getDefaultToolbars(), $config['toolbars']['configs']); foreach ($toolbarConfigs as $name => $toolbar) { $toolbars[$name] = array(); foreach ($toolbar as $item) { if (is_string($item) && $item[0] === '@') { $itemName = substr($item, 1); if (!isset($config['toolbars']['items'][$itemName])) { throw DependencyInjectionException::invalidToolbarItem($itemName); } $item = $config['toolbars']['items'][$itemName]; } $toolbars[$name][] = $item; } } foreach ($config['configs'] as $name => $configuration) { if (isset($configuration['toolbar']) && is_string($configuration['toolbar'])) { if (!isset($toolbars[$configuration['toolbar']])) { throw DependencyInjectionException::invalidToolbar($configuration['toolbar']); } $config['configs'][$name]['toolbar'] = $toolbars[$configuration['toolbar']]; } } unset($config['toolbars']); return $config; }