def calculateTopLevel(context, portlet, request=None): """Calculate top level of navigation menu to take care of 4th level menu NB : IFourthLevelNavigation is activated on the third level folder """ if portlet.topLevel != 3 or not HAS_MENU: return portlet.topLevel portal = api.portal.get() contextPhyPath = context.getPhysicalPath() portalPhyPath = portal.getPhysicalPath() path = [ elem for elem in list(contextPhyPath) if elem not in list(portalPhyPath) ] # noqa depth = len(path) if depth >= 3 and 'dexterity-types' not in path: subLevels = depth - 3 if subLevels: thirdLevelPath = '/'.join(contextPhyPath[:-subLevels]) else: thirdLevelPath = '/'.join(contextPhyPath) thirdLevelFolder = portal.unrestrictedTraverse(thirdLevelPath) if IFourthLevelNavigation.providedBy(thirdLevelFolder): return 4 if request: if IInMinisiteBase.providedBy(request): minisite_obj = get_minisite_object(request) if minisite_obj and IHNavigationActivated.providedBy( minisite_obj): # noqa return get_minisite_navigation_level(minisite_obj) + 1 return portlet.topLevel
def horizontalNavActivated(self): if not HAS_MINISITE: return False if not self.isInMinisite(): return False request = self.request minisite_root = get_minisite_object(request) return IHNavigationActivated.providedBy(minisite_root)
def update(self): context = aq_inner(self.context) portal_tabs_view = getMultiAdapter((context, self.request), name='ms_portal_tabs_view') self.portal_tabs = portal_tabs_view.topLevelTabs() self.selected_tabs = self.selectedTabs(portal_tabs=self.portal_tabs) self.selected_portal_tab = self.selected_tabs['portal'] self.minisite_root = get_minisite_object(self.request) self.actions = actions(self.request)
def change_urls(soup, request, html_ids=[], html_classes=[]): """ Change a href and img src urls from minisites to portal urls """ minisite = request.get('cpskin_minisite', None) if not minisite: return minisite_obj = get_minisite_object(request) tags = [soup.find(id=html_id) for html_id in html_ids] for cl in html_classes: tags.extend(soup.find_all(class_=cl)) for tag in tags: if tag is None: continue a_tags = tag.find_all('a') for a_tag in a_tags: href = a_tag.get('href') if not href: continue if minisite.minisite_url not in href: # external url continue end_of_url = href.replace(minisite.minisite_url, '') container = get_acquired_base_object(minisite_obj, end_of_url) if container is None: continue container_url = url_in_portal_mode(container, request) container_url = container_url.rstrip('/') a_tag['href'] = '{0}{1}'.format(container_url, end_of_url) a_tag['target'] = '_blank' img_tags = tag.find_all('img') for img_tag in img_tags: src = img_tag.get('src') if not src: continue if minisite.minisite_url not in src: # external url continue end_of_url = src.replace(minisite.minisite_url, '') container = get_acquired_base_object(minisite_obj, end_of_url) if container is None: continue container_url = url_in_portal_mode(container, request) container_url = container_url.rstrip('/') img_tag['src'] = '{0}{1}'.format(container_url, end_of_url)
def update(self): self.minisite_root = get_minisite_object(self.request) self.root_path = '/'.join(self.minisite_root.getPhysicalPath()) self.actions = actions(self.request)
def __init__(self, context, request): super(MSHorizontalNavigationDisable, self).__init__(context, request) noLongerProvides(get_minisite_object(request), IHNavigationActivated) _redirect(self, msg=_(u'Minisite horizontal Navigation disabled on content'))
def can_disable_hnavigation(self): minisite_root = get_minisite_object(self.request) return self.is_in_minisite_mode and ( IHNavigationActivated.providedBy(minisite_root))
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)
def content(self): request = self.request minisite_obj = get_minisite_object(request) document = getattr(minisite_obj, 'footer-mini-site', None) return document