Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG-WIP.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,10 @@ Craft's Mutex classes have been deprecated. [Laravel's atomic locking](https://l

## Assets

- Added `CraftCms\Cms\Support\Facades\Assets`.
- Added `CraftCms\Cms\Support\Facades\AssetIndexer` facade.
- Added `CraftCms\Cms\Support\Facades\Folders`.
- Deprecated `craft\services\Assets`. `CraftCms\Cms\Asset\Assets` and `CraftCms\Cms\Asset\Folders` should be used instead.
- Deprecated `\craft\records\Asset`. `\CraftCms\Cms\Asset\Models\Asset` should be used instead.
- Deprecated `\craft\records\AssetIndexData`. `\CraftCms\Cms\Asset\Models\AssetIndexData` should be used instead.
- Deprecated `\craft\records\AssetIndexingSession`. `\CraftCms\Cms\Asset\Models\AssetIndexingSession` should be used instead.
Expand All @@ -157,6 +160,14 @@ Craft's Mutex classes have been deprecated. [Laravel's atomic locking](https://l
- Deprecated `craft\errors\MissingVolumeFolderException`. `CraftCms\Cms\Asset\Exceptions\MissingVolumeFolderException` should be used instead.
- Deprecated `craft\errors\VolumeException`. `CraftCms\Cms\Asset\Exceptions\VolumeException` should be used instead.

### Events

- Deprecated `craft\events\ReplaceAssetEvent` in favor of the following new events:
- `craft\services\Assets::EVENT_BEFORE_REPLACE_ASSET` => `CraftCms\Cms\Asset\Events\BeforeReplaceAsset`
- `craft\services\Assets::EVENT_AFTER_REPLACE_ASSET` => `CraftCms\Cms\Asset\Events\AfterReplaceAsset`
- Deprecated `craft\events\DefineAssetThumbUrlEvent`. `CraftCms\Cms\Asset\Events\DefineThumbUrl` should be used instead.
- Deprecated `craft\events\AssetPreviewEvent`. `CraftCms\Cms\Asset\Events\RegisterPreviewHandler` should be used instead.

## Auth

- Refactored the authentication system to use Laravel's authentication system.
Expand Down
31 changes: 31 additions & 0 deletions routes/actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@
use CraftCms\Cms\Http\Controllers\AddressesController;
use CraftCms\Cms\Http\Controllers\AnnouncementsController;
use CraftCms\Cms\Http\Controllers\ApiController;
use CraftCms\Cms\Http\Controllers\Assets\ActionController as AssetsActionController;
use CraftCms\Cms\Http\Controllers\Assets\FolderController as AssetsFolderController;
use CraftCms\Cms\Http\Controllers\Assets\IconController as AssetsIconController;
use CraftCms\Cms\Http\Controllers\Assets\ImageEditorController;
use CraftCms\Cms\Http\Controllers\Assets\PreviewController as AssetsPreviewController;
use CraftCms\Cms\Http\Controllers\Assets\TransformController;
use CraftCms\Cms\Http\Controllers\Assets\UploadController as AssetsUploadController;
use CraftCms\Cms\Http\Controllers\Auth\LoginController;
use CraftCms\Cms\Http\Controllers\Auth\PasskeyController;
use CraftCms\Cms\Http\Controllers\Auth\SessionInfoController;
Expand Down Expand Up @@ -108,6 +115,10 @@
Route::any('users/get-elevated-session-timeout', [SessionInfoController::class, 'confirmTimeout']);
Route::middleware('throttle:1,1')->post('users/send-password-reset-email', [PasswordController::class, 'sendPasswordResetEmail']);
Route::post('users/save-user', SaveUserController::class);

// Asset Transforms (anonymous access)
Route::any('assets/generate-transform', [TransformController::class, 'generate']);
Route::get('assets/generate-fallback-transform', [TransformController::class, 'generateFallback']);
});
}

Expand Down Expand Up @@ -252,6 +263,26 @@
Route::post('asset-indexes/indexing-session-overview', [AssetIndexesController::class, 'indexingSessionOverview']);
Route::post('asset-indexes/finish-indexing-session', [AssetIndexesController::class, 'finishIndexingSession']);

// Assets
Route::post('assets/upload', [AssetsUploadController::class, 'upload']);
Route::post('assets/replace-file', [AssetsUploadController::class, 'replaceFile']);
Route::post('assets/delete-asset', [AssetsActionController::class, 'deleteAsset']);
Route::post('assets/move-asset', [AssetsActionController::class, 'moveAsset']);
Route::post('assets/download-asset', [AssetsActionController::class, 'downloadAsset']);
Route::any('assets/show-in-folder', [AssetsActionController::class, 'showInFolder']);
Route::post('assets/move-info', [AssetsActionController::class, 'moveInfo']);
Route::post('assets/preview-thumb', [AssetsPreviewController::class, 'previewThumb']);
Route::post('assets/preview-file', [AssetsPreviewController::class, 'previewFile']);
Route::post('assets/create-folder', [AssetsFolderController::class, 'create']);
Route::post('assets/delete-folder', [AssetsFolderController::class, 'delete']);
Route::post('assets/rename-folder', [AssetsFolderController::class, 'rename']);
Route::post('assets/move-folder', [AssetsFolderController::class, 'move']);
Route::post('assets/image-editor', [ImageEditorController::class, 'show']);
Route::get('assets/edit-image', [ImageEditorController::class, 'editImage']);
Route::post('assets/save-image', [ImageEditorController::class, 'save']);
Route::post('assets/update-focal-position', [ImageEditorController::class, 'updateFocalPoint']);
Route::get('assets/icon/{extension?}', AssetsIconController::class);

// Preview
Route::any('preview/create-token', [PreviewController::class, 'createToken']);

Expand Down
7 changes: 7 additions & 0 deletions routes/cp.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use CraftCms\Cms\Auth\Enums\CpAuthPath;
use CraftCms\Cms\Edition;
use CraftCms\Cms\Http\Controllers\Assets\IndexController as AssetsIndexController;
use CraftCms\Cms\Http\Controllers\Auth\LoginController;
use CraftCms\Cms\Http\Controllers\Auth\SetPasswordController;
use CraftCms\Cms\Http\Controllers\Auth\TwoFactorAuthenticationController;
Expand Down Expand Up @@ -101,6 +102,12 @@

Route::get('users/{slug?}', [UsersController::class, 'index']);

/**
* Assets
*/
Route::get('assets/{defaultSource?}', AssetsIndexController::class)
->where('defaultSource', '.*');

/**
* Routes that require admin, but do not require admin changes
*/
Expand Down
10 changes: 5 additions & 5 deletions src/Asset/AssetIndexer.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ final class AssetIndexer

public function __construct(
private readonly Volumes $volumes,
private readonly Folders $folders,
) {}

public function getIndexListOnVolume(Volume $volume, string $directory = ''): Generator
Expand Down Expand Up @@ -591,8 +592,7 @@ public function indexFileByEntry(
$path = "$dirname/";
}

$assets = Craft::$app->getAssets();
$folder = $assets->findFolder([
$folder = $this->folders->findFolder([
'volumeId' => $indexEntry->volumeId,
'path' => $path,
'parentId' => $parentId,
Expand All @@ -601,7 +601,7 @@ public function indexFileByEntry(
if (! $folder) {
/** @var Volume $volume */
$volume = $this->volumes->getVolumeById($indexEntry->volumeId);
$folder = $assets->ensureFolderByFullPathAndVolume($path, $volume);
$folder = $this->folders->ensureFolderByFullPathAndVolume($path, $volume);
} else {
$volume = $folder->getVolume();
}
Expand Down Expand Up @@ -707,7 +707,7 @@ public function indexFolderByEntry(AssetIndexEntry $indexEntry, bool $createIfMi
}
}

$folder = Craft::$app->getAssets()->findFolder([
$folder = $this->folders->findFolder([
'path' => "$indexEntry->uri/",
'volumeId' => $indexEntry->volumeId,
]);
Expand All @@ -719,7 +719,7 @@ public function indexFolderByEntry(AssetIndexEntry $indexEntry, bool $createIfMi
throw new MissingVolumeFolderException($indexEntry, $volume, $indexEntry->uri);
}

return Craft::$app->getAssets()->ensureFolderByFullPathAndVolume($indexEntry->uri ?? '', $volume);
return $this->folders->ensureFolderByFullPathAndVolume($indexEntry->uri ?? '', $volume);
}

private function storeIndexingSession(IndexingSession $session): void
Expand Down
Loading
Loading