Example #1
0
def sortblocks(request, group):
    if request.method != 'POST' or not request.user.is_authenticated:
        raise Exception

    # Now resort it ..
    print(str(request.POST))
    #return HttpResponse('')
    for blockregion in request.POST.getlist('block_region'):
        sortorder = request.POST[blockregion]
        print("sortorder for %s: %s" % (blockregion, str(sortorder)))


        region = get_or_create_region(get_current_group(),
                                      request.user,
                                      blockregion)

        block_instances = BlockInstancePosition.objects.filter(region = region,)
        block_instances.delete()

        if not sortorder:
            continue

        idorder = [e.split('=')[1] for e in sortorder.split('&')]

        pos=1
        for id in idorder:
            # TODO add permission checking ?
            block_config = BlockConfiguration.objects.get( pk = id )
            BlockInstancePosition(region = region,
                                  block_configuration = block_config,
                                  sortorder = pos).save()
            pos+=1

    return HttpResponse('')

    blockregion = request.POST['block_region']
    sortorder = request.POST['sortorder']
    idorder = [e.split('=')[1] for e in sortorder.split('&')]
    region = get_or_create_region(get_current_group(),
                                  request.user,
                                  blockregion)

    block_instances = BlockInstancePosition.objects.filter(region = region,)
    block_instances.delete()

    pos=1
    for id in idorder:
        # TODO add permission checking ?
        block_config = BlockConfiguration.objects.get( pk = id )
        BlockInstancePosition(region = region,
                              block_configuration = block_config,
                              sortorder = pos).save()
        pos+=1
    return HttpResponse( 'Sorted all blocks.' )
def show_active_monitors(context, profile_user):
    user = context["user"]
    request = context["request"]

    if user == profile_user:
        monitors = Monitor.objects.filter(
            Q(thread=None) | Q(thread__is_hidden=0), user=profile_user, group=get_current_group()
        )
    else:
        if not has_permission_flag(request.user, "community_manage_users"):
            raise PermissionDenied()
        monitors = Monitor.objects.filter(
            Q(thread=None) | Q(thread__is_hidden=0), user=profile_user, group=get_current_group()
        )
    return {"monitors": monitors, "request": request, "is_current_user": user == profile_user}
 def render(self, context):
     # TODO check permissions
     category_id = None
     if self.categoryvar:
         category_id = self.categoryvar.resolve(context)
     if not category_id:
         # if no category id is given simply display all categories
         # of the current group.
         category = None
         categories = get_all_viewable_categories(get_current_group(),
                                                  get_current_user())
         threads = Post.objects.filter(
             category__id__in=categories,
             thread__isnull=True,
         ).order_by('-postdate')
     else:
         category = Category.objects.get(pk=category_id)
         threads = Post.objects.filter(
             category=category,
             thread__isnull=True,
         ).order_by('-postdate')
     context.push()
     context['threads'] = threads
     context['category'] = category
     output = self.nodelist.render(context)
     context.pop()
     return output
    def recursive_render(self, context, parent, depth = 0):
        filter = Category.objects.filter(
            group = get_current_group(),)

        if self.categorytypevar is not None:
            categorytype = self.categorytypevar.resolve(context)

            filter = filter.filter(category_type__in = categorytype.split(','))
            #(TaskCategoryType.name, DivisionCategoryType.name),)
        if parent is None:
            filter = filter.filter(parent__isnull = True)
        else:
            filter = filter.filter(parent = parent)

        output = []

        for category in filter:
            if not category.has_view_permission():
                continue
            # render children first
            children = self.recursive_render(context, category, depth + 1)

            # render the current category
            context.push()
            context['category'] = category
            context['children'] = mark_safe(children)
            context['depth'] = depth
            context['depthrange'] = xrange(depth)
            output.append(self.nodelist.render(context))
            context.pop()

        return ''.join(output)
def sphboard_post_authorinfo(user_id):
    if user_id is None:
        user = None
    else:
        user = User.objects.get(pk=user_id)

    return {"author": user, "post_count": UserPostCount.objects.get_post_count(user, get_current_group())}
Example #6
0
def navigation(request):
    if hasattr(request, 'attributes') and 'group' in request.attributes:
        group = request.attributes['group']
    else:
        group = get_current_group()
    sphdata = get_current_sphdata()

    sph_settings = getattr( settings, 'SPH_SETTINGS', None )
    sphdata['installed_apps'] = settings.INSTALLED_APPS
    sphdata['current_url'] = request.path
    querystring = request.META.get('QUERY_STRING', None)
    if querystring:
        sphdata['current_url'] += '?'+querystring
    # urlPrefix is deprecated, don't use it.
    urlPrefix = ''
    if hasattr(request, 'attributes'):
        urlPrefix = request.attributes.get('urlPrefix', '')
    if group:
        return { 'navigation_left': Navigation.objects.filter( group = group,
                                                               navigationType = 0 ),
                 'navigation_top': Navigation.objects.filter( group = group,
                                                               navigationType = 1 ),
                 'urlPrefix': urlPrefix,
                 'group': group,
                 'sph': sphdata,
                 'sph_settings': SphSettings(),
                 'sph_perms': PermissionFlagLookup(),
                 }
    return { 'sph': sphdata,
             'sph_settings': SphSettings(),
             'sph_perms': PermissionFlagLookup(),
             }
    def get_or_create_for_object(self, model_instance):
        # Find a category associated with the given object
        model_type = ContentType.objects.get_for_model(model_instance)
        try:
            return self.filter(object_type__pk = model_type.id,
                               object_id = model_instance.pk).get()
        except CommentsCategoryConfig.DoesNotExist:
            # Find root category
            group = get_current_group()
            from sphene.sphcomments.categorytypes import CommentsCategoryType, CommentsOnObjectCategoryType
            if not group.id in root_category_id:
                try:
                    root_category_id[group.id] = Category.objects.get(
                        group = group,
                        category_type = CommentsCategoryType.name, ).id
                except Category.DoesNotExist:
                    raise Exception('Please create a category of type "%s" (%s).' % (CommentsCategoryType.label, CommentsCategoryType.name))

            # create a new category ...
            # to copy preferences we need the root category ..
            root_category = Category.objects.get(pk = root_category_id[group.id])
            # TODO role permissions are currently not copied ..
            category = Category(
                name = 'comment category for "%s"' % unicode(model_instance),
                parent = root_category,
                group = group,
                category_type = CommentsOnObjectCategoryType.name,
                allowview = root_category.allowview,
                allowthreads = root_category.allowthreads,
                allowreplies = root_category.allowreplies, )
            category.save()
            config = CommentsCategoryConfig(category = category,
                                            content_object = model_instance)
            config.save()
            return config
    def recursive_render(self, context, parent, depth = 0):
        filter = Category.objects.filter(
            group = get_current_group(),)

        if self.categorytypevar is not None:
            categorytype = self.categorytypevar.resolve(context)

            filter = filter.filter(category_type__in = categorytype.split(','))
            #(TaskCategoryType.name, DivisionCategoryType.name),)
        if parent is None:
            filter = filter.filter(parent__isnull = True)
        else:
            filter = filter.filter(parent = parent)

        output = []

        for category in filter:
            if not category.has_view_permission():
                continue
            # render children first
            children = self.recursive_render(context, category, depth + 1)

            # render the current category
            context.push()
            context['category'] = category
            context['children'] = mark_safe(children)
            context['depth'] = depth
            context['depthrange'] = xrange(depth)
            output.append(self.nodelist.render(context))
            context.pop()

        return ''.join(output)
def authorinfo_cachekey(user_id, group_id = None, language_code = None):
    if group_id is None:
        group_id = get_current_group().id
    if language_code is None:
        language_code = getattr(get_current_request(), 'LANGUAGE_CODE', '')
    return '%s_sphboard_authorinfo_%s_%s_%s' % \
        (settings.CACHE_MIDDLEWARE_KEY_PREFIX, str(group_id), str(user_id), language_code)
Example #10
0
def authorinfo_cachekey(user_id, group_id = None, language_code = None):
    if group_id is None:
        group_id = get_current_group().id
    if language_code is None:
        language_code = getattr(get_current_request(), 'LANGUAGE_CODE', '')
    return 'sphboard_authorinfo_%s_%s_%s' % \
        (str(group_id),str(user_id), language_code)
def authorinfo_cachekey(user_id, group_id = None, language_code = None):
    if group_id is None:
        group_id = get_current_group().id
    if language_code is None:
        language_code = getattr(get_current_request(), 'LANGUAGE_CODE', '')
    return 'sphboard_authorinfo_%s_%s_%s' % \
        (str(group_id),str(user_id), language_code)
def get_blocks(blockregion, context):
    region = get_region(get_current_group(),
                        get_current_user(),
                        blockregion)
    block_instances = BlockInstancePosition.objects.filter(region = region,)

    context['blocks'] = block_instances
def authorinfo_cachekey(user_id, group_id = None, language_code = None):
    if group_id is None:
        group_id = get_current_group().id
    if language_code is None:
        language_code = getattr(get_current_request(), 'LANGUAGE_CODE', '')
    return '%s_sphboard_authorinfo_%s_%s_%s' % \
        (settings.CACHE_MIDDLEWARE_KEY_PREFIX, str(group_id), str(user_id), language_code)
def has_permission_flag(user, flag, contentobject=None, group=None):
    """
    Checks if the given user has the given flag for the given model instance
    (object).
    If object is not given, it checks if the user has the flag globally
    assigned.
    """
    # Anonymous users won't have flags ...
    if user is None or not user.is_authenticated():
        return False

    # Super users have all flags anyway ..
    if user.is_superuser:
        return True

    if group is None:
        group = get_current_group()

    # group cache entries by user
    cache_group_id = get_cache_group_id('has_permission_flag_%s' % (user.pk))
    key = '%s_%s_has_perm_flag_%s_%s_%s_%s' % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, cache_group_id, user.pk, flag,
                                            contentobject and contentobject.pk or '0', group.pk)

    res = cache.get(key, False)
    if res:
        return res

    # TODO cache rolegroup_ids for user ?
    rolegroup_ids = RoleGroupMember.objects.filter(rolegroup__group = group, user = user).values_list('id',flat=True)

    # Check if the user has a global flag ...
    userselect = (Q(user = user) & Q(rolegroup__isnull = True)) \
        | (Q(rolegroup__in = rolegroup_ids) & Q(user__isnull = True))
    matches = RoleMember.objects.filter(
        userselect,
        role__permission_flags__name__exact = flag, has_limitations = False ).count()

    if matches > 0:
        res = True
    else:
        # if it wasn't found ...
        # ... lookup flag for the given model:
        if contentobject is not None:
            content_type = ContentType.objects.get_for_model(contentobject)
            rolemembers = RoleMember.objects.filter( userselect,
                                                     role__permission_flags__name__exact = flag,
                                                     has_limitations = True,

                                                     rolememberlimitation__object_type = content_type,
                                                     rolememberlimitation__object_id = contentobject.id,
                                                     ).count()
            if rolemembers > 0:
                res = True

        # ... lookup the group_administrator flag:
        if not res and flag != 'group_administrator':
            res = has_permission_flag(user, 'group_administrator')
    cache.set(key, res, 86400)
    return res
Example #15
0
def sphboard_post_authorinfo(user_id):
    if user_id is None:
        user = None
    else:
        user = User.objects.get(pk = user_id)

    return { 'author': user,
             'post_count': UserPostCount.objects.get_post_count(user, get_current_group()) }
Example #16
0
def handle_wikilinks_match(matchgroups):
    if matchgroups.get('urls'):
        # We matched a HTML link .. simply return the whole html code.
        return {'label': matchgroups.get('urls')}
    if matchgroups.get('escape'):
        # CamelCase expresion was escaped ...
        return {'label': matchgroups.get('wholeexpression')}
    snipname = matchgroups.get('camelcase') or matchgroups.get('snipname')
    label = matchgroups.get('sniplabel') or snipname.replace('_', ' ')

    cssclass = 'sph_wikilink'

    try:
        snip = WikiSnip.objects.get(
            group=get_current_group(),
            name=snipname,
        )
        href = snip.get_absolute_url()
    except WikiSnip.DoesNotExist:

        try:
            snip = WikiSnip(
                group=get_current_group(),
                name=snipname,
            )
        except TypeError:
            log.error('No group found when getting wikilinks. Ignoring.')
            return {'label': label}

        if not snip.has_edit_permission() \
                and get_sph_setting('wiki_links_nonexistent_show_only_privileged'):
            return {
                'label': label,
            }

        href = snip.get_absolute_editurl()
        cssclass += ' sph_nonexistent'
        if get_sph_setting('wiki_links_nonexistent_prefix'):
            label = "create:" + label

    return {
        'href': href,
        'label': label,
        'class': cssclass,
    }
def sphboard_post_authorinfo(user_id):
    if user_id is None:
        user = None
    else:
        user = User.objects.get(pk = user_id)

    return {'author': user,
            'STATIC_URL': settings.STATIC_URL,
            'post_count': UserPostCount.objects.get_post_count(user, get_current_group())}
Example #18
0
def sph_reverse(viewname, args=(), kwargs={}):
    req = get_current_request()
    urlconf = getattr(req, "urlconf", None)
    sphdata = get_current_sphdata()
    if "group_fromhost" in sphdata and not sphdata.get("group_fromhost", False):
        kwargs["groupName"] = get_current_group().name
    elif "groupName" in kwargs:
        del kwargs["groupName"]
    return reverse(viewname, urlconf, args, kwargs)
def show_active_monitors(context, profile_user):
    user = context['user']
    request = context['request']

    if user==profile_user:
        monitors = Monitor.objects.filter(Q(thread=None)|Q(thread__is_hidden=0),
                                          user = profile_user,
                                          group = get_current_group()
                                          )
    else:
        if not has_permission_flag(request.user, 'community_manage_users'):
            raise PermissionDenied()
        monitors = Monitor.objects.filter(Q(thread=None)|Q(thread__is_hidden=0),
                                          user = profile_user,
                                          group = get_current_group()
                                          )
    return {'monitors':monitors,
            'request':request,
            'is_current_user':user==profile_user}
Example #20
0
def sph_reverse( viewname, args=(), kwargs={} ):
    req = get_current_request()
    urlconf = getattr(req, 'urlconf', None)
    sphdata = get_current_sphdata()
    if 'group_fromhost' in sphdata and \
            not sphdata.get('group_fromhost', False):
        kwargs['groupName'] = get_current_group().name
    elif 'groupName' in kwargs:
        del kwargs['groupName']
    return reverse( viewname, urlconf, args, kwargs )
def sph_reverse( viewname, args=(), kwargs={} ):
    req = get_current_request()
    urlconf = getattr(req, 'urlconf', None)
    sphdata = get_current_sphdata()
    if 'group_fromhost' in sphdata and \
            not sphdata.get('group_fromhost', False):
        kwargs['groupName'] = get_current_group().name
    elif 'groupName' in kwargs:
        del kwargs['groupName']
    return reverse( viewname, urlconf, args, kwargs )
def show_active_monitors(context, profile_user):
    user = context['user']
    request = context['request']

    if user==profile_user:
        monitors = Monitor.objects.filter(Q(thread=None)|Q(thread__is_hidden=0),
                                          user = profile_user,
                                          group = get_current_group()
                                          )
    else:
        if not has_permission_flag(request.user, 'community_manage_users'):
            raise PermissionDenied()
        monitors = Monitor.objects.filter(Q(thread=None)|Q(thread__is_hidden=0),
                                          user = profile_user,
                                          group = get_current_group()
                                          )
    return {'monitors':monitors,
            'request':request,
            'is_current_user':user==profile_user}
Example #23
0
 def get_object(self, request, category_id = None):
     group = get_current_group()
     categories = get_board_categories(group)
     if not category_id:
         return categories
     #category_id = int(bits[0])
     categories = [category for category in categories \
                       if category.id == category_id]
     if not categories:
         raise Http404
     return categories
Example #24
0
    def clean(self, value):
        value = super(SelectCategoryField, self).clean(value)

        if value in forms.fields.EMPTY_VALUES:
            return None
        
        category = Category.objects.get( pk = value, group = get_current_group() )

        value = category
        
        return value
 def get_object(self, bits):
     group = get_current_group()
     categories = get_board_categories(group)
     if len(bits) != 1:
         return categories
     category_id = int(bits[0])
     categories = [category for category in categories \
                       if category.id == category_id]
     if not categories:
         raise Http404
     return categories
Example #26
0
 def get_object(self, request, category_id=None):
     group = get_current_group()
     categories = get_board_categories(group)
     if not category_id:
         return categories
     #category_id = int(bits[0])
     categories = [category for category in categories \
                       if category.id == category_id]
     if not categories:
         raise Http404
     return categories
    def items(self):
        group = get_current_group()

        ## Check permissions
        all_categories = Category.objects.filter( group = group )
        allowed_categories = ()
        for category in all_categories:
            if category.has_view_permission( ):
                allowed_categories += (category.id,)

        return Post.objects.filter( category__id__in = allowed_categories, thread__isnull = True, )
Example #28
0
    def render(self, name, value, attrs=None):
        final_attrs = self.build_attrs(attrs, name=name)
        output = [u'<select%s><option value="">%s</option>' % (forms.util.flatatt(final_attrs), _(u'-- Select Category --'))]

        # Load all root categories and iterate them...
        group = get_current_group()
        categories = Category.objects.filter( group = group, parent__isnull = True )

        self._print_category_option(output, categories)
        
        output.append(u'</select>')
        return u'\n'.join(output)
Example #29
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)
Example #30
0
def has_permission_flag(user, flag, contentobject = None, group = None):
    """
    Checks if the given user has the given flag for the given model instance
    (object).
    If object is not given, it checks if the user has the flag globally
    assigned.
    """
    # Anonymous users won't have flags ...
    if user is None or not user.is_authenticated():
        return False

    # Super users have all flags anyway ..
    if user.is_superuser:
        return True

    if group is None:
        group = get_current_group()
    
    # TODO cache rolegroup_ids for user ?
    rolegroups = RoleGroupMember.objects.filter(rolegroup__group = group, user = user)
    rolegroup_ids = [rolegroup.rolegroup_id for rolegroup in rolegroups]

    # Check if the user has a global flag ...
    userselect = (Q(user = user) & Q(rolegroup__isnull = True)) \
        | (Q(rolegroup__in = rolegroup_ids) & Q(user__isnull = True))
    matches = RoleMember.objects.filter( 
        userselect,
        role__permission_flags__name__exact = flag, has_limitations = False ).count()

    if matches > 0:
        return True

    # if it wasn't found ...
    # ... lookup flag for the given model:
    if contentobject is not None:
        content_type = ContentType.objects.get_for_model(contentobject)
        rolemembers = RoleMember.objects.filter( userselect,
                                                 role__permission_flags__name__exact = flag,
                                                 has_limitations = True,

                                                 rolememberlimitation__object_type = content_type,
                                                 rolememberlimitation__object_id = contentobject.id,
                                                 ).count()
        if rolemembers > 0:
            return True
            
    # ... lookup the group_administrator flag:
    if flag != 'group_administrator':
        return has_permission_flag(user, 'group_administrator')

    return False
def handle_wikilinks_match(matchgroups):
    if matchgroups.get('urls'):
        # We matched a HTML link .. simply return the whole html code.
        return { 'label': matchgroups.get('urls') }
    if matchgroups.get('escape'):
        # CamelCase expresion was escaped ...
        return { 'label': matchgroups.get('wholeexpression') }
    snipname = matchgroups.get('camelcase') or matchgroups.get('snipname')
    label = matchgroups.get('sniplabel') or snipname.replace('_', ' ')

    cssclass = 'sph_wikilink'

    try:
        snip = WikiSnip.objects.get( group = get_current_group(),
                                     name = snipname, )
        href = snip.get_absolute_url()
    except WikiSnip.DoesNotExist:

        try:
            snip = WikiSnip( group = get_current_group(),
                            name = snipname, )
        except TypeError:
            log.error('No group found when getting wikilinks. Ignoring.')
            return { 'label' : label}

        if not snip.has_edit_permission() \
                and get_sph_setting('wiki_links_nonexistent_show_only_privileged'):
            return { 'label': label, }

        href = snip.get_absolute_editurl()
        cssclass += ' sph_nonexistent'
        if get_sph_setting( 'wiki_links_nonexistent_prefix' ):
            label = "create:"+label
    
    return { 'href': href,
             'label': label,
             'class': cssclass,
             }
Example #32
0
def is_spammer(user_id):
    from sphene.sphboard.models import UserPostCount
    user = User.objects.get(pk=user_id)
    if user.username in get_sph_setting('board_no_limits_users'):
        return False

    apply_spammer_limits = False
    try:
        upc = UserPostCount.objects.get_post_count(user, get_current_group())
    except User.DoesNotExist:
        upc = 0
    if upc < get_sph_setting('board_signature_required_post_count'):
        apply_spammer_limits = True
    return apply_spammer_limits
def is_spammer(user_id):
    from sphene.sphboard.models import UserPostCount
    user = User.objects.get(pk=user_id)
    if user.username in get_sph_setting('board_no_limits_users'):
        return False

    apply_spammer_limits = False
    try:
        upc = UserPostCount.objects.get_post_count(user, get_current_group())
    except User.DoesNotExist:
        upc = 0
    if upc < get_sph_setting('board_signature_required_post_count'):
        apply_spammer_limits = True
    return apply_spammer_limits
Example #34
0
    def items(self):
        group = get_current_group()

        ## Check permissions
        all_categories = Category.objects.filter(group=group)
        allowed_categories = ()
        for category in all_categories:
            if category.has_view_permission():
                allowed_categories += (category.id, )

        return Post.objects.filter(
            category__id__in=allowed_categories,
            thread__isnull=True,
        )
Example #35
0
def search_posts(query, category = None):
    group = get_current_group()
    user = get_current_user()
    #if group:
    #    query = u''.join((u'+', u'group_id:', unicode(group.id), ' ', query))
    categories = get_all_viewable_categories(group, user)
    if category is not None:
        prefix = u'category_id:%d' % category.id
    else:
        prefix = u' OR '.join([u'category_id:%d' % category for category in categories])
    query = u'(%s) AND (%s)' % (prefix, query)
    logger.debug('Searching for: %s' % query)
    ret = PostFilter(post_index.search(query=query), categories)
    logger.debug('Searching done.')
    return ret
Example #36
0
def search_posts(query, category=None):
    group = get_current_group()
    user = get_current_user()
    #if group:
    #    query = u''.join((u'+', u'group_id:', unicode(group.id), ' ', query))
    categories = get_all_viewable_categories(group, user)
    if category is not None:
        prefix = u'category_id:%d' % category.id
    else:
        prefix = u' OR '.join(
            [u'category_id:%d' % category for category in categories])
    query = u'(%s) AND (%s)' % (prefix, query)
    logger.debug('Searching for: %s' % query)
    ret = PostFilter(post_index.search(query=query), categories)
    logger.debug('Searching done.')
    return ret
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)
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 handlePreprocessorMacroCall(self, params):
        if 'snip' not in params:
            return 'No "snip" parameter given to redirect macro.'

        sphdata = get_current_sphdata()
        snipName = params['snip']
        try:
            snip = WikiSnip.objects.get(group=get_current_group(),
                                        name=snipName)
        except WikiSnip.DoesNotExist:
            return '**Wiki snip "%s" does not exist.**' % snipName

        request = get_current_request()
        if 'redirect' in request.GET and request.GET['redirect'] == 'no':
            return '**Redirect to "%s" disabled.**' % snipName

        sphdata['sphwiki_redirect_to_snip'] = snip

        return "**Redirecting to %s ...**" % snipName
    def handlePreprocessorMacroCall(self, params):
        if not params.has_key( 'snip' ):
            return 'No "snip" parameter given to redirect macro.'

        sphdata = get_current_sphdata()
        snipName = params['snip'];
        try:
            snip = WikiSnip.objects.get( group = get_current_group(),
                                         name = snipName )
        except WikiSnip.DoesNotExist:
            return '**Wiki snip "%s" does not exist.**' % snipName

        request = get_current_request()
        if 'redirect' in request.GET and request.GET['redirect'] == 'no':
            return '**Redirect to "%s" disabled.**' % snipName
        
        sphdata['sphwiki_redirect_to_snip'] = snip
        
        return "**Redirecting to %s ...**" % snipName
Example #41
0
    def get_or_create_for_object(self, model_instance):
        # Find a category associated with the given object
        model_type = ContentType.objects.get_for_model(model_instance)
        try:
            return self.filter(object_type__pk=model_type.id,
                               object_id=model_instance.pk).get()
        except CommentsCategoryConfig.DoesNotExist:
            # Find root category
            group = get_current_group()
            from sphene.sphcomments.categorytypes import CommentsCategoryType, CommentsOnObjectCategoryType
            if not group.id in root_category_id:
                try:
                    root_category_id[group.id] = Category.objects.get(
                        group=group,
                        category_type=CommentsCategoryType.name,
                    ).id
                except Category.DoesNotExist:
                    raise CommentsCategoryConfig.DoesNotExist(
                        'Please create a category of type "%s" (%s).' %
                        (CommentsCategoryType.label,
                         CommentsCategoryType.name))

            # create a new category ...
            # to copy preferences we need the root category ..
            root_category = Category.objects.get(pk=root_category_id[group.id])
            # TODO role permissions are currently not copied ..
            category = Category(
                name='comment category for "%s"' % str(model_instance),
                parent=root_category,
                group=group,
                category_type=CommentsOnObjectCategoryType.name,
                allowview=root_category.allowview,
                allowthreads=root_category.allowthreads,
                allowreplies=root_category.allowreplies,
                slug='comments-%s' % ''.join(
                    random.choices(string.ascii_uppercase + string.digits,
                                   k=5)))
            category.save()
            config = CommentsCategoryConfig(category=category,
                                            content_object=model_instance)
            config.save()
            return config
Example #42
0
    def clean(self, value):
        value = super(TagField, self).clean(value)

        if value is None:
            return value

        tag_label_strs = value.split(',')
        tag_labels = list()
        for tag_label in tag_label_strs:
            tag_label_str = tag_label.strip()

            if tag_label_str == '':
                # Ignore empty labels
                continue

            tag_label = tag_get_or_create_label(get_current_group(), tag_label_str)
            
            tag_labels.append(tag_label)

        return tag_labels
 def render(self, context):
     # TODO check permissions
     category_id = None
     if self.categoryvar:
         category_id = self.categoryvar.resolve(context)
     if not category_id:
         # if no category id is given simply display all categories
         # of the current group.
         category = None
         categories = get_all_viewable_categories(get_current_group(), get_current_user())
         threads = Post.objects.filter(category__id__in=categories, thread__isnull=True).order_by("-postdate")
     else:
         category = Category.objects.get(pk=category_id)
         threads = Post.objects.filter(category=category, thread__isnull=True).order_by("-postdate")
     context.push()
     context["threads"] = threads
     context["category"] = category
     output = self.nodelist.render(context)
     context.pop()
     return output
def show_archive(categories = None):
    group = get_current_group()
    if categories is None:
        categories = get_board_categories(group)
    threads = get_posts_queryset(group, categories)
    # Get dates
    threads = threads.values('postdate')
    # Count posts in (year, month) tuples
    months_dict = dict()
    for t in threads:
        tmp = (t['postdate'].year, t['postdate'].month)
        months_dict[tmp] = months_dict.get(tmp, 0) + 1

    # Sort it by year and then by month, in increasing order (last month first)
    months = sorted(months_dict.iteritems(), \
                        lambda a, b: \
                        cmp(a[0][0], b[0][0]) \
                        or cmp(a[0][1], b[0][1]))
    months.reverse()
    return {'links': months}
def show_archive(categories=None):
    group = get_current_group()
    if categories is None:
        categories = get_board_categories(group)
    threads = get_posts_queryset(group, categories)
    # Get dates
    threads = threads.values('postdate')
    # Count posts in (year, month) tuples
    months_dict = dict()
    for t in threads:
        tmp = (t['postdate'].year, t['postdate'].month)
        months_dict[tmp] = months_dict.get(tmp, 0) + 1

    # Sort it by year and then by month, in increasing order (last month first)
    months = sorted(months_dict.iteritems(), \
                        lambda a, b: \
                        cmp(a[0][0], b[0][0]) \
                        or cmp(a[0][1], b[0][1]))
    months.reverse()
    return {'links': months}
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)
Example #47
0
    def clean(self, value):
        value = super(TagField, self).clean(value)

        if value is None:
            return value

        tag_label_strs = value.split(',')
        tag_labels = list()
        for tag_label in tag_label_strs:
            tag_label_str = tag_label.strip()

            if tag_label_str == '':
                # Ignore empty labels
                continue

            tag_label = tag_get_or_create_label(get_current_group(),
                                                tag_label_str)

            tag_labels.append(tag_label)

        return tag_labels
Example #48
0
    def filter_unanswered_questions(self, category_ids=None):
        """
        Returns a query set for the latest unanswered questions.

        category_ids: a list of category ids, or None to take all
        of the current group.
        """
        categories = Category.objects.filter( \
            group = get_current_group(),
            category_type = 'sphquestion' )

        if category_ids is not None:
            # If category_ids was passed in, filter for them...
            categories.filter(id__in=category_ids)

        categories = filter(Category.has_view_permission, categories)

        category_ids = [category.id for category in categories]

        questions = self.filter( \
            post__thread__isnull = True,
            post__category__id__in = category_ids,
            answered = 0, ).order_by( 'post__postdate' )
        return questions
Example #49
0
 def title(self):
     group = get_current_group()
     return group.get_name()
Example #50
0
 def items(self):
     group = get_current_group()
     categories = get_board_categories(group)
     threads = get_posts_queryset(group, categories)
     return threads
def user_posts_count(user):
    return UserPostCount.objects.get_post_count(user, get_current_group())
Example #52
0
def get_blocks(blockregion, context):
    print "for region %s" % blockregion
    region = get_region(get_current_group(), get_current_user(), blockregion)
    block_instances = BlockInstancePosition.objects.filter(region=region, )

    context['blocks'] = block_instances
Example #53
0
 def item_link(self, item):
     group = get_current_group()
     return 'http://' + group.baseurl + item.snip.get_absolute_url()