Rafał Pitoń 7 years ago
parent
commit
015c1bfd12

+ 15 - 0
docs/settings/Core.md

@@ -128,7 +128,13 @@ In case of more events than specified being found, oldest events will be truncat
 Hourly limit of posts that may be posted from single account. Fail-safe for situations when forum is flooded by spam bot. Change to 0 to lift this restriction.
 
 
+## `MISAGO_LOGO`
+
+URL to logo image, relative to `STATIC_URL`.
+
+
 ## `MISAGO_LOGIN_API_URL`
+
 URL to API endpoint used to authenticate sign-in credentials. Musn't contain api prefix or wrapping slashes. Defaults to 'auth/login'.
 
 
@@ -246,6 +252,15 @@ Path to function or callable used by Misago to generate slugs. Defaults to `misa
 Minimum confidence returned by [Stop Forum Spam](http://www.stopforumspam.com/) for Misago to reject new registration and block IP address for 1 day.
 
 
+## `MISAGO_STYLE`
+
+This dict allows you override some CSS classes used by Misago in its style. For example, to specify custom CSS classess to use in Misago's navbar, you may add following to your `settings.py`:
+
+    MISAGO_STYLE = {
+        'navbar': 'navbar-dark bg-primary',
+    }
+
+
 ## `MISAGO_THREADS_ON_INDEX`
 
 Change this setting to `False` to display categories list instead of threads list on board index.

+ 1 - 6
docs/settings/Database.md

@@ -34,14 +34,9 @@ Default avatar assigned to new accounts. Can be either `initials` for randomly g
 Default timezone used by guests and newly registered users that haven't changed their timezone prefferences.
 
 
-## forum_branding_display
-
-Controls branding's visibility in forum navbar.
-
-
 ## forum_branding_text
 
-Allows you to include text besides brand logo on your forum.
+Allows you to specify default text displayed besides brand logo on your forum.
 
 
 ## forum_name

+ 1 - 1
frontend/src/components/avatar.js

@@ -19,7 +19,7 @@ export default function(props) {
 }
 
 export function getSrc(user, size) {
-  if (user && user.id) {
+  if (!!user && user.id) {
     // just avatar hash, size and user id
     return resolveAvatarForSize(user.avatars, size).url;
   } else {

+ 10 - 0
misago/conf/context_processors.py

@@ -6,14 +6,22 @@ from .gateway import settings as misago_settings  # noqa
 from .gateway import db_settings
 
 
+LOGO_URL = static(misago_settings.MISAGO_LOGO)
 BLANK_AVATAR_URL = static(misago_settings.MISAGO_BLANK_AVATAR)
 
+STYLE = misago_settings._MISAGO_STYLE_DEFAULT.copy()
+
+if misago_settings.MISAGO_STYLE:
+    STYLE.update(MISAGO_STYLE)
+
 
 def settings(request):
     return {
+        'MISAGO_STYLE': STYLE,
         'DEBUG': misago_settings.DEBUG,
         'LANGUAGE_CODE_SHORT': get_language()[:2],
         'misago_settings': db_settings,
+        'LOGO_URL': LOGO_URL,
         'BLANK_AVATAR_URL': BLANK_AVATAR_URL,
         'THREADS_ON_INDEX': misago_settings.MISAGO_THREADS_ON_INDEX,
         'LOGIN_REDIRECT_URL': misago_settings.LOGIN_REDIRECT_URL,
@@ -27,11 +35,13 @@ def preload_settings_json(request):
     request.frontend_context['conf'].update({
         'csrf_cookie_name': misago_settings.CSRF_COOKIE_NAME,
         'threads_on_index': misago_settings.MISAGO_THREADS_ON_INDEX,
+        'style': STYLE,
     })
 
     request.frontend_context['url'].update({
         'index': reverse('misago:index'),
         'blank_avatar': BLANK_AVATAR_URL,
+        'logo': LOGO_URL,
         'login_redirect': reverse(misago_settings.LOGIN_REDIRECT_URL),
         'login': reverse(misago_settings.LOGIN_URL),
         'logout': reverse(misago_settings.LOGOUT_URL),

+ 16 - 0
misago/conf/defaults.py

@@ -183,6 +183,22 @@ MISAGO_AVATARS_SIZES = [400, 200, 150, 100, 64, 50, 30]
 MISAGO_BLANK_AVATAR = 'blank-avatar.png'
 
 
+# Path to default logo image used in navbar.
+
+MISAGO_LOGO = 'logo.png'
+
+
+# Empty style options and defaults
+
+MISAGO_STYLE = {}
+
+# Default style settings that are updated with user-entered MISAGO_STYLE
+
+_MISAGO_STYLE_DEFAULT = {
+    'navbar': 'navbar-light bg-light',
+}
+
+
 # Threads lists pagination settings
 
 MISAGO_THREADS_PER_PAGE = 25

+ 21 - 0
misago/core/migrations/0003_remove_forum_branding_display_setting.py

@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.6 on 2017-11-03 23:12
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+def remove_forum_branding_display_setting(apps, schema_editor):
+    Setting = apps.get_model('misago_conf', 'Setting')
+    Setting.objects.filter(setting='forum_branding_display').delete()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('misago_core', '0002_basic_settings'),
+    ]
+
+    operations = [
+        migrations.RunPython(remove_forum_branding_display_setting),
+    ]

+ 12 - 9
misago/legal/context_processors.py

@@ -4,22 +4,25 @@ from misago.conf import settings
 
 
 def legal_links(request):
-    if settings.terms_of_service_link:
+    if settings.privacy_policy_link:
         request.frontend_context['url'].update({
-            'tos': settings.terms_of_service_link,
+            'privacy_policy': settings.privacy_policy_link,
         })
-    elif settings.terms_of_service:
+    elif settings.privacy_policy:
         request.frontend_context['url'].update({
-            'tos': reverse('misago:terms-of-service'),
+            'privacy_policy': reverse('misago:privacy-policy'),
         })
 
-    if settings.privacy_policy_link:
+    if settings.terms_of_service_link:
         request.frontend_context['url'].update({
-            'privacy_policy': settings.privacy_policy_link,
+            'tos': settings.terms_of_service_link,
         })
-    elif settings.privacy_policy:
+    elif settings.terms_of_service:
         request.frontend_context['url'].update({
-            'privacy_policy': reverse('misago:privacy-policy'),
+            'tos': reverse('misago:terms-of-service'),
         })
 
-    return {}
+    return {
+        'privacy_policy': settings.privacy_policy_link or settings.privacy_policy,
+        'terms_of_service': settings.terms_of_service_link or settings.terms_of_service,
+    }

+ 5 - 2
misago/project_template/project_name/settings.py

@@ -138,19 +138,22 @@ STATICFILES_DIRS = [
 ]
 
 
+# Path to default logo image used in navbar, should be relative to STATIC_URL.
+
+MISAGO_LOGO = 'logo.png'
+
+
 # Email configuration
 # https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/#email-backend
 
 EMAIL_HOST = 'localhost'
 EMAIL_PORT = 25
 
-
 # If either of these settings is empty, Django won't attempt authentication.
 
 EMAIL_HOST_USER = ''
 EMAIL_HOST_PASSWORD = ''
 
-
 # Default email address to use for various automated correspondence from the site manager(s).
 
 DEFAULT_FROM_EMAIL = 'Forums <%s>' % EMAIL_HOST_USER

+ 2 - 16
misago/users/serializers/auth.py

@@ -25,18 +25,8 @@ __all__ = [
 ]
 
 
-class AuthFlags(object):
-    def get_is_authenticated(self, obj):
-        return bool(obj.is_authenticated)
-
-    def get_is_anonymous(self, obj):
-        return bool(obj.is_anonymous)
-
-
-class AuthenticatedUserSerializer(UserSerializer, AuthFlags):
+class AuthenticatedUserSerializer(UserSerializer):
     email = serializers.SerializerMethodField()
-    is_authenticated = serializers.SerializerMethodField()
-    is_anonymous = serializers.SerializerMethodField()
 
     class Meta:
         model = UserModel
@@ -46,8 +36,6 @@ class AuthenticatedUserSerializer(UserSerializer, AuthFlags):
             'unread_private_threads',
             'subscribe_to_started_threads',
             'subscribe_to_replied_threads',
-            'is_authenticated',
-            'is_anonymous',
         ]
 
     def get_acl(self, obj):
@@ -79,11 +67,9 @@ AuthenticatedUserSerializer = AuthenticatedUserSerializer.exclude_fields(
 )
 
 
-class AnonymousUserSerializer(serializers.Serializer, AuthFlags):
+class AnonymousUserSerializer(serializers.Serializer):
     id = serializers.ReadOnlyField()
     acl = serializers.SerializerMethodField()
-    is_authenticated = serializers.SerializerMethodField()
-    is_anonymous = serializers.SerializerMethodField()
 
     def get_acl(self, obj):
         if hasattr(obj, 'acl_cache'):