Attachment 'PageActions.py'

Download

   1 # -*- coding: iso-8859-1 -*-
   2 
   3 import re
   4 from MoinMoin import config, wikiutil
   5 from MoinMoin.support import difflib
   6 from MoinMoin.Page import Page
   7 from MoinMoin.action import get_available_actions
   8 
   9 # Ripped from the LikePages action
  10 # renamed by clauz
  11 def executeold(pagename, request):
  12     _ = request.getText
  13     from MoinMoin.formatter.text_html import Formatter
  14     request.formatter = Formatter(request)
  15 
  16     request.emit_http_headers()
  17 
  18     # This action generate data using the user language
  19     request.setContentLanguage(request.lang)
  20     request.theme.send_title(_('Actions for %s') % pagename, page_name=pagename)
  21         
  22     # Start content - IMPORTANT - without content div, there is no
  23     # direction support!
  24     request.write(request.formatter.startContent("content"))
  25 
  26     # Just list the actions
  27     request.write(availableactions(request))
  28 
  29     # End content and send footer
  30     request.write(request.formatter.endContent())
  31     request.theme.send_footer(pagename)
  32 
  33 # copied from LikePages by Clauz
  34 def closeMatches(pagename, pages):
  35     """ Get close matches.
  36 
  37     Return all matching pages with rank above cutoff value.
  38 
  39     @param pagename: page name to match
  40     @param pages: list of page names
  41     @rtype: list
  42     @return: list of matching pages, sorted by rank
  43     """
  44     # Match using case insensitive matching
  45     # Make mapping from lowerpages to pages - pages might have same name
  46     # with different case (although its stupid).
  47     lower = {}
  48     for name in pages:
  49         key = name.lower()
  50         if key in lower:
  51             lower[key].append(name)
  52         else:
  53             lower[key] = [name]
  54 
  55     # Get all close matches
  56     all_matches = difflib.get_close_matches(pagename.lower(), lower.keys(),
  57                                             len(lower), cutoff=0.6)
  58 
  59     # Replace lower names with original names
  60     matches = []
  61     for name in all_matches:
  62         matches.extend(lower[name])
  63 
  64     return matches
  65 
  66 
  67 # copied from LikePages by Clauz
  68 def findMatches(pagename, request, s_re=None, e_re=None):
  69     """ Find like pages
  70 
  71     @param pagename: name to match
  72     @param request: current reqeust
  73     @param s_re: start re for wiki matching
  74     @param e_re: end re for wiki matching
  75     @rtype: tuple
  76     @return: start word, end word, matches dict
  77     """
  78     # Get full list of pages, with no filtering - very fast. We will
  79     # first search for like pages, then filter the results.
  80     pages = request.rootpage.getPageList(user='', exists='')
  81 
  82     # Remove current page
  83     try:
  84         pages.remove(pagename)
  85     except ValueError:
  86         pass
  87 
  88     # Get matches using wiki way, start and end of word
  89     start, end, matches = wikiMatches(pagename, pages, start_re=s_re,
  90                                       end_re=e_re)
  91 
  92     # Get the best 10 close matches
  93     close_matches = {}
  94     found = 0
  95     for name in closeMatches(pagename, pages):
  96         # Skip names already in matches
  97         if name in matches:
  98             continue
  99 
 100         # Filter deleted pages or pages the user can't read
 101         page = Page(request, name)
 102         if page.exists() and request.user.may.read(name):
 103             close_matches[name] = 8
 104             found += 1
 105             # Stop after 10 matches
 106             if found == 10:
 107                 break
 108 
 109     # Filter deleted pages or pages the user can't read from
 110     # matches. Order is important!
 111     for name in matches.keys(): # we need .keys() because we modify the dict
 112         page = Page(request, name)
 113         if not (page.exists() and request.user.may.read(name)):
 114             del matches[name]
 115 
 116     # Finally, merge both dicts
 117     matches.update(close_matches)
 118 
 119     return start, end, matches
 120 
 121 # Ripped from the LikePages action by clauz
 122 def execute(pagename, request):
 123     _ = request.getText
 124     #start, end, matches = findMatches(pagename, request)
 125 
 126     # Error?
 127     #if isinstance(matches, (str, unicode)):
 128     #    request.theme.add_msg(wikiutil.escape(matches), "info")
 129     #    Page(request, pagename).send_page()
 130     #    return
 131 
 132 
 133     # One match - display it
 134     #if len(matches) == 1:
 135     #    request.theme.add_msg(_('Exactly one page like "%s" found, redirecting to page.') % (wikiutil.escape(pagename), ), "info")
 136     #    Page(request, matches.keys()[0]).send_page()
 137     #    return
 138 
 139     # more than one match, list 'em
 140     # This action generate data using the user language
 141     request.setContentLanguage(request.lang)
 142 
 143     request.theme.send_title(_('Actions for "%s"') % (pagename), pagename=pagename)
 144 
 145     # Start content - IMPORTANT - without content div, there is no
 146     # direction support!
 147     request.write(request.formatter.startContent("content"))
 148 
 149     request.write(availableactions(request))
 150 
 151     # End content and send footer
 152     request.write(request.formatter.endContent())
 153     request.theme.send_footer(pagename)
 154     request.theme.send_closing_html()
 155 
 156 # Make a link to action
 157 def actionlink(request, action, title, comment=''):
 158     page = request.page
 159     _ = request.getText
 160     # Always add spaces: AttachFile -> Attach File 
 161     # XXX TODO do not make a page object just for split_title
 162     title = Page(request, title).split_title(request) #, force=1)
 163     # Use translated version if available
 164     title = _(title, formatted=False)
 165     params = '%s?action=%s' % (page.page_name, action)
 166     link = wikiutil.link_tag(request, params, _(title))
 167     return u''.join([ u'<li>', link, comment, u'</li>' ])
 168 
 169 
 170 # Rippped from the theme code
 171 # Renamed by Clauz
 172 def oldavailableactions(request):
 173     page = request.page
 174     _ = request.getText
 175     html = ''
 176     links = []
 177     available = request.getAvailableActions(page)
 178 #    try:
 179 #        available = available.keys()
 180 #    except AttributeError:
 181 #        pass
 182     for action in available:
 183         links.append(actionlink(request, action, action))
 184     if page.isWritable() and request.user.may.write(page.page_name):
 185         links.append(actionlink(request, 'edit', 'EditText'))
 186     if request.user.valid and request.user.email:
 187         action = ("Subscribe", "Unsubscribe")[request.user.isSubscribedTo([page.page_name])]
 188         links.append(actionlink(request, 'subscribe', action))
 189     if request.user.valid:
 190         links.append(actionlink(request, 'userform&logout=logout', 'Logout'))
 191     links.append(actionlink(request, 'print', 'PrintView'))
 192     links.append(actionlink(request, 'raw', 'ViewRawText'))
 193     links.append(actionlink(request, 'refresh', 'DeleteCache'))
 194     html = u'<ul>%s</ul>' % u''.join(links)
 195     return html
 196 
 197 # copied from classic.py by Clauz
 198 def availableactions(d):
 199     """
 200     assemble HTML code for the available actions
 201 
 202     @param d: parameter dictionary
 203     @rtype: string
 204     @return: available actions html
 205     """
 206     request = d
 207     _ = request.getText
 208     html = []
 209     page = request.page
 210     available = get_available_actions(request.cfg, page, request.user)
 211     if available:
 212         available = list(available)
 213         available.sort()
 214         for action in available:
 215             # Always add spaces: AttachFile -> Attach File
 216             # XXX do not make a page object just for split_title
 217             #title = Page(request, action).split_title(force=1)
 218             title = action
 219             # Use translated version if available
 220             title = _(title)
 221             querystr = {'action': action}
 222             link = page.link_to(request, text=title, querystr=querystr, rel='nofollow')
 223             html.append(link)
 224 
 225     title = _("DeleteCache")
 226     link = page.link_to(request, text=title, querystr={'action': 'refresh'}, rel='nofollow')
 227 
 228     html = u'<p>%s %s</ul></p>\n' % (_('Available actions: <ul><li>'),
 229                                    u'</li><li>'.join(html))
 230     return html

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2011-04-14 07:28:03, 4.7 KB) [[attachment:CreateNewPage.py]]
  • [get | view] (2011-04-14 07:26:24, 4.2 KB) [[attachment:CreateNewPage1.6.py]]
  • [get | view] (2006-09-10 21:29:29, 40.4 KB) [[attachment:CreatePdfDocument2_0_3.py]]
  • [get | view] (2006-09-12 06:05:06, 40.5 KB) [[attachment:CreatePdfDocument2_0_4.py]]
  • [get | view] (2006-09-12 12:00:09, 40.6 KB) [[attachment:CreatePdfDocument2_0_5.py]]
  • [get | view] (2006-11-14 21:56:11, 43.5 KB) [[attachment:CreatePdfDocument2_0_6.py]]
  • [get | view] (2006-11-15 17:00:47, 43.8 KB) [[attachment:CreatePdfDocument2_0_7.py]]
  • [get | view] (2006-11-16 22:06:18, 43.8 KB) [[attachment:CreatePdfDocument2_0_8.py]]
  • [get | view] (2006-12-17 15:54:21, 43.6 KB) [[attachment:CreatePdfDocument2_0_9.py]]
  • [get | view] (2007-08-20 09:10:23, 67.2 KB) [[attachment:CreatePdfDocument2_1_0.py]]
  • [get | view] (2007-08-21 07:39:49, 67.1 KB) [[attachment:CreatePdfDocument2_1_1.py]]
  • [get | view] (2007-09-11 19:16:37, 67.3 KB) [[attachment:CreatePdfDocument2_1_2.py]]
  • [get | view] (2007-09-18 20:17:58, 68.1 KB) [[attachment:CreatePdfDocument2_1_3.py]]
  • [get | view] (2007-09-21 13:32:54, 71.1 KB) [[attachment:CreatePdfDocument2_1_4.py]]
  • [get | view] (2007-09-23 20:56:30, 73.4 KB) [[attachment:CreatePdfDocument2_1_5.py]]
  • [get | view] (2007-09-25 20:54:48, 74.5 KB) [[attachment:CreatePdfDocument2_2_0.py]]
  • [get | view] (2008-06-23 21:08:49, 77.0 KB) [[attachment:CreatePdfDocument2_3_0.py]]
  • [get | view] (2008-06-26 19:25:07, 81.0 KB) [[attachment:CreatePdfDocument2_3_1.py]]
  • [get | view] (2008-07-06 05:50:38, 83.1 KB) [[attachment:CreatePdfDocument2_3_2.py]]
  • [get | view] (2008-07-09 17:42:02, 83.3 KB) [[attachment:CreatePdfDocument2_3_3.py]]
  • [get | view] (2008-09-07 11:11:01, 83.5 KB) [[attachment:CreatePdfDocument2_3_4.py]]
  • [get | view] (2009-01-11 15:53:09, 84.3 KB) [[attachment:CreatePdfDocument2_3_5.py]]
  • [get | view] (2009-02-16 06:52:06, 84.2 KB) [[attachment:CreatePdfDocument2_3_6.py]]
  • [get | view] (2010-01-29 11:53:21, 82.8 KB) [[attachment:CreatePdfDocument2_4_0.py]]
  • [get | view] (2010-01-31 14:10:03, 84.6 KB) [[attachment:CreatePdfDocument2_4_1.py]]
  • [get | view] (2010-09-18 16:23:23, 85.6 KB) [[attachment:CreatePdfDocument2_4_2.py]]
  • [get | view] (2006-06-16 20:56:53, 4.9 KB) [[attachment:FlashManager.py-1.5.3-1]]
  • [get | view] (2003-12-07 18:15:53, 3.9 KB) [[attachment:HTML2MoinMoin.py]]
  • [get | view] (2005-10-16 08:24:35, 4.9 KB) [[attachment:HelpOn-1.3.5-4.py]]
  • [get | view] (2006-02-03 19:21:04, 4.9 KB) [[attachment:HelpOn-1.5.1-5.py]]
  • [get | view] (2006-07-04 10:45:22, 4.8 KB) [[attachment:HelpOn-1.5.4-6.py]]
  • [get | view] (2006-07-04 22:39:14, 4.8 KB) [[attachment:HelpOn-1.6.0-7.py]]
  • [get | view] (2006-07-06 13:50:17, 4.0 KB) [[attachment:HelpOn-1.6.0-8.py]]
  • [get | view] (2008-01-10 17:43:24, 4.8 KB) [[attachment:HelpOn-1.6.0-9.py]]
  • [get | view] (2008-08-19 14:44:54, 5.0 KB) [[attachment:HelpOn-1.7.1-10.py]]
  • [get | view] (2005-02-20 18:28:34, 10.8 KB) [[attachment:IRSS.py]]
  • [get | view] (2005-03-09 22:46:23, 2.9 KB) [[attachment:ImportHtml-1.2.py]]
  • [get | view] (2003-12-07 18:15:53, 2.8 KB) [[attachment:ImportHtml.py]]
  • [get | view] (2003-12-07 18:15:53, 1.8 KB) [[attachment:IrcChat.py]]
  • [get | view] (2008-06-09 11:27:20, 4.4 KB) [[attachment:MoinCrypt.py]]
  • [get | view] (2010-11-29 12:08:27, 7.5 KB) [[attachment:PageActions.py]]
  • [get | view] (2006-08-07 15:12:19, 0.5 KB) [[attachment:PermanentLink.py]]
  • [get | view] (2003-12-07 18:15:53, 6.3 KB) [[attachment:PhoneDial.py]]
  • [get | view] (2005-04-17 14:21:47, 3.6 KB) [[attachment:RecommendPage-1.3.4-1.py]]
  • [get | view] (2005-04-19 18:21:52, 5.5 KB) [[attachment:RecommendPage-1.3.4-2.py]]
  • [get | view] (2005-05-02 19:53:09, 5.6 KB) [[attachment:RecommendPage-1.3.4-3.py]]
  • [get | view] (2005-09-03 07:33:35, 6.3 KB) [[attachment:RecommendPage-1.3.4-4.py]]
  • [get | view] (2005-09-05 17:44:03, 6.9 KB) [[attachment:RecommendPage-1.3.5-5.py]]
  • [get | view] (2005-09-07 16:42:26, 7.5 KB) [[attachment:RecommendPage-1.3.5-6.py]]
  • [get | view] (2005-09-08 16:06:28, 7.7 KB) [[attachment:RecommendPage-1.3.5-7.py]]
  • [get | view] (2005-11-01 11:31:51, 9.0 KB) [[attachment:RecommendPage-1.3.5-8.py]]
  • [get | view] (2006-02-03 19:40:51, 8.3 KB) [[attachment:RecommendPage-1.5.1-9.py]]
  • [get | view] (2008-01-11 09:14:35, 6.8 KB) [[attachment:RecommendPage-1.6.0-10.py]]
  • [get | view] (2008-08-19 14:44:59, 6.9 KB) [[attachment:RecommendPage-1.7.1-11.py]]
  • [get | view] (2008-06-09 11:27:40, 1.7 KB) [[attachment:ShowActions.py]]
  • [get | view] (2008-06-09 10:34:02, 5.3 KB) [[attachment:ShowDecrypted.py]]
  • [get | view] (2005-03-30 21:17:28, 7.7 KB) [[attachment:Slideshow.py]]
  • [get | view] (2004-02-02 20:48:31, 2.0 KB) [[attachment:SubscribeUser.py]]
  • [get | view] (2007-01-26 17:08:30, 2.2 KB) [[attachment:Subscribers-1.6.0.py]]
  • [get | view] (2003-12-07 18:15:53, 1.8 KB) [[attachment:Subscribers.py]]
  • [get | view] (2006-03-18 23:16:51, 0.8 KB) [[attachment:UserPreferences.py]]
  • [get | view] (2004-01-05 09:56:25, 8.1 KB) [[attachment:VisualSiteMap.py]]
  • [get | view] (2015-08-30 21:04:23, 11.1 KB) [[attachment:VisualSiteMap_1.10.py]]
  • [get | view] (2004-10-08 10:59:16, 9.3 KB) [[attachment:VisualSiteMap_1.2.py]]
  • [get | view] (2005-03-16 01:30:09, 9.8 KB) [[attachment:VisualSiteMap_1.3.py]]
  • [get | view] (2014-08-19 01:34:10, 10.8 KB) [[attachment:VisualSiteMap_1.9.py]]
  • [get | view] (2007-08-18 18:52:55, 1.0 KB) [[attachment:backlink.py]]
  • [get | view] (2007-03-15 05:53:49, 23.5 KB) [[attachment:findandreplace0.1Beta.py]]
  • [get | view] (2005-03-27 20:32:10, 3.6 KB) [[attachment:gallery2image-1.3.3-1.py]]
  • [get | view] (2005-08-03 20:14:56, 4.0 KB) [[attachment:gallery2image-1.3.3-2.py]]
  • [get | view] (2005-11-13 18:10:26, 20.7 KB) [[attachment:gallery2image-1.3.5-10.py]]
  • [get | view] (2005-11-25 22:03:50, 20.8 KB) [[attachment:gallery2image-1.3.5-11.py]]
  • [get | view] (2005-08-08 17:23:43, 8.4 KB) [[attachment:gallery2image-1.3.5-4.py]]
  • [get | view] (2005-08-13 15:15:45, 13.7 KB) [[attachment:gallery2image-1.3.5-5.py]]
  • [get | view] (2005-08-31 22:05:22, 15.5 KB) [[attachment:gallery2image-1.3.5-6.py]]
  • [get | view] (2005-10-29 20:23:50, 15.9 KB) [[attachment:gallery2image-1.3.5-8.py]]
  • [get | view] (2005-11-01 11:31:24, 17.6 KB) [[attachment:gallery2image-1.3.5-9.py]]
  • [get | view] (2006-01-27 20:52:32, 20.9 KB) [[attachment:gallery2image-1.5.1-12.py]]
  • [get | view] (2006-08-06 09:01:01, 22.1 KB) [[attachment:gallery2image-1.5.4-13.py]]
  • [get | view] (2006-08-11 18:21:40, 22.2 KB) [[attachment:gallery2image-1.5.4-14.py]]
  • [get | view] (2006-11-16 20:23:27, 22.6 KB) [[attachment:gallery2image-1.5.6-16.py]]
  • [get | view] (2006-08-11 18:30:22, 22.2 KB) [[attachment:gallery2image-1.6.0-15.py]]
  • [get | view] (2008-02-06 10:13:45, 22.3 KB) [[attachment:gallery2image-1.6.0-16.py]]
  • [get | view] (2008-05-20 15:51:09, 22.4 KB) [[attachment:gallery2image-1.6.3-17.py]]
  • [get | view] (2006-09-06 06:19:48, 1.3 KB) [[attachment:getmmap.py]]
  • [get | view] (2004-07-18 09:48:00, 1.5 KB) [[attachment:localnames.py]]
  • [get | view] (2005-03-25 15:02:31, 2.6 KB) [[attachment:newpageonly.py]]
  • [get | view] (2005-03-30 09:02:00, 3.5 KB) [[attachment:newpageonly_20050330.py]]
  • [get | view] (2006-06-06 19:12:27, 9.7 KB) [[attachment:pdf.py]]
  • [get | view] (2006-08-30 10:51:51, 36.0 KB) [[attachment:pdf2_0_0.py]]
  • [get | view] (2006-08-30 13:57:36, 36.5 KB) [[attachment:pdf2_0_1.py]]
  • [get | view] (2006-02-04 04:25:29, 1.0 KB) [[attachment:sisterindex.py]]
  • [get | view] (2004-10-28 07:33:10, 0.7 KB) [[attachment:xml.py]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.