/** * 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); }
/** * 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 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; }
/** * 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; }