diff --git a/.github/labeler.yml b/.github/labeler.yml
index 669881944..342736ee7 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -153,10 +153,6 @@
- "**/comments/**"
- "**/**comment**"
-"feature: donation":
- - "**/donate/**"
- - "**/donate**"
-
"feature: feedback":
- "**/feedback/**"
- "**/**feedback**"
diff --git a/app/assets/icons/backpack.svg b/app/assets/icons/backpack.svg
deleted file mode 100644
index fdbf0beed..000000000
--- a/app/assets/icons/backpack.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/app/assets/icons/book.svg b/app/assets/icons/book.svg
deleted file mode 100644
index df9903272..000000000
--- a/app/assets/icons/book.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/app/assets/icons/chocolate.svg b/app/assets/icons/chocolate.svg
deleted file mode 100644
index 4832943f0..000000000
--- a/app/assets/icons/chocolate.svg
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
diff --git a/app/assets/icons/pizza.svg b/app/assets/icons/pizza.svg
deleted file mode 100644
index e831a80e7..000000000
--- a/app/assets/icons/pizza.svg
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
diff --git a/app/assets/icons/sandwich.svg b/app/assets/icons/sandwich.svg
deleted file mode 100644
index ca55171c1..000000000
--- a/app/assets/icons/sandwich.svg
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
diff --git a/app/lib/account/features/feature_gateway.dart b/app/lib/account/features/feature_gateway.dart
index 56bc8bdb5..9ff42015e 100644
--- a/app/lib/account/features/feature_gateway.dart
+++ b/app/lib/account/features/feature_gateway.dart
@@ -10,7 +10,6 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:rxdart/subjects.dart';
import 'package:sharezone/account/features/objects/all_colors.dart';
import 'package:sharezone/account/features/objects/feature.dart';
-import 'package:sharezone/account/features/objects/hide_donations.dart';
import 'package:user/user.dart';
class FeatureGateway {
@@ -32,7 +31,6 @@ class FeatureGateway {
Features.fromJson(doc?.data()['features'] as Map);
if (features != null) {
if (features.allColors) featureSet.add(AllColors());
- if (features.hideDonations) featureSet.add(HideDonations());
}
_unlockedFeaturesSubject.sink.add(featureSet);
diff --git a/app/lib/account/features/features_bloc.dart b/app/lib/account/features/features_bloc.dart
index 8850f51bb..2711c0039 100644
--- a/app/lib/account/features/features_bloc.dart
+++ b/app/lib/account/features/features_bloc.dart
@@ -12,15 +12,11 @@ import 'package:bloc_base/bloc_base.dart';
import 'package:rxdart/rxdart.dart';
import 'package:sharezone/account/features/feature_gateway.dart';
import 'package:sharezone/account/features/objects/all_colors.dart';
-import 'package:sharezone/account/features/objects/hide_donations.dart';
class FeatureBloc extends BlocBase {
final _isAllColorsUnlockedSubject = BehaviorSubject();
Stream get isAllColorsUnlocked => _isAllColorsUnlockedSubject;
- final _hideDonationsSubject = BehaviorSubject();
- Stream get hideDonations => _hideDonationsSubject;
-
StreamSubscription _unlockedFeaturesSubscription;
FeatureBloc(FeatureGateway featureGateway) {
@@ -31,16 +27,13 @@ class FeatureBloc extends BlocBase {
_unlockedFeaturesSubscription =
featureGateway.unlockedFeatures.listen((featureSet) {
final isAllColorsUnlocked = featureSet.contains(AllColors());
- final hideDonations = featureSet.contains(HideDonations());
_isAllColorsUnlockedSubject.sink.add(isAllColorsUnlocked);
- _hideDonationsSubject.sink.add(hideDonations);
});
}
@override
void dispose() {
- _hideDonationsSubject.close();
_isAllColorsUnlockedSubject.close();
_unlockedFeaturesSubscription.cancel();
}
diff --git a/app/lib/account/features/objects/hide_donations.dart b/app/lib/account/features/objects/hide_donations.dart
deleted file mode 100644
index bd43b9158..000000000
--- a/app/lib/account/features/objects/hide_donations.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:sharezone/account/features/objects/feature.dart';
-
-/// Wie kann der Donate-Button aus dem Drawer ausgeblendet werden? Im
-/// User-Dokument muss das Attribut 'features' als Map hinzugefügt werden.
-/// Danach muss zu dieser Map der Schlüssel "hideDonations" mit dem Wert "true"
-/// hinzugefügt werden.
-class HideDonations extends Feature {
- HideDonations() : super("hideDonations");
-}
diff --git a/app/lib/blocs/sharezone_bloc_providers.dart b/app/lib/blocs/sharezone_bloc_providers.dart
index 29040f9ad..8c5ca3507 100644
--- a/app/lib/blocs/sharezone_bloc_providers.dart
+++ b/app/lib/blocs/sharezone_bloc_providers.dart
@@ -46,9 +46,6 @@ import 'package:sharezone/dashboard/gateway/dashboard_gateway.dart';
import 'package:sharezone/dashboard/tips/cache/dashboard_tip_cache.dart';
import 'package:sharezone/dashboard/tips/dashboard_tip_system.dart';
import 'package:sharezone/dashboard/update_reminder/update_reminder_bloc.dart';
-import 'package:sharezone/donate/analytics/donation_analytics.dart';
-import 'package:sharezone/donate/bloc/donation_bloc.dart';
-import 'package:sharezone/donate/donation_service/donation_service.dart';
import 'package:sharezone/download_app_tip/analytics/download_app_tip_analytics.dart';
import 'package:sharezone/download_app_tip/bloc/download_app_tip_bloc.dart';
import 'package:sharezone/download_app_tip/cache/download_app_tip_cache.dart';
@@ -65,7 +62,6 @@ import 'package:sharezone/homework/analytics/homework_analytics.dart';
import 'package:sharezone/homework/student/src/mark_overdue_homework_prompt.dart';
import 'package:sharezone/homework/teacher/homework_done_by_users_list/homework_completion_user_list_bloc_factory.dart';
import 'package:sharezone/main/onboarding/onboarding_navigator.dart';
-import 'package:sharezone/main/plugin_initializations.dart';
import 'package:sharezone/markdown/markdown_analytics.dart';
import 'package:sharezone/navigation/analytics/navigation_analytics.dart';
import 'package:sharezone/navigation/logic/navigation_bloc.dart';
@@ -154,12 +150,6 @@ class _SharezoneBlocProvidersState extends State {
FeedbackAnalytics(analytics),
);
- PluginInitializations.tryInitializeRevenueCat(
- apiKey: widget.blocDependencies.remoteConfiguration
- .getString('revenuecat_api_key'),
- uid: widget.blocDependencies.authUser.uid,
- );
-
super.initState();
}
@@ -443,17 +433,6 @@ class _SharezoneBlocProvidersState extends State {
bloc: ReportGateway(widget.blocDependencies.firestore)),
BlocProvider(bloc: feedbackBloc),
BlocProvider(bloc: markdownAnalytics),
- BlocProvider(
- bloc: DonationBloc(
- userId: UserId(api.uID),
- donationService: DonationService(
- crashAnalytics: getCrashAnalytics(),
- analytics: analytics,
- appFunctions: widget.blocDependencies.appFunctions,
- ),
- analytics: DonationAnalytics(analytics),
- ),
- ),
BlocProvider(
bloc: CommentsBlocFactory(
CommentsGateway(api.references.firestore),
diff --git a/app/lib/donate/README.md b/app/lib/donate/README.md
deleted file mode 100644
index 1bc4fbb04..000000000
--- a/app/lib/donate/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-## Donation-Flow
-
-```mermaid
-graph TB
-
- InAppPurchase[In-App-Kauf wird getätigt]-->
- DonationDocument[OnCall-CF wird aufgerufen]-->
- Validation[CF validiert über RevenueCat REST API, ob Donation gültig war]
- Validation -- gültig --> Notification[Client zeigt erfolgreiche Donation an.]
- Validation -- ungültig --> DeleteDonation[Sende ungültige Donation]
-
-```
\ No newline at end of file
diff --git a/app/lib/donate/analytics/donation_analytics.dart b/app/lib/donate/analytics/donation_analytics.dart
deleted file mode 100644
index e442bb546..000000000
--- a/app/lib/donate/analytics/donation_analytics.dart
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:analytics/analytics.dart';
-import 'package:meta/meta.dart';
-import 'package:sharezone/donate/donation_service/donation_service.dart';
-import 'package:sharezone_utils/platform.dart';
-
-class DonationAnalytics {
- final Analytics _analytics;
-
- DonationAnalytics(this._analytics);
-
- void logDonation(DonationItemId id) {
- _analytics.log(DonatedEvent(id: id));
- }
-
- void logDonationPageOpened(Platform platform) {
- _analytics.log(
- AnalyticsEvent(
- 'donation_page_opened',
- data: {'platform': platform.toString().toLowerCase()},
- ),
- );
- }
-
- void logPressedDonationButtonOnMacOs() {
- _analytics.log(NamedAnalyticsEvent(name: 'donation_pressed_button_macos'));
- }
-}
-
-class DonatedEvent extends AnalyticsEvent {
- DonatedEvent({
- @required this.id,
- }) : super('donated_$id');
-
- final DonationItemId id;
-}
diff --git a/app/lib/donate/bloc/donation_bloc.dart b/app/lib/donate/bloc/donation_bloc.dart
deleted file mode 100644
index a9428a5da..000000000
--- a/app/lib/donate/bloc/donation_bloc.dart
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:bloc_base/bloc_base.dart';
-import 'package:common_domain_models/common_domain_models.dart';
-import 'package:crash_analytics/crash_analytics.dart';
-import 'package:flutter/services.dart';
-import 'package:meta/meta.dart';
-import 'package:optional/optional.dart';
-import 'package:purchases_flutter/errors.dart';
-import 'package:sharezone/donate/analytics/donation_analytics.dart';
-import 'package:sharezone/donate/donation_service/donation_service.dart';
-import 'package:sharezone/donate/page/donation_item_view.dart';
-import 'package:sharezone_utils/platform.dart';
-import '../donation_service/src/should_be_reported_extension.dart';
-
-class DonationBloc extends BlocBase {
- final UserId userId;
- final DonationService donationService;
- final DonationAnalytics analytics;
-
- DonationBloc({
- @required this.userId,
- @required this.donationService,
- @required this.analytics,
- });
-
- Future> getProductViews() async {
- final items = await donationService.loadDonationItems();
- items.sortById();
- return items.toViews();
- }
-
- Future spende(DonationItemId id) async {
- try {
- await donationService.purchase(id);
- } on PlatformException catch (e, s) {
- final purchaseError = PurchasesErrorHelper.getErrorCode(e);
- if (purchaseError != PurchasesErrorCode.purchaseCancelledError) {
- if (purchaseError.shouldErrorBeReported()) {
- getCrashAnalytics().recordError(purchaseError, s);
- }
- }
-
- rethrow;
- }
- }
-
- void logDonationPageOpened() {
- analytics.logDonationPageOpened(getPlatform());
- }
-
- // Donations sind aktuell noch nich für macOS verfügbar. Trotzdem soll
- // getrackt werden, wie viele Nutzer über macOS gespendet hätten.
- void logPressedDonationButtonOnMacOs() {
- analytics.logPressedDonationButtonOnMacOs();
- }
-
- @override
- void dispose() {}
-}
-
-extension on List {
- List toViews() {
- return map((p) => p.toView()).toList();
- }
-
- void sortById() {
- sort((a, b) => a.id.id.compareTo(b.id.id));
- }
-}
-
-extension on DonationItem {
- DonationItemView toView() {
- return DonationItemView(
- id: id,
- iconPath: Optional.ofNullable(_getIconPath()),
- title: title,
- price: formattedPrice,
- );
- }
-
- String _getIconPath() {
- const basepath = 'assets/icons';
- if (title.contains('Schokoriegel')) {
- return '$basepath/chocolate.svg';
- } else if (title.contains('Pausenbrot')) {
- return '$basepath/sandwich.svg';
- } else if (title.contains('Mittagessen')) {
- return '$basepath/pizza.svg';
- } else if (title.contains('Neue Hefter')) {
- return '$basepath/book.svg';
- } else if (title.contains('Neuer Schulranzen')) {
- return '$basepath/backpack.svg';
- }
- return null;
- }
-}
diff --git a/app/lib/donate/donation_service/donation_item.dart b/app/lib/donate/donation_service/donation_item.dart
deleted file mode 100644
index c551073e8..000000000
--- a/app/lib/donate/donation_service/donation_item.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:common_domain_models/common_domain_models.dart';
-import 'package:meta/meta.dart';
-
-class DonationItemId extends Id {
- DonationItemId(String id) : super(id, 'DonationItemId');
-}
-
-class DonationItem {
- final DonationItemId id;
- final String title;
- final String formattedPrice;
-
- DonationItem({
- @required this.id,
- @required this.title,
- @required this.formattedPrice,
- });
-}
diff --git a/app/lib/donate/donation_service/donation_service.dart b/app/lib/donate/donation_service/donation_service.dart
deleted file mode 100644
index 53449d92c..000000000
--- a/app/lib/donate/donation_service/donation_service.dart
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:analytics/analytics.dart';
-import 'package:app_functions/app_functions.dart';
-import 'package:crash_analytics/crash_analytics.dart';
-import 'package:meta/meta.dart';
-import 'package:purchases_flutter/purchases_flutter.dart';
-import 'package:sharezone/donate/analytics/donation_analytics.dart';
-import 'package:sharezone/donate/donation_service/src/revenue_cat_donation_service.dart';
-
-import 'donation_item.dart';
-import 'src/purchase_service.dart';
-import 'src/sharezone_donation_backend.dart';
-
-export 'donation_item.dart';
-
-class DonationService {
- final PurchaseService purchaseService;
- final SharezoneDonationBackend sharezoneDonationBackend;
- final DonationAnalytics donateAnalytics;
-
- factory DonationService({
- @required CrashAnalytics crashAnalytics,
- @required Analytics analytics,
- @required AppFunctions appFunctions,
- }) {
- return DonationService.internal(
- purchaseService: RevenueCatPurchaseService(),
- sharezoneDonationBackend: AppFunctionSharezoneDonationBackend(
- crashAnalytics: crashAnalytics,
- appFunctions: appFunctions,
- ),
- donateAnalytics: DonationAnalytics(analytics),
- );
- }
-
- @visibleForTesting
- DonationService.internal({
- @required this.purchaseService,
- @required this.sharezoneDonationBackend,
- @required this.donateAnalytics,
- });
-
- Future purchase(DonationItemId id) async {
- await purchaseService.purchase(ProductId.fromDonationItemId(id));
- await sharezoneDonationBackend.notifyUserDonated(id);
- donateAnalytics.logDonation(id);
- }
-
- Future> loadDonationItems() async {
- final products = await purchaseService.getProducts();
- return [
- for (final product in products) product.toDonationItem(),
- ];
- }
-}
-
-extension on StoreProduct {
- DonationItem toDonationItem() {
- return DonationItem(
- id: DonationItemId(identifier),
- title: _getTitle(),
- formattedPrice: priceString,
- );
- }
-
- /// Der Title, den RevenueCat zurückgibt, enthalt am Ende
- /// den App-Titel aus dem jeweiligen noch. Bei Android wäre
- /// dies z.B. "Schokoriegel (Schulplaner, Hausaufgaben,
- /// Stundenplan: Sharezone)". Diese Methode gibt den Titel
- /// des Produktes ohne den App-Titel zurück.
- String _getTitle() {
- return title.replaceAll(RegExp(r"\(.+?\)$"), "").trim();
- }
-}
diff --git a/app/lib/donate/donation_service/src/purchase_service.dart b/app/lib/donate/donation_service/src/purchase_service.dart
deleted file mode 100644
index 0d66c7745..000000000
--- a/app/lib/donate/donation_service/src/purchase_service.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:common_domain_models/common_domain_models.dart';
-import 'package:purchases_flutter/purchases_flutter.dart';
-
-import '../donation_item.dart';
-
-class ProductId extends Id {
- ProductId._(String id) : super(id, 'productId');
-
- /// 'donation_1_play_store' --> '1'
- factory ProductId.fromDonationItemId(DonationItemId id) {
- return ProductId._(id.toString().substring(9, 10));
- }
-}
-
-abstract class PurchaseService {
- Future purchase(ProductId id);
- Future> getProducts();
-}
diff --git a/app/lib/donate/donation_service/src/revenue_cat_donation_service.dart b/app/lib/donate/donation_service/src/revenue_cat_donation_service.dart
deleted file mode 100644
index 4a62db89e..000000000
--- a/app/lib/donate/donation_service/src/revenue_cat_donation_service.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:purchases_flutter/purchases_flutter.dart';
-
-import 'purchase_service.dart';
-
-class RevenueCatPurchaseService implements PurchaseService {
- @override
- Future purchase(ProductId id) async {
- final offerings = await Purchases.getOfferings();
- final availablePackages =
- offerings.getOffering('default-donate').availablePackages;
- final packageToPurchase = availablePackages
- .singleWhere((package) => package.identifier == id.toString());
- await Purchases.purchasePackage(packageToPurchase);
- }
-
- @override
- Future> getProducts() async {
- final offerings = await Purchases.getOfferings();
-
- final availablePackages =
- offerings.getOffering('default-donate').availablePackages;
- final identifiers = availablePackages
- .map((package) => package.storeProduct.identifier)
- .toList();
-
- final products = await Purchases.getProducts(
- identifiers,
- type: PurchaseType.inapp,
- );
-
- return products;
- }
-}
diff --git a/app/lib/donate/donation_service/src/sharezone_donation_backend.dart b/app/lib/donate/donation_service/src/sharezone_donation_backend.dart
deleted file mode 100644
index 67025d6b9..000000000
--- a/app/lib/donate/donation_service/src/sharezone_donation_backend.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2022 Sharezone UG (haftungsbeschränkt)
-// Licensed under the EUPL-1.2-or-later.
-//
-// You may obtain a copy of the Licence at:
-// https://joinup.ec.europa.eu/software/page/eupl
-//
-// SPDX-License-Identifier: EUPL-1.2
-
-import 'package:app_functions/app_functions.dart';
-import 'package:crash_analytics/crash_analytics.dart';
-import 'package:meta/meta.dart';
-import 'package:sharezone/donate/donation_service/donation_item.dart';
-
-import '../donation_service.dart';
-
-abstract class SharezoneDonationBackend {
- Future notifyUserDonated(DonationItemId productId);
-}
-
-class AppFunctionSharezoneDonationBackend extends SharezoneDonationBackend {
- final AppFunctions appFunctions;
- final CrashAnalytics crashAnalytics;
-
- AppFunctionSharezoneDonationBackend({
- @required this.appFunctions,
- @required this.crashAnalytics,
- });
-
- @override
- Future notifyUserDonated(DonationItemId productId) async {
- await _callOnDonationFunction(productId);
- }
-
- Future