Exemplo n.º 1
0
 public function getUniqueName($parent_id, $preferred_name)
 {
     $preferred_name = $this->normalizeName($preferred_name);
     $pos_of_hyphen = UTF8String::strrpos($preferred_name, '-');
     if ($pos_of_hyphen !== false) {
         if ($pos_of_hyphen > 0) {
             $number_part = UTF8String::substr($preferred_name, $pos_of_hyphen + 1);
             if (is_numeric($number_part)) {
                 $preferred_name = UTF8String::substr($preferred_name, 0, $pos_of_hyphen);
             }
         }
     }
     if ($this->isValidName($preferred_name)) {
         if (!$this->nameExists($parent_id, $preferred_name)) {
             return $preferred_name;
         } else {
             $existing = Db::get('SELECT id, name FROM [prefix]pages WHERE `name` LIKE :pattern', array(':pattern' => $preferred_name . '-%'));
             $highest_number = 0;
             if ($existing !== false) {
                 if (count($existing) > 0) {
                     foreach ($existing as $element) {
                         $number_part = UTF8String::substr($element['name'], UTF8String::strlen($preferred_name . '-'));
                         if (is_numeric($number_part)) {
                             if ((int) $number_part > $highest_number) {
                                 $highest_number = (int) $number_part;
                             }
                         }
                     }
                 }
             }
             if ($highest_number < 2) {
                 $highest_number = 2;
             } else {
                 $highest_number++;
             }
             if (!$this->nameExists($parent_id, $preferred_name . '-' . $highest_number)) {
                 return $preferred_name . '-' . $highest_number;
             }
         }
     }
     return md5(uniqid(rand(0, 99999), true));
 }