.envrc
.gitignore
.pre-commit-config.yaml
.prettierrc
.pylintrc
.readthedocs.yaml
CHANGELOG.md
LICENSE
MANIFEST.in
NOTICE.md
README.md
SECURITY.md
eslint.config.js
mkdocs.yml
package-lock.json
package.json
pyproject.toml
release.md
requirements.system
setup.py
tsconfig.json
version.json
.circleci/autogenerated_header.yml
.circleci/config.yml
.circleci/scripts/get_access_token.py
.circleci/src/@common.yml
.circleci/src/@orbs.yml
.circleci/src/commands/activate-venv.yml
.circleci/src/commands/configure-deliverino.yml
.circleci/src/commands/notify.yml
.circleci/src/jobs/black.yml
.circleci/src/jobs/build-documentation.yml
.circleci/src/jobs/build-js.yml
.circleci/src/jobs/build-package.yml
.circleci/src/jobs/bump-version.yml
.circleci/src/jobs/check-translations.yml
.circleci/src/jobs/compile-translations.yml
.circleci/src/jobs/create-release.yml
.circleci/src/jobs/deploy-user-manual.yml
.circleci/src/jobs/e2e.yml
.circleci/src/jobs/install.yml
.circleci/src/jobs/isort.yml
.circleci/src/jobs/lint-ts.yml
.circleci/src/jobs/mypy.yml
.circleci/src/jobs/promote-release.yml
.circleci/src/jobs/publish-package.yml
.circleci/src/jobs/publish-release-artifact.yml
.circleci/src/jobs/pylint.yml
.circleci/src/jobs/test-python313.yml
.circleci/src/jobs/test.yml
.circleci/src/jobs/upload-test-coverage.yml
.circleci/src/workflows/commit.yml
.circleci/src/workflows/commit_main.yml
.circleci/src/workflows/delivery_beta.yml
.circleci/src/workflows/promotion.yml
.github/CODEOWNERS
.github/PULL_REQUEST_TEMPLATE.md
.github/dependabot.yml
.github/logo.png
.github/release.yml
.github/ISSUE_TEMPLATE/bug-report.md
.github/ISSUE_TEMPLATE/story.md
.github/ISSUE_TEMPLATE/task.md
.idea/.gitignore
.idea/dataSources.xml
.idea/git_toolbox_prj.xml
.idea/lunes-cms.iml
.idea/misc.xml
.idea/modules.xml
.idea/vcs.xml
.idea/runConfigurations/Build___serve_e2e_docs.xml
.idea/runConfigurations/Install_dependencies.xml
.idea/runConfigurations/Run_backend.xml
.idea/runConfigurations/Run_backend_for_e2e.xml
.idea/runConfigurations/Run_e2e_Tests.xml
.idea/runConfigurations/Run_tests.xml
docs/Makefile
docs/src/analytics.rst
docs/src/audio-generation.rst
docs/src/code-of-conduct.rst
docs/src/code-style-guidelines.rst
docs/src/conf.py
docs/src/continous-integration.rst
docs/src/dev-server.rst
docs/src/dev-tools.rst
docs/src/documentation.rst
docs/src/example-sentence-generation.rst
docs/src/git-workflow.rst
docs/src/image-generation.rst
docs/src/index.rst
docs/src/installation.rst
docs/src/internationalization.rst
docs/src/issue-reporting.rst
docs/src/packaging.rst
docs/src/prod-server.rst
docs/src/release-workflow.rst
docs/src/images/circleci-deploy-workflow.png
docs/src/images/circleci-develop-workflow.png
docs/src/images/circleci-main-workflow.png
docs/src/images/github-flow.png
docs/src/static/custom.css
docs/src/templates/breadcrumbs.html
docs/src/templates/footer.html
docs/src/templates/layout.html
e2e-tests/README.md
e2e-tests/conftest.py
e2e-tests/test_add_group.py
e2e-tests/test_add_job.py
e2e-tests/test_add_unit.py
e2e-tests/test_add_user.py
e2e-tests/test_add_word.py
e2e-tests/test_bulk_delete_jobs.py
e2e-tests/test_bulk_delete_units.py
e2e-tests/test_bulk_delete_words.py
e2e-tests/test_delete_group.py
e2e-tests/test_delete_job.py
e2e-tests/test_delete_unit.py
e2e-tests/test_delete_user.py
e2e-tests/test_delete_word.py
e2e-tests/test_edit_group.py
e2e-tests/test_edit_job.py
e2e-tests/test_edit_unit.py
e2e-tests/test_edit_user_information.py
e2e-tests/test_edit_user_permissions.py
e2e-tests/test_edit_word.py
e2e-tests/test_generate_word_audio_and_image.py
e2e-tests/test_login.py
e2e-tests/test_password_reset.py
e2e-tests/assets/drill.png
e2e-tests/assets/test_sound.mp3
e2e-tests/assets/tester.png
example-configs/apache2-vhost.conf.example
example-configs/lunes-cms.cron.example
example-configs/lunes-cms.ini
lunes_cms/README.md
lunes_cms/__init__.py
lunes_cms/lunes-cms-cli
lunes_cms.egg-info/PKG-INFO
lunes_cms.egg-info/SOURCES.txt
lunes_cms.egg-info/dependency_links.txt
lunes_cms.egg-info/requires.txt
lunes_cms.egg-info/scm_file_list.json
lunes_cms.egg-info/scm_version.json
lunes_cms.egg-info/top_level.txt
lunes_cms/_manifest/spdx_2.2/manifest.spdx.json
lunes_cms/analytics/__init__.py
lunes_cms/analytics/apps.py
lunes_cms/analytics/influx.py
lunes_cms/analytics/api/__init__.py
lunes_cms/analytics/api/serializers.py
lunes_cms/analytics/api/urls.py
lunes_cms/analytics/api/views.py
lunes_cms/analytics/fixtures/test_data.json
lunes_cms/analytics/management/__init__.py
lunes_cms/analytics/management/commands/__init__.py
lunes_cms/analytics/management/commands/aggregate_analytics.py
lunes_cms/analytics/migrations/0001_initial.py
lunes_cms/analytics/migrations/0002_alter_analyticsevent_event_type.py
lunes_cms/analytics/migrations/0003_jobselectionaggregate.py
lunes_cms/analytics/migrations/0004_add_duration_tracking_models.py
lunes_cms/analytics/migrations/0005_add_dropout_tracking.py
lunes_cms/analytics/migrations/0006_alter_analyticsevent_event_type_and_more.py
lunes_cms/analytics/migrations/0007_add_training_exercise_tracking.py
lunes_cms/analytics/migrations/0008_keep_raw_events_drop_buckets.py
lunes_cms/analytics/migrations/__init__.py
lunes_cms/analytics/models/__init__.py
lunes_cms/analytics/models/analytics_event.py
lunes_cms/analytics/models/dropout_aggregate.py
lunes_cms/analytics/models/exercise_repetition_aggregate.py
lunes_cms/analytics/models/job_selection_aggregate.py
lunes_cms/analytics/models/module_duration_aggregate.py
lunes_cms/analytics/models/session_aggregate.py
lunes_cms/analytics/tests/__init__.py
lunes_cms/analytics/tests/commands/__init__.py
lunes_cms/analytics/tests/commands/aggregate_analytics_test.py
lunes_cms/analytics/tests/models/__init__.py
lunes_cms/analytics/tests/models/analytics_event_test.py
lunes_cms/analytics/tests/models/exercise_repetition_event_test.py
lunes_cms/api/__init__.py
lunes_cms/api/apps.py
lunes_cms/api/exception_handler.py
lunes_cms/api/permissions.py
lunes_cms/api/urls.py
lunes_cms/api/utils.py
lunes_cms/api/templates/swagger_ui.html
lunes_cms/api/v1/__init__.py
lunes_cms/api/v1/urls.py
lunes_cms/api/v1/serializers/__init__.py
lunes_cms/api/v1/serializers/alternative_word_serializer.py
lunes_cms/api/v1/serializers/discipline_serializer.py
lunes_cms/api/v1/serializers/document_image_list_serializer.py
lunes_cms/api/v1/serializers/document_image_serializer.py
lunes_cms/api/v1/serializers/document_serializer.py
lunes_cms/api/v1/serializers/fallback_icon_serializer.py
lunes_cms/api/v1/serializers/feedback_serializer.py
lunes_cms/api/v1/serializers/group_serializer.py
lunes_cms/api/v1/serializers/sponsor_serializer.py
lunes_cms/api/v1/serializers/training_set_serializer.py
lunes_cms/api/v1/views/__init__.py
lunes_cms/api/v1/views/discipline_filtered_viewset.py
lunes_cms/api/v1/views/discipline_viewset.py
lunes_cms/api/v1/views/document_by_id_viewset.py
lunes_cms/api/v1/views/document_viewset.py
lunes_cms/api/v1/views/feedback_viewset.py
lunes_cms/api/v1/views/group_viewset.py
lunes_cms/api/v1/views/sponsors_viewset.py
lunes_cms/api/v1/views/training_set_by_id_viewset.py
lunes_cms/api/v1/views/training_set_viewset.py
lunes_cms/api/v1/views/word_viewset.py
lunes_cms/api/v2/__init__.py
lunes_cms/api/v2/matomo_tracking.py
lunes_cms/api/v2/schema.py
lunes_cms/api/v2/urls.py
lunes_cms/api/v2/serializers/__init__.py
lunes_cms/api/v2/serializers/feedback_serializer.py
lunes_cms/api/v2/serializers/job_serializer.py
lunes_cms/api/v2/serializers/sponsor_serializer.py
lunes_cms/api/v2/serializers/unit_serializer.py
lunes_cms/api/v2/serializers/unit_word_relation_serializer.py
lunes_cms/api/v2/serializers/word_serializer.py
lunes_cms/api/v2/views/__init__.py
lunes_cms/api/v2/views/feedback_viewset.py
lunes_cms/api/v2/views/job_units_viewset.py
lunes_cms/api/v2/views/job_viewset.py
lunes_cms/api/v2/views/job_words_viewset.py
lunes_cms/api/v2/views/sponsors_viewset.py
lunes_cms/api/v2/views/unit_words_viewset.py
lunes_cms/api/v2/views/word_viewset.py
lunes_cms/cms/__init__.py
lunes_cms/cms/admin.py
lunes_cms/cms/apps.py
lunes_cms/cms/feedback_filter.py
lunes_cms/cms/forms.py
lunes_cms/cms/list_filter.py
lunes_cms/cms/urls.py
lunes_cms/cms/utils.py
lunes_cms/cms/validators.py
lunes_cms/cms/widgets.py
lunes_cms/cms/admins/__init__.py
lunes_cms/cms/admins/alternative_word_admin.py
lunes_cms/cms/admins/discipline_admin.py
lunes_cms/cms/admins/document_admin.py
lunes_cms/cms/admins/document_image_admin.py
lunes_cms/cms/admins/document_resource.py
lunes_cms/cms/admins/feedback_admin.py
lunes_cms/cms/admins/group_api_key_admin.py
lunes_cms/cms/admins/sponsor_admin.py
lunes_cms/cms/admins/training_set_admin.py
lunes_cms/cms/migrations/0001_initial.py
lunes_cms/cms/migrations/0002_modify_group_model.py
lunes_cms/cms/migrations/0003_remove_documentimage_name.py
lunes_cms/cms/migrations/0004_feedback.py
lunes_cms/cms/migrations/0005_auto_create_id.py
lunes_cms/cms/migrations/0006_convert_group_api_key.py
lunes_cms/cms/migrations/0007_document_created_by_link.py
lunes_cms/cms/migrations/0008_add_numerals_adverbs_and_pronouns_as_word_types.py
lunes_cms/cms/migrations/0009_sponsor.py
lunes_cms/cms/migrations/0010_sponsor_url.py
lunes_cms/cms/migrations/0011_document_example_sentence.py
lunes_cms/cms/migrations/0012_add_additional_field.py
lunes_cms/cms/migrations/0013_add_plural_field.py
lunes_cms/cms/migrations/0014_add_plural_field_and_plural_article.py
lunes_cms/cms/migrations/0015_add_grammatical_gender_fields.py
lunes_cms/cms/migrations/__init__.py
lunes_cms/cms/models/__init__.py
lunes_cms/cms/models/alternative_word.py
lunes_cms/cms/models/content_type.py
lunes_cms/cms/models/discipline.py
lunes_cms/cms/models/document.py
lunes_cms/cms/models/document_image.py
lunes_cms/cms/models/feedback.py
lunes_cms/cms/models/group.py
lunes_cms/cms/models/group_api_key.py
lunes_cms/cms/models/sponsor.py
lunes_cms/cms/models/static.py
lunes_cms/cms/models/training_set.py
lunes_cms/cms/templates/admin/base.html
lunes_cms/cms/templates/admin/delete_confirmation.html
lunes_cms/cms/templates/admin/delete_selected_confirmation.html
lunes_cms/cms/templates/admin/discipline_filter.html
lunes_cms/cms/templates/admin/object_delete_summary.html
lunes_cms/cms/templatetags/__init__.py
lunes_cms/cms/templatetags/admin_filter_tags.py
lunes_cms/cmsv2/__init__.py
lunes_cms/cmsv2/admin.py
lunes_cms/cmsv2/apps.py
lunes_cms/cmsv2/feedback_filter.py
lunes_cms/cmsv2/urls.py
lunes_cms/cmsv2/utils.py
lunes_cms/cmsv2/validators.py
lunes_cms/cmsv2/admins/__init__.py
lunes_cms/cmsv2/admins/base.py
lunes_cms/cmsv2/admins/feedback_admin.py
lunes_cms/cmsv2/admins/job_admin.py
lunes_cms/cmsv2/admins/unit_admin.py
lunes_cms/cmsv2/admins/user_admin.py
lunes_cms/cmsv2/admins/word_admin.py
lunes_cms/cmsv2/admins/word_export_resource.py
lunes_cms/cmsv2/admins/word_import_resource.py
lunes_cms/cmsv2/fixtures/test_data.json
lunes_cms/cmsv2/management/__init__.py
lunes_cms/cmsv2/management/commands/__init__.py
lunes_cms/cmsv2/management/commands/convert_images_to_webp.py
lunes_cms/cmsv2/management/commands/regenerate_example_sentence_audio.py
lunes_cms/cmsv2/migrations/0001_initial.py
lunes_cms/cmsv2/migrations/0002_alter_job_options_alter_unit_options_and_more.py
lunes_cms/cmsv2/migrations/0003_alter_job_created_by_alter_unit_created_by_and_more.py
lunes_cms/cmsv2/migrations/0004_rename_title_job_name.py
lunes_cms/cmsv2/migrations/0005_alter_job_icon_alter_unit_icon_alter_word_audio.py
lunes_cms/cmsv2/migrations/0006_word_image.py
lunes_cms/cmsv2/migrations/0007_remove_unit_words.py
lunes_cms/cmsv2/migrations/0008_unitwordrelation_unit_words.py
lunes_cms/cmsv2/migrations/0009_word_audio_check_status_and_more.py
lunes_cms/cmsv2/migrations/0010_alter_word_audio_check_status.py
lunes_cms/cmsv2/migrations/0011_unitwordrelation_image_check_status_and_more.py
lunes_cms/cmsv2/migrations/0012_alter_unitwordrelation_image_check_status_and_more.py
lunes_cms/cmsv2/migrations/0013_job_v1_id_unit_v1_id_word_v1_id.py
lunes_cms/cmsv2/migrations/0014_feedback.py
lunes_cms/cmsv2/migrations/0014_unitwordrelation_example_sentence.py
lunes_cms/cmsv2/migrations/0015_word_example_sentence_audio.py
lunes_cms/cmsv2/migrations/0016_unitwordrelation_example_sentence_audio.py
lunes_cms/cmsv2/migrations/0017_merge_20251104_1125.py
lunes_cms/cmsv2/migrations/0018_unitwordrelation_example_sentence_check_status_and_more.py
lunes_cms/cmsv2/migrations/0019_word_example_sentence_audio_regenerated.py
lunes_cms/cmsv2/migrations/0020_unitwordrelation_example_sentence_audio_regenerated.py
lunes_cms/cmsv2/migrations/0021_add_review_models.py
lunes_cms/cmsv2/migrations/0022_alter_imagereview_options.py
lunes_cms/cmsv2/migrations/0023_alter_unit_released.py
lunes_cms/cmsv2/migrations/0024_refactor_check_status.py
lunes_cms/cmsv2/migrations/__init__.py
lunes_cms/cmsv2/models/__init__.py
lunes_cms/cmsv2/models/feedback.py
lunes_cms/cmsv2/models/job.py
lunes_cms/cmsv2/models/review.py
lunes_cms/cmsv2/models/static.py
lunes_cms/cmsv2/models/unit.py
lunes_cms/cmsv2/models/word.py
lunes_cms/cmsv2/services/__init__.py
lunes_cms/cmsv2/services/audio_generation.py
lunes_cms/cmsv2/services/image_generation.py
lunes_cms/cmsv2/services/sentence_generation.py
lunes_cms/cmsv2/templates/admin/csv_form.html
lunes_cms/cmsv2/templates/admin/generate_audio_base.html
lunes_cms/cmsv2/templates/admin/generate_image_base.html
lunes_cms/cmsv2/templates/admin/unitword_generate_example_sentence_audio.html
lunes_cms/cmsv2/templates/admin/unitword_generate_image.html
lunes_cms/cmsv2/templates/admin/cmsv2/assign_units_to_user.html
lunes_cms/cmsv2/templates/admin/cmsv2/import_csv_button.html
lunes_cms/cmsv2/templates/admin/cmsv2/save_and_import_button.html
lunes_cms/cmsv2/views/__init__.py
lunes_cms/cmsv2/views/generate_example_sentence.py
lunes_cms/cmsv2/views/generate_image.py
lunes_cms/cmsv2/views/import_csv_view.py
lunes_cms/cmsv2/views/unitword_generate_example_sentence_audio.py
lunes_cms/cmsv2/views/unitword_generate_image.py
lunes_cms/cmsv2/views/update_job_icon.py
lunes_cms/cmsv2/views/update_unit_icon.py
lunes_cms/cmsv2/views/update_unitword_image.py
lunes_cms/cmsv2/views/update_unitword_image_check_status.py
lunes_cms/cmsv2/views/update_word_audio.py
lunes_cms/cmsv2/views/update_word_audio_check_status.py
lunes_cms/cmsv2/views/update_word_image.py
lunes_cms/cmsv2/views/update_word_image_check_status.py
lunes_cms/cmsv2/views/word_generate_audio.py
lunes_cms/cmsv2/views/word_generate_example_sentence_audio.py
lunes_cms/cmsv2/views/word_generate_image.py
lunes_cms/core/__init__.py
lunes_cms/core/audio.py
lunes_cms/core/context_processors.py
lunes_cms/core/logging_formatter.py
lunes_cms/core/settings.py
lunes_cms/core/urls.py
lunes_cms/core/utils.py
lunes_cms/core/wsgi.py
lunes_cms/help/__init__.py
lunes_cms/help/apps.py
lunes_cms/help/urls.py
lunes_cms/help/templates/public_upload.html
lunes_cms/help/views/__init__.py
lunes_cms/help/views/public_upload.py
lunes_cms/locale/de/LC_MESSAGES/django.mo
lunes_cms/locale/de/LC_MESSAGES/djangojs.mo
lunes_cms/src/asset_manager.ts
lunes_cms/src/audio_asset_manager.ts
lunes_cms/src/audio_check_status_update.ts
lunes_cms/src/audio_player.ts
lunes_cms/src/color_unread_feedback.ts
lunes_cms/src/cookies.ts
lunes_cms/src/generate_audio.ts
lunes_cms/src/generate_example_sentence.ts
lunes_cms/src/generate_image.ts
lunes_cms/src/globals.d.ts
lunes_cms/src/image_check_status_update.ts
lunes_cms/src/image_preview.ts
lunes_cms/src/inline_regenerate.ts
lunes_cms/src/job_icon_asset_config.ts
lunes_cms/src/manytomany_overlay.ts
lunes_cms/src/overlay.js
lunes_cms/src/toggle_document_form_fields.ts
lunes_cms/src/unit_icon_asset_config.ts
lunes_cms/src/unitword_image_asset_config.ts
lunes_cms/src/word_audio_asset_config.ts
lunes_cms/src/word_image_asset_config.ts
lunes_cms/static/bootstrap/css/bootstrap.min.css
lunes_cms/static/css/asset_manager.css
lunes_cms/static/css/audio_player.css
lunes_cms/static/css/corporate_identity.css
lunes_cms/static/css/document_form.css
lunes_cms/static/css/feedback.css
lunes_cms/static/css/overlay.css
lunes_cms/static/guidelines/fotoguide.pdf
lunes_cms/static/images/fallback-icon.svg
lunes_cms/static/images/logo-lunes-dark.svg
lunes_cms/static/images/logo-lunes.svg
lunes_cms/static/images/logo.svg
lunes_cms/static/js/asset_manager.js
lunes_cms/static/js/audio_asset_manager.js
lunes_cms/static/js/audio_check_status_update.js
lunes_cms/static/js/audio_player.js
lunes_cms/static/js/color_unread_feedback.js
lunes_cms/static/js/cookies.js
lunes_cms/static/js/generate_audio.js
lunes_cms/static/js/generate_example_sentence.js
lunes_cms/static/js/generate_image.js
lunes_cms/static/js/image_check_status_update.js
lunes_cms/static/js/image_preview.js
lunes_cms/static/js/inline_regenerate.js
lunes_cms/static/js/job_icon_asset_config.js
lunes_cms/static/js/manytomany_overlay.js
lunes_cms/static/js/overlay.js
lunes_cms/static/js/toggle_document_form_fields.js
lunes_cms/static/js/unit_icon_asset_config.js
lunes_cms/static/js/unitword_image_asset_config.js
lunes_cms/static/js/word_audio_asset_config.js
lunes_cms/static/js/word_image_asset_config.js
sample-data/analytics_test_events.json
sample-data/import_words.csv
tests/__init__.py
tests/conftest.py
tests/api/__init__.py
tests/api/api_config.py
tests/api/test_api_result.py
tests/api/expected-results/disciplines.json
tests/api/expected-results/disciplines_15.json
tests/api/expected-results/disciplines_20.json
tests/api/expected-results/disciplines_by_group.json
tests/api/expected-results/disciplines_by_key.json
tests/api/expected-results/disciplines_by_level.json
tests/api/expected-results/disciplines_by_level_27.json
tests/api/expected-results/disciplines_by_level_48.json
tests/api/expected-results/documents_by_training_set_108.json
tests/api/expected-results/documents_by_training_set_7.json
tests/api/expected-results/duplicate_Ei.json
tests/api/expected-results/duplicate_Schere.json
tests/api/expected-results/duplicate_implementieren.json
tests/api/expected-results/duplicate_neueswort.json
tests/api/expected-results/feedback_discipline.json
tests/api/expected-results/feedback_document.json
tests/api/expected-results/feedback_document_not_found.json
tests/api/expected-results/feedback_invalid_content_type.json
tests/api/expected-results/feedback_training_set.json
tests/api/expected-results/group_info.json
tests/api/expected-results/not_authenticated.json
tests/api/expected-results/not_found.json
tests/api/expected-results/permission_denied.json
tests/api/expected-results/sponsors.json
tests/api/expected-results/sponsors_1.json
tests/api/expected-results/sponsors_2.json
tests/api/expected-results/training_sets.json
tests/api/expected-results/training_sets_108.json
tests/api/expected-results/training_sets_7.json
tests/api/expected-results/training_sets_by_discipline_15.json
tests/api/expected-results/training_sets_by_discipline_20.json
tests/api/expected-results/training_sets_by_key.json
tests/api/expected-results/words.json
tests/api/expected-results/words_170.json
tests/api/expected-results/words_2.json
tests/api/expected-results/words_by_key.json
tests/cmsv2/__init__.py
tests/cmsv2/test_utils.py
tests/cmsv2/admins/__init__.py
tests/cmsv2/admins/test_word_import_resource.py
tests/cmsv2/services/__init__.py
tests/cmsv2/services/test_audio_generation.py
tests/cmsv2/services/test_image_generation.py
tests/cmsv2/services/test_sentence_generation.py
tests/cmsv2/views/__init__.py
tests/cmsv2/views/test_generate_example_sentence.py
tests/cmsv2/views/test_word_regenerate_store.py
tests/core/__init__.py
tests/core/test_audio_validation.py
tools/_functions.sh
tools/black.sh
tools/build_documentation.sh
tools/check_translations.sh
tools/install.sh
tools/isort.sh
tools/load_test_data.sh
tools/manage.sh
tools/mypy.sh
tools/pylint.sh
tools/resolve_translation_conflicts.sh
tools/run.sh
tools/test.sh
tools/translate.sh
user_docs/index.md