/**
  * 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;
 }
Example #6
0
 /**
  * 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;
 }
Example #7
0
 /**
  * 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;
 }