1
# -*- coding: iso-8859-1 -*-
3
MoinMoin - creates user homepage for existing accounts
5
@copyright: 2009 MoinMoin:ReimarBauer
6
@license: GNU GPL, see COPYING for details.
9
from MoinMoin import user
10
from MoinMoin.Page import Page
11
from MoinMoin.PageEditor import PageEditor
12
from MoinMoin.script import MoinScript
13
from MoinMoin.mail.sendmail import encodeSpamSafeEmail
16
class PluginScript(MoinScript):
20
This tool allows you to create user homepages via a command line interface.
22
Detailed Instructions:
23
======================
24
General syntax: moin [options] account homepage [homepage-options]
26
[options] usually should be:
27
--config-dir=/path/to/my/cfg/ --wiki-url=http://wiki.example.org/
29
1. Required is one of the options --name, --group or --all-users.
30
To create the homepage of one user use the --name argument. For adding homepages to a group of users
31
give the --group page argument. Or with --all-users you create homepages for ALL users.
32
2. To respect ACLs give the --user argument.
33
3. Optionally you may want to use a template page by the --template_page argument.
34
With e.g. #acl @ME@:read,write,delete,revert Default on the template page you can define
35
acl rights for the user. @EMAIL@ becomes expanded to the users obfuscated mail address.
38
def __init__(self, argv, def_values):
39
MoinScript.__init__(self, argv, def_values)
41
self.parser.add_option(
42
"-u", "--user", dest="homepage_creator",
43
help="User as whom the homepage creation operation will be performed as."
46
self.parser.add_option(
47
"-t", "--template_page", dest="template_page",
48
help="The template page which should be used for the homepage creation"
51
self.parser.add_option(
52
"-n", "--name", dest="user_homepage",
53
help="The name of the user the homepage should be created for."
56
self.parser.add_option(
57
"-g", "--group", dest="name_of_group_page",
58
help="The name of the group page to select users for creating their homepages."
61
self.parser.add_option(
62
"-a", "--all-users", dest="all_users", action="store_true",
63
help="The name of the group page to select users for creating their homepages."
66
def write_homepage(self, account, homepage_text):
68
if account.exists() and not account.disabled and not Page(self.request, account.name).exists():
69
userhomepage = PageEditor(self.request, account.name)
71
userhomepage.saveText(homepage_text, 0)
72
print "INFO homepage for %s created." % account.name
73
except userhomepage.Unchanged:
74
print "You did not change the page content, not saved!"
75
except userhomepage.NoAdmin:
76
print "You don't have enough rights to create the %s page" % account.name
78
print "INFO homepage for %s already exists or account is disabled or user does not exist." % account.name
81
# we don't expect non-option arguments
83
request = self.request
84
# Checks for a template page and sets homepage_default_text
85
if self.options.template_page and Page(self.request, self.options.template_page).exists():
86
homepage_default_text = Page(self.request, self.options.template_page).get_raw_body()
87
# replace is needed because substitution is done for request.user
89
homepage_default_text = homepage_default_text.replace('@ME@', "%(username)s")
90
homepage_default_text = homepage_default_text.replace('@EMAIL@', "<<MailTo(%(obfuscated_mail)s)>>")
92
homepage_default_text = '''#acl %(username)s:read,write,delete,revert Default
96
Email: <<MailTo(%(obfuscated_mail)s)>>
97
## You can even more obfuscate your email address by adding more uppercase letters followed by a leading and trailing blank.
103
if self.options.homepage_creator:
104
uid = user.getUserId(request, self.options.homepage_creator)
105
request.user = user.User(request, uid)
106
# Check for Group definition
108
if self.options.user_homepage:
109
members = [self.options.user_homepage, ]
110
elif self.options.name_of_group_page:
111
members = request.groups.get(self.options.name_of_group_page, [])
112
elif self.options.all_users:
113
uids = user.getUserList(request)
114
members = [user.User(request, uid).name for uid in uids]
117
print "No user selected!"
120
# loop through members for creating homepages
122
uid = user.getUserId(request, name)
123
account = user.User(request, uid)
124
homepage_text = homepage_default_text % {
125
"username": account.name,
126
"obfuscated_mail": encodeSpamSafeEmail(account.email)
128
self.write_homepage(account, homepage_text)