Creative Mail – Easier WordPress & WooCommerce Email Marketing - Version 1.1.6

Version Description

Download this release

Release Info

Developer constantcontact
Plugin Icon 128x128 Creative Mail – Easier WordPress & WooCommerce Email Marketing
Version 1.1.6
Comparing to
See all releases

Code changes from version 1.1.5 to 1.1.6

Files changed (37) hide show
  1. CHANGELOG.md +5 -0
  2. README.md +4 -3
  3. assets/css/admin.css +293 -9
  4. assets/images/icon-small.png +0 -0
  5. assets/images/tile-contacts.svg +0 -96
  6. assets/images/tile-img-contactmanagement.svg +95 -0
  7. assets/images/tile-img-logomaker.svg +53 -0
  8. assets/images/tile-img-woocommerce.svg +54 -0
  9. assets/images/tile-logomaker.svg +0 -54
  10. assets/images/tile-woocommerce.svg +0 -55
  11. creative-mail-plugin.php +26 -3
  12. readme.txt +5 -4
  13. src/creativemail.php +8 -0
  14. src/helpers/options-helper.php +37 -0
  15. src/integrations/integration.php +36 -25
  16. src/managers/admin-manager.php +122 -7
  17. src/managers/api-manager.php +56 -7
  18. src/managers/email-manager.php +75 -23
  19. src/managers/integration-manager.php +9 -8
  20. src/modules/contacts/Handlers/GravityFormsPluginHandler.php +5 -1
  21. src/modules/contacts/Handlers/JetpackPluginHandler.php +6 -2
  22. src/modules/contacts/Handlers/NewsLetterContactFormPluginHandler.php +5 -1
  23. src/modules/contacts/Handlers/WooCommercePluginHandler.php +17 -1
  24. src/modules/contacts/Handlers/WpFormsLitePluginHandler.php +0 -83
  25. src/modules/contacts/Handlers/WpFormsPluginHandler.php +133 -0
  26. src/modules/woocommerce/models/WCStoreInformation.php +1 -0
  27. src/views/activated-integrations.php +81 -15
  28. src/views/available-integrations.php +8 -5
  29. src/views/consent.php +1 -1
  30. src/views/dashboard.php +107 -42
  31. src/views/onboarding.php +8 -8
  32. src/views/settings.php +49 -1
  33. vendor/autoload.php +1 -1
  34. vendor/composer/ClassLoader.php +1 -1
  35. vendor/composer/autoload_classmap.php +1 -1
  36. vendor/composer/autoload_real.php +4 -4
  37. vendor/composer/autoload_static.php +5 -5
CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
  Changelog
2
  =========
3
 
 
 
 
 
 
4
  #### 1.1.5 - September 9 2020
5
  - Fixes an issue where order notification emails would not always go out.
6
 
1
  Changelog
2
  =========
3
 
4
+ #### 1.1.6 - September 21 2020
5
+ - Add option to refresh the SSO url without reloading the entire page;
6
+ - Add support for opt-in checkbox in the WooCommerce checkout flow;
7
+ - Automatically take the user to the plugin after activating the plugin.
8
+
9
  #### 1.1.5 - September 9 2020
10
  - Fixes an issue where order notification emails would not always go out.
11
 
README.md CHANGED
@@ -3,7 +3,7 @@ Contributors: Constant Contact
3
  Tags: email, marketing, newsletter, subscribe, contact form, constant contact, crm, automations, ecommerce, promotion, offers, retargeting
4
  Requires at least: 4.6
5
  Tested up to: 5.5
6
- Stable tag: 1.1.5
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires PHP: 5.6
@@ -73,11 +73,11 @@ Turn your WooCommerce store and your WordPress site into efficient marketing eng
73
  1. Powered by the reliability superior deliverability of Constant Contact
74
  1. Fun, which makes life way better
75
 
76
- ## TERMS OF SERVICE & PRIVACY POLICY
77
  On behalf of our lawyers (seriously, they’re nice people), please feel free to review our:
78
 
79
  Creative Mail by Constant Contact [Terms of Service](https://www.constantcontact.com/website/terms)
80
- Creative Mail by Constant Contact [Privacy Policy](https://endurance.clarip.com/privacycenter/?brand=ctct)
81
 
82
  == Screenshots ==
83
  1. Your all in one dashboard
@@ -88,6 +88,7 @@ Creative Mail by Constant Contact [Privacy Policy](https://endurance.clarip.com/
88
  6. Enhance your brand with logomaker
89
 
90
  == Changelog ==
 
91
  * 1.1.5 - Fixes an issue where order notification emails would not always go out.
92
  * 1.1.4 - Minor improvements
93
  * 1.1.3 - Implemented a new design
3
  Tags: email, marketing, newsletter, subscribe, contact form, constant contact, crm, automations, ecommerce, promotion, offers, retargeting
4
  Requires at least: 4.6
5
  Tested up to: 5.5
6
+ Stable tag: 1.1.6
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires PHP: 5.6
73
  1. Powered by the reliability superior deliverability of Constant Contact
74
  1. Fun, which makes life way better
75
 
76
+ ## TERMS OF SERVICE & PRIVACY NOTICE
77
  On behalf of our lawyers (seriously, they’re nice people), please feel free to review our:
78
 
79
  Creative Mail by Constant Contact [Terms of Service](https://www.constantcontact.com/website/terms)
80
+ Creative Mail by Constant Contact [Privacy Notice](https://www.endurance.com/privacy/privacy)
81
 
82
  == Screenshots ==
83
  1. Your all in one dashboard
88
  6. Enhance your brand with logomaker
89
 
90
  == Changelog ==
91
+ * 1.1.6 - Add option to refresh the SSO url without reloading the entire page, and add the support for opt-in checkbox in the WooCommerce checkout flow.
92
  * 1.1.5 - Fixes an issue where order notification emails would not always go out.
93
  * 1.1.4 - Minor improvements
94
  * 1.1.3 - Implemented a new design
assets/css/admin.css CHANGED
@@ -70,6 +70,9 @@
70
  -webkit-appearance: none;
71
  -webkit-tap-highlight-color: transparent;
72
  }
 
 
 
73
  .ce4wp-button-root {
74
  color: rgba(0, 0, 0, 0.9);
75
  height: 40px;
@@ -192,7 +195,6 @@
192
  position: relative;
193
  display: inline-block;
194
  color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.87);
195
- font-family: var(--pure-material-font, "Roboto", "Segoe UI", BlinkMacSystemFont, system-ui, -apple-system);
196
  font-size: 14px;
197
  line-height: 1.5;
198
  }
@@ -368,16 +370,42 @@
368
  margin-top: 1.5rem !important;
369
  }
370
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
371
  .ce4wp-pt-4,
372
  .ce4wp-py-4 {
373
  padding-top: 1.5rem !important;
374
  }
375
-
376
  .ce4wp-pb-4,
377
  .ce4wp-py-4 {
378
  padding-bottom: 1.5rem !important;
379
  }
380
 
 
 
 
 
 
 
 
 
 
381
  .ce4wp-pr-3,
382
  .ce4wp-px-3 {
383
  padding-right: 1rem !important;
@@ -534,8 +562,10 @@
534
  }
535
 
536
  .status-creativemail::before {
537
- font-family: WooCommerce;
538
- speak: none;
 
 
539
  font-weight: 400;
540
  font-variant: normal;
541
  text-transform: none;
@@ -548,17 +578,24 @@
548
  width: 100%;
549
  height: 100%;
550
  text-align: center;
551
- content: "";
552
- color: #999;
553
  }
554
 
 
 
 
 
 
 
 
 
555
  .ce4wp-swoosh-container {
556
  margin: 0 auto;
557
  position: relative;
558
  }
559
 
560
  .ce4wp-swoosh-header {
561
- -webkit-box-align: center;
562
  align-items: center;
563
  display: flex;
564
  position: relative;
@@ -656,6 +693,13 @@ p.ce4wp-subtitle {
656
  padding: 8px;
657
  }
658
 
 
 
 
 
 
 
 
659
  .ce4wp-grid-item-card {
660
  box-sizing: inherit;
661
  margin-bottom: 1.5rem !important;
@@ -667,23 +711,263 @@ p.ce4wp-subtitle {
667
  min-width: 200px;
668
  background: #fff;
669
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
670
- min-height: 150px;
 
 
 
 
 
 
 
 
 
671
  }
672
  .ce4wp-grid-item-card:hover {
673
  cursor: pointer;
674
  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
675
  background-color: rgba(0, 0, 0, 0.03);
676
  }
 
 
 
 
 
677
  .ce4wp-grid-item-card-media {
678
  display: block;
679
- background-size: cover;
680
  background-repeat: no-repeat;
681
  background-position: center;
682
  height: 0px;
683
  padding-top: 56.25%;
 
 
 
 
 
 
 
 
 
684
  }
685
 
686
  .ce4wp-grid-item-card-content-root {
687
  padding: 16px;
688
  padding-bottom: 24px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
689
  }
70
  -webkit-appearance: none;
71
  -webkit-tap-highlight-color: transparent;
72
  }
73
+ #skeleton .ce4wp-button-base-root {
74
+ cursor: default;
75
+ }
76
  .ce4wp-button-root {
77
  color: rgba(0, 0, 0, 0.9);
78
  height: 40px;
195
  position: relative;
196
  display: inline-block;
197
  color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.87);
 
198
  font-size: 14px;
199
  line-height: 1.5;
200
  }
370
  margin-top: 1.5rem !important;
371
  }
372
 
373
+ .ce4wp-pt-2,
374
+ .ce4wp-py-2 {
375
+ padding-top: .5rem !important;
376
+ }
377
+ .ce4wp-pb-2,
378
+ .ce4wp-py-2 {
379
+ padding-bottom: .5rem !important;
380
+ }
381
+
382
+ .ce4wp-pt-3,
383
+ .ce4wp-py-3 {
384
+ padding-top: 1rem !important;
385
+ }
386
+ .ce4wp-pb-3,
387
+ .ce4wp-py-3 {
388
+ padding-bottom: 1rem !important;
389
+ }
390
+
391
  .ce4wp-pt-4,
392
  .ce4wp-py-4 {
393
  padding-top: 1.5rem !important;
394
  }
 
395
  .ce4wp-pb-4,
396
  .ce4wp-py-4 {
397
  padding-bottom: 1.5rem !important;
398
  }
399
 
400
+ .ce4wp-pr-0,
401
+ .ce4wp-px-0 {
402
+ padding-right: 0rem !important;
403
+ }
404
+ .ce4wp-pl-0,
405
+ .ce4wp-px-0 {
406
+ padding-left: 0rem !important;
407
+ }
408
+
409
  .ce4wp-pr-3,
410
  .ce4wp-px-3 {
411
  padding-right: 1rem !important;
562
  }
563
 
564
  .status-creativemail::before {
565
+ background-image: url("../images/icon-small.png");
566
+ background-size: contain;
567
+ background-position-y: 50%;
568
+ background-repeat: no-repeat;
569
  font-weight: 400;
570
  font-variant: normal;
571
  text-transform: none;
578
  width: 100%;
579
  height: 100%;
580
  text-align: center;
581
+ content: " ";
582
+ color: transparent;
583
  }
584
 
585
+ .ce4wp-card table.form-table input[type=text] {
586
+ width: 100%;
587
+ margin: 0;
588
+ padding: 6px;
589
+ box-sizing: border-box;
590
+ vertical-align: top;
591
+ }
592
+
593
  .ce4wp-swoosh-container {
594
  margin: 0 auto;
595
  position: relative;
596
  }
597
 
598
  .ce4wp-swoosh-header {
 
599
  align-items: center;
600
  display: flex;
601
  position: relative;
693
  padding: 8px;
694
  }
695
 
696
+ @media (max-width:800px) {
697
+ .ce4wp-grid-item {
698
+ max-width: none;
699
+ flex-basis: 100%;
700
+ }
701
+ }
702
+
703
  .ce4wp-grid-item-card {
704
  box-sizing: inherit;
705
  margin-bottom: 1.5rem !important;
711
  min-width: 200px;
712
  background: #fff;
713
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
714
+ }
715
+ @media (min-width:800px) {
716
+ .ce4wp-grid-item-card {
717
+ min-height: 150px;
718
+ }
719
+ }
720
+ @media (max-width:800px) {
721
+ .ce4wp-grid-item-card {
722
+ display: flex;
723
+ }
724
  }
725
  .ce4wp-grid-item-card:hover {
726
  cursor: pointer;
727
  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
728
  background-color: rgba(0, 0, 0, 0.03);
729
  }
730
+ #skeleton .ce4wp-grid-item-card:hover {
731
+ cursor: default;
732
+ background-color: initial;
733
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
734
+ }
735
  .ce4wp-grid-item-card-media {
736
  display: block;
737
+ background-size: 80% 80%;
738
  background-repeat: no-repeat;
739
  background-position: center;
740
  height: 0px;
741
  padding-top: 56.25%;
742
+ background-color: #E7E2F6;
743
+ }
744
+
745
+ @media (max-width:800px) {
746
+ .ce4wp-grid-item-card-media {
747
+ height: auto;
748
+ padding-left: 30%;
749
+ padding-top: initial;
750
+ }
751
  }
752
 
753
  .ce4wp-grid-item-card-content-root {
754
  padding: 16px;
755
  padding-bottom: 24px;
756
+ width: 100%;
757
+ }
758
+
759
+ .skeleton-pulse {
760
+ animation: skeleton-keyframes-pulse 1.5s ease-in-out 0.5s infinite;
761
+ }
762
+ @keyframes skeleton-keyframes-pulse {
763
+ 0% {
764
+ opacity: 1;
765
+ }
766
+ 50% {
767
+ opacity: 0.4;
768
+ }
769
+ 100% {
770
+ opacity: 1;
771
+ }
772
+ }
773
+
774
+ .ce4wp-subapps-skeleton {
775
+ height: 24px;
776
+ width: 200px;
777
+ background-color: #F5F5F5;
778
+ }
779
+
780
+ .ce4wp-grid-item-card-media-skeleton {
781
+ background-color: #E4E4E4;
782
+ }
783
+
784
+ .ce4wp-grid-item-card-content-skeleton-title {
785
+ height: 20px;
786
+ width: 100%;
787
+ background-color: #F5F5F5;
788
+ }
789
+
790
+ .ce4wp-grid-item-card-content-skeleton-description {
791
+ height: 36px;
792
+ width: 100%;
793
+ background-color: #F5F5F5;
794
+ margin-top: 4px;
795
+ }
796
+
797
+ .ce4wp-dialog-root {
798
+ position: fixed;
799
+ z-index: 1300;
800
+ right: 0px;
801
+ bottom: 0px;
802
+ top: 0px;
803
+ left: 0px;
804
+ }
805
+ .ce4wp-dialog-root * {
806
+ box-sizing: border-box;
807
+ }
808
+ .ce4wp-backdrop-root {
809
+ top: 0;
810
+ left: 0;
811
+ right: 0;
812
+ bottom: 0;
813
+ display: flex;
814
+ z-index: -1;
815
+ position: fixed;
816
+ background: rgba(49, 57, 68, .7);
817
+ align-items: center;
818
+ justify-content: center;
819
+ background-color: rgba(0, 0, 0, 0.5);
820
+ -webkit-tap-highlight-color: transparent;
821
+ transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
822
+ }
823
+
824
+ .ce4wp-dialog-container {
825
+ height: 100%;
826
+ outline: 0;
827
+ transform: none;
828
+ transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,
829
+ transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
830
+ display: flex;
831
+ align-items: center;
832
+ justify-content: center;
833
+ }
834
+
835
+ .ce4wp-dialog-wrapper {
836
+ height: auto;
837
+ max-height: calc(100% - 64px);
838
+ width: calc(100% - 64px);
839
+ max-width: 600px;
840
+ overflow: hidden;
841
+ transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
842
+ transform: translate3d(0, 0, 0);
843
+ box-shadow: 0px 11px 15px -7px rgba(0,0,0,0.2), 0px 24px 38px 3px rgba(0,0,0,0.14), 0px 9px 46px 8px rgba(0,0,0,0.12);
844
+ display: flex;
845
+ flex-direction: column;
846
+ margin: 32px;
847
+ position: relative;
848
+ overflow-y: auto;
849
+ border-radius: 4px;
850
+ color: rgba(0,0,0,0.9);
851
+ background-color: #fff;
852
+ }
853
+
854
+ .ce4wp-dialog-header {
855
+ width: 100%;
856
+ padding: 12px;
857
+ min-height: 64px;
858
+ position: fixed;
859
+ top: 0px;
860
+ left: 0px;
861
+ z-index: 10;
862
+ display: flex;
863
+ align-items: flex-start;
864
+ vertical-align: middle;
865
+ justify-content: space-between;
866
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
867
+ background: rgb(246, 246, 246);
868
+ }
869
+
870
+ .ce4wp-dialog-header-title {
871
+ display: flex;
872
+ align-self: center;
873
+ align-items: center;
874
+ vertical-align: middle;
875
+ justify-content: flex-start;
876
+ }
877
+
878
+ .ce4wp-dialog-header-close,
879
+ .ce4wp-dialog-footer-close {
880
+ display: flex;
881
+ align-self: center;
882
+ align-items: center;
883
+ vertical-align: middle;
884
+ justify-content: flex-end;
885
+ margin-left: auto;
886
+ }
887
+
888
+ .ce4wp-dialog-header-title-wrapper {
889
+ display: flex;
890
+ align-items: center;
891
+ vertical-align: middle;
892
+ justify-content: flex-start;
893
+ }
894
+
895
+ .ce4wp-dialog-header-title-wrapper > :last-of-type {
896
+ margin-right: 0px !important;
897
+ }
898
+
899
+ .ce4wp-dialog-header-title-wrapper > :first-of-type {
900
+ margin-left: 0px !important;
901
+ }
902
+
903
+ .ce4wp-dialog-header-title-wrapper > * {
904
+ display: inline-block;
905
+ vertical-align: top;
906
+ margin: 0px 0px 0px 8px !important;
907
+ }
908
+
909
+ .ce4wp-dialog-header-title-wrapper-content {
910
+ padding-left: 12px;
911
+ overflow: hidden;
912
+ text-overflow: ellipsis;
913
+ display: -webkit-box;
914
+ -webkit-box-orient: vertical;
915
+ -webkit-line-clamp: 3;
916
+ line-height: 24px;
917
+ max-height: 72px;
918
+ }
919
+
920
+ .ce4wp-dialog-header-close-wrapper,
921
+ .ce4wp-dialog-footer-close-wrapper {
922
+ display: flex;
923
+ align-items: center;
924
+ vertical-align: middle;
925
+ justify-content: center;
926
+ }
927
+ .ce4wp-dialog-header-close-wrapper {
928
+ width: 40px;
929
+ height: 40px;
930
+ cursor: pointer;
931
+ }
932
+
933
+ .ce4wp-dialog-header-close-wrapper:hover {
934
+ background-color: rgba(0, 0, 0, 0.04);
935
+ }
936
+ .ce4wp-dialog-header-close-wrapper {
937
+ flex: 0 0 auto;
938
+ color: rgba(0, 0, 0, 0.54);
939
+ padding: 8px;
940
+ overflow: visible;
941
+ font-size: 1.5rem;
942
+ text-align: center;
943
+ transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
944
+ border-radius: 4px;
945
+ }
946
+
947
+ .ce4wp-dialog-content {
948
+ flex: 1 1 auto;
949
+ overflow-y: auto;
950
+ position: relative;
951
+ height: auto;
952
+ margin-top: 64px;
953
+ padding: 24px;
954
+ }
955
+
956
+ .ce4wp-consent {
957
+ background-color: rgba(122, 92, 189, 0.1);
958
+ border: 1px solid rgb(209, 179, 238);
959
+ border-radius: 2px;
960
+ padding: 16px;
961
+ margin-bottom: 12px;
962
+ }
963
+
964
+ .ce4wp-dialog-footer {
965
+ display: flex;
966
+ flex: 0 0 auto;
967
+ align-items: center;
968
+ justify-content: space-between;
969
+ z-index: 1;
970
+ padding: 8px;
971
+ background: rgb(255, 255, 255);
972
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
973
  }
assets/images/icon-small.png ADDED
Binary file
assets/images/tile-contacts.svg DELETED
@@ -1,96 +0,0 @@
1
- <svg width="275" height="150" viewBox="0 0 275 150" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect y="0.132904" width="275" height="149.367" rx="4" fill="#E7E2F6"/>
3
- <path opacity="0.4" d="M105.756 13.6066C134.064 14.1876 128.978 28.3146 148.837 35.6795C155.346 38.0983 173.056 30.8968 183.032 30.8968C200.072 30.8968 213.299 46.8756 217.084 62.909C219.273 72.3119 214.967 76.2116 213.206 86.6457C213.206 103.059 200.452 110.032 188.041 110.032C175.978 108.252 172.028 101.082 161.075 100.218C152.591 99.5274 145.253 103.871 138.348 108.252C129.091 114.101 131.889 130.706 121.262 133.682C117.684 140.044 101.78 138.056 89.4539 130.899C77.1481 120.959 56.414 118.462 47.5099 100.218C44.5392 79.848 54.5684 63.2419 75.16 49.0253C85.6354 41.7946 82.3546 17.6286 105.756 13.6066Z" fill="white"/>
4
- <path d="M58.6814 62.7129C50.3982 56.3411 39.8367 36.0735 58.5119 23.3499C72.0525 14.1246 98.5298 24.716 114.869 46.401C124.225 58.8233 129.167 72.8252 129.364 84.7449" stroke="url(#paint0_linear)" stroke-width="2.01253" stroke-miterlimit="10"/>
5
- <path d="M129.364 85.6785C129.364 86.0375 129.364 86.3247 129.364 86.6837" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
6
- <path d="M179.16 113.405V118.619" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
7
- <path d="M179.16 132.943V138.158" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
8
- <path d="M174.268 117.299L175.59 119.543" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
9
- <path d="M182.729 131.953L184.052 134.263" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
10
- <path d="M169.376 125.748H171.954" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
11
- <path d="M186.299 125.748H188.943" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
12
- <path d="M174.268 134.263L175.59 131.953" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
13
- <path d="M182.729 119.543L184.052 117.299" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
14
- <path d="M168.451 119.609L172.946 122.184" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
15
- <path d="M185.374 129.379L189.869 131.953" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
16
- <path d="M168.451 131.953L172.946 129.379" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
17
- <path d="M185.374 122.184L189.869 119.609" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
18
- <path d="M89.0938 19.8753V22.1196" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
19
- <path d="M89.0938 28.3902V30.7005" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
20
- <path d="M84.4003 22.5816L86.3834 23.7037" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
21
- <path d="M91.8041 26.8061L93.7873 27.9942" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
22
- <path d="M84.4003 27.9942L86.3834 26.8061" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
23
- <path d="M91.8041 23.7037L93.7873 22.5816" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
24
- <path d="M69.6937 46.9367V49.181" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
25
- <path d="M69.6937 55.4516V57.7619" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
26
- <path d="M64.9999 49.643L66.9831 50.7651" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
27
- <path d="M72.4039 53.8676L74.387 55.0557" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
28
- <path d="M64.9999 55.0557L66.9831 53.8676" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
29
- <path d="M72.4039 50.7651L74.387 49.643" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
30
- <rect x="78.1195" y="32.1884" width="105.993" height="95.2596" fill="white"/>
31
- <rect x="147.169" y="40.2385" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
32
- <g opacity="0.5">
33
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M162.002 61.1363C166.978 61.1363 171.011 57.4561 171.011 52.9164C171.011 48.3766 166.978 44.6964 162.002 44.6964C157.027 44.6964 152.994 48.3766 152.994 52.9164C152.994 57.4561 157.027 61.1363 162.002 61.1363ZM160.662 47.1026C159.353 47.6683 158.5 49.0002 158.5 50.4776V50.997C158.5 51.6615 158.621 52.3198 158.858 52.9367C159.186 53.7926 159.869 54.4577 160.708 54.7492C161.542 55.0393 162.464 55.0393 163.298 54.7492C164.137 54.4577 164.82 53.7926 165.148 52.9367C165.385 52.3198 165.506 51.6615 165.506 50.997V50.4776C165.506 49.0002 164.653 47.6683 163.344 47.1026C162.485 46.7314 161.52 46.7314 160.662 47.1026Z" fill="#212448"/>
34
- <path fill-rule="evenodd" clip-rule="evenodd" d="M159.933 54.3444L158.376 54.732C157.584 54.9291 156.923 55.4346 156.52 56.1118C156.344 56.4081 156.408 56.7806 156.641 57.0338C157.927 58.4256 159.851 59.3099 162.002 59.3099C164.153 59.3099 166.078 58.4254 167.363 57.0333C167.597 56.7801 167.66 56.4075 167.484 56.1112C167.081 55.4343 166.42 54.929 165.629 54.732L164.071 54.3444C163.835 54.5159 163.575 54.6531 163.297 54.7495C162.463 55.0396 161.541 55.0396 160.707 54.7495C160.429 54.6531 160.169 54.5159 159.933 54.3444Z" fill="#212448"/>
35
- </g>
36
- <rect x="116.188" y="40.2385" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
37
- <g opacity="0.5">
38
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M131.021 61.1363C135.996 61.1363 140.03 57.4561 140.03 52.9164C140.03 48.3766 135.996 44.6964 131.021 44.6964C126.046 44.6964 122.012 48.3766 122.012 52.9164C122.012 57.4561 126.046 61.1363 131.021 61.1363ZM129.68 47.1026C128.371 47.6683 127.518 49.0002 127.518 50.4776V50.997C127.518 51.6615 127.64 52.3198 127.876 52.9367C128.205 53.7926 128.888 54.4577 129.726 54.7492C130.561 55.0393 131.482 55.0393 132.317 54.7492C133.155 54.4577 133.838 53.7926 134.167 52.9367C134.403 52.3198 134.525 51.6615 134.525 50.997V50.4776C134.525 49.0002 133.672 47.6683 132.363 47.1026C131.504 46.7314 130.539 46.7314 129.68 47.1026Z" fill="#212448"/>
39
- <path fill-rule="evenodd" clip-rule="evenodd" d="M128.952 54.3444L127.394 54.732C126.602 54.9291 125.941 55.4346 125.539 56.1118C125.363 56.4081 125.426 56.7806 125.66 57.0338C126.945 58.4256 128.87 59.3099 131.021 59.3099C133.172 59.3099 135.096 58.4254 136.382 57.0333C136.615 56.7801 136.678 56.4075 136.502 56.1112C136.1 55.4343 135.439 54.929 134.647 54.732L133.09 54.3444C132.854 54.5159 132.593 54.6531 132.316 54.7495C131.481 55.0396 130.56 55.0396 129.725 54.7495C129.448 54.6531 129.188 54.5159 128.952 54.3444Z" fill="#212448"/>
40
- </g>
41
- <rect x="85.2064" y="40.2385" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
42
- <g opacity="0.5">
43
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M100.04 61.1363C105.015 61.1363 109.048 57.4561 109.048 52.9164C109.048 48.3766 105.015 44.6964 100.04 44.6964C95.0643 44.6964 91.031 48.3766 91.031 52.9164C91.031 57.4561 95.0643 61.1363 100.04 61.1363ZM98.6988 47.1026C97.39 47.6683 96.5368 49.0002 96.5368 50.4776V50.997C96.5368 51.6615 96.6584 52.3198 96.895 52.9367C97.2233 53.7926 97.9062 54.4577 98.7448 54.7492C99.5793 55.0393 100.501 55.0393 101.336 54.7492C102.174 54.4577 102.857 53.7926 103.185 52.9367C103.422 52.3198 103.543 51.6615 103.543 50.997V50.4776C103.543 49.0002 102.69 47.6683 101.382 47.1026C100.523 46.7314 99.5576 46.7314 98.6988 47.1026Z" fill="#212448"/>
44
- <path fill-rule="evenodd" clip-rule="evenodd" d="M97.9704 54.3444L96.413 54.732C95.6211 54.929 94.9598 55.4346 94.5577 56.1118C94.3817 56.4081 94.4447 56.7806 94.6785 57.0338C95.9638 58.4256 97.8883 59.3099 100.039 59.3099C102.19 59.3099 104.115 58.4254 105.4 57.0333C105.634 56.7801 105.697 56.4075 105.521 56.1112C105.119 55.4343 104.458 54.929 103.666 54.732L102.108 54.3444C101.872 54.5159 101.612 54.6531 101.335 54.7495C100.5 55.0396 99.5785 55.0396 98.7439 54.7495C98.4667 54.6531 98.2064 54.5159 97.9704 54.3444Z" fill="#212448"/>
45
- </g>
46
- <rect x="147.169" y="67.6123" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
47
- <g opacity="0.5">
48
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M162.002 88.5102C166.978 88.5102 171.011 84.83 171.011 80.2902C171.011 75.7504 166.978 72.0702 162.002 72.0702C157.027 72.0702 152.994 75.7504 152.994 80.2902C152.994 84.83 157.027 88.5102 162.002 88.5102ZM160.662 74.4765C159.353 75.0421 158.5 76.3741 158.5 77.8514V78.3709C158.5 79.0353 158.621 79.6937 158.858 80.3106C159.186 81.1664 159.869 81.8316 160.708 82.1231C161.542 82.4132 162.464 82.4132 163.298 82.1231C164.137 81.8316 164.82 81.1664 165.148 80.3106C165.385 79.6937 165.506 79.0353 165.506 78.3709V77.8514C165.506 76.3741 164.653 75.0421 163.344 74.4765C162.485 74.1053 161.52 74.1053 160.662 74.4765Z" fill="#212448"/>
49
- <path fill-rule="evenodd" clip-rule="evenodd" d="M159.933 81.7182L158.376 82.1058C157.584 82.3029 156.923 82.8084 156.52 83.4856C156.344 83.7819 156.408 84.1544 156.641 84.4076C157.927 85.7995 159.851 86.6837 162.002 86.6837C164.153 86.6837 166.078 85.7993 167.363 84.4072C167.597 84.1539 167.66 83.7814 167.484 83.4851C167.081 82.8081 166.42 82.3028 165.629 82.1058L164.071 81.7182C163.835 81.8897 163.575 82.0269 163.297 82.1233C162.463 82.4134 161.541 82.4134 160.707 82.1233C160.429 82.0269 160.169 81.8897 159.933 81.7182Z" fill="#212448"/>
50
- </g>
51
- <rect x="116.188" y="70.2385" width="28.8932" height="27.4449" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
52
- <g opacity="0.5">
53
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M131.021 93.1412C135.996 93.1412 140.03 89.1079 140.03 84.1326C140.03 79.1573 135.996 75.1241 131.021 75.1241C126.046 75.1241 122.012 79.1573 122.012 84.1326C122.012 89.1079 126.046 93.1412 131.021 93.1412ZM129.68 77.7612C128.371 78.3811 127.518 79.8408 127.518 81.4599V82.0292C127.518 82.7574 127.64 83.4789 127.876 84.155C128.205 85.0929 128.888 85.8219 129.726 86.1414C130.561 86.4593 131.482 86.4593 132.317 86.1413C133.155 85.8219 133.838 85.0929 134.167 84.155C134.403 83.4789 134.525 82.7574 134.525 82.0292V81.4599C134.525 79.8408 133.672 78.3811 132.363 77.7612C131.504 77.3544 130.539 77.3544 129.68 77.7612Z" fill="#212448"/>
54
- <path fill-rule="evenodd" clip-rule="evenodd" d="M128.952 85.6977L127.37 86.1292C126.523 86.36 125.836 86.9437 125.463 87.7075C125.328 87.9833 125.386 88.3091 125.579 88.5473C126.864 90.1289 128.824 91.1396 131.021 91.1396C133.217 91.1396 135.178 90.1287 136.462 88.5468C136.656 88.3085 136.713 87.9826 136.579 87.7069C136.206 86.9434 135.518 86.3599 134.672 86.1292L133.09 85.6976C132.854 85.8856 132.593 86.036 132.316 86.1416C131.481 86.4596 130.56 86.4596 129.725 86.1416C129.448 86.036 129.188 85.8856 128.952 85.6977Z" fill="#212448"/>
55
- </g>
56
- <rect x="85.2064" y="67.6123" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
57
- <g opacity="0.5">
58
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M100.04 88.5102C105.015 88.5102 109.048 84.83 109.048 80.2902C109.048 75.7504 105.015 72.0702 100.04 72.0702C95.0643 72.0702 91.031 75.7504 91.031 80.2902C91.031 84.83 95.0643 88.5102 100.04 88.5102ZM98.6988 74.4765C97.39 75.0421 96.5368 76.3741 96.5368 77.8514V78.3709C96.5368 79.0353 96.6584 79.6937 96.895 80.3106C97.2233 81.1664 97.9062 81.8316 98.7448 82.1231C99.5793 82.4132 100.501 82.4132 101.336 82.1231C102.174 81.8316 102.857 81.1664 103.185 80.3106C103.422 79.6937 103.543 79.0353 103.543 78.3709V77.8514C103.543 76.3741 102.69 75.0421 101.382 74.4765C100.523 74.1053 99.5576 74.1053 98.6988 74.4765Z" fill="#212448"/>
59
- <path fill-rule="evenodd" clip-rule="evenodd" d="M97.9704 81.7182L96.413 82.1058C95.6211 82.3029 94.9598 82.8084 94.5577 83.4856C94.3817 83.7819 94.4447 84.1544 94.6785 84.4076C95.9638 85.7995 97.8883 86.6837 100.039 86.6837C102.19 86.6837 104.115 85.7993 105.4 84.4071C105.634 84.1539 105.697 83.7814 105.521 83.4851C105.119 82.8081 104.458 82.3028 103.666 82.1058L102.108 81.7182C101.872 81.8897 101.612 82.0269 101.335 82.1233C100.5 82.4134 99.5785 82.4134 98.7439 82.1233C98.4667 82.0269 98.2064 81.8897 97.9704 81.7182Z" fill="#212448"/>
60
- </g>
61
- <rect x="147.169" y="94.9862" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
62
- <g opacity="0.5">
63
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M162.002 115.884C166.978 115.884 171.011 112.204 171.011 107.664C171.011 103.124 166.978 99.4441 162.002 99.4441C157.027 99.4441 152.994 103.124 152.994 107.664C152.994 112.204 157.027 115.884 162.002 115.884ZM160.662 101.85C159.353 102.416 158.5 103.748 158.5 105.225V105.745C158.5 106.409 158.621 107.068 158.858 107.684C159.186 108.54 159.869 109.205 160.708 109.497C161.542 109.787 162.464 109.787 163.298 109.497C164.137 109.205 164.82 108.54 165.148 107.684C165.385 107.068 165.506 106.409 165.506 105.745V105.225C165.506 103.748 164.653 102.416 163.344 101.85C162.485 101.479 161.52 101.479 160.662 101.85Z" fill="#212448"/>
64
- <path fill-rule="evenodd" clip-rule="evenodd" d="M159.933 109.092L158.376 109.48C157.584 109.677 156.923 110.182 156.52 110.859C156.344 111.156 156.408 111.528 156.641 111.781C157.927 113.173 159.851 114.058 162.002 114.058C164.153 114.058 166.078 113.173 167.363 111.781C167.597 111.528 167.66 111.155 167.484 110.859C167.081 110.182 166.42 109.677 165.629 109.48L164.071 109.092C163.835 109.264 163.575 109.401 163.297 109.497C162.463 109.787 161.541 109.787 160.707 109.497C160.429 109.401 160.169 109.264 159.933 109.092Z" fill="#212448"/>
65
- </g>
66
- <rect x="116.188" y="94.9862" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
67
- <g opacity="0.5">
68
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M131.021 115.884C135.996 115.884 140.03 112.204 140.03 107.664C140.03 103.124 135.996 99.4441 131.021 99.4441C126.046 99.4441 122.012 103.124 122.012 107.664C122.012 112.204 126.046 115.884 131.021 115.884ZM129.68 101.85C128.371 102.416 127.518 103.748 127.518 105.225V105.745C127.518 106.409 127.64 107.068 127.876 107.684C128.205 108.54 128.888 109.205 129.726 109.497C130.561 109.787 131.482 109.787 132.317 109.497C133.155 109.205 133.838 108.54 134.167 107.684C134.403 107.068 134.525 106.409 134.525 105.745V105.225C134.525 103.748 133.672 102.416 132.363 101.85C131.504 101.479 130.539 101.479 129.68 101.85Z" fill="#212448"/>
69
- <path fill-rule="evenodd" clip-rule="evenodd" d="M128.952 109.092L127.394 109.48C126.602 109.677 125.941 110.182 125.539 110.859C125.363 111.156 125.426 111.528 125.66 111.781C126.945 113.173 128.87 114.058 131.021 114.058C133.172 114.058 135.096 113.173 136.382 111.781C136.615 111.528 136.678 111.155 136.502 110.859C136.1 110.182 135.439 109.677 134.647 109.48L133.09 109.092C132.854 109.264 132.593 109.401 132.316 109.497C131.481 109.787 130.56 109.787 129.725 109.497C129.448 109.401 129.188 109.264 128.952 109.092Z" fill="#212448"/>
70
- </g>
71
- <rect x="85.2064" y="94.9862" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
72
- <g opacity="0.5">
73
- <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M100.04 115.884C105.015 115.884 109.048 112.204 109.048 107.664C109.048 103.124 105.015 99.4441 100.04 99.4441C95.0643 99.4441 91.031 103.124 91.031 107.664C91.031 112.204 95.0643 115.884 100.04 115.884ZM98.6988 101.85C97.39 102.416 96.5368 103.748 96.5368 105.225V105.745C96.5368 106.409 96.6584 107.068 96.895 107.684C97.2233 108.54 97.9062 109.205 98.7448 109.497C99.5793 109.787 100.501 109.787 101.336 109.497C102.174 109.205 102.857 108.54 103.185 107.684C103.422 107.068 103.543 106.409 103.543 105.745V105.225C103.543 103.748 102.69 102.416 101.382 101.85C100.523 101.479 99.5576 101.479 98.6988 101.85Z" fill="#212448"/>
74
- <path fill-rule="evenodd" clip-rule="evenodd" d="M97.9704 109.092L96.413 109.48C95.6211 109.677 94.9598 110.182 94.5577 110.859C94.3817 111.156 94.4447 111.528 94.6785 111.781C95.9638 113.173 97.8883 114.058 100.039 114.058C102.19 114.058 104.115 113.173 105.4 111.781C105.634 111.528 105.697 111.155 105.521 110.859C105.119 110.182 104.458 109.677 103.666 109.48L102.108 109.092C101.872 109.264 101.612 109.401 101.335 109.497C100.5 109.787 99.5785 109.787 98.7439 109.497C98.4666 109.401 98.2064 109.264 97.9704 109.092Z" fill="#212448"/>
75
- </g>
76
- <rect x="101.599" y="53.3342" width="60.3758" height="56.3507" rx="6.70842" fill="#FFD66D"/>
77
- <circle cx="131.787" cy="81.962" r="22.6773" fill="#FFBF1C"/>
78
- <path d="M122.969 75.2338C122.969 71.1582 125.117 67.4836 128.412 65.9231C130.574 64.899 133.003 64.899 135.165 65.9231C138.459 67.4836 140.607 71.1582 140.607 75.2338V76.667C140.607 78.5 140.301 80.3163 139.705 82.0182C138.879 84.3793 137.16 86.2144 135.049 87.0185C132.948 87.8189 130.628 87.8189 128.527 87.0185C126.416 86.2144 124.697 84.3793 123.871 82.0182C123.275 80.3163 122.969 78.5 122.969 76.667V75.2338Z" fill="white"/>
79
- <path opacity="0.4" fill-rule="evenodd" clip-rule="evenodd" d="M131.787 104.639C144.311 104.639 154.464 94.4864 154.464 81.962C154.464 69.4377 144.311 59.2847 131.787 59.2847C119.263 59.2847 109.11 69.4377 109.11 81.962C109.11 94.4864 119.263 104.639 131.787 104.639ZM128.412 65.9231C125.117 67.4836 122.969 71.1582 122.969 75.2338V76.667C122.969 78.5 123.275 80.3163 123.871 82.0182C124.697 84.3793 126.416 86.2144 128.527 87.0185C130.628 87.8189 132.948 87.8189 135.049 87.0185C137.16 86.2144 138.879 84.3793 139.705 82.0182C140.301 80.3163 140.607 78.5 140.607 76.667V75.2338C140.607 71.1582 138.459 67.4836 135.165 65.9231C133.003 64.899 130.574 64.899 128.412 65.9231Z" fill="#BABABA"/>
80
- <path fill-rule="evenodd" clip-rule="evenodd" d="M126.578 85.9018L119.782 87.7553C118.652 88.0634 117.805 89.001 117.612 90.1564L117.367 91.6268C117.324 91.8843 117.383 92.1492 117.537 92.3599C120.745 96.7493 125.932 99.6006 131.786 99.6006C137.64 99.6006 142.828 96.7486 146.036 92.3582C146.19 92.1475 146.248 91.8827 146.206 91.6252L145.961 90.1564C145.768 89.001 144.921 88.0634 143.791 87.7553L136.994 85.9017C136.4 86.3748 135.745 86.7534 135.047 87.0193C132.946 87.8196 130.626 87.8196 128.525 87.0193C127.827 86.7534 127.172 86.3748 126.578 85.9018Z" fill="#49236F"/>
81
- <path d="M88.8781 77.8282L61.4986 61.8075L62.4177 73.1724L88.8781 77.8282Z" fill="#714D95"/>
82
- <path d="M88.8779 77.8282L61.6504 63.6172L61.7745 65.1881L88.8779 77.8282Z" fill="#714D95"/>
83
- <path fill-rule="evenodd" clip-rule="evenodd" d="M67.6073 54.6965L91.1306 79.0234L50.6428 74.4472L59.6074 64.0102L88.878 77.8279L61.498 61.8091L67.6073 54.6965Z" fill="#8F72CE"/>
84
- <g style="mix-blend-mode:soft-light" opacity="0.5">
85
- <path d="M59.6072 64.0105L50.6247 74.4464L67.5306 67.7528L59.6072 64.0105Z" fill="#D1B3EE"/>
86
- </g>
87
- <g style="mix-blend-mode:soft-light" opacity="0.5">
88
- <path d="M67.6071 54.6965L61.508 61.8083L68.7379 66.0393L67.6071 54.6965Z" fill="#D1B3EE"/>
89
- </g>
90
- <defs>
91
- <linearGradient id="paint0_linear" x1="37.8241" y1="63.4193" x2="103.234" y2="27.6277" gradientUnits="userSpaceOnUse">
92
- <stop stop-color="#A37FDF"/>
93
- <stop offset="1" stop-color="#8F72CE" stop-opacity="0"/>
94
- </linearGradient>
95
- </defs>
96
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/images/tile-img-contactmanagement.svg ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg width="172" height="126" viewBox="0 0 172 126" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path opacity="0.4" d="M59.7556 0.606567C88.0642 1.18763 82.9782 15.3146 102.837 22.6795C109.346 25.0983 127.057 17.8968 137.032 17.8968C154.072 17.8968 167.299 33.8756 171.084 49.909C173.273 59.3119 168.967 63.2116 167.206 73.6457C167.206 90.0587 154.452 97.0317 142.041 97.0317C129.978 95.2515 126.028 88.082 115.075 87.2178C106.591 86.5274 99.2535 90.8706 92.3485 95.2515C83.0913 101.101 85.889 117.706 75.262 120.682C71.6836 127.044 55.7796 125.056 43.454 117.899C31.1481 107.959 10.4141 105.462 1.50993 87.2178C-1.4607 66.848 8.56848 50.2419 29.1601 36.0253C39.6355 28.7946 36.3546 4.6286 59.7556 0.606567Z" fill="white"/>
3
+ <path d="M12.6814 49.7129C4.39815 43.3411 -6.16333 23.0735 12.5118 10.3499C26.0524 1.12461 52.5297 11.716 68.8694 33.401C78.2252 45.8233 83.1666 59.8252 83.3643 71.7449" stroke="url(#paint0_linear)" stroke-width="2.01253" stroke-miterlimit="10"/>
4
+ <path d="M83.3643 72.6785C83.3643 73.0375 83.3643 73.3247 83.3643 73.6837" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
5
+ <path d="M133.16 100.405V105.619" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
6
+ <path d="M133.16 119.943V125.158" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
7
+ <path d="M128.268 104.299L129.59 106.543" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
8
+ <path d="M136.729 118.953L138.052 121.263" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
9
+ <path d="M123.376 112.748H125.954" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
10
+ <path d="M140.299 112.748H142.943" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
11
+ <path d="M128.268 121.263L129.59 118.953" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
12
+ <path d="M136.729 106.543L138.052 104.299" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
13
+ <path d="M122.451 106.609L126.946 109.184" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
14
+ <path d="M139.374 116.379L143.869 118.953" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
15
+ <path d="M122.451 118.953L126.946 116.379" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
16
+ <path d="M139.374 109.184L143.869 106.609" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
17
+ <path d="M43.0938 6.87531V9.11957" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
18
+ <path d="M43.0938 15.3902V17.7005" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
19
+ <path d="M38.4001 9.5816L40.3833 10.7037" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
20
+ <path d="M45.804 13.8061L47.7871 14.9942" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
21
+ <path d="M38.4001 14.9942L40.3833 13.8061" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
22
+ <path d="M45.804 10.7037L47.7871 9.5816" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
23
+ <path d="M23.6936 33.9367V36.181" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
24
+ <path d="M23.6936 42.4516V44.7619" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
25
+ <path d="M18.9998 36.643L20.9829 37.7651" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
26
+ <path d="M26.4038 40.8676L28.387 42.0557" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
27
+ <path d="M18.9998 42.0557L20.9829 40.8676" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
28
+ <path d="M26.4038 37.7651L28.387 36.643" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
29
+ <rect x="32.1196" y="19.1884" width="105.993" height="95.2596" fill="white"/>
30
+ <rect x="101.169" y="27.2385" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
31
+ <g opacity="0.5">
32
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M116.002 48.1363C120.978 48.1363 125.011 44.4561 125.011 39.9164C125.011 35.3766 120.978 31.6964 116.002 31.6964C111.027 31.6964 106.994 35.3766 106.994 39.9164C106.994 44.4561 111.027 48.1363 116.002 48.1363ZM114.662 34.1026C113.353 34.6683 112.5 36.0002 112.5 37.4776V37.997C112.5 38.6615 112.621 39.3198 112.858 39.9367C113.186 40.7926 113.869 41.4577 114.708 41.7492C115.542 42.0393 116.464 42.0393 117.298 41.7492C118.137 41.4577 118.82 40.7926 119.148 39.9367C119.385 39.3198 119.506 38.6615 119.506 37.997V37.4776C119.506 36.0002 118.653 34.6683 117.344 34.1026C116.486 33.7314 115.52 33.7314 114.662 34.1026Z" fill="#212448"/>
33
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M113.933 41.3444L112.376 41.732C111.584 41.9291 110.923 42.4346 110.521 43.1118C110.345 43.4081 110.408 43.7806 110.641 44.0338C111.927 45.4256 113.851 46.3099 116.002 46.3099C118.153 46.3099 120.078 45.4254 121.363 44.0333C121.597 43.7801 121.66 43.4075 121.484 43.1112C121.082 42.4343 120.42 41.929 119.629 41.732L118.071 41.3444C117.835 41.5159 117.575 41.6531 117.298 41.7495C116.463 42.0396 115.541 42.0396 114.707 41.7495C114.43 41.6531 114.169 41.5159 113.933 41.3444Z" fill="#212448"/>
34
+ </g>
35
+ <rect x="70.1877" y="27.2385" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
36
+ <g opacity="0.5">
37
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M85.021 48.1363C89.9963 48.1363 94.0296 44.4561 94.0296 39.9164C94.0296 35.3766 89.9963 31.6964 85.021 31.6964C80.0457 31.6964 76.0125 35.3766 76.0125 39.9164C76.0125 44.4561 80.0457 48.1363 85.021 48.1363ZM83.6802 34.1026C82.3714 34.6683 81.5182 36.0002 81.5182 37.4776V37.997C81.5182 38.6615 81.6398 39.3198 81.8764 39.9367C82.2047 40.7926 82.8876 41.4577 83.7262 41.7492C84.5608 42.0393 85.4823 42.0393 86.3169 41.7492C87.1555 41.4577 87.8384 40.7926 88.1667 39.9367C88.4033 39.3198 88.5249 38.6615 88.5249 37.997V37.4776C88.5249 36.0002 87.6717 34.6683 86.3629 34.1026C85.5041 33.7314 84.539 33.7314 83.6802 34.1026Z" fill="#212448"/>
38
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M82.9518 41.3444L81.3944 41.732C80.6025 41.9291 79.9413 42.4346 79.5391 43.1118C79.3631 43.4081 79.4262 43.7806 79.66 44.0338C80.9452 45.4256 82.8697 46.3099 85.0206 46.3099C87.1716 46.3099 89.0963 45.4254 90.3816 44.0333C90.6154 43.7801 90.6783 43.4075 90.5023 43.1112C90.1001 42.4343 89.439 41.929 88.6473 41.732L87.0897 41.3444C86.8537 41.5159 86.5934 41.6531 86.3161 41.7495C85.4815 42.0396 84.5599 42.0396 83.7253 41.7495C83.4481 41.6531 83.1878 41.5159 82.9518 41.3444Z" fill="#212448"/>
39
+ </g>
40
+ <rect x="39.2063" y="27.2385" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
41
+ <g opacity="0.5">
42
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M54.0396 48.1363C59.0149 48.1363 63.0482 44.4561 63.0482 39.9164C63.0482 35.3766 59.0149 31.6964 54.0396 31.6964C49.0643 31.6964 45.031 35.3766 45.031 39.9164C45.031 44.4561 49.0643 48.1363 54.0396 48.1363ZM52.6987 34.1026C51.39 34.6683 50.5368 36.0002 50.5368 37.4776V37.997C50.5368 38.6615 50.6584 39.3198 50.895 39.9367C51.2233 40.7926 51.9062 41.4577 52.7447 41.7492C53.5793 42.0393 54.5009 42.0393 55.3355 41.7492C56.1741 41.4577 56.8569 40.7926 57.1852 39.9367C57.4219 39.3198 57.5434 38.6615 57.5434 37.997V37.4776C57.5434 36.0002 56.6902 34.6683 55.3815 34.1026C54.5227 33.7314 53.5576 33.7314 52.6987 34.1026Z" fill="#212448"/>
43
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M51.9704 41.3444L50.413 41.732C49.6211 41.929 48.9598 42.4346 48.5577 43.1118C48.3817 43.4081 48.4447 43.7806 48.6785 44.0338C49.9638 45.4256 51.8883 46.3099 54.0391 46.3099C56.1902 46.3099 58.1148 45.4254 59.4001 44.0333C59.6339 43.7801 59.6969 43.4075 59.5208 43.1112C59.1186 42.4343 58.4576 41.929 57.6658 41.732L56.1083 41.3444C55.8722 41.5159 55.612 41.6531 55.3347 41.7495C54.5001 42.0396 53.5785 42.0396 52.7439 41.7495C52.4667 41.6531 52.2064 41.5159 51.9704 41.3444Z" fill="#212448"/>
44
+ </g>
45
+ <rect x="101.169" y="54.6123" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
46
+ <g opacity="0.5">
47
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M116.002 75.5102C120.978 75.5102 125.011 71.83 125.011 67.2902C125.011 62.7504 120.978 59.0702 116.002 59.0702C111.027 59.0702 106.994 62.7504 106.994 67.2902C106.994 71.83 111.027 75.5102 116.002 75.5102ZM114.662 61.4765C113.353 62.0421 112.5 63.3741 112.5 64.8514V65.3709C112.5 66.0353 112.621 66.6937 112.858 67.3106C113.186 68.1664 113.869 68.8316 114.708 69.1231C115.542 69.4132 116.464 69.4132 117.298 69.1231C118.137 68.8316 118.82 68.1664 119.148 67.3106C119.385 66.6937 119.506 66.0353 119.506 65.3709V64.8514C119.506 63.3741 118.653 62.0421 117.344 61.4765C116.486 61.1053 115.52 61.1053 114.662 61.4765Z" fill="#212448"/>
48
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M113.933 68.7182L112.376 69.1058C111.584 69.3029 110.923 69.8084 110.521 70.4856C110.345 70.7819 110.408 71.1544 110.641 71.4076C111.927 72.7995 113.851 73.6837 116.002 73.6837C118.153 73.6837 120.078 72.7993 121.363 71.4072C121.597 71.1539 121.66 70.7814 121.484 70.4851C121.082 69.8081 120.42 69.3028 119.629 69.1058L118.071 68.7182C117.835 68.8897 117.575 69.0269 117.298 69.1233C116.463 69.4134 115.541 69.4134 114.707 69.1233C114.43 69.0269 114.169 68.8897 113.933 68.7182Z" fill="#212448"/>
49
+ </g>
50
+ <rect x="70.1877" y="57.2385" width="28.8932" height="27.4449" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
51
+ <g opacity="0.5">
52
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M85.021 80.1412C89.9963 80.1412 94.0296 76.1079 94.0296 71.1326C94.0296 66.1573 89.9963 62.1241 85.021 62.1241C80.0457 62.1241 76.0125 66.1573 76.0125 71.1326C76.0125 76.1079 80.0457 80.1412 85.021 80.1412ZM83.6802 64.7612C82.3714 65.3811 81.5182 66.8408 81.5182 68.4599V69.0292C81.5182 69.7574 81.6398 70.4789 81.8764 71.155C82.2047 72.0929 82.8876 72.8219 83.7262 73.1414C84.5608 73.4593 85.4823 73.4593 86.3169 73.1413C87.1555 72.8219 87.8384 72.0929 88.1667 71.155C88.4033 70.4789 88.5249 69.7574 88.5249 69.0292V68.4599C88.5249 66.8408 87.6717 65.3811 86.3629 64.7612C85.5041 64.3544 84.539 64.3544 83.6802 64.7612Z" fill="#212448"/>
53
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M82.9518 72.6977L81.3695 73.1292C80.5234 73.36 79.8357 73.9437 79.4628 74.7075C79.3282 74.9833 79.3856 75.3091 79.5791 75.5473C80.8637 77.1289 82.8241 78.1396 85.0205 78.1396C87.2172 78.1396 89.1778 77.1287 90.4625 75.5468C90.6559 75.3085 90.7133 74.9826 90.5786 74.7069C90.2056 73.9434 89.5181 73.3599 88.6722 73.1292L87.0897 72.6976C86.8537 72.8856 86.5934 73.036 86.3161 73.1416C85.4815 73.4596 84.5599 73.4596 83.7254 73.1416C83.4481 73.036 83.1878 72.8856 82.9518 72.6977Z" fill="#212448"/>
54
+ </g>
55
+ <rect x="39.2063" y="54.6123" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
56
+ <g opacity="0.5">
57
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M54.0396 75.5102C59.0149 75.5102 63.0482 71.83 63.0482 67.2902C63.0482 62.7504 59.0149 59.0702 54.0396 59.0702C49.0643 59.0702 45.031 62.7504 45.031 67.2902C45.031 71.83 49.0643 75.5102 54.0396 75.5102ZM52.6987 61.4765C51.39 62.0421 50.5368 63.3741 50.5368 64.8514V65.3709C50.5368 66.0353 50.6584 66.6937 50.895 67.3106C51.2233 68.1664 51.9062 68.8316 52.7447 69.1231C53.5793 69.4132 54.5009 69.4132 55.3355 69.1231C56.1741 68.8316 56.8569 68.1664 57.1852 67.3106C57.4219 66.6937 57.5434 66.0353 57.5434 65.3709V64.8514C57.5434 63.3741 56.6902 62.0421 55.3815 61.4765C54.5227 61.1053 53.5576 61.1053 52.6987 61.4765Z" fill="#212448"/>
58
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M51.9704 68.7182L50.413 69.1058C49.6211 69.3029 48.9598 69.8084 48.5577 70.4856C48.3817 70.7819 48.4447 71.1544 48.6785 71.4076C49.9638 72.7995 51.8883 73.6837 54.0391 73.6837C56.1902 73.6837 58.1148 72.7993 59.4001 71.4071C59.6339 71.1539 59.6969 70.7814 59.5208 70.4851C59.1186 69.8081 58.4576 69.3028 57.6658 69.1058L56.1083 68.7182C55.8722 68.8897 55.612 69.0269 55.3347 69.1233C54.5001 69.4134 53.5785 69.4134 52.7439 69.1233C52.4667 69.0269 52.2064 68.8897 51.9704 68.7182Z" fill="#212448"/>
59
+ </g>
60
+ <rect x="101.169" y="81.9862" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
61
+ <g opacity="0.5">
62
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M116.002 102.884C120.978 102.884 125.011 99.2038 125.011 94.6641C125.011 90.1243 120.978 86.4441 116.002 86.4441C111.027 86.4441 106.994 90.1243 106.994 94.6641C106.994 99.2038 111.027 102.884 116.002 102.884ZM114.662 88.8503C113.353 89.416 112.5 90.7479 112.5 92.2253V92.7447C112.5 93.4092 112.621 94.0675 112.858 94.6844C113.186 95.5403 113.869 96.2054 114.708 96.4969C115.542 96.787 116.464 96.787 117.298 96.4969C118.137 96.2054 118.82 95.5403 119.148 94.6844C119.385 94.0675 119.506 93.4092 119.506 92.7447V92.2253C119.506 90.7479 118.653 89.416 117.344 88.8503C116.486 88.4791 115.52 88.4791 114.662 88.8503Z" fill="#212448"/>
63
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M113.933 96.0921L112.376 96.4797C111.584 96.6767 110.923 97.1822 110.521 97.8595C110.345 98.1558 110.408 98.5283 110.641 98.7815C111.927 100.173 113.851 101.058 116.002 101.058C118.153 101.058 120.078 100.173 121.363 98.781C121.597 98.5278 121.66 98.1552 121.484 97.8589C121.082 97.182 120.42 96.6767 119.629 96.4797L118.071 96.0921C117.835 96.2636 117.575 96.4008 117.298 96.4972C116.463 96.7873 115.541 96.7873 114.707 96.4972C114.43 96.4008 114.169 96.2636 113.933 96.0921Z" fill="#212448"/>
64
+ </g>
65
+ <rect x="70.1877" y="81.9862" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
66
+ <g opacity="0.5">
67
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M85.021 102.884C89.9963 102.884 94.0296 99.2038 94.0296 94.6641C94.0296 90.1243 89.9963 86.4441 85.021 86.4441C80.0457 86.4441 76.0125 90.1243 76.0125 94.6641C76.0125 99.2038 80.0457 102.884 85.021 102.884ZM83.6802 88.8503C82.3714 89.416 81.5182 90.7479 81.5182 92.2253V92.7447C81.5182 93.4092 81.6398 94.0675 81.8764 94.6844C82.2047 95.5403 82.8876 96.2054 83.7262 96.4969C84.5608 96.787 85.4823 96.787 86.3169 96.4969C87.1555 96.2054 87.8384 95.5403 88.1667 94.6844C88.4033 94.0675 88.5249 93.4092 88.5249 92.7447V92.2253C88.5249 90.7479 87.6717 89.416 86.3629 88.8503C85.5041 88.4791 84.539 88.4791 83.6802 88.8503Z" fill="#212448"/>
68
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M82.9518 96.0921L81.3944 96.4797C80.6025 96.6767 79.9413 97.1822 79.5391 97.8595C79.3631 98.1558 79.4262 98.5283 79.66 98.7815C80.9452 100.173 82.8697 101.058 85.0206 101.058C87.1716 101.058 89.0963 100.173 90.3816 98.781C90.6153 98.5278 90.6783 98.1552 90.5023 97.8589C90.1001 97.182 89.439 96.6767 88.6473 96.4797L87.0897 96.0921C86.8537 96.2636 86.5934 96.4008 86.3161 96.4972C85.4815 96.7873 84.5599 96.7873 83.7253 96.4972C83.4481 96.4008 83.1878 96.2636 82.9518 96.0921Z" fill="#212448"/>
69
+ </g>
70
+ <rect x="39.2063" y="81.9862" width="28.8932" height="25.0424" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
71
+ <g opacity="0.5">
72
+ <path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M54.0396 102.884C59.0149 102.884 63.0482 99.2038 63.0482 94.6641C63.0482 90.1243 59.0149 86.4441 54.0396 86.4441C49.0643 86.4441 45.031 90.1243 45.031 94.6641C45.031 99.2038 49.0643 102.884 54.0396 102.884ZM52.6987 88.8503C51.39 89.416 50.5368 90.7479 50.5368 92.2253V92.7447C50.5368 93.4092 50.6584 94.0675 50.895 94.6844C51.2233 95.5403 51.9062 96.2054 52.7447 96.4969C53.5793 96.787 54.5009 96.787 55.3355 96.4969C56.1741 96.2054 56.8569 95.5403 57.1852 94.6844C57.4219 94.0675 57.5434 93.4092 57.5434 92.7447V92.2253C57.5434 90.7479 56.6902 89.416 55.3815 88.8503C54.5227 88.4791 53.5576 88.4791 52.6987 88.8503Z" fill="#212448"/>
73
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M51.9704 96.0921L50.413 96.4797C49.6211 96.6767 48.9598 97.1822 48.5577 97.8595C48.3817 98.1558 48.4447 98.5283 48.6785 98.7815C49.9638 100.173 51.8883 101.058 54.0391 101.058C56.1902 101.058 58.1148 100.173 59.4001 98.781C59.6339 98.5278 59.6969 98.1552 59.5208 97.8589C59.1186 97.182 58.4575 96.6767 57.6658 96.4797L56.1083 96.0921C55.8723 96.2636 55.612 96.4008 55.3347 96.4972C54.5001 96.7873 53.5785 96.7873 52.7439 96.4972C52.4666 96.4008 52.2064 96.2636 51.9704 96.0921Z" fill="#212448"/>
74
+ </g>
75
+ <rect x="55.5991" y="40.3342" width="60.3758" height="56.3507" rx="6.70842" fill="#FFD66D"/>
76
+ <circle cx="85.7869" cy="68.962" r="22.6773" fill="#FFBF1C"/>
77
+ <path d="M76.9692 62.2338C76.9692 58.1582 79.1171 54.4836 82.4115 52.9231C84.5735 51.899 87.0029 51.899 89.1649 52.9231C92.4593 54.4836 94.6071 58.1582 94.6071 62.2338V63.667C94.6071 65.5 94.3011 67.3163 93.7054 69.0182C92.879 71.3793 91.16 73.2144 89.0491 74.0185C86.9481 74.8189 84.6282 74.8189 82.5273 74.0185C80.4164 73.2144 78.6974 71.3793 77.871 69.0182C77.2753 67.3163 76.9692 65.5 76.9692 63.667V62.2338Z" fill="white"/>
78
+ <path opacity="0.4" fill-rule="evenodd" clip-rule="evenodd" d="M85.7869 91.6393C98.3113 91.6393 108.464 81.4864 108.464 68.962C108.464 56.4377 98.3113 46.2847 85.7869 46.2847C73.2626 46.2847 63.1096 56.4377 63.1096 68.962C63.1096 81.4864 73.2626 91.6393 85.7869 91.6393ZM82.4116 52.9231C79.1172 54.4836 76.9694 58.1582 76.9694 62.2338V63.667C76.9694 65.5 77.2754 67.3163 77.8711 69.0182C78.6975 71.3793 80.4165 73.2144 82.5274 74.0185C84.6284 74.8189 86.9483 74.8189 89.0492 74.0185C91.1601 73.2144 92.8791 71.3793 93.7055 69.0182C94.3012 67.3163 94.6073 65.5 94.6073 63.667V62.2338C94.6073 58.1582 92.4594 54.4836 89.165 52.9231C87.003 51.899 84.5736 51.899 82.4116 52.9231Z" fill="#BABABA"/>
79
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M80.5782 72.9018L73.7821 74.7553C72.6521 75.0634 71.8048 76.001 71.6123 77.1564L71.3672 78.6268C71.3243 78.8843 71.3827 79.1492 71.5368 79.3599C74.7451 83.7493 79.9325 86.6006 85.7858 86.6006C91.6399 86.6006 96.8279 83.7486 100.036 79.3582C100.19 79.1475 100.249 78.8827 100.206 78.6252L99.9608 77.1564C99.7683 76.001 98.921 75.0634 97.791 74.7553L90.9945 72.9017C90.4004 73.3748 89.7452 73.7534 89.0472 74.0193C86.9463 74.8196 84.6264 74.8196 82.5255 74.0193C81.8275 73.7534 81.1724 73.3748 80.5782 72.9018Z" fill="#49236F"/>
80
+ <path d="M42.8783 64.8282L15.4988 48.8075L16.4179 60.1724L42.8783 64.8282Z" fill="#714D95"/>
81
+ <path d="M42.878 64.8282L15.6505 50.6172L15.7746 52.1881L42.878 64.8282Z" fill="#714D95"/>
82
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M21.6074 41.6965L45.1308 66.0234L4.64295 61.4472L13.6076 51.0102L42.8781 64.8279L15.4981 48.8091L21.6074 41.6965Z" fill="#8F72CE"/>
83
+ <g style="mix-blend-mode:soft-light" opacity="0.5">
84
+ <path d="M13.6072 51.0105L4.62472 61.4464L21.5307 54.7528L13.6072 51.0105Z" fill="#D1B3EE"/>
85
+ </g>
86
+ <g style="mix-blend-mode:soft-light" opacity="0.5">
87
+ <path d="M21.6072 41.6965L15.5081 48.8083L22.738 53.0393L21.6072 41.6965Z" fill="#D1B3EE"/>
88
+ </g>
89
+ <defs>
90
+ <linearGradient id="paint0_linear" x1="-8.17592" y1="50.4193" x2="57.2337" y2="14.6277" gradientUnits="userSpaceOnUse">
91
+ <stop stop-color="#A37FDF"/>
92
+ <stop offset="1" stop-color="#8F72CE" stop-opacity="0"/>
93
+ </linearGradient>
94
+ </defs>
95
+ </svg>
assets/images/tile-img-logomaker.svg ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg width="175" height="125" viewBox="0 0 175 125" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path opacity="0.7" d="M127.05 15.1634C117.122 18.2658 117.658 26.5677 110.279 23.8843C102.229 19.1884 86.7995 2.51528 71.3701 7.78405C58.6117 12.1406 68.482 28.6561 55.9219 33.2767C54.4676 33.8048 52.8811 34.0688 51.2945 34.0688C48.7164 34.0688 45.94 33.5407 42.833 32.9467C39.7921 32.4186 36.4207 31.8245 32.7188 31.8245C28.488 31.8245 23.7284 32.5506 18.3738 34.8609C5.02045 42.4518 3.23559 50.5048 1.31852 58.6898C1.25241 59.0858 1.1202 60.0099 1.0541 60.406C-0.730761 70.4392 0.657462 77.5021 3.50001 85.7531C5.28487 90.9017 8.06132 95.5222 11.9616 99.1527C15.0024 101.991 18.7705 104.103 23.2657 105.225C25.1166 105.687 26.9015 105.885 28.5541 105.885C37.8089 105.885 44.6178 99.6147 54.0049 98.8886C54.6659 98.8226 55.2609 98.8226 55.9219 98.8226C63.5902 98.8226 69.5397 102.519 76.0842 106.678C76.4147 106.876 76.8114 107.14 77.1419 107.338C86.0662 112.948 95.0566 118.097 104.576 120.737C108.939 121.925 113.368 122.651 117.995 122.651C122.953 122.651 128.11 121.859 133.464 120.011C139.414 117.965 144.636 114.665 149.131 110.44C153.891 105.951 157.857 100.407 160.832 94.2681C165.856 83.9708 161.295 75.6202 160.832 64.1348C190.349 53.4013 169.984 1.74651 127.05 15.1634Z" fill="#F6F6F6"/>
3
+ <path d="M157.414 91.0375C160.872 103.589 156.006 113.345 149.528 118.625C136.835 128.989 113.302 121.266 96.9075 101.331C87.5205 89.9118 82.5626 77.0403 82.3643 66.0829" stroke="url(#paint0_linear)" stroke-width="2.01253" stroke-miterlimit="10"/>
4
+ <path d="M82.3643 65.2247C82.3643 64.8947 82.3643 64.6306 82.3643 64.3006" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
5
+ <path d="M122.16 0.404816V5.61945" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
6
+ <path d="M122.16 19.9431V25.1577" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
7
+ <path d="M117.268 4.29916L118.59 6.54344" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
8
+ <path d="M125.729 18.9532L127.052 21.2635" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
9
+ <path d="M112.376 12.7483H114.954" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
10
+ <path d="M129.299 12.7483H131.943" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
11
+ <path d="M117.268 21.2635L118.59 18.9532" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
12
+ <path d="M125.729 6.54344L127.052 4.29916" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
13
+ <path d="M111.451 6.60947L115.946 9.18378" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
14
+ <path d="M128.374 16.3789L132.869 18.9532" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
15
+ <path d="M111.451 18.9532L115.946 16.3789" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
16
+ <path d="M128.374 9.18378L132.869 6.60947" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
17
+ <path d="M12.0938 86.8753V89.1196" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
18
+ <path d="M12.0938 95.3902V97.7005" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
19
+ <path d="M7.40027 89.5816L9.38344 90.7037" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
20
+ <path d="M14.8042 93.8061L16.7874 94.9942" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
21
+ <path d="M7.40027 94.9942L9.38344 93.8061" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
22
+ <path d="M14.8042 90.7037L16.7874 89.5816" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
23
+ <path d="M145.694 33.9367V36.181" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
24
+ <path d="M145.694 42.4516V44.7619" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
25
+ <path d="M141 36.643L142.983 37.7651" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
26
+ <path d="M148.404 40.8676L150.387 42.0557" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
27
+ <path d="M141 42.0557L142.983 40.8676" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
28
+ <path d="M148.404 37.7651L150.387 36.643" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
29
+ <path d="M142.51 60.7126L158.775 87.9479L147.402 87.1303L142.51 60.7126Z" fill="#714D95"/>
30
+ <path d="M142.51 60.7127L156.964 87.8123L155.392 87.7022L142.51 60.7127Z" fill="#714D95"/>
31
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M165.831 81.776L141.295 58.4708L146.233 98.9161L156.589 89.8587L142.511 60.7127L158.773 87.9485L165.831 81.776Z" fill="#8F72CE"/>
32
+ <g style="mix-blend-mode:soft-light" opacity="0.5">
33
+ <path d="M156.589 89.8589L146.234 98.9343L152.776 81.9692L156.589 89.8589Z" fill="#D1B3EE"/>
34
+ </g>
35
+ <g style="mix-blend-mode:soft-light" opacity="0.5">
36
+ <path d="M165.831 81.7761L158.774 87.9385L154.479 80.7467L165.831 81.7761Z" fill="#D1B3EE"/>
37
+ </g>
38
+ <rect x="31.1195" y="19.1884" width="105.993" height="95.2596" fill="white"/>
39
+ <rect x="39.1697" y="71.5141" width="89.8928" height="20.1253" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
40
+ <rect x="76.7368" y="27.2385" width="52.3257" height="40.2505" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
41
+ <rect x="39.1697" y="95.6644" width="89.8928" height="13.4168" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
42
+ <rect x="39.1697" y="59.4389" width="30.8587" height="8.0501" rx="4.02505" fill="#265988" fill-opacity="0.16"/>
43
+ <rect x="16.3611" y="24.5551" width="60.3758" height="56.3507" rx="6.70842" fill="#7D64B4"/>
44
+ <path d="M28.4363 54.4123H44.5932V70.5692H28.4363V54.4123ZM51.2071 68.8685C49.4434 67.1048 48.5615 64.9631 48.5615 62.4435C48.5615 59.924 49.4434 57.7823 51.2071 56.0186C52.9708 54.2549 55.1125 53.373 57.6321 53.373C60.1517 53.373 62.2933 54.2549 64.057 56.0186C65.8208 57.7823 66.7026 59.924 66.7026 62.4435C66.7026 64.9631 65.8208 67.1048 64.057 68.8685C62.2933 70.6322 60.1517 71.5141 57.6321 71.5141C55.1125 71.5141 52.9708 70.6322 51.2071 68.8685ZM46.5774 31.2636L57.6321 49.4046H35.5226L46.5774 31.2636Z" fill="white"/>
45
+ <path d="M28.4363 54.4123H44.5932V70.5692H28.4363V54.4123Z" fill="#AADBF4"/>
46
+ <path d="M46.5772 31.2637L57.6319 49.4048H35.5225L46.5772 31.2637Z" fill="#C49ED1"/>
47
+ <defs>
48
+ <linearGradient id="paint0_linear" x1="174.21" y1="85.6868" x2="111.352" y2="123.228" gradientUnits="userSpaceOnUse">
49
+ <stop stop-color="#A37FDF"/>
50
+ <stop offset="1" stop-color="#8F72CE" stop-opacity="0"/>
51
+ </linearGradient>
52
+ </defs>
53
+ </svg>
assets/images/tile-img-woocommerce.svg ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg width="181" height="105" viewBox="0 0 181 105" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path opacity="0.4" d="M124.352 4.52742C96.0436 5.10848 95.3976 8.31459 75.5391 15.6795C69.03 18.0983 51.3193 10.8968 41.3438 10.8968C24.3035 10.8968 4.28103 25.4375 0.496157 41.4709C-1.69343 50.8737 9.40841 56.2116 11.1701 66.6458C11.1701 83.0587 23.9235 90.0317 36.3344 90.0317C48.3975 88.2515 52.3479 81.082 63.3009 80.2178C71.7845 79.5274 79.1223 83.8706 86.0273 88.2515C95.2846 94.1012 104.852 99.8521 115.479 102.828C119.967 104.082 124.576 104.809 129.348 104.809C134.456 104.809 139.754 103.977 145.298 102.077C151.433 99.9741 156.839 96.5557 161.465 92.194C166.395 87.5448 170.437 81.8306 173.525 75.5044C189.029 43.7488 169.807 43.2419 149.216 29.0253C138.74 21.7946 147.753 8.54945 124.352 4.52742Z" fill="white"/>
3
+ <path d="M147.37 13.7951L149.22 14.8704C149.483 15.0256 149.695 15.2551 149.828 15.5302C149.962 15.8054 150.012 16.1139 149.971 16.4171C149.849 17.3494 149.821 18.2916 149.888 19.2294C149.91 19.5436 149.837 19.8569 149.677 20.1285C149.518 20.4001 149.281 20.6172 148.997 20.7514L147.221 21.5785C146.868 21.7386 146.588 22.0251 146.435 22.3817C146.282 22.7383 146.268 23.1392 146.395 23.5057L147.138 25.5736C147.267 25.9398 147.529 26.2435 147.873 26.4231C148.216 26.6028 148.615 26.6451 148.988 26.5413L151.061 25.9954C151.361 25.9103 151.679 25.9186 151.974 26.019C152.269 26.1195 152.527 26.3074 152.713 26.5579C153.287 27.3044 153.935 27.9916 154.645 28.6092C154.889 28.8122 155.064 29.086 155.145 29.3928C155.226 29.6995 155.21 30.024 155.099 30.3214L154.356 32.1576C154.22 32.5188 154.225 32.918 154.371 33.2754C154.516 33.6328 154.791 33.9219 155.141 34.0849L157.123 35.0361C157.473 35.2008 157.872 35.2285 158.242 35.1137C158.612 34.999 158.925 34.75 159.121 34.4157L160.187 32.5629C160.341 32.297 160.572 32.0833 160.848 31.9492C161.125 31.8152 161.435 31.7668 161.739 31.8102C162.67 31.9341 163.611 31.9591 164.547 31.8847C164.864 31.859 165.182 31.9318 165.457 32.093C165.732 32.2543 165.95 32.4963 166.083 32.7863L166.909 34.5646C167.066 34.9187 167.35 35.2006 167.705 35.354C168.06 35.5073 168.46 35.5208 168.825 35.3917L170.906 34.6556C171.268 34.5255 171.569 34.2637 171.748 33.922C171.927 33.5804 171.971 33.1839 171.872 32.8111L171.327 30.7349C171.243 30.4346 171.252 30.116 171.352 29.8208C171.452 29.5256 171.639 29.2676 171.889 29.0807C172.633 28.5104 173.317 27.8646 173.928 27.1534C174.134 26.9107 174.409 26.7369 174.716 26.6555C175.023 26.5742 175.348 26.5892 175.646 26.6985L177.479 27.3685C177.84 27.5037 178.239 27.4989 178.596 27.3551C178.954 27.2112 179.245 26.9387 179.412 26.591L180.353 24.5976C180.521 24.2485 180.551 23.8486 180.436 23.4786C180.321 23.1087 180.07 22.7961 179.734 22.6042L177.876 21.5785C177.612 21.422 177.4 21.191 177.266 20.9144C177.133 20.6378 177.083 20.328 177.124 20.0235C177.247 19.0913 177.274 18.149 177.207 17.2112C177.181 16.8942 177.252 16.5767 177.412 16.3016C177.571 16.0265 177.811 15.807 178.099 15.6727L179.874 14.8456C180.229 14.687 180.51 14.4007 180.663 14.0436C180.816 13.6865 180.829 13.2848 180.7 12.9183L179.957 10.8257C179.827 10.4621 179.566 10.1603 179.225 9.97974C178.884 9.79913 178.489 9.75273 178.115 9.84965L176.051 10.4038C175.751 10.4854 175.433 10.4755 175.139 10.3753C174.845 10.2751 174.587 10.0892 174.399 9.84138C173.846 9.10269 173.218 8.42355 172.524 7.81489C172.281 7.60985 172.107 7.33457 172.026 7.02664C171.944 6.71871 171.96 6.39315 172.07 6.09443L172.756 4.26645C172.893 3.90515 172.889 3.50544 172.745 3.14682C172.601 2.7882 172.328 2.49693 171.979 2.33095L169.989 1.38801C169.64 1.2218 169.242 1.19335 168.873 1.30832C168.504 1.42329 168.192 1.67324 167.999 2.00836L166.925 3.86116C166.77 4.12488 166.541 4.33696 166.267 4.47085C165.992 4.60474 165.684 4.65449 165.381 4.61385C164.448 4.49144 163.504 4.46373 162.565 4.53114C162.237 4.57592 161.904 4.51306 161.615 4.35198C161.326 4.1909 161.097 3.94031 160.963 3.63783L160.137 1.8512C159.98 1.49515 159.695 1.21185 159.337 1.05836C158.98 0.90488 158.579 0.892625 158.213 1.02406L156.148 1.76022C155.783 1.89042 155.481 2.15315 155.3 2.49632C155.12 2.83949 155.075 3.23805 155.174 3.61301L155.727 5.68914C155.812 5.98938 155.804 6.30841 155.704 6.60387C155.603 6.89933 155.416 7.15726 155.166 7.34342C154.42 7.91868 153.734 8.56706 153.117 9.27892C152.914 9.52197 152.641 9.69613 152.335 9.77757C152.029 9.859 151.705 9.84373 151.408 9.73385L149.575 9.03905C149.213 8.90243 148.813 8.90745 148.455 9.0531C148.097 9.19875 147.806 9.47433 147.642 9.82484L146.701 11.8182C146.544 12.1716 146.525 12.5713 146.649 12.9377C146.773 13.304 147.03 13.6102 147.37 13.7951V13.7951ZM157.544 15.3584C158.11 14.1824 159.01 13.2002 160.132 12.5355C161.254 11.8708 162.546 11.5533 163.848 11.6229C165.149 11.6925 166.401 12.1461 167.446 12.9266C168.491 13.7071 169.282 14.7797 169.719 16.0094C170.157 17.2391 170.221 18.5709 169.905 19.8373C169.588 21.1036 168.905 22.2479 167.941 23.1262C166.976 24.0045 165.774 24.5774 164.486 24.773C163.197 24.9686 161.879 24.7781 160.699 24.2254C159.907 23.8547 159.196 23.3302 158.608 22.6825C158.02 22.0347 157.566 21.2765 157.272 20.4517C156.979 19.627 156.852 18.7521 156.899 17.8778C156.945 17.0035 157.164 16.1472 157.544 15.3584V15.3584Z" fill="#D0B8B8"/>
4
+ <path d="M157.511 15.9142L157.508 15.9217C156.052 19.1728 157.503 22.9905 160.749 24.4489L160.756 24.4523C164.002 25.9106 167.814 24.4574 169.27 21.2063L169.273 21.1987C170.729 17.9477 169.278 14.1299 166.032 12.6716L166.025 12.6682C162.779 11.2098 158.967 12.6631 157.511 15.9142Z" stroke="#917D65" stroke-width="1.81066" stroke-linecap="round" stroke-linejoin="round"/>
5
+ <path d="M38.2014 80.8846L39.4564 81.6141C39.635 81.7194 39.7787 81.8751 39.8694 82.0617C39.9601 82.2484 39.9938 82.4577 39.9662 82.6635C39.8834 83.2959 39.8646 83.9352 39.9102 84.5714C39.9249 84.7845 39.875 84.9971 39.767 85.1814C39.6591 85.3656 39.4981 85.5129 39.3051 85.604L38.1005 86.1651C37.8611 86.2738 37.6709 86.4681 37.5672 86.71C37.4635 86.952 37.4539 87.224 37.5402 87.4726L38.0445 88.8756C38.1316 89.124 38.3096 89.33 38.5426 89.4519C38.7756 89.5738 39.0462 89.6025 39.2995 89.5321L40.7058 89.1617C40.9092 89.104 41.1253 89.1096 41.3254 89.1778C41.5256 89.2459 41.7003 89.3734 41.8264 89.5433C42.216 90.0498 42.6552 90.516 43.1374 90.935C43.3027 91.0727 43.4212 91.2585 43.4764 91.4666C43.5316 91.6748 43.5208 91.8949 43.4456 92.0966L42.9413 93.3424C42.849 93.5874 42.8526 93.8583 42.9513 94.1008C43.05 94.3432 43.2366 94.5394 43.4736 94.6499L44.8182 95.2953C45.0559 95.407 45.3268 95.4258 45.5776 95.348C45.8284 95.2701 46.0412 95.1012 46.1741 94.8744L46.8969 93.6174C47.0018 93.437 47.1581 93.292 47.3457 93.201C47.5333 93.1101 47.7438 93.0772 47.9502 93.1067C48.5816 93.1908 49.2201 93.2077 49.8551 93.1572C50.0705 93.1398 50.286 93.1892 50.4724 93.2986C50.6588 93.408 50.8071 93.5722 50.8972 93.7689L51.4575 94.9754C51.5638 95.2157 51.7567 95.4069 51.9977 95.5109C52.2387 95.615 52.5099 95.6241 52.7573 95.5366L54.1692 95.0371C54.4153 94.9489 54.6192 94.7712 54.7406 94.5395C54.862 94.3077 54.8921 94.0387 54.8248 93.7857L54.455 92.3772C54.3981 92.1735 54.4041 91.9573 54.4721 91.757C54.5401 91.5567 54.6669 91.3817 54.836 91.2549C55.3411 90.868 55.8048 90.4299 56.2198 89.9474C56.3592 89.7827 56.5457 89.6648 56.7541 89.6096C56.9625 89.5544 57.1828 89.5646 57.3852 89.6387L58.629 90.0933C58.8739 90.185 59.1441 90.1818 59.3867 90.0842C59.6293 89.9866 59.8266 89.8017 59.9401 89.5658L60.5788 88.2134C60.6927 87.9766 60.7127 87.7053 60.6347 87.4543C60.5567 87.2032 60.3866 86.9912 60.1586 86.861L58.898 86.1651C58.7189 86.0589 58.575 85.9022 58.4843 85.7146C58.3936 85.5269 58.3602 85.3167 58.3881 85.1101C58.4711 84.4777 58.4899 83.8384 58.4441 83.2022C58.4263 82.9871 58.4747 82.7717 58.583 82.5851C58.6912 82.3984 58.8539 82.2495 59.0492 82.1584L60.2538 81.5972C60.4941 81.4896 60.6852 81.2954 60.789 81.0531C60.8928 80.8108 60.9018 80.5383 60.8141 80.2897L60.3099 78.87C60.2217 78.6233 60.0447 78.4186 59.8135 78.2961C59.5823 78.1735 59.3137 78.1421 59.0605 78.2078L57.6598 78.5838C57.4563 78.6392 57.2409 78.6324 57.0413 78.5644C56.8416 78.4964 56.6668 78.3703 56.5392 78.2022C56.1639 77.701 55.7377 77.2403 55.2674 76.8273C55.1023 76.6882 54.9841 76.5015 54.9289 76.2926C54.8738 76.0837 54.8844 75.8628 54.9592 75.6601L55.4243 74.4199C55.5172 74.1748 55.5146 73.9036 55.417 73.6603C55.3194 73.417 55.134 73.2194 54.8976 73.1068L53.5473 72.4671C53.3107 72.3543 53.0403 72.335 52.79 72.413C52.5398 72.491 52.3281 72.6606 52.1971 72.888L51.4687 74.145C51.3636 74.3239 51.2081 74.4678 51.0218 74.5586C50.8354 74.6495 50.6264 74.6832 50.421 74.6556C49.7877 74.5726 49.1476 74.5538 48.5105 74.5995C48.2882 74.6299 48.0621 74.5873 47.8661 74.478C47.6701 74.3687 47.5148 74.1987 47.4235 73.9935L46.8632 72.7813C46.7569 72.5398 46.563 72.3476 46.3208 72.2435C46.0785 72.1393 45.8059 72.131 45.5578 72.2202L44.1571 72.7196C43.9096 72.808 43.7043 72.9862 43.5819 73.219C43.4594 73.4518 43.4288 73.7222 43.496 73.9766L43.8714 75.3852C43.929 75.5889 43.9234 75.8053 43.8554 76.0057C43.7873 76.2062 43.66 76.3812 43.4904 76.5075C42.9847 76.8978 42.5192 77.3377 42.1009 77.8206C41.9629 77.9855 41.7774 78.1037 41.5698 78.1589C41.3622 78.2142 41.1426 78.2038 40.9411 78.1292L39.6973 77.6579C39.4519 77.5652 39.1806 77.5686 38.9376 77.6674C38.6946 77.7662 38.4977 77.9532 38.3863 78.191L37.7476 79.5434C37.641 79.7831 37.6285 80.0543 37.7126 80.3029C37.7967 80.5514 37.9712 80.7591 38.2014 80.8846V80.8846ZM45.104 81.9452C45.4878 81.1473 46.0986 80.481 46.8597 80.03C47.6207 79.579 48.4979 79.3636 49.3809 79.4108C50.2639 79.458 51.1132 79.7658 51.822 80.2953C52.5307 80.8249 53.0673 81.5526 53.3641 82.3868C53.6609 83.2211 53.7047 84.1247 53.49 84.9838C53.2753 85.8429 52.8117 86.6193 52.1575 87.2151C51.5033 87.811 50.6878 88.1997 49.8135 88.3324C48.9392 88.4651 48.0453 88.3358 47.2442 87.9609C46.7069 87.7094 46.2248 87.3536 45.8258 86.9141C45.4268 86.4746 45.1189 85.9602 44.9198 85.4007C44.7207 84.8411 44.6345 84.2476 44.6661 83.6544C44.6977 83.0613 44.8466 82.4803 45.104 81.9452V81.9452Z" fill="#E6CEA0"/>
6
+ <path d="M45.0818 82.3222L45.0795 82.3273C44.0917 84.533 45.0761 87.1231 47.2782 88.1125L47.2834 88.1148C49.4855 89.1042 52.0715 88.1182 53.0594 85.9126L53.0616 85.9075C54.0495 83.7018 53.0651 81.1117 50.8629 80.1223L50.8578 80.12C48.6557 79.1306 46.0697 80.1166 45.0818 82.3222Z" stroke="#DCB98F" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
7
+ <path d="M127.893 81.2649C153.956 73.0853 170.836 55.1923 153.956 52.7999C138.311 50.5826 38.4808 50.3301 52.2765 40.1763C63.313 32.0533 89.9165 21.2409 101.839 16.8501" stroke="url(#paint0_linear)" stroke-width="3.54534"/>
8
+ <rect x="60.823" y="14.1854" width="71.6292" height="69.7442" rx="6.45214" fill="#EFBA56"/>
9
+ <path d="M60.823 14.6376H134.337V34.123C134.337 37.6864 131.448 40.5751 127.885 40.5751H67.2751C63.7117 40.5751 60.823 37.6864 60.823 34.123V14.6376Z" fill="#BBA15E"/>
10
+ <path d="M58.938 12.3004H134.337V32.238C134.337 35.8014 131.448 38.6902 127.885 38.6902H65.3901C61.8267 38.6902 58.938 35.8014 58.938 32.238V12.3004Z" fill="#DFD4B7"/>
11
+ <path d="M59.938 13.3004H133.321V32.238C133.321 35.2491 130.88 37.6902 127.869 37.6902H65.3901C62.379 37.6902 59.938 35.2491 59.938 32.238V13.3004Z" fill="#FFBF1C" stroke="white" stroke-width="2"/>
12
+ <line x1="64.5917" y1="17.3908" x2="92.8602" y2="17.3908" stroke="white" stroke-width="1.12912"/>
13
+ <line x1="96.6293" y1="17.3908" x2="104.168" y2="17.3908" stroke="white" stroke-width="1.12912"/>
14
+ <line x1="106.052" y1="17.3908" x2="109.821" y2="17.3908" stroke="white" stroke-width="1.12912"/>
15
+ <line x1="111.706" y1="17.3908" x2="115.475" y2="17.3908" stroke="white" stroke-width="1.12912"/>
16
+ <line x1="97.4747" y1="80.1597" x2="97.4747" y2="40.5751" stroke="#AA875F" stroke-width="3"/>
17
+ <rect x="77.2307" y="29.9674" width="38.8137" height="17.4456" rx="2" fill="#FDFDFD"/>
18
+ <rect x="81.5706" y="33.0756" width="30.6608" height="3.21605" rx="0.552276" fill="#C4C4C4"/>
19
+ <rect x="81.5706" y="37.2884" width="24.2826" height="3.21605" rx="0.552276" fill="#C4C4C4"/>
20
+ <rect x="81.5706" y="41.5012" width="26.8184" height="3.21605" rx="0.552276" fill="#C4C4C4"/>
21
+ <path d="M36.6023 26.8136V31.8675" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
22
+ <path d="M36.6023 45.7496V50.8035" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
23
+ <path d="M31.8683 30.588L33.1478 32.7631" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
24
+ <path d="M40.0569 44.79L41.3363 47.0291" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
25
+ <path d="M27.1343 38.7765H29.6292" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
26
+ <path d="M43.5115 38.7765H46.0704" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
27
+ <path d="M31.8683 47.0291L33.1478 44.79" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
28
+ <path d="M40.0569 32.7631L41.3363 30.588" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
29
+ <path d="M26.2386 32.827L30.5888 35.322" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
30
+ <path d="M42.6158 42.2951L46.966 44.79" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
31
+ <path d="M26.2386 44.79L30.5888 42.2951" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
32
+ <path d="M42.6158 35.322L46.966 32.827" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
33
+ <path d="M59.1438 8.07382V11.0359" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
34
+ <path d="M59.1438 19.3123V22.3615" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
35
+ <path d="M52.9583 11.6457L55.5718 13.1268" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
36
+ <path d="M62.7156 17.2214L65.3292 18.7896" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
37
+ <path d="M52.9583 18.7896L55.5718 17.2214" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
38
+ <path d="M62.7156 13.1268L65.3292 11.6457" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
39
+ <path d="M99.2777 93.7295L139.055 70.4182L137.73 86.9367L99.2777 93.7295Z" fill="#714D95"/>
40
+ <path d="M99.2781 93.7296L138.836 73.0486L138.658 75.3319L99.2781 93.7296Z" fill="#714D95"/>
41
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M130.17 60.089L96.0051 95.4687L154.845 88.7779L141.806 73.6178L99.278 93.7291L139.056 70.4206L130.17 60.089Z" fill="#8F72CE"/>
42
+ <g style="mix-blend-mode:soft-light" opacity="0.5">
43
+ <path d="M141.806 73.6182L154.872 88.7768L130.294 79.0651L141.806 73.6182Z" fill="#D1B3EE"/>
44
+ </g>
45
+ <g style="mix-blend-mode:soft-light" opacity="0.5">
46
+ <path d="M130.17 60.0892L139.041 70.4194L128.538 76.5758L130.17 60.0892Z" fill="#D1B3EE"/>
47
+ </g>
48
+ <defs>
49
+ <linearGradient id="paint0_linear" x1="105.853" y1="93.2141" x2="96.1289" y2="30.8143" gradientUnits="userSpaceOnUse">
50
+ <stop stop-color="#8F72CE"/>
51
+ <stop offset="1" stop-color="#8F72CE" stop-opacity="0"/>
52
+ </linearGradient>
53
+ </defs>
54
+ </svg>
assets/images/tile-logomaker.svg DELETED
@@ -1,54 +0,0 @@
1
- <svg width="275" height="150" viewBox="0 0 275 150" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="275" height="149.367" fill="#E7E2F6"/>
3
- <path opacity="0.7" d="M174.05 28.0304C164.122 31.1329 164.658 39.4347 157.279 36.7514C149.229 32.0555 133.8 15.3823 118.37 20.6511C105.612 25.0076 115.482 41.5232 102.922 46.1438C101.468 46.6718 99.8811 46.9359 98.2945 46.9359C95.7164 46.9359 92.94 46.4078 89.833 45.8137C86.7921 45.2857 83.4207 44.6916 79.7188 44.6916C75.488 44.6916 70.7284 45.4177 65.3738 47.728C52.0204 55.3189 50.2356 63.3719 48.3185 71.5568C48.2524 71.9529 48.1202 72.877 48.0541 73.2731C46.2692 83.3063 47.6575 90.3691 50.5 98.6201C52.2849 103.769 55.0613 108.389 58.9616 112.02C62.0024 114.858 65.7705 116.97 70.2657 118.092C72.1166 118.555 73.9015 118.753 75.5541 118.753C84.8089 118.753 91.6178 112.482 101.005 111.756C101.666 111.69 102.261 111.69 102.922 111.69C110.59 111.69 116.54 115.386 123.084 119.545C123.415 119.743 123.811 120.007 124.142 120.205C133.066 125.815 142.057 130.964 151.576 133.604C155.939 134.792 160.368 135.519 164.995 135.519C169.953 135.519 175.11 134.726 180.464 132.878C186.414 130.832 191.636 127.532 196.131 123.307C200.891 118.819 204.857 113.274 207.832 107.135C212.856 96.8379 208.295 88.4873 207.832 77.0019C237.349 66.2684 216.984 14.6136 174.05 28.0304Z" fill="#F6F6F6"/>
4
- <path d="M204.414 103.905C207.872 116.456 203.006 126.212 196.528 131.492C183.836 141.856 160.302 134.133 143.908 114.198C134.521 102.779 129.563 89.9073 129.364 78.95" stroke="url(#paint0_linear)" stroke-width="2.01253" stroke-miterlimit="10"/>
5
- <path d="M129.364 78.0918C129.364 77.7617 129.364 77.4977 129.364 77.1677" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
6
- <path d="M169.16 13.2719V18.4865" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
7
- <path d="M169.16 32.8102V38.0248" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
8
- <path d="M164.268 17.1663L165.59 19.4105" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
9
- <path d="M172.729 31.8203L174.052 34.1306" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
10
- <path d="M159.376 25.6154H161.954" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
11
- <path d="M176.299 25.6154H178.943" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
12
- <path d="M164.268 34.1306L165.59 31.8203" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
13
- <path d="M172.729 19.4105L174.052 17.1663" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
14
- <path d="M158.451 19.4766L162.946 22.0509" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
15
- <path d="M175.374 29.246L179.869 31.8203" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
16
- <path d="M158.451 31.8203L162.946 29.246" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
17
- <path d="M175.374 22.0509L179.869 19.4766" stroke="#DCB145" stroke-width="2.01253" stroke-miterlimit="10"/>
18
- <path d="M59.0938 99.7424V101.987" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
19
- <path d="M59.0938 108.257V110.568" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
20
- <path d="M54.4003 102.449L56.3834 103.571" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
21
- <path d="M61.8041 106.673L63.7873 107.861" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
22
- <path d="M54.4003 107.861L56.3834 106.673" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
23
- <path d="M61.8041 103.571L63.7873 102.449" stroke="#FFBF1C" stroke-width="2.01253" stroke-miterlimit="10"/>
24
- <path d="M192.694 46.8038V49.0481" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
25
- <path d="M192.694 55.3187V57.629" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
26
- <path d="M188 49.5101L189.983 50.6323" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
27
- <path d="M195.404 53.7347L197.387 54.9228" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
28
- <path d="M188 54.9228L189.983 53.7347" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
29
- <path d="M195.404 50.6323L197.387 49.5101" stroke="#ACE1E4" stroke-width="2.01253" stroke-miterlimit="10"/>
30
- <path d="M189.51 73.5797L205.775 100.815L194.402 99.9974L189.51 73.5797Z" fill="#714D95"/>
31
- <path d="M189.51 73.5799L203.964 100.679L202.392 100.569L189.51 73.5799Z" fill="#714D95"/>
32
- <path fill-rule="evenodd" clip-rule="evenodd" d="M212.831 94.6431L188.295 71.3379L193.233 111.783L203.589 102.726L189.511 73.5799L205.773 100.816L212.831 94.6431Z" fill="#8F72CE"/>
33
- <g style="mix-blend-mode:soft-light" opacity="0.5">
34
- <path d="M203.589 102.726L193.234 111.801L199.776 94.8364L203.589 102.726Z" fill="#D1B3EE"/>
35
- </g>
36
- <g style="mix-blend-mode:soft-light" opacity="0.5">
37
- <path d="M212.831 94.6433L205.774 100.806L201.479 93.6139L212.831 94.6433Z" fill="#D1B3EE"/>
38
- </g>
39
- <rect x="78.1195" y="32.0555" width="105.993" height="95.2596" fill="white"/>
40
- <rect x="86.1696" y="84.3812" width="89.8928" height="20.1253" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
41
- <rect x="123.737" y="40.1056" width="52.3257" height="40.2505" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
42
- <rect x="86.1696" y="108.531" width="89.8928" height="13.4168" rx="4.02505" fill="#4F2569" fill-opacity="0.16"/>
43
- <rect x="86.1696" y="72.306" width="30.8587" height="8.0501" rx="4.02505" fill="#265988" fill-opacity="0.16"/>
44
- <rect x="63.361" y="37.4222" width="60.3758" height="56.3507" rx="6.70842" fill="#7D64B4"/>
45
- <path d="M75.4362 67.2795H91.5931V83.4363H75.4362V67.2795ZM98.2071 81.7356C96.4433 79.9719 95.5615 77.8303 95.5615 75.3107C95.5615 72.7911 96.4433 70.6494 98.2071 68.8857C99.9708 67.122 102.112 66.2401 104.632 66.2401C107.152 66.2401 109.293 67.122 111.057 68.8857C112.821 70.6494 113.703 72.7911 113.703 75.3107C113.703 77.8303 112.821 79.9719 111.057 81.7356C109.293 83.4993 107.152 84.3812 104.632 84.3812C102.112 84.3812 99.9708 83.4993 98.2071 81.7356ZM93.5773 44.1307L104.632 62.2718H82.5226L93.5773 44.1307Z" fill="white"/>
46
- <path d="M75.4362 67.2794H91.5931V83.4363H75.4362V67.2794Z" fill="#AADBF4"/>
47
- <path d="M93.5771 44.1308L104.632 62.2719H82.5224L93.5771 44.1308Z" fill="#C49ED1"/>
48
- <defs>
49
- <linearGradient id="paint0_linear" x1="221.21" y1="98.5539" x2="158.353" y2="136.095" gradientUnits="userSpaceOnUse">
50
- <stop stop-color="#A37FDF"/>
51
- <stop offset="1" stop-color="#8F72CE" stop-opacity="0"/>
52
- </linearGradient>
53
- </defs>
54
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/images/tile-woocommerce.svg DELETED
@@ -1,55 +0,0 @@
1
- <svg width="275" height="150" viewBox="0 0 275 150" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="275" height="150" fill="#E7E2F6"/>
3
- <path opacity="0.4" d="M171.352 29.3945C143.044 29.9756 142.398 33.1817 122.539 40.5466C116.03 42.9654 98.3193 35.7639 88.3438 35.7639C71.3035 35.7639 51.281 50.3046 47.4962 66.338C45.3066 75.7409 56.4084 81.0787 58.1701 91.5129C58.1701 107.926 70.9235 114.899 83.3344 114.899C95.3975 113.119 99.3479 105.949 110.301 105.085C118.785 104.395 126.122 108.738 133.027 113.119C142.285 118.968 151.852 124.719 162.479 127.695C166.967 128.949 171.576 129.676 176.348 129.676C181.456 129.676 186.754 128.844 192.298 126.944C198.433 124.841 203.839 121.423 208.465 117.061C213.395 112.412 217.437 106.698 220.525 100.372C236.029 68.6159 216.807 68.109 196.216 53.8924C185.74 46.6617 194.753 33.4166 171.352 29.3945Z" fill="white"/>
4
- <path d="M194.37 38.6622L196.22 39.7375C196.483 39.8927 196.695 40.1222 196.828 40.3973C196.962 40.6725 197.012 40.981 196.971 41.2843C196.849 42.2165 196.821 43.1587 196.888 44.0965C196.91 44.4107 196.837 44.7241 196.677 44.9956C196.518 45.2672 196.281 45.4843 195.997 45.6185L194.221 46.4456C193.868 46.6057 193.588 46.8922 193.435 47.2488C193.282 47.6054 193.268 48.0063 193.395 48.3729L194.138 50.4407C194.267 50.8069 194.529 51.1106 194.873 51.2903C195.216 51.4699 195.615 51.5122 195.988 51.4085L198.061 50.8626C198.361 50.7775 198.679 50.7857 198.974 50.8862C199.269 50.9866 199.527 51.1745 199.713 51.425C200.287 52.1715 200.935 52.8587 201.645 53.4763C201.889 53.6793 202.064 53.9531 202.145 54.2599C202.226 54.5667 202.21 54.8912 202.099 55.1885L201.356 57.0248C201.22 57.3859 201.225 57.7851 201.371 58.1425C201.516 58.4999 201.791 58.7891 202.141 58.952L204.123 59.9032C204.473 60.0679 204.872 60.0956 205.242 59.9809C205.612 59.8661 205.925 59.6172 206.121 59.2828L207.187 57.4301C207.341 57.1641 207.572 56.9505 207.848 56.8164C208.125 56.6823 208.435 56.6339 208.739 56.6774C209.67 56.8013 210.611 56.8262 211.547 56.7518C211.864 56.7261 212.182 56.7989 212.457 56.9602C212.732 57.1214 212.95 57.3635 213.083 57.6534L213.909 59.4317C214.066 59.7859 214.35 60.0677 214.705 60.2211C215.06 60.3744 215.46 60.3879 215.825 60.2589L217.906 59.5227C218.268 59.3926 218.569 59.1308 218.748 58.7891C218.927 58.4475 218.971 58.051 218.872 57.6782L218.327 55.6021C218.243 55.3018 218.252 54.9831 218.352 54.6879C218.452 54.3927 218.639 54.1347 218.889 53.9478C219.633 53.3776 220.317 52.7317 220.928 52.0206C221.134 51.7778 221.409 51.604 221.716 51.5227C222.023 51.4413 222.348 51.4563 222.646 51.5656L224.479 52.2356C224.84 52.3708 225.239 52.366 225.596 52.2222C225.954 52.0783 226.245 51.8058 226.412 51.4581L227.353 49.4647C227.521 49.1156 227.551 48.7157 227.436 48.3458C227.321 47.9758 227.07 47.6633 226.734 47.4713L224.876 46.4456C224.612 46.2891 224.4 46.0581 224.266 45.7815C224.133 45.505 224.083 45.1951 224.124 44.8906C224.247 43.9584 224.274 43.0161 224.207 42.0783C224.181 41.7613 224.252 41.4438 224.412 41.1687C224.571 40.8936 224.811 40.6741 225.099 40.5398L226.874 39.7127C227.229 39.5541 227.51 39.2678 227.663 38.9107C227.816 38.5536 227.829 38.1519 227.7 37.7855L226.957 35.6928C226.827 35.3292 226.566 35.0275 226.225 34.8469C225.884 34.6663 225.489 34.6199 225.115 34.7168L223.051 35.271C222.751 35.3526 222.433 35.3426 222.139 35.2424C221.845 35.1422 221.587 34.9563 221.399 34.7085C220.846 33.9698 220.218 33.2907 219.524 32.682C219.281 32.477 219.107 32.2017 219.026 31.8938C218.944 31.5858 218.96 31.2603 219.07 30.9616L219.756 29.1336C219.893 28.7723 219.889 28.3726 219.745 28.0139C219.601 27.6553 219.328 27.3641 218.979 27.1981L216.989 26.2551C216.64 26.0889 216.242 26.0605 215.873 26.1754C215.504 26.2904 215.192 26.5404 214.999 26.8755L213.925 28.7283C213.77 28.992 213.541 29.2041 213.267 29.338C212.992 29.4719 212.684 29.5216 212.381 29.481C211.448 29.3586 210.504 29.3309 209.565 29.3983C209.237 29.443 208.904 29.3802 208.615 29.2191C208.326 29.058 208.097 28.8074 207.963 28.505L207.137 26.7183C206.98 26.3623 206.695 26.079 206.337 25.9255C205.98 25.772 205.579 25.7598 205.213 25.8912L203.148 26.6273C202.783 26.7576 202.481 27.0203 202.3 27.3634C202.12 27.7066 202.075 28.1052 202.174 28.4801L202.727 30.5563C202.812 30.8565 202.804 31.1755 202.704 31.471C202.603 31.7665 202.416 32.0244 202.166 32.2105C201.42 32.7858 200.734 33.4342 200.117 34.1461C199.914 34.3891 199.641 34.5633 199.335 34.6447C199.029 34.7261 198.705 34.7109 198.408 34.601L196.575 33.9062C196.213 33.7696 195.813 33.7746 195.455 33.9202C195.097 34.0659 194.806 34.3415 194.642 34.692L193.701 36.6854C193.544 37.0388 193.525 37.4385 193.649 37.8048C193.773 38.1712 194.03 38.4773 194.37 38.6622V38.6622ZM204.544 40.2255C205.11 39.0495 206.01 38.0673 207.132 37.4026C208.254 36.7379 209.546 36.4204 210.848 36.49C212.149 36.5596 213.401 37.0132 214.446 37.7937C215.491 38.5743 216.282 39.6469 216.719 40.8765C217.157 42.1062 217.221 43.438 216.905 44.7044C216.588 45.9707 215.905 47.1151 214.941 47.9933C213.976 48.8716 212.774 49.4446 211.486 49.6401C210.197 49.8357 208.879 49.6452 207.699 49.0925C206.907 48.7218 206.196 48.1974 205.608 47.5496C205.02 46.9018 204.566 46.1436 204.272 45.3189C203.979 44.4941 203.852 43.6192 203.899 42.7449C203.945 41.8706 204.164 41.0143 204.544 40.2255V40.2255Z" fill="#D0B8B8"/>
5
- <path d="M204.511 40.7813L204.508 40.7889C203.052 44.0399 204.503 47.8576 207.749 49.316L207.756 49.3194C211.002 50.7777 214.814 49.3245 216.27 46.0734L216.273 46.0659C217.729 42.8148 216.278 38.9971 213.032 37.5387L213.025 37.5353C209.779 36.077 205.967 37.5302 204.511 40.7813Z" stroke="#917D65" stroke-width="1.81066" stroke-linecap="round" stroke-linejoin="round"/>
6
- <path d="M85.2014 105.752L86.4564 106.481C86.635 106.587 86.7787 106.742 86.8694 106.929C86.9601 107.116 86.9938 107.325 86.9662 107.531C86.8834 108.163 86.8646 108.802 86.9102 109.439C86.9249 109.652 86.875 109.864 86.767 110.049C86.6591 110.233 86.4981 110.38 86.3051 110.471L85.1005 111.032C84.8611 111.141 84.6709 111.335 84.5672 111.577C84.4635 111.819 84.4539 112.091 84.5402 112.34L85.0445 113.743C85.1316 113.991 85.3096 114.197 85.5426 114.319C85.7756 114.441 86.0462 114.47 86.2995 114.399L87.7058 114.029C87.9092 113.971 88.1253 113.977 88.3254 114.045C88.5256 114.113 88.7003 114.241 88.8264 114.41C89.216 114.917 89.6552 115.383 90.1374 115.802C90.3027 115.94 90.4212 116.126 90.4764 116.334C90.5316 116.542 90.5208 116.762 90.4456 116.964L89.9413 118.21C89.849 118.455 89.8526 118.725 89.9513 118.968C90.05 119.21 90.2366 119.407 90.4736 119.517L91.8182 120.162C92.0559 120.274 92.3268 120.293 92.5776 120.215C92.8284 120.137 93.0412 119.968 93.1741 119.742L93.8969 118.485C94.0018 118.304 94.1581 118.159 94.3457 118.068C94.5333 117.977 94.7438 117.944 94.9502 117.974C95.5816 118.058 96.2201 118.075 96.8551 118.024C97.0705 118.007 97.286 118.056 97.4724 118.166C97.6588 118.275 97.8071 118.439 97.8972 118.636L98.4575 119.843C98.5638 120.083 98.7567 120.274 98.9977 120.378C99.2387 120.482 99.5099 120.491 99.7573 120.404L101.169 119.904C101.415 119.816 101.619 119.638 101.741 119.407C101.862 119.175 101.892 118.906 101.825 118.653L101.455 117.244C101.398 117.041 101.404 116.824 101.472 116.624C101.54 116.424 101.667 116.249 101.836 116.122C102.341 115.735 102.805 115.297 103.22 114.815C103.359 114.65 103.546 114.532 103.754 114.477C103.962 114.422 104.183 114.432 104.385 114.506L105.629 114.96C105.874 115.052 106.144 115.049 106.387 114.951C106.629 114.854 106.827 114.669 106.94 114.433L107.579 113.081C107.693 112.844 107.713 112.572 107.635 112.321C107.557 112.07 107.387 111.858 107.159 111.728L105.898 111.032C105.719 110.926 105.575 110.769 105.484 110.582C105.394 110.394 105.36 110.184 105.388 109.977C105.471 109.345 105.49 108.706 105.444 108.069C105.426 107.854 105.475 107.639 105.583 107.452C105.691 107.266 105.854 107.117 106.049 107.026L107.254 106.464C107.494 106.357 107.685 106.163 107.789 105.92C107.893 105.678 107.902 105.405 107.814 105.157L107.31 103.737C107.222 103.49 107.045 103.286 106.813 103.163C106.582 103.041 106.314 103.009 106.06 103.075L104.66 103.451C104.456 103.506 104.241 103.5 104.041 103.432C103.842 103.364 103.667 103.237 103.539 103.069C103.164 102.568 102.738 102.107 102.267 101.695C102.102 101.555 101.984 101.369 101.929 101.16C101.874 100.951 101.884 100.73 101.959 100.527L102.424 99.2871C102.517 99.042 102.515 98.7708 102.417 98.5275C102.319 98.2842 102.134 98.0866 101.898 97.974L100.547 97.3343C100.311 97.2215 100.04 97.2022 99.79 97.2802C99.5398 97.3582 99.3281 97.5278 99.1971 97.7551L98.4687 99.0121C98.3636 99.1911 98.2081 99.3349 98.0218 99.4258C97.8354 99.5166 97.6264 99.5504 97.421 99.5228C96.7877 99.4397 96.1476 99.4209 95.5105 99.4667C95.2882 99.4971 95.0621 99.4544 94.8661 99.3451C94.6701 99.2358 94.5148 99.0658 94.4235 98.8606L93.8632 97.6485C93.7569 97.4069 93.563 97.2147 93.3208 97.1106C93.0785 97.0065 92.8059 96.9982 92.5578 97.0873L91.1571 97.5868C90.9096 97.6751 90.7043 97.8534 90.5819 98.0862C90.4594 98.319 90.4288 98.5894 90.496 98.8438L90.8714 100.252C90.929 100.456 90.9234 100.672 90.8554 100.873C90.7873 101.073 90.66 101.248 90.4904 101.375C89.9847 101.765 89.5192 102.205 89.1009 102.688C88.9629 102.853 88.7774 102.971 88.5698 103.026C88.3622 103.081 88.1426 103.071 87.9411 102.996L86.6973 102.525C86.4519 102.432 86.1806 102.436 85.9376 102.535C85.6946 102.633 85.4977 102.82 85.3863 103.058L84.7476 104.411C84.641 104.65 84.6285 104.921 84.7126 105.17C84.7967 105.419 84.9712 105.626 85.2014 105.752V105.752ZM92.104 106.812C92.4878 106.014 93.0986 105.348 93.8597 104.897C94.6207 104.446 95.4979 104.231 96.3809 104.278C97.2639 104.325 98.1132 104.633 98.822 105.162C99.5307 105.692 100.067 106.42 100.364 107.254C100.661 108.088 100.705 108.992 100.49 109.851C100.275 110.71 99.8117 111.486 99.1575 112.082C98.5033 112.678 97.6878 113.067 96.8135 113.2C95.9392 113.332 95.0453 113.203 94.2442 112.828C93.7069 112.577 93.2248 112.221 92.8258 111.781C92.4268 111.342 92.1189 110.827 91.9198 110.268C91.7207 109.708 91.6345 109.115 91.6661 108.522C91.6977 107.928 91.8466 107.347 92.104 106.812V106.812Z" fill="#E6CEA0"/>
7
- <path d="M92.0818 107.189L92.0795 107.194C91.0917 109.4 92.0761 111.99 94.2782 112.98L94.2833 112.982C96.4855 113.971 99.0715 112.985 100.059 110.78L100.062 110.775C101.049 108.569 100.065 105.979 97.8629 104.989L97.8578 104.987C95.6557 103.998 93.0697 104.984 92.0818 107.189Z" stroke="#DCB98F" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
8
- <path d="M174.893 106.132C200.956 97.9524 217.836 80.0594 200.956 77.667C185.311 75.4498 85.4808 75.1972 99.2765 65.0435C110.313 56.9205 136.916 46.1081 148.839 41.7173" stroke="url(#paint0_linear)" stroke-width="3.54534"/>
9
- <rect x="107.823" y="39.0526" width="71.6292" height="69.7442" rx="6.45214" fill="#EFBA56"/>
10
- <path d="M107.823 39.5048H181.337V58.9901C181.337 62.5535 178.448 65.4423 174.885 65.4423H114.275C110.712 65.4423 107.823 62.5535 107.823 58.9901V39.5048Z" fill="#BBA15E"/>
11
- <path d="M105.938 37.1675H181.337V57.1051C181.337 60.6685 178.448 63.5572 174.885 63.5572H112.39C108.827 63.5572 105.938 60.6685 105.938 57.1051V37.1675Z" fill="#DFD4B7"/>
12
- <path d="M106.938 38.1676H180.321V57.1052C180.321 60.1163 177.88 62.5573 174.869 62.5573H112.39C109.379 62.5573 106.938 60.1163 106.938 57.1052V38.1676Z" fill="#FFBF1C" stroke="white" stroke-width="2"/>
13
- <line x1="111.592" y1="42.2579" x2="139.86" y2="42.2579" stroke="white" stroke-width="1.12912"/>
14
- <line x1="143.629" y1="42.2579" x2="151.168" y2="42.2579" stroke="white" stroke-width="1.12912"/>
15
- <line x1="153.052" y1="42.2579" x2="156.821" y2="42.2579" stroke="white" stroke-width="1.12912"/>
16
- <line x1="158.706" y1="42.2579" x2="162.475" y2="42.2579" stroke="white" stroke-width="1.12912"/>
17
- <line x1="144.475" y1="105.027" x2="144.475" y2="65.4422" stroke="#AA875F" stroke-width="3"/>
18
- <rect x="124.231" y="54.8345" width="38.8137" height="17.4456" rx="2" fill="#FDFDFD"/>
19
- <rect x="128.571" y="57.9427" width="30.6608" height="3.21605" rx="0.552276" fill="#C4C4C4"/>
20
- <rect x="128.571" y="62.1555" width="24.2826" height="3.21605" rx="0.552276" fill="#C4C4C4"/>
21
- <rect x="128.571" y="66.3683" width="26.8184" height="3.21605" rx="0.552276" fill="#C4C4C4"/>
22
- <path d="M83.6023 51.6807V56.7345" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
23
- <path d="M83.6023 70.6167V75.6706" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
24
- <path d="M78.8683 55.4551L80.1478 57.6302" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
25
- <path d="M87.0569 69.6571L88.3363 71.8962" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
26
- <path d="M74.1343 63.6436H76.6292" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
27
- <path d="M90.5114 63.6436H93.0703" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
28
- <path d="M78.8683 71.8962L80.1478 69.6571" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
29
- <path d="M87.0569 57.6302L88.3363 55.4551" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
30
- <path d="M73.2386 57.6941L77.5888 60.189" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
31
- <path d="M89.6158 67.1622L93.966 69.6571" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
32
- <path d="M73.2386 69.6571L77.5888 67.1622" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
33
- <path d="M89.6158 60.189L93.966 57.6941" stroke="#D8BEE0" stroke-width="1.5" stroke-miterlimit="10"/>
34
- <path d="M106.144 32.9409V35.903" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
35
- <path d="M106.144 44.1794V47.2286" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
36
- <path d="M99.9582 36.5128L102.572 37.9939" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
37
- <path d="M109.716 42.0885L112.329 43.6567" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
38
- <path d="M99.9582 43.6567L102.572 42.0885" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
39
- <path d="M109.716 37.9939L112.329 36.5128" stroke="#B79BD2" stroke-width="2.04273" stroke-miterlimit="10"/>
40
- <path d="M146.278 118.597L186.055 95.2853L184.73 111.804L146.278 118.597Z" fill="#714D95"/>
41
- <path d="M146.278 118.597L185.836 97.9157L185.657 100.199L146.278 118.597Z" fill="#714D95"/>
42
- <path fill-rule="evenodd" clip-rule="evenodd" d="M177.17 84.9561L143.005 120.336L201.845 113.645L188.806 98.4849L146.278 118.596L186.056 95.2877L177.17 84.9561Z" fill="#8F72CE"/>
43
- <g style="mix-blend-mode:soft-light" opacity="0.5">
44
- <path d="M188.806 98.4853L201.872 113.644L177.294 103.932L188.806 98.4853Z" fill="#D1B3EE"/>
45
- </g>
46
- <g style="mix-blend-mode:soft-light" opacity="0.5">
47
- <path d="M177.17 84.9563L186.041 95.2865L175.538 101.443L177.17 84.9563Z" fill="#D1B3EE"/>
48
- </g>
49
- <defs>
50
- <linearGradient id="paint0_linear" x1="152.853" y1="118.081" x2="143.129" y2="55.6814" gradientUnits="userSpaceOnUse">
51
- <stop stop-color="#8F72CE"/>
52
- <stop offset="1" stop-color="#8F72CE" stop-opacity="0"/>
53
- </linearGradient>
54
- </defs>
55
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
creative-mail-plugin.php CHANGED
@@ -6,7 +6,7 @@ use CreativeMail\CreativeMail;
6
  * Plugin URI: https://wordpress.org/plugins/creative-mail-by-constant-contact/
7
  * Description: Free email marketing designed specifically for WordPress, Jetpack and WooCommerce. Send newsletters, promotions, updates and transactional e-commerce emails. Simple and easy, powered by Constant Contact’s rock solid reliability.
8
  * Author: Constant Contact
9
- * Version: 1.1.5
10
  * Author URI: https://www.constantcontact.com
11
  */
12
 
@@ -20,7 +20,8 @@ function _load_ce4wp_plugin() {
20
 
21
  define('CE4WP_PLUGIN_DIR', __DIR__ . '/');
22
  define('CE4WP_PLUGIN_URL', plugin_dir_url(__FILE__) . '/');
23
- define('CE4WP_PLUGIN_VERSION', '1.1.5');
 
24
  define('CE4WP_INSTANCE_UUID_KEY', 'ce4wp_instance_uuid');
25
  define('CE4WP_INSTANCE_HANDSHAKE_TOKEN', 'ce4wp_handshake_token');
26
  define('CE4WP_INSTANCE_HANDSHAKE_EXPIRATION', 'ce4wp_handshake_expiration');
@@ -32,10 +33,12 @@ function _load_ce4wp_plugin() {
32
  define('CE4WP_MANAGED_EMAIL_NOTIFICATIONS', 'ce4wp_managed_email_notifications');
33
  define('CE4WP_ACCEPTED_CONSENT', 'ce4wp_accepted_consent');
34
  define('CE4WP_SYNCHRONIZE_ACTION', 'ce4wp_synchronize_contacts');
 
 
35
  define('CE4WP_APP_GATEWAY_URL', 'https://app-gateway.creativemail.com/');
36
  define('CE4WP_APP_URL', 'https://app.creativemail.com/');
37
  define('CE4WP_ENVIRONMENT', 'PRODUCTION');
38
- define('CE4WP_BUILD_NUMBER', '574');
39
  define('CE4WP_BATCH_SIZE', 500);
40
  define('CE4WP_WC_API_KEY_ID', 'ce4wp_woocommerce_api_key_id');
41
  define('CE4WP_WC_API_CONSUMER_KEY', 'ce4wp_woocommerce_consumer_key');
@@ -52,4 +55,24 @@ function _load_ce4wp_plugin() {
52
  return true;
53
  }
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  add_action('plugins_loaded', '_load_ce4wp_plugin', 10);
 
 
6
  * Plugin URI: https://wordpress.org/plugins/creative-mail-by-constant-contact/
7
  * Description: Free email marketing designed specifically for WordPress, Jetpack and WooCommerce. Send newsletters, promotions, updates and transactional e-commerce emails. Simple and easy, powered by Constant Contact’s rock solid reliability.
8
  * Author: Constant Contact
9
+ * Version: 1.1.6
10
  * Author URI: https://www.constantcontact.com
11
  */
12
 
20
 
21
  define('CE4WP_PLUGIN_DIR', __DIR__ . '/');
22
  define('CE4WP_PLUGIN_URL', plugin_dir_url(__FILE__) . '/');
23
+ define('CE4WP_PLUGIN_FILE', __FILE__);
24
+ define('CE4WP_PLUGIN_VERSION', '1.1.6');
25
  define('CE4WP_INSTANCE_UUID_KEY', 'ce4wp_instance_uuid');
26
  define('CE4WP_INSTANCE_HANDSHAKE_TOKEN', 'ce4wp_handshake_token');
27
  define('CE4WP_INSTANCE_HANDSHAKE_EXPIRATION', 'ce4wp_handshake_expiration');
33
  define('CE4WP_MANAGED_EMAIL_NOTIFICATIONS', 'ce4wp_managed_email_notifications');
34
  define('CE4WP_ACCEPTED_CONSENT', 'ce4wp_accepted_consent');
35
  define('CE4WP_SYNCHRONIZE_ACTION', 'ce4wp_synchronize_contacts');
36
+ define('CE4WP_CHECKOUT_CHECKBOX_TEXT', 'ce4wp_checkout_checkbox_text');
37
+ define('CE4WP_CHECKOUT_CHECKBOX_ENABLED', 'ce4wp_checkout_checkbox_enabled');
38
  define('CE4WP_APP_GATEWAY_URL', 'https://app-gateway.creativemail.com/');
39
  define('CE4WP_APP_URL', 'https://app.creativemail.com/');
40
  define('CE4WP_ENVIRONMENT', 'PRODUCTION');
41
+ define('CE4WP_BUILD_NUMBER', '628');
42
  define('CE4WP_BATCH_SIZE', 500);
43
  define('CE4WP_WC_API_KEY_ID', 'ce4wp_woocommerce_api_key_id');
44
  define('CE4WP_WC_API_CONSUMER_KEY', 'ce4wp_woocommerce_consumer_key');
55
  return true;
56
  }
57
 
58
+ function deactivate()
59
+ {
60
+ delete_option( 'ce4wp_activated');
61
+ delete_option( 'ce4wp_install_date');
62
+ }
63
+
64
+ function activate()
65
+ {
66
+ add_option( 'ce4wp_activated', true );
67
+ add_option( 'ce4wp_install_date', date('Y-m-d G:i:s'), '', 'yes');
68
+ if (
69
+ ( isset( $_REQUEST['action'] ) && 'activate-selected' === $_REQUEST['action'] ) &&
70
+ ( isset( $_POST['checked'] ) && count( $_POST['checked'] ) > 1 ) ) {
71
+ return;
72
+ }
73
+ add_option( 'ce4wp_activation_redirect', wp_get_current_user()->ID );
74
+ }
75
+
76
  add_action('plugins_loaded', '_load_ce4wp_plugin', 10);
77
+ register_activation_hook( __FILE__, 'activate' );
78
+ register_deactivation_hook( __FILE__,'deactivate' );
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Constant Contact
3
  Tags: email, marketing, newsletter, subscribe, contact form, constant contact, crm, automations, ecommerce, promotion, offers, retargeting
4
  Requires at least: 4.6
5
  Tested up to: 5.5
6
- Stable tag: 1.1.5
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires PHP: 5.6
@@ -13,7 +13,7 @@ Creative Mail was designed specifically for WordPress and WooCommerce.
13
  Our intelligent (and super fun) email editor simplifies email marketing campaign creation and pulls your WordPress blog posts, website images and WooCommerce products right into your email content.
14
 
15
  == Description ==
16
- https://www.youtube.com/watch?v=6Zq73emGH1k
17
 
18
  Creative Mail was designed specifically for WordPress and WooCommerce.
19
 
@@ -78,11 +78,11 @@ Turn your WooCommerce store and your WordPress site into efficient marketing eng
78
  1. Powered by the reliability superior deliverability of Constant Contact
79
  1. Fun, which makes life way better
80
 
81
- ## TERMS OF SERVICE & PRIVACY POLICY
82
  On behalf of our lawyers (seriously, they’re nice people), please feel free to review our:
83
 
84
  Creative Mail by Constant Contact [Terms of Service](https://www.constantcontact.com/website/terms)
85
- Creative Mail by Constant Contact [Privacy Policy](https://endurance.clarip.com/privacycenter/?brand=ctct)
86
 
87
  == Screenshots ==
88
  1. Your all in one dashboard
@@ -93,6 +93,7 @@ Creative Mail by Constant Contact [Privacy Policy](https://endurance.clarip.com/
93
  6. Enhance your brand with logomaker
94
 
95
  == Changelog ==
 
96
  * 1.1.5 - Fixes an issue where order notification emails would not always go out.
97
  * 1.1.4 - Minor improvements
98
  * 1.1.3 - Implemented a new design
3
  Tags: email, marketing, newsletter, subscribe, contact form, constant contact, crm, automations, ecommerce, promotion, offers, retargeting
4
  Requires at least: 4.6
5
  Tested up to: 5.5
6
+ Stable tag: 1.1.6
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires PHP: 5.6
13
  Our intelligent (and super fun) email editor simplifies email marketing campaign creation and pulls your WordPress blog posts, website images and WooCommerce products right into your email content.
14
 
15
  == Description ==
16
+ https://youtu.be/6Zq73emGH1k
17
 
18
  Creative Mail was designed specifically for WordPress and WooCommerce.
19
 
78
  1. Powered by the reliability superior deliverability of Constant Contact
79
  1. Fun, which makes life way better
80
 
81
+ ## TERMS OF SERVICE & PRIVACY NOTICE
82
  On behalf of our lawyers (seriously, they’re nice people), please feel free to review our:
83
 
84
  Creative Mail by Constant Contact [Terms of Service](https://www.constantcontact.com/website/terms)
85
+ Creative Mail by Constant Contact [Privacy Notice](https://www.endurance.com/privacy/privacy)
86
 
87
  == Screenshots ==
88
  1. Your all in one dashboard
93
  6. Enhance your brand with logomaker
94
 
95
  == Changelog ==
96
+ * 1.1.6 - Add option to refresh the SSO url without reloading the entire page, and add the support for opt-in checkbox in the WooCommerce checkout flow.
97
  * 1.1.5 - Fixes an issue where order notification emails would not always go out.
98
  * 1.1.4 - Minor improvements
99
  * 1.1.3 - Implemented a new design
src/creativemail.php CHANGED
@@ -34,6 +34,10 @@ class CreativeMail
34
 
35
  public function add_hooks() {
36
 
 
 
 
 
37
  if ($this->admin_manager !== null) {
38
  $this->admin_manager->add_hooks();
39
  }
@@ -64,6 +68,10 @@ class CreativeMail
64
  return $this->admin_manager;
65
  }
66
 
 
 
 
 
67
  public static function get_instance() {
68
 
69
  if (self::$instance === null){
34
 
35
  public function add_hooks() {
36
 
37
+ if (!$this->is_active()) {
38
+ return;
39
+ }
40
+
41
  if ($this->admin_manager !== null) {
42
  $this->admin_manager->add_hooks();
43
  }
68
  return $this->admin_manager;
69
  }
70
 
71
+ public function is_active() {
72
+ return in_array(plugin_basename( CE4WP_PLUGIN_FILE ) , apply_filters('active_plugins', get_option('active_plugins')));
73
+ }
74
+
75
  public static function get_instance() {
76
 
77
  if (self::$instance === null){
src/helpers/options-helper.php CHANGED
@@ -137,6 +137,42 @@ class OptionsHelper
137
  add_option(CE4WP_INSTANCE_ID_KEY, $value);
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  /**
141
  * Gets the id of the account that is connected to the combination of this WP unique id and Creative Mail account id.
142
  * @return int|null
@@ -304,6 +340,7 @@ class OptionsHelper
304
  delete_option(CE4WP_INSTANCE_HANDSHAKE_TOKEN);
305
  delete_option(CE4WP_INSTANCE_HANDSHAKE_EXPIRATION);
306
  delete_option(CE4WP_MANAGED_EMAIL_NOTIFICATIONS);
 
307
  self::delete_managed_email_notifications();
308
 
309
  if($clear_all === true) {
137
  add_option(CE4WP_INSTANCE_ID_KEY, $value);
138
  }
139
 
140
+ /**
141
+ * Gets the assigned checkbox text.
142
+ * @return string
143
+ */
144
+ public static function get_checkout_checkbox_text()
145
+ {
146
+ return get_option(CE4WP_CHECKOUT_CHECKBOX_TEXT, "Yes, I'm ok with you sending me additional newsletter and email content");
147
+ }
148
+
149
+ /**
150
+ * Sets the assigned checkout checkbox text.
151
+ * @param $value string
152
+ */
153
+ public static function set_checkout_checkbox_text($value)
154
+ {
155
+ update_option(CE4WP_CHECKOUT_CHECKBOX_TEXT, $value);
156
+ }
157
+
158
+ /**
159
+ * Sets the assigned checkout checkbox enabled.
160
+ * @param $value bool
161
+ */
162
+ public static function set_checkout_checkbox_enabled($value)
163
+ {
164
+ update_option(CE4WP_CHECKOUT_CHECKBOX_ENABLED, $value);
165
+ }
166
+
167
+ /**
168
+ * Gets the assigned checkout checkbox enabled value
169
+ * @return int|bool
170
+ */
171
+ public static function get_checkout_checkbox_enabled()
172
+ {
173
+ return get_option(CE4WP_CHECKOUT_CHECKBOX_ENABLED, '1');
174
+ }
175
+
176
  /**
177
  * Gets the id of the account that is connected to the combination of this WP unique id and Creative Mail account id.
178
  * @return int|null
340
  delete_option(CE4WP_INSTANCE_HANDSHAKE_TOKEN);
341
  delete_option(CE4WP_INSTANCE_HANDSHAKE_EXPIRATION);
342
  delete_option(CE4WP_MANAGED_EMAIL_NOTIFICATIONS);
343
+ delete_option(CE4WP_CHECKOUT_CHECKBOX_TEXT);
344
  self::delete_managed_email_notifications();
345
 
346
  if($clear_all === true) {
src/integrations/integration.php CHANGED
@@ -15,52 +15,63 @@ class Integration
15
  private $class;
16
  private $integrationHandler;
17
  private $slug;
 
18
 
19
- /**
20
- * Integration constructor.
21
- *
22
- * @param $slug string The slug that you want to use for this integration.
23
- * @param $name string The display name of the plugin
24
- * @param $class string The path the the plugin class that should be used to check if the plugin required for this integration is installed.
25
- * @param $integration_handler string The name of the class that should be instantiated when this integration gets activated.
26
- */
27
- public function __construct($slug, $name, $class, $integration_handler)
 
28
  {
29
  $this->slug = $slug;
30
  $this->name = $name;
31
  $this->class = $class;
32
  $this->integrationHandler = $integration_handler;
 
33
  }
34
 
35
- /**
36
- * Gets the slug assigned to this integration.
37
- * @return string
38
- */
39
  public function get_slug() {
40
  return $this->slug;
41
  }
42
 
43
- /**
44
- * Gets the display name assigned to this integration.
45
- * @return string
46
- */
47
  public function get_name() {
48
  return $this->name;
49
  }
50
 
51
- /**
52
- * Gets the path to the main class of the plugin that is required for this integration.
53
- * @return string
54
- */
55
  public function get_class() {
56
  return $this->class;
57
  }
58
 
59
- /**
60
- * Gets the name of the class that should be instantiated when activating this integration.
61
- * @return string
62
- */
63
  public function get_integration_handler() {
64
  return $this->integrationHandler;
65
  }
 
 
 
 
 
 
 
 
66
  }
15
  private $class;
16
  private $integrationHandler;
17
  private $slug;
18
+ private $hide_from_suggestions;
19
 
20
+ /**
21
+ * Integration constructor.
22
+ *
23
+ * @param $slug string The slug that you want to use for this integration.
24
+ * @param $name string The display name of the plugin
25
+ * @param $class string The path the the plugin class that should be used to check if the plugin required for this integration is installed.
26
+ * @param $integration_handler string The name of the class that should be instantiated when this integration gets activated.
27
+ * @param $hide_from_suggestions boolean If you want to hide this plugin from the suggestion list, set this to true
28
+ */
29
+ public function __construct($slug, $name, $class, $integration_handler, $hide_from_suggestions)
30
  {
31
  $this->slug = $slug;
32
  $this->name = $name;
33
  $this->class = $class;
34
  $this->integrationHandler = $integration_handler;
35
+ $this->hide_from_suggestions = $hide_from_suggestions;
36
  }
37
 
38
+ /**
39
+ * Gets the slug assigned to this integration.
40
+ * @return string
41
+ */
42
  public function get_slug() {
43
  return $this->slug;
44
  }
45
 
46
+ /**
47
+ * Gets the display name assigned to this integration.
48
+ * @return string
49
+ */
50
  public function get_name() {
51
  return $this->name;
52
  }
53
 
54
+ /**
55
+ * Gets the path to the main class of the plugin that is required for this integration.
56
+ * @return string
57
+ */
58
  public function get_class() {
59
  return $this->class;
60
  }
61
 
62
+ /**
63
+ * Gets the name of the class that should be instantiated when activating this integration.
64
+ * @return string
65
+ */
66
  public function get_integration_handler() {
67
  return $this->integrationHandler;
68
  }
69
+
70
+ /**
71
+ * Gets if this integration should be hidden from the suggestion list
72
+ * @return bool
73
+ */
74
+ public function is_hidden_from_suggestions() {
75
+ return $this->hide_from_suggestions;
76
+ }
77
  }
src/managers/admin-manager.php CHANGED
@@ -50,7 +50,102 @@ class AdminManager
50
  {
51
  add_action('admin_menu', array( $this, 'build_menu' ));
52
  add_action('admin_enqueue_scripts', array( $this, 'add_assets' ));
53
- add_action('admin_notices', array($this, 'add_admin_notices' ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  }
55
 
56
  /**
@@ -61,6 +156,7 @@ class AdminManager
61
  wp_register_style('ce4wp_admin', CE4WP_PLUGIN_URL . 'assets/css/admin.css', null, CE4WP_PLUGIN_VERSION);
62
  wp_enqueue_style( 'ce4wp_admin');
63
  wp_enqueue_style('ce4wp-font-poppins', 'https://fonts.googleapis.com/css?family=Poppins:400,500');
 
64
  }
65
 
66
  /**
@@ -91,7 +187,7 @@ class AdminManager
91
  }
92
  }
93
 
94
- public function add_admin_notices() {
95
  if (CreativeMail::get_instance()->get_integration_manager()->is_plugin_active('woocommerce')) {
96
  if ( ! CreativeMail::get_instance()->get_integration_manager()->get_permalinks_enabled() ) {
97
  print( '<div class="notice notice-error is-dismissible"><p>Ohoh, pretty permalinks are disabled. To enable the CreativeMail WooCommerce integration <a href="/wp-admin/options-permalink.php">please update your permalink settings</a>.</p></div>');
@@ -121,6 +217,28 @@ class AdminManager
121
  */
122
  public function show_dashboard()
123
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  // If all the three values are available, we can use the SSO flow
125
  $instance_id = OptionsHelper::get_instance_id();
126
  $instance_api_key = OptionsHelper::get_instance_api_key();
@@ -128,15 +246,12 @@ class AdminManager
128
 
129
  if (isset($instance_id) && isset($instance_api_key) && isset($connected_account_id)) {
130
  try {
131
- $sso_link = SsoHelper::generate_sso_link($instance_id, $instance_api_key, $connected_account_id);
132
- if(isset($sso_link)){
133
- $this->dashboard_url = $sso_link;
134
- }
135
  }
136
  catch(Exception $ex) { }
137
  }
138
 
139
- require CE4WP_PLUGIN_DIR . 'src/views/dashboard.php';
140
  }
141
 
142
  /**
50
  {
51
  add_action('admin_menu', array( $this, 'build_menu' ));
52
  add_action('admin_enqueue_scripts', array( $this, 'add_assets' ));
53
+ add_action('admin_notices', array($this, 'add_admin_notice_permalink' ));
54
+ add_action('admin_notices', array($this, 'add_admin_notice_review' ));
55
+ add_action('admin_init', array($this, 'activation_redirect' ));
56
+ add_action('admin_init', array($this, 'ignore_review_notice' ));
57
+ add_filter('admin_footer_text', array( $this, 'admin_footer_text' ), 1 );
58
+ add_action('wp_ajax_woocommerce_ce4wp_rated', array( $this, 'mark_as_rated' ) );
59
+ }
60
+
61
+ function add_admin_notice_review() {
62
+
63
+ $install_date = get_option( 'ce4wp_install_date');
64
+ if (!$install_date) {
65
+ return false;
66
+ }
67
+
68
+ $install_date = date_create( $install_date );
69
+ $date_now = date_create( date('Y-m-d G:i:s') );
70
+ $date_diff = date_diff( $install_date, $date_now );
71
+
72
+ if ( $date_diff->format("%d") < 7 ) {
73
+
74
+ return false;
75
+ }
76
+
77
+ if ( ! get_option( 'ce4wp_ignore_review_notice' ) ) {
78
+
79
+ echo '<div class="updated"><p>';
80
+
81
+ printf(__( 'Awesome, you\'ve been using <a href="admin.php?page=creativemail">Creative Mail</a> for more than 1 week. May we ask you to give it a 5-star rating on WordPress? | <a href="%2$s" target="_blank">Ok, you deserved it</a> | <a href="%1$s">I already did</a> | <a href="%1$s">No, not good enough</a>', 'ce4wp' ), '?ce4wp-ignore-notice=0',
82
+ 'https://wordpress.org/plugins/creative-mail-by-constant-contact/');
83
+ echo "</p></div>";
84
+ }
85
+ }
86
+
87
+ public function ignore_review_notice()
88
+ {
89
+ if ( isset($_GET['ce4wp-ignore-notice']) && '0' == $_GET['ce4wp-ignore-notice'] ) {
90
+ update_option( 'ce4wp_ignore_review_notice', 'true' );
91
+ }
92
+ }
93
+
94
+ public function mark_as_rated() {
95
+
96
+ if ( ! current_user_can( 'manage_woocommerce' ) ) {
97
+ wp_die( -1 );
98
+ }
99
+
100
+ update_option( 'ce4wp_admin_footer_text_rated', 1 );
101
+
102
+ wp_die();
103
+ }
104
+
105
+ /**
106
+ * Changes the admin footer text on admin pages.
107
+ * @param string $footer_text
108
+ * @return string
109
+ */
110
+ public function admin_footer_text( $footer_text ) {
111
+
112
+ if ( ! current_user_can( 'manage_woocommerce' ) ) {
113
+ return $footer_text;
114
+ }
115
+
116
+ $screen = get_current_screen();
117
+
118
+ if ( ! empty( $screen )
119
+ && ('toplevel_page_creativemail' === $screen->id || 'creative-mail_page_creativemail_settings' === $screen->id )
120
+ && ! get_option( 'ce4wp_admin_footer_text_rated' ))
121
+ {
122
+ $footer_text = sprintf(
123
+ esc_html__( 'If you like %1$s please leave us a %2$s rating. A huge thanks in advance!', 'ce4wp' ),
124
+ sprintf( '<strong>%s</strong>', esc_html__( 'Creative Mail', 'ce4wp' ) ),
125
+ '<a href="https://wordpress.org/plugins/creative-mail-by-constant-contact/#reviews?rate=5#new-post" target="_blank" class="ce4wp-rating-link" data-rated="' . esc_attr__( 'Thank You', 'ce4wp' ) . '">&#9733;&#9733;&#9733;&#9733;&#9733;</a>'
126
+ );
127
+
128
+ wc_enqueue_js( "
129
+ jQuery( 'a.ce4wp-rating-link' ).click( function() {
130
+ jQuery.post( '" . WC()->ajax_url() . "', { action: 'woocommerce_ce4wp_rated' } );
131
+ jQuery( this ).parent().text( jQuery( this ).data( 'rated' ) );
132
+ });
133
+ ");
134
+ }
135
+
136
+ return $footer_text;
137
+ }
138
+
139
+ /**
140
+ * Redirects the user after plugin activation.
141
+ */
142
+ function activation_redirect() {
143
+ if ( intval( get_option( 'ce4wp_activation_redirect', false ) ) === wp_get_current_user()->ID ) {
144
+ // Make sure we don't redirect again after this one
145
+ delete_option( 'ce4wp_activation_redirect' );
146
+ wp_safe_redirect( admin_url( 'admin.php?page=creativemail' ) );
147
+ exit;
148
+ }
149
  }
150
 
151
  /**
156
  wp_register_style('ce4wp_admin', CE4WP_PLUGIN_URL . 'assets/css/admin.css', null, CE4WP_PLUGIN_VERSION);
157
  wp_enqueue_style( 'ce4wp_admin');
158
  wp_enqueue_style('ce4wp-font-poppins', 'https://fonts.googleapis.com/css?family=Poppins:400,500');
159
+ wp_enqueue_script('wp-api');
160
  }
161
 
162
  /**
187
  }
188
  }
189
 
190
+ public function add_admin_notice_permalink() {
191
  if (CreativeMail::get_instance()->get_integration_manager()->is_plugin_active('woocommerce')) {
192
  if ( ! CreativeMail::get_instance()->get_integration_manager()->get_permalinks_enabled() ) {
193
  print( '<div class="notice notice-error is-dismissible"><p>Ohoh, pretty permalinks are disabled. To enable the CreativeMail WooCommerce integration <a href="/wp-admin/options-permalink.php">please update your permalink settings</a>.</p></div>');
217
  */
218
  public function show_dashboard()
219
  {
220
+ try {
221
+ $sso_link = $this->get_sso_link();
222
+ if(isset($sso_link)){
223
+ $this->dashboard_url = $sso_link;
224
+ }
225
+ }
226
+ catch(Exception $ex) { }
227
+
228
+ require CE4WP_PLUGIN_DIR . 'src/views/dashboard.php';
229
+ }
230
+
231
+ /**
232
+ * Generates an SSO link for the current user.
233
+ * @since 1.1.5
234
+ */
235
+ public function get_sso_link()
236
+ {
237
+ // Only if you are running in wp-admin
238
+ if(!current_user_can( 'administrator' )) {
239
+ return null;
240
+ }
241
+
242
  // If all the three values are available, we can use the SSO flow
243
  $instance_id = OptionsHelper::get_instance_id();
244
  $instance_api_key = OptionsHelper::get_instance_api_key();
246
 
247
  if (isset($instance_id) && isset($instance_api_key) && isset($connected_account_id)) {
248
  try {
249
+ return SsoHelper::generate_sso_link($instance_id, $instance_api_key, $connected_account_id);
 
 
 
250
  }
251
  catch(Exception $ex) { }
252
  }
253
 
254
+ return null;
255
  }
256
 
257
  /**
src/managers/api-manager.php CHANGED
@@ -26,6 +26,9 @@ class ApiManager
26
  const ROUTE_PATH = 'path';
27
  const ROUTE_CALLBACK = 'callback';
28
  const ROUTE_PERMISSION_CALLBACK = 'permission_callback';
 
 
 
29
  const HTTP_STATUS = 'status';
30
  private $api_background_process;
31
 
@@ -46,6 +49,14 @@ class ApiManager
46
  add_action( 'rest_api_init', array($this, 'add_rest_endpoints'));
47
  }
48
 
 
 
 
 
 
 
 
 
49
  public function validate_api_key() {
50
  //never cache our rest endpoints
51
  nocache_headers();
@@ -112,6 +123,21 @@ class ApiManager
112
  CreativeMail::get_instance()->get_integration_manager()->set_activated_plugins(json_decode($request->get_body()));
113
  }
114
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  array (
116
  self::ROUTE_PATH => '/plugins',
117
  self::ROUTE_METHODS => 'GET',
@@ -164,13 +190,20 @@ class ApiManager
164
  array (
165
  self::ROUTE_PATH => '/wc_products',
166
  self::ROUTE_METHODS => 'GET',
167
- self::ROUTE_CALLBACK => function() {
168
  $productData = array();
169
  if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins'))))
170
  {
 
 
 
 
 
 
171
  // Get 25 most recent products
172
  $products = wc_get_products(array(
173
  'limit' => 25,
 
174
  ));
175
  foreach ($products as $product) {
176
  array_push($productData, new WCProductModel($product->get_data()));
@@ -189,13 +222,21 @@ class ApiManager
189
  array (
190
  self::ROUTE_PATH => '/wp_posts',
191
  self::ROUTE_METHODS => 'GET',
192
- self::ROUTE_CALLBACK => function() {
193
- $postData = array();
194
 
 
 
 
 
 
 
195
  $posts = get_posts(array(
196
- 'posts_per_page' => -1
 
 
197
  ));
198
-
 
199
  foreach ($posts as $post)
200
  {
201
  array_push($postData, new BlogPost($post));
@@ -245,6 +286,9 @@ class ApiManager
245
  $allPlugins = CreativeMail::get_instance()->get_integration_manager()->get_supported_integrations();
246
  $activatedPlugins = CreativeMail::get_instance()->get_integration_manager()->get_activated_plugins();
247
  foreach ( $allPlugins as $plugin ) {
 
 
 
248
  array_push( $result, array(
249
  'name' => $plugin->get_name(),
250
  'slug' => $plugin->get_slug(),
@@ -301,9 +345,14 @@ class ApiManager
301
  $path = $route[self::ROUTE_PATH];
302
  $methods = $route[self::ROUTE_METHODS];
303
  $callback = $route[self::ROUTE_CALLBACK];
304
- if ((array_key_exists(self::ROUTE_PERMISSION_CALLBACK, $route)) ) {
 
305
  $permission_callback = $route[self::ROUTE_PERMISSION_CALLBACK];
306
- }else {
 
 
 
 
307
  $permission_callback = array( $this, 'validate_api_key' );
308
  }
309
 
26
  const ROUTE_PATH = 'path';
27
  const ROUTE_CALLBACK = 'callback';
28
  const ROUTE_PERMISSION_CALLBACK = 'permission_callback';
29
+ const ROUTE_REQUIRES_WP_ADMIN = [
30
+ '/sso'
31
+ ];
32
  const HTTP_STATUS = 'status';
33
  private $api_background_process;
34
 
49
  add_action( 'rest_api_init', array($this, 'add_rest_endpoints'));
50
  }
51
 
52
+ public function validate_wp_admin() {
53
+ if(!current_user_can('administrator')){
54
+ return new WP_Error( 'rest_forbidden', __( 'Sorry, you are not allowed to do that.' ), array( self::HTTP_STATUS => 401 ) );
55
+ }
56
+
57
+ return true;
58
+ }
59
+
60
  public function validate_api_key() {
61
  //never cache our rest endpoints
62
  nocache_headers();
123
  CreativeMail::get_instance()->get_integration_manager()->set_activated_plugins(json_decode($request->get_body()));
124
  }
125
  ),
126
+ array (
127
+ self::ROUTE_PATH => '/sso',
128
+ self::ROUTE_METHODS => 'GET',
129
+ self::ROUTE_CALLBACK => function() {
130
+ $admin_manager = CreativeMail::get_instance()->get_admin_manager();
131
+ if(isset($admin_manager)) {
132
+ $sso_url = $admin_manager->get_sso_link();
133
+ if(isset($sso_url)){
134
+ return $this->modify_response(new WP_REST_Response(array('url' => $sso_url)));
135
+ }
136
+ }
137
+
138
+ return new WP_Error( 'rest_unauthorized', 'Unauthorized', array( self::HTTP_STATUS => 401 ) );
139
+ }
140
+ ),
141
  array (
142
  self::ROUTE_PATH => '/plugins',
143
  self::ROUTE_METHODS => 'GET',
190
  array (
191
  self::ROUTE_PATH => '/wc_products',
192
  self::ROUTE_METHODS => 'GET',
193
+ self::ROUTE_CALLBACK => function($request) {
194
  $productData = array();
195
  if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins'))))
196
  {
197
+ $page = 1;
198
+ if (key_exists('page', $request))
199
+ {
200
+ $page = (int)$request['page'];
201
+ }
202
+
203
  // Get 25 most recent products
204
  $products = wc_get_products(array(
205
  'limit' => 25,
206
+ 'paged' => $page,
207
  ));
208
  foreach ($products as $product) {
209
  array_push($productData, new WCProductModel($product->get_data()));
222
  array (
223
  self::ROUTE_PATH => '/wp_posts',
224
  self::ROUTE_METHODS => 'GET',
225
+ self::ROUTE_CALLBACK => function($request) {
 
226
 
227
+ $page = 1;
228
+ if (key_exists('page', $request))
229
+ {
230
+ $page = (int)$request['page'];
231
+ }
232
+
233
  $posts = get_posts(array(
234
+ 'posts_per_page' => 10,
235
+ 'paged' => $page,
236
+ 'post_type' => 'post'
237
  ));
238
+
239
+ $postData = array();
240
  foreach ($posts as $post)
241
  {
242
  array_push($postData, new BlogPost($post));
286
  $allPlugins = CreativeMail::get_instance()->get_integration_manager()->get_supported_integrations();
287
  $activatedPlugins = CreativeMail::get_instance()->get_integration_manager()->get_activated_plugins();
288
  foreach ( $allPlugins as $plugin ) {
289
+ if ($plugin->is_hidden_from_suggestions()) {
290
+ continue;
291
+ }
292
  array_push( $result, array(
293
  'name' => $plugin->get_name(),
294
  'slug' => $plugin->get_slug(),
345
  $path = $route[self::ROUTE_PATH];
346
  $methods = $route[self::ROUTE_METHODS];
347
  $callback = $route[self::ROUTE_CALLBACK];
348
+
349
+ if (array_key_exists(self::ROUTE_PERMISSION_CALLBACK, $route)) {
350
  $permission_callback = $route[self::ROUTE_PERMISSION_CALLBACK];
351
+ }
352
+ else if(in_array($path, self::ROUTE_REQUIRES_WP_ADMIN)){
353
+ $permission_callback = array( $this, 'validate_wp_admin' );
354
+ }
355
+ else {
356
  $permission_callback = array( $this, 'validate_api_key' );
357
  }
358
 
src/managers/email-manager.php CHANGED
@@ -52,9 +52,36 @@ class EmailManager
52
  // replace wc email settings
53
  add_filter('woocommerce_email_settings', array($this, 'replace_wc_email_settings'));
54
  add_action('woocommerce_admin_field_ce_manage_button', array($this, 'print_ce_manage_button'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  public function replace_wc_email_settings($settings)
59
  {
60
  $default_setting_replacement = array(
@@ -79,7 +106,7 @@ class EmailManager
79
  $settings[] = array(
80
  'id' => 'ce_manage',
81
  'type' => 'title',
82
- 'title' => __('Creative Mail', 'ce_manage_mail'),
83
  );
84
 
85
  $settings[] = array(
@@ -100,7 +127,7 @@ class EmailManager
100
  <th scope="row" class="titledesc">Customize Emails</th>
101
  <td class="forminp forminp-<?php echo sanitize_title($options['type']); ?>">
102
  <a href="admin.php?page=creativemail">
103
- <button type="button" class="button button-secondary" value="<?php _e('Manage', 'ce-manage-button-text'); ?>">Manage</button>
104
  </a>
105
  <p class="description">Manage all your email settings and templates with Creative Mail</p>
106
  </td>
@@ -193,10 +220,32 @@ class EmailManager
193
  $this->execute_trigger("customer_note", $data, wc_get_order($data->order_id));
194
  }
195
 
196
- public function ce_email_notification_customer_new_account($customer_id) {
197
  $data = new stdClass();
198
  $data->customer_id = $customer_id;
199
  $data->account_url = $this->get_my_account_url();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
 
201
  $this->execute_trigger("customer_new_account", $data);
202
  }
@@ -282,8 +331,8 @@ class EmailManager
282
  }
283
 
284
  $data = new stdClass();
285
- $data->order_id = $order->id;
286
- $data->order_url = $this->get_view_order_url( $order->id, $order );
287
 
288
  $this->execute_trigger( "customer_invoice", $data, $order );
289
  }
@@ -304,9 +353,9 @@ class EmailManager
304
  $order_data = array(
305
  'id' => $order->get_id(),
306
  'number' => $order->get_order_number(),
307
- 'date_created' => wc_format_datetime($order->get_date_created() ? $order->get_date_created()->getTimestamp() : 0),
308
- 'date_modified' => wc_format_datetime($order->get_date_modified() ? $order->get_date_modified()->getTimestamp() : 0),
309
- 'date_completed' => wc_format_datetime($order->get_date_completed() ? $order->get_date_completed()->getTimestamp() : 0),
310
  'status' => $order->get_status(),
311
  'currency' => $order->get_currency(),
312
  'total' => wc_format_decimal($order->get_total(), $dp),
@@ -363,7 +412,7 @@ class EmailManager
363
  foreach ($order->get_items() as $item_id => $item) {
364
  $product = $item->get_product();
365
  $item_meta = $item->get_formatted_meta_data();
366
-
367
  foreach ($item_meta as $key => $values) {
368
  $item_meta[$key]->label = $values->display_key;
369
  unset($item_meta[$key]->display_key);
@@ -381,23 +430,26 @@ class EmailManager
381
  $product_data['images'][] = wp_get_attachment_url($attachment_id);
382
  }
383
 
384
- $product_data['on_sale'] = $product->is_on_sale();
385
  $product_data["sale_price"] = $product->get_sale_price();
386
  $product_data["regular_price"] = $product->get_regular_price();
387
-
388
- $item_downloads = $item->get_item_downloads();
389
-
390
- if ($item_downloads) {
391
- foreach ( $item_downloads as $file )
392
  {
393
- $downloads[] = array(
394
- 'line_item_id' => $item->get_id(),
395
- 'product_id' => $item->get_product_id(),
396
- 'download_url' => $file['download_url'],
397
- 'download_name' => $file['name'],
398
- 'download_id' => $file['id'],
399
- 'downloads_remaining' => $file['downloads_remaining'],
400
- 'access_expires' => $file['access_expires'],
 
 
 
401
  );
402
  }
403
  }
52
  // replace wc email settings
53
  add_filter('woocommerce_email_settings', array($this, 'replace_wc_email_settings'));
54
  add_action('woocommerce_admin_field_ce_manage_button', array($this, 'print_ce_manage_button'));
55
+ // add checkbox to checkout if enabled
56
+ if (OptionsHelper::get_checkout_checkbox_enabled() === '1')
57
+ {
58
+ add_filter('woocommerce_after_order_notes', array($this, 'add_checkout_field'));
59
+ add_action('woocommerce_checkout_update_order_meta', array($this, 'ce_checkout_order_meta'));
60
+ }
61
+ }
62
+ }
63
+
64
+ public function ce_checkout_order_meta( $order_id )
65
+ {
66
+ if ($_POST['ce_checkout_consent_checkbox'])
67
+ {
68
+ $checkbox_value = esc_attr($_POST['ce_checkout_consent_checkbox']);
69
+ update_post_meta( $order_id, 'ce_checkout_consent', $checkbox_value);
70
  }
71
  }
72
 
73
+ public function add_checkout_field( $checkout)
74
+ {
75
+ $checked = $checkout->get_value( 'ce_checkout_consent_checkbox' ) ? $checkout->get_value( 'ce_checkout_consent_checkbox' ) : 1;
76
+ $checkbox_text = stripslashes(OptionsHelper::get_checkout_checkbox_text());
77
+
78
+ woocommerce_form_field( 'ce_checkout_consent_checkbox', array(
79
+ 'type' => 'checkbox',
80
+ 'class' => array('ce-field form-row-wide'),
81
+ 'label' => $checkbox_text,
82
+ ), $checked );
83
+ }
84
+
85
  public function replace_wc_email_settings($settings)
86
  {
87
  $default_setting_replacement = array(
106
  $settings[] = array(
107
  'id' => 'ce_manage',
108
  'type' => 'title',
109
+ 'title' => __('Creative Mail', 'creativ-email-wordpress-plugin'),
110
  );
111
 
112
  $settings[] = array(
127
  <th scope="row" class="titledesc">Customize Emails</th>
128
  <td class="forminp forminp-<?php echo sanitize_title($options['type']); ?>">
129
  <a href="admin.php?page=creativemail">
130
+ <button type="button" class="button button-secondary" value="<?php _e('Manage', 'creativ-email-wordpress-plugin'); ?>">Manage</button>
131
  </a>
132
  <p class="description">Manage all your email settings and templates with Creative Mail</p>
133
  </td>
220
  $this->execute_trigger("customer_note", $data, wc_get_order($data->order_id));
221
  }
222
 
223
+ public function ce_email_notification_customer_new_account($customer_id, $new_customer_data, $password_generated) {
224
  $data = new stdClass();
225
  $data->customer_id = $customer_id;
226
  $data->account_url = $this->get_my_account_url();
227
+
228
+ if ($password_generated && key_exists("user_pass", $new_customer_data))
229
+ {
230
+ try {
231
+ $generated_password = $new_customer_data['user_pass'];
232
+ $key = sha1(OptionsHelper::get_instance_api_key() . OptionsHelper::get_instance_uuid());
233
+ $salt = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
234
+ $salted = '';
235
+ $dx = '';
236
+ while (strlen($salted) < 48) {
237
+ $dx = md5($dx . $key . $salt, true);
238
+ $salted .= $dx;
239
+ }
240
+ $key = substr($salted, 0, 32);
241
+ $iv = substr($salted, 32, 16);
242
+ $gp = openssl_encrypt($generated_password, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
243
+ $data->salt = bin2hex($salt);
244
+ $data->generated_password = base64_encode($gp);
245
+ } catch (\Exception $ex) {
246
+ // the great logging experience
247
+ }
248
+ }
249
 
250
  $this->execute_trigger("customer_new_account", $data);
251
  }
331
  }
332
 
333
  $data = new stdClass();
334
+ $data->order_id = $order->get_id();
335
+ $data->order_url = $this->get_view_order_url( $order->get_id(), $order );
336
 
337
  $this->execute_trigger( "customer_invoice", $data, $order );
338
  }
353
  $order_data = array(
354
  'id' => $order->get_id(),
355
  'number' => $order->get_order_number(),
356
+ 'date_created' => $order->get_date_created() ? $order->get_date_created()->getTimestamp() : 0,
357
+ 'date_modified' => $order->get_date_modified() ? $order->get_date_modified()->getTimestamp() : 0,
358
+ 'date_completed' => $order->get_date_completed() ? $order->get_date_completed()->getTimestamp() : 0,
359
  'status' => $order->get_status(),
360
  'currency' => $order->get_currency(),
361
  'total' => wc_format_decimal($order->get_total(), $dp),
412
  foreach ($order->get_items() as $item_id => $item) {
413
  $product = $item->get_product();
414
  $item_meta = $item->get_formatted_meta_data();
415
+
416
  foreach ($item_meta as $key => $values) {
417
  $item_meta[$key]->label = $values->display_key;
418
  unset($item_meta[$key]->display_key);
430
  $product_data['images'][] = wp_get_attachment_url($attachment_id);
431
  }
432
 
433
+ $product_data["on_sale"] = $product->is_on_sale();
434
  $product_data["sale_price"] = $product->get_sale_price();
435
  $product_data["regular_price"] = $product->get_regular_price();
436
+
437
+ if ($product->is_downloadable())
438
+ {
439
+ $item_downloads = $item->get_item_downloads();
440
+ foreach ($item_downloads as $item_download)
441
  {
442
+ $product_data["downloads"][] = array(
443
+ 'line_item_id' => $item->get_id(),
444
+ 'product_id' => $item->get_product_id(),
445
+ 'download_url' => $item_download["download_url"],
446
+ 'download_file' => $item_download["file"],
447
+ 'download_name' => $item_download["name"],
448
+ 'download_id' => $item_download["id"],
449
+ 'downloads_remaining' => $item_download["downloads_remaining"],
450
+ 'download_access_expires' => wc_format_datetime($item_download["access_expires"], 'U'),
451
+ 'download_limit' => $product->get_download_limit(),
452
+ 'download_expiry' => $product->get_download_expiry(),
453
  );
454
  }
455
  }
src/managers/integration-manager.php CHANGED
@@ -9,7 +9,7 @@ use CreativeMail\Modules\Contacts\Handlers\ContactFormSevenPluginHandler;
9
  use CreativeMail\Modules\Contacts\Handlers\GravityFormsPluginHandler;
10
  use CreativeMail\Modules\Contacts\Handlers\NewsLetterContactFormPluginHandler;
11
  use CreativeMail\Modules\Contacts\Handlers\WooCommercePluginHandler;
12
- use CreativeMail\Modules\Contacts\Handlers\WpFormsLitePluginHandler;
13
  use CreativeMail\Modules\Contacts\Handlers\JetpackPluginHandler;
14
  use CreativeMail\Modules\Contacts\Processes\ContactUploadProcess;
15
  use ReflectionClass;
@@ -32,13 +32,14 @@ class IntegrationManager
32
 
33
  // Setup the default integrations
34
  $this->supported_integrations = array(
35
- new Integration('jetpack', 'Jetpack Forms', 'jetpack/jetpack.php', JetpackPluginHandler::class),
36
- new Integration('jetpack-beta', 'Jetpack Forms (Beta)', 'jetpack-beta-master/jetpack-beta.php', JetpackPluginHandler::class),
37
- new Integration('woocommerce','WooCommerce', 'woocommerce/woocommerce.php', WooCommercePluginHandler::class),
38
- new Integration('contact-form-7', 'Contact Form 7', 'contact-form-7/wp-contact-form-7.php', ContactFormSevenPluginHandler::class),
39
- new Integration('newsletter','Newsletter', 'newsletter/plugin.php', NewsLetterContactFormPluginHandler::class),
40
- new Integration('wpformslite', 'WPForms Lite', 'wpforms-lite/wpforms.php', WpFormsLitePluginHandler::class),
41
- new Integration('gravityforms', 'GravityForms', 'gravityforms/gravityforms.php', GravityFormsPluginHandler::class)
 
42
  );
43
  }
44
 
9
  use CreativeMail\Modules\Contacts\Handlers\GravityFormsPluginHandler;
10
  use CreativeMail\Modules\Contacts\Handlers\NewsLetterContactFormPluginHandler;
11
  use CreativeMail\Modules\Contacts\Handlers\WooCommercePluginHandler;
12
+ use CreativeMail\Modules\Contacts\Handlers\WpFormsPluginHandler;
13
  use CreativeMail\Modules\Contacts\Handlers\JetpackPluginHandler;
14
  use CreativeMail\Modules\Contacts\Processes\ContactUploadProcess;
15
  use ReflectionClass;
32
 
33
  // Setup the default integrations
34
  $this->supported_integrations = array(
35
+ new Integration('jetpack', 'Jetpack Forms', 'jetpack/jetpack.php', JetpackPluginHandler::class, false),
36
+ new Integration('jetpack-beta', 'Jetpack Forms (Beta)', 'jetpack-beta-master/jetpack-beta.php', JetpackPluginHandler::class, true),
37
+ new Integration('woocommerce','WooCommerce', 'woocommerce/woocommerce.php', WooCommercePluginHandler::class, false),
38
+ new Integration('contact-form-7', 'Contact Form 7', 'contact-form-7/wp-contact-form-7.php', ContactFormSevenPluginHandler::class, false),
39
+ new Integration('newsletter','Newsletter', 'newsletter/plugin.php', NewsLetterContactFormPluginHandler::class, false),
40
+ new Integration('wpforms', 'WPForms', 'wpforms/wpforms.php', WpFormsPluginHandler::class, false),
41
+ new Integration('wpformslite', 'WPForms Lite', 'wpforms-lite/wpforms.php', WpFormsPluginHandler::class, true),
42
+ new Integration('gravityforms', 'GravityForms', 'gravityforms/gravityforms.php', GravityFormsPluginHandler::class, false)
43
  );
44
  }
45
 
src/modules/contacts/Handlers/GravityFormsPluginHandler.php CHANGED
@@ -190,7 +190,11 @@ class GravityFormsPluginHandler extends BaseContactFormPluginHandler
190
  if (!empty($contactsArray)) {
191
  $batches = array_chunk($contactsArray, CE4WP_BATCH_SIZE);
192
  foreach ($batches as $batch) {
193
- $this->batchUpsertContacts($batch);
 
 
 
 
194
  }
195
  }
196
  }
190
  if (!empty($contactsArray)) {
191
  $batches = array_chunk($contactsArray, CE4WP_BATCH_SIZE);
192
  foreach ($batches as $batch) {
193
+ try {
194
+ $this->batchUpsertContacts($batch);
195
+ } catch (\Exception $exception) {
196
+ // silent exception
197
+ }
198
  }
199
  }
200
  }
src/modules/contacts/Handlers/JetpackPluginHandler.php CHANGED
@@ -88,7 +88,7 @@ class JetpackPluginHandler extends BaseContactFormPluginHandler
88
 
89
  public function unregisterHooks()
90
  {
91
- remove_action('jetpack_subscriptions_form_submission', array($this, 'ceHandleJetpackFormSubmission')); //figure out the correct hook for jetpack
92
  // remove hook function to synchronize
93
  remove_action(CE4WP_SYNCHRONIZE_ACTION, array($this, 'syncAction'));
94
  }
@@ -157,7 +157,11 @@ class JetpackPluginHandler extends BaseContactFormPluginHandler
157
  if (!empty($contactsArray)) {
158
  $batches = array_chunk($contactsArray, CE4WP_BATCH_SIZE);
159
  foreach ($batches as $batch) {
160
- $this->batchUpsertContacts($batch);
 
 
 
 
161
  }
162
  }
163
  }
88
 
89
  public function unregisterHooks()
90
  {
91
+ remove_action('grunion_after_message_sent', array($this, 'ceHandleJetpackFormSubmission'));
92
  // remove hook function to synchronize
93
  remove_action(CE4WP_SYNCHRONIZE_ACTION, array($this, 'syncAction'));
94
  }
157
  if (!empty($contactsArray)) {
158
  $batches = array_chunk($contactsArray, CE4WP_BATCH_SIZE);
159
  foreach ($batches as $batch) {
160
+ try {
161
+ $this->batchUpsertContacts($batch);
162
+ } catch (\Exception $exception) {
163
+ // silent exception
164
+ }
165
  }
166
  }
167
  }
src/modules/contacts/Handlers/NewsLetterContactFormPluginHandler.php CHANGED
@@ -113,7 +113,11 @@ class NewsLetterContactFormPluginHandler extends BaseContactFormPluginHandler
113
 
114
  $batches = array_chunk($backfillArray, CE4WP_BATCH_SIZE);
115
  foreach($batches as $batch){
116
- $this->batchUpsertContacts($batch);
 
 
 
 
117
  }
118
  }
119
  }
113
 
114
  $batches = array_chunk($backfillArray, CE4WP_BATCH_SIZE);
115
  foreach($batches as $batch){
116
+ try {
117
+ $this->batchUpsertContacts($batch);
118
+ } catch (\Exception $exception) {
119
+ // silent exception
120
+ }
121
  }
122
  }
123
  }
src/modules/contacts/Handlers/WooCommercePluginHandler.php CHANGED
@@ -34,9 +34,25 @@ class WooCommercePluginHandler extends BaseContactFormPluginHandler
34
  if ($this->isNotNullOrEmpty($contactModel->getEmail())) {
35
  $contactModel->setEventType(CE4WP_WC_EventType);
36
  $contactModel->setOptActionBy(2);
37
- $contactModel->setOptIn(true);
38
  $contactModel->setOptOut(false);
39
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
  return $contactModel;
42
  }
34
  if ($this->isNotNullOrEmpty($contactModel->getEmail())) {
35
  $contactModel->setEventType(CE4WP_WC_EventType);
36
  $contactModel->setOptActionBy(2);
37
+ $contactModel->setOptIn(false);
38
  $contactModel->setOptOut(false);
39
  }
40
+
41
+ if (array_key_exists('ce_checkout_consent_checkbox', $_POST))
42
+ {
43
+ $checkbox_value = esc_attr($_POST['ce_checkout_consent_checkbox']);
44
+
45
+ }
46
+ else if ($this->isNotNullOrEmpty($products_detail["ce_checkout_consent_checkbox"]))
47
+ {
48
+ $checkbox_value = $products_detail["ce_checkout_consent_checkbox"];
49
+ }
50
+
51
+ if (!is_null($checkbox_value)) {
52
+ $contactModel->setOptActionBy(1);
53
+ $contactModel->setOptIn((bool)$checkbox_value);
54
+ }
55
+
56
  }
57
  return $contactModel;
58
  }
src/modules/contacts/Handlers/WpFormsLitePluginHandler.php DELETED
@@ -1,83 +0,0 @@
1
- <?php
2
-
3
-
4
- namespace CreativeMail\Modules\Contacts\Handlers;
5
-
6
- define('CE4WP_WPF_EventType', 'WordPress - WPFormsLite');
7
-
8
- use CreativeMail\Modules\Contacts\Models\ContactModel;
9
- use CreativeMail\Modules\Contacts\Models\OptActionBy;
10
-
11
- class WpFormsLitePluginHandler extends BaseContactFormPluginHandler
12
- {
13
- private function get_form_type_field($formData, $type)
14
- {
15
- foreach ($formData as $field) {
16
- if(array_key_exists('type', $field) && $field['type'] === $type) {
17
- return $field;
18
- }
19
- }
20
- return null;
21
- }
22
-
23
- public function convertToContactModel($formData)
24
- {
25
- $contactModel = new ContactModel();
26
-
27
- $contactModel->setEventType(CE4WP_WPF_EventType);
28
- $contactModel->setOptIn(true);
29
- $contactModel->setOptOut(false);
30
- $contactModel->setOptActionBy(OptActionBy::Visitor);
31
-
32
- $emailField = $this->get_form_type_field($formData, 'email');
33
- if (array_key_exists('value', $emailField)) {
34
- if ($this->isNotNullOrEmpty($emailField['value'])) {
35
- $contactModel->setEmail($emailField['value']);
36
- }
37
- }
38
-
39
- $nameField = $this->get_form_type_field($formData, 'name');
40
- if (array_key_exists('first', $nameField)) {
41
- if ($this->isNotNullOrEmpty($nameField['first'])) {
42
- $contactModel->setFirstName($nameField['first']);
43
- }
44
- }
45
- if (array_key_exists('last', $nameField)) {
46
- if ($this->isNotNullOrEmpty($nameField['last'])) {
47
- $contactModel->setLastName($nameField['last']);
48
- }
49
- }
50
-
51
- return $contactModel;
52
- }
53
-
54
- public function ceHandleWpFormsProcessComplete($fields, $entry, $form_data, $entry_id) {
55
- try {
56
- $this->upsertContact($this->convertToContactModel($fields));
57
- }
58
- catch (\Exception $exception) {
59
- // silent exception
60
- }
61
- }
62
-
63
- public function registerHooks()
64
- {
65
- // https://wpforms.com/developers/wpforms_process_complete/
66
- add_action( 'wpforms_process_complete', array($this, 'ceHandleWpFormsProcessComplete'), 10, 4);
67
- }
68
-
69
- public function unregisterHooks()
70
- {
71
- remove_action( 'wpforms_process_complete', array($this, 'ceHandleWpFormsProcessComplete'));
72
- }
73
-
74
- public function syncAction($limit = null)
75
- {
76
-
77
- }
78
-
79
- function __construct()
80
- {
81
- parent::__construct();
82
- }
83
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/modules/contacts/Handlers/WpFormsPluginHandler.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ namespace CreativeMail\Modules\Contacts\Handlers;
5
+
6
+ define('CE4WP_WPF_EventType', 'WordPress - WPForms');
7
+
8
+ use CreativeMail\Modules\Contacts\Models\ContactModel;
9
+ use CreativeMail\Modules\Contacts\Models\OptActionBy;
10
+ use function Sodium\add;
11
+
12
+ class WpFormsPluginHandler extends BaseContactFormPluginHandler
13
+ {
14
+ private function get_form_type_field($formData, $type)
15
+ {
16
+ foreach ($formData as $field) {
17
+ if(array_key_exists('type', $field) && $field['type'] === $type) {
18
+ return $field;
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+
24
+ private function convertEntryStringToFormData($entry){
25
+ $formdata = array();
26
+ $entry = json_decode($entry->fields, true);
27
+ foreach ($entry as $field) {
28
+ if(array_key_exists('type', $field)) {
29
+ $formdata[$field["type"]] = $field["value"];
30
+ }
31
+ }
32
+ return $entry;
33
+ }
34
+
35
+ public function convertToContactModel($formData)
36
+ {
37
+ $contactModel = new ContactModel();
38
+
39
+ $contactModel->setEventType(CE4WP_WPF_EventType);
40
+ $contactModel->setOptIn(true);
41
+ $contactModel->setOptOut(false);
42
+ $contactModel->setOptActionBy(OptActionBy::Visitor);
43
+
44
+ $emailField = $this->get_form_type_field($formData, 'email');
45
+ if (array_key_exists('value', $emailField)) {
46
+ if ($this->isNotNullOrEmpty($emailField['value'])) {
47
+ $contactModel->setEmail($emailField['value']);
48
+ }
49
+ }
50
+
51
+ $nameField = $this->get_form_type_field($formData, 'name');
52
+ if (array_key_exists('first', $nameField)) {
53
+ if ($this->isNotNullOrEmpty($nameField['first'])) {
54
+ $contactModel->setFirstName($nameField['first']);
55
+ }
56
+ }
57
+ if (array_key_exists('last', $nameField)) {
58
+ if ($this->isNotNullOrEmpty($nameField['last'])) {
59
+ $contactModel->setLastName($nameField['last']);
60
+ }
61
+ }
62
+
63
+ return $contactModel;
64
+ }
65
+
66
+ public function ceHandleWpFormsProcessComplete($fields) {
67
+ try {
68
+ $this->upsertContact($this->convertToContactModel($fields));
69
+ }
70
+ catch (\Exception $exception) {
71
+ // silent exception
72
+ }
73
+ }
74
+
75
+ public function registerHooks()
76
+ {
77
+ // https://wpforms.com/developers/wpforms_process_complete/
78
+ add_action( 'wpforms_process_complete', array($this, 'ceHandleWpFormsProcessComplete'), 10, 4);
79
+ add_action(CE4WP_SYNCHRONIZE_ACTION, array($this, 'syncAction'));
80
+ }
81
+
82
+ public function unregisterHooks()
83
+ {
84
+ remove_action( 'wpforms_process_complete', array($this, 'ceHandleWpFormsProcessComplete'));
85
+ }
86
+
87
+ public function syncAction($limit = null)
88
+ {
89
+ if (!is_int($limit) || $limit <= 0) {
90
+ $limit = null;
91
+ }
92
+
93
+ // Relies on plugin => wpforms paid or pro
94
+ if (in_array('wpforms/wpforms.php', apply_filters('active_plugins', get_option('active_plugins'))) ||
95
+ in_array('wpforms-lite/wpforms.php', apply_filters('active_plugins', get_option('active_plugins')))) { //this is a guess, have to test first
96
+
97
+ //Get form submissions from the wpforms db
98
+ global $wpdb;
99
+ $contactsArray = array();
100
+
101
+ //get the form entries
102
+ $entriesQuery = 'SELECT fields FROM wp_wpforms_entries';
103
+ $entryResult = $wpdb->get_results($wpdb->prepare($entriesQuery));
104
+
105
+ //Loop through entries and create the contacts
106
+ foreach ($entryResult as $entry) {
107
+ $entryData = $this->convertEntryStringToFormData($entry);
108
+ $contact = $this->convertToContactModel($entryData);
109
+ array_push($contactsArray, $contact);
110
+
111
+ if (isset($limit) && count($contactsArray) >= $limit) {
112
+ break;
113
+ }
114
+ }
115
+
116
+ if (!empty($contactsArray)) {
117
+ $batches = array_chunk($contactsArray, CE4WP_BATCH_SIZE);
118
+ foreach ($batches as $batch) {
119
+ try {
120
+ $this->batchUpsertContacts($batch);
121
+ } catch (\Exception $exception) {
122
+ // silent exception
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ function __construct()
130
+ {
131
+ parent::__construct();
132
+ }
133
+ }
src/modules/woocommerce/models/WCStoreInformation.php CHANGED
@@ -3,6 +3,7 @@
3
 
4
  namespace CreativeMail\Modules\WooCommerce\Models;
5
 
 
6
  use WC_Countries;
7
 
8
  class WCStoreInformation
3
 
4
  namespace CreativeMail\Modules\WooCommerce\Models;
5
 
6
+ use CreativeMail\Helpers\OptionsHelper;
7
  use WC_Countries;
8
 
9
  class WCStoreInformation
src/views/activated-integrations.php CHANGED
@@ -7,28 +7,94 @@ $activated_integrations = CreativeMail::get_instance()->get_integration_manager(
7
 
8
  ?>
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
  <p class="ce4wp-typography-root ce4wp-body2" style="color: rgba(0, 0, 0, 0.6);">
12
- We will synchronise your contacts from the following plugins:
13
  </p>
14
 
15
-
16
- <form name="plugins" action="" method="post">
17
- <input type="hidden" name="action" value="change_activated_plugins" />
18
- <ul style="color: rgba(0, 0, 0, 0.6);">
19
  <?php
20
-
21
- foreach ($available_integrations as $available_integration){
22
-
23
- $active = in_array($available_integration, $activated_integrations);
24
- $checked = $active === true ? 'checked' : '';
25
-
26
- echo '<li><label class="ce4wp-checkbox"><input type="checkbox" name="activated_plugins[]" value="' . esc_attr($available_integration->get_slug()) . '" '.esc_attr($checked).' /><span>' . esc_html($available_integration->get_name()) . '</span></label></li>';
27
  }
28
-
29
  ?>
30
- </ul>
31
  <div class="ce-kvp">
32
- <input name="save_button" type="submit" class="ce4wp-button-text-primary ce4wp-right" id="save-activated-plugins" value="Save" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  </div>
 
34
  </form>
 
7
 
8
  ?>
9
 
10
+ <script type="application/javascript">
11
+ function showConsentModal () {
12
+ document.getElementById('consent-modal').style.display = "block";
13
+ }
14
+
15
+ function closeConsentModal () {
16
+ document.getElementById('consent-modal').style.display = "none";
17
+ }
18
+
19
+ function submitForm() {
20
+ document.getElementById('activated_plugins_form').submit()
21
+ }
22
+ </script>
23
 
24
  <p class="ce4wp-typography-root ce4wp-body2" style="color: rgba(0, 0, 0, 0.6);">
25
+ We will sync your contacts from the following plugins:
26
  </p>
27
 
28
+ <form id="activated_plugins_form" name="plugins" action="" method="post">
29
+ <input type="hidden" name="action" value="change_activated_plugins" />
30
+ <ul style="color: rgba(0, 0, 0, 0.6);">
 
31
  <?php
32
+ foreach ($available_integrations as $available_integration) {
33
+ $active = in_array($available_integration, $activated_integrations);
34
+ $checked = $active === true ? 'checked' : '';
35
+
36
+ echo '<li><label class="ce4wp-checkbox"><input type="checkbox" name="activated_plugins[]" value="' . esc_attr($available_integration->get_slug()) . '" '.esc_attr($checked).' /><span>' . esc_html($available_integration->get_name()) . '</span></label></li>';
 
 
37
  }
 
38
  ?>
39
+ </ul>
40
  <div class="ce-kvp">
41
+ <input name="save_button" type="submit" class="ce4wp-button-text-primary ce4wp-right" id="save-activated-plugins" value="Save" onclick="showConsentModal(); return false;" />
42
+ <!-- -->
43
+ </div>
44
+
45
+ <!-- Consent modal -->
46
+ <div id="consent-modal" role="presentation" class="ce4wp-dialog-root" height="auto" variant="default" style="display: none;">
47
+ <div class="ce4wp-backdrop-root" aria-hidden="true" style="opacity: 1; "></div>
48
+
49
+ <div class="ce4wp-dialog-container" role="none presentation" tabindex="-1"
50
+ style="opacity: 1; ">
51
+
52
+ <div class="ce4wp-dialog-wrapper" role="dialog">
53
+ <div width="100%" class="ce4wp-dialog-header">
54
+ <div class="ce4wp-dialog-header-title">
55
+ <div class="ce4wp-dialog-header-title-wrapper">
56
+ <div class="ce4wp-dialog-header-title-wrapper-content">
57
+ <h3 class="ce4wp-typography-root ce4wp-typography-h3">Yes, these contacts expect to hear from me</h3>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ <div class="ce4wp-dialog-header-close">
62
+ <div class="ce4wp-dialog-header-close-wrapper" onclick="closeConsentModal()">
63
+ <div class="ce4wp-dialog-header-close-wrapper-button">
64
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="black" xmlns="http://www.w3.org/2000/svg">
65
+ <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" />
66
+ </svg>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ <div height="auto" class="ce4wp-dialog-content">
72
+ <div class="ce4wp-pb-3">
73
+ <span>Each time you add contacts, they must meet the following conditions.</span>
74
+ </div>
75
+ <div class="ce4wp-consent">
76
+ <div class="ce4wp-pb-3">
77
+ <h4 class="ce4wp-typography-root ce4wp-typography-h4">I have the consent of each contact on my list</h4>
78
+ <span>You must have the prior consent of each contact added to your Constant Contact account. Your account cannot contain purchased, rented, third party or appended lists. In addition, you may not add auto-response addresses, transactional addresses, or user group addresses.</span>
79
+ </div>
80
+ <h4 class="ce4wp-typography-root ce4wp-typography-h4">I am not adding role addresses or distribution lists</h4>
81
+ <span>Role addresses, such as sales@ or marketing@, and distribution lists often mail to more than one person and result in higher than normal spam complaints. You must remove these from your list prior to upload.</span>
82
+ </div>
83
+ <div class="ce4wp-pb-3">
84
+ <span>Getting your email delivered is important to us. We may contact you to review your list before we send your email, if you add contacts that are likely to cause higher than normal bounces or for other reasons that we know may cause spam complaints. Thanks for helping to eliminate spam.</span>
85
+ </div>
86
+ </div>
87
+ <div class="ce4wp-dialog-footer">
88
+ <div class="ce4wp-dialog-footer-close">
89
+ <div class="ce4wp-dialog-footer-close-wrapper">
90
+ <button class="ce4wp-button-base-root ce4wp-button-root ce4wp-button-contained ce4wp-button-contained-primary" type="button" onclick="submitForm()" >
91
+ <span class="MuiButton-label">Got it!</span>
92
+ </button>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
  </div>
98
+ </div>
99
  </form>
100
+
src/views/available-integrations.php CHANGED
@@ -11,9 +11,12 @@ $supported_integrations = CreativeMail::get_instance()->get_integration_manager(
11
  In order to help you sync your contacts to Creative Mail we have build integrations with the following plugins:
12
  </p>
13
  <ul style="color: rgba(0, 0, 0, 0.6);">
14
- <?php
15
- foreach ($supported_integrations as $supported_integration) {
16
- echo '<li>- ' . esc_html($supported_integration->get_name()) . '</li>';
17
- }
18
- ?>
 
 
 
19
  </ul>
11
  In order to help you sync your contacts to Creative Mail we have build integrations with the following plugins:
12
  </p>
13
  <ul style="color: rgba(0, 0, 0, 0.6);">
14
+ <?php
15
+ foreach ($supported_integrations as $supported_integration) {
16
+ if ($supported_integration->is_hidden_from_suggestions()) {
17
+ continue;
18
+ }
19
+ echo '<li>- ' . esc_html($supported_integration->get_name()) . '</li>';
20
+ }
21
+ ?>
22
  </ul>
src/views/consent.php CHANGED
@@ -59,7 +59,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
59
  </div>
60
  <div class="ce4wp-list-item-text-root ce4wp-d-flex ce4wp-flex-column ce4wp-m-0">
61
  <p class="ce4wp-typography-root ce4wp-body2" style="color: rgba(0, 0, 0, 0.6);">
62
- Creative Mail uses tools, including cookies, to improve the performance and experience of the product. For more information you can read our <a href="https://endurance.clarip.com/privacycenter/?brand=ctct" target="_blank">privacy notice</a>.
63
  </p>
64
  </div>
65
  </li>
59
  </div>
60
  <div class="ce4wp-list-item-text-root ce4wp-d-flex ce4wp-flex-column ce4wp-m-0">
61
  <p class="ce4wp-typography-root ce4wp-body2" style="color: rgba(0, 0, 0, 0.6);">
62
+ Creative Mail uses tools, including cookies, to improve the performance and experience of the product. For more information you can read our <a href="https://www.endurance.com/privacy/privacy" target="_blank">privacy notice</a>.
63
  </p>
64
  </div>
65
  </li>
src/views/dashboard.php CHANGED
@@ -3,9 +3,16 @@ use CreativeMail\Helpers\EnvironmentHelper;
3
  ?>
4
 
5
  <script type="application/javascript">
6
- function navigateWooCommerce() { window.open('<?php echo esc_url($this->dashboard_url) . '&dashboard=WooCommerceAutomation' ?>', '_blank'); }
7
- function navigateLogomaker() { window.open('<?php echo esc_url($this->dashboard_url) . '&dashboard=LogoMaker' ?>', '_blank'); }
8
- function navigateContacts() { window.open('<?php echo esc_url($this->dashboard_url) . '&dashboard=Contacts' ?>', '_blank'); }
 
 
 
 
 
 
 
9
  </script>
10
  <div class="ce4wp-admin-wrapper">
11
  <header class="ce4wp-swoosh-header"></header>
@@ -20,7 +27,7 @@ use CreativeMail\Helpers\EnvironmentHelper;
20
  <img src="<?php echo CE4WP_PLUGIN_URL . 'assets/images/airplane.svg'; ?>" class="ce4wp-airplane" alt="Paper airplane decoration">
21
  </div>
22
  </div>
23
-
24
  <div class="ce4wp-card">
25
  <div class="ce4wp-px-4 ce4wp-pt-4">
26
  <h1 class="ce4wp-typography-root ce4wp-typography-h1 ce4wp-inline-block ce4wp-mb-3">
@@ -29,42 +36,80 @@ use CreativeMail\Helpers\EnvironmentHelper;
29
  <p class="ce4wp-typography-root ce4wp-subtitle ce4wp-mt-4 ce4wp-mb-4">
30
  You’re all set! Creative Mail and WordPress have been linked.
31
  </p>
32
- <a id='ce4wp-go-button' href="<?php echo esc_url($this->dashboard_url) ?>" target="_blank" class="ce4wp-button-base-root ce4wp-button-root ce4wp-button-contained ce4wp-button-contained-primary ce4wp-mt-2" tabindex="0" type="button" data-element-type="button">
33
- <span class="ce4wp-button-label" style="width: 100%;">Open your Creative Mail dashboard<span class="ce4wp-button-endIcon">
34
- <svg class="ce4wp-Svgicon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
35
- <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
36
- </svg>
 
 
37
  </span>
38
- </span>
39
- </a>
40
- <h6 id='ce4wp-sub-apps-title' class="ce4wp-typography-root ce4wp-typography-h6 ce4wp-mt-4 ce4wp-mb-3">
41
- Or jump straight into:
42
- </h6>
43
- <div id='ce4wp-sub-apps-container' class="ce4wp-grid ce4wp-mt-3">
44
- <div class="ce4wp-grid-item" onclick="navigateWooCommerce()">
45
- <div class="ce4wp-grid-item-card ce4wp-mb-4">
46
- <div class="ce4wp-grid-item-card-media" title="WooCommerce emails" style="background-image: url(<?php echo CE4WP_PLUGIN_URL . 'assets/images/tile-woocommerce.svg'; ?>);"></div>
47
- <div class="ce4wp-grid-item-card-content-root">
48
- <h4 class="ce4wp-typography-root ce4wp-typography-h4">WooCommerce emails</h4>
49
- <p class="ce4wp-pt-2 ce4wp-typography-root ce4wp-body2">Spice up your transactional WooCommerce store emails.</p>
50
  </div>
51
  </div>
52
- </div>
53
- <div class="ce4wp-grid-item" onclick="navigateLogomaker()">
54
- <div class="ce4wp-grid-item-card ce4wp-mb-4">
55
- <div class="ce4wp-grid-item-card-media" title="Logomaker tools" style="background-image: url(<?php echo CE4WP_PLUGIN_URL . 'assets/images/tile-logomaker.svg'; ?>);"></div>
56
- <div class="ce4wp-grid-item-card-content-root">
57
- <h4 class="ce4wp-typography-root ce4wp-typography-h4">Logomaker tools</h4>
58
- <p class="ce4wp-pt-2 ce4wp-typography-root ce4wp-body2">Enhance your brand. Design your own logo like a pro.</p>
 
 
 
 
 
 
 
 
 
59
  </div>
60
  </div>
61
  </div>
62
- <div class="ce4wp-grid-item" onclick="navigateContacts()">
63
- <div class="ce4wp-grid-item-card ce4wp-mb-4">
64
- <div class="ce4wp-grid-item-card-media" title="Contact Management" style="background-image: url(<?php echo CE4WP_PLUGIN_URL . 'assets/images/tile-contacts.svg'; ?>);"></div>
65
- <div class="ce4wp-grid-item-card-content-root">
66
- <h4 class="ce4wp-typography-root ce4wp-typography-h4">Contact Management</h4>
67
- <p class="ce4wp-pt-2 ce4wp-typography-root ce4wp-body2">Manage your contacts and email lists, all in one place.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  </div>
69
  </div>
70
  </div>
@@ -78,12 +123,32 @@ use CreativeMail\Helpers\EnvironmentHelper;
78
  </div>
79
 
80
  <script type="application/javascript">
81
- let blurred = false;
82
- window.onblur = function() {
83
- blurred = true;
84
- document.getElementById('ce4wp-go-button').style.display = "none";
85
- document.getElementById('ce4wp-sub-apps-title').style.display = "none";
86
- document.getElementById('ce4wp-sub-apps-container').style.display = "none";
87
- };
88
- window.onfocus = function() { blurred && (location.reload()); };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  </script>
3
  ?>
4
 
5
  <script type="application/javascript">
6
+ var ce4wpDashboardUrl = "<?php echo esc_url($this->dashboard_url) ?>";
7
+ var ce4wpActionPerformed = false;
8
+ function ce4wpMarkActionPerformed () { ce4wpActionPerformed = true; }
9
+ function ce4wpNavigateToDashboard(dashboard) {
10
+ if (!ce4wpDashboardUrl) {
11
+ return;
12
+ }
13
+ ce4wpActionPerformed = true;
14
+ window.open(ce4wpDashboardUrl + '&dashboard=' + dashboard, '_blank');
15
+ }
16
  </script>
17
  <div class="ce4wp-admin-wrapper">
18
  <header class="ce4wp-swoosh-header"></header>
27
  <img src="<?php echo CE4WP_PLUGIN_URL . 'assets/images/airplane.svg'; ?>" class="ce4wp-airplane" alt="Paper airplane decoration">
28
  </div>
29
  </div>
30
+
31
  <div class="ce4wp-card">
32
  <div class="ce4wp-px-4 ce4wp-pt-4">
33
  <h1 class="ce4wp-typography-root ce4wp-typography-h1 ce4wp-inline-block ce4wp-mb-3">
36
  <p class="ce4wp-typography-root ce4wp-subtitle ce4wp-mt-4 ce4wp-mb-4">
37
  You’re all set! Creative Mail and WordPress have been linked.
38
  </p>
39
+ <div id="loaded">
40
+ <a id='ce4wp-go-button' href="<?php echo esc_url($this->dashboard_url) ?>" target="_blank" class="ce4wp-button-base-root ce4wp-button-root ce4wp-button-contained ce4wp-button-contained-primary ce4wp-mt-2" tabindex="0" type="button" data-element-type="button" onclick="ce4wpMarkActionPerformed();">
41
+ <span class="ce4wp-button-label" style="width: 100%;">Open your Creative Mail dashboard<span class="ce4wp-button-endIcon">
42
+ <svg class="ce4wp-Svgicon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
43
+ <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
44
+ </svg>
45
+ </span>
46
  </span>
47
+ </a>
48
+ <h6 id='ce4wp-sub-apps-title' class="ce4wp-typography-root ce4wp-typography-h6 ce4wp-mt-4 ce4wp-mb-3">
49
+ Or jump straight into:
50
+ </h6>
51
+ <div id='ce4wp-sub-apps-container' class="ce4wp-grid ce4wp-mt-3">
52
+ <div class="ce4wp-grid-item" onclick="ce4wpNavigateToDashboard('WooCommerceAutomation')">
53
+ <div class="ce4wp-grid-item-card ce4wp-mb-4">
54
+ <div class="ce4wp-grid-item-card-media" title="WooCommerce emails" style="background-image: url(<?php echo CE4WP_PLUGIN_URL . 'assets/images/tile-img-woocommerce.svg'; ?>);"></div>
55
+ <div class="ce4wp-grid-item-card-content-root">
56
+ <h4 class="ce4wp-typography-root ce4wp-typography-h4">WooCommerce emails</h4>
57
+ <p class="ce4wp-pt-2 ce4wp-typography-root ce4wp-body2">Spice up your transactional WooCommerce store emails.</p>
58
+ </div>
59
  </div>
60
  </div>
61
+ <div class="ce4wp-grid-item" onclick="ce4wpNavigateToDashboard('LogoMaker')">
62
+ <div class="ce4wp-grid-item-card ce4wp-mb-4">
63
+ <div class="ce4wp-grid-item-card-media" title="Logomaker tools" style="background-image: url(<?php echo CE4WP_PLUGIN_URL . 'assets/images/tile-img-logomaker.svg'; ?>);"></div>
64
+ <div class="ce4wp-grid-item-card-content-root">
65
+ <h4 class="ce4wp-typography-root ce4wp-typography-h4">Logomaker tools</h4>
66
+ <p class="ce4wp-pt-2 ce4wp-typography-root ce4wp-body2">Enhance your brand. Design your own logo like a pro.</p>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ <div class="ce4wp-grid-item" onclick="ce4wpNavigateToDashboard('Contacts')">
71
+ <div class="ce4wp-grid-item-card ce4wp-mb-4">
72
+ <div class="ce4wp-grid-item-card-media" title="Contact Management" style="background-image: url(<?php echo CE4WP_PLUGIN_URL . 'assets/images/tile-img-contactmanagement.svg'; ?>);"></div>
73
+ <div class="ce4wp-grid-item-card-content-root">
74
+ <h4 class="ce4wp-typography-root ce4wp-typography-h4">Contact Management</h4>
75
+ <p class="ce4wp-pt-2 ce4wp-typography-root ce4wp-body2">Manage your contacts and email lists, all in one place.</p>
76
+ </div>
77
  </div>
78
  </div>
79
  </div>
80
+ </div>
81
+
82
+ <div id="skeleton" style="display: none;">
83
+ <div class="ce4wp-button-base-root ce4wp-button-root ce4wp-button-contained ce4wp-mt-2 skeleton-pulse" style="width: 300px; color: #8C8C8C;">
84
+ <span class="ce4wp-button-label" style="width: 100%;">Loading your account...</span>
85
+ </div>
86
+ <div class="ce4wp-typography-root ce4wp-typography-h6 ce4wp-mt-4 ce4wp-mb-3 skeleton-pulse ce4wp-subapps-skeleton"></div>
87
+ <div class="ce4wp-grid ce4wp-mt-3">
88
+ <div class="ce4wp-grid-item" onclick="navigateWooCommerce()">
89
+ <div class="ce4wp-grid-item-card ce4wp-mb-4">
90
+ <div class="ce4wp-grid-item-card-media skeleton-pulse ce4wp-grid-item-card-media-skeleton"></div>
91
+ <div class="ce4wp-grid-item-card-content-root skeleton-pulse">
92
+ <div class="ce4wp-grid-item-card-content-skeleton-title"></div>
93
+ <div class="ce4wp-grid-item-card-content-skeleton-description"></div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ <div class="ce4wp-grid-item" onclick="navigateLogomaker()">
98
+ <div class="ce4wp-grid-item-card ce4wp-mb-4">
99
+ <div class="ce4wp-grid-item-card-media skeleton-pulse ce4wp-grid-item-card-media-skeleton"></div>
100
+ <div class="ce4wp-grid-item-card-content-root skeleton-pulse">
101
+ <div class="ce4wp-grid-item-card-content-skeleton-title"></div>
102
+ <div class="ce4wp-grid-item-card-content-skeleton-description"></div>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ <div class="ce4wp-grid-item" onclick="navigateContacts()">
107
+ <div class="ce4wp-grid-item-card ce4wp-mb-4">
108
+ <div class="ce4wp-grid-item-card-media skeleton-pulse ce4wp-grid-item-card-media-skeleton"></div>
109
+ <div class="ce4wp-grid-item-card-content-root skeleton-pulse">
110
+ <div class="ce4wp-grid-item-card-content-skeleton-title"></div>
111
+ <div class="ce4wp-grid-item-card-content-skeleton-description"></div>
112
+ </div>
113
  </div>
114
  </div>
115
  </div>
123
  </div>
124
 
125
  <script type="application/javascript">
126
+ let blurred = false;
127
+ window.onblur = function() {
128
+ if (!ce4wpActionPerformed) {
129
+ return
130
+ }
131
+ blurred = true;
132
+ document.getElementById('skeleton').style.display = "block";
133
+ document.getElementById('loaded').style.display = "none";
134
+ ce4wpDashboardUrl = null
135
+ };
136
+ window.onfocus = function() {
137
+ if (!blurred) {
138
+ return
139
+ }
140
+ fetch(wpApiSettings.root + 'creativemail/v1/sso', {
141
+ headers: {
142
+ 'X-WP-Nonce': wpApiSettings.nonce
143
+ },
144
+ }).then(async (r) => {
145
+ const data = await r.json();
146
+ if (data && data.url) {
147
+ ce4wpDashboardUrl = data.url;
148
+ ce4wpActionPerformed = false;
149
+ document.getElementById('skeleton').style.display = "none";
150
+ document.getElementById('loaded').style.display = "block";
151
+ }
152
+ })
153
+ };
154
  </script>
src/views/onboarding.php CHANGED
@@ -69,7 +69,7 @@ if (isset($referred_by))
69
  </div>
70
  <div class="ce4wp-list-item-text-root ce4wp-d-flex ce4wp-flex-column ce4wp-m-0">
71
  <p class="ce4wp-typography-root ce4wp-body2" style="color: rgba(0, 0, 0, 0.6);">
72
- Creative Mail uses tools, including cookies, to improve the performance and experience of the product. For more information you can read our <a href="https://endurance.clarip.com/privacycenter/?brand=ctct" target="_blank">privacy notice</a>.
73
  </p>
74
  </div>
75
  </li>
@@ -81,13 +81,13 @@ if (isset($referred_by))
81
  tabindex="0"
82
  type="button"
83
  data-element-type="button">
84
- <span class="ce4wp-button-label" style="width: 100%;">
85
- I Agree and let's get started!<span class="ce4wp-button-endIcon">
86
- <svg class="ce4wp-Svgicon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
87
- <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
88
- </svg>
89
- </span>
90
- </span>
91
  </a>
92
  </div>
93
  </div>
69
  </div>
70
  <div class="ce4wp-list-item-text-root ce4wp-d-flex ce4wp-flex-column ce4wp-m-0">
71
  <p class="ce4wp-typography-root ce4wp-body2" style="color: rgba(0, 0, 0, 0.6);">
72
+ Creative Mail uses tools, including cookies, to improve the performance and experience of the product. For more information you can read our <a href="https://www.endurance.com/privacy/privacy" target="_blank">privacy notice</a>.
73
  </p>
74
  </div>
75
  </li>
81
  tabindex="0"
82
  type="button"
83
  data-element-type="button">
84
+ <span class="ce4wp-button-label" style="width: 100%;">
85
+ I Agree and let's get started!<span class="ce4wp-button-endIcon">
86
+ <svg class="ce4wp-Svgicon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
87
+ <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
88
+ </svg>
89
+ </span>
90
+ </span>
91
  </a>
92
  </div>
93
  </div>
src/views/settings.php CHANGED
@@ -20,6 +20,15 @@
20
 
21
  CreativeMail::get_instance()->get_integration_manager()->set_activated_plugins($activated_plugins);
22
  }
 
 
 
 
 
 
 
 
 
23
  }
24
 
25
  $contact_sync_available = !empty(CreativeMail::get_instance()->get_integration_manager()->get_active_plugins());
@@ -57,7 +66,7 @@
57
 
58
  <div class="ce4wp-card" style="display: <?php echo !empty($this->instance_id) ? 'block' : 'none' ?>">
59
  <div class="ce4wp-px-4 ce4wp-py-4">
60
- <h2 class="ce4wp-typography-root ce4wp-typography-h2 ce4wp-mb-2">Contact Synchronization</h2>
61
 
62
  <?php
63
  if ($contact_sync_available) {
@@ -75,6 +84,45 @@
75
  include 'settings-internal.php';
76
  }
77
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  </div>
79
  </div>
80
  </div>
20
 
21
  CreativeMail::get_instance()->get_integration_manager()->set_activated_plugins($activated_plugins);
22
  }
23
+
24
+ if ($_POST['action'] === 'change_marketing_information') {
25
+ if(array_key_exists('ce4wp_show_marketing_checkbox', $_POST) && sanitize_key($_POST['ce4wp_show_marketing_checkbox']) === 'on') {
26
+ OptionsHelper::set_checkout_checkbox_enabled('1');
27
+ } else {
28
+ OptionsHelper::set_checkout_checkbox_enabled('0');
29
+ }
30
+ OptionsHelper::set_checkout_checkbox_text(sanitize_text_field($_POST['ce4wp_checkbox_text']));
31
+ }
32
  }
33
 
34
  $contact_sync_available = !empty(CreativeMail::get_instance()->get_integration_manager()->get_active_plugins());
66
 
67
  <div class="ce4wp-card" style="display: <?php echo !empty($this->instance_id) ? 'block' : 'none' ?>">
68
  <div class="ce4wp-px-4 ce4wp-py-4">
69
+ <h2 class="ce4wp-typography-root ce4wp-typography-h2 ce4wp-mb-2">Contact Sync</h2>
70
 
71
  <?php
72
  if ($contact_sync_available) {
84
  include 'settings-internal.php';
85
  }
86
  ?>
87
+
88
+ <div class="ce4wp-card">
89
+ <div class="ce4wp-px-4 ce4wp-py-4">
90
+ <h2 class="ce4wp-typography-root ce4wp-typography-h2 ce4wp-mb-2">Customer Email Marketing</h2>
91
+
92
+ <form name="plugins" action="" method="post">
93
+ <input type="hidden" name="action" value="change_marketing_information" />
94
+ <table class="form-table">
95
+ <tbody>
96
+ <tr>
97
+ <td class="forminp forminp-text ce4wp-px-0">
98
+ <label class="ce4wp-checkbox">
99
+ <input type="checkbox" name="ce4wp_show_marketing_checkbox" <?php echo (esc_attr(OptionsHelper::get_checkout_checkbox_enabled()) === '1') ? 'checked' : '';?> />
100
+ <span class="ce4wp-typography-root ce4wp-body2">
101
+ <?php echo __('Yes I want to ask my customers in the WooCommerce Checkout for consent to sent marketing emails', 'creativ-email-wordpress-plugin'); ?>
102
+ </span>
103
+ </label>
104
+ </td>
105
+ </tr>
106
+ <tr>
107
+ <td class="forminp forminp-text ce4wp-px-0">
108
+ <label for="ce4wp_checkbox_text">
109
+ <span class="ce4wp-typography-root ce4wp-body2">
110
+ <?php echo __('Consent Text', 'creativ-email-wordpress-plugin'); ?>
111
+ <span>
112
+ </label>
113
+ <br />
114
+ <input type="text" name="ce4wp_checkbox_text" value="<?php echo esc_attr(stripslashes(OptionsHelper::get_checkout_checkbox_text())); ?>" />
115
+ </td>
116
+ </tr>
117
+ </tbody>
118
+ </table>
119
+
120
+ <div class="ce-kvp">
121
+ <input name="save_button" type="submit" class="ce4wp-button-text-primary ce4wp-right" id="save_customer_information" value="Save" />
122
+ </div>
123
+ </form>
124
+ </div>
125
+ </div>
126
  </div>
127
  </div>
128
  </div>
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitaa1185c8d086eb67e40a651bef2b4322::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit89dc2c82c00051b8500b11edfc1a216b::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -60,7 +60,7 @@ class ClassLoader
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
63
- return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
64
  }
65
 
66
  return array();
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
63
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
64
  }
65
 
66
  return array();
vendor/composer/autoload_classmap.php CHANGED
@@ -30,7 +30,7 @@ return array(
30
  'CreativeMail\\Modules\\Contacts\\Handlers\\JetpackPluginHandler' => $baseDir . '/src/modules/contacts/Handlers/JetpackPluginHandler.php',
31
  'CreativeMail\\Modules\\Contacts\\Handlers\\NewsLetterContactFormPluginHandler' => $baseDir . '/src/modules/contacts/Handlers/NewsLetterContactFormPluginHandler.php',
32
  'CreativeMail\\Modules\\Contacts\\Handlers\\WooCommercePluginHandler' => $baseDir . '/src/modules/contacts/Handlers/WooCommercePluginHandler.php',
33
- 'CreativeMail\\Modules\\Contacts\\Handlers\\WpFormsLitePluginHandler' => $baseDir . '/src/modules/contacts/Handlers/WpFormsLitePluginHandler.php',
34
  'CreativeMail\\Modules\\Contacts\\Models\\ContactAddressModel' => $baseDir . '/src/modules/contacts/models/ContactAddressModel.php',
35
  'CreativeMail\\Modules\\Contacts\\Models\\ContactFormSevenSubmission' => $baseDir . '/src/modules/contacts/models/ContactFormSevenSubmission.php',
36
  'CreativeMail\\Modules\\Contacts\\Models\\ContactModel' => $baseDir . '/src/modules/contacts/models/ContactModel.php',
30
  'CreativeMail\\Modules\\Contacts\\Handlers\\JetpackPluginHandler' => $baseDir . '/src/modules/contacts/Handlers/JetpackPluginHandler.php',
31
  'CreativeMail\\Modules\\Contacts\\Handlers\\NewsLetterContactFormPluginHandler' => $baseDir . '/src/modules/contacts/Handlers/NewsLetterContactFormPluginHandler.php',
32
  'CreativeMail\\Modules\\Contacts\\Handlers\\WooCommercePluginHandler' => $baseDir . '/src/modules/contacts/Handlers/WooCommercePluginHandler.php',
33
+ 'CreativeMail\\Modules\\Contacts\\Handlers\\WpFormsPluginHandler' => $baseDir . '/src/modules/contacts/Handlers/WpFormsPluginHandler.php',
34
  'CreativeMail\\Modules\\Contacts\\Models\\ContactAddressModel' => $baseDir . '/src/modules/contacts/models/ContactAddressModel.php',
35
  'CreativeMail\\Modules\\Contacts\\Models\\ContactFormSevenSubmission' => $baseDir . '/src/modules/contacts/models/ContactFormSevenSubmission.php',
36
  'CreativeMail\\Modules\\Contacts\\Models\\ContactModel' => $baseDir . '/src/modules/contacts/models/ContactModel.php',
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitaa1185c8d086eb67e40a651bef2b4322
6
  {
7
  private static $loader;
8
 
@@ -22,15 +22,15 @@ class ComposerAutoloaderInitaa1185c8d086eb67e40a651bef2b4322
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInitaa1185c8d086eb67e40a651bef2b4322', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInitaa1185c8d086eb67e40a651bef2b4322', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
- call_user_func(\Composer\Autoload\ComposerStaticInitaa1185c8d086eb67e40a651bef2b4322::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit89dc2c82c00051b8500b11edfc1a216b
6
  {
7
  private static $loader;
8
 
22
  return self::$loader;
23
  }
24
 
25
+ spl_autoload_register(array('ComposerAutoloaderInit89dc2c82c00051b8500b11edfc1a216b', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
+ spl_autoload_unregister(array('ComposerAutoloaderInit89dc2c82c00051b8500b11edfc1a216b', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
+ call_user_func(\Composer\Autoload\ComposerStaticInit89dc2c82c00051b8500b11edfc1a216b::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitaa1185c8d086eb67e40a651bef2b4322
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'F' =>
@@ -86,7 +86,7 @@ class ComposerStaticInitaa1185c8d086eb67e40a651bef2b4322
86
  'CreativeMail\\Modules\\Contacts\\Handlers\\JetpackPluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/JetpackPluginHandler.php',
87
  'CreativeMail\\Modules\\Contacts\\Handlers\\NewsLetterContactFormPluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/NewsLetterContactFormPluginHandler.php',
88
  'CreativeMail\\Modules\\Contacts\\Handlers\\WooCommercePluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/WooCommercePluginHandler.php',
89
- 'CreativeMail\\Modules\\Contacts\\Handlers\\WpFormsLitePluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/WpFormsLitePluginHandler.php',
90
  'CreativeMail\\Modules\\Contacts\\Models\\ContactAddressModel' => __DIR__ . '/../..' . '/src/modules/contacts/models/ContactAddressModel.php',
91
  'CreativeMail\\Modules\\Contacts\\Models\\ContactFormSevenSubmission' => __DIR__ . '/../..' . '/src/modules/contacts/models/ContactFormSevenSubmission.php',
92
  'CreativeMail\\Modules\\Contacts\\Models\\ContactModel' => __DIR__ . '/../..' . '/src/modules/contacts/models/ContactModel.php',
@@ -121,9 +121,9 @@ class ComposerStaticInitaa1185c8d086eb67e40a651bef2b4322
121
  public static function getInitializer(ClassLoader $loader)
122
  {
123
  return \Closure::bind(function () use ($loader) {
124
- $loader->prefixLengthsPsr4 = ComposerStaticInitaa1185c8d086eb67e40a651bef2b4322::$prefixLengthsPsr4;
125
- $loader->prefixDirsPsr4 = ComposerStaticInitaa1185c8d086eb67e40a651bef2b4322::$prefixDirsPsr4;
126
- $loader->classMap = ComposerStaticInitaa1185c8d086eb67e40a651bef2b4322::$classMap;
127
 
128
  }, null, ClassLoader::class);
129
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit89dc2c82c00051b8500b11edfc1a216b
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'F' =>
86
  'CreativeMail\\Modules\\Contacts\\Handlers\\JetpackPluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/JetpackPluginHandler.php',
87
  'CreativeMail\\Modules\\Contacts\\Handlers\\NewsLetterContactFormPluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/NewsLetterContactFormPluginHandler.php',
88
  'CreativeMail\\Modules\\Contacts\\Handlers\\WooCommercePluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/WooCommercePluginHandler.php',
89
+ 'CreativeMail\\Modules\\Contacts\\Handlers\\WpFormsPluginHandler' => __DIR__ . '/../..' . '/src/modules/contacts/Handlers/WpFormsPluginHandler.php',
90
  'CreativeMail\\Modules\\Contacts\\Models\\ContactAddressModel' => __DIR__ . '/../..' . '/src/modules/contacts/models/ContactAddressModel.php',
91
  'CreativeMail\\Modules\\Contacts\\Models\\ContactFormSevenSubmission' => __DIR__ . '/../..' . '/src/modules/contacts/models/ContactFormSevenSubmission.php',
92
  'CreativeMail\\Modules\\Contacts\\Models\\ContactModel' => __DIR__ . '/../..' . '/src/modules/contacts/models/ContactModel.php',
121
  public static function getInitializer(ClassLoader $loader)
122
  {
123
  return \Closure::bind(function () use ($loader) {
124
+ $loader->prefixLengthsPsr4 = ComposerStaticInit89dc2c82c00051b8500b11edfc1a216b::$prefixLengthsPsr4;
125
+ $loader->prefixDirsPsr4 = ComposerStaticInit89dc2c82c00051b8500b11edfc1a216b::$prefixDirsPsr4;
126
+ $loader->classMap = ComposerStaticInit89dc2c82c00051b8500b11edfc1a216b::$classMap;
127
 
128
  }, null, ClassLoader::class);
129
  }