Changeset 3165470
- Timestamp:
- 10/09/2024 07:26:59 AM (18 months ago)
- Location:
- fapi-member
- Files:
-
- 412 added
- 9 edited
-
tags/2.2.1 (added)
-
tags/2.2.1/_sources (added)
-
tags/2.2.1/_sources/F_fapi.svg (added)
-
tags/2.2.1/_sources/F_fapi2.svg (added)
-
tags/2.2.1/_sources/LOGO_FAPI_svg.svg (added)
-
tags/2.2.1/_sources/circle-shape-outline.svg (added)
-
tags/2.2.1/_sources/close.svg (added)
-
tags/2.2.1/_sources/connect.svg (added)
-
tags/2.2.1/_sources/down-arrow.svg (added)
-
tags/2.2.1/_sources/edit.svg (added)
-
tags/2.2.1/_sources/folder.svg (added)
-
tags/2.2.1/_sources/home-solid.svg (added)
-
tags/2.2.1/_sources/levels-simple.svg (added)
-
tags/2.2.1/_sources/levels.svg (added)
-
tags/2.2.1/_sources/membership.svg (added)
-
tags/2.2.1/_sources/padlock.svg (added)
-
tags/2.2.1/_sources/search.svg (added)
-
tags/2.2.1/_sources/user.svg (added)
-
tags/2.2.1/app (added)
-
tags/2.2.1/app/dist (added)
-
tags/2.2.1/app/dist/bundle.js (added)
-
tags/2.2.1/app/dist/ebb602ec1df70650b042.png (added)
-
tags/2.2.1/app/dist/images (added)
-
tags/2.2.1/app/dist/images/add-filled.svg (added)
-
tags/2.2.1/app/dist/images/arrow-backward.svg (added)
-
tags/2.2.1/app/dist/images/arrow-forward.svg (added)
-
tags/2.2.1/app/dist/images/check.svg (added)
-
tags/2.2.1/app/dist/images/connect.svg (added)
-
tags/2.2.1/app/dist/images/cross.svg (added)
-
tags/2.2.1/app/dist/images/down.svg (added)
-
tags/2.2.1/app/dist/images/edit.svg (added)
-
tags/2.2.1/app/dist/images/folder.svg (added)
-
tags/2.2.1/app/dist/images/levels.svg (added)
-
tags/2.2.1/app/dist/images/logo_fapi.svg (added)
-
tags/2.2.1/app/dist/images/member.svg (added)
-
tags/2.2.1/app/dist/images/overview.svg (added)
-
tags/2.2.1/app/dist/images/settings.svg (added)
-
tags/2.2.1/app/dist/images/up.svg (added)
-
tags/2.2.1/app/dist/src (added)
-
tags/2.2.1/app/dist/src/Media (added)
-
tags/2.2.1/app/dist/src/Media/Images (added)
-
tags/2.2.1/app/dist/src/Media/Images/elements (added)
-
tags/2.2.1/app/dist/src/Media/Images/elements/login.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/elements/section-expiration-shortcode-example.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/elements/section-expiration-shortcode-result.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/elements/user-window.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/graph-example-1.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/graph-example-2.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/graph-example-3.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/member-change-history-example.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/stats-example.png (added)
-
tags/2.2.1/app/dist/src/Media/Images/stats-filter-example.png (added)
-
tags/2.2.1/app/dist/src_Components_Content_Connection_Connection_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Common_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Elements_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Levels_LevelsContent_Emails_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Levels_LevelsContent_LevelNotSelected_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Levels_LevelsContent_Pages_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Levels_LevelsContent_ServicePages_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Levels_LevelsContent_Unlocking_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Levels_Levels_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Members_CreateMember_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Members_MemberImport_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Members_Members_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_NoFmLicence_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Overview_Overview_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Overview_StatisticsLocked_js.bundle.js (added)
-
tags/2.2.1/app/dist/src_Components_Content_Overview_Statistics_js.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_css-loader_dist_utils_js.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_react-select_dist_react-select_esm_js-node_modules_recharts_es6_cartesia-57d92e.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_react-select_dist_react-select_esm_js-node_modules_recharts_es6_cartesia-c640ac.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_react-select_dist_react-select_esm_js-node_modules_recharts_es6_cartesia-cdd18d.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_react-select_dist_react-select_esm_js-node_modules_recharts_es6_cartesia-feeb12.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_react-select_dist_react-select_esm_js.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_recharts_es6_cartesian_CartesianGrid_js-node_modules_recharts_es6_chart_-2b12b3.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_recharts_es6_chart_PieChart_js.bundle.js (added)
-
tags/2.2.1/app/dist/vendors-node_modules_recharts_es6_chart_generateCategoricalChart_js.bundle.js (added)
-
tags/2.2.1/fapi-member.php (added)
-
tags/2.2.1/languages (added)
-
tags/2.2.1/languages/wp-plugins-fapi-member-stable-cs.po (added)
-
tags/2.2.1/languages/wp-plugins-fapi-member-stable-de.po (added)
-
tags/2.2.1/languages/wp-plugins-fapi-member-stable-en-gb.po (added)
-
tags/2.2.1/languages/wp-plugins-fapi-member-stable-sk.po (added)
-
tags/2.2.1/libs (added)
-
tags/2.2.1/libs/nette (added)
-
tags/2.2.1/libs/nette/http (added)
-
tags/2.2.1/libs/nette/http/src (added)
-
tags/2.2.1/libs/nette/http/src/Bridges (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpDI (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpDI/HttpExtension.php (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpDI/SessionExtension.php (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpTracy (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpTracy/SessionPanel.php (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpTracy/templates (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpTracy/templates/SessionPanel.panel.phtml (added)
-
tags/2.2.1/libs/nette/http/src/Bridges/HttpTracy/templates/SessionPanel.tab.phtml (added)
-
tags/2.2.1/libs/nette/http/src/Http (added)
-
tags/2.2.1/libs/nette/http/src/Http/Context.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/FileUpload.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/Helpers.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/IRequest.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/IResponse.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/Request.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/RequestFactory.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/Response.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/Session.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/SessionSection.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/Url.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/UrlImmutable.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/UrlScript.php (added)
-
tags/2.2.1/libs/nette/http/src/Http/UserStorage.php (added)
-
tags/2.2.1/libs/nette/utils (added)
-
tags/2.2.1/libs/nette/utils/src (added)
-
tags/2.2.1/libs/nette/utils/src/HtmlStringable.php (added)
-
tags/2.2.1/libs/nette/utils/src/Iterators (added)
-
tags/2.2.1/libs/nette/utils/src/Iterators/CachingIterator.php (added)
-
tags/2.2.1/libs/nette/utils/src/Iterators/Mapper.php (added)
-
tags/2.2.1/libs/nette/utils/src/SmartObject.php (added)
-
tags/2.2.1/libs/nette/utils/src/StaticClass.php (added)
-
tags/2.2.1/libs/nette/utils/src/Translator.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/ArrayHash.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/ArrayList.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Arrays.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Callback.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/DateTime.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/FileSystem.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Floats.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Helpers.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Html.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Image.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Json.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/ObjectHelpers.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/ObjectMixin.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Paginator.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Random.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Reflection.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Strings.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Type.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/Validators.php (added)
-
tags/2.2.1/libs/nette/utils/src/Utils/exceptions.php (added)
-
tags/2.2.1/libs/nette/utils/src/compatibility.php (added)
-
tags/2.2.1/libs/nette/utils/src/exceptions.php (added)
-
tags/2.2.1/libs/smartemailing (added)
-
tags/2.2.1/libs/smartemailing/types (added)
-
tags/2.2.1/libs/smartemailing/types/bin (added)
-
tags/2.2.1/libs/smartemailing/types/bin/cbf (added)
-
tags/2.2.1/libs/smartemailing/types/bin/cs (added)
-
tags/2.2.1/libs/smartemailing/types/bin/stan (added)
-
tags/2.2.1/libs/smartemailing/types/docs (added)
-
tags/2.2.1/libs/smartemailing/types/docs/img (added)
-
tags/2.2.1/libs/smartemailing/types/docs/img/ide-love-2.png (added)
-
tags/2.2.1/libs/smartemailing/types/docs/img/ide-love.png (added)
-
tags/2.2.1/libs/smartemailing/types/src (added)
-
tags/2.2.1/libs/smartemailing/types/src/Address.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Arrays.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Base64String.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/BoolArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/BoolType.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/CompanyRegistrationNumber.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Comparable (added)
-
tags/2.2.1/libs/smartemailing/types/src/Comparable/ArrayComparableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Comparable/ComparableInterface.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Comparable/StringComparableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ContentType.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/CountryCode.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/CurrencyCode.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/DateTimeFormat.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/DateTimeFormatter.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/DateTimeRange.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/DateTimes.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/DateTimesImmutable.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Dates.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/DatesImmutable.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Domain.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/DomainName.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Duration.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Emailaddress.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Enum.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTraits (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTraits/ArrayExtractableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTraits/EnumExtractableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTraits/ExtractableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTraits/FloatExtractableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTraits/IntExtractableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTraits/StringExtractableTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ExtractableTypeInterface.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/FieldOfApplication.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/FloatArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/FloatType.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Guid.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers/ArrayHelpers.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers/CountryCodeToPhoneCodeTable.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers/ExtractableHelpers.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers/InvisibleSpaceCharacterCodes.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers/StringHelpers.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers/UniqueToStringArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Helpers/ValidationHelpers.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Hex32.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/HexColor.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/HostName.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/HttpMethod.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Iban.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/IntArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/IntType.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/InvalidArgumentException.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/InvalidEmailaddressException.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/InvalidTypeException.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/IpAddress.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/JsonString.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/KeyValuePair.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/LawfulBasisForProcessing.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/LoginCredentials.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/NonEmptyString.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Part.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/PhoneNumber.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Port.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Price.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/PrimitiveTypes.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Quantity.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ReLUValue.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/Relation.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ScalarLeavesArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/SigmoidValue.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/StringArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/StringType.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/SwiftBic.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/TimeUnit.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ToArrayInterface.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ToStringInterface.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ToStringTrait.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/UniqueArrayFeatures.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/UniqueIntArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/UniqueStringArray.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/UnsignedFloat.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/UnsignedInt.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/UrlType.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/VatId.php (added)
-
tags/2.2.1/libs/smartemailing/types/src/ZipCode.php (added)
-
tags/2.2.1/libs/smartemailing/types/tools (added)
-
tags/2.2.1/libs/smartemailing/types/tools/cs (added)
-
tags/2.2.1/libs/smartemailing/types/tools/cs/ruleset.xml (added)
-
tags/2.2.1/libs/smartemailing/types/tools/phpstan (added)
-
tags/2.2.1/libs/smartemailing/types/tools/phpstan/phpstan.neon (added)
-
tags/2.2.1/media (added)
-
tags/2.2.1/media/colors.css (added)
-
tags/2.2.1/media/dist (added)
-
tags/2.2.1/media/dist/clipboard.min.js (added)
-
tags/2.2.1/media/dist/fapi.dev.js (added)
-
tags/2.2.1/media/dist/fapi.dist.js (added)
-
tags/2.2.1/media/dist/polyfill.min.js (added)
-
tags/2.2.1/media/dist/sweetalert2.js (added)
-
tags/2.2.1/media/dist/sweetalert2.min.css (added)
-
tags/2.2.1/media/fapi-member-public.css (added)
-
tags/2.2.1/media/fapi-user-profile.css (added)
-
tags/2.2.1/media/font (added)
-
tags/2.2.1/media/font/proxima_nova_font-webfont.woff (added)
-
tags/2.2.1/media/font/proxima_nova_font-webfont.woff2 (added)
-
tags/2.2.1/media/font/stylesheet.css (added)
-
tags/2.2.1/multiple-blocks (added)
-
tags/2.2.1/multiple-blocks/build (added)
-
tags/2.2.1/multiple-blocks/build/block-extender.asset.php (added)
-
tags/2.2.1/multiple-blocks/build/block-extender.js (added)
-
tags/2.2.1/multiple-blocks/build/fapi-form-block.asset.php (added)
-
tags/2.2.1/multiple-blocks/build/fapi-form-block.css (added)
-
tags/2.2.1/multiple-blocks/build/fapi-form-block.js (added)
-
tags/2.2.1/multiple-blocks/includes (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/block-extender (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/block-extender/block.json (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/block-extender/index.js (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/fapi-form-block (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/fapi-form-block/block.json (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/fapi-form-block/edit.js (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/fapi-form-block/index.js (added)
-
tags/2.2.1/multiple-blocks/includes/block-editor/blocks/fapi-form-block/save.js (added)
-
tags/2.2.1/multiple-blocks/multiple-blocks.php (added)
-
tags/2.2.1/multiple-blocks/package.json (added)
-
tags/2.2.1/multiple-blocks/webpack.config.js (added)
-
tags/2.2.1/readme.txt (added)
-
tags/2.2.1/src (added)
-
tags/2.2.1/src/Api (added)
-
tags/2.2.1/src/Api/V1 (added)
-
tags/2.2.1/src/Api/V1/RequestHandler.php (added)
-
tags/2.2.1/src/Api/V2 (added)
-
tags/2.2.1/src/Api/V2/ApiController.php (added)
-
tags/2.2.1/src/Api/V2/Endpoints (added)
-
tags/2.2.1/src/Api/V2/Endpoints/ApiConnectionsController.php (added)
-
tags/2.2.1/src/Api/V2/Endpoints/EmailsController.php (added)
-
tags/2.2.1/src/Api/V2/Endpoints/MembershipsController.php (added)
-
tags/2.2.1/src/Api/V2/Endpoints/PagesController.php (added)
-
tags/2.2.1/src/Api/V2/Endpoints/SectionsController.php (added)
-
tags/2.2.1/src/Api/V2/Endpoints/StatisticsController.php (added)
-
tags/2.2.1/src/Api/V2/Endpoints/UsersController.php (added)
-
tags/2.2.1/src/Bootstrap.php (added)
-
tags/2.2.1/src/Container (added)
-
tags/2.2.1/src/Container/Container.php (added)
-
tags/2.2.1/src/Divi (added)
-
tags/2.2.1/src/Divi/FapiMemberDivi.php (added)
-
tags/2.2.1/src/Divi/includes (added)
-
tags/2.2.1/src/Divi/includes/FmDivi.php (added)
-
tags/2.2.1/src/Divi/includes/fields (added)
-
tags/2.2.1/src/Divi/includes/fields/MultiSelect (added)
-
tags/2.2.1/src/Divi/includes/fields/MultiSelect/MultiSelect.jsx (added)
-
tags/2.2.1/src/Divi/includes/fields/index.js (added)
-
tags/2.2.1/src/Divi/includes/loader.js (added)
-
tags/2.2.1/src/Divi/includes/loader.php (added)
-
tags/2.2.1/src/Divi/includes/modules (added)
-
tags/2.2.1/src/Divi/includes/modules/FapiMemberContainer (added)
-
tags/2.2.1/src/Divi/includes/modules/index.js (added)
-
tags/2.2.1/src/Divi/scripts (added)
-
tags/2.2.1/src/Divi/scripts/builder-bundle.min.js (added)
-
tags/2.2.1/src/Divi/scripts/frontend-bundle.min.js (added)
-
tags/2.2.1/src/Divi/scripts/frontend.js (added)
-
tags/2.2.1/src/Elementor (added)
-
tags/2.2.1/src/Elementor/Category (added)
-
tags/2.2.1/src/Elementor/Category/CategoryRegister.php (added)
-
tags/2.2.1/src/Elementor/Filters (added)
-
tags/2.2.1/src/Elementor/Filters/ContentProtector.php (added)
-
tags/2.2.1/src/Elementor/WidgetSettingsExtender (added)
-
tags/2.2.1/src/Elementor/WidgetSettingsExtender/WidgetsSettingsExtender.php (added)
-
tags/2.2.1/src/Elementor/Widgets (added)
-
tags/2.2.1/src/Elementor/Widgets/FapiFormWidget.php (added)
-
tags/2.2.1/src/Elementor/fapi-member.php (added)
-
tags/2.2.1/src/FapiMemberPlugin.php (added)
-
tags/2.2.1/src/Mioweb (added)
-
tags/2.2.1/src/Mioweb/FapiMemberMioweb.php (added)
-
tags/2.2.1/src/Model (added)
-
tags/2.2.1/src/Model/ApiConnection.php (added)
-
tags/2.2.1/src/Model/Enums (added)
-
tags/2.2.1/src/Model/Enums/Alert.php (added)
-
tags/2.2.1/src/Model/Enums/Format.php (added)
-
tags/2.2.1/src/Model/Enums/Keys (added)
-
tags/2.2.1/src/Model/Enums/Keys/MetaKey.php (added)
-
tags/2.2.1/src/Model/Enums/Keys/OptionKey.php (added)
-
tags/2.2.1/src/Model/Enums/Keys/ScheduleKey.php (added)
-
tags/2.2.1/src/Model/Enums/Keys/SettingsKey.php (added)
-
tags/2.2.1/src/Model/Enums/PostValue.php (added)
-
tags/2.2.1/src/Model/Enums/SubPage.php (added)
-
tags/2.2.1/src/Model/Enums/Types (added)
-
tags/2.2.1/src/Model/Enums/Types/AlertType.php (added)
-
tags/2.2.1/src/Model/Enums/Types/EmailType.php (added)
-
tags/2.2.1/src/Model/Enums/Types/FormValueType.php (added)
-
tags/2.2.1/src/Model/Enums/Types/LevelUnlockType.php (added)
-
tags/2.2.1/src/Model/Enums/Types/MembershipChangeType.php (added)
-
tags/2.2.1/src/Model/Enums/Types/RequestMethodType.php (added)
-
tags/2.2.1/src/Model/Enums/Types/ServicePageType.php (added)
-
tags/2.2.1/src/Model/Enums/UserPermission.php (added)
-
tags/2.2.1/src/Model/MemberLevel.php (added)
-
tags/2.2.1/src/Model/MemberSection.php (added)
-
tags/2.2.1/src/Model/Membership.php (added)
-
tags/2.2.1/src/Model/MembershipChange.php (added)
-
tags/2.2.1/src/Model/Page.php (added)
-
tags/2.2.1/src/Model/Settings.php (added)
-
tags/2.2.1/src/Model/User.php (added)
-
tags/2.2.1/src/Repository (added)
-
tags/2.2.1/src/Repository/EmailRepository.php (added)
-
tags/2.2.1/src/Repository/LevelOrderRepository.php (added)
-
tags/2.2.1/src/Repository/LevelRepository.php (added)
-
tags/2.2.1/src/Repository/MemberActivityRepository.php (added)
-
tags/2.2.1/src/Repository/MembershipChangeRepository.php (added)
-
tags/2.2.1/src/Repository/MembershipHistoryRepository.php (added)
-
tags/2.2.1/src/Repository/MembershipRepository.php (added)
-
tags/2.2.1/src/Repository/PageRepository.php (added)
-
tags/2.2.1/src/Repository/Repository.php (added)
-
tags/2.2.1/src/Repository/SettingsRepository.php (added)
-
tags/2.2.1/src/Repository/UserRepository.php (added)
-
tags/2.2.1/src/Service (added)
-
tags/2.2.1/src/Service/ApiService.php (added)
-
tags/2.2.1/src/Service/ElementService.php (added)
-
tags/2.2.1/src/Service/EmailService.php (added)
-
tags/2.2.1/src/Service/FormService.php (added)
-
tags/2.2.1/src/Service/LevelOrderService.php (added)
-
tags/2.2.1/src/Service/LevelService.php (added)
-
tags/2.2.1/src/Service/MembershipService.php (added)
-
tags/2.2.1/src/Service/RedirectService.php (added)
-
tags/2.2.1/src/Service/SanitizationService.php (added)
-
tags/2.2.1/src/Service/StatisticsService.php (added)
-
tags/2.2.1/src/Service/UserService.php (added)
-
tags/2.2.1/src/Templates (added)
-
tags/2.2.1/src/Templates/levelSelection.php (added)
-
tags/2.2.1/src/Utils (added)
-
tags/2.2.1/src/Utils/AlertProvider.php (added)
-
tags/2.2.1/src/Utils/ApiClient.php (added)
-
tags/2.2.1/src/Utils/DateTimeHelper.php (added)
-
tags/2.2.1/src/Utils/DateTimes.php (added)
-
tags/2.2.1/src/Utils/DateTimesImmutable.php (added)
-
tags/2.2.1/src/Utils/Debugger.php (added)
-
tags/2.2.1/src/Utils/DisplayHelper.php (added)
-
tags/2.2.1/src/Utils/EmailHelper.php (added)
-
tags/2.2.1/src/Utils/PostTypeHelper.php (added)
-
tags/2.2.1/src/Utils/Random.php (added)
-
tags/2.2.1/src/Utils/SecurityValidator.php (added)
-
tags/2.2.1/src/Utils/ShortcodeSubstitutor.php (added)
-
tags/2.2.1/src/Utils/TemplateProvider.php (added)
-
tags/2.2.1/src/Utils/functions.php (added)
-
tags/2.2.1/uninstall.php (added)
-
tags/2.2.1/vendor (added)
-
tags/2.2.1/vendor/autoload.php (added)
-
tags/2.2.1/vendor/composer (added)
-
tags/2.2.1/vendor/composer/ClassLoader.php (added)
-
tags/2.2.1/vendor/composer/InstalledVersions.php (added)
-
tags/2.2.1/vendor/composer/LICENSE (added)
-
tags/2.2.1/vendor/composer/autoload_classmap.php (added)
-
tags/2.2.1/vendor/composer/autoload_namespaces.php (added)
-
tags/2.2.1/vendor/composer/autoload_psr4.php (added)
-
tags/2.2.1/vendor/composer/autoload_real.php (added)
-
tags/2.2.1/vendor/composer/autoload_static.php (added)
-
tags/2.2.1/vendor/composer/installed.json (added)
-
tags/2.2.1/vendor/composer/installed.php (added)
-
trunk/app/dist/src_Components_Content_Members_Members_js.bundle.js (modified) (1 diff)
-
trunk/app/dist/src_Components_Content_Overview_Statistics_js.bundle.js (modified) (5 diffs)
-
trunk/fapi-member.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/src/Api/V2/Endpoints/StatisticsController.php (modified) (1 diff)
-
trunk/src/Model/MembershipChange.php (modified) (1 diff)
-
trunk/src/Repository/MembershipChangeRepository.php (modified) (1 diff)
-
trunk/src/Service/StatisticsService.php (modified) (1 diff)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
fapi-member/trunk/app/dist/src_Components_Content_Members_Members_js.bundle.js
r3161406 r3165470 16 16 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 17 17 18 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StatisticsClient)\n/* harmony export */ });\n/* harmony import */ var _Client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Client */ \"./src/Clients/Client.js\");\n/* harmony import */ var Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Enums/RequestMethodType */ \"./src/Enums/RequestMethodType.js\");\n/* harmony import */ var Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Models/MembershipChange */ \"./src/Models/MembershipChange.js\");\n\n\n\nclass StatisticsClient extends _Client__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor() {\n super('statistics');\n }\n async getMembershipChangesForUser(userId) {\n var changesData = await this.sendRequest('getMembershipChangesForUser', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, {\n user_id: userId\n });\n var changes = [];\n if (changesData) {\n changesData.forEach(changeData => {\n changes.push(new Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__[\"default\"](changeData));\n });\n }\n return changes;\n }\n async getMemberCountsForPeriod(filterData) {\n return await this.sendRequest('getMemberCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getMemberCountChangesForPeriod(filterData) {\n return await this.sendRequest('getMemberCountChangesForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getChurnRate(filterData) {\n return await this.sendRequest('getChurnRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getAcquisitionRate(filterData) {\n return await this.sendRequest('getAcquisitionRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getActiveCountsForPeriod(filterData) {\n return await this.sendRequest('getActiveCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n }\n\n//# sourceURL=webpack://app/./src/Clients/StatisticsClient.js?");18 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StatisticsClient)\n/* harmony export */ });\n/* harmony import */ var _Client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Client */ \"./src/Clients/Client.js\");\n/* harmony import */ var Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Enums/RequestMethodType */ \"./src/Enums/RequestMethodType.js\");\n/* harmony import */ var Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Models/MembershipChange */ \"./src/Models/MembershipChange.js\");\n\n\n\nclass StatisticsClient extends _Client__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor() {\n super('statistics');\n }\n async getMembershipChangesForUser(userId) {\n var changesData = await this.sendRequest('getMembershipChangesForUser', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, {\n user_id: userId\n });\n var changes = [];\n if (changesData) {\n changesData.forEach(changeData => {\n changes.push(new Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__[\"default\"](changeData));\n });\n }\n return changes;\n }\n async getMemberCountsForPeriod(filterData) {\n return await this.sendRequest('getMemberCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getMemberCountChangesForPeriod(filterData) {\n return await this.sendRequest('getMemberCountChangesForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getChurnRate(filterData) {\n return await this.sendRequest('getChurnRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getAcquisitionRate(filterData) {\n return await this.sendRequest('getAcquisitionRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getActiveCountsForPeriod(filterData) {\n return await this.sendRequest('getActiveCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getAverageChurnRatePeriods(filterData) {\n return await this.sendRequest('getAverageChurnRatePeriods', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n}\n\n//# sourceURL=webpack://app/./src/Clients/StatisticsClient.js?"); 19 19 20 20 /***/ }), -
fapi-member/trunk/app/dist/src_Components_Content_Overview_Statistics_js.bundle.js
r3161406 r3165470 16 16 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 17 17 18 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StatisticsClient)\n/* harmony export */ });\n/* harmony import */ var _Client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Client */ \"./src/Clients/Client.js\");\n/* harmony import */ var Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Enums/RequestMethodType */ \"./src/Enums/RequestMethodType.js\");\n/* harmony import */ var Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Models/MembershipChange */ \"./src/Models/MembershipChange.js\");\n\n\n\nclass StatisticsClient extends _Client__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor() {\n super('statistics');\n }\n async getMembershipChangesForUser(userId) {\n var changesData = await this.sendRequest('getMembershipChangesForUser', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, {\n user_id: userId\n });\n var changes = [];\n if (changesData) {\n changesData.forEach(changeData => {\n changes.push(new Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__[\"default\"](changeData));\n });\n }\n return changes;\n }\n async getMemberCountsForPeriod(filterData) {\n return await this.sendRequest('getMemberCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getMemberCountChangesForPeriod(filterData) {\n return await this.sendRequest('getMemberCountChangesForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getChurnRate(filterData) {\n return await this.sendRequest('getChurnRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getAcquisitionRate(filterData) {\n return await this.sendRequest('getAcquisitionRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getActiveCountsForPeriod(filterData) {\n return await this.sendRequest('getActiveCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n }\n\n//# sourceURL=webpack://app/./src/Clients/StatisticsClient.js?");18 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StatisticsClient)\n/* harmony export */ });\n/* harmony import */ var _Client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Client */ \"./src/Clients/Client.js\");\n/* harmony import */ var Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Enums/RequestMethodType */ \"./src/Enums/RequestMethodType.js\");\n/* harmony import */ var Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Models/MembershipChange */ \"./src/Models/MembershipChange.js\");\n\n\n\nclass StatisticsClient extends _Client__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor() {\n super('statistics');\n }\n async getMembershipChangesForUser(userId) {\n var changesData = await this.sendRequest('getMembershipChangesForUser', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, {\n user_id: userId\n });\n var changes = [];\n if (changesData) {\n changesData.forEach(changeData => {\n changes.push(new Models_MembershipChange__WEBPACK_IMPORTED_MODULE_2__[\"default\"](changeData));\n });\n }\n return changes;\n }\n async getMemberCountsForPeriod(filterData) {\n return await this.sendRequest('getMemberCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getMemberCountChangesForPeriod(filterData) {\n return await this.sendRequest('getMemberCountChangesForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getChurnRate(filterData) {\n return await this.sendRequest('getChurnRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getAcquisitionRate(filterData) {\n return await this.sendRequest('getAcquisitionRate', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getActiveCountsForPeriod(filterData) {\n return await this.sendRequest('getActiveCountsForPeriod', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n async getAverageChurnRatePeriods(filterData) {\n return await this.sendRequest('getAverageChurnRatePeriods', Enums_RequestMethodType__WEBPACK_IMPORTED_MODULE_1__.RequestMethodType.POST, filterData);\n }\n}\n\n//# sourceURL=webpack://app/./src/Clients/StatisticsClient.js?"); 19 19 20 20 /***/ }), … … 26 26 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 27 27 28 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var Components_Content_Overview_StatisticsFilter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Components/Content/Overview/StatisticsFilter */ \"./src/Components/Content/Overview/StatisticsFilter.js\");\n/* harmony import */ var Clients_StatisticsClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Clients/StatisticsClient */ \"./src/Clients/StatisticsClient.js\");\n/* harmony import */ var Clients_MemberSectionClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Clients/MemberSectionClient */ \"./src/Clients/MemberSectionClient.js\");\n/* harmony import */ var Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Components/Elements/Loading */ \"./src/Components/Elements/Loading.js\");\n/* harmony import */ var Components_Content_Overview_StatisticsCharts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Components/Content/Overview/StatisticsCharts */ \"./src/Components/Content/Overview/StatisticsCharts.js\");\n\n\n\n\n\n\nfunction Statistics() {\n const statisticsClient = new Clients_StatisticsClient__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n const sectionClient = new Clients_MemberSectionClient__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n const [loadStatistics, setLoadStatistics] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [levels, setLevels] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [filterData, setFilterData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [memberCounts, setMemberCounts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [activeCounts, setActiveCounts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [memberCountChanges, setMemberCountChanges] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [churnRates, setChurnRates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [acquisitionRates, setAcquisitionRates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [ showingGroupedLevels, setShowingGroupedLevels] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const reloadStatistics = async () => {\n await sectionClient.getAllAsLevels().then(data => {\n setLevels(data);\n });\n if (filterData !== null) {\n statisticsClient.getMemberCountsForPeriod(filterData).then(data => {\n setMemberCounts(data);\n });\n statisticsClient.getMemberCountChangesForPeriod(filterData).then(data => {\n setMemberCountChanges(data);\n });\n statisticsClient.getChurnRate(filterData).then(data => {\n setChurnRates(data);\n });\n statisticsClient.getAcquisitionRate(filterData).then(data => {\n setAcquisitionRates(data);\n });\n statisticsClient.getActiveCountsForPeriod(filterData).then(data => {\n setActiveCounts(data);\n });\n setShowingGroupedLevels(filterData.group_levels);\n }\n setLoadStatistics(false);\n };\n if (loadStatistics) {\n reloadStatistics();\n }\n }, [loadStatistics]);\n if (levels === null) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null);\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"content-statistics\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Content_Overview_StatisticsFilter__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n levels: levels,\n setFilterData: setFilterData,\n setLoadStatistics: setLoadStatistics,\n loadStatistics: loadStatistics,\n filterData: filterData\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Content_Overview_StatisticsCharts__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n showingGroupedLevels: showingGroupedLevels,\n memberCounts: memberCounts,\n memberCountChanges: memberCountChanges,\n churnRates: churnRates,\n acquisitionRates: acquisitionRates,\n activeCounts: activeCounts,\n resetStatsToNull: () => {\n setMemberCounts(null);\n setMemberCountChanges(null);\n setChurnRates(null);\n setAcquisitionRates(null);\n }\n }));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Statistics);\n\n//# sourceURL=webpack://app/./src/Components/Content/Overview/Statistics.js?");28 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var Components_Content_Overview_StatisticsFilter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Components/Content/Overview/StatisticsFilter */ \"./src/Components/Content/Overview/StatisticsFilter.js\");\n/* harmony import */ var Clients_StatisticsClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Clients/StatisticsClient */ \"./src/Clients/StatisticsClient.js\");\n/* harmony import */ var Clients_MemberSectionClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Clients/MemberSectionClient */ \"./src/Clients/MemberSectionClient.js\");\n/* harmony import */ var Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Components/Elements/Loading */ \"./src/Components/Elements/Loading.js\");\n/* harmony import */ var Components_Content_Overview_StatisticsCharts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Components/Content/Overview/StatisticsCharts */ \"./src/Components/Content/Overview/StatisticsCharts.js\");\n\n\n\n\n\n\nfunction Statistics() {\n const statisticsClient = new Clients_StatisticsClient__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n const sectionClient = new Clients_MemberSectionClient__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n const [loadStatistics, setLoadStatistics] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [levels, setLevels] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [filterData, setFilterData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [memberCounts, setMemberCounts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [activeCounts, setActiveCounts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [memberCountChanges, setMemberCountChanges] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [churnRates, setChurnRates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [acquisitionRates, setAcquisitionRates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [averageChurnRatePeriods, setAverageChurnRatePeriods] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [showingGroupedLevels, setShowingGroupedLevels] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const reloadStatistics = async () => {\n await sectionClient.getAllAsLevels().then(data => {\n setLevels(data);\n });\n if (filterData !== null) {\n statisticsClient.getMemberCountsForPeriod(filterData).then(data => {\n setMemberCounts(data);\n });\n statisticsClient.getMemberCountChangesForPeriod(filterData).then(data => {\n setMemberCountChanges(data);\n });\n statisticsClient.getChurnRate(filterData).then(data => {\n setChurnRates(data);\n });\n statisticsClient.getAcquisitionRate(filterData).then(data => {\n setAcquisitionRates(data);\n });\n statisticsClient.getActiveCountsForPeriod(filterData).then(data => {\n setActiveCounts(data);\n });\n statisticsClient.getAverageChurnRatePeriods(filterData).then(data => {\n setAverageChurnRatePeriods(data);\n });\n setShowingGroupedLevels(filterData.group_levels);\n }\n setLoadStatistics(false);\n };\n if (loadStatistics) {\n reloadStatistics();\n }\n }, [loadStatistics]);\n if (levels === null) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null);\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"content-statistics\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Content_Overview_StatisticsFilter__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n levels: levels,\n setFilterData: setFilterData,\n setLoadStatistics: setLoadStatistics,\n loadStatistics: loadStatistics,\n filterData: filterData\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Content_Overview_StatisticsCharts__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n filterData: filterData,\n showingGroupedLevels: showingGroupedLevels,\n memberCounts: memberCounts,\n memberCountChanges: memberCountChanges,\n churnRates: churnRates,\n acquisitionRates: acquisitionRates,\n activeCounts: activeCounts,\n averageChurnRatePeriods: averageChurnRatePeriods,\n resetStatsToNull: () => {\n setMemberCounts(null);\n setMemberCountChanges(null);\n setChurnRates(null);\n setAcquisitionRates(null);\n setActiveCounts(null);\n setAverageChurnRatePeriods(null);\n }\n }));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Statistics);\n\n//# sourceURL=webpack://app/./src/Components/Content/Overview/Statistics.js?"); 29 29 30 30 /***/ }), … … 36 36 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 37 37 38 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Components/Elements/Loading */ \"./src/Components/Elements/Loading.js\");\n/* harmony import */ var Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Components/Elements/BarChartWidget */ \"./src/Components/Elements/BarChartWidget.js\");\n/* harmony import */ var Components_Elements_LineChartWidget__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Components/Elements/LineChartWidget */ \"./src/Components/Elements/LineChartWidget.js\");\n\n\n\n\nfunction StatisticsCharts(_ref) {\n let {\n showingGroupedLevels,\n memberCounts,\n activeCounts,\n memberCountChanges,\n churnRates,\n acquisitionRates,\n resetStatsToNull\n } = _ref;\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n resetStatsToNull();\n }, [showingGroupedLevels]);\n if (memberCounts === null || memberCountChanges === null || acquisitionRates === null || churnRates === null || activeCounts === null) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n height: '400px'\n });\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"statistics-charts\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: memberCounts,\n colors: showingGroupedLevels ? ['#0074e2'] : null,\n title: 'Počet členství'\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_LineChartWidget__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n data: memberCountChanges,\n colors: showingGroupedLevels ? ['#aad20e', 'rgb(250, 83, 41)'] : null,\n title: 'Vzniklých/zaniklých členství'\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: activeCounts,\n colors: ['#aad20e'],\n title: 'Aktivních členů'\n }), showingGroupedLevels ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: {\n ...churnRates,\n ...acquisitionRates\n },\n colors: showingGroupedLevels ? ['rgb(250, 83, 41)', '#aad20e'] : null,\n isPercentage: true\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n display: 'grid',\n gap: '20px',\n gridTemplateColumns: 'auto auto'\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: churnRates,\n colors: showingGroupedLevels ? ['rgb(250, 83, 41)'] : null,\n title: 'Churn rate',\n isPercentage: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: acquisitionRates,\n colors: showingGroupedLevels ? ['#aad20e'] : null,\n title: 'Acquisition rate',\n isPercentage: true\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart no-data\",\n style: {\n width: '100%'\n }\n }, \"Data vygenerovan\\xE1 p\\u0159ed sta\\u017Een\\xEDm FAPI Member verze 2.2.0 nejsou p\\u0159esn\\xE1.\"));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StatisticsCharts);\n\n//# sourceURL=webpack://app/./src/Components/Content/Overview/StatisticsCharts.js?");38 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Components/Elements/Loading */ \"./src/Components/Elements/Loading.js\");\n/* harmony import */ var Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Components/Elements/BarChartWidget */ \"./src/Components/Elements/BarChartWidget.js\");\n/* harmony import */ var Components_Elements_LineChartWidget__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Components/Elements/LineChartWidget */ \"./src/Components/Elements/LineChartWidget.js\");\n\n\n\n\nfunction StatisticsCharts(_ref) {\n let {\n filterData,\n showingGroupedLevels,\n memberCounts,\n activeCounts,\n memberCountChanges,\n churnRates,\n acquisitionRates,\n averageChurnRatePeriods,\n resetStatsToNull\n } = _ref;\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n resetStatsToNull();\n }, [showingGroupedLevels]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"statistics-charts\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: memberCounts,\n colors: showingGroupedLevels ? ['#0074e2'] : null,\n title: 'Počet členství'\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_LineChartWidget__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n data: memberCountChanges,\n colors: showingGroupedLevels ? ['#aad20e', 'rgb(250, 83, 41)'] : null,\n title: 'Vzniklých/zaniklých členství'\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: activeCounts,\n colors: ['#aad20e'],\n title: 'Aktivních členů'\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: averageChurnRatePeriods,\n colors: showingGroupedLevels ? ['rgb(250, 83, 41)'] : null,\n title: 'Churn rate od data registrace',\n isPercentage: true\n }), showingGroupedLevels ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: {\n ...churnRates,\n ...acquisitionRates\n },\n colors: showingGroupedLevels ? ['rgb(250, 83, 41)', '#aad20e'] : null,\n isPercentage: true,\n title: 'Churn/Acquisition rate' + (filterData !== null ? ' - od ' + filterData.date_from + ' do ' + filterData.date_to : '')\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n display: 'grid',\n gap: '20px',\n gridTemplateColumns: 'auto auto'\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: churnRates,\n colors: showingGroupedLevels ? ['rgb(250, 83, 41)'] : null,\n isPercentage: true,\n title: 'Churn rate' + (filterData !== null ? ' - od ' + filterData.date_from + ' do ' + filterData.date_to : '')\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_BarChartWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n data: acquisitionRates,\n colors: showingGroupedLevels ? ['#aad20e'] : null,\n isPercentage: true,\n title: 'Acquisition rate' + (filterData !== null ? ' - od ' + filterData.date_from + ' do ' + filterData.date_to : '')\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart no-data\",\n style: {\n width: '100%'\n }\n }, \"Data vygenerovan\\xE1 p\\u0159ed sta\\u017Een\\xEDm FAPI Member verze 2.2.0 nejsou p\\u0159esn\\xE1.\"));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StatisticsCharts);\n\n//# sourceURL=webpack://app/./src/Components/Content/Overview/StatisticsCharts.js?"); 39 39 40 40 /***/ }), … … 56 56 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 57 57 58 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_ 2__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/ResponsiveContainer.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/chart/BarChart.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/CartesianGrid.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/XAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/YAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Tooltip.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Legend.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/Bar.js\");\n/* harmony import */ var Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Helpers/StringHelper */ \"./src/Helpers/StringHelper.js\");\n\n\n\nfunction BarChartWidget(_ref) {\n let {\n data,\n keys = [],\n width = '100%',\n height = 400,\n title = '',\n colors = null,\n isPercentage = false\n } = _ref;\n let totalSum = 0;\n Object.values(data).forEach(dataPoint => {\n Object.keys(dataPoint).forEach(key => {\n keys[key] = key;\n });\n });\n keys = Object.keys(keys);\n data = Object.entries(data).map(_ref2 => {\n let [date, value] = _ref2;\n return {\n 'fm-date': date,\n ...value\n };\n });\n data.forEach(dataPoint => {\n keys.forEach(key => {\n totalSum += dataPoint[key] || 0;\n });\n });\n if (totalSum === 0 || data === null) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart no-data\",\n style: {\n width: width\n }\n }, \"\\u017D\\xE1dn\\xE1 data\");\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: 'fm-chart',\n style: {\n width: width\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h4\", {\n style: {\n textAlign: 'center'\n }\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_2__.ResponsiveContainer, {\n width: '100%',\n height: height\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_3__.BarChart, {\n data: data,\n margin: {\n top: 20,\n right: 30,\n left: 20,\n bottom: 5\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_4__.CartesianGrid, {\n strokeDasharray: \"3 3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_5__.XAxis, {\n dataKey: \"fm-date\",\n tickFomatter: value => value.toFixed(2)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_6__.YAxis, {\n tickFormatter: isPercentage ? value => \"\".concat(value.toFixed(0), \"%\") : value => \"\".concat(value)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_7__.Tooltip, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.Legend, null), keys.map((key, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_9__.Bar, {\n key: key,\n dataKey: key,\n stackId: \"a\",\n fill: colors === null ? Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__.StringHelper.stringToColor(key) : colors[index],\n animationBegin: 0,\n animationDuration: 500,\n animationEasing: \"ease-out\"\n })))));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BarChartWidget);\n\n//# sourceURL=webpack://app/./src/Components/Elements/BarChartWidget.js?");58 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/ResponsiveContainer.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/chart/BarChart.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/CartesianGrid.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/XAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/YAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Tooltip.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Legend.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/Bar.js\");\n/* harmony import */ var Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Helpers/StringHelper */ \"./src/Helpers/StringHelper.js\");\n/* harmony import */ var Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Components/Elements/Loading */ \"./src/Components/Elements/Loading.js\");\n\n\n\n\nfunction BarChartWidget(_ref) {\n let {\n data,\n keys = [],\n width = '100%',\n height = 400,\n title = '',\n colors = null,\n isPercentage = false\n } = _ref;\n let totalSum = 0;\n if (data === null) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart\",\n style: {\n width: '100%'\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n height: height + 'px'\n }));\n }\n Object.values(data).forEach(dataPoint => {\n Object.keys(dataPoint).forEach(key => {\n keys[key] = key;\n });\n });\n keys = Object.keys(keys);\n data = Object.entries(data).map(_ref2 => {\n let [date, value] = _ref2;\n return {\n 'fm-date': date,\n ...value\n };\n });\n data.forEach(dataPoint => {\n keys.forEach(key => {\n totalSum += dataPoint[key] || 0;\n });\n });\n if (totalSum === 0) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart no-data\",\n style: {\n width: width\n }\n }, \"\\u017D\\xE1dn\\xE1 data\");\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: 'fm-chart',\n style: {\n width: width\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h4\", {\n style: {\n textAlign: 'center'\n }\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_3__.ResponsiveContainer, {\n width: '100%',\n height: height\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_4__.BarChart, {\n data: data,\n margin: {\n top: 20,\n right: 30,\n left: 20,\n bottom: 5\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_5__.CartesianGrid, {\n strokeDasharray: \"3 3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_6__.XAxis, {\n dataKey: \"fm-date\",\n tickFomatter: value => value.toFixed(2)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_7__.YAxis, {\n tickFormatter: isPercentage ? value => \"\".concat(value.toFixed(0), \"%\") : value => \"\".concat(value)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.Tooltip, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_9__.Legend, null), keys.map((key, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_10__.Bar, {\n key: key,\n dataKey: key,\n stackId: \"a\",\n fill: colors === null ? Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__.StringHelper.stringToColor(key) : colors[index],\n animationBegin: 0,\n animationDuration: 500,\n animationEasing: \"ease-out\"\n })))));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BarChartWidget);\n\n//# sourceURL=webpack://app/./src/Components/Elements/BarChartWidget.js?"); 59 59 60 60 /***/ }), … … 66 66 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67 67 68 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_ 2__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/ResponsiveContainer.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/chart/LineChart.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/CartesianGrid.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/XAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/YAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Tooltip.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Legend.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/Line.js\");\n/* harmony import */ var Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Helpers/StringHelper */ \"./src/Helpers/StringHelper.js\");\n\n\n\nfunction LineChartWidget(_ref) {\n let {\n data,\n keys = [],\n width = '100%',\n height = 400,\n title = '',\n colors = null\n } = _ref;\n let totalSum = 0;\n Object.values(data).forEach(dataPoint => {\n Object.keys(dataPoint).forEach(key => {\n keys[key] = key;\n });\n });\n keys = Object.keys(keys);\n data = Object.entries(data).map(_ref2 => {\n let [date, value] = _ref2;\n return {\n 'fm-date': date,\n ...value\n };\n });\n data.forEach(dataPoint => {\n keys.forEach(key => {\n totalSum += dataPoint[key] || 0;\n });\n });\n if (totalSum === 0 || data === null) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart no-data\",\n style: {\n width: width\n }\n }, \"\\u017D\\xE1dn\\xE1 data\");\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: 'fm-chart',\n style: {\n width: width\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h4\", {\n style: {\n textAlign: 'center'\n }\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_2__.ResponsiveContainer, {\n width: '100%',\n height: height\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_3__.LineChart, {\n data: data,\n margin: {\n top: 20,\n right: 30,\n left: 20,\n bottom: 5\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_4__.CartesianGrid, {\n strokeDasharray: \"3 3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_5__.XAxis, {\n dataKey: \"fm-date\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_6__.YAxis, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_7__.Tooltip, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.Legend, null), keys.map((key, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_9__.Line, {\n key: key,\n type: \"monotone\",\n dataKey: key,\n stroke: colors === null ? Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__.StringHelper.stringToColor(key) : colors[index],\n strokeWidth: 2.5,\n animationBegin: 0,\n animationDuration: 500,\n animationEasing: \"ease-out\"\n })))));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LineChartWidget);\n\n//# sourceURL=webpack://app/./src/Components/Elements/LineChartWidget.js?");68 eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/ResponsiveContainer.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/chart/LineChart.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/CartesianGrid.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/XAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/YAxis.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Tooltip.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/component/Legend.js\");\n/* harmony import */ var recharts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! recharts */ \"./node_modules/recharts/es6/cartesian/Line.js\");\n/* harmony import */ var Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Helpers/StringHelper */ \"./src/Helpers/StringHelper.js\");\n/* harmony import */ var Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Components/Elements/Loading */ \"./src/Components/Elements/Loading.js\");\n\n\n\n\nfunction LineChartWidget(_ref) {\n let {\n data,\n keys = [],\n width = '100%',\n height = 400,\n title = '',\n colors = null\n } = _ref;\n let totalSum = 0;\n if (data === null) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart\",\n style: {\n width: '100%'\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Components_Elements_Loading__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n height: height + 'px'\n }));\n }\n Object.values(data).forEach(dataPoint => {\n Object.keys(dataPoint).forEach(key => {\n keys[key] = key;\n });\n });\n keys = Object.keys(keys);\n data = Object.entries(data).map(_ref2 => {\n let [date, value] = _ref2;\n return {\n 'fm-date': date,\n ...value\n };\n });\n data.forEach(dataPoint => {\n keys.forEach(key => {\n totalSum += dataPoint[key] || 0;\n });\n });\n if (totalSum === 0) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fm-chart no-data\",\n style: {\n width: width\n }\n }, \"\\u017D\\xE1dn\\xE1 data\");\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: 'fm-chart',\n style: {\n width: width\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h4\", {\n style: {\n textAlign: 'center'\n }\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_3__.ResponsiveContainer, {\n width: '100%',\n height: height\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_4__.LineChart, {\n data: data,\n margin: {\n top: 20,\n right: 30,\n left: 20,\n bottom: 5\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_5__.CartesianGrid, {\n strokeDasharray: \"3 3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_6__.XAxis, {\n dataKey: \"fm-date\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_7__.YAxis, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.Tooltip, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_9__.Legend, null), keys.map((key, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(recharts__WEBPACK_IMPORTED_MODULE_10__.Line, {\n key: key,\n type: \"monotone\",\n dataKey: key,\n stroke: colors === null ? Helpers_StringHelper__WEBPACK_IMPORTED_MODULE_1__.StringHelper.stringToColor(key) : colors[index],\n strokeWidth: 2.5,\n animationBegin: 0,\n animationDuration: 500,\n animationEasing: \"ease-out\"\n })))));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LineChartWidget);\n\n//# sourceURL=webpack://app/./src/Components/Elements/LineChartWidget.js?"); 69 69 70 70 /***/ }), -
fapi-member/trunk/fapi-member.php
r3161406 r3165470 15 15 * Plugin URI: https://fapi.cz/ 16 16 * Description: Plugin FAPI pro jednoduchou správu členských sekcí na webu. 17 * Version: 2.2. 017 * Version: 2.2.1 18 18 * Requires at least: 5.9 19 19 * Requires PHP: 8.1 … … 30 30 require __DIR__ . '/src/Utils/functions.php'; 31 31 32 define('FAPI_MEMBER_PLUGIN_VERSION', '2.2. 0');32 define('FAPI_MEMBER_PLUGIN_VERSION', '2.2.1'); 33 33 34 34 $FapiPlugin = new FapiMemberPlugin(); -
fapi-member/trunk/readme.txt
r3161406 r3165470 6 6 Requires PHP: 8.1 7 7 License: GPLv2 or later 8 Stable tag: 2.2. 08 Stable tag: 2.2.1 9 9 10 10 Plugin FAPI pro jednoduchou správu členských sekcí na webu. … … 26 26 27 27 == Changelog == 28 29 = 2.2.1 = 30 * Fapi Member Pro 31 * Added average churn rate period graph 28 32 29 33 = 2.2.0 = -
fapi-member/trunk/src/Api/V2/Endpoints/StatisticsController.php
r3161406 r3165470 147 147 return $this->statisticsService->getActiveCountsForPeriod($dateFrom, $dateTo); 148 148 } 149 150 public function getAverageChurnRatePeriods(WP_REST_Request $request): array 151 { 152 $this->apiController->checkRequestMethod($request, RequestMethodType::POST); 153 $body = json_decode($request->get_body(), true); 154 $groupLevels = $this->apiController->extractParam($body, 'group_levels', BoolType::class); 155 156 $levelIds = []; 157 158 foreach ($body['level_ids'] as $levelId) { 159 $levelIds[] = (int) $levelId; 160 } 161 162 return $this->statisticsService->getAverageChurnRatePeriodsForLevels($groupLevels, $levelIds); 163 } 149 164 } -
fapi-member/trunk/src/Model/MembershipChange.php
r3161406 r3165470 62 62 } 63 63 64 65 public function getTimestamp(): DateTimeImmutable|null 66 { 67 return $this->timestamp; 68 } 69 64 70 public function isActive(): bool 65 71 { -
fapi-member/trunk/src/Repository/MembershipChangeRepository.php
r3161406 r3165470 144 144 } 145 145 146 /** @return array<MembershipChange> */ 147 public function getFirstCreatedForLevels( 148 array $levelIds, 149 ): array 150 { 151 $levelIdsPlaceholder = implode(',', array_fill(0, count($levelIds), '%d')); 152 153 $queryParams = $levelIds === [] 154 ? '' 155 :'AND level_id IN (' . $levelIdsPlaceholder . ')'; 156 157 $query = $this->wpdb->prepare(" 158 SELECT t1.* 159 FROM $this->tableName t1 160 JOIN ( 161 SELECT user_id, level_id, MIN(timestamp) as min_timestamp 162 FROM $this->tableName 163 WHERE type = 'created' 164 " . $queryParams . " 165 GROUP BY user_id, level_id 166 ) t2 167 ON t1.user_id = t2.user_id 168 AND t1.level_id = t2.level_id 169 AND t1.timestamp = t2.min_timestamp 170 ORDER BY t1.user_id, t1.level_id, t1.id DESC; 171 ", 172 $levelIds 173 ); 174 175 $results = $this->wpdb->get_results($query, ARRAY_A); 176 177 return $this->toEntities($results); 178 } 179 146 180 /** @return array<MembershipChange>*/ 147 181 private function toEntities(array|null $results, bool $allowMultiple = false): array -
fapi-member/trunk/src/Service/StatisticsService.php
r3161406 r3165470 264 264 } 265 265 266 public function getAverageChurnRatePeriodsForLevels( 267 bool $groupLevels, 268 array $levelIds, 269 ): array 270 { 271 $firstCreatedChanges = $this->membershipChangeRepository 272 ->getFirstCreatedForLevels($levelIds); 273 274 $totalCount = count($firstCreatedChanges); 275 276 if ($totalCount === 0) { 277 return []; 278 } 279 280 $graphColumns = [ 281 'Měsíc' => '+1 month', 282 '2 Měsíce' => '+2 months', 283 '3 Měsíce' => '+3 months', 284 '4 Měsíce' => '+4 months', 285 '5 Měsíců' => '+5 months', 286 'Půl roku' => '+6 months', 287 'Rok' => '+1 year', 288 '2 Roky' => '+2 years', 289 ]; 290 291 $churnedOutCounts = []; 292 293 foreach ($firstCreatedChanges as $firstCreatedChange) { 294 $startDate = $firstCreatedChange->getTimestamp(); 295 $levelKey = $groupLevels 296 ? 'Churn rate' 297 : $this->levelRepository 298 ->getLevelById($firstCreatedChange->getLevelId()) 299 ?->getName(); 300 301 foreach ($graphColumns as $key => $value) { 302 if (!isset($churnedOutCounts[$key][$levelKey])) { 303 $churnedOutCounts[$key][$levelKey] = 0; 304 } 305 306 $endDate = $startDate->modify($value)->modify('-1 day'); 307 308 if ($endDate > DateTimeHelper::getNow()) { 309 break; 310 } 311 312 $lastChange = $this->membershipChangeRepository->findLastChange( 313 $firstCreatedChange->getUserId(), 314 $firstCreatedChange->getLevelId(), 315 $endDate, 316 ); 317 318 if ($firstCreatedChange->isActive() && !$lastChange->isActive()) { 319 $churnedOutCounts[$key][$levelKey]++; 320 break; 321 } 322 } 323 } 324 325 $churnedOutRates = []; 326 327 foreach ($churnedOutCounts as $key => $churnedOutPeriod) { 328 foreach ($churnedOutPeriod as $levelKey => $churnedOutLevel) { 329 $churnedOutRates[$key][$levelKey] = number_format(($churnedOutLevel) / $totalCount * 100, 2); 330 } 331 } 332 333 return $churnedOutRates; 334 } 335 266 336 /** @param array<MembershipChange> $changes */ 267 337 private function calculateActiveMembershipCounts(array $changes, array $levelIds): array -
fapi-member/trunk/vendor/composer/installed.php
r3161406 r3165470 4 4 'pretty_version' => 'dev-master', 5 5 'version' => 'dev-master', 6 'reference' => ' 4d9b686efbdc8c2972cf36ef708e93d22c64d481',6 'reference' => '6dcfee417299f2cbeb6bacde790da9205239561a', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 14 14 'pretty_version' => 'dev-master', 15 15 'version' => 'dev-master', 16 'reference' => ' 4d9b686efbdc8c2972cf36ef708e93d22c64d481',16 'reference' => '6dcfee417299f2cbeb6bacde790da9205239561a', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.