Browse Source

Fix build, commit missing files

Rafał Pitoń 6 years ago
parent
commit
938bd03c8e

+ 57 - 0
frontend/src/components/accept-agreement.js

@@ -0,0 +1,57 @@
+/* jshint ignore:start */
+import React from 'react';
+import ajax from 'misago/services/ajax'
+
+export default class AcceptAgreement extends React.Component {
+  constructor(props) {
+    super(props);
+
+    this.state = { submiting: false };
+  }
+
+  handleDecline = () => {
+    if (this.state.submiting) return;
+
+    const confirmation = confirm(gettext("Declining will result in immediate deactivation and deletion of your account. This action is not reversible."));
+    if (!confirmation) return;
+
+    this.setState({ submiting: true });
+
+    ajax.post(this.props.api, { accept: false }).then(() => {
+      location.reload(true)
+    })
+  }
+
+  handleAccept = () => {
+    if (this.state.submiting) return;
+
+    this.setState({ submiting: true });
+
+    ajax.post(this.props.api, { accept: true }).then(() => {
+      location.reload(true)
+    })
+  }
+
+  render() {
+    return (
+      <div>
+        <button
+          className="btn btn-default"
+          disabled={this.state.submiting}
+          type="buton"
+          onClick={this.handleDecline}
+        >
+          {gettext("Decline")}
+        </button>
+        <button
+          className="btn btn-primary"
+          disabled={this.state.submiting}
+          type="buton"
+          onClick={this.handleAccept}
+        >
+          {gettext("Accept and continue")}
+        </button>
+      </div>
+    );
+  }
+}

+ 21 - 0
frontend/src/initializers/components/accept-agreement.js

@@ -0,0 +1,21 @@
+/* jshint ignore:start */
+import React from 'react';
+import misago from 'misago/index';
+import AcceptAgreement from 'misago/components/accept-agreement';
+import mount from 'misago/utils/mount-component';
+
+export default function initializer(context) {
+  if (document.getElementById('required-agreement-mount')) {
+    mount(
+      <AcceptAgreement api={context.get('REQUIRED_AGREEMENT_API')} />,
+      'required-agreement-mount',
+      false
+    );
+  }
+}
+
+misago.addInitializer({
+  name: 'component:accept-agreement',
+  initializer: initializer,
+  after: 'store'
+});

+ 1 - 1
misago/legal/context_processors.py

@@ -37,8 +37,8 @@ def legal_links(request):
             'misago:api:submit-agreement', kwargs={'pk': required_agreement.pk})
             'misago:api:submit-agreement', kwargs={'pk': required_agreement.pk})
 
 
         legal_context['misago_agreement'] = {
         legal_context['misago_agreement'] = {
-            'title': required_agreement.get_final_title(),
             'type': required_agreement.get_type_display(),
             'type': required_agreement.get_type_display(),
+            'title': required_agreement.get_final_title(),
             'link': required_agreement.link,
             'link': required_agreement.link,
             'text': get_parsed_agreement_text(request, required_agreement)
             'text': get_parsed_agreement_text(request, required_agreement)
         }
         }

+ 14 - 10
misago/legal/tests/test_context_processors.py

@@ -46,6 +46,7 @@ class PrivacyPolicyTests(AuthenticatedUserTestCase):
             'TERMS_OF_SERVICE_URL': None,
             'TERMS_OF_SERVICE_URL': None,
             'PRIVACY_POLICY_URL': reverse('misago:privacy-policy'),
             'PRIVACY_POLICY_URL': reverse('misago:privacy-policy'),
             'misago_agreement': {
             'misago_agreement': {
+                'type': 'Privacy policy',
                 'title': 'Privacy policy',
                 'title': 'Privacy policy',
                 'link': None,
                 'link': None,
                 'text': '<p>Lorem ipsum</p>',
                 'text': '<p>Lorem ipsum</p>',
@@ -66,6 +67,7 @@ class PrivacyPolicyTests(AuthenticatedUserTestCase):
             'TERMS_OF_SERVICE_URL': None,
             'TERMS_OF_SERVICE_URL': None,
             'PRIVACY_POLICY_URL': 'http://test.com',
             'PRIVACY_POLICY_URL': 'http://test.com',
             'misago_agreement': {
             'misago_agreement': {
+                'type': 'Privacy policy',
                 'title': 'Privacy policy',
                 'title': 'Privacy policy',
                 'link': 'http://test.com',
                 'link': 'http://test.com',
                 'text': None,
                 'text': None,
@@ -82,6 +84,7 @@ class PrivacyPolicyTests(AuthenticatedUserTestCase):
             'TERMS_OF_SERVICE_URL': None,
             'TERMS_OF_SERVICE_URL': None,
             'PRIVACY_POLICY_URL': 'http://test.com',
             'PRIVACY_POLICY_URL': 'http://test.com',
             'misago_agreement': {
             'misago_agreement': {
+                'type': 'Privacy policy',
                 'title': 'Privacy policy',
                 'title': 'Privacy policy',
                 'link': 'http://test.com',
                 'link': 'http://test.com',
                 'text': '<p>Lorem ipsum</p>',
                 'text': '<p>Lorem ipsum</p>',
@@ -117,17 +120,16 @@ class TermsOfServiceTests(AuthenticatedUserTestCase):
 
 
         context_dict = legal_links(MockRequest(self.user))
         context_dict = legal_links(MockRequest(self.user))
 
 
-        self.assertEqual(
-            context_dict, {
-                'TERMS_OF_SERVICE_URL': reverse('misago:terms-of-service'),
-                'PRIVACY_POLICY_URL': None,
-                'misago_agreement': {
-                    'title': 'Terms of service',
-                    'link': None,
-                    'text': '<p>Lorem ipsum</p>',
-                }
+        self.assertEqual(context_dict, {
+            'TERMS_OF_SERVICE_URL': reverse('misago:terms-of-service'),
+            'PRIVACY_POLICY_URL': None,
+            'misago_agreement': {
+                'type': 'Terms of service',
+                'title': 'Terms of service',
+                'link': None,
+                'text': '<p>Lorem ipsum</p>',
             }
             }
-        )
+        })
 
 
     def test_context_processor_remote_tos(self):
     def test_context_processor_remote_tos(self):
         """context processor has TOS link to remote url"""
         """context processor has TOS link to remote url"""
@@ -143,6 +145,7 @@ class TermsOfServiceTests(AuthenticatedUserTestCase):
             'TERMS_OF_SERVICE_URL': 'http://test.com',
             'TERMS_OF_SERVICE_URL': 'http://test.com',
             'PRIVACY_POLICY_URL': None,
             'PRIVACY_POLICY_URL': None,
             'misago_agreement': {
             'misago_agreement': {
+                'type': 'Terms of service',
                 'title': 'Terms of service',
                 'title': 'Terms of service',
                 'link': 'http://test.com',
                 'link': 'http://test.com',
                 'text': None,
                 'text': None,
@@ -159,6 +162,7 @@ class TermsOfServiceTests(AuthenticatedUserTestCase):
             'TERMS_OF_SERVICE_URL': 'http://test.com',
             'TERMS_OF_SERVICE_URL': 'http://test.com',
             'PRIVACY_POLICY_URL': None,
             'PRIVACY_POLICY_URL': None,
             'misago_agreement': {
             'misago_agreement': {
+                'type': 'Terms of service',
                 'title': 'Terms of service',
                 'title': 'Terms of service',
                 'link': 'http://test.com',
                 'link': 'http://test.com',
                 'text': '<p>Lorem ipsum</p>',
                 'text': '<p>Lorem ipsum</p>',

+ 22 - 0
misago/templates/misago/required_agreement.html

@@ -0,0 +1,22 @@
+{% load i18n %}
+<div class="agreement-overlay">
+  <div class="container">
+    <div class="agreement-content">
+      <div class="agreement-header">
+        <h2>{{ misago_agreement.title }}</h2>
+        <p class="lead">
+          {% blocktrans trimmed with agreement=misago_agreement.type %}
+            Please review the updated {{ agreement }}:
+          {% endblocktrans %}
+        </p>
+      </div>
+      <div class="agreement-body">
+        <article class="misago-markup">
+          {{ misago_agreement.text|safe }}
+        </article>
+      </div>
+      <div id="required-agreement-mount" class="agreement-footer">
+      </div>
+    </div>
+  </div>
+</div>