~ubuntu-branches/ubuntu/natty/moin/natty-updates

« back to all changes in this revision

Viewing changes to MoinMoin/userprefs/prefs.py

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-06-22 21:17:13 UTC
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20080622211713-inlv5k4eifxckelr
ImportĀ upstreamĀ versionĀ 1.7.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
 
10
10
import time
11
11
from MoinMoin import user, util, wikiutil, events
12
 
from MoinMoin.theme import load_theme_fallback
13
12
from MoinMoin.widget import html
14
13
from MoinMoin.userprefs import UserPrefBase
15
14
 
25
24
####
26
25
 
27
26
 
 
27
_debug = 0
 
28
 
28
29
class Settings(UserPrefBase):
29
30
    def __init__(self, request):
30
31
        """ Initialize user settings form. """
45
46
        @rtype: list of unicode strings
46
47
        @return: list of normalized names
47
48
        """
48
 
        text = self.request.form.get(key, '')
 
49
        text = self.request.form.get(key, [''])[0]
49
50
        text = text.replace('\r', '')
50
51
        items = []
51
52
        for item in text.split('\n'):
60
61
        form = self.request.form
61
62
        request = self.request
62
63
 
 
64
        if request.request_method != 'POST':
 
65
            return
 
66
 
63
67
        if not 'name' in request.user.auth_attribs:
64
68
            # Require non-empty name
65
 
            new_name = wikiutil.clean_input(form.get('name', request.user.name)).strip()
 
69
            new_name = form.get('name', [request.user.name])[0]
66
70
 
67
71
            # Don't allow changing the name to an invalid one
68
72
            if not user.isValidName(request, new_name):
85
89
 
86
90
        if not 'email' in request.user.auth_attribs:
87
91
            # try to get the email
88
 
            new_email = wikiutil.clean_input(form.get('email', request.user.email)).strip()
 
92
            new_email = wikiutil.clean_input(form.get('email', [request.user.email])[0])
 
93
            new_email = new_email.strip()
89
94
 
90
95
            # Require email
91
96
            if not new_email and 'email' not in request.cfg.user_form_remove:
104
109
 
105
110
        if not 'jid' in request.user.auth_attribs:
106
111
            # try to get the jid
107
 
            new_jid = wikiutil.clean_input(form.get('jid', '')).strip()
 
112
            new_jid = wikiutil.clean_input(form.get('jid', [''])[0]).strip()
108
113
 
109
114
            jid_changed = request.user.jid != new_jid
110
115
            previous_jid = request.user.jid
126
131
 
127
132
        if not 'aliasname' in request.user.auth_attribs:
128
133
            # aliasname
129
 
            request.user.aliasname = wikiutil.clean_input(form.get('aliasname', '')).strip()
 
134
            request.user.aliasname = wikiutil.clean_input(form.get('aliasname', [''])[0])
130
135
 
131
136
        # editor size
132
137
        request.user.edit_rows = util.web.getIntegerInput(request, 'edit_rows',
133
 
                                                          request.user.edit_rows, 0, 999)
 
138
                                                          request.user.edit_rows, 10, 60)
134
139
 
135
140
        # try to get the editor
136
 
        request.user.editor_default = wikiutil.clean_input(form.get('editor_default', self.cfg.editor_default))
137
 
        request.user.editor_ui = wikiutil.clean_input(form.get('editor_ui', self.cfg.editor_ui))
 
141
        request.user.editor_default = form.get('editor_default', [self.cfg.editor_default])[0]
 
142
        request.user.editor_ui = form.get('editor_ui', [self.cfg.editor_ui])[0]
138
143
 
139
144
        # time zone
140
145
        request.user.tz_offset = util.web.getIntegerInput(request, 'tz_offset',
142
147
 
143
148
        # datetime format
144
149
        try:
145
 
            dt_d_combined = Settings._date_formats.get(form['datetime_fmt'], '')
 
150
            dt_d_combined = Settings._date_formats.get(form['datetime_fmt'][0], '')
146
151
            request.user.datetime_fmt, request.user.date_fmt = dt_d_combined.split(' & ')
147
152
        except (KeyError, ValueError):
148
153
            request.user.datetime_fmt = '' # default
149
154
            request.user.date_fmt = '' # default
150
155
 
151
156
        # try to get the (optional) theme
152
 
        theme_name = wikiutil.clean_input(form.get('theme_name', self.cfg.theme_default))
 
157
        theme_name = form.get('theme_name', [self.cfg.theme_default])[0]
153
158
        if theme_name != request.user.theme_name:
154
159
            # if the theme has changed, load the new theme
155
160
            # so the user has a direct feedback
158
163
            # already loaded theme is just replaced (works cause
159
164
            # nothing has been emitted yet)
160
165
            request.user.theme_name = theme_name
161
 
            if load_theme_fallback(request, theme_name) > 0:
 
166
            if request.loadTheme(theme_name) > 0:
162
167
                theme_name = wikiutil.escape(theme_name)
163
168
                return 'error', _("The theme '%(theme_name)s' could not be loaded!") % locals()
164
169
 
165
170
        # try to get the (optional) preferred language
166
 
        request.user.language = wikiutil.clean_input(form.get('language', ''))
 
171
        request.user.language = form.get('language', [''])[0]
167
172
        if request.user.language == u'': # For language-statistics
168
173
            from MoinMoin import i18n
169
174
            request.user.real_language = i18n.get_browser_language(request)
188
193
                or (key in already_handled)):
189
194
                continue
190
195
            default = self.cfg.user_form_defaults[key]
191
 
            value = form.get(key, default)
192
 
            value = wikiutil.clean_input(value)
 
196
            value = form.get(key, [default])[0]
193
197
            setattr(request.user, key, value)
194
198
 
195
199
        # checkbox options
196
200
        for key, label in self.cfg.user_checkbox_fields:
197
201
            if key not in self.cfg.user_checkbox_disable and key not in self.cfg.user_checkbox_remove:
198
 
                value = form.get(key, "0")
 
202
                value = form.get(key, ["0"])[0]
199
203
                try:
200
204
                    value = int(value)
201
205
                except ValueError:
202
 
                    # value we got is crap, do not setattr this value, just pass
203
206
                    pass
204
207
                else:
205
208
                    setattr(request.user, key, value)
215
218
            request.user.valid = False
216
219
 
217
220
        result = _("User preferences saved!")
 
221
        if _debug:
 
222
            result = result + util.dumpFormData(form)
218
223
        return result
219
224
 
220
225
 
221
226
    def handle_form(self):
222
 
        request = self.request
223
 
        form = request.form
224
 
 
225
 
        if 'cancel' in form:
226
 
            return
227
 
 
228
 
        if request.method != 'POST':
229
 
            return
230
 
 
231
 
        if not wikiutil.checkTicket(request, form['ticket']):
232
 
            return
233
 
 
234
 
        if 'save' in form: # Save user profile
 
227
        _ = self._
 
228
        form = self.request.form
 
229
 
 
230
        if form.has_key('cancel'):
 
231
            return
 
232
 
 
233
        if form.has_key('save'): # Save user profile
235
234
            return self._save_user_prefs()
236
235
 
237
236
    # form generation part
243
242
        'rfc': '%a %b %d %H:%M:%S %Y & %a %b %d %Y',
244
243
    }
245
244
 
246
 
    def _tz_select(self, enabled=True):
 
245
    def _tz_select(self):
247
246
        """ Create time zone selection. """
248
247
        tz = 0
249
248
        if self.request.user.valid:
265
264
                ),
266
265
            ))
267
266
 
268
 
        return util.web.makeSelection('tz_offset', options, str(tz), 1, False, enabled)
 
267
        return util.web.makeSelection('tz_offset', options, str(tz))
269
268
 
270
269
 
271
270
    def _dtfmt_select(self):
283
282
        return util.web.makeSelection('datetime_fmt', options, selected)
284
283
 
285
284
 
286
 
    def _lang_select(self, enabled=True):
 
285
    def _lang_select(self):
287
286
        """ Create language selection. """
288
287
        from MoinMoin import i18n
289
288
        _ = self._
295
294
            name = lang[1]['x-language']
296
295
            options.append((lang[0], name))
297
296
 
298
 
        return util.web.makeSelection('language', options, cur_lang, 1, False, enabled)
 
297
        return util.web.makeSelection('language', options, cur_lang)
299
298
 
300
299
    def _theme_select(self):
301
300
        """ Create theme selection. """
394
393
            self._form.append(html.INPUT(type="hidden", name="action", value="userprefs"))
395
394
            self._form.append(html.INPUT(type="hidden", name="handler", value="prefs"))
396
395
 
397
 
            ticket = wikiutil.createTicket(request)
398
 
            self._form.append(html.INPUT(type="hidden", name="ticket", value="%s" % ticket))
399
 
 
400
396
        # Add buttons
401
397
        button_cell = []
402
398
        for name, label in buttons: