Пример #1
0
class PluginConfig(Plugin):
    name = 'File browser'
    description = 'File browser plugin'
    version = '0.0.1a'

    config_params = [
        params.Single(name='filebrowser_root',
                      label=_('Root below MEDIA_ROOT'),
                      default='filebrowser'),
        params.Single(name='filebrowser_docs_root',
                      label=_('Docs root below MEDIA_ROOT'),
                      default='filebrowser_docs'),
        params.Single(name='filebrowser_docs_url',
                      label=_('Docs url below MEDIA_URL'),
                      default='filebrowser_docs/'),
    ]

    url_prefixes = (({
        'en': 'filebrowser',
        'es': 'navegador_de_ficheros'
    }, 'plugins.filebrowser.urls'), )

    def models(self):
        return [(Repository, RepositoryModelAdmin),
                (Document, DocumentModelAdmin)]

    def section_models(self):
        return [(Repository, RepositorySectionModelAdmin)]

    def get_blocks(self):
        return [LatestFilesBlock]
Пример #2
0
class PluginConfig(Plugin):
    name = 'ContactForm'
    description = 'ContactForm plugin'
    version = '0.0.1'

    url_prefixes = (({
        'en': 'contactform',
        'es': 'formulario_de_contacto'
    }, 'plugins.contactform.urls'), )

    config_params = [
        params.Single(name='rpubk',
                      label=_('recaptcha public key'),
                      default='6LegA8ASAAAAAF9AhuaPUPYb94p3vE4IkHOxfgAi'),
        params.Single(name='rprivk',
                      label=_('recaptcha private key'),
                      default='6LegA8ASAAAAAAI-nxu0DcCdDCQIzuWCNbKOXPw3'),
    ]

    def get_blocks(self):
        return [ContactFormBlock]

    def get_model_admins(self):
        return [(ContactForm, ContactFormAdmin),
                (SentContactForm, SentContactFormAdmin)]

    def models(self):
        return [(ContactForm, ContactFormAdmin),
                (SentContactForm, SentContactFormAdmin)]
Пример #3
0
class GoogleAnalyticsBlock(Block):
    name = 'map'
    default_place = 'meta'
    help_text = _('Block that includes the javascript needed to enable google analytics')
    verbose_name = _('Google Analytics Block')

    config_params = BaseBlock.config_params + [
        params.Single(
            name="google_analytics_id",
            label=_("google analytics id"),
            default='',
        ),
        params.Single(
            name="web_master_tools_id",
            label=_("Web master tools id"),
            default='',
        ),
    ]

    def render(self, request, place, context, *args, **kwargs):
        context = {
            'google_analytics_id': self.get_config().get('google_analytics_id').get_value(),
            'web_master_tools_id': self.get_config().get('web_master_tools_id').get_value(),
            }
        return self.render_block(
            request,
            template_name='googleanalytics/googleanalytics_block.html',
            block_title=_('Google Analytics'),
            context=context,
        )
Пример #4
0
class PluginConfig(Plugin):
    name = 'Registration'
    description = 'Registration plugin'
    version = '0.0.1'

    url_prefixes = (({
        'en': 'registration',
        'es': 'registro'
    }, 'plugins.registration.urls'), )

    config_params = [
        params.PositiveInteger(
            name='caducity',
            label=_('hours before the registration url expires (0 for never)'),
            default=72),
        params.Single(
            name='profile_form_class',
            label=_('Form class to save extra profile data'),
            default="plugins.registration.forms.DefaultMerengueProfileForm"),
    ]

    def get_actions(self):
        return [RegisterAction]

    def models(self):
        return [(Registration, RegistrationAdmin)]
Пример #5
0
class UserTimelineBlock(TimelineProvider, Block):
    name = 'usertimeline'
    default_place = 'rightsidebar'
    verbose_name = _('Timeline of Twitter User')
    help_text = _('Block to show a timeline of Twitter for an user.')
    template_name = 'twitter/timeline_block.html'

    config_params = BaseBlock.config_params + [params.PositiveInteger(name='limit',
                                            label=ugettext('Limit for twitter block'),
                                            default=3),
                     params.Single(name='user',
                                   label=ugettext('Tweets of this user'),
                                   default='merengueproject'),
                     ]

    def get_block_title(self):

        user = self.get_config().get('user', []).get_value()
        return "@%s" % user

    def get_link(self):
        error = self.get_tweets()
        if "doesn't exists" in error[1]:
            return ('Twitter Mainpage', 'http://www.twitter.com/')
        else:
            user = self.get_config().get('user', []).get_value()
            return ('Follow ' + user + ' on Twitter!', 'http://www.twitter.com/#!/' + user + '/')
Пример #6
0
class PluginConfig(Plugin):
    name = 'ITags'
    description = 'Internazionalized Tags'
    version = '0.0.1a'

    config_params = [
        params.Single(name='main_language', label=_('Main language for tags'), default=settings.LANGUAGE_CODE),
    ]

    url_prefixes = (
        ('itags', 'plugins.itags.urls'),
    )

    def get_model_admins(self):
        return [(ITag, ITagAdmin)]

    def get_viewlets(self):
        return [TagCloudViewlet]

    def get_blocks(self):
        return [TagCloudBlock, ContentTagsBlock]

    def post_install(self):
        from tagging.models import Tag
        [i.save() for i in Tag.objects.all()]
Пример #7
0
class HashtagTimelineBlock(TimelineProvider, Block):
    name = 'hashtagtimeline'
    default_place = 'rightsidebar'
    verbose_name = _('Timeline of Tag in Twitter ')
    help_text = _('Block to show a timeline of Twitter for a hashtag.')
    template_name = 'twitter/hashtag_timeline_block.html'

    config_params = BaseBlock.config_params + [params.PositiveInteger(name='limit',
                                            label=ugettext('Limit for twitter block'),
                                            default=3),
                     params.Single(name='hashtag',
                                   label=ugettext('Tweets of a hashtag'),
                                   default='#merengueproject'),
                     ]

    def get_block_title(self):
        hashtag = self.get_config().get('hashtag', []).get_value()
        return hashtag

    def get_link(self):
        hashtag = self.get_config().get('hashtag', []).get_value()
        if hashtag.startswith('#'):
            return ('Search ' + hashtag + ' on Twitter!', 'http://www.twitter.com/#!/search/%23' + hashtag[1:] + '/')
        else:
            return ('Search ' + hashtag + ' on Twitter!', 'http://www.twitter.com/#!/search/' + hashtag + '/')
Пример #8
0
class PluginConfig(Plugin):
    """
    Redirect Plugin config instance
    """
    name = 'Redirects'
    description = 'Redirects Plugin'
    version = '0.0.1'

    config_params = [
        params.Single(name='review_title',
                      label=_('title for reviewing task'),
                      default=_('Review this redirection')),
        params.List(name="review_users",
                    label=_("Users by default to have redirects reviewed"),
                    choices=get_user_choices),
        params.List(name="review_groups",
                    label=_("User groups by default to have redirects reviewed"),
                    choices=get_group_choices),
    ]

    def get_middlewares(self):
        return ['plugins.redirects.middleware.RedirectMiddleware']

    def get_model_admins(self):
        return [(Redirect, RedirectAdmin), ]

    def get_perms(self):
        return (
            (_('Submit redirects'), 'submit_redirects', [Redirect], ),
            (_('Manage redirects'), 'manage_redirects', [Redirect], )
        )
Пример #9
0
class PluginConfig(ContentTypeFilterProvider, Plugin):
    name = 'RSS syndication'
    description = 'Plugin to allow RSS syndication of contents'
    version = '0.0.1a'

    url_prefixes = (('rss', 'plugins.rss.urls'), )

    config_params = ContentTypeFilterProvider.config_params + [
        params.PositiveInteger(
            name="limit",
            label=_("number of elements to show at the feed"),
            default=10,
        ),
        params.Single(name="portal",
                      label=_("portal name that will be shown as RSS title"),
                      default="Merengue RSS"),
    ]

    def get_actions(self):
        return [GenerateRSS, GenerateSectionRSS]

    def get_model_admins(self):
        return []

    def get_blocks(self):
        return [
            RSSGlobalFeed,
        ]
Пример #10
0
class GoogleSearchBlock(Block):
    name = 'googlesearch'
    default_place = 'leftsidebar'
    verbose_name = ugettext_lazy('Google Search Block')
    help_text = ugettext_lazy('The block represents the google search widget')
    default_caching_params = {
        'enabled': False,
        'only_anonymous': False,
        'vary_on_user': False,
        'timeout': 5184000,
        'vary_on_url': False,
        'vary_on_language': True,
    }

    config_params = BaseBlock.config_params + [
        params.Single(name='custom_search_control',
                      label=_('Custom search control'),
                      default='003808332573069177904:wm3_yobt584'),
        params.Single(name='search_result_content',
                      label=_('Search result content (element\'s id of DOM)'),
                      default='content'),
        params.Single(name='search_form_content',
                      label=_('Search form content (element\'s id of DOM)'),
                      default='cse'),
    ]

    def render(self,
               request,
               place,
               context,
               block_content_relation=None,
               *args,
               **kwargs):
        language_get = request.GET.get('set_language', None)
        # if we just change the language, get_language_from_request function does
        # not work fine, so first we check if the language have changed now
        language = language_get or get_language_from_request(request)
        return self.render_block(
            request,
            template_name='googlesearch/block_googlesearch.html',
            block_title=_('Search'),
            context={
                'plugin_config': self.get_config(),
                'language': language
            })
Пример #11
0
class PluginConfig(Plugin):
    name = 'EzDashboard'
    description = 'Dashboard for users plugins like iGoogle, based on ' \
                  'EzWeb platform'
    version = '0.0.2a'
    url_prefixes = (({
        'en': 'dashboard',
        'es': 'escritorio'
    }, 'plugins.ezdashboard.urls'), )
    required_apps = ('django.contrib.sites', )
    config_params = [
        params.Single(name='url',
                      label=_('EzWeb base URL'),
                      default='http://ezweb.yaco.es/'),
        params.Single(name='style',
                      label=_('EzWeb iframe CSS style'),
                      default='border: none;'),
        params.Single(name='class',
                      label=_('EzWeb iframe CSS class'),
                      default=''),
        params.Single(name='width',
                      label=_('EzWeb iframe width'),
                      default='100%'),
        params.Single(name='height',
                      label=_('EzWeb iframe height'),
                      default='500px'),
        params.Single(name='lite', label=_('EzWeb lite'), default=True),
    ]

    def get_actions(self):
        return [
            DashboardAction,
        ]
Пример #12
0
class PluginConfig(Plugin):
    name = 'Piwik'
    description = 'Piwik integration plugin'
    version = '0.0.1'

    url_prefixes = (({
        'en': 'stats',
        'es': 'estadisticas'
    }, 'plugins.piwik.urls'), )

    config_params = [
        params.Single(name='token', label=_('authentication token')),
        params.Single(name='url', label=_('piwik url')),
        params.Single(name='site_id', label=_('site id')),
        params.Single(name='metric', label=_('metric'), default=METRIC),
        params.Single(name='period', label=_('period'), default=PERIOD),
        params.Single(name='date', label=_('date'), default=DATE),
    ]

    def get_actions(self):
        return []

    def get_blocks(self):
        return [PiwikBlock]

    def section_models(self):
        return []

    def get_perms(self):
        return [('View all stats', 'view_all_stats'),
                ('View my stats', 'view_my_stats')]
Пример #13
0
class PluginConfig(Plugin):
    name = 'Core'
    description = 'Core plugin'
    version = '0.0.1a'
    model_admins = [
        (CustomMeta, CustomMetaAdmin),
        (Document, DocumentAdmin),
        (Photo, PhotoAdmin),
        (Video, VideoAdmin),
        (Audio, AudioAdmin),
    ]

    url_prefixes = (
        ('core', 'plugins.core.urls'),
    )

    config_params = [
        params.Content(name='home_initial_content',
                       label=_('home initial content'), default=1),
        params.Single(name='login_url',
                       label=_('Login URL'), default=settings.LOGIN_URL)]

    def get_actions(self):
        return [AdminAction, LoginAction, LogoutAction, PrintAction, HotLinkAction]

    def get_blocks(self):
        return [CoreMenuBlock, NavigationBlock, PortalMenuBlock,
                ContactInfoBlock, AnnouncementsBlock, PortalLinksBlock]

    def get_toolbar_panels(self):
        return [InplaceEditPanel, InlineTransPanel, AddBlockPanel,
                InvalidateCachePanel, VersionPanel, ]

    def models(self):
        return self.model_admins

    def get_model_admins(self):
        return self.model_admins

    def section_models(self):
        return [(Document, DocumentRelatedModelAdmin)]

    def get_perms(self):
        return ()

    def get_section_prefixes(self):
        return (reverse('section_index'), )
Пример #14
0
class PluginConfig(Plugin):
    name = 'Custom portlet'
    description = 'Custom portlet'
    version = '0.0.1a'

    config_params = [
        params.Single(name='limit',
                      label=_('data limit of custom portlet'),
                      default=customportlet.MAX_BLOCKS_NUMBER),
    ]

    @classmethod
    def get_blocks(cls):
        return [CustomPortletBlock]

    @classmethod
    def get_model_admins(cls):
        return [(CustomPortlet, CustomPortletAdmin)]
Пример #15
0
class CategorizedBannerBlock(BannerBlock):

    config_params = BannerBlock.config_params + [
        params.Single(name='category',
                      label=ugettext('slug of the category to filter'),
                      default=''),
    ]

    def get_contents(self, request=None, context=None, section=None):
        banners_list = Banner.objects.published()
        if section and self.get_config().get('filtering_section',
                                             False).get_value():
            banners_list = filtering_in_section(banners_list, section)
        category_name = self.get_config().get('category',
                                              '').get_value() or None
        if category_name:
            banners_list = banners_list.filter(categories__slug=category_name)
        return banners_list
Пример #16
0
class AllBannerViewlet(ViewLetQuerySetItemProvider, Viewlet):
    name = 'allbanner'
    help_text = _('All Banners')
    verbose_name = _('All banner block')

    config_params = ViewLetQuerySetItemProvider.config_params + [
        params.Single(name='limit', label=ugettext('limit for banner viewlet'),
                      default='3'),
    ]

    def get_contents(self, request=None, context=None, section=None):
        number_banners = self.get_config().get('limit', []).get_value()
        banners_list = get_banners(request, number_banners)
        return banners_list

    def render(self, request, context):
        banner_list = self.get_queryset(request, context)
        return self.render_viewlet(request, template_name='banner/viewlet_latest.html',
                                  context={'banner_list': banner_list,
                                           'is_paginated': True,
                                           'paginate_by': 10})
Пример #17
0
class LatestLinkViewlet(ViewLetQuerySetItemProvider, Viewlet):
    name = 'latestlink'
    help_text = _('Latest link')
    verbose_name = _('Latest links')

    config_params = ViewLetQuerySetItemProvider.config_params + [
        params.Single(name='limit',
                      label=ugettext('limit for link viewlet'),
                      default='10'),
    ]

    def get_contents(self, request=None, context=None, section=None):
        number_links = self.get_config().get('limit', []).get_value()
        link_list = get_links(request, number_links)
        return link_list

    def render(self, request, context):
        link_list = self.get_queryset(request, context)
        return self.render_viewlet(request,
                                   template_name='link/viewlet_latest.html',
                                   context={'link_list': link_list})
Пример #18
0
class PortalLinksBlock(LinkBaseBlock):
    """Generic block that renders portal links"""
    name = 'portallinks'
    default_place = 'header'
    help_text = _('Generic block that renders portal links')
    verbose_name = _('Portal Links Block')

    config_params = BaseBlock.config_params + [
        params.Single(
            name="category",
            label=_("Portal link category"),
            choices=settings.PORTAL_LINK_CATEGORIES,
            default=settings.PORTAL_LINK_CATEGORIES[0][0],
        ),
    ]

    @property
    def category(self):
        return self.get_config().get('category', None).get_value()

    @property
    def template_name(self):
        category = self.get_config().get('category', None).get_value()
        return 'core/block_%slinks.html' % category
Пример #19
0
class BaseBlock(RegistrableItem):
    model = RegisteredBlock
    singleton = False
    is_addable = True
    cache_allowed = True
    default_caching_params = {
        'enabled': False,
        'only_anonymous': False,
        'timeout': 0,
        'vary_on_url': False,
        'vary_on_language': True,
        'vary_on_user': False,
    }

    config_params = [
        params.Single(name='css_class',
                      label=_('css class to add to this block'),
                      default=''),
    ]

    def __init__(self, reg_item):
        super(BaseBlock, self).__init__(reg_item)
        self.content = getattr(reg_item, 'content', None)

    @classmethod
    def get_category(cls):
        return 'block'

    def get_rendered_content(self, request, render_args):
        """ render the block content, using cached content is needed """
        if settings.DEBUG:
            start = time()
        rendered_content = self.get_cached_content(request)
        if rendered_content is None:
            is_cached = False
            rendered_content = self.render(*render_args)
            self.set_cached_content(rendered_content, request)
        else:
            is_cached = True
        if settings.DEBUG:
            block_debug_info
            stop = time()
            duration = stop - start
            block_id = '%s.%s:%d' % (self.get_module(), self.get_class_name(),
                                     self.reg_item.id)
            block_debug_info[block_id] = {
                'block': block_id,
                'module': self.get_module(),
                'class_name': self.get_class_name(),
                'is_cached': is_cached,
                'time': duration,
            }
            logger.debug('(%.3f) %s; cached=%s' %
                         (duration, block_id, is_cached),
                         extra={
                             'duration': duration,
                             'block': block_id,
                             'is_cached': is_cached
                         })
        return rendered_content

    @classmethod
    def get_models_refresh_cache(self):
        return []

    def render_block(self,
                     request,
                     template_name='block.html',
                     block_title=None,
                     context=None):
        if context is None:
            context = {}
        registered_block = self.get_registered_item()
        css_class = self.get_config().get('css_class', None)
        css_class = css_class and css_class.get_value() or ''
        block_context = {
            'block_name': registered_block.name,
            'placed_at': registered_block.placed_at,
            'fixed_place': getattr(registered_block, 'fixed_place', False),
            'block_title': block_title or registered_block.name,
            'registered_block': registered_block,
            'css_class': css_class,
            'has_config': self.has_config(),
        }
        block_context.update(context)
        rendered_content = render_to_string(
            template_name,
            block_context,
            context_instance=RequestContext(request))
        return rendered_content

    def _get_cache_key(self, request):
        registered_block = self.reg_item
        key_prefix = 'blocks_cache_%d' % registered_block.id
        if registered_block.cache_vary_on_url:
            key_prefix += '-%s' % urlquote(request.META['PATH_INFO'])
            params = request.GET.urlencode()
            if params:
                key_prefix += '?%s' % params
        if registered_block.cache_vary_on_language:
            key_prefix += '-%s' % get_language()
        if registered_block.cache_vary_on_user:
            key_prefix += '-%s' % request.user.username
        if len(key_prefix) > settings.CACHE_MAX_KEY:
            key_prefix = hashlib.md5(key_prefix).hexdigest()
        return key_prefix

    def _get_registry_cache_key(self):
        return 'blocks_cache_registry'

    def is_cacheable(self, request):
        registered_block = self.reg_item
        return registered_block.is_cached and \
            not (not request.user.is_anonymous() and registered_block.cache_only_anonymous)

    def get_cached_content(self, request):
        if not self.is_cacheable(request):
            return None
        cache_key = self._get_cache_key(request)
        return cache.get(cache_key)

    def set_cached_content(self, content, request):
        if not self.is_cacheable(request):
            return  # not need to cache nothing
        cache_key = self._get_cache_key(request)
        self._register_cache_key(cache_key)
        content = '<div class="cached-block">%s</div>' % content
        return cache.set(cache_key, content, self.reg_item.cache_timeout)

    def set_default_caching(self):
        reg_block = self.reg_item
        def_caching_params = self.default_caching_params
        reg_block.is_cached = def_caching_params.get('enabled', False)
        reg_block.cache_timeout = def_caching_params.get('timeout', 0)
        reg_block.cache_only_anonymous = def_caching_params.get(
            'only_anonymous', False)
        reg_block.cache_vary_on_language = def_caching_params.get(
            'vary_on_language', True)
        reg_block.cache_vary_on_url = def_caching_params.get(
            'vary_on_url', False)
        reg_block.cache_vary_on_user = def_caching_params.get(
            'vary_on_user', False)
        reg_block.save

    def invalidate_cache(self):
        registry_cache_key = self._get_registry_cache_key()
        cache_registry = self._get_registry_cache()
        registered_block = self.reg_item
        cache.delete_many(cache_registry[registered_block.id])
        del cache_registry[registered_block.id]
        cache.set(registry_cache_key, cache_registry)

    def _get_registry_cache(self):
        registry_cache_key = self._get_registry_cache_key()
        registered_block = self.reg_item
        cache_registry = cache.get(registry_cache_key)
        if cache_registry is None:
            cache_registry = {}
        if registered_block.id not in cache_registry:
            cache_registry[registered_block.id] = []
        return cache_registry

    def _register_cache_key(self, cache_key):
        registry_cache_key = self._get_registry_cache_key()
        cache_registry = self._get_registry_cache()
        cache_registry[self.reg_item.id].append(cache_key)
        cache.set(registry_cache_key, cache_registry)
Пример #20
0
class PluginConfig(Plugin):

    name = 'Saml2'
    description = 'Adds SAML2 authentication and authorization to Merengue'
    version = '0.1.0dev'

    url_prefixes = (('saml2', 'plugins.saml2.urls'), )

    required_plugins = {'core': {}}
    required_apps = {
        'djangosaml2': {},
    }

    config_params = [
        params.Single(name='entity_name', label=_('Entity Name')),
        params.Single(name='username_attribute',
                      label=_('Username attribute'),
                      default='uid'),
        params.Single(name='first_name_attribute',
                      label=_('First name attribute'),
                      default='cn'),
        params.Single(name='last_name_attribute',
                      label=_('First name attribute'),
                      default='sn'),
        params.Single(name='email_attribute',
                      label=_('Email attribute'),
                      default='mail'),
        params.Single(
            name='required_attributes',
            label=_('Comma/space separated list of required attributes'),
            default='uid'),
        params.Single(
            name='optional_attributes',
            label=_('Comma/space separated list of optional attributes'),
            default=''),
        params.Single(name='xmlsec_binary',
                      label=_('Path to xmlsec1 program'),
                      default='/usr/bin/xmlsec1'),
        params.Single(name='key_file_path',
                      label=_('Certificate private part')),
        params.Single(name='cert_file_path',
                      label=_('Certificate public part')),
        params.PositiveInteger(name='valid_for',
                               label=_('Expiration time in hours'),
                               default=24)
    ]

    def get_model_admins(self):
        return [
            (IdentityProvider, IdentityProviderAdmin),
            (ContactPerson, ContactPersonAdmin),
            (Organization, OrganizationAdmin),
        ]

    def get_actions(self):
        return [Saml2LoginAction, Saml2LogoutAction]

    def post_actions(self):
        login_smal2_url = '/saml2/login/'
        plugin = RegisteredPlugin.objects.get_by_item(get_plugin('core'))
        login_url = plugin.config.get('login_url', None)
        if login_url != login_smal2_url and (not login_url or login_url
                                             == settings.LOGIN_URL):
            plugin.config['login_url'] = login_smal2_url
            plugin.save()
Пример #21
0
class LatestFilesBlock(BlockQuerySetItemProvider, Block):
    name = 'latestfiles'
    default_place = 'rightsidebar'
    verbose_name = _('Latest Files Block')
    help_text = _(
        'Block that represents a list of recent files of the filebrowser')

    config_params = BaseBlock.config_params + BlockQuerySetItemProvider.config_params + [
        params.PositiveInteger(
            name='limit',
            label=_('number of files for the "Latest Files" block'),
            default=3,
        ),
        params.Single(
            name='mainrepo',
            label=_('Name of the repository to show files from it'),
            default='',
        ),
        params.Bool(
            name='filtering_document',
            label=
            _('If the repository name is equal to document slug, filter for the files of this repository'
              ),
            default=False,
        ),
    ]

    default_caching_params = {
        'enabled': False,
        'timeout': 3600,
        'only_anonymous': True,
        'vary_on_user': False,
        'vary_on_url': True,
        'vary_on_language': True,
    }

    def get_contents(self, request=None, context=None, section=None):
        repos = Repository.objects.all()
        return repos

    def queryset(self, request=None, context=None, section=None):
        queryset = self.get_contents(request, context, section)
        content = context.get('content', None)
        document = isinstance(content, Document) and content

        if section and self.get_config().get('filtering_section',
                                             False).get_value():
            queryset = queryset.filter(section=section)
        if self.get_config().get('filtering_document', False).get_value() and \
           document and queryset.filter(name=document.slug):
            queryset = queryset.filter(name=document.slug)
        return queryset

    def render(self, request, place, context, *args, **kwargs):
        repolist = self.get_queryset(request, context)
        limit = self.get_config().get('limit').get_value()
        mainrepo = self.get_config().get('mainrepo').get_value()
        main = None
        if mainrepo:
            try:
                main = repolist.get(name=mainrepo)
            except Repository.DoesNotExist:
                pass
        if main:
            files = main.latest_files(limit)
        else:
            if not repolist:
                return ''
            files = []
            for repo in repolist:
                files += repo.latest_files(limit)
        if not files:
            return ''
        files = sorted(files, key=lambda f: f.modificated,
                       reverse=True)[:limit]
        return self.render_block(
            request,
            template_name='filebrowser/blocks/latestfiles.html',
            block_title=ugettext('Downloads'),
            context={
                'files': files,
            })
Пример #22
0
class HighlightMenu(Block):
    name = 'highlightmenu'
    verbose_name = _('Highlight menu')
    help_text = _('Block with the microsite links')
    default_place = 'rightsidebar'

    config_params = Block.config_params + BlockQuerySetItemProvider.config_params + [
        params.PositiveInteger(
            name='limit',
            label=_('number of links for the "Highlight menu" block'),
            default=5,
        ),
        params.Single(
            name='background',
            label=_('background color for the "Highlight menu" block'),
            default='#ffffff',
        ),
        params.Single(
            name='link_color',
            label=_('color of the links inside the "Highlight menu" block'),
            default='#0000ff',
        ),
        params.Single(
            name='over_color',
            label=
            _('color of the links (when the mouse is over) inside the "Highlight menu" block'
              ),
            default='#ff00ff',
        ),
    ]

    default_caching_params = {
        'enabled': False,
        'timeout': 3600,
        'only_anonymous': True,
        'vary_on_user': False,
        'vary_on_url': True,
        'vary_on_language': True,
    }

    @classmethod
    def get_models_refresh_cache(self):
        return [MicroSiteLink]

    def render(self, request, place, context, *args, **kwargs):
        section = get_section(request, context)
        if isinstance(section, MicroSite):
            microsite = section
            limit = self.get_config().get('limit').get_value()
            links = MicroSiteLink.objects.filter(
                microsite=microsite).visible_by_user(request.user)
            links = links[:limit]
            conf = {
                'background': self.get_config().get('background').get_value(),
                'link_color': self.get_config().get('link_color').get_value(),
                'over_color': self.get_config().get('over_color').get_value(),
            }
        else:
            microsite = None
            links = []
            conf = {}
        return self.render_block(
            request,
            template_name='microsite/blocks/highlight_menu.html',
            block_title=ugettext('Highlight menu'),
            context={
                'microsite': microsite,
                'links': links,
                'conf': conf
            })