Skip to content

Commit 01ca75b

Browse files
Adding copyright to albums #1838 (#1880)
--------- Co-authored-by: ildyria <beviguier@gmail.com>
1 parent ffcb72d commit 01ca75b

File tree

38 files changed

+277
-0
lines changed

38 files changed

+277
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace App\Contracts\Http\Requests;
4+
5+
interface HasCopyright
6+
{
7+
/**
8+
* @return string|null
9+
*/
10+
public function copyright(): ?string;
11+
}

app/Contracts/Http/Requests/RequestAttribute.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,7 @@ class RequestAttribute
8484
public const RESYNC_METADATA_ATTRIBUTE = 'resync_metadata';
8585

8686
public const FILE_LAST_MODIFIED_TIME = 'fileLastModifiedTime';
87+
88+
public const COPYRIGHT_ATTRIBUTE = 'copyright';
8789
public const URLS_ATTRIBUTE = 'urls';
8890
}

app/Http/Controllers/AlbumController.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use App\Http\Requests\Album\GetAlbumRequest;
2626
use App\Http\Requests\Album\MergeAlbumsRequest;
2727
use App\Http\Requests\Album\MoveAlbumsRequest;
28+
use App\Http\Requests\Album\SetAlbumCopyrightRequest;
2829
use App\Http\Requests\Album\SetAlbumCoverRequest;
2930
use App\Http\Requests\Album\SetAlbumDescriptionRequest;
3031
use App\Http\Requests\Album\SetAlbumHeaderRequest;
@@ -187,6 +188,21 @@ public function setDescription(SetAlbumDescriptionRequest $request): void
187188
$request->album()->save();
188189
}
189190

191+
/**
192+
* Change the copyright of the album.
193+
*
194+
* @param SetAlbumCopyrightRequest $request
195+
*
196+
* @return void
197+
*
198+
* @throws ModelDBException
199+
*/
200+
public function setCopyright(SetAlbumCopyrightRequest $request): void
201+
{
202+
$request->album()->copyright = $request->copyright();
203+
$request->album()->save();
204+
}
205+
190206
/**
191207
* Change show tags of the tag album.
192208
*
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Album;
4+
5+
use App\Contracts\Http\Requests\HasBaseAlbum;
6+
use App\Contracts\Http\Requests\HasCopyright;
7+
use App\Contracts\Http\Requests\RequestAttribute;
8+
use App\Http\Requests\BaseApiRequest;
9+
use App\Http\Requests\Traits\Authorize\AuthorizeCanEditAlbumTrait;
10+
use App\Http\Requests\Traits\HasBaseAlbumTrait;
11+
use App\Http\Requests\Traits\HasCopyrightTrait;
12+
use App\Http\RuleSets\Album\SetAlbumCopyrightRuleSet;
13+
14+
class SetAlbumCopyrightRequest extends BaseApiRequest implements HasBaseAlbum, HasCopyright
15+
{
16+
use HasBaseAlbumTrait;
17+
use HasCopyrightTrait;
18+
use AuthorizeCanEditAlbumTrait;
19+
20+
/**
21+
* {@inheritDoc}
22+
*/
23+
public function rules(): array
24+
{
25+
return SetAlbumCopyrightRuleSet::rules();
26+
}
27+
28+
/**
29+
* {@inheritDoc}
30+
*/
31+
protected function processValidatedValues(array $values, array $files): void
32+
{
33+
$this->album = $this->albumFactory->findBaseAlbumOrFail(
34+
$values[RequestAttribute::ALBUM_ID_ATTRIBUTE], false
35+
);
36+
$this->copyright = $values[RequestAttribute::COPYRIGHT_ATTRIBUTE];
37+
}
38+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Traits;
4+
5+
trait HasCopyrightTrait
6+
{
7+
protected ?string $copyright = null;
8+
9+
/**
10+
* @return string|null
11+
*/
12+
public function copyright(): ?string
13+
{
14+
return $this->copyright;
15+
}
16+
}

app/Http/Resources/Models/AlbumResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public function toArray($request)
3737
'id' => $this->resource->id,
3838
'title' => $this->resource->title,
3939
'owner_name' => $this->when(Auth::check(), $this->resource->owner->name),
40+
'copyright' => $this->resource->copyright,
4041

4142
// attributes
4243
'description' => $this->resource->description,
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\RuleSets\Album;
4+
5+
use App\Contracts\Http\Requests\RequestAttribute;
6+
use App\Contracts\Http\RuleSet;
7+
use App\Rules\CopyrightRule;
8+
use App\Rules\RandomIDRule;
9+
10+
/**
11+
* Rules applied when updating the copyright of an album.
12+
*/
13+
class SetAlbumCopyrightRuleSet implements RuleSet
14+
{
15+
/**
16+
* {@inheritDoc}
17+
*/
18+
public static function rules(): array
19+
{
20+
return [
21+
RequestAttribute::ALBUM_ID_ATTRIBUTE => ['required', new RandomIDRule(false)],
22+
RequestAttribute::COPYRIGHT_ATTRIBUTE => ['required', new CopyrightRule()],
23+
];
24+
}
25+
}

app/Livewire/Components/Forms/Album/Properties.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use App\Models\Album as ModelsAlbum;
2121
use App\Models\Extensions\BaseAlbum;
2222
use App\Policies\AlbumPolicy;
23+
use App\Rules\CopyrightRule;
2324
use App\Rules\TitleRule;
2425
use Illuminate\Contracts\View\View;
2526
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
@@ -44,6 +45,7 @@ class Properties extends Component
4445
public string $album_sorting_order = ''; // ! wired
4546
public string $album_aspect_ratio = ''; // ! wired
4647
public string $license = 'none'; // ! wired
48+
public string $copyright = ''; // ! wired
4749

4850
/**
4951
* This is the equivalent of the constructor for Livewire Components.
@@ -63,6 +65,7 @@ public function mount(BaseAlbum $album): void
6365
$this->description = $album->description ?? '';
6466
$this->photo_sorting_column = $album->photo_sorting?->column->value ?? '';
6567
$this->photo_sorting_order = $album->photo_sorting?->order->value ?? '';
68+
$this->copyright = $album->copyright ?? '';
6669
if ($this->is_model_album) {
6770
/** @var ModelsAlbum $album */
6871
$this->license = $album->license->value;
@@ -94,6 +97,7 @@ public function submit(AlbumFactory $albumFactory): void
9497
...SetPhotoSortingRuleSet::rules(),
9598
...SetAlbumSortingRuleSet::rules(),
9699
RequestAttribute::ALBUM_ASPECT_RATIO_ATTRIBUTE => ['present', 'nullable', new Enum(AspectRatioType::class)],
100+
RequestAttribute::COPYRIGHT_ATTRIBUTE => ['present', 'nullable', new CopyrightRule()],
97101
];
98102

99103
if (!$this->areValid($rules)) {
@@ -106,12 +110,17 @@ public function submit(AlbumFactory $albumFactory): void
106110
$baseAlbum->title = $this->title;
107111
$baseAlbum->description = $this->description;
108112

113+
$this->copyright = trim($this->copyright);
114+
109115
// Not super pretty but whatever.
110116
$column = ColumnSortingPhotoType::tryFrom($this->photo_sorting_column);
111117
$order = OrderSortingType::tryFrom($this->photo_sorting_order);
112118
$photoSortingCriterion = $column === null ? null : new PhotoSortingCriterion($column->toColumnSortingType(), $order);
113119
$baseAlbum->photo_sorting = $photoSortingCriterion;
114120

121+
// If left empty, we set to null
122+
$baseAlbum->copyright = $this->copyright === '' ? null : $this->copyright;
123+
115124
if ($this->is_model_album) {
116125
/** @var ModelsAlbum $baseAlbum */
117126
$baseAlbum->license = LicenseType::from($this->license);

app/Livewire/DTO/AlbumFormatted.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class AlbumFormatted
2121
public bool $can_download;
2222
public ?string $created_at = null;
2323
public ?string $description = null;
24+
public ?string $copyright = null;
2425

2526
public function __construct(AbstractAlbum $album, ?string $url)
2627
{
@@ -33,6 +34,7 @@ public function __construct(AbstractAlbum $album, ?string $url)
3334
$this->max_taken_at = $album->max_taken_at?->format($min_max_date_format);
3435
$this->created_at = $album->created_at->format($create_date_format);
3536
$this->description = trim($album->description ?? '');
37+
$this->copyright = $album->copyright;
3638
}
3739
if ($album instanceof Album) {
3840
$this->num_children = $album->num_children;

app/Models/BaseAlbumImpl.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
* @property string|null $sorting_order
105105
* @property Collection<int,AccessPermission> $access_permissions
106106
* @property int|null $access_permissions_count
107+
* @property string|null $copyright
107108
*
108109
* @method static BaseAlbumImplBuilder|BaseAlbumImpl addSelect($column)
109110
* @method static BaseAlbumImplBuilder|BaseAlbumImpl join(string $table, string $first, string $operator = null, string $second = null, string $type = 'inner', string $where = false)
@@ -173,6 +174,7 @@ class BaseAlbumImpl extends Model implements HasRandomID
173174
'owner_id' => 0,
174175
'sorting_col' => null,
175176
'sorting_order' => null,
177+
'copyright' => null,
176178
// Special visibility attributes
177179
'is_nsfw' => false,
178180
];

0 commit comments

Comments
 (0)