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&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&' '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
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&rename=%s#uploadFileArea' % ( wikiutil.quoteWikiname(formatter.page.proper_name()), url_image_name), linktext) return macro_text full_size_url = (baseurl + "/" + urlpagename + "?action=" + action + "&do=view&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