Exemplo n.º 1
0
def execute(macro, args, formatter=None):
    if not formatter:
        formatter = macro.formatter
    action = 'Files'
    pagename = formatter.page.page_name
    baseurl = macro.request.getScriptname()
    urlpagename = wikiutil.quoteWikiname(formatter.page.proper_name())

    if not args:
        return formatter.rawHTML('<b>Please supply at least a file name, '
                                 'e.g. [[File(filename.txt)]], where '
                                 'filename.txt is a file that\'s been '
                                 'uploaded to this page.</b>')
    filename = args

    macro.request.cursor.execute("""SELECT name
                                    FROM files
                                    WHERE name=%(filename)s and
                                          attached_to_pagename=%(pagename)s and
                                          wiki_id=%(wiki_id)s""",
                                 {'filename':filename,
                                  'pagename':pagename.lower(),
                                  'wiki_id':macro.request.config.wiki_id})
    result = macro.request.cursor.fetchone()
    file_exists = result

    urlfile = urllib.quote(filename)
    if not file_exists:
        #lets make a link telling them they can upload the file
        linktext = 'Upload new file "%s"' % (filename)
        return wikiutil.attach_link_tag(
            macro.request,
            '%s?action=Files&amp;rename=%s%s#uploadFileArea' % (
                wikiutil.quoteWikiname(formatter.page.proper_name()),
                urlfile,
                ''),
            linktext)

    urlfile = urllib.quote(filename)
    html = ('<span class="fileLink"><img src="%(icon)s"/>'
            '<a href="%(baseurl)s/%(urlpagename)s?action=%(action)s&amp;'
                     'do=view&target=%(urlfile)s">'
                '%(file)s'
            '</a></span>' %
            {'icon':Files.get_icon(filename, macro.request), 'baseurl':baseurl,
             'urlpagename':urlpagename, 'urlfile':urlfile, 'file':filename,
             'action':action})
    return html
Exemplo n.º 2
0
def execute(macro, args, formatter=None):
    if not formatter:
        formatter = macro.formatter
    if line_has_just_macro(macro, args, formatter):
      macro.parser.inhibit_br = 2

    macro_text = ''

    baseurl = macro.request.getScriptname()
    action = 'Files' # name of the action that does the file stuff
    html = []
    ticketString = None # for temporary thumbnail generation
    pagename = formatter.page.page_name
    urlpagename = wikiutil.quoteWikiname(formatter.page.proper_name())

    if not args:
        macro_text += formatter.rawHTML(
            '<b>Please supply at least an image name, e.g. '
            '[[Image(image.jpg)]], where image.jpg is an image that\'s been '
            'uploaded to this page.</b>')
	return macro_text

    # image.jpg, "caption, here, yes", 20, right --- in any order
    # (filename first)
    # the number is the 'max' size (width or height) in pixels

    # parse the arguments
    try:
        (image_name, caption, thumbnail, px_size, alignment,
         border) = getArguments(args)
    except:
        macro_text += formatter.rawHTML('[[Image(%s)]]' % wikiutil.escape(args))
        return macro_text

    if not wikiutil.isImage(image_name):
        macro_text += "%s does not seem to be an image file." % image_name
        return macro_text

    url_image_name = urllib.quote(image_name.encode(config.charset))

    if (macro.formatter.processed_thumbnails.has_key(
            (pagename, image_name)) and
        (thumbnail or caption)):
        macro_text += ('<em style="background-color: #ffffaa; padding: 2px;">'
                       'A thumbnail or caption may be displayed only once per '
                       'image.</em>')
        return macro_text

    macro.formatter.processed_thumbnails[(pagename, image_name)] = True
    
    #is the original image even on the page?
    macro.request.cursor.execute("""SELECT name
                                    FROM files
                                    WHERE name=%(image_name)s and
                                    attached_to_pagename=%(pagename)s and
                                    wiki_id=%(wiki_id)s""",
                                 {'image_name':image_name,
                                  'pagename':pagename.lower(),
                                  'wiki_id':macro.request.config.wiki_id})
    result = macro.request.cursor.fetchone()
    image_exists = result

    if not image_exists:
        # lets make a link telling them they can upload the image,
        # just like the normal attachment
        linktext = 'Upload new image "%s"' % (image_name)
        macro_text += wikiutil.attach_link_tag(macro.request,
                  '%s?action=Files&amp;rename=%s#uploadFileArea' % (
                      wikiutil.quoteWikiname(formatter.page.proper_name()),
                      url_image_name),
                  linktext)
        return macro_text

    full_size_url = (baseurl + "/" + urlpagename + "?action=" + action +
                     "&amp;do=view&amp;target=" + url_image_name)
    # put the caption in the db if it's new and if we're not in preview mode
    if not formatter.isPreview():
        touchCaption(pagename, pagename, image_name, caption, macro.request)
    if caption:
        # parse the caption string
        caption = wikiutil.stripOuterParagraph(wikiutil.wikifyString(
            caption, formatter.request, formatter.page, formatter=formatter))

    if thumbnail:
        # let's generated the thumbnail or get the dimensions if it's
        # already been generated
        if not px_size:
            px_size = default_px_size
        (x, y), ticketString = touchThumbnail(macro.request, pagename,
                                              image_name, px_size, formatter)

        d = {'right':'floatRight', 'left':'floatLeft', '':'noFloat'}
        floatSide = d[alignment]
        if caption and border:
            html.append('<span class="%s thumb" style="width: %spx;">'
                        '<a style="color: black;" href="%s">'
                        '<img src="%s" alt="%s" style="display:block;"/></a>'
                        '<span>%s</span>'
                        '</span>' %
                        (floatSide, int(x)+2, full_size_url,
                         Files.getAttachUrl(pagename, image_name,
                                            macro.request, thumb=True,
                                            size=px_size, ticket=ticketString),
                         image_name, caption))
        elif border:
            html.append('<span class="%s thumb" style="width: %spx;">'
                        '<a style="color: black;" href="%s">'
                        '<img src="%s" alt="%s" style="display:block;"/></a>'
                        '</span>' %
                        (floatSide, int(x)+2, full_size_url,
                         Files.getAttachUrl(pagename, image_name,
                                            macro.request, thumb=True,
                                            size=px_size, ticket=ticketString),
                         image_name))
        elif caption and not border:
            html.append('<span class="%s thumb noborder" style="width: %spx;">'
                        '<a style="color: black;" href="%s">'
                        '<img src="%s" alt="%s" style="display:block;"/></a>'
                        '<span>%s</span></span>' %
                        (floatSide, int(x)+2, full_size_url,
                         Files.getAttachUrl(pagename, image_name,
                                            macro.request, thumb=True,
                                            size=px_size, ticket=ticketString),
                         image_name, caption))
        else:
            html.append('<span class="%s thumb noborder" style="width: %spx;">'
                        '<a style="color: black;" href="%s">'
                        '<img src="%s" alt="%s" style="display:block;"/></a>'
                        '</span>' %
                        (floatSide, int(x)+2, full_size_url,
                         Files.getAttachUrl(pagename, image_name,
                                            macro.request, thumb=True,
                                            size=px_size, ticket=ticketString),
                         image_name))
    else:
        x, y = getImageSize(pagename, image_name, macro.request)

        if not x and not y:
            # image has no size..something went amuck
            setImageSize(pagename, image_name, macro.request)
            x, y = getImageSize(pagename, image_name, macro.request)

        if not border and not caption:
            img_string = ('<a href="%s">'
                          '<img class="borderless" src="%s" alt="%s"/></a>' %
                          (full_size_url,
                           Files.getAttachUrl(pagename, image_name,
                                              macro.request,
                                              ticket=ticketString),
                           image_name))
        elif border and not caption:
            img_string = ('<a href="%s">'
                          '<img class="border" src="%s" alt="%s"/></a>' %
                          (full_size_url,
                           Files.getAttachUrl(pagename, image_name,
                                              macro.request,
                                              ticket=ticketString),
                           image_name))
        elif border and caption:
            img_string = ('<a href="%s">'
                          '<img class="border" src="%s" alt="%s"/></a>'
                          '<div style="width: %spx;">'
                          '<p class="normalCaption">%s</p></div>' %
                          (full_size_url,
                           Files.getAttachUrl(pagename, image_name,
                                              macro.request,
                                              ticket=ticketString),
                           image_name, x, caption))
        elif not border and caption:
            img_string = ('<a href="%s">'
                          '<img class="borderless" src="%s" alt="%s"/></a>'
                          '<div style="width: %spx;">'
                          '<p class="normalCaption">%s</p></div>' %
                          (full_size_url,
                           Files.getAttachUrl(pagename, image_name,
                                              macro.request,
                                              ticket=ticketString),
                           image_name, x, caption))

        if alignment == 'right':
            img_string = '<span class="floatRight">' + img_string + '</span>'
        elif alignment == 'left':
            img_string = '<span class="floatLeft">' + img_string + '</span>'

        html.append(img_string)
      
    macro_text += ''.join(html)
    return macro_text