Exemplo n.º 1
0
def setup_indices():
    from .models import Post
    global post_index

    try:
        post_index = Post.indexer
    except Exception as e:
        from djapian.indexer import Indexer

        searchboard_post_index = sphsettings.get_sph_setting('sphsearchboard_post_index', '/var/cache/sct/postindex/')

        if not os.path.isdir(searchboard_post_index):
            os.makedirs(searchboard_post_index)

        Post.index_model = 'sphene.sphsearchboard.models.post_index'
        post_index = Indexer(
            path=searchboard_post_index,

            model=Post,

            fields=[('subject', 20), 'body'],

            tags=[
                ('subject', 'subject', 20),
                ('date', 'postdate'),
                ('category', 'category.name'),
                ('post_id', 'id'),
                ('category_id', 'category.id'),
                ('group_id', 'category.group.id'),
            ])

        post_index.boolean_fields = ('category_id', 'group_id',)
def setup_indices():
    from .models import Post
    global post_index

    try:
        post_index = Post.indexer
    except Exception as e:
        from djapian.indexer import Indexer

        searchboard_post_index = sphsettings.get_sph_setting(
            'sphsearchboard_post_index', '/var/cache/sct/postindex/')

        if not os.path.isdir(searchboard_post_index):
            os.makedirs(searchboard_post_index)

        Post.index_model = 'sphene.sphsearchboard.models.post_index'
        post_index = Indexer(path=searchboard_post_index,
                             model=Post,
                             fields=[('subject', 20), 'body'],
                             tags=[
                                 ('subject', 'subject', 20),
                                 ('date', 'postdate'),
                                 ('category', 'category.name'),
                                 ('post_id', 'id'),
                                 ('category_id', 'category.id'),
                                 ('group_id', 'category.group.id'),
                             ])

        post_index.boolean_fields = (
            'category_id',
            'group_id',
        )
def get_public_emailaddress_help():
    # TODO also add a notice about wether anonymous user require to enter a captcha ?
    if get_sph_setting('community_email_show_only_public'):
        return _(
            'This email address will be shown to all users. If you leave it black noone will see your email address.')
    return _(
        'This email address will be shown to all users. If you leave it blank, your verified email address will be shown.')
Exemplo n.º 4
0
 def clean_username(self):
     case_sensitive_uname = sphsettings.get_sph_setting('community_register_username_casesensitive', True)
     if ((case_sensitive_uname and User.objects.filter(username__exact=self.cleaned_data['username']).exists())
         or
         (not case_sensitive_uname and User.objects.filter(username__iexact=self.cleaned_data['username']).exists())):
         raise forms.ValidationError(ugettext(u'The username %(username)s is already taken.') % {'username': self.cleaned_data['username']})
     return self.cleaned_data['username']
Exemplo n.º 5
0
class CommunityUserProfile(models.Model):
    user = models.ForeignKey( User, unique = True, verbose_name=ugettext_lazy(u'User'))
    displayname = models.CharField(ugettext_lazy(u'Display name'), max_length = 250)
    public_emailaddress = models.CharField(ugettext_lazy(u'Public email address'), max_length = 250)

    avatar = models.ImageField( ugettext_lazy(u'Avatar'),
                                height_field = 'avatar_height',
                                width_field = 'avatar_width',
                                upload_to = get_sph_setting('community_avatar_upload_to'),
                                blank = True, null = True, )
    avatar_height = models.IntegerField(ugettext_lazy(u'Avatar height'), blank = True, null = True, )
    avatar_width = models.IntegerField(ugettext_lazy(u'Avatar width'), blank = True, null = True, )


    changelog = ( ( '2007-08-10 00', 'alter', 'ADD avatar varchar(100)'   ),
                  ( '2007-08-10 01', 'alter', 'ADD avatar_height integer' ),
                  ( '2007-08-10 02', 'alter', 'ADD avatar_width integer'  ),
                  ( '2008-04-10 00', 'alter', 'ADD displayname varchar(250)' ),
                  ( '2008-04-10 01', 'update', "SET displayname = ''" ),
                  ( '2008-04-10 02', 'alter', 'ALTER displayname SET NOT NULL' ),
                )

    class Meta:
        verbose_name = ugettext_lazy('Community user profile')
        verbose_name_plural = ugettext_lazy('Community user profiles')
 def process_view(self, request, view_func, view_args, view_kwargs):
     request.attributes = { }
     if 'urlPrefix' in view_kwargs:
         urlPrefix = view_kwargs['urlPrefix']
         if urlPrefix != '':
             urlPrefix = '/' + urlPrefix
         request.attributes['urlPrefix'] = urlPrefix
         del view_kwargs['urlPrefix']
     group = None
     groupName = None
     if get_current_urlconf_params() and 'groupName' in get_current_urlconf_params():
         groupName = get_current_urlconf_params()['groupName']
         # Check if we already loaded the current group in another
         # middleware.
         group = get_current_group()
         if group is None or group.name != groupName:
             group = get_object_or_404(Group, name = groupName)
     if 'groupName' in view_kwargs:
         if view_kwargs.get( 'noGroup', False ):
             del view_kwargs['groupName']
             del view_kwargs['noGroup']
         else:
             groupName = view_kwargs['groupName']
             if groupName == None: groupName = get_current_urlconf_params()['groupName']
             sphdata = get_current_sphdata()
             if group == None:
                 group = get_object_or_404(Group, name = groupName )
                 sphdata['group_fromhost'] = not get_sph_setting('community_groups_in_url')
             del view_kwargs['groupName']
             view_kwargs['group'] = group
             request.attributes['group'] = group
             #settings.TEMPLATE_DIRS = ( "/tmp/hehe", ) + settings.TEMPLATE_DIRS
             
     set_current_group( group )
     return None
def include_css(csspath, prefix = None):
    styleincludes = sphsettings.get_sph_setting( 'community_styleincludes', [])

    if csspath in styleincludes:
        return

    if prefix is None:
        prefix = settings.MEDIA_URL
    styleincludes.append(prefix + csspath)
    sphsettings.set_sph_setting( 'community_styleincludes', styleincludes )
Exemplo n.º 8
0
def include_css(csspath, prefix=None):
    styleincludes = sphsettings.get_sph_setting('community_styleincludes', [])

    if csspath in styleincludes:
        return

    if prefix is None:
        prefix = settings.MEDIA_URL
    styleincludes.append(prefix + csspath)
    sphsettings.set_sph_setting('community_styleincludes', styleincludes)
Exemplo n.º 9
0
 def clean_username(self):
     case_sensitive_uname = sphsettings.get_sph_setting(
         'community_register_username_casesensitive', True)
     if ((case_sensitive_uname and User.objects.filter(
             username__exact=self.cleaned_data['username']).exists())
             or (not case_sensitive_uname and User.objects.filter(
                 username__iexact=self.cleaned_data['username']).exists())):
         raise forms.ValidationError(
             ugettext(u'The username %(username)s is already taken.') %
             {'username': self.cleaned_data['username']})
     return self.cleaned_data['username']
Exemplo n.º 10
0
def groupaware_redirect_to(request, url, group, **kwargs):
    """
    Redirects either to the url given as 'url' or to a mapping defined in
    the SPH_SETTINGS variable 'community_groupaware_startpage'
    """
    group_name = group.name
    startpages = sphsettings.get_sph_setting('community_groupaware_startpage', None)
    if startpages is not None:
        if group_name in startpages:
            return HttpResponsePermanentRedirect(startpages[group_name] % kwargs)

    return HttpResponsePermanentRedirect(url % kwargs)
Exemplo n.º 11
0
    def get_contents(self, origin):
        group = get_current_group()
        template_name: str = origin.template_name
        if group is None:
            # If there is no current group .. we have nothing to do ..
            raise TemplateDoesNotExist(template_name)

        template_dir: str = sphsettings.get_sph_setting('community_groupaware_template_dir', None)

        if template_dir is not None:
            template_path = safe_join(os.path.join(template_dir, group.name), template_name)
            try:
                with open(template_path, encoding=self.engine.file_charset) as fp:
                    return fp.read()
            except FileNotFoundError as e:
                #logger.debug('File not found', e)
                pass

            prefix = 'groups/%s/' % group.name
            if template_name.startswith(prefix):
                template_name = template_name.replace(prefix, '')
                template_path = safe_join(os.path.join(template_dir, group.name), template_name)
                try:
                    with open(template_path, encoding=self.engine.file_charset) as fp:
                        return fp.read()
                except FileNotFoundError as e:
                    logger.warning('File no found', e)


        # Look in the cache . .so we don't have to make unnecessary database
        # queries
        cachekey = _get_cache_key(template_name, group)
        ret = cache.get( cachekey )
        if ret is not None:
            if ret == NOT_EXIST_CACHE_VALUE:
                raise TemplateDoesNotExist(template_name)

            return ret

        while group is not None:
            try:
                template = GroupTemplate.objects.get( template_name = template_name,
                                                      group = group, )
                ret = (template.source, "%s:%s" % (group.name, template.template_name))
                # Cache for two hours by default ..
                cache.set(cachekey, ret, TMPL_CACHE_EXPIRE)
                return ret
            except GroupTemplate.DoesNotExist:
                group = group.parent

        cache.set(cachekey, NOT_EXIST_CACHE_VALUE, TMPL_CACHE_EXPIRE)
        raise TemplateDoesNotExist(template_name)
Exemplo n.º 12
0
def groupaware_redirect_to(request, url, group, **kwargs):
    """
    Redirects either to the url given as 'url' or to a mapping defined in
    the SPH_SETTINGS variable 'community_groupaware_startpage'
    """
    group_name = group.name
    startpages = sphsettings.get_sph_setting('community_groupaware_startpage',
                                             None)
    if startpages is not None:
        if group_name in startpages:
            return HttpResponsePermanentRedirect(startpages[group_name] %
                                                 kwargs)

    return HttpResponsePermanentRedirect(url % kwargs)
def load_template_source(template_name, template_dirs=None):
    """
    Template loader which loads templates from the database based on
    the current group.
    """
    group = get_current_group()
    if group is None:
        # If there is no current group .. we have nothing to do ..
        raise TemplateDoesNotExist(template_name)

    template_dir = sphsettings.get_sph_setting(
        'community_groupaware_template_dir', None)
    if template_dir is not None:
        try:
            template_path = safe_join(os.path.join(template_dir, group.name),
                                      template_name)
            return (open(template_path).read().decode(settings.FILE_CHARSET),
                    template_path)
        except:
            pass

    # Look in the cache . .so we don't have to make unnecessary database
    # queries
    cachekey = _get_cache_key(template_name, group)
    ret = cache.get(cachekey)
    if ret is not None:
        if ret == NOT_EXIST_CACHE_VALUE:
            raise TemplateDoesNotExist(template_name)

        return ret

    while group is not None:
        try:
            template = GroupTemplate.objects.get(
                template_name=template_name,
                group=group,
            )
            ret = (template.source,
                   "%s:%s" % (group.name, template.template_name))
            # Cache for two hours by default ..
            cache.set(cachekey, ret, TMPL_CACHE_EXPIRE)
            return ret
        except GroupTemplate.DoesNotExist:
            group = group.parent

    cache.set(cachekey, NOT_EXIST_CACHE_VALUE, TMPL_CACHE_EXPIRE)
    raise TemplateDoesNotExist(template_name)
def load_template_source(template_name, template_dirs=None):
    """
    Template loader which loads templates from the database based on
    the current group.
    """
    try:
        group = get_current_group()
    except:
        # Ignore the error for now.
        # this can happen in combination with 'django app plugins' application
        # during syncdb see: http://sct.sphene.net/board/thread/1864/error-while-running-syncdb/?page=1#post-1864
        raise TemplateDoesNotExist(template_name)
    if group is None:
        # If there is no current group .. we have nothing to do ..
        raise TemplateDoesNotExist(template_name)

    template_dir = sphsettings.get_sph_setting('community_groupaware_template_dir', None)
    if template_dir is not None:
        try:
            template_path = safe_join(os.path.join(template_dir, group.name), template_name)
            return (open(template_path).read().decode(settings.FILE_CHARSET), template_path)
        except:
            pass

    # Look in the cache . .so we don't have to make unnecessary database
    # queries
    cachekey = _get_cache_key(template_name, group)
    ret = cache.get( cachekey )
    if ret is not None:
        if ret == NOT_EXIST_CACHE_VALUE:
            raise TemplateDoesNotExist(template_name)
        
        return ret

    while group is not None:
        try:
            template = GroupTemplate.objects.get( template_name = template_name,
                                                  group = group, )
            ret = (template.source, "%s:%s" % (group.name, template.template_name))
            # Cache for two hours by default ..
            cache.set(cachekey, ret, TMPL_CACHE_EXPIRE)
            return ret
        except GroupTemplate.DoesNotExist:
            group = group.parent

    cache.set(cachekey, NOT_EXIST_CACHE_VALUE, TMPL_CACHE_EXPIRE)
    raise TemplateDoesNotExist(template_name)
Exemplo n.º 15
0
class GroupMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        request.attributes = {}
        if 'urlPrefix' in view_kwargs:
            urlPrefix = view_kwargs['urlPrefix']
            if urlPrefix != '':
                urlPrefix = '/' + urlPrefix
            request.attributes['urlPrefix'] = urlPrefix
            del view_kwargs['urlPrefix']
        group = None
        groupName = None
        if get_current_urlconf_params(
        ) and 'groupName' in get_current_urlconf_params():
            groupName = get_current_urlconf_params()['groupName']
            # Check if we already loaded the current group in another
            # middleware.
            group = get_current_group()
            if group is None or group.name != groupName:
                try:
                    group = get_object_or_404(Group, name=groupName)
                except Http404, e:
                    # We allow access to admin site without group.
                    if not view_func.__module__.startswith(
                            'django.contrib.admin.'):
                        raise e
        if 'groupName' in view_kwargs:
            if view_kwargs.get('noGroup', False):
                del view_kwargs['groupName']
                del view_kwargs['noGroup']
            else:
                groupName = view_kwargs['groupName']
                if groupName == None:
                    groupName = get_current_urlconf_params()['groupName']
                sphdata = get_current_sphdata()
                if group == None:
                    group = get_object_or_404(Group, name=groupName)
                    sphdata['group_fromhost'] = not get_sph_setting(
                        'community_groups_in_url')
                del view_kwargs['groupName']
                view_kwargs['group'] = group
                request.attributes['group'] = group
                #settings.TEMPLATE_DIRS = ( "/tmp/hehe", ) + settings.TEMPLATE_DIRS

        set_current_group(group)
        return None
def website_thumbnail_url(url, width):
    width = str(width)
    type = 'jpg'
    cache_root = os.path.join('cache', 'sphlinklist', 'thumbnail')
    cache_key = '%s.%s' % (b64encode(':'.join([url, width]).encode('utf-8')).decode('utf-8'), type)
    cache_path = os.path.join(cache_root, cache_key)
    local_cache_file = os.path.join(settings.MEDIA_ROOT, cache_path)
    os.makedirs(os.path.join(settings.MEDIA_ROOT, cache_root), exist_ok=True)
    if not os.path.exists(local_cache_file):
        logger.debug('Downloading thumbnail for url %s into %s', url, local_cache_file)
        apikey = sphsettings.get_sph_setting('sphlinklist_thumbnail.ws_apikey')
        response = requests.get('https://api.thumbnail.ws/api/%s/thumbnail/get' % apikey,
                                params={'url': url, 'width': width}
                                )
        with open(local_cache_file, 'wb') as buf:
            buf.write(response.content)

    return { 'url': settings.MEDIA_URL + cache_path }
def load_template_source(template_name, template_dirs=None):
    """
    Template loader which loads templates from the database based on
    the current group.
    """
    group = get_current_group()
    if group is None:
        # If there is no current group .. we have nothing to do ..
        raise TemplateDoesNotExist(template_name)

    template_dir = sphsettings.get_sph_setting('community_groupaware_template_dir', None)
    if template_dir is not None:
        try:
            template_path = safe_join(os.path.join(template_dir, group.name), template_name)
            return (open(template_path).read().decode(settings.FILE_CHARSET), template_path)
        except:
            pass

    # Look in the cache . .so we don't have to make unnecessary database
    # queries
    cachekey = _get_cache_key(template_name, group)
    ret = cache.get( cachekey )
    if ret is not None:
        if ret == NOT_EXIST_CACHE_VALUE:
            raise TemplateDoesNotExist(template_name)
        
        return ret

    while group is not None:
        try:
            template = GroupTemplate.objects.get( template_name = template_name,
                                                  group = group, )
            ret = (template.source, "%s:%s" % (group.name, template.template_name))
            # Cache for two hours by default ..
            cache.set(cachekey, ret, TMPL_CACHE_EXPIRE)
            return ret
        except GroupTemplate.DoesNotExist:
            group = group.parent

    cache.set(cachekey, NOT_EXIST_CACHE_VALUE, TMPL_CACHE_EXPIRE)
    raise TemplateDoesNotExist(template_name)
    def handleMacroCall(self, doc, params):
        if 'id' in params:
            try:
                attachment = WikiAttachment.objects.get(id=params['id'])
            except WikiAttachment.DoesNotExist:
                return HTML('<b>Attachment for image does not exist: %s</b>' %
                            params['id'])
            el = doc.createElement('img')
            el.setAttribute('src', attachment.fileupload.url)

            cssclass = get_sph_setting('getwiki_macros_default_image_class')
            if cssclass is not None:
                el.setAttribute('class', cssclass)

            for paramName in ['class', 'width', 'height', 'alt', 'align']:
                if paramName in params:
                    el.setAttribute(paramName, params[paramName])

            if 'resize' in params:
                size = params['resize']
                width, height = size.split('x')
                src, width, height = resize(attachment.fileupload, size)
                el.setAttribute('src', src)
                el.setAttribute('width', '%dpx' % width)
                el.setAttribute('height', '%dpx' % height)

            # Create a link to view the image maximized.
            if not 'nolink' in params or not params['nolink']:
                el.setAttribute('border', '0')
                a = doc.createElement('a')
                a.setAttribute('href', attachment.fileupload.url)

                if cssclass is not None:
                    a.setAttribute('class', cssclass)

                a.appendChild(el)
                el = a

            return el
        return doc.createTextNode("Error, no 'id' given for img macro.")
Exemplo n.º 19
0
def community_profile_display(sender, signal, request, user, **kwargs):
    try:
        profile = CommunityUserProfile.objects.get(user=user, )
    except CommunityUserProfile.DoesNotExist:
        return None
    from sphene.sphboard.utils import is_spammer
    ret = ''
    fields = CommunityUserProfileField.objects.all()
    apply_spammer_limits = is_spammer(user.pk)
    for field in fields:
        if apply_spammer_limits and field.name in get_sph_setting('community_user_profile_spammer_restricted_fields'):
            continue
        try:
            value = CommunityUserProfileFieldValue.objects.get(user_profile=profile,
                                                               profile_field=field, )
            formatstring = '<tr><th>%(label)s</th><td>' + (field.renderstring or '%(value)s') + '</td></tr>'
            ret += (formatstring % {'label': field.name,
                                    'value': value.value, })
        except CommunityUserProfileFieldValue.DoesNotExist:
            continue

    return ret
    def handleMacroCall(self, doc, params):
        if params.has_key( 'id' ):
            try:
                attachment = WikiAttachment.objects.get( id = params['id'] )
            except WikiAttachment.DoesNotExist:
                return HTML( '<b>Attachment for image does not exist: %s</b>' % params['id'] )
            el = doc.createElement( 'img' )
            el.setAttribute( 'src', attachment.fileupload.url )

            cssclass = get_sph_setting('getwiki_macros_default_image_class')
            if cssclass is not None:
                el.setAttribute('class', cssclass)

            for paramName in [ 'class', 'width', 'height', 'alt', 'align' ]:
                if params.has_key( paramName ):
                    el.setAttribute( paramName, params[paramName] )

            if params.has_key('resize'):
                size = params['resize']
                width, height = size.split('x')
                src, width, height = resize(attachment.fileupload, size)
                el.setAttribute('src', src)
                el.setAttribute('width', '%dpx' % width)
                el.setAttribute('height', '%dpx' % height)

            # Create a link to view the image maximized.
            if not 'nolink' in params or not params['nolink']:
                el.setAttribute( 'border', '0' )
                a = doc.createElement( 'a' )
                a.setAttribute( 'href', attachment.fileupload.url )

                if cssclass is not None:
                    a.setAttribute('class', cssclass)

                a.appendChild(el)
                el = a

            return el
        return doc.createTextNode("Error, no 'id' given for img macro.")
Exemplo n.º 21
0
def community_profile_display(sender, signal, request, user, **kwargs):
    try:
        profile = CommunityUserProfile.objects.get( user = user, )
    except CommunityUserProfile.DoesNotExist:
        return None
    from sphene.sphboard.utils import is_spammer
    ret = ''
    fields = CommunityUserProfileField.objects.all()
    apply_spammer_limits = is_spammer(user.pk)
    for field in fields:
        if apply_spammer_limits and field.name in get_sph_setting('community_user_profile_spammer_restricted_fields'):
            continue
        try:
            value = CommunityUserProfileFieldValue.objects.get( user_profile = profile,
                                                                profile_field = field, )
            formatstring = '<tr><th>%(label)s</th><td>' + (field.renderstring or '%(value)s') + '</td></tr>'
            ret += (formatstring % { 'label': field.name,
                                     'value': value.value, })
        except CommunityUserProfileFieldValue.DoesNotExist:
            continue

    return ret
Exemplo n.º 22
0
    def process_view(self, request, view_func, view_args, view_kwargs):
        request.attributes = {}
        if "urlPrefix" in view_kwargs:
            urlPrefix = view_kwargs["urlPrefix"]
            if urlPrefix != "":
                urlPrefix = "/" + urlPrefix
            request.attributes["urlPrefix"] = urlPrefix
            del view_kwargs["urlPrefix"]
        group = None
        groupName = None
        if get_current_urlconf_params() and "groupName" in get_current_urlconf_params():
            groupName = get_current_urlconf_params()["groupName"]
            # Check if we already loaded the current group in another
            # middleware.
            group = get_current_group()
            if group is None or group.name != groupName:
                group = get_object_or_404(Group, name=groupName)
        if "groupName" in view_kwargs:
            if view_kwargs.get("noGroup", False):
                del view_kwargs["groupName"]
                del view_kwargs["noGroup"]
            else:
                groupName = view_kwargs["groupName"]
                if groupName == None:
                    groupName = get_current_urlconf_params()["groupName"]
                sphdata = get_current_sphdata()
                if group == None:
                    group = get_object_or_404(Group, name=groupName)
                    sphdata["group_fromhost"] = not get_sph_setting("community_groups_in_url")
                del view_kwargs["groupName"]
                view_kwargs["group"] = group
                request.attributes["group"] = group
                # settings.TEMPLATE_DIRS = ( "/tmp/hehe", ) + settings.TEMPLATE_DIRS

        set_current_group(group)
        return None
Exemplo n.º 23
0
def get_user_displayname_help():
    if get_sph_setting( 'community_user_displayname_fallback' ) == 'username':
        return _('This display name will be shown to all users. If you leave it blank then your username will be shown.')
    return _('This display name will be shown to all users. If you leave it blank, your first and last name will be shown. If those are blank too, then your username will be shown.')
Exemplo n.º 24
0
    def ready(self):
        from sphene.community import sphsettings
        from sphene.community.sphutils import add_setting_defaults
        from django.conf import settings

        post_migrate.connect(init_data, sender=self)

        add_setting_defaults({
            'board_count_views': True,
            'board_heat_days': 30,
            'board_heat_post_threshold': 10,
            'board_heat_view_threshold': 100,
            'board_heat_calculator': 'sphene.sphboard.models.calculate_heat',

            # Defines if the 'Notify Me' checkbox should be selected by default.
            'board_default_notifyme': True,

            # How long a user is allowed to edit his post in seconds.
            # -1: forever,
            # 0: never
            'board_edit_timeout': -1,  # 30 * 60,

            # How long a user is allowed to hide his post in seconds.
            # -1: forever,
            # 0: never
            'board_hide_timeout': -1,  # 30 * 60,

            # Timeout for the rendered body in the cache
            # Default 6 hours
            'board_body_cache_timeout': 6 * 3600,
            'board_signature_cache_timeout': 6 * 3600,
            'board_signature_required_post_count': 0,
            'board_no_limits_users': [],
            'board_authorinfo_cache_timeout': 6 * 3600,

            # See http://code.djangoproject.com/ticket/4789
            # When activating this setting, select_related() will not be used.
            'workaround_select_related_bug': False,

            'board_post_paging': 10,

            # Allow users to attach files to their posts ?
            'board_allow_attachments': True,

            # Pass the board and blog posts through the wiki camel case
            # markup. This will allow wiki links to be automatically placed
            # into the posts. It is better to turn this off and use the
            # sph extended BBCODE wiki label.
            'board_auto_wiki_link_enabled': True,
            # default location of emoticons
            'board_emoticons_root': settings.STATIC_URL + 'sphene/emoticons/',
            'board_emoticons_list': {
                '0:-)': 'angel.gif',
                'O:-)': 'angel.gif',
                ':angel:': 'angel.gif',
                ':)': 'smile.gif',
                ':(': 'sad.gif',
                ':D': 'grin.gif',
                ':p': 'tongue.gif',
                ';)': 'wink.gif',
                ':-)': 'smile.gif',
                ':-(': 'sad.gif',
                ':-D': 'grin.gif',
                ':-P': 'tongue.gif',
                ':-p': 'tongue.gif',
                ':-/': 'unsure.gif',
                ':-\\': 'unsure.gif',
                ';-)': 'wink.gif',
                ':-$': 'confused.gif',
                ':-S': 'confused.gif',
                'B-)': 'cool.gif',
                ':lol:': 'lol.gif',
                ':batman:': 'batman.gif',
                ':rolleyes:': 'rolleyes.gif',
                ':icymad:': 'bluemad.gif',
                ':mad:': 'mad.gif',
                ':crying:': 'crying.gif',
                ':eek:': 'eek.gif',
                ':eyebrow:': 'eyebrow.gif',
                ':grim:': 'grim_reaper.gif',
                ':idea:': 'idea.gif',
                ':rotfl:': 'rotfl.gif',
                ':shifty:': 'shifty.gif',
                ':sleep:': 'sleep.gif',
                ':thinking:': 'thinking.gif',
                ':wave:': 'wave.gif',
                ':bow:': 'bow.gif',
                ':sheep:': 'sheep.gif',
                ':santa:': 'santaclaus.gif',
                ':anvil:': 'anvil.gif',
                ':bandit:': 'bandit.gif',
                ':chop:': 'behead.gif',
                ':biggun:': 'biggun.gif',
                ':mouthful:': 'blowingup,gif',
                ':gun:': 'bluekillsred.gif',
                ':box:': 'boxing.gif',
                ':gallows:': 'hanged.gif',
                ':jedi:': 'lightsaber1.gif',
                ':bosh:': 'mallet1.gif',
                ':saw:': 'saw.gif',
                ':stupid:': 'youarestupid.gif',
            },

            # default tag used when rendering user signatures in posts
            'board_signature_tag': '<div class="signature">%(signature)s</div>',

            # default link in board posts
            'board_post_link': '<a href="%(url)s">%(text)s</a>',

            'board_attachments_upload_to': 'var/sphene/sphwiki/attachment/%Y/%m/%d',

            'board_slugify_links': True,

            # Display the reply form directly below a thread instead of just a 'Post Reply' link.
            'board_quick_reply': False,

            # Activates the experimental WYSIWYG editor -
            #   only if 'bbcode' is the only markup choice.
            # If you are using it, please provide feedback in the
            # forums at http://sct.spene.net !
            'board_wysiwyg': False,
            # This options let users test the wysiwyg editor by appending
            # ?wysiwyg=1 to the post URL. (I just added it so it can be seen on
            # sct.sphene.net and tested by users.)
            'board_wysiwyg_testing': False,
        })

        styleincludes = sphsettings.get_sph_setting('community_styleincludes', [])
        styleincludes.append(settings.STATIC_URL + 'sphene/sphboard/styles/base.css')
        sphsettings.set_sph_setting('community_styleincludes', styleincludes)
def get_sph_setting(name, default_value = None):
    return sphsettings.get_sph_setting(name, default_value)
Exemplo n.º 26
0
    },

    # default tag used when rendering user signatures in posts
    'board_signature_tag':'<div class="signature">%(signature)s</div>',

    # default link in board posts
    'board_post_link':'<a href="%(url)s">%(text)s</a>',

    'board_attachments_upload_to': 'var/sphene/sphwiki/attachment/%Y/%m/%d',

    'board_slugify_links': True,

    # Display the reply form directly below a thread instead of just a 'Post Reply' link.
    'board_quick_reply': False,

    # Activates the experimental WYSIWYG editor -
    #   only if 'bbcode' is the only markup choice.
    # If you are using it, please provide feedback in the
    # forums at http://sct.spene.net !
    'board_wysiwyg': False,
    # This options let users test the wysiwyg editor by appending
    # ?wysiwyg=1 to the post URL. (I just added it so it can be seen on
    # sct.sphene.net and tested by users.)
    'board_wysiwyg_testing': False,
    })


styleincludes = sphsettings.get_sph_setting( 'community_styleincludes', [])
styleincludes.append(settings.STATIC_URL + 'sphene/sphboard/styles/base.css')
sphsettings.set_sph_setting( 'community_styleincludes', styleincludes )
Exemplo n.º 27
0
def get_user_displayname_help():
    if get_sph_setting( 'community_user_displayname_fallback' ) == 'username':
        return _('This display name will be shown to all users. If you leave it blank then your username will be shown.')
    return _('This display name will be shown to all users. If you leave it blank, your first and last name will be shown. If those are blank too, then your username will be shown.')
Exemplo n.º 28
0
 def __init__(self, *args, **kwargs):
     super(RegisterEmailAddress, self).__init__(*args, **kwargs)
     if not sphutils.has_captcha_support() or not sphsettings.get_sph_setting('community_register_require_captcha', False):
         del self.fields['captcha']
Exemplo n.º 29
0
    return ret


def get_category_name(post):
    return post.category.name
get_category_name.name = 'category'

def get_category_id(post):
    return post.category.id
get_category_id.name = 'category_id'

def get_group_id(post):
    return post.category.group.id
get_group_id.name = 'group_id'

searchboard_post_index = sphsettings.get_sph_setting('sphsearchboard_post_index', '/var/cache/sct/postindex/')

if not os.path.isdir(searchboard_post_index):
    os.makedirs(searchboard_post_index)

post_index = Indexer(
    path = searchboard_post_index,

    model = Post,

    fields = [('subject', 20), 'body'],

    tags = [
        ('subject', 'subject', 20),
        ('date', 'postdate'),
        ('category', 'category.name'),
Exemplo n.º 30
0
    def ready(self):
        from sphene.community import sphsettings
        from sphene.community.sphutils import add_setting_defaults
        from django.conf import settings

        post_migrate.connect(init_data, sender=self)

        add_setting_defaults({
            'board_count_views': True,
            'board_heat_days': 30,
            'board_heat_post_threshold': 10,
            'board_heat_view_threshold': 100,
            'board_heat_calculator': 'sphene.sphboard.models.calculate_heat',

            # Defines if the 'Notify Me' checkbox should be selected by default.
            'board_default_notifyme': True,

            # How long a user is allowed to edit his post in seconds.
            # -1: forever,
            # 0: never
            'board_edit_timeout': -1,  # 30 * 60,

            # How long a user is allowed to hide his post in seconds.
            # -1: forever,
            # 0: never
            'board_hide_timeout': -1,  # 30 * 60,

            # Timeout for the rendered body in the cache
            # Default 6 hours
            'board_body_cache_timeout': 6 * 3600,
            'board_signature_cache_timeout': 6 * 3600,
            'board_signature_required_post_count': 0,
            'board_no_limits_users': [],
            'board_authorinfo_cache_timeout': 6 * 3600,

            # See http://code.djangoproject.com/ticket/4789
            # When activating this setting, select_related() will not be used.
            'workaround_select_related_bug': False,
            'board_post_paging': 10,

            # Allow users to attach files to their posts ?
            'board_allow_attachments': True,

            # Pass the board and blog posts through the wiki camel case
            # markup. This will allow wiki links to be automatically placed
            # into the posts. It is better to turn this off and use the
            # sph extended BBCODE wiki label.
            'board_auto_wiki_link_enabled': True,
            # default location of emoticons
            'board_emoticons_root': settings.STATIC_URL + 'sphene/emoticons/',
            'board_emoticons_list': {
                '0:-)': 'angel.gif',
                'O:-)': 'angel.gif',
                ':angel:': 'angel.gif',
                ':)': 'smile.gif',
                ':(': 'sad.gif',
                ':D': 'grin.gif',
                ':p': 'tongue.gif',
                ';)': 'wink.gif',
                ':-)': 'smile.gif',
                ':-(': 'sad.gif',
                ':-D': 'grin.gif',
                ':-P': 'tongue.gif',
                ':-p': 'tongue.gif',
                ':-/': 'unsure.gif',
                ':-\\': 'unsure.gif',
                ';-)': 'wink.gif',
                ':-$': 'confused.gif',
                ':-S': 'confused.gif',
                'B-)': 'cool.gif',
                ':lol:': 'lol.gif',
                ':batman:': 'batman.gif',
                ':rolleyes:': 'rolleyes.gif',
                ':icymad:': 'bluemad.gif',
                ':mad:': 'mad.gif',
                ':crying:': 'crying.gif',
                ':eek:': 'eek.gif',
                ':eyebrow:': 'eyebrow.gif',
                ':grim:': 'grim_reaper.gif',
                ':idea:': 'idea.gif',
                ':rotfl:': 'rotfl.gif',
                ':shifty:': 'shifty.gif',
                ':sleep:': 'sleep.gif',
                ':thinking:': 'thinking.gif',
                ':wave:': 'wave.gif',
                ':bow:': 'bow.gif',
                ':sheep:': 'sheep.gif',
                ':santa:': 'santaclaus.gif',
                ':anvil:': 'anvil.gif',
                ':bandit:': 'bandit.gif',
                ':chop:': 'behead.gif',
                ':biggun:': 'biggun.gif',
                ':mouthful:': 'blowingup,gif',
                ':gun:': 'bluekillsred.gif',
                ':box:': 'boxing.gif',
                ':gallows:': 'hanged.gif',
                ':jedi:': 'lightsaber1.gif',
                ':bosh:': 'mallet1.gif',
                ':saw:': 'saw.gif',
                ':stupid:': 'youarestupid.gif',
            },

            # default tag used when rendering user signatures in posts
            'board_signature_tag':
            '<div class="signature">%(signature)s</div>',

            # default link in board posts
            'board_post_link': '<a href="%(url)s">%(text)s</a>',
            'board_attachments_upload_to':
            'var/sphene/sphwiki/attachment/%Y/%m/%d',
            'board_slugify_links': True,

            # Display the reply form directly below a thread instead of just a 'Post Reply' link.
            'board_quick_reply': False,

            # Activates the experimental WYSIWYG editor -
            #   only if 'bbcode' is the only markup choice.
            # If you are using it, please provide feedback in the
            # forums at http://sct.spene.net !
            'board_wysiwyg': False,
            # This options let users test the wysiwyg editor by appending
            # ?wysiwyg=1 to the post URL. (I just added it so it can be seen on
            # sct.sphene.net and tested by users.)
            'board_wysiwyg_testing': False,
        })

        styleincludes = sphsettings.get_sph_setting('community_styleincludes',
                                                    [])
        styleincludes.append(settings.STATIC_URL +
                             'sphene/sphboard/styles/base.css')
        sphsettings.set_sph_setting('community_styleincludes', styleincludes)
Exemplo n.º 31
0
def get_sph_setting(name, default_value=None):
    return sphsettings.get_sph_setting(name, default_value)
Exemplo n.º 32
0

def get_category_id(post):
    return post.category.id


get_category_id.name = 'category_id'


def get_group_id(post):
    return post.category.group.id


get_group_id.name = 'group_id'

searchboard_post_index = sphsettings.get_sph_setting(
    'sphsearchboard_post_index', '/var/cache/sct/postindex/')

if not os.path.isdir(searchboard_post_index):
    os.makedirs(searchboard_post_index)

post_index = Indexer(path=searchboard_post_index,
                     model=Post,
                     fields=[('subject', 20), 'body'],
                     tags=[
                         ('subject', 'subject', 20),
                         ('date', 'postdate'),
                         ('category', 'category.name'),
                         ('post_id', 'id'),
                         ('category_id', 'category.id'),
                         ('group_id', 'category.group.id'),
                     ])
Exemplo n.º 33
0
    6 * 3600,
    'board_signature_cache_timeout':
    6 * 3600,
    'board_authorinfo_cache_timeout':
    6 * 3600,

    # See http://code.djangoproject.com/ticket/4789
    # When activating this setting, select_related() will not be used.
    'workaround_select_related_bug':
    False,
    'board_post_paging':
    10,

    # Allow users to attach files to their posts ?
    'board_allow_attachments':
    True,

    # Pass the board and blog posts through the wiki camel case
    # markup. This will allow wiki links to be automatically placed
    # into the posts. It is better to turn this off and use the
    # sph extended BBCODE wiki label.
    'board_auto_wiki_link_enabled':
    True,
    'board_attachments_upload_to':
    'var/sphene/sphwiki/attachment/%Y/%m/%d',
})

styleincludes = sphsettings.get_sph_setting('community_styleincludes', [])
styleincludes.append(settings.MEDIA_URL + 'sphene/sphboard/styles/base.css')
sphsettings.set_sph_setting('community_styleincludes', styleincludes)
Exemplo n.º 34
0
 def __init__(self, *args, **kwargs):
     super(RegisterEmailAddress, self).__init__(*args, **kwargs)
     if not sphutils.has_captcha_support(
     ) or not sphsettings.get_sph_setting(
             'community_register_require_captcha', False):
         del self.fields['captcha']