Attachment 'RecommendPage-1.3.5-5.py'

Download

   1 # -*- coding: iso-8859-1 -*-
   2 """
   3     MoinMoin - RecommendPage Action Macro
   4 
   5     PURPOSE:
   6         This macro is used to recommend a page to an other wiki user.
   7 
   8     CALLING SEQUENCE:
   9         http://localhost:8080/WikiName?action=RecommendPage
  10 
  11     PROCEDURE:
  12        You get an input mask to enter the username of the one where you like to send the recommendation. This is then stored on a page named WikiName/RecommendedPage as an wiki itemlist with the link and the first five lines in plain text. At the end your user SIG is written.
  13        A new entry is always written on top of the page. 
  14        The person is informed by an email notification about the changes
  15 
  16        If you don't enter a name the recommendation is done to your name
  17 
  18        Please remove the version number from the filename.
  19 
  20     MODIFICATION HISTORY:
  21         @copyright: 2005 by Reimar Bauer (R.Bauer@fz-juelich.de)
  22         @license: GNU GPL, see COPYING for details.
  23         Version: 1.3.4-1
  24 
  25         2005-04-19 : Version 1.3.4-2
  26                      acl line on top of recommendation is set for a valid user/RecommendedPage to
  27                      WikiName:admin,read,write,delete All:read,write
  28                      otherwise for All:read,write
  29                      If the page user/RecommendedPage already exist acl right given on that page are used.
  30                      output changed similiar to the search output.
  31 
  32        2005-04-21 : Version 1.3.4-3
  33                     output changed into calling ShortText()
  34                     e.g.  * ["RulesForUnzip"]  [[ShortText(RulesForUnzip)]] ... @SIG@
  35                     it is also checked by now if acls are enabled in the config
  36        2005-09-02 : Version 1.3.5-4 
  37                     from SubscribeTo by Raphael Bossek learned to add an subscription for the email notification for a user before the new recommendation is written to the file. This means the user gots informed by an email.                
  38        2005-09-05 : Version 1.3.5-5
  39                     isSubscribedTo from user replaced because it could not destinguish between subpage and page
  40                     my implementation does not understand regular expressions at the moment so this gives by using regular expressions
  41                     one extraline in the config. 
  42 
  43 """
  44 
  45 import string
  46 from MoinMoin import config, wikiutil, user, wikiacl, search
  47 from MoinMoin.Page import Page
  48 from MoinMoin.PageEditor import PageEditor
  49 
  50 
  51 def ACLparse(request, body):
  52     """
  53       taken from wikiacl and simply changed to return acl text and body without acl definition
  54       renamed from parseACL to ACLparse
  55     """
  56 
  57     if not request.cfg.acl_enabled:
  58         return AccessControlList(request),body
  59 
  60 
  61     acl_lines = []
  62     while body and body[0] == '#':
  63         # extract first line
  64         try:
  65             line, body = body.split('\n', 1)
  66         except ValueError:
  67             line = body
  68             body = ''
  69 
  70         # end parsing on empty (invalid) PI
  71         if line == "#":
  72             break
  73 
  74         # skip comments (lines with two hash marks)
  75         if line[1] == '#':
  76             continue
  77 
  78         tokens = line.split(None, 1)
  79         if tokens[0].lower() == "#acl":
  80             if len(tokens) == 2:
  81                 args = tokens[1].rstrip()
  82             else:
  83                 args = ""
  84             acl_lines.append(args)
  85     return acl_lines,body
  86 
  87 def RecommendPage(request,pagename,username):
  88 
  89     if config.allow_subpages:
  90         delimiter = "/"
  91     else:
  92         delimiter = ""
  93 
  94       
  95     name = "%(username)s%(delimiter)sRecommendedPage" % {"username": username, "delimiter": delimiter}
  96     page = PageEditor(request,name)
  97     if request.user.may.write(name):
  98          
  99         if user.getUserId(request, username) != None:
 100             uid = user.getUserId(request, username) 
 101             recom_user = user.User (request, id = uid)
 102            
 103             subscription_list = recom_user.getSubscriptionList()
 104             isSubscribedTo = 0
 105             for test in subscription_list :
 106                 if test == name : 
 107                    isSubsribedTo = 1
 108             
 109             if isSubscribedTo == 0:
 110                 recom_user.subscribePage(name)
 111                 recom_user.save()     
 112                 
 113         newtext = u" * %(pagename)s  %(about)s ...\n %(username)s\n" % {
 114                  "pagename": '["'+pagename+'"]',
 115                  "about":"[[ShortText(%(pagename)s)]]" % {
 116                  "pagename": pagename},
 117                  "username":"@SIG@"}                        
 118                  
 119         rev = page.current_rev()
 120         if not page.exists() :
 121            if request.cfg.acl_enabled:
 122                if user.getUserId(request, username) != None :
 123                    acl="#acl %(username)s:admin,read,write,delete All:read,write\n" % {
 124                        "username":username}
 125                else:
 126                    acl="#acl All:read,write\n"
 127            else:
 128                acl=""
 129            PageEditor.saveText(page,acl+newtext,rev)
 130            
 131         else:
 132             body = page.get_raw_body()
 133             given_acl,body = ACLparse(request, body)
 134 
 135             if len(string.join(given_acl,"")) > 0:
 136                 acl = "#acl %(given_acl)s \n" % {
 137                       "given_acl":string.join(given_acl,"\n")}
 138             else:
 139                 acl=""
 140 
 141             PageEditor.saveText(page,acl+newtext+body,rev)
 142 
 143         msg = "recommended to read %(pagename)s to %(username)s" % {
 144               "pagename": pagename,
 145               "username":username}
 146         Page(request, pagename).send_page(request, msg=msg)
 147         
 148     else:
 149         Page(request, pagename).send_page(request, msg="You are not allowed to recommend pages")
 150 
 151 
 152 def execute(pagename, request):
 153 
 154 
 155     _ = request.getText
 156     actname = __name__.split('.')[-1]
 157 
 158     if request.user.may.read(pagename) :
 159 
 160         thispage = Page(request,pagename)
 161 
 162         if request.form.has_key('button') and request.form.has_key('ticket'):
 163         # check whether this is a valid recommention request (make outside
 164         # attacks harder by requiring two full HTTP transactions)
 165             if not wikiutil.checkTicket(request.form['ticket'][0]) :
 166                   return thispage.send_page(request,
 167                       msg = _('Please use the interactive user interface to recommend pages!'))
 168 
 169             username = request.form.get('username', [u''])[0]
 170             if len(username.strip()) == 0 :
 171                 username = request.user.name
 172             return RecommendPage(request,pagename,username)
 173 
 174         formhtml = '''
 175 <form method="post" action="">
 176 <strong>%(querytext)s</strong>
 177 <input type="hidden" name="action" value="%(actname)s">
 178 <input type="submit" name="button" value="%(button)s">
 179 <input type="hidden" name="ticket" value="%(ticket)s">
 180 <p>
 181 Username (WikiName)<br>
 182 <input type="text" name="username" size="30" maxlength="40">
 183 </form>''' % {
 184     'querytext': 'Recommend page to',
 185     'actname': 'RecommendPage',
 186     'ticket' :wikiutil.createTicket(),
 187     'button': 'Recommend'}
 188 
 189         return thispage.send_page(request, msg=formhtml)

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.