Show
Ignore:
Timestamp:
04/30/08 13:35:20 (23 months ago)
Author:
JensDiemer
Message:

Experimental new Preferences!

  • New editor used the newforms models in the plugin class
  • Doesn't realy use the preferences (in search and find_and_replace) only display it
  • the system_settings doesn't used, too. Only for display the data.
  • Not ready in all cases
  • there can exist some print debug!
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  
    1212    $LastChangedDate$ 
    1313    $Rev$ 
    14     $Author: JensDiemer $ 
     14    $Author$ 
    1515 
    1616    :copyleft: 2008 by the PyLucid team. 
     
    2626from django.utils.translation import ugettext as _ 
    2727 
    28 from PyLucid.models import Preference 
     28from PyLucid.db.preferences import get_all_prefs, Preferences 
    2929from PyLucid.system.BasePlugin import PyLucidBasePlugin 
    3030from 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 value 
    44  
    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 preferences 
    57     """ 
    58     raw_value = DataEvalField(widget=PformatWidget()) 
    5931 
    6032 
     
    6335 
    6436    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("_", " ") 
    6938 
    7039    def select(self): 
     
    7241        Display the sub menu 
    7342        """ 
    74         self.context["PAGE"].title = _("Low level preferences editor") 
     43        self.context["PAGE"].title = _("preferences editor") 
    7544 
    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) 
    7948 
    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            }) 
    8654 
    8755        context = { 
    88             "preferences": preferences, 
     56            "preferences": items, 
     57            "admin_link": self.URLs.adminLink("PyLucid/preference"), 
    8958        } 
    9059        self._render_template("select", context)#, debug=True) 
    9160 
    92     def edit(self, url_args=None): 
     61    def edit(self, url_args): 
    9362        try: 
    94             url_args = url_args.strip("/").split("/",1)[0] 
     63            url_args = url_args.strip("/") 
    9564            pref_id = int(url_args) 
    9665        except Exception, e: 
     
    9867            return 
    9968 
    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 
    10175 
    10276        if self.request.method == 'POST': 
    103             form = EditForm(self.request.POST) 
     77            form = unbound_form(self.request.POST) 
    10478            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 
    11683        else: 
    117             form = EditForm({"raw_value": p.value}) 
     84            form = unbound_form(data_dict) 
    11885 
    11986        context = { 
    12087            "plugin_name": self._vebose_plugin_name(p), 
    121             "pref_name": p.name, 
    122             "description": p.description, 
    12388            "form": form, 
    12489            "url_abort": self.URLs.methodLink("select"), 
    12590        } 
    12691        self._render_template("edit_form", context)#, debug=True) 
    127 #        self._render_string_template(EDIT_TEMPLATE, context)#, debug=True) 
    12892 
    12993 
     
    13397 
    13498 
    135  
    136  
    137  
    138  
    139  
    140  
    141  
    142