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()
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
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)
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
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)
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)