diff --git a/app/Http/Controllers/Account/CreateController.php b/app/Http/Controllers/Account/CreateController.php index 928f656b69..ef9c1ba411 100644 --- a/app/Http/Controllers/Account/CreateController.php +++ b/app/Http/Controllers/Account/CreateController.php @@ -151,7 +151,12 @@ class CreateController extends Controller // store attachment(s): /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($account, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($account, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Http/Controllers/Account/EditController.php b/app/Http/Controllers/Account/EditController.php index 007f3ec1f2..4afb528e68 100644 --- a/app/Http/Controllers/Account/EditController.php +++ b/app/Http/Controllers/Account/EditController.php @@ -190,9 +190,13 @@ class EditController extends Controller app('preferences')->mark(); // store new attachment(s): - /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($account, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($account, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Http/Controllers/BillController.php b/app/Http/Controllers/BillController.php index 58a5c5edf7..d8c02e30e9 100644 --- a/app/Http/Controllers/BillController.php +++ b/app/Http/Controllers/BillController.php @@ -383,7 +383,12 @@ class BillController extends Controller /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($bill, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($bill, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore @@ -410,7 +415,12 @@ class BillController extends Controller /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($bill, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($bill, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } // flash messages if (count($this->attachments->getMessages()->get('attachments')) > 0) { diff --git a/app/Http/Controllers/Budget/CreateController.php b/app/Http/Controllers/Budget/CreateController.php index fd88ef52a9..f7d0c48482 100644 --- a/app/Http/Controllers/Budget/CreateController.php +++ b/app/Http/Controllers/Budget/CreateController.php @@ -130,9 +130,13 @@ class CreateController extends Controller app('preferences')->mark(); // store attachment(s): - /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($budget, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($budget, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Http/Controllers/Budget/EditController.php b/app/Http/Controllers/Budget/EditController.php index 7dc7ce3495..5b0bb4b4ed 100644 --- a/app/Http/Controllers/Budget/EditController.php +++ b/app/Http/Controllers/Budget/EditController.php @@ -137,9 +137,13 @@ class EditController extends Controller $redirect = redirect($this->getPreviousUri('budgets.edit.uri')); // store new attachment(s): - /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($budget, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($budget, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Http/Controllers/Category/CreateController.php b/app/Http/Controllers/Category/CreateController.php index fa19ddfcd1..771932ab96 100644 --- a/app/Http/Controllers/Category/CreateController.php +++ b/app/Http/Controllers/Category/CreateController.php @@ -102,9 +102,13 @@ class CreateController extends Controller app('preferences')->mark(); // store attachment(s): - /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($category, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($category, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Http/Controllers/Category/EditController.php b/app/Http/Controllers/Category/EditController.php index f5050899ce..1aa925a062 100644 --- a/app/Http/Controllers/Category/EditController.php +++ b/app/Http/Controllers/Category/EditController.php @@ -107,9 +107,13 @@ class EditController extends Controller app('preferences')->mark(); // store new attachment(s): - /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($category, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($category, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Http/Controllers/PiggyBankController.php b/app/Http/Controllers/PiggyBankController.php index ff3a4d0738..2890991529 100644 --- a/app/Http/Controllers/PiggyBankController.php +++ b/app/Http/Controllers/PiggyBankController.php @@ -456,7 +456,12 @@ class PiggyBankController extends Controller // store attachment(s): /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($piggyBank, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($piggyBank, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore @@ -495,7 +500,12 @@ class PiggyBankController extends Controller // store new attachment(s): /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($piggyBank, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($piggyBank, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index ffa4e50092..85e9ff526a 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -321,7 +321,12 @@ class TagController extends Controller // store attachment(s): /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($result, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($result, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore @@ -359,7 +364,12 @@ class TagController extends Controller // store new attachment(s): /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; - $this->attachments->saveAttachmentsForModel($tag, $files); + if (null !== $files && !auth()->user()->hasRole('demo')) { + $this->attachments->saveAttachmentsForModel($tag, $files); + } + if (null !== $files && auth()->user()->hasRole('demo')) { + session()->flash('info',(string)trans('firefly.no_att_demo_user')); + } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); // @codeCoverageIgnore diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index ba9b760e4d..32d02df306 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -28,6 +28,7 @@ use FireflyIII\Factory\AccountFactory; use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; use FireflyIII\Models\AccountType; +use FireflyIII\Models\Attachment; use FireflyIII\Models\Location; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; @@ -39,6 +40,7 @@ use FireflyIII\User; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Collection; use Log; +use Storage; /** * Class AccountRepository. @@ -658,7 +660,22 @@ class AccountRepository implements AccountRepositoryInterface */ public function getAttachments(Account $account): Collection { - return $account->attachments()->get(); + $set = $account->attachments()->get(); + + /** @var Storage $disk */ + $disk = Storage::disk('upload'); + + $set = $set->each( + static function (Attachment $attachment) use ($disk) { + $notes = $attachment->notes()->first(); + $attachment->file_exists = $disk->exists($attachment->fileName()); + $attachment->notes = $notes ? $notes->text : ''; + + return $attachment; + } + ); + + return $set; } /** diff --git a/app/Repositories/Bill/BillRepository.php b/app/Repositories/Bill/BillRepository.php index 1183e353ad..124612a6ca 100644 --- a/app/Repositories/Bill/BillRepository.php +++ b/app/Repositories/Bill/BillRepository.php @@ -26,6 +26,7 @@ use Carbon\Carbon; use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\BillFactory; +use FireflyIII\Models\Attachment; use FireflyIII\Models\Bill; use FireflyIII\Models\Note; use FireflyIII\Models\Transaction; @@ -39,6 +40,7 @@ use Illuminate\Database\Query\JoinClause; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; +use Storage; /** * Class BillRepository. @@ -164,7 +166,22 @@ class BillRepository implements BillRepositoryInterface */ public function getAttachments(Bill $bill): Collection { - return $bill->attachments()->get(); + $set = $bill->attachments()->get(); + + /** @var Storage $disk */ + $disk = Storage::disk('upload'); + + $set = $set->each( + static function (Attachment $attachment) use ($disk) { + $notes = $attachment->notes()->first(); + $attachment->file_exists = $disk->exists($attachment->fileName()); + $attachment->notes = $notes ? $notes->text : ''; + + return $attachment; + } + ); + + return $set; } /** diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index af9fd47e50..c68acfa141 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -26,6 +26,7 @@ use Carbon\Carbon; use DB; use Exception; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Attachment; use FireflyIII\Models\AutoBudget; use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; @@ -38,6 +39,7 @@ use FireflyIII\User; use Illuminate\Database\QueryException; use Illuminate\Support\Collection; use Log; +use Storage; /** * Class BudgetRepository. @@ -489,7 +491,22 @@ class BudgetRepository implements BudgetRepositoryInterface */ public function getAttachments(Budget $budget): Collection { - return $budget->attachments()->get(); + $set = $budget->attachments()->get(); + + /** @var Storage $disk */ + $disk = Storage::disk('upload'); + + $set = $set->each( + static function (Attachment $attachment) use ($disk) { + $notes = $attachment->notes()->first(); + $attachment->file_exists = $disk->exists($attachment->fileName()); + $attachment->notes = $notes ? $notes->text : ''; + + return $attachment; + } + ); + + return $set; } public function getMaxOrder(): int diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index ffd61461e4..e4e8736586 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -26,6 +26,7 @@ use Carbon\Carbon; use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\CategoryFactory; +use FireflyIII\Models\Attachment; use FireflyIII\Models\Category; use FireflyIII\Models\RecurrenceTransactionMeta; use FireflyIII\Models\RuleAction; @@ -34,6 +35,7 @@ use FireflyIII\Services\Internal\Update\CategoryUpdateService; use FireflyIII\User; use Illuminate\Support\Collection; use Log; +use Storage; /** * Class CategoryRepository. @@ -380,6 +382,21 @@ class CategoryRepository implements CategoryRepositoryInterface */ public function getAttachments(Category $category): Collection { - return $category->attachments()->get(); + $set = $category->attachments()->get(); + + /** @var Storage $disk */ + $disk = Storage::disk('upload'); + + $set = $set->each( + static function (Attachment $attachment) use ($disk) { + $notes = $attachment->notes()->first(); + $attachment->file_exists = $disk->exists($attachment->fileName()); + $attachment->notes = $notes ? $notes->text : ''; + + return $attachment; + } + ); + + return $set; } } diff --git a/app/Repositories/Journal/JournalAPIRepository.php b/app/Repositories/Journal/JournalAPIRepository.php index a4ff6c3df4..9b51937fb3 100644 --- a/app/Repositories/Journal/JournalAPIRepository.php +++ b/app/Repositories/Journal/JournalAPIRepository.php @@ -23,12 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Journal; +use FireflyIII\Models\Attachment; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\User; use Illuminate\Support\Collection; use Log; +use Storage; /** * Class JournalAPIRepository @@ -74,7 +76,22 @@ class JournalAPIRepository implements JournalAPIRepositoryInterface */ public function getAttachments(TransactionJournal $journal): Collection { - return $journal->attachments; + $set = $journal->attachments; + + /** @var Storage $disk */ + $disk = Storage::disk('upload'); + + $set = $set->each( + static function (Attachment $attachment) use ($disk) { + $notes = $attachment->notes()->first(); + $attachment->file_exists = $disk->exists($attachment->fileName()); + $attachment->notes = $notes ? $notes->text : ''; + + return $attachment; + } + ); + + return $set; } /** diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index 42654efe5b..3be16b5c9e 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Repositories\PiggyBank; use Carbon\Carbon; +use FireflyIII\Models\Attachment; use FireflyIII\Models\Note; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBankRepetition; @@ -33,6 +34,7 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\User; use Illuminate\Support\Collection; use Log; +use Storage; /** * Class PiggyBankRepository. @@ -374,6 +376,21 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface */ public function getAttachments(PiggyBank $piggyBank): Collection { - return $piggyBank->attachments()->get(); + $set = $piggyBank->attachments()->get(); + + /** @var Storage $disk */ + $disk = Storage::disk('upload'); + + $set = $set->each( + static function (Attachment $attachment) use ($disk) { + $notes = $attachment->notes()->first(); + $attachment->file_exists = $disk->exists($attachment->fileName()); + $attachment->notes = $notes ? $notes->text : ''; + + return $attachment; + } + ); + + return $set; } } diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php index a83997d54d..970978a746 100644 --- a/app/Repositories/Tag/TagRepository.php +++ b/app/Repositories/Tag/TagRepository.php @@ -26,6 +26,7 @@ use Carbon\Carbon; use DB; use FireflyIII\Factory\TagFactory; use FireflyIII\Helpers\Collector\GroupCollectorInterface; +use FireflyIII\Models\Attachment; use FireflyIII\Models\Location; use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleTrigger; @@ -34,6 +35,7 @@ use FireflyIII\Models\TransactionType; use FireflyIII\User; use Illuminate\Support\Collection; use Log; +use Storage; /** * Class TagRepository. @@ -549,7 +551,21 @@ class TagRepository implements TagRepositoryInterface */ public function getAttachments(Tag $tag): Collection { - return $tag->attachments()->get(); + $set= $tag->attachments()->get(); + /** @var Storage $disk */ + $disk = Storage::disk('upload'); + + $set = $set->each( + static function (Attachment $attachment) use ($disk) { + $notes = $attachment->notes()->first(); + $attachment->file_exists = $disk->exists($attachment->fileName()); + $attachment->notes = $notes ? $notes->text : ''; + + return $attachment; + } + ); + + return $set; } /** diff --git a/app/User.php b/app/User.php index c13227cd2c..53f1cdf805 100644 --- a/app/User.php +++ b/app/User.php @@ -138,10 +138,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property-read int|null $transactions_count * @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\User whereMfaSecret($value) * @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\User whereObjectguid($value) - * @property string $password - * @property bool $blocked - * @property string|null $blocked_code - * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Role[] $roles */ class User extends Authenticatable { @@ -217,6 +213,16 @@ class User extends Authenticatable return $this->hasMany(Attachment::class); } + /** + * @param string $role + * + * @return bool + */ + public function hasRole(string $role): bool + { + return $this->roles()->where('name', $role)->count() === 1; + } + /** * @codeCoverageIgnore * Link to available budgets diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 0e77304c08..72706e3f48 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -199,6 +199,7 @@ return [ 'forgot_pw_page_title' => 'Forgot your password for Firefly III', 'reset_pw_page_title' => 'Reset your password for Firefly III', 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', + 'no_att_demo_user' => 'The demo user can\'t upload attachments.', 'button_register' => 'Register', 'authorization' => 'Authorization', 'active_bills_only' => 'active bills only', diff --git a/resources/views/v1/list/attachments.twig b/resources/views/v1/list/attachments.twig index abfdba55d3..3b87ffcdc3 100644 --- a/resources/views/v1/list/attachments.twig +++ b/resources/views/v1/list/attachments.twig @@ -44,4 +44,4 @@ {% endfor %} - \ No newline at end of file +