{"id":21084156,"url":"https://github.com/unplugstudio/mezzanine-seminars","last_synced_at":"2025-03-14T05:11:28.056Z","repository":{"id":57441296,"uuid":"295860409","full_name":"unplugstudio/mezzanine-seminars","owner":"unplugstudio","description":"Seminar platform for Mezzanine CMS","archived":false,"fork":false,"pushed_at":"2021-03-08T06:11:35.000Z","size":65,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-21T00:37:03.408Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unplugstudio.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}},"created_at":"2020-09-15T22:09:46.000Z","updated_at":"2021-03-08T06:11:37.000Z","dependencies_parsed_at":"2022-09-02T08:23:07.964Z","dependency_job_id":null,"html_url":"https://github.com/unplugstudio/mezzanine-seminars","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unplugstudio%2Fmezzanine-seminars","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unplugstudio%2Fmezzanine-seminars/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unplugstudio%2Fmezzanine-seminars/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unplugstudio%2Fmezzanine-seminars/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unplugstudio","download_url":"https://codeload.github.com/unplugstudio/mezzanine-seminars/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243526953,"owners_count":20305115,"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-19T20:22:44.002Z","updated_at":"2025-03-14T05:11:28.036Z","avatar_url":"https://github.com/unplugstudio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mezzanine Seminars\n\n[![Workflow status](https://github.com/unplugstudio/mezzanine-seminars/workflows/Test%20and%20release/badge.svg)](https://github.com/unplugstudio/mezzanine-seminars/actions)\n[![PyPI version](https://badge.fury.io/py/mezzanine-seminars.svg)](https://pypi.org/project/mezzanine-seminars/)\n[![Python versions](https://img.shields.io/pypi/pyversions/mezzanine-seminars)](https://pypi.org/project/mezzanine-seminars/)\n[![Follows: Semantic Versioning](https://img.shields.io/badge/follows-SemVer-blue.svg)](https://semver.org/)\n[![Code style: Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nSeminar platform for [Mezzanine](http://mezzanine.jupo.org/) sites.\n\n## Features\n\n- Create seminars with public and private content\n- Accept payments to grant users access to seminars\n- Use registration codes to give access to select user groups without paying\n- \"Subject\" (category) system to group seminars by topic\n- Allows attendees to fill out \"post-seminar surveys\" to provide feedback\n- CSV exports of seminar registrations\n\n## Changelog / History / Release Notes\n\nCheck out [GitHub Releases](https://github.com/unplugstudio/mezzanine-seminars/releases).\n\n## Installation\n\n1. Install via pip: `pip install mezzanine-seminars`.\n2. Add `\"mezzanine_seminars\"` to `INSTALLED_APPS`. Make sure `\"mezzanine.accounts\"` is also added.\n3. Add to your root `urls.py`:\n\n```python\nurl(\"^seminars/\", include(\"mezzanine_seminars.urls\", namespace=\"seminars\"))\n```\n\n4. A new Seminars section will appear in the admin. Create your first Seminar!\n5. Point your visitors to `/seminars/` to see the list of available seminars.\n\n## Accepting payments\n\nBy default registering for a Seminar is completely free even if the seminar has a set price. You can enforce a payment requirement by using a custom form in `settings.SEMINARS_REGISTRATION_FORM` . Different payment processors require different forms:\n\n### Stripe\n\nFirst, make sure you install the additional requirements with `pip install mezzanine-seminars[stripe]`. Then make sure you define your secret API key in `settings.STRIPE_SK`. In development this should be a test key.\n\nFinally set the Stripe form to be used when users register for a seminar:\n\n```python\n# settings.py\nSEMINARS_REGISTRATION_FORM = \"mezzanine_seminars.forms.stripe.StripeRegistrationForm\"\n```\n\nThis will handle the backend configuration, but you will need to override `seminars/seminar_registration_create.html` to configure Stripe's browser bindings `stripe.js`. This is explained in [Stripe's official docs](https://stripe.com/docs/payments/accept-a-payment-synchronously), but it boils down to sending a PaymentMethod ID in the hidden field named `stripe_method`. With that the server will be able to complete the purchase.\n\n## Registration Codes\n\nSome users might pay for seminar access without using the website, or you (the site owner) might have a special agreement with them to give them access to seminar content without paying. Registration Codes let you do this. Here's an example:\n\n\u003e ACME Inc. has reached an agreement with you for 20 seats for Seminar XYZ. Site admins create the Purchase Code \"acme\" with the capacity limited to 20. Employees of ACME Inc. will now create their own accounts on the site and enter code \"acme\" during the registration step for Seminar XYZ instead of paying for their registration. Once the code has been used on 20 registrations it is no longer valid. Site admins will be able to see which code was used in the Seminar Registration admin to identify the 20 attendees from ACME. Multiple Purchase Codes can be active at the same time to allow enrolling multiple user groups, each with a set number of seats.\n\nGenerally you will want to combine Registration Codes with an alternative payment method to give users a choice of which to use. For this reason the form `mezzanine_seminars.forms.BaseRegistrationCodeForm` is provided to be mixed in with other forms.\n\nFor example, to allow users to register with Stripe OR Registration Codes:\n\n```python\n# your_app/forms.py\nfrom mezzanine_seminars.forms import BaseRegistrationCodeForm\nfrom mezzanine_seminars.forms.stripe import StripeRegistrationForm\n\nclass CombinedRegistrationForm(BaseRegistrationCodeForm, StripeRegistrationForm):\n    \"\"\"\n    Seminar Registration form that supports both Stripe and Registration Codes\n    \"\"\"\n\n# settings.py\nSEMINARS_REGISTRATION_FORM = \"your_app.forms.CombinedRegistrationForm\"\n```\n\n## Contributing\n\nBefore you contribute a bugfix or add a new feature, please check the issue tracker and open a new issue to discuss the work to be done. Once you're clear you want to work on the codebase:\n\n```bash\ngit clone git@github.com:unplugstudio/mezzanine-seminars\ncd mezzanine-seminars\n\n# Test suite\npip install -e .[testing]\npytest tests\n\n# Code style\npip install flake8 black\nflake8 .\nblack .\n\n# ALTERNATIVE: have Tox run everything (tests and code style)\npip install tox\ntox\n```\n\nOnce you're done with your changes and ensured all tests pass, create a pull request and verify the continuos integration tests also pass.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funplugstudio%2Fmezzanine-seminars","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funplugstudio%2Fmezzanine-seminars","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funplugstudio%2Fmezzanine-seminars/lists"}