/** * 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); }
/** * Upload a resource file * * @param integer|string $objectId * @param array $file * string name * string type * string tmp_name * integer error * integer size * @param string $path * @param boolean $addSalt * @param integer $saltLength * @return string|boolean */ public static function uploadResourceFile($objectId, $file, $path, $addSalt = true, $saltLength = 5) { $fileInfo = pathinfo($file['name']); $salt = $addSalt ? '_' . SlugUtility::generateRandomSlug($saltLength) : null; $fileName = $objectId . $salt . (!empty($fileInfo['extension']) ? '.' . strtolower($fileInfo['extension']) : null); $basePath = ApplicationService::getResourcesDir() . $path; if (is_writable($basePath)) { if (true === ($result = move_uploaded_file($file['tmp_name'], $basePath . $fileName))) { @chmod($basePath . $fileName, self::DEFAULT_FILE_PERMISSIONS); return $fileName; } } return false; }
/** * Generate a rand string * * @param integer $length * @param string $charList * @return string */ public function generateRandString($length = 10, $charList = null) { return SlugUtility::generateRandomSlug($length, $charList); }
/** * 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; }
/** * 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, 'language' => $this->getCurrentLanguage()] + $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; }