Exemple #1
0
def markMinisites(minisite_paths):
    app = Zope2.app()
    if not minisite_paths:
        return
    # we suppose plone is in first level of zope
    portal_path = filter(None, minisite_paths[0].split("/"))[0]
    plonesite = app.get(portal_path)
    if not plonesite:
        return
    setSite(plonesite)
    # plone.api do not work here
    catalog = plonesite.portal_catalog
    brains = catalog({"object_provides": IMinisiteRoot.__identifier__})
    for brain in brains:
        obj = brain.getObject()
        noLongerProvides(obj, IMinisiteRoot)
        logger.debug("{0} unmark as minisite".format(obj.absolute_url()))

    for minisite_path in minisite_paths:
        try:
            minisite_root = api.content.get(minisite_path)
            docker_compose_hostname = os.environ.get("HOSTNAME") or ""
        except:  # noqa
            # if folder path is not publish
            minisite_root = None
        if (minisite_root and minisite_root.portal_type != "Link"
                and "instance1" in docker_compose_hostname):
            alsoProvides(minisite_root, IMinisiteRoot)
            notify(MinisiteMarkedEvent(minisite_root))
            logger.debug("{0} folder mark as minisite".format(minisite_path))
            commit()
Exemple #2
0
 def publishTraverse(self, request, name):
     result = super(MinisiteImageTraverser,
                    self).publishTraverse(request, name)
     if IContentish.providedBy(result):
         path = '/'.join(result.getPhysicalPath())
         logger.debug('Traversing {0}'.format(path))
         config = queryUtility(IMinisiteConfig, name=path)
         decorateRequest(request, config)
         checkPortlet(request, config)
     return result
Exemple #3
0
def decorateRequest(request, config):
    minisite = request.get('cpskin_minisite', None)
    if isinstance(minisite, Minisite):
        return
    if config:
        minisite = Minisite(request, config)
        if minisite.is_in_minisite_mode:
            alsoProvides(request, IInMinisite)
        else:
            alsoProvides(request, IInPortal)
        logger.debug('Request at {} is marked as minisite'.format(request.URL))
    else:
        minisite = NotInMinisite()
    request.set('cpskin_minisite', minisite)
Exemple #4
0
def registerMinisitesFromFile(filename):
    config = ConfigParser.RawConfigParser()
    try:
        config.read(filename)
    except ConfigParser.MissingSectionHeaderError:
        return
    logger.debug("Register minisites from file {0}".format(filename))
    for section in config.sections():
        try:
            portal_url = config.get(section, "portal_url")
            minisite_url = config.get(section, "minisite_url")
            minisite = MinisiteConfig(
                main_portal_url=portal_url,
                minisite_url=minisite_url,
                search_path=section,
                filename=filename,
            )
            registerMinisite(minisite)
            return section
        except KeyError:
            continue
Exemple #5
0
def registerMinisite(config):
    logger.debug("Register minisite at {0} for {1}".format(
        config.main_portal_url, config.minisite_url))
    provideUtility(config, name=config.search_path)
Exemple #6
0
def redirect(event):
    white_list_name = [
        'portal_javascripts',
        'portal_css',
    ]
    white_list_end = (
        '.png',
        '.gif',
        '.ico',
        # '.jpeg',
        # '.jpg',
    )
    request = event.request
    parents = request['PARENTS']

    minisite_obj = get_minisite_object(request)
    if not minisite_obj:
        return

    minisite_index = parents.index(minisite_obj)
    first_child = parents[minisite_index - 1]
    if not safe_hasattr(first_child, 'getId'):
        return

    first_name = first_child.getId()
    if not first_name:
        return

    if first_name in white_list_name \
            or first_name.startswith('++') \
            or first_name.endswith(white_list_end):
        logger.debug('Found a white list {0}'.format(first_name))
        return

    if safe_hasattr(aq_base(minisite_obj), first_name):
        # no acquisition used here, object is in minisite
        logger.debug('No acquisition detected to {0}'.format(first_name))
        return

    obj = queryMultiAdapter((minisite_obj, request), name=first_name)
    if obj and not IItem.providedBy(obj):
        # it's a view
        logger.debug('Found a view for {0}'.format(first_name))
        return
    end_of_url = request['ACTUAL_URL'].replace(minisite_obj.absolute_url(), '')
    # sample : '/agenda/rss_feed_view'
    base_object = None
    if "/" in end_of_url:
        # we need to remove views / attribute from minisite object calculation
        context_end_url = end_of_url.split('@@')[0].strip("/")
        ends = context_end_url.split("/")
        ends.reverse()
        for end in ends:
            base_object = get_acquired_base_object(minisite_obj, end)
            if base_object is not None:
                break
    else:
        base_object = get_acquired_base_object(minisite_obj, end_of_url)
    redirect_base_url = url_in_portal_mode(base_object, request)
    redirect_base_url = redirect_base_url.rstrip('/')
    redirect_url = '{0}{1}'.format(redirect_base_url, end_of_url)

    logger.info('Redirecting to {0} {1}'.format(redirect_url, first_name))
    if redirect_url.endswith('/index_html'):
        redirect_url = redirect_url.replace('/index_html', '')
    raise Redirect(redirect_url)