Attachment 'RecommendPage-1.3.5-7.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        2005-09-07 : Version 1.3.5-6
  43                     text box changed to a selection menu for the user names (sorted by name)     
  44        2005-09-08 : Version 1.3.5-7
  45                     bug fix: spaces in html are different in browsers
  46                              in some browser no selction did not give the user name                                
  47 
  48 """
  49 
  50 import string
  51 from MoinMoin import config, wikiutil, user, wikiacl, search
  52 from MoinMoin.Page import Page
  53 from MoinMoin.PageEditor import PageEditor
  54 
  55 
  56 def ACLparse(request, body):
  57     """
  58       taken from wikiacl and simply changed to return acl text and body without acl definition
  59       renamed from parseACL to ACLparse
  60     """
  61 
  62     if not request.cfg.acl_enabled:
  63         return AccessControlList(request),body
  64 
  65 
  66     acl_lines = []
  67     while body and body[0] == '#':
  68         # extract first line
  69         try:
  70             line, body = body.split('\n', 1)
  71         except ValueError:
  72             line = body
  73             body = ''
  74 
  75         # end parsing on empty (invalid) PI
  76         if line == "#":
  77             break
  78 
  79         # skip comments (lines with two hash marks)
  80         if line[1] == '#':
  81             continue
  82 
  83         tokens = line.split(None, 1)
  84         if tokens[0].lower() == "#acl":
  85             if len(tokens) == 2:
  86                 args = tokens[1].rstrip()
  87             else:
  88                 args = ""
  89             acl_lines.append(args)
  90     return acl_lines,body
  91 
  92 def RecommendPage(request,pagename,username):
  93 
  94     if config.allow_subpages:
  95         delimiter = "/"
  96     else:
  97         delimiter = ""
  98 
  99       
 100     name = "%(username)s%(delimiter)sRecommendedPage" % {"username": username, "delimiter": delimiter}
 101     page = PageEditor(request,name)
 102     if request.user.may.write(name):
 103          
 104         if user.getUserId(request, username) != None:
 105             uid = user.getUserId(request, username) 
 106             recom_user = user.User (request, id = uid)
 107            
 108             subscription_list = recom_user.getSubscriptionList()
 109             isSubscribedTo = 0
 110             for test in subscription_list :
 111                 if test == name : 
 112                    isSubsribedTo = 1
 113             
 114             if isSubscribedTo == 0:
 115                 recom_user.subscribePage(name)
 116                 recom_user.save()     
 117                 
 118         newtext = u" * %(pagename)s  %(about)s ...\n %(username)s\n" % {
 119                  "pagename": '["'+pagename+'"]',
 120                  "about":"[[ShortText(%(pagename)s)]]" % {
 121                  "pagename": pagename},
 122                  "username":"@SIG@"}                        
 123                  
 124         rev = page.current_rev()
 125         if not page.exists() :
 126            if request.cfg.acl_enabled:
 127                if user.getUserId(request, username) != None :
 128                    acl="#acl %(username)s:admin,read,write,delete All:read,write\n" % {
 129                        "username":username}
 130                else:
 131                    acl="#acl All:read,write\n"
 132            else:
 133                acl=""
 134            PageEditor.saveText(page,acl+newtext,rev)
 135            
 136         else:
 137             body = page.get_raw_body()
 138             given_acl,body = ACLparse(request, body)
 139 
 140             if len(string.join(given_acl,"")) > 0:
 141                 acl = "#acl %(given_acl)s \n" % {
 142                       "given_acl":string.join(given_acl,"\n")}
 143             else:
 144                 acl=""
 145 
 146             PageEditor.saveText(page,acl+newtext+body,rev)
 147 
 148         msg = "recommended to read %(pagename)s to %(username)s" % {
 149               "pagename": pagename,
 150               "username":username}
 151         Page(request, pagename).send_page(request, msg=msg)
 152         
 153     else:
 154         Page(request, pagename).send_page(request, msg="You are not allowed to recommend pages")
 155 
 156 
 157 def execute(pagename, request):
 158 
 159 
 160     _ = request.getText
 161     actname = __name__.split('.')[-1]
 162 
 163     if request.user.may.read(pagename) :
 164 
 165         thispage = Page(request,pagename)
 166 
 167         if request.form.has_key('button') and request.form.has_key('ticket'):
 168         # check whether this is a valid recommention request (make outside
 169         # attacks harder by requiring two full HTTP transactions)
 170             if not wikiutil.checkTicket(request.form['ticket'][0]) :
 171                   return thispage.send_page(request,
 172                       msg = _('Please use the interactive user interface to recommend pages!'))
 173 
 174             username = request.form.get('username', [u''])[0]
 175             if len(username.strip()) == 0 :
 176                 username = request.user.name
 177             return RecommendPage(request,pagename,username)
 178             
 179         users = user.getUserList(request)     
 180         
 181             
 182         html=[]    
 183         html.append("<OPTION></OPTION>")
 184         for uid in users:
 185             name = user.User(request, id=uid).name
 186             html.append("<OPTION>%(name)s</OPTION>" % { "name":name})  
 187 
 188         html.sort()    
 189         formhtml = '''
 190 <form method="post" action="">
 191 <strong>%(querytext)s</strong><BR>
 192 <select name="username" size="1">
 193 %(option)s
 194 </select>
 195 <input type="hidden" name="action" value="%(actname)s">
 196 <input type="submit" name="button" value="%(button)s">
 197 
 198 <BR>
 199 (no selection recommends to: %(user)s)
 200 
 201 <input type="hidden" name="ticket" value="%(ticket)s">
 202 <p>
 203 </form>''' % {
 204     'querytext': 'Recommend page to',
 205     'actname': 'RecommendPage',
 206     'ticket' : wikiutil.createTicket(),
 207     'option': string.join(html),
 208     'user' : request.user.name,
 209     'button': 'Recommend'}
 210             
 211 
 212         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.