\n <\/td>\n | <?php<\/span><\/td>\n <\/tr>\n \n <\/td>\n | /**<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * Generates a uristub of maximum specified length.<\/span><\/td>\n <\/tr>\n \n <\/td>\n | *<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * @access protected<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * @param string \$tableName The name of the table to query<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * @param string \$tableField The table column to check<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * @param string \$uristub The initial input string (page title) to clean<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * @param int \$length The maximum allowable length for the clean url<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * @param mixed \$iteration The current iteration, when duplicates found<\/span><\/td>\n <\/tr>\n \n <\/td>\n | * @return string<\/span><\/td>\n <\/tr>\n \n <\/td>\n | */<\/span><\/td>\n <\/tr>\n \n <\/td>\n | protected<\/span> function<\/span> generateUristub<\/span>(\$<\/span>tableName<\/span>, \$<\/span>tableField<\/span>, \$<\/span>uristub<\/span>, \$<\/span>length<\/span> = 30<\/span>, \$<\/span>iteration<\/span> = NULL<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | {<\/td>\n <\/tr>\n | \n <\/td>\n | // begin uristub generation on first iteration<\/span><\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> (is_null(\$<\/span>iteration<\/span>)) {<\/td>\n <\/tr>\n \n <\/td>\n | // set the locale, just once<\/span><\/td>\n <\/tr>\n \n <\/td>\n | setlocale(LC_ALL<\/span>, 'en_US.UTF8'<\/span>);<\/td>\n <\/tr>\n \n <\/td>\n | // clean the uristub<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>uristub<\/span> = iconv('UTF-8'<\/span>, 'ASCII//TRANSLIT'<\/span>, \$<\/span>uristub<\/span>);<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>uristub<\/span> = preg_replace("/[^a-zA-Z0-9\\/_|+ -]/<\/span>", ''<\/span>, \$<\/span>uristub<\/span>);<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>uristub<\/span> = preg_replace("/[\\/_|+ -]+/<\/span>", '-'<\/span>, \$<\/span>uristub<\/span>);<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>uristub<\/span> = strtolower(trim(\$<\/span>uristub<\/span>, '-'<\/span>));<\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | // ensure uristub is less than length<\/span><\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> (strlen(\$<\/span>uristub<\/span>) > \$<\/span>length<\/span>) {<\/td>\n <\/tr>\n \n <\/td>\n | // get char at chopped position<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>char<\/span> = \$<\/span>uristub<\/span>[\$<\/span>length<\/span>-1<\/span>];<\/td>\n <\/tr>\n \n <\/td>\n | // quick chop (leave room for 9 iterations)<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>uristub<\/span> = substr(\$<\/span>uristub<\/span>, 0<\/span>, \$<\/span>length<\/span> - 1<\/span>);<\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | // if we chopped mid word<\/span><\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> (\$<\/span>char<\/span> != '-'<\/span>) {<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>pos<\/span> = strrpos(\$<\/span>uristub<\/span>, '-'<\/span>);<\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> (\$<\/span>pos<\/span> !== FALSE<\/span>) {<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>uristub<\/span> = substr(\$<\/span>uristub<\/span>, 0<\/span>, \$<\/span>pos<\/span>);<\/td>\n <\/tr>\n \n <\/td>\n | }<\/td>\n <\/tr>\n | \n <\/td>\n | }<\/td>\n <\/tr>\n | \n <\/td>\n | }<\/td>\n <\/tr>\n | \n <\/td>\n | }<\/td>\n <\/tr>\n | \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | // if we have an iteration, add to the uristub<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>uristubToCheck<\/span> = !empty(\$<\/span>iteration<\/span>) ? \$<\/span>uristub<\/span> . \$<\/span>iteration<\/span> : \$<\/span>uristub<\/span>;<\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | // check if the uristub exists<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>sql<\/span> = sprintf('SELECT 1 FROM \`%s\` WHERE \`%s\` = %s'<\/span>,<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>tableName<\/span>,<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>tableField<\/span>,<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>this<\/span><\/span>->_db<\/span>->quote<\/span>(\$<\/span>uristubToCheck<\/span>));<\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | try<\/span> {<\/td>\n <\/tr>\n \n <\/td>\n | \$<\/span>result<\/span> = \$<\/span>this<\/span><\/span>->_db<\/span>->query<\/span>(\$<\/span>sql<\/span>)->fetch<\/span>();<\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> (!\$<\/span>result<\/span>) {<\/td>\n <\/tr>\n \n <\/td>\n | return<\/span> \$<\/span>uristubToCheck<\/span>;<\/td>\n <\/tr>\n \n <\/td>\n | }<\/td>\n <\/tr>\n | \n <\/td>\n | } | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |