{"id":18386065,"url":"https://github.com/catlabinteractive/catlab-events","last_synced_at":"2026-02-20T22:01:28.880Z","repository":{"id":37581854,"uuid":"293601085","full_name":"CatLabInteractive/catlab-events","owner":"CatLabInteractive","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-30T21:45:56.000Z","size":4218,"stargazers_count":0,"open_issues_count":20,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-19T09:54:32.430Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CatLabInteractive.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-07T18:18:12.000Z","updated_at":"2025-03-30T21:46:00.000Z","dependencies_parsed_at":"2023-02-19T05:45:39.652Z","dependency_job_id":"985abdf7-84cc-44d9-9dfa-0c7f62096b73","html_url":"https://github.com/CatLabInteractive/catlab-events","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CatLabInteractive/catlab-events","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatLabInteractive%2Fcatlab-events","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatLabInteractive%2Fcatlab-events/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatLabInteractive%2Fcatlab-events/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatLabInteractive%2Fcatlab-events/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CatLabInteractive","download_url":"https://codeload.github.com/CatLabInteractive/catlab-events/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatLabInteractive%2Fcatlab-events/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261618106,"owners_count":23185091,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T01:20:05.270Z","updated_at":"2026-02-20T22:01:23.858Z","avatar_url":"https://github.com/CatLabInteractive.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catlab Events\nCatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to \nany kind of event that requires tickets to be sold. It includes integration with a centralized \npayment gateway and UiTPAS integration (in Belgium).\n\n## Setup\nThe project relies on some external projects so hosting it is not a straight forward business. You'll have \nto either implement an SSO and payment gateway, or contact us to create accounts on our systems.\n\nRun ```composer install``` to download all required php libraries. Copy ```.env.example``` to ```.env``` and fill in the database\ncredentials. Finally, run ```php artisan migrate``` to initialize the database.\n\nRun ```npm install``` to install all dependencies and then run ```npm run production``` to compile the resources.\n\nYou should now be able to register an account on the website.\n\n### Admin account \u0026 organisations\nOnly admin users can log in into the admin dashboard (at `/admin`). The first user that registers at the fresly installed \nplatform will get admin rights assigned automatically.\n\nThe platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created \nfor them, but an admin user can be assigned to multiple organisations.\n\nThe admin state of a user is stored in the `admin` property of the `users` table.\n\n### Deploy scripts\nThere are two buildscripts in /build that you might want to use to deploy on production servers.\n\nWe run ```prepare.sh``` on our buildserver, then push the whole project over sftp and finally run ```upgrade.sh``` on \nthe production server. There are cleaner ways to handle deploys, so feel free to use your own system.\n\n## UiTDatabank\nThis project integrates with the [UiTPAS API](https://documentatie.uitdatabank.be/) to sell \ndiscounted/subsidised tickets for verified organisations. The integration does not include synchronizing \nevents with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.\n\n![UiTPAS - step 1](docs/screenshots/uitpas-step1.png)\n\n![UiTPAS - step 2](docs/screenshots/uitpas-step2.png)\n\nA sale of an UiTPAS subsidised ticket follows a few steps:\n1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to \n[`uitpas/cultureevent/search`](https://documentatie.uitdatabank.be/content/uitpas_api/latest/events/uitpas-aanbod-doorzoeken.html) \nto fetch the applicable tariff for this specific user. This call happens in [UiTPASVerifier](app/UitDB/UiTPASVerifier.php).\nOnce the appropriate tariff is fetched, it is entered in the [TicketPriceCalculator](app/Tools/TicketPriceCalculator.php) \nwhere the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event \n(include / exclude ticket fee from the tariff).\n3. The user then has a chance to validate their purchase.\n4. When they confirm their sale, we first create a new [Order](app/Models/Order.php), save it, then register the sale \nto UiTPAS (this can only be done once) by calling [`uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber}`](https://documentatie.uitdatabank.be/content/uitpas_api/latest/events/online-registratie-van-verkoop-van-ticket.html) \nand then redirect the user to the payment gateway. The registration happens in registerTicketSale in \n[UiTPASVerifier](app/UitDB/UiTPASVerifier.php). We store the UiTPAS sale id in the Order model.\n5. If the payment succeeds, we are done. \n6. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale \nwon't block the transaction. We call [`uitpas/cultureevent/cancelonline/{ticketSaleId}`](https://documentatie.uitdatabank.be/content/uitpas_api/latest/events/online-annulatie-van-verkoop-van-ticket-adhv-id.html) \nThis is done in registerOrderCancel in [UiTPASVerifier](app/UitDB/UiTPASVerifier.php).\n\n## Domains\nevents.catlab.eu\nlive.quizfabriek.be\nlive.huiskamerquiz.be\ntickets.quizfabriek.be\nlive.quizwitz.com\nlive.sittingbull.be\nquiz.gent\nwww.quiz.gent","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatlabinteractive%2Fcatlab-events","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatlabinteractive%2Fcatlab-events","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatlabinteractive%2Fcatlab-events/lists"}