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