def register_badge_settings(badge_slug=None, badge_name=None, params=None): settings.register( BooleanValue( BADGES, badge_slug + '_BADGE_ENABLED', default=True, description=_('Enable "%s" badge') % badge_name ) ) if params is None: return for param_slug, param_data in params.items(): param_description = param_data[0] param_default = param_data[1] settings.register( IntegerValue( BADGES, badge_slug + '_BADGE_' + param_slug, description=string_concat(badge_name, ': ', param_description), default=param_default))
from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from django.utils.translation import ugettext_lazy as _ from django.conf import settings as django_settings from askbot.skins import utils as skin_utils LOGIN_PROVIDERS = livesettings.ConfigurationGroup( 'LOGIN_PROVIDERS', _('Login provider setings'), super_group = LOGIN_USERS_COMMUNICATION ) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'PASSWORD_REGISTER_SHOW_PROVIDER_BUTTONS', default = True, description=_('Show alternative login provider buttons on the password "Sign Up" page'), ) ) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'SIGNIN_ALWAYS_SHOW_LOCAL_LOGIN', default = True, description=_('Always display local login form and hide "Askbot" button.'), ) ) settings.register( livesettings.BooleanValue(
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import REP_AND_BADGES from askbot.deps.livesettings import ConfigurationGroup, IntegerValue from django.utils.translation import ugettext as _ BADGES = ConfigurationGroup( 'BADGES', _('Badge settings'), ordering=2, super_group = REP_AND_BADGES ) settings.register( IntegerValue( BADGES, 'DISCIPLINED_BADGE_MIN_UPVOTES', default=3, description=_('Disciplined: minimum upvotes for deleted post') ) ) settings.register( IntegerValue( BADGES, 'PEER_PRESSURE_BADGE_MIN_DOWNVOTES', default=3, description=_('Peer Pressure: minimum downvotes for deleted post') ) ) settings.register( IntegerValue(
from askbot.conf.settings_wrapper import settings from askbot.deps.livesettings import ConfigurationGroup from askbot.deps.livesettings import values from django.utils.translation import ugettext as _ from django.conf import settings as django_settings from askbot.skins import utils as skin_utils from askbot import const GENERAL_SKIN_SETTINGS = ConfigurationGroup("GENERAL_SKIN_SETTINGS", _("Skin and User Interface settings")) settings.register( values.ImageValue( GENERAL_SKIN_SETTINGS, "SITE_LOGO_URL", description=_("Q&A site logo"), help_text=_("To change the logo, select new file, " "then submit this whole form."), upload_directory=django_settings.ASKBOT_FILE_UPLOAD_DIR, upload_url="/" + django_settings.ASKBOT_UPLOADED_FILES_URL, default="/images/logo.gif", url_resolver=skin_utils.get_media_url, ) ) settings.register( values.BooleanValue( GENERAL_SKIN_SETTINGS, "SHOW_LOGO", description=_("Show logo"), help_text=_( "Check if you want to show logo in the forum header " "or uncheck in the case you do not want the logo to " "appear in the default location"
""" Settings for askbot data display and entry """ from askbot.conf.settings_wrapper import settings from askbot.deps.livesettings import ConfigurationGroup, BooleanValue, IntegerValue from askbot.deps.livesettings import StringValue from django.utils.translation import ugettext as _ from askbot import const FORUM_DATA_RULES = ConfigurationGroup("FORUM_DATA_RULES", _("Settings for askbot data entry and display")) settings.register( BooleanValue(FORUM_DATA_RULES, "WIKI_ON", default=True, description=_("Check to enable community wiki feature")) ) settings.register( IntegerValue( FORUM_DATA_RULES, "MAX_TAG_LENGTH", default=20, description=_("Maximum length of tag (number of characters)") ) ) settings.register( IntegerValue( FORUM_DATA_RULES, "MAX_COMMENTS_TO_SHOW", default=5, description=_("Default max number of comments to display under posts"), ) ) settings.register(
_('Content moderation'), super_group=DATA_AND_FORMATTING ) CONTENT_MODERATION_MODE_CHOICES = ( ('flags', _('audit flagged posts')), ('audit', _('audit flagged posts and watched users')), ('premoderation', _('pre-moderate watched users and audit flagged posts')), ) settings.register( StringValue( MODERATION, 'CONTENT_MODERATION_MODE', choices=CONTENT_MODERATION_MODE_CHOICES, default='flags', description=_('Content moderation method'), help_text=_( "Audit is made after the posts are published, pre-moderation " "prevents publishing before moderator's decision.") ) ) settings.register( LongStringValue( MODERATION, 'FORBIDDEN_PHRASES', default='', description=_('Reject all posts with these phrases'), help_text=_( 'Enter one phrase per line (case-insensitive). ' 'Posts with these phrases will be rejected '
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import DATA_AND_FORMATTING from askbot.deps.livesettings import ConfigurationGroup from askbot.deps.livesettings import BooleanValue from django.core.cache import cache from django.utils.translation import ugettext as _ def empty_cache_callback(old_value, new_value): """used to clear cache on change of certain values""" if old_value != new_value: #todo: change this to warmup cache cache.clear() return new_value MODERATION = ConfigurationGroup( 'MODERATION', _('Content moderation'), super_group = DATA_AND_FORMATTING ) settings.register( BooleanValue( MODERATION, 'ENABLE_CONTENT_MODERATION', default = False, description = _('Enable content moderation'), update_callback = empty_cache_callback ) )
""" from askbot.conf.settings_wrapper import settings from askbot.deps import livesettings from django.utils.translation import ugettext as _ CATEGORIES = livesettings.ConfigurationGroup( 'CATEGORIES', _('Categories settings'), ordering=2 ) settings.register( livesettings.BooleanValue( CATEGORIES, 'ENABLE_CATEGORIES', default=False, description=_('Check to enable categories for content'), ) ) settings.register( livesettings.IntegerValue( CATEGORIES, 'CATEGORIES_MAX_TREE_DEPTH', default=3, description=_('Number of levels in the categories hierarchy tree'), ) ) settings.register( livesettings.StringValue(
from askbot.deps import livesettings from askbot import const from django.utils.translation import ugettext_lazy as _ from django.conf import settings as django_settings EMAIL_SUBJECT_PREFIX = getattr(django_settings, 'EMAIL_SUBJECT_PREFIX', '') EMAIL = livesettings.ConfigurationGroup('EMAIL', _('Email and email alert settings'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( livesettings.StringValue( EMAIL, 'EMAIL_SUBJECT_PREFIX', default=EMAIL_SUBJECT_PREFIX, description=_('Prefix for the email subject line'), help_text=_('This setting takes default from the django setting' 'EMAIL_SUBJECT_PREFIX. A value entered here will override' 'the default.'))) def get_default_admin_email(): try: return django_settings.ADMINS[0][1] except: return '' settings.register( livesettings.StringValue(
For example number of times a person can vote each day, etc. """ from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import REP_AND_BADGES from livesettings.values import ConfigurationGroup, IntegerValue from django.utils.translation import ugettext_lazy as _ VOTE_RULES = ConfigurationGroup('VOTE_RULES', _('Vote and flag limits'), ordering=1, super_group=REP_AND_BADGES) settings.register( IntegerValue(VOTE_RULES, 'MAX_VOTES_PER_USER_PER_DAY', default=30, description=_('Number of votes a user can cast per day'))) settings.register( IntegerValue(VOTE_RULES, 'MAX_FLAGS_PER_USER_PER_DAY', default=5, description=_('Maximum number of flags per user per day'))) settings.register( IntegerValue( VOTE_RULES, 'VOTES_LEFT_WARNING_THRESHOLD', default=5, description=_('Threshold for warning about remaining daily votes')))
Q&A website settings - title, desctiption, basic urls keywords """ from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import CONTENT_AND_UI from askbot.deps import livesettings from django.utils.translation import ugettext as _ QA_SITE_SETTINGS = livesettings.ConfigurationGroup( 'QA_SITE_SETTINGS', _('URLS, keywords & greetings'), super_group=CONTENT_AND_UI) settings.register( livesettings.StringValue(QA_SITE_SETTINGS, 'APP_TITLE', default=u'Askbot: Open Source Q&A Forum', description=_('Site title for the Q&A forum'))) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_KEYWORDS', default=u'Askbot,CNPROG,forum,community', description=_('Comma separated list of Q&A site keywords'))) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_COPYRIGHT', default='Copyright Askbot, 2010-2011.',
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import REP_AND_BADGES import livesettings KARMA_AND_BADGE_VISIBILITY = livesettings.ConfigurationGroup( 'KARMA_AND_BADGE_VISIBILITY', _('Karma & Badge visibility'), super_group=REP_AND_BADGES) settings.register( livesettings.StringValue( KARMA_AND_BADGE_VISIBILITY, 'KARMA_MODE', default='public', choices=( ('public', 'show publicly'), ('private', 'show to owners only'), ('hidden', 'hide completely'), ), # TODO: later implement hidden mode description=_("Visibility of karma"), clear_cache=True, help_text=_( "User's karma may be shown publicly or only to the owners"))) settings.register( livesettings.StringValue( KARMA_AND_BADGE_VISIBILITY, 'BADGES_MODE', default='public', choices=(('public', 'show publicly'), ('hidden', 'hide completely')), # TODO: later implement private mode
"""Settings for content moderation and spam control""" from django.utils.translation import ugettext as _ from askbot import const from askbot.deps import livesettings from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import EXTERNAL_SERVICES SPAM_AND_MODERATION = livesettings.ConfigurationGroup( 'SPAM_AND_MODERATION', _('Akismet spam protection'), super_group=EXTERNAL_SERVICES) settings.register( livesettings.BooleanValue( SPAM_AND_MODERATION, 'USE_AKISMET', description=_( 'Enable Akismet spam detection(keys below are required)'), default=False, help_text=_('To get an Akismet key please visit ' '<a href="%(url)s">Akismet site</a>') % {'url': const.DEPENDENCY_URLS['akismet']})) settings.register( livesettings.StringValue(SPAM_AND_MODERATION, 'AKISMET_API_KEY', description=_('Akismet key for spam detection')))
"""Settings for LDAP login for Askbot""" from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import EXTERNAL_SERVICES from askbot.deps import livesettings from django.utils.translation import ugettext_lazy as _ LDAP_SETTINGS = livesettings.ConfigurationGroup('LDAP_SETTINGS', _('LDAP login configuration'), super_group=EXTERNAL_SERVICES) settings.register( livesettings.BooleanValue( LDAP_SETTINGS, 'USE_LDAP_FOR_PASSWORD_LOGIN', description=_('Use LDAP authentication for the password login'), defaut=False)) settings.register( livesettings.BooleanValue( LDAP_SETTINGS, 'LDAP_AUTOCREATE_USERS', description=_('Automatically create user accounts when possible'), default=False, help_text=_( 'Potentially reduces number of steps in the registration process ' 'but can expose personal information, e.g. when LDAP login name is ' 'the same as email address or real name.'))) LDAP_PROTOCOL_VERSION_CHOICES = (('3', _('Version 3')), ('2', _('Version 2 (insecure and deprecated)!!!')))
User policy settings """ from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from django.conf import settings as django_settings from askbot.skins import utils as skin_utils from django.utils.translation import ugettext_lazy as _ from askbot import const USER_SETTINGS = livesettings.ConfigurationGroup( 'USER_SETTINGS', _('User settings'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( livesettings.LongStringValue( USER_SETTINGS, 'NEW_USER_GREETING', default='', description=_('On-screen greeting shown to the new users'))) settings.register( livesettings.BooleanValue( USER_SETTINGS, 'ALLOW_ANONYMOUS_FEEDBACK', default=True, description=_('Allow anonymous users send feedback'))) settings.register( livesettings.BooleanValue(USER_SETTINGS, 'EDITABLE_SCREEN_NAME', default=True, description=_('Allow editing user screen name')))
from askbot.deps.livesettings import ConfigurationGroup, LongStringValue from askbot.conf.super_groups import CONTENT_AND_UI from django.utils.translation import ugettext_lazy as _ FLATPAGES = ConfigurationGroup( 'FLATPAGES', _('Flatpages - about, privacy policy, etc.'), super_group = CONTENT_AND_UI ) settings.register( LongStringValue( FLATPAGES, 'FORUM_ABOUT', description=_('Text of the Q&A forum About page (html format)'), help_text=\ _( 'Save, then <a href="http://validator.w3.org/">' 'use HTML validator</a> on the "about" page to check your input.' ) ) ) settings.register( LongStringValue( FLATPAGES, 'FORUM_FAQ', description=_('Text of the Q&A forum FAQ page (html format)'), help_text=\ _( 'Save, then <a href="http://validator.w3.org/">' 'use HTML validator</a> on the "faq" page to check your input.'
""" User policy settings """ from askbot.conf.settings_wrapper import settings from askbot.deps import livesettings from django.utils.translation import ugettext as _ USER_SETTINGS = livesettings.ConfigurationGroup( 'USER_SETTINGS', _('User settings') ) settings.register( livesettings.BooleanValue( USER_SETTINGS, 'EDITABLE_SCREEN_NAME', default = True, description = _('Allow editing user screen name') ) ) settings.register( livesettings.BooleanValue( USER_SETTINGS, 'ALLOW_ACCOUNT_RECOVERY_BY_EMAIL', default = True, description = _('Allow account recovery by email') ) ) settings.register( livesettings.BooleanValue(
""" Social sharing settings """ from django.utils.translation import ugettext_lazy as _ from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import EXTERNAL_SERVICES from livesettings import ConfigurationGroup, BooleanValue, StringValue SOCIAL_SHARING = ConfigurationGroup('SOCIAL_SHARING', _('Content sharing'), super_group=EXTERNAL_SERVICES) settings.register( BooleanValue(SOCIAL_SHARING, 'RSS_ENABLED', default=True, description=_('Check to enable RSS feeds'))) settings.register( StringValue(SOCIAL_SHARING, 'SHARING_SUFFIX_TEXT', default='', description=_('Hashtag or suffix to sharing messages'))) settings.register( BooleanValue( SOCIAL_SHARING, 'ENABLE_SHARING_FACEBOOK', default=True, description=_('Check to enable sharing of questions on Facebook')))
FORUM_DATA_RULES = livesettings.ConfigurationGroup( 'FORUM_DATA_RULES', _('Data entry and display rules'), super_group = DATA_AND_FORMATTING ) EDITOR_CHOICES = ( ('markdown', 'markdown'), ('tinymce', 'WYSIWYG (tinymce)') ) settings.register( livesettings.StringValue( FORUM_DATA_RULES, 'EDITOR_TYPE', default = 'markdown', choices = EDITOR_CHOICES, description = _('Editor for the posts') ) ) COMMENTS_EDITOR_CHOICES = ( ('plain-text', 'Plain text editor'), ('rich-text', 'Same editor as for questions and answers') ) settings.register( livesettings.StringValue( FORUM_DATA_RULES, 'COMMENTS_EDITOR_TYPE', default='plain-text',
""" Settings for reputation changes that apply to user in response to various actions by the same users or others """ from askbot.conf.settings_wrapper import settings from askbot.deps.livesettings import ConfigurationGroup, IntegerValue from django.utils.translation import ugettext as _ BADGES = ConfigurationGroup('BADGES', _('Badge settings'), ordering=2) settings.register( IntegerValue( BADGES, 'DISCIPLINED_BADGE_MIN_UPVOTES', default=3, description=_('Disciplined: minimum upvotes for deleted post'))) settings.register( IntegerValue( BADGES, 'PEER_PRESSURE_BADGE_MIN_DOWNVOTES', default=3, description=_('Peer Pressure: minimum downvotes for deleted post'))) settings.register( IntegerValue(BADGES, 'TEACHER_BADGE_MIN_UPVOTES', default=1, description=_('Teacher: minimum upvotes for the answer')))
from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION import livesettings from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ from askbot.skins import utils as skin_utils LOGIN_PROVIDERS = livesettings.ConfigurationGroup( 'LOGIN_PROVIDERS', _('Login provider setings'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'TERMS_CONSENT_REQUIRED', default=False, description=_('Acceptance of terms required at registration'), help_text=settings.get_related_settings_info(('FLATPAGES', 'TERMS', True)) ) ) # TODO: remove this - we don't want the local login button # but instead always show the login/password field when used settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'SIGNIN_ALWAYS_SHOW_LOCAL_LOGIN', default=True, description=_('Always display local login form and hide "Askbot" button.'), ) )
from askbot.conf.settings_wrapper import settings from askbot.deps import livesettings from askbot import const from askbot.conf.super_groups import DATA_AND_FORMATTING from django.utils.translation import ugettext_lazy as _ FORUM_DATA_RULES = livesettings.ConfigurationGroup( 'FORUM_DATA_RULES', _('Data entry and display rules'), super_group=DATA_AND_FORMATTING) EDITOR_CHOICES = (('markdown', 'markdown'), ('tinymce', 'WYSIWYG (tinymce)')) settings.register( livesettings.StringValue(FORUM_DATA_RULES, 'EDITOR_TYPE', default='markdown', choices=EDITOR_CHOICES, description=_('Editor for the posts'))) COMMENTS_EDITOR_CHOICES = (('plain-text', 'Plain text editor'), ('rich-text', 'Same editor as for questions and answers')) settings.register( livesettings.StringValue(FORUM_DATA_RULES, 'COMMENTS_EDITOR_TYPE', default='plain-text', choices=COMMENTS_EDITOR_CHOICES, description=_('Editor for the comments'))) settings.register(
from askbot.conf.super_groups import CONTENT_AND_UI from django.utils.translation import ugettext_lazy as _ FLATPAGES = ConfigurationGroup( 'FLATPAGES', _('Messages and pages - about, privacy policy, etc.'), super_group = CONTENT_AND_UI ) settings.register( LongStringValue( FLATPAGES, 'FORUM_ABOUT', description=_('Text of the Q&A forum About page (html format)'), localized=True, help_text=\ _( 'Save, then <a href="http://validator.w3.org/">' 'use HTML validator</a> on the "about" page to check your input.' ) ) ) settings.register( LongStringValue( FLATPAGES, 'FORUM_FAQ', description=_('Text of the Q&A forum FAQ page (html format)'), localized=True, help_text=\ _(
from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from django.utils.translation import ugettext_lazy as _ from django.conf import settings as django_settings from askbot.skins import utils as skin_utils LOGIN_PROVIDERS = livesettings.ConfigurationGroup( 'LOGIN_PROVIDERS', _('Login provider setings'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'PASSWORD_REGISTER_SHOW_PROVIDER_BUTTONS', default=True, description= _('Show alternative login provider buttons on the password "Sign Up" page' ), )) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'SIGNIN_ALWAYS_SHOW_LOCAL_LOGIN', default=True, description=_( 'Always display local login form and hide "Askbot" button.'), )) settings.register(
from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from django.utils.translation import ugettext_lazy as _ from django.conf import settings as django_settings from askbot.skins import utils as skin_utils LOGIN_PROVIDERS = livesettings.ConfigurationGroup( 'LOGIN_PROVIDERS', _('Login provider setings'), super_group = LOGIN_USERS_COMMUNICATION ) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'PASSWORD_REGISTER_SHOW_PROVIDER_BUTTONS', default = False, description=_('Show alternative login provider buttons on the password "Sign Up" page'), ) ) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'SIGNIN_ALWAYS_SHOW_LOCAL_LOGIN', default = True, description=_('Always display local login form and hide "Askbot" button.'), ) ) settings.register( livesettings.BooleanValue(
from askbot.deps.livesettings import ConfigurationGroup, LongStringValue from askbot.conf.super_groups import CONTENT_AND_UI from django.utils.translation import ugettext_lazy as _ FLATPAGES = ConfigurationGroup( 'FLATPAGES', _('Messages and pages - about, privacy policy, etc.'), super_group=CONTENT_AND_UI) settings.register( LongStringValue( FLATPAGES, 'FORUM_ABOUT', description=_('Text of the Q&A forum About page (html format)'), localized=True, help_text=\ _( 'Save, then <a href="http://validator.w3.org/">' 'use HTML validator</a> on the "about" page to check your input.' ) ) ) settings.register( LongStringValue( FLATPAGES, 'FORUM_FAQ', description=_('Text of the Q&A forum FAQ page (html format)'), localized=True, help_text=\ _(
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import REP_AND_BADGES from askbot.deps import livesettings from django.utils.translation import ugettext as _ MIN_REP = livesettings.ConfigurationGroup( 'MIN_REP', _('Karma thresholds'), ordering=0, super_group = REP_AND_BADGES ) settings.register( livesettings.IntegerValue( MIN_REP, 'MIN_REP_TO_VOTE_UP', default=15, description=_('Upvote') ) ) settings.register( livesettings.IntegerValue( MIN_REP, 'MIN_REP_TO_VOTE_DOWN', default=100, description=_('Downvote') ) ) settings.register( livesettings.IntegerValue(
""" User policy settings """ from askbot.conf.settings_wrapper import settings from askbot.deps import livesettings from django.utils.translation import ugettext as _ from askbot import const USER_SETTINGS = livesettings.ConfigurationGroup('USER_SETTINGS', _('User settings')) settings.register( livesettings.BooleanValue(USER_SETTINGS, 'EDITABLE_SCREEN_NAME', default=True, description=_('Allow editing user screen name'))) settings.register( livesettings.BooleanValue( USER_SETTINGS, 'ALLOW_ACCOUNT_RECOVERY_BY_EMAIL', default=True, description=_('Allow account recovery by email'))) settings.register( livesettings.BooleanValue( USER_SETTINGS, 'ALLOW_ADD_REMOVE_LOGIN_METHODS', default=True, description=_('Allow adding and removing login methods')))
from askbot.deps.livesettings import values from django.utils.translation import ugettext_lazy as _ from askbot.conf.super_groups import CONTENT_AND_UI SIDEBAR_QUESTION = ConfigurationGroup(#shitty name - why sidebar? 'SIDEBAR_QUESTION', _('Question page banners and sidebar'), super_group = CONTENT_AND_UI ) settings.register( values.LongStringValue( SIDEBAR_QUESTION, 'QUESTION_PAGE_TOP_BANNER', description = _('Top banner'), default = '', help_text = _( 'When using this option, please ' 'use the HTML validation service to make sure that ' 'your input is valid and works well in all browsers.' ) ) ) settings.register( values.BooleanValue( SIDEBAR_QUESTION, 'QUESTION_PAGE_TOP_BANNER_ANON_ONLY', default=False, description=_('Show above only to anonymous users'), ) )
from django.utils.translation import ugettext_lazy as _ from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings EMAIL_TEXT = livesettings.ConfigurationGroup( 'EMAIL_TEXT', _('Email template phrases'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( livesettings.StringValue( EMAIL_TEXT, 'EMAIL_TEXT_SHORT_WELCOME', description=_('Short welcome message, for subject line'), default=_('Welcome to {{ SITE_NAME }}!'), help_text=_( '<b>NOTE: All email text settings allow placeholders: ' '{{ USER_NAME }}, {{ SITE_NAME }} and {{ SITE_LINK }}.</b>'))) settings.register( livesettings.LongStringValue( EMAIL_TEXT, 'EMAIL_TEXT_LONG_WELCOME', description=_('Longer welcome message, for email body'), default=_('<p>Please visit {{ SITE_NAME }} at {{ SITE_LINK }}, we ' 'look forward to your posts.</p>'), )) settings.register(
from askbot import const from askbot.conf.super_groups import DATA_AND_FORMATTING from django.utils.translation import ugettext as _ FORUM_DATA_RULES = livesettings.ConfigurationGroup( 'FORUM_DATA_RULES', _('Data entry and display rules'), super_group = DATA_AND_FORMATTING ) settings.register( livesettings.BooleanValue( FORUM_DATA_RULES, 'ENABLE_VIDEO_EMBEDDING', default = False, description = _( 'Enable embedding videos. ' '<em>Note: please read <a href="%(url)s>read this</a> first.</em>' ) % {'url': const.DEPENDENCY_URLS['embedding-video']} ) ) settings.register( livesettings.BooleanValue( FORUM_DATA_RULES, 'WIKI_ON', default = True, description = _('Check to enable community wiki feature') ) )
from askbot.deps.livesettings import values from askbot.conf.super_groups import CONTENT_AND_UI SIDEBAR_PROFILE = ConfigurationGroup( 'SIDEBAR_PROFILE', _('User profile sidebar'), super_group=CONTENT_AND_UI ) settings.register( values.LongStringValue( SIDEBAR_PROFILE, 'SIDEBAR_PROFILE', description=_('Custom sidebar'), default='', localized=True, help_text=_( 'Use this area to enter content at the TOP of the sidebar in HTML ' 'format. When using this option (as well as the sidebar footer), ' 'please use the HTML validation service to make sure that your ' 'input is valid and works well in all browsers.') ) ) settings.register( values.BooleanValue( SIDEBAR_PROFILE, 'SIDEBAR_PROFILE_ANON_ONLY', description=_('Show the text entered above only to anonymous users'), default=False )
EMAIL_SUBJECT_PREFIX = getattr(django_settings, 'EMAIL_SUBJECT_PREFIX', '') EMAIL = livesettings.ConfigurationGroup( 'EMAIL', _('Email and email alert settings'), super_group = LOGIN_USERS_COMMUNICATION ) settings.register( livesettings.StringValue( EMAIL, 'EMAIL_SUBJECT_PREFIX', default = EMAIL_SUBJECT_PREFIX, description = _('Prefix for the email subject line'), help_text = _( 'This setting takes default from the django setting' 'EMAIL_SUBJECT_PREFIX. A value entered here will override' 'the default.' ) ) ) def get_default_admin_email(): try: return django_settings.ADMINS[0][1] except: return '' settings.register( livesettings.StringValue(
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from askbot.skins import utils as skin_utils from askbot.utils.loading import module_exists LOGIN_PROVIDERS = livesettings.ConfigurationGroup( 'LOGIN_PROVIDERS', _('Login provider settings'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'TERMS_CONSENT_REQUIRED', default=False, description=_('Acceptance of terms required at registration'), help_text=settings.get_related_settings_info( ('FLATPAGES', 'TERMS', True)))) settings.register( livesettings.BooleanValue( LOGIN_PROVIDERS, 'SIGNIN_WORDPRESS_SITE_ENABLED', default=False, description=_('Activate to allow login with self-hosted ' 'wordpress site'), help_text=_('to activate this feature you must fill out the wordpress ' 'xml-rpc setting bellow'))) settings.register(
from django.conf import settings as django_settings from django.core.validators import ValidationError, validate_email import re from urlparse import urlparse QA_SITE_SETTINGS = livesettings.ConfigurationGroup( 'QA_SITE_SETTINGS', _('URLS, keywords & greetings'), super_group = CONTENT_AND_UI ) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_TITLE', default=u'Askbot: Open Source Q&A Forum', description=_('Site title for the Q&A forum') ) ) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_KEYWORDS', default=u'Askbot,forum,community', description=_('Comma separated list of Q&A site keywords') ) ) settings.register( livesettings.StringValue(
'FEEDBACK', _('Feedback settings'), super_group=LOGIN_USERS_COMMUNICATION ) FEEDBACK_MODE_CHOICES = ( ('open', _('Anyone')), ('auth-only', _('Only authenticated users')), ('disabled', _('Nobody, disable feedback form')) ) settings.register( livesettings.StringValue( FEEDBACK, 'FEEDBACK_MODE', default='open', choices=FEEDBACK_MODE_CHOICES, description=_('Who can send feedback') ) ) settings.register( livesettings.StringValue( FEEDBACK, 'FEEDBACK_SITE_URL', description=_('Feedback site URL'), help_text=_( 'If left empty, a simple internal feedback form ' 'will be used instead' )
""" from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import EXTERNAL_SERVICES from askbot.deps.livesettings import ConfigurationGroup, BooleanValue from django.utils.translation import ugettext_lazy as _ SOCIAL_SHARING = ConfigurationGroup( 'SOCIAL_SHARING', _('Content sharing'), super_group = EXTERNAL_SERVICES ) settings.register( BooleanValue( SOCIAL_SHARING, 'RSS_ENABLED', default=True, description=_('Check to enable RSS feeds') ) ) settings.register( BooleanValue( SOCIAL_SHARING, 'ENABLE_SHARING_TWITTER', default=True, description=_('Check to enable sharing of questions on Twitter') ) ) settings.register( BooleanValue(
from django.utils.translation import ugettext_lazy as _ from django.conf import settings as django_settings from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import CONTENT_AND_UI from askbot.deps import livesettings QA_SITE_SETTINGS = livesettings.ConfigurationGroup( 'QA_SITE_SETTINGS', _('URLS, keywords & greetings'), super_group=CONTENT_AND_UI) settings.register( livesettings.StringValue(QA_SITE_SETTINGS, 'APP_TITLE', default=_('My site'), description=_('Site title for the Q&A forum'))) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_KEYWORDS', default=u'Boism,forum,community', description=_('Comma separated list of Q&A site keywords'))) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_COPYRIGHT', default='Copyright Askbot, 2010-2011.',
KARMA_AND_BADGE_VISIBILITY = livesettings.ConfigurationGroup( 'KARMA_AND_BADGE_VISIBILITY', _('Karma & Badge visibility'), super_group=REP_AND_BADGES ) settings.register( livesettings.StringValue( KARMA_AND_BADGE_VISIBILITY, 'KARMA_MODE', default='public', choices=( ('public', 'show publicly'), ('private', 'show to owners only'), ('hidden', 'hide completely'), ), # TODO: Later implement hidden mode description=_("Visibility of karma"), clear_cache=True, help_text=_( "User's karma may be shown publicly or only to the owners" ) ) ) settings.register( livesettings.StringValue( KARMA_AND_BADGE_VISIBILITY, 'BADGES_MODE', default='public', choices=(
Settings for minimum reputation required for a variety of actions on the askbot askbot """ from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import REP_AND_BADGES from askbot.deps import livesettings from django.utils.translation import ugettext as _ MIN_REP = livesettings.ConfigurationGroup('MIN_REP', _('Karma thresholds'), ordering=0, super_group=REP_AND_BADGES) settings.register( livesettings.IntegerValue(MIN_REP, 'MIN_REP_TO_VOTE_UP', default=5, description=_('Upvote'))) settings.register( livesettings.IntegerValue(MIN_REP, 'MIN_REP_TO_VOTE_DOWN', default=50, description=_('Downvote'))) settings.register( livesettings.IntegerValue( MIN_REP, 'MIN_REP_TO_ANSWER_OWN_QUESTION', default=5, description=_('Answer own question immediately')))
from django.utils.translation import ugettext as _ from django.conf import settings as django_settings EMAIL_SUBJECT_PREFIX = getattr(django_settings, "EMAIL_SUBJECT_PREFIX", "") EMAIL = livesettings.ConfigurationGroup( "EMAIL", _("Email and email alert settings"), super_group=LOGIN_USERS_COMMUNICATION ) settings.register( livesettings.StringValue( EMAIL, "EMAIL_SUBJECT_PREFIX", default=EMAIL_SUBJECT_PREFIX, description=_("Prefix for the email subject line"), help_text=_( "This setting takes default from the django setting" "EMAIL_SUBJECT_PREFIX. A value entered here will override" "the default." ), ) ) settings.register( livesettings.IntegerValue( EMAIL, "MAX_ALERTS_PER_EMAIL", default=7, description=_("Maximum number of news entries in an email alert") ) ) settings.register( livesettings.StringValue(
""" from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import EXTERNAL_SERVICES from askbot.deps.livesettings import ConfigurationGroup, BooleanValue, StringValue from django.utils.translation import ugettext_lazy as _ SOCIAL_SHARING = ConfigurationGroup( 'SOCIAL_SHARING', _('Content sharing'), super_group = EXTERNAL_SERVICES ) settings.register( BooleanValue( SOCIAL_SHARING, 'RSS_ENABLED', default=True, description=_('Check to enable RSS feeds') ) ) settings.register( StringValue( SOCIAL_SHARING, 'SHARING_SUFFIX_TEXT', default='', description=_('Hashtag or suffix to sharing messages') ) ) settings.register( BooleanValue(
from django.conf import settings as django_settings from django.core.validators import ValidationError, validate_email import re from urlparse import urlparse QA_SITE_SETTINGS = livesettings.ConfigurationGroup( 'QA_SITE_SETTINGS', _('URLS, keywords & greetings'), super_group = CONTENT_AND_UI ) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_TITLE', default=u'Nordic Developer Zone', description=_('Site title for the Q&A forum') ) ) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_KEYWORDS', default=u'Nordic, nRF51822, nRF51422, nRF51, nRF8001, nRF8002, nRF24LE1, nRF24LU1+, questions, answers, help, discussion', description=_('Comma separated list of Q&A site keywords') ) ) settings.register( livesettings.StringValue(
from askbot.conf.settings_wrapper import settings from livesettings.values import ConfigurationGroup, LongStringValue from askbot.conf.super_groups import CONTENT_AND_UI FLATPAGES = ConfigurationGroup( 'FLATPAGES', _('Messages and pages - about, privacy policy, etc.'), super_group=CONTENT_AND_UI ) settings.register( LongStringValue( FLATPAGES, 'FORUM_ABOUT', description=_('Text of the Q&A forum About page (html format)'), default='', localized=True, help_text=_('Save, then <a href="http://validator.w3.org/">' 'use HTML validator</a> on the "about" page to check ' 'your input.') ) ) settings.register( LongStringValue( FLATPAGES, 'AUTHENTICATION_PAGE_MESSAGE', description=_('Message to display on the authentication pages'), default='', localized=True, help_text=_('Markdown format is accepted') )
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import CONTENT_AND_UI from askbot.deps import livesettings QA_SITE_SETTINGS = livesettings.ConfigurationGroup( 'QA_SITE_SETTINGS', _('URLS, keywords & greetings'), super_group=CONTENT_AND_UI ) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_TITLE', default=_('My site'), description=_('Site title for the Q&A forum') ) ) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_KEYWORDS', default=u'Askbot,forum,community', description=_('Comma separated list of Q&A site keywords') ) ) settings.register( livesettings.StringValue(
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from askbot.deps.livesettings import BooleanValue from askbot.deps.livesettings import StringValue from django.utils.translation import ugettext_lazy as _ ACCESS_CONTROL = livesettings.ConfigurationGroup( 'ACCESS_CONTROL', _('Access control settings'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( BooleanValue( ACCESS_CONTROL, 'READ_ONLY_MODE_ENABLED', default=False, description=_('Make site read-only'), )) settings.register( StringValue(ACCESS_CONTROL, 'READ_ONLY_MESSAGE', default=_( 'The site is temporarily read-only. ' 'Only viewing of the content is possible at the moment.'))) settings.register( livesettings.BooleanValue( ACCESS_CONTROL, 'ASKBOT_CLOSED_FORUM_MODE',
""" User policy settings """ from askbot.conf.settings_wrapper import settings from askbot.deps import livesettings from django.utils.translation import ugettext as _ USER_SETTINGS = livesettings.ConfigurationGroup( 'USER_SETTINGS', _('User policy settings') ) settings.register( livesettings.BooleanValue( USER_SETTINGS, 'EDITABLE_SCREEN_NAME', default=True, description=_('Allow editing user screen name') ) ) settings.register( livesettings.IntegerValue( USER_SETTINGS, 'MIN_USERNAME_LENGTH', hidden=True, default=1, description=_('Minimum allowed length for screen name') ) ) settings.register(
from askbot.conf.super_groups import EXTERNAL_SERVICES from askbot.deps import livesettings from django.utils.translation import ugettext_lazy as _ from django.conf import settings as django_settings EXTERNAL_KEYS = livesettings.ConfigurationGroup( 'EXTERNAL_KEYS', _('Keys for external services'), super_group=EXTERNAL_SERVICES) settings.register( livesettings.StringValue( EXTERNAL_KEYS, 'GOOGLE_SITEMAP_CODE', description=_('Google site verification key'), help_text=_('This key helps google index your site ' 'please obtain is at ' '<a href="%(url)s?hl=%(lang)s">' 'google webmasters tools site</a>') % { 'url': const.DEPENDENCY_URLS['google-webmaster-tools'], 'lang': django_settings.LANGUAGE_CODE, })) settings.register( livesettings.StringValue( EXTERNAL_KEYS, 'GOOGLE_ANALYTICS_KEY', description=_('Google Analytics key'), help_text=_( 'Obtain is at <a href="%(url)s">' 'Google Analytics</a> site, if you ' 'wish to use Google Analytics to monitor '
from askbot.conf.super_groups import REP_AND_BADGES from livesettings import ConfigurationGroup, IntegerValue VOTE_RULES = ConfigurationGroup( 'VOTE_RULES', _('Vote and flag limits'), ordering=1, super_group=REP_AND_BADGES ) settings.register( IntegerValue( VOTE_RULES, 'MAX_VOTES_PER_USER_PER_DAY', default=30, description=_('Number of votes a user can cast per day') ) ) settings.register( IntegerValue( VOTE_RULES, 'MAX_FLAGS_PER_USER_PER_DAY', default=5, description=_('Maximum number of flags per user per day') ) ) settings.register( IntegerValue(
from askbot.conf.settings_wrapper import settings from askbot.deps.livesettings import ConfigurationGroup from askbot.deps.livesettings import values from django.utils.translation import ugettext_lazy as _ from askbot.skins import utils as skin_utils from askbot import const from askbot.conf.super_groups import CONTENT_AND_UI WORDS = ConfigurationGroup('WORDS', _('Site terms vocabulary'), super_group=CONTENT_AND_UI) settings.register( values.StringValue(WORDS, 'WORDS_ASK_YOUR_QUESTION', default=_('Ask Your Question'), description=_('Ask Your Question'), help_text=_('Used on a button'), localized=True)) settings.register( values.StringValue(WORDS, 'WORDS_ASK_THE_GROUP', default=_('Ask the Group'), description=_('Ask the Group'), help_text=_('Used on a button'), localized=True)) settings.register( values.StringValue(WORDS, 'WORDS_POST_YOUR_ANSWER',
"""Group settings""" from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from django.utils.translation import ugettext as _ GROUP_SETTINGS = livesettings.ConfigurationGroup( 'GROUP_SETTINGS', _('Group settings'), super_group = LOGIN_USERS_COMMUNICATION ) settings.register( livesettings.BooleanValue( GROUP_SETTINGS, 'GROUPS_ENABLED', default = False, description = _('Enable user groups'), ) ) def group_name_update_callback(old_name, new_name): from askbot.models.tag import clean_group_name from askbot.models import Group cleaned_new_name = clean_group_name(new_name.strip()) if new_name == '': #name cannot be empty return old_name group = Group.objects.get_global_group() group.name = cleaned_new_name
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from askbot import const EMAIL_SUBJECT_PREFIX = getattr(django_settings, 'EMAIL_SUBJECT_PREFIX', '') EMAIL = livesettings.ConfigurationGroup('EMAIL', _('Email and email alert settings'), super_group=LOGIN_USERS_COMMUNICATION) settings.register( livesettings.StringValue( EMAIL, 'EMAIL_SUBJECT_PREFIX', default=EMAIL_SUBJECT_PREFIX, description=_('Prefix for the email subject line'), help_text=_('This setting takes default from the django setting ' 'EMAIL_SUBJECT_PREFIX. A value entered here will override ' 'the default.'))) def get_default_admin_email(): try: return django_settings.ADMINS[0][1] except (AttributeError, IndexError): return '' settings.register( livesettings.StringValue(
return new_value SITE_MODES = ConfigurationGroup( 'SITE_MODES', _('Bootstrap mode'), super_group = REP_AND_BADGES ) settings.register( BooleanValue( SITE_MODES, 'ACTIVATE_LARGE_SITE_MODE', default=False, description=_( 'Activate a "Large site" mode'), help_text=_( "\"Large site\" mode increases reputation and certain badge " "thresholds, to values, more suitable " "for the larger communities, " "<strong>WARNING:</strong> your current values for " "Minimum reputation, " "Badge Settings and " "Vote Rules will " "be changed after you modify this setting." ), update_callback=bootstrap_callback ) )
from askbot.conf.settings_wrapper import settings from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION from askbot.deps import livesettings from django.utils.translation import ugettext_lazy as _ import re FEEDBACK = livesettings.ConfigurationGroup( 'FEEDBACK', _('Feedback settings'), super_group=LOGIN_USERS_COMMUNICATION) FEEDBACK_MODE_CHOICES = (('open', _('Anyone')), ('auth-only', _('Only authenticated users')), ('disabled', _('Nobody, disable feedback form'))) settings.register( livesettings.StringValue(FEEDBACK, 'FEEDBACK_MODE', default='open', choices=FEEDBACK_MODE_CHOICES, description=_('Who can send feedback'))) settings.register( livesettings.StringValue( FEEDBACK, 'FEEDBACK_SITE_URL', description=_('Feedback site URL'), help_text=_('If left empty, a simple internal feedback form ' 'will be used instead'))) def feedback_emails_callback(old_value, new_value): """validates the fedback emails list""" emails = []
FORUM_DATA_RULES = livesettings.ConfigurationGroup( 'FORUM_DATA_RULES', _('Data entry and display rules'), super_group = DATA_AND_FORMATTING ) EDITOR_CHOICES = ( ('markdown', 'markdown'), ('tinymce', 'WISYWIG (tinymce)') ) settings.register( livesettings.StringValue( FORUM_DATA_RULES, 'EDITOR_TYPE', default = 'markdown', choices = EDITOR_CHOICES, description = _('Editor for the posts') ) ) settings.register( livesettings.BooleanValue( FORUM_DATA_RULES, 'ENABLE_VIDEO_EMBEDDING', default = False, description = _('Enable embedding videos. '), help_text = _( '<em>Note: please read <a href="%(url)s">read this</a> first.</em>' ) % {'url': const.DEPENDENCY_URLS['embedding-video']} )
for key, value in LARGE_SITE_MODE_SETTINGS.items(): settings.update(key, value) else: for key in LARGE_SITE_MODE_SETTINGS: settings.reset(key) return new_value SITE_MODES = ConfigurationGroup('SITE_MODES', _('Bootstrap mode'), super_group=REP_AND_BADGES) settings.register( BooleanValue( SITE_MODES, 'ACTIVATE_LARGE_SITE_MODE', default=False, description=_('Activate a "Large site" mode'), help_text=_( "\"Large site\" mode increases reputation and certain badge " "thresholds, to values, more suitable " "for the larger communities, " "<strong>WARNING:</strong> your current values for " "Minimum reputation, " "Badge Settings and " "Vote Rules will " "be changed after you modify this setting."), update_callback=bootstrap_callback))
from django.utils.translation import ugettext_lazy as _ from askbot.skins import utils as skin_utils from askbot import const from askbot.conf.super_groups import CONTENT_AND_UI WORDS = ConfigurationGroup( 'WORDS', _('Site terms vocabulary'), super_group = CONTENT_AND_UI ) settings.register( values.StringValue( WORDS, 'WORDS_ASK_YOUR_QUESTION', default=_('Exchange Your Book'), description=_('Ask Your Question'), help_text=_('Used on a button') ) ) settings.register( values.StringValue( WORDS, 'WORDS_PLEASE_ENTER_YOUR_QUESTION', default=_('Please publish your book here'), description=_('Please enter your question'), ) ) settings.register(
""" from askbot.conf.settings_wrapper import settings from askbot.deps.livesettings import ConfigurationGroup from askbot.deps.livesettings import values from django.utils.translation import ugettext_lazy as _ from askbot.conf.super_groups import CONTENT_AND_UI SIDEBAR_QUESTION = ConfigurationGroup( #shitty name - why sidebar? 'SIDEBAR_QUESTION', _('Question page banners and sidebar'), super_group=CONTENT_AND_UI) settings.register( values.LongStringValue( SIDEBAR_QUESTION, 'QUESTION_PAGE_TOP_BANNER', description=_('Top banner'), default='', help_text=_('When using this option, please ' 'use the HTML validation service to make sure that ' 'your input is valid and works well in all browsers.'))) settings.register( values.BooleanValue( SIDEBAR_QUESTION, 'QUESTION_PAGE_TOP_BANNER_ANON_ONLY', default=False, description=_('Show above only to anonymous users'), )) settings.register( values.LongStringValue(
if url.startswith('/'): return url validate = URLValidator() try: validate(url) return url except ValidationError: raise ValueError(_('Please enter a valid url')) settings.register( values.StringValue( GENERAL_SKIN_SETTINGS, 'LOGO_DESTINATION_URL', default = '', description = _('Custom destination URL for the logo'), update_callback=logo_destination_callback ) ) settings.register( values.ImageValue( GENERAL_SKIN_SETTINGS, 'SITE_LOGO_URL', description = _('Q&A site logo'), help_text = _( 'To change the logo, select new file, ' 'then submit this whole form.' ),
from askbot.conf.super_groups import CONTENT_AND_UI from askbot.deps import livesettings from django.utils.translation import ugettext_lazy as _ from django.conf import settings as django_settings from django.core.validators import ValidationError, validate_email import re from urlparse import urlparse QA_SITE_SETTINGS = livesettings.ConfigurationGroup( 'QA_SITE_SETTINGS', _('URLS, keywords & greetings'), super_group=CONTENT_AND_UI) settings.register( livesettings.StringValue(QA_SITE_SETTINGS, 'APP_TITLE', default=_('My site'), description=_('Site title for the Q&A forum'))) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_KEYWORDS', default=u'Askbot,forum,community', description=_('Comma separated list of Q&A site keywords'))) settings.register( livesettings.StringValue( QA_SITE_SETTINGS, 'APP_COPYRIGHT', default='Copyright Askbot, 2010-2011.',