Attendize – event tickets selling system based on Laravel 5

This is the third article in series of reviewing various Laravel-based projects, and today our attention goes to Attendize – ticket selling web-project which you can install on your server.


Other reviews in this series:

  1. FlarePoint: Laravel-based free CRM
  2. Invoice Ninja – Laravel-powered solution for better invoicing
  3. Attendize – event tickets selling system based on Laravel 5
  4. Ribbbon – project management system on Laravel 5.1 and Vue.js
  5. Faveo: impressive helpdesk system built on Laravel
  6. Confomo: Laravel-based website to meet Twitter friends at conferences

Notice from creators: Attendize is in the early stages of development and therefore is likely to contain bugs and unfinished features. Be wary about using Attendize in a production environment.

So, Attendize is based on Laravel 5.2 and freely available on Github. Let’s install and see how it works.

Installation

To install Attendize, we don’t clone the repository – we download ready-made ZIP file (quite a big one – 91 MB and more than 200 MB unzipped) and unpack it in our folder. Then we have two choices: go to URL /install or choose to run command-line installer by filling in .env file and then running php artisan attendize:install.

I’ve tried to run visual installer, but it failed me with this error:

attendize api error

Not a good start, right? Apparently, it was an easy fix – just add this line to .env file (it’s not provided in .env.example file):

API_PREFIX=api

After that I decided to use command-line installer which went well:

attendize installer

And then – nice success message!

attendize install success

Final result – pretty login form in the browser:

attendize login


Usage

Ok, let’s log in and see how it all works. Insteresting thing – after first login you get asked to create an organizer. Of course, makes sense, how can you create events and sell tickets without having organizers?

attendize create organiser

And then we get into an empty dashboard for organizer.

attendize list

Then we can actually create events, here we go:

attendize create event

What I liked about this form is auto-fill of venue by its name – small details like this mean that the tool is quite mature and well-thought of. Well done, guys.

Next – we have a dashboard of the event.

attendize event dashboard

Important thing here – by default event isn’t public, so we need to create tickets and then make it “live”.

attendize create ticket

Result of all of that – every URL has its own public URL – for those who want to actually buy tickets.

attendize event

And that’s the essence of the project – people can buy tickets, and then you see the results on your dashboard. Of course, I assume there’s a lot of functionality deep inside, but that’s as far as I went for this short review.


Laravel code

Enough of the functionality, let’s see how easy it is to understand and potentially customize the code. As usual, I judge the app but its routes file, and here in Laravel 5.2 version we check app/Http/routes.php, and it looks good. 700 lines of routing code, which is quite ok for this kind of app. But what got my attention was this:

        Route::get('{organiser_id}/customize', [
            'as'   => 'showOrganiserCustomize',
            'uses' => 'OrganiserCustomizeController@showCustomize',
        ]);
        Route::post('{organiser_id}/customize', [
            'as'   => 'postEditOrganiser',
            'uses' => 'OrganiserCustomizeController@postEditOrganiser',
        ]);

        Route::get('create', [
            'as'   => 'showCreateOrganiser',
            'uses' => 'OrganiserController@showCreateOrganiser',
        ]);
        Route::post('create', [
            'as'   => 'postCreateOrganiser',
            'uses' => 'OrganiserController@postCreateOrganiser',
        ]);

Basically, they don’t use Resource Controllers, all the actions are described as separate get/post routes. Not sure what was the thinking behind it, cause now routes are a bit harder to understand/navigate, but I guess it shouldn’t be a big problem.

Now, let’s take a look at random Controller, for example – EventController.php:

class EventController extends MyBaseController
{

    public function showCreateEvent(Request $request)
    {
        $data = [
            'modal_id'     => $request->get('modal_id'),
            'organisers'   => Organiser::scope()->lists('name', 'id'),
            'organiser_id' => $request->get('organiser_id') ? $request->get('organiser_id') : false,
        ];

        return view('ManageOrganiser.Modals.CreateEvent', $data);
    }

Oh, we’ve got a modal window controller here, cool. The code is actually quite good and understandable. Interesting notice – they use their own MyBaseController:

class MyBaseController extends Controller
{
    public function __construct()
    {
        /*
         * Set up JS across all views
         */
        JavaScript::put([
            'User'                => [
                'full_name'    => Auth::user()->full_name,
                'email'        => Auth::user()->email,
                'is_confirmed' => Auth::user()->is_confirmed,
            ],
            /*
             * @todo These should be user selectable
             */
            'DateFormat'          => 'dd-MM-yyyy',
            'DateTimeFormat'      => 'dd-MM-yyyy hh:mm',
            'GenericErrorMessage' => 'Whoops! An unknown error has occurred. Please try again or contact support if the problem persists.'
        ]);

        /*
         * Share the organizers across all views
         */
        View::share('organisers', Organiser::scope()->get());
    }

Good logic to introduce their own layer between default Laravel Controller and every Controller in the project. Seems legit.

All in all, Attendize seems like a really solid project, although creators say it’s in “alpha” version. Not sure if it’s worth using on real events, but I would definitely give it a try, if you organize some kind of event and don’t want to use Eventbrite or similar local merchant.

Links:


Other reviews in this series:

  1. FlarePoint: Laravel-based free CRM
  2. Invoice Ninja – Laravel-powered solution for better invoicing
  3. Attendize – event tickets selling system based on Laravel 5
  4. Ribbbon – project management system on Laravel 5.1 and Vue.js
  5. Faveo: impressive helpdesk system built on Laravel
  6. Confomo: Laravel-based website to meet Twitter friends at conferences

Like our articles?
Check out our Laravel online courses!

1 COMMENT

LEAVE A REPLY

Please enter your comment!
Please enter your name here