Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Catlab Events

CatLab Events is a ticketing system currently aimed towards quizzes, but adaptable to any kind of event that requires tickets to be sold. It includes integration with a centralized payment gateway and UiTPAS integration (in Belgium).

Setup

The project relies on some external projects so hosting it is not a straight forward business. You'll have to either implement an SSO and payment gateway, or contact us to create accounts on our systems.

Run composer install to download all required php libraries. Copy .env.example to .env and fill in the database credentials. Finally, run php artisan migrate to initialize the database.

Run npm install to install all dependencies and then run npm run production to compile the resources.

You should now be able to register an account on the website.

Admin account & organisations

Only admin users can log in into the admin dashboard (at /admin). The first user that registers at the fresly installed platform will get admin rights assigned automatically.

The platform can host multiple organisations. When an admin user logs in into the admin panel, an organisation is created for them, but an admin user can be assigned to multiple organisations.

The admin state of a user is stored in the admin property of the users table.

Deploy scripts

There are two buildscripts in /build that you might want to use to deploy on production servers.

We run prepare.sh on our buildserver, then push the whole project over sftp and finally run upgrade.sh on the production server. There are cleaner ways to handle deploys, so feel free to use your own system.

UiTDatabank

This project integrates with the UiTPAS API to sell discounted/subsidised tickets for verified organisations. The integration does not include synchronizing events with the uitdatabank just yet, so uitdatabank ids must be manually set in the event admin panel.

UiTPAS - step 1

UiTPAS - step 2

A sale of an UiTPAS subsidised ticket follows a few steps:

  1. Before the sale, a client is requested to enter their UiTPAS id in a text field. Once submitted, a call is made to uitpas/cultureevent/search to fetch the applicable tariff for this specific user. This call happens in UiTPASVerifier. Once the appropriate tariff is fetched, it is entered in the TicketPriceCalculator where the tariff is split into ticket sale, transaction costs and VAT, depending on the settings of the event (include / exclude ticket fee from the tariff).
  2. The user then has a chance to validate their purchase.
  3. When they confirm their sale, we first create a new Order, save it, then register the sale to UiTPAS (this can only be done once) by calling uitpas/cultureevent/{eventCdbid}/buyonline/{uitpasNumber} and then redirect the user to the payment gateway. The registration happens in registerTicketSale in UiTPASVerifier. We store the UiTPAS sale id in the Order model.
  4. If the payment succeeds, we are done.
  5. If the payment does not succeed, we need to cancel the order to make sure the user can try again and the UiTPAS sale won't block the transaction. We call uitpas/cultureevent/cancelonline/{ticketSaleId} This is done in registerOrderCancel in UiTPASVerifier.

Domains

events.catlab.eu live.quizfabriek.be live.huiskamerquiz.be tickets.quizfabriek.be live.quizwitz.com live.sittingbull.be quiz.gent www.quiz.gent

Running tests

Unit tests (no database needed):

vendor/bin/phpunit --testsuite Unit

Integration tests (runs inside docker against a dedicated catlab_events_test database; requires docker compose):

bin/integration-tests.sh

Pass phpunit arguments through, e.g. bin/integration-tests.sh --filter PaidTicketPurchaseTest.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages