You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

31 lines
1.3 KiB

<?php
function post_20140705_page_slug_tiki($installer)
{
$pages = $installer->table('tiki_pages');
$names = $pages->fetchColumn('pageName', []);
foreach ($names as $name) {
try {
$pages->update(['pageSlug' => urlencode($name)], [
'pageName' => $name,
]);
} catch (Exception $e) {
// Presumably, Duplicate entry found. Too bad $e->getCode() returns 0
// We need to find a pageSlug name which is not already taken
// Shorten so we can add numbers afterwards in the form blabla…bla_42 from _0 to _999
$prefixPageSlug = substr(urlencode($name), 0, 156);
// Strip urlencoding %xx which might have been truncated at the end
if (strrpos($prefixPageSlug, '%') && strrpos($prefixPageSlug, '%') >= 154) {
$prefixPageSlug = substr($prefixPageSlug, 0, strrpos($prefixPageSlug, '%'));
}
for ($i = 0; $i <= 999; $i++) {
$pageSlug = $prefixPageSlug . "_$i";
$duplicates = $pages->fetchColumn('pageName', ['pageSlug' => $pageSlug ]);
if (count($duplicates) == 0) {
$pages->update(['pageSlug' => $pageSlug], ['pageName' => $name]);
break;
}
}
}
}
}