Beispiel #1
0
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
Beispiel #2
0
    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)
Beispiel #3
0
    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))
Beispiel #4
0
    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)