protected function saveNavbarPhrase(&$element, &$phrases) { if (!isset($element['phrase']) or empty($element['phrase']) or strpos($element['phrase'], 'navbar_') !== 0 or isset($phrases[$element['phrase']]) and $phrases[$element['phrase']] != $element['title']) { $words = explode(' ', $element['title']); array_walk($words, 'trim'); $phrase = strtolower(implode('_', $words)); //translating some special characters to their latin form $phrase = vB_String::latinise($phrase); // remove any invalid chars $phrase = preg_replace('#[^' . vB_Library_Phrase::VALID_CLASS . ']+#', '', $phrase); $phrase = 'navbar_' . $phrase; $suffix = 0; $tmpPhrase = $phrase; while (isset($phrases[$tmpPhrase]) and $phrases[$tmpPhrase] != $element['title']) { $tmpPhrase = $phrase . ++$suffix; } $element['phrase'] = $tmpPhrase; } // Store the phrase-value so that we can check $phrases[$element['phrase']] = $element['title']; $existingPhrases = vB::getDbAssertor()->getRows('phrase', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, 'varname' => $element['phrase'])); // don't destroy translations $text = array(); foreach ($existingPhrases as $existingPhrase) { $text[$existingPhrase['languageid']] = $existingPhrase['text']; } // the edited phrase $text[0] = $element['title']; vB_Api::instance('phrase')->save('navbarlinks', $element['phrase'], array('text' => $text, 'oldvarname' => $element['phrase'], 'oldfieldname' => 'navbarlinks', 't' => 0, 'ismaster' => 0, 'product' => 'vbulletin')); // store phrase name instead of title $element['title'] = $element['phrase']; unset($element['phrase']); // do the same for subnavigation if (isset($element['subnav']) and !empty($element['subnav'])) { foreach ($element['subnav'] as &$subnav) { $this->saveNavbarPhrase($subnav, $phrases); } } }