def canonical_url(request): """ If we're in a wiki farm, make sure we're at the canonical location for this wiki -- e.g. their domain if they have one. """ from Sycamore import farm if hasattr(request, 'env'): env = request.env else: return False domain = env.get('HTTP_HOST', '') if request.config.domain and not domain == request.config.domain: # we redirect to the canonical location for this wiki: # their proper domain name wiki_url = farm.getWikiURL(request.config.wiki_name, request) query_string = '' if request.query_string: query_string = '?' + request.query_string url = (wiki_url.encode(config.charset) + request.path_info[1:] + query_string) request.http_redirect(url, status="301 Moved Permanently") return True return False
def interwikilink(self, url, text, **kw): """ Return the HTML linking to the interwiki page. """ href, wikitag, wikiurl, wikitail, wikitag_bad, wikitype = \ self.interwikiurl(url, **kw) # link to self? if wikitag is None: return self._word_repl(wikitail) # return InterWiki hyperlink if wikitag_bad: text = "No Interwiki entry for: " + wikitag html_class = 'badinterwiki' else: html_class = 'interwiki' # if the wiki they're linking to is in our farm and if they have a # defined icon then display that if not kw.get('no_icon'): if wikitype == wikiutil.INTERWIKI_FARM_TYPE: current_wiki = self.request.config.wiki_name image_pagename = '%s/%s' % (config.wiki_settings_page, config.wiki_settings_page_images) self.request.switch_wiki(wikitag) if wikiutil.hasFile(image_pagename, 'tinylogo.png', self.request): icon_url = getAttachUrl(image_pagename, 'tinylogo.png', self.request, base_url=farm.getWikiURL( wikitag, self.request), escaped=0) icon = self.image(html_class="interwiki_icon", src=icon_url, alt=wikitag, height='16', width='16') else: icon = self.request.theme.make_icon('interwiki', {'wikitag': wikitag}, html_class="interwiki_icon") self.request.switch_wiki(current_wiki) else: icon = self.request.theme.make_icon('interwiki', {'wikitag': wikitag}, html_class="interwiki_icon") else: icon = '' return self.url(href, icon + text, title=wikitag, unescaped=1, pretty_url=kw.get('pretty_url', 0), css=html_class, show_image=False)
def testUrl(self): """Test's Page.url().""" from Sycamore.Page import Page from Sycamore import farm list_of_wikis = self._get_list_of_wikis() # relative, w/o query string for trial in xrange(0, 200): pagename = make_random_string(MAX_PAGENAME_LENGTH) page = Page(pagename, self.request) pagename = page.proper_name() pagename_encoded = wikiutil.quoteWikiname(pagename) proper_url = '/%s' % pagename_encoded self.assertEqual(proper_url, page.url()) # relative, w/ query string for trial in xrange(0, 200): pagename = make_random_string(MAX_PAGENAME_LENGTH) query = '?' the_range = random.randint(0, 10) for i in xrange(0, the_range): if i < (the_range-1): amperstand = '&' else: amperstand = '' query += ('%s=%s%s' % (make_random_string(50, alphanum_only=True), make_random_string(50, alphanum_only=True), amperstand)) page = Page(pagename, self.request) pagename = page.proper_name() pagename_encoded = wikiutil.quoteWikiname(pagename) proper_url = '/%s?%s' % (pagename_encoded, query) self.assertEqual(proper_url, page.url(querystr = query)) original_wiki_name = self.request.config.wiki_name # absolute url, switched request for wiki_trial in xrange(0, 10): self.request.switch_wiki(random.choice(list_of_wikis)) for trial in xrange(0, 200): pagename = make_random_string(MAX_PAGENAME_LENGTH) farm_url = farm.getWikiURL(self.request.config.wiki_name, self.request) page = Page(pagename, self.request) pagename = page.proper_name() pagename_encoded = wikiutil.quoteWikiname(pagename) proper_url = '%s%s' % (farm_url, pagename_encoded) self.assertEqual(proper_url, page.url(relative=False)) for trial in xrange(0, 200): pagename = make_random_string(MAX_PAGENAME_LENGTH) farm_url = farm.getWikiURL(self.request.config.wiki_name, self.request) query = '?' the_range = random.randint(0, 10) for i in xrange(0, the_range): if i < (the_range-1): amperstand = '&' else: amperstand = '' query += ('%s=%s%s' % (make_random_string(50, alphanum_only=True), make_random_string(50, alphanum_only=True), amperstand)) page = Page(pagename, self.request) pagename = page.proper_name() pagename_encoded = wikiutil.quoteWikiname(pagename) proper_url = '%s%s?%s' % (farm_url, pagename_encoded, query) self.assertEqual(proper_url, page.url(querystr=query, relative=False)) self.request.switch_wiki(original_wiki_name) # absolute url, non-switched request for wiki_trial in xrange(0, 10): wiki_name = random.choice(list_of_wikis) for trial in xrange(0, 200): pagename = make_random_string(MAX_PAGENAME_LENGTH) farm_url = farm.getWikiURL(wiki_name, self.request) page = Page(pagename, self.request, wiki_name=wiki_name) pagename = page.proper_name() pagename_encoded = wikiutil.quoteWikiname(pagename) proper_url = '%s%s' % (farm_url, pagename_encoded) self.assertEqual(proper_url, page.url(relative=False)) for trial in xrange(0, 200): pagename = make_random_string(MAX_PAGENAME_LENGTH) farm_url = farm.getWikiURL(wiki_name, self.request) query = '?' the_range = random.randint(0, 10) for i in xrange(0, the_range): if i < (the_range-1): amperstand = '&' else: amperstand = '' query += ('%s=%s%s' % (make_random_string(50, alphanum_only=True), make_random_string(50, alphanum_only=True), amperstand)) page = Page(pagename, self.request, wiki_name=wiki_name) pagename = page.proper_name() pagename_encoded = wikiutil.quoteWikiname(pagename) proper_url = '%s%s?%s' % (farm_url, pagename_encoded, query) self.assertEqual(proper_url, page.url(querystr = query, relative=False))
def render(self): _ = self.request.getText if self.type.find('/REVERT') != -1: # check if it's in version format (default) if self.comment[0] == 'v': given_comment = '' given_comment_start = self.comment.find('c') if given_comment_start and given_comment_start != -1: given_comment = self.comment[given_comment_start+1:] version = self.comment[1:given_comment_start] else: version = self.comment[1:] if given_comment: self.comment = ( "Revert to version %(version)s (%(given_comment)s)." % {'version': version, 'given_comment': given_comment}) else: self.comment = "Revert to version %s." % version else: datestamp = self.request.user.getFormattedDateTime( float(self.comment)) self.comment = ( "Revert to version dated %(datestamp)s." % {'datestamp': datestamp}) elif self.type == 'ATTNEW': if isImage(self.comment): file_type="image" else: file_type = "file" if self.pagename: if self.page: link_loc = ( farm.getWikiURL(self.page.wiki_name, self.request) + quoteWikiname(self.pagename) + '?action=Files&do=view&target=' + urllib.quote(self.comment.encode(config.charset))) else: link_loc = ( self.request.getScriptname() + '/' + quoteWikiname(self.pagename) + '?action=Files&do=view&target=' + urllib.quote(self.comment.encode(config.charset))) self.comment = 'Upload of %s <a href="%s">%s</a>.' % ( file_type, link_loc, self.comment) else: self.comment = "Upload of %s '%s'." % (file_type, self.comment) elif self.type == 'ATTDEL': if isImage(self.comment): file_type="Image" else: file_type = "File" if self.pagename: if self.page: link_loc = ( farm.getWikiURL(self.page.wiki_name, self.request) + quoteWikiname(self.pagename) + '?action=Files&do=view&target=' + urllib.quote(self.comment.encode(config.charset))) else: link_loc = ( self.request.getScriptname() + '/' + quoteWikiname(self.pagename) + '?action=Files&do=view&target=' + urllib.quote(self.comment.encode(config.charset))) self.comment = '%s <a href="%s">%s</a> deleted.' % ( file_type, link_loc, self.comment) else: self.comment = "%s '%s' deleted." % (file_type, self.comment) elif self.type == 'DELETE': if self.comment: self.comment = "Page deleted (%s)" % self.comment else: self.comment = "Page deleted (no comment)" elif self.type == 'NEWEVENT': self.comment = "Event '%s' posted." % self.comment elif self.type == 'SAVEMAP': self.comment = "Map location(s) modified" return _(self.comment)