protected function dumpEditorLinkList($navigation, $keys, $language)
{
// get the order
foreach (array_keys($navigation) as $type) {
$order[$type] = $this->getOrder($navigation, $type, 0);
}
// start building the cache file
$editorLinkListString = $this->getCacheHeader('the links that can be used by the editor');
// init var
$links = array();
// init var
$cachedTitles = (array) $this->database->getPairs('SELECT i.id, i.navigation_title
FROM pages AS i
WHERE i.id IN(' . implode(',', array_keys($keys)) . ')
AND i.language = ? AND i.status = ?', array($language, 'active'));
// loop the types in the order we want them to appear
foreach (array('page', 'meta', 'footer', 'root') as $type) {
// any pages?
if (isset($order[$type])) {
// loop pages
foreach ($order[$type] as $pageId => $url) {
// skip if we don't have a title
if (!isset($cachedTitles[$pageId])) {
continue;
}
// get the title
$title = \SpoonFilter::htmlspecialcharsDecode($cachedTitles[$pageId]);
// split into chunks
$urlChunks = explode('/', $url);
// remove the language chunk
$hasMultiLanguages = BackendModel::getContainer()->getParameter('site.multilanguage');
$urlChunks = $hasMultiLanguages ? array_slice($urlChunks, 2) : array_slice($urlChunks, 1);
// subpage?
if (count($urlChunks) > 1) {
// loop while we have more then 1 chunk
while (count($urlChunks) > 1) {
// remove last chunk of the url
array_pop($urlChunks);
// build the temporary URL, so we can search for an id
$tempUrl = implode('/', $urlChunks);
// search the pageID
$tempPageId = array_search($tempUrl, $keys);
// prepend the title
if (!isset($cachedTitles[$tempPageId])) {
$title = ' > ' . $title;
} else {
$title = $cachedTitles[$tempPageId] . ' > ' . $title;
}
}
}
// add
$links[] = array($title, $url);
}
}
}
// add JSON-string
$editorLinkListString .= 'var linkList = ' . json_encode($links) . ';';
return $editorLinkListString;
}