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