/** * Test slugify function */ public function testSlugify() { $this->assertEquals('test', ApplicationSlugUtility::slugify('test')); $this->assertEquals('', ApplicationSlugUtility::slugify('')); $this->assertEquals('a-lublu-php', ApplicationSlugUtility::slugify('Я люблю PHP')); $this->assertEquals('sihaphpga-da-haoki', ApplicationSlugUtility::slugify('私はPHPが大好き')); $this->assertEquals('1-test', ApplicationSlugUtility::slugify('test asdsadsadsadsadas', 6, '-', 1)); $this->assertEquals('test-test', ApplicationSlugUtility::slugify('test test')); $this->assertEquals('123-testtest-asd', ApplicationSlugUtility::slugify('123! test-test_$ asd')); $this->assertEquals('test', ApplicationSlugUtility::slugify('&test!=....')); }
/** * Test a correct slug generation */ public function testCorrectSlugGeneration() { // generate a first test user $firstUserSlug = SlugUtility::slugify(Rand::getString(20)); $firstUserData = ['nick_name' => Rand::getString(32), 'email' => Rand::getString(32), 'role' => AclModel::DEFAULT_ROLE_MEMBER, 'slug' => $firstUserSlug, 'api_key' => Rand::getString(32)]; $query = $this->model->insert()->into('user_list')->values($firstUserData); $statement = $this->model->prepareStatementForSqlObject($query); $statement->execute(); $userId = $this->userIds[] = $this->model->getAdapter()->getDriver()->getLastGeneratedValue(); // generate slug for the second user $secondUserSlug = $firstUserSlug; $secondUserId = $userId + 1; $this->assertEquals($this->model->generateSlug($secondUserId, $secondUserSlug, 'user_list', 'user_id'), $secondUserId . '-' . $firstUserSlug); }
/** * Generate slug * * @param integer $objectId * @param string $title * @param string $table * @param string $idField * @param integer $slugLength * @param array $filters * @param string $slugField * @param string $spaceDivider * @return string */ public function generateSlug($objectId, $title, $table, $idField, $slugLength = 60, array $filters = [], $slugField = 'slug', $spaceDivider = '-') { // generate a slug $newSlug = $slug = SlugUtility::slugify($title, $slugLength, $spaceDivider); $slagSalt = null; while (true) { // check the slug existent $select = $this->select(); $select->from($table)->columns([$slugField])->where([$slugField => $newSlug] + $filters); $select->where([new NotInPredicate($idField, [$objectId])]); $statement = $this->prepareStatementForSqlObject($select); $resultSet = new ResultSet(); $resultSet->initialize($statement->execute()); // generated slug not found if (!$resultSet->current()) { break; } else { $newSlug = $objectId . $spaceDivider . $slug . $slagSalt; } // add an extra slug $slagSalt = $spaceDivider . SlugUtility::generateRandomSlug($this->slugLength); // add a salt } return $newSlug; }
/** * Generate page slug * * @param integer $pageId * @param string $title * @param string $spaceDevider * @return string */ public function generatePageSlug($pageId, $title, $spaceDevider = '-') { // generate a slug $newSlug = $slug = SlugUtility::slugify($title, self::PAGE_SLUG_LENGTH, $spaceDevider); $slagSalt = null; while (true) { // check the slug existent in structure pages $select = $this->select(); $select->from('page_structure')->columns(['slug'])->where(['slug' => $newSlug, 'language' => $this->getCurrentLanguage()]); $select->where([new NotInPredicate('id', [$pageId])]); $statement = $this->prepareStatementForSqlObject($select); $structurePagesResultSet = new ResultSet(); $structurePagesResultSet->initialize($statement->execute()); // check the slug existent in system pages $select = $this->select(); $select->from('page_system')->columns(['slug'])->where(['slug' => $newSlug]); $statement = $this->prepareStatementForSqlObject($select); $systemPagesResultSet = new ResultSet(); $systemPagesResultSet->initialize($statement->execute()); // generated slug not found if (!$structurePagesResultSet->current() && !$systemPagesResultSet->current()) { break; } $newSlug = $pageId . $spaceDevider . $slug . $slagSalt; // add an extra slug $slagSalt = $spaceDevider . SlugUtility::generateRandomSlug($this->slugLength); // add a slug } return $newSlug; }
/** * Slugify a file name * * @param string $fileName * @param boolean $addSalt * @param boolean $processFullName * @return string */ public static function slugifyFileName($fileName, $addSalt = true, $processFullName = false) { $fileExtension = FileSystemUtility::getFileExtension($fileName); $fileName = FileSystemUtility::getFileName($fileName); $maxFileNameLength = !$processFullName && $fileExtension ? (int) SettingService::getSetting('file_manager_file_name_length') - (strlen($fileExtension) + 1) : (int) SettingService::getSetting('file_manager_file_name_length'); $slug = SlugUtility::slugify($processFullName && $fileExtension ? $fileName . '.' . $fileExtension : $fileName, $maxFileNameLength, '_', 0, self::$fileNamePattern); if (!$slug && $addSalt) { $slug = SlugUtility::generateRandomSlug($maxFileNameLength); } return $slug; }