- Timestamp:
- 04/30/08 13:35:20 (23 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/pylucid/PyLucid/plugins_internal/preferences/preferences.py
- Property svn:eol-style set to LF
- Property svn:keywords set to Rev Author
r1540 r1544 12 12 $LastChangedDate$ 13 13 $Rev$ 14 $Author : JensDiemer$14 $Author$ 15 15 16 16 :copyleft: 2008 by the PyLucid team. … … 26 26 from django.utils.translation import ugettext as _ 27 27 28 from PyLucid. models import Preference28 from PyLucid.db.preferences import get_all_prefs, Preferences 29 29 from PyLucid.system.BasePlugin import PyLucidBasePlugin 30 30 from PyLucid.tools.data_eval import data_eval, DataEvalError 31 32 INTERNAL_NAME = "[system]"33 34 35 class DataEvalField(forms.CharField):36 def clean(self, raw_value):37 raw_value = super(DataEvalField, self).clean(raw_value)38 try:39 value = data_eval(raw_value)40 except DataEvalError, e:41 raise ValidationError(_(u"data eval error: %s") % e)42 else:43 return value44 45 class PformatWidget(forms.Textarea):46 def __init__(self, attrs=None):47 self.attrs={'rows': '10'}48 49 def render(self, name, value, attrs=None):50 if not isinstance(value, basestring):51 value = pformat(value)52 return super(PformatWidget, self).render(name, value, attrs=None)53 54 class EditForm(forms.Form):55 """56 Form for editing a preferences57 """58 raw_value = DataEvalField(widget=PformatWidget())59 31 60 32 … … 63 35 64 36 def _vebose_plugin_name(self, pref): 65 if pref.plugin == None: 66 return INTERNAL_NAME 67 else: 68 return pref.plugin.plugin_name.replace("_", " ") 37 return pref.plugin.plugin_name.replace("_", " ") 69 38 70 39 def select(self): … … 72 41 Display the sub menu 73 42 """ 74 self.context["PAGE"].title = _(" Low levelpreferences editor")43 self.context["PAGE"].title = _("preferences editor") 75 44 76 preferences = {}77 for pref in Preference.objects.all():78 plugin_name = self._vebose_plugin_name(pref)45 items = [] 46 for pref in get_all_prefs(): 47 edit_link = self.URLs.methodLink("edit", args=pref.id) 79 48 80 pref.link = self.URLs.methodLink("edit", args=(pref.id, pref.name)) 81 82 if plugin_name not in preferences: 83 preferences[plugin_name] = [pref] 84 else: 85 preferences[plugin_name].append(pref) 49 items.append({ 50 "plugin_name": self._vebose_plugin_name(pref), 51 "plugin_description": pref.plugin.description, 52 "edit_link": edit_link, 53 }) 86 54 87 55 context = { 88 "preferences": preferences, 56 "preferences": items, 57 "admin_link": self.URLs.adminLink("PyLucid/preference"), 89 58 } 90 59 self._render_template("select", context)#, debug=True) 91 60 92 def edit(self, url_args =None):61 def edit(self, url_args): 93 62 try: 94 url_args = url_args.strip("/") .split("/",1)[0]63 url_args = url_args.strip("/") 95 64 pref_id = int(url_args) 96 65 except Exception, e: … … 98 67 return 99 68 100 p = Preference.objects.get(id = pref_id) 69 p = Preferences() 70 p.init_via_id(pref_id) 71 data_dict = p.data_dict 72 73 p.load_form(self.request) 74 unbound_form = p.form 101 75 102 76 if self.request.method == 'POST': 103 form = EditForm(self.request.POST)77 form = unbound_form(self.request.POST) 104 78 if form.is_valid(): 105 value = form.cleaned_data["raw_value"] 106 if "validate" in self.request.POST: 107 # rebuild the form for pformat with the eval data 108 form = EditForm({"raw_value": value}) 109 self.page_msg("validate only...") 110 else: 111 # save the form 112 p.value = value 113 p.save() 114 self.page_msg.green("new value saved!") 115 return self.select() # Display the menu 79 new_data_dict = form.cleaned_data 80 p.update_and_save(new_data_dict) 81 self.page_msg("New preferences saved.") 82 return self.select() # Display the menu 116 83 else: 117 form = EditForm({"raw_value": p.value})84 form = unbound_form(data_dict) 118 85 119 86 context = { 120 87 "plugin_name": self._vebose_plugin_name(p), 121 "pref_name": p.name,122 "description": p.description,123 88 "form": form, 124 89 "url_abort": self.URLs.methodLink("select"), 125 90 } 126 91 self._render_template("edit_form", context)#, debug=True) 127 # self._render_string_template(EDIT_TEMPLATE, context)#, debug=True)128 92 129 93 … … 133 97 134 98 135 136 137 138 139 140 141 142