Coder Social home page Coder Social logo

laravel-drafts's Introduction

Hi ๐Ÿ‘‹, I'm Jim

A developer from Brighton, UK

laravel-drafts's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar kinkaz avatar oddvalue avatar sergkeim avatar vildanbina avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

laravel-drafts's Issues

In 1.2 I cannot view or edit drafts as the owner of the draft

Hi,

Perhaps I am missing something.

I am using Filament 2 with a resource route called TicketResource, I cannot edit or see model entries that are is_published = 0 aka in draft. They go to 404 unless they are published. As the creator of the draft I would be able to see and interact with.

In my TicketResource I have:

    public static function getPages(): array
    {
        return [
            'index' => Pages\ListTickets::route('/'),
            'create' => Pages\CreateTicket::route('/create'),
            'view' => Pages\ViewTicket::route('/{record}'),
            'edit' => Pages\EditTicket::route('/{record}/edit'),
            'activities' => Pages\ListTicketActivities::route('/{record}/activities'),
        ];
    }

Can you assist with what I may be missing?

Multiple published records when draft is published

Hello, thank you for your work on this library.

Here's a failing test, which I thought would pass:

it('does not create multiple published records', function () {
    $post = Post::factory()->create();
    $post->saveAsDraft();
    $post->draft->publish()->save();
    $this->assertCount(1, Post::withoutDrafts()->get());
    // Failed asserting that actual size 2 matches expected size 1.
});

If this is the expected behaviour, how do I get only the latest published instances?

static::updating not firing on Model Update

Hi there,

When using $model->update() the updating method is not firing thus not creating a new revision of an updated model.

$this->model->update([
            'title' => $this->request->title,
            'content' => $this->request->content,
            'meta_title' => $this->request->meta_title,
            'meta_description' => $this->request->meta_description,
            'slug' => $this->request->slug,
            'parent_id' => $this->request->parent_id,
            'user_id' => auth()->id(),
        ]);

When using the create() method a new record is added with is_published set to 1 and also is_current set to 1 and creates a new uuid for the post and doesn't create any form of relationship to the previous - im not sure if im doing something wrong or if im misunderstanding the docs.

Ultimately, when I update a record, a new revision should be made and by default marked as is_published and is_current and then the previous to be unmarked.

Error when creating

The getCurrentUser method of the LaravelDrafts class informs that it returns an Authenticatable type, although based on the Trait code, it can return a null result
I think it should say

public function getCurrentUser():? Authenticatable

Error Log

[2024-04-12 14:12:47] local.ERROR: Oddvalue\LaravelDrafts\LaravelDrafts::getCurrentUser(): Return value must be of type Illuminate\Contracts\Auth\Authenticatable, null returned {"exception":"[object] (TypeError(code: 0): Oddvalue\\LaravelDrafts\\LaravelDrafts::getCurrentUser(): Return value must be of type Illuminate\\Contracts\\Auth\\Authenticatable, null returned at /var/www/html/vendor/oddvalue/laravel-drafts/src/LaravelDrafts.php:15)
[stacktrace]
#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(357): Oddvalue\\LaravelDrafts\\LaravelDrafts->getCurrentUser()
#1 /var/www/html/vendor/oddvalue/laravel-drafts/src/Concerns/HasDrafts.php(329): Illuminate\\Support\\Facades\\Facade::__callStatic()
#2 /var/www/html/vendor/oddvalue/laravel-drafts/src/Concerns/HasDrafts.php(55): App\\Models\\User->setPublisher()
#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(458): App\\Models\\User::Oddvalue\\LaravelDrafts\\Concerns\\{closure}()
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(286): Illuminate\\Events\\Dispatcher->Illuminate\\Events\\{closure}()
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(266): Illuminate\\Events\\Dispatcher->invokeListeners()
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(232): Illuminate\\Events\\Dispatcher->dispatch()
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php(215): Illuminate\\Events\\Dispatcher->until()
#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1286): Illuminate\\Database\\Eloquent\\Model->fireModelEvent()
#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1142): Illuminate\\Database\\Eloquent\\Model->performInsert()
#10 /var/www/html/vendor/oddvalue/laravel-drafts/src/Concerns/HasDrafts.php(296): Illuminate\\Database\\Eloquent\\Model->save()
#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1026): App\\Models\\User->save()
#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/helpers.php(359): Illuminate\\Database\\Eloquent\\Builder->Illuminate\\Database\\Eloquent\\{closure}()
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1025): tap()
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(584): Illuminate\\Database\\Eloquent\\Builder->create()
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1729): Illuminate\\Database\\Eloquent\\Builder->Illuminate\\Database\\Eloquent\\{closure}()
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(584): Illuminate\\Database\\Eloquent\\Builder->withSavepointIfNeeded()
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(571): Illuminate\\Database\\Eloquent\\Builder->createOrFirst()
#18 /var/www/html/routes/web.php(6): Illuminate\\Database\\Eloquent\\Builder->firstOrCreate()
#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/CallableDispatcher.php(40): Illuminate\\Routing\\RouteFileRegistrar->{closure}()
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(238): Illuminate\\Routing\\CallableDispatcher->dispatch()
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(209): Illuminate\\Routing\\Route->runCallable()
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(88): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Session\\Middleware\\StartSession->handle()
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(75): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#39 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#41 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#44 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#46 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#47 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#50 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
#52 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#54 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle()
#56 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#58 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#59 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#60 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#61 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1168): Illuminate\\Foundation\\Http\\Kernel->handle()
#62 /var/www/html/public/index.php(17): Illuminate\\Foundation\\Application->handleRequest()
#63 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/resources/server.php(16): require_once('...')
#64 {main}
"} 

Middleware not working with route binding

Please excuse me if this is a misunderstanding on my part - I've tried applying the middleware in a few different ways, but am having some issues getting it to work successfully with route binding with models.

For example (imagine item ID 123 is a draft):

Route::withDrafts(function (): void {
    Route::get('/item/{item}', function() {
        dd(Item::find(123));
    });
});

This works fine. However, something along the lines of:

Route::withDrafts(function (): void {
    Route::get('/item/{item}', ItemController::class, 'edit');
});

...

class ItemController {
    public function edit(Item $item) 
    {
         dd($item);
    }
}

results in a 404. Setting the is_published field to 1 on the item in question allows the page to load, so the route works, it just isn't obeying the middleware and including drafts when binding the item model.

Publishing model doesn't follow casts

I have a Model with a column that is casted to array

protected $casts = [
        'my_col' => 'array',
 ];

After calling publish()->save() array is saved as wrapped in double quotes
image

Intelephense error on Laravel 10

image

    //  App\Http\Controllers\AlbumController
    /**
     * Show the form for editing the specified resource.
     */
    public function edit(int $album): \Inertia\Response
    {
        $album = Album::current()->findOrFail($album);

        return Inertia::render('Dashboard/Album/Edit', [
            'album' => $album,
        ]);
    }

Maybe docblock on HasDrafts.php line 18 is causing the issue. Any help?

Environment:

  • Laravel Drafts 1.3.0
  • Laravel 10.12.0
  • PHP 8.2.3 nts
  • PHP Intelephense 1.9.5
  • VSCode 1.78.2
  • Windows 11

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.