Changeset 1094

Show
Ignore:
Timestamp:
03/20/08 10:15:51
Author:
piv
Message:

finished with functionality without js/ajax

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py

    r1093 r1094  
    1 import copy 
     1import copy, sys 
    22 
    33from Acquisition import aq_inner 
     
    99from zope.exceptions import UserError 
    1010 
     11from OFS.CopySupport import CopyError 
     12 
    1113from Products.CMFCore.utils import getToolByName 
    1214from Products.CMFCore.interfaces import IAction, IActionCategory 
    1315from Products.CMFCore.ActionInformation import Action, ActionCategory 
     16from Products.CMFCore.Expression import Expression 
    1417from Products.CMFEditions.setuphandlers import DEFAULT_POLICIES 
    1518from Products.CMFPlone import PloneMessageFactory as _ 
     
    3033from interfaces import IPloneTabsControlPanel 
    3134 
    32 ACTION_ATTRS = ["id", "visible", "description", "url_expr", "title", "available_expr"] 
     35ACTION_ATTRS = ["id", "visible", "url_expr", "title", "available_expr"] 
    3336 
    3437class PloneTabsControlPanel(PloneKSSView): 
     
    5760        elif action == "edit_action": 
    5861            if submitted: 
    59                 pass 
     62                postback = self.manage_editAction(form, errors) 
    6063        elif action == "delete_action": 
    6164            postback = self.manage_deleteAction(self.request, errors) 
     
    6972            if submitted: 
    7073                postback = self.manage_setAutogeneration(form, errors) 
     74        else: 
     75            postback = True 
    7176         
    7277        if postback: 
     
    141146                    action._setPropValue(prop, value) 
    142147                except Exception, e: 
    143                     errors[prop] = _(u"%s" % str(e)
     148                    errors[prop] = "%s" % str(e
    144149         
    145150        # if not errors find (or create) category and set action to it 
     
    152157                    portal_actions._setObject(category, ActionCategory(category)) 
    153158                except Exception, e: 
    154                     errors["select_category"] = _(u"%s" % str(e)
     159                    errors["select_category"] = "%s" % str(e
    155160                else: 
    156161                    cat_container = portal_actions[category] 
     
    162167                    cat_container._setObject(id, action) 
    163168                except Exception, e: 
    164                     errors["id"] = _(u"%s" % str(e)
     169                    errors["id"] = "%s" % str(e
    165170         
    166171        if not errors: 
     
    171176            IStatusMessage(self.request).addStatusMessage(_(u"Please correct the indicated errors."), type="error") 
    172177            return True 
     178     
     179    def manage_editAction(self, form, errors): 
     180        """ Add a new action to given category, if category doesn't exist, create it """ 
     181        portal_actions = getToolByName(self.context, "portal_actions") 
     182         
     183        # extract data from request's form 
     184        orig_id = form.get("orig_id") 
     185        new_id = form.get("id_%s" % orig_id) 
     186        category = form.get("category") 
     187         
     188        # before updating action we validate action id/category 
     189        if category not in portal_actions.objectIds(): 
     190            IStatusMessage(self.request).addStatusMessage(_(u"Unexistent root portal actions category '%s'" % category), type="error") 
     191        else: 
     192            cat_container = portal_actions[category] 
     193            if orig_id not in map(lambda x: x.id, filter(lambda x: IAction.providedBy(x), cat_container.objectValues())): 
     194                IStatusMessage(self.request).addStatusMessage(_(u"'%s' action does not exist in '%s' category" % (orig_id, category)), type="error") 
     195            else: 
     196                # validate input 
     197                # id is required 
     198                if not new_id: 
     199                    errors["id_%s" % orig_id] = _(u"Id field is required") 
     200                 
     201                # title is required 
     202                if not form.get("title_%s" % orig_id): 
     203                    errors["title_%s" % orig_id] = _(u"Title field is required") 
     204                 
     205                # check action for valid tal expression 
     206                try: 
     207                    Expression(form.get("url_expr_%s" % orig_id)) 
     208                except Exception, e: 
     209                    errors["url_expr_%s" % orig_id] = "%s" % str(e) 
     210                 
     211                # check condition for valid tal expression 
     212                try: 
     213                    Expression(form.get("available_expr_%s" % orig_id)) 
     214                except Exception, e: 
     215                    errors["available_expr_%s" % orig_id] = "%s" % str(e) 
     216                 
     217                # check visible for integer 
     218                try: 
     219                    int(form.get("visible_%s" % orig_id, '0')) 
     220                except Exception, e: 
     221                    errors["visible_%s" % orig_id] = "%s" % str(e) 
     222                 
     223                # rename action if needed 
     224                if not errors: 
     225                    if new_id != orig_id: 
     226                        try: 
     227                            cat_container.manage_renameObject(orig_id, new_id) 
     228                        except CopyError, e: 
     229                            errors["id_%s" % orig_id] = _(u"Invalid id") 
     230                        except: 
     231                            exctype, v = sys.exc_info()[:2] 
     232                            errors["id_%s" % orig_id] = "%s" % str(v) 
     233                 
     234                if not errors: 
     235                    action = cat_container[new_id] 
     236                     
     237                    for prop in ACTION_ATTRS: 
     238                        if prop != "id": 
     239                            if prop == "visible": 
     240                                value = int(form.get("%s_%s" % (prop, orig_id), '0')) 
     241                            else: 
     242                                value = form.get("%s_%s" % (prop, orig_id)) 
     243                            action._setPropValue(prop, value) 
     244                     
     245                    IStatusMessage(self.request).addStatusMessage(_(u"'%s' action saved." % new_id), type="info") 
     246                    self.redirect(search="category=%s" % category) 
     247                     
     248                    return False 
     249         
     250        IStatusMessage(self.request).addStatusMessage(_(u"Please correct the indicated errors."), type="error") 
     251        return True 
    173252     
    174253    def manage_deleteAction(self, request, errors): 
     
    300379        return not site_properties.getProperty("disable_nonfolderish_sections", False) 
    301380     
    302     def getActionsList(self, category="portal_tabs"): 
    303         """ See interface """ 
    304         return self.actionslist_template(category=category
     381    def getActionsList(self, category="portal_tabs", errors={}): 
     382        """ See interface """ 
     383        return self.actionslist_template(category=category, errors=errors
    305384     
    306385    def getGeneratedTabs(self): 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css

    r1093 r1094  
    4040#app #addaction.adding              .add-controls, 
    4141.kssTabsActive #app.viewing #tabslist li      .url-helper, 
    42 .kssTabsActive #app.viewing #tabslist li      .tab-title { 
     42.kssTabsActive #app.viewing #tabslist li      .tab-title, 
     43.kssTabsActive #app                           .editcancel { 
    4344    display: block; 
    4445} 
     
    6970.kssTabsActive #app                 .change-button, 
    7071.kssTabsActive #app                 .up-arrow, 
    71 .kssTabsActive #app                 .down-arrow { 
     72.kssTabsActive #app                 .down-arrow, 
     73#app                                .editcancel { 
    7274    display: none; 
    7375} 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt

    r1093 r1094  
    11<tal:tabs tal:define="test nocall:view/test; 
    22                      dummy python:request.RESPONSE.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT'); 
    3                       category python:options.get('category', None) or 'portal_tabs'" 
     3                      category python:options.get('category', None) or 'portal_tabs'; 
     4                      errors options/errors|nothing" 
    45          tal:repeat="tab options/tabs|python:view.getPortalActions(category)"> 
    56<li tal:define="id tab/id; 
     
    1314 
    1415  <img class="drag-handle" src="++resource++drag.gif" alt="" height="11" width="25" /> 
    15  
    16   <div class="bridge"> 
    17     <input type="checkbox" class="visibility" value="1" name="visible" title="visibility" 
    18            tal:attributes="checked python:test(visible, 'checked', None); 
    19                            name string:${attrs/name}_${id}" /> 
    20   </div> 
    2116 
    2217  <a class="delete" href="#" 
     
    4338                        name string:${attrs/name}_${id}"> 
    4439 
     40      <input type="hidden" name="orig_id" value="orig_id" tal:attributes="value id" /> 
    4541      <input type="hidden" name="action" value="edit_action" /> 
     42      <input type="hidden" name="category" value="current_category" tal:attributes="value category" /> 
    4643      <input type="hidden" name="form.submitted:boolean" value="True" /> 
    4744 
    48       <dl> 
     45      <div class="bridge"> 
     46        <input type="checkbox" class="visibility" value="1" name="visible" title="visibility" 
     47               tal:define="name string:${attrs/name}_${id}; 
     48                           submitted request/form.submitted|nothing; 
     49                           checked python:test(submitted, test(request.get(name, []) != [], 'checked', None), test(visible, 'checked', None))" 
     50               tal:attributes="checked checked; 
     51                               name name" /> 
     52      </div> 
     53 
     54      <dl tal:define="name string:title_${id}; 
     55                      error python:errors.get(name, ''); 
     56                      tab_title tab/title" 
     57          tal:attributes="class python:test(error, 'error', '')"> 
    4958        <dt><label>Name</label></dt> 
    50         <dd><input type="text" value="" name="title" 
    51                    tal:attributes="value tab/title; 
    52                                    name string:${attrs/name}_${id}" /></dd> 
     59        <dd> 
     60          <span tal:content="error">Validation error output</span> 
     61          <input type="text" value="" name="title" 
     62                 tal:attributes="value python:test(request.get(name, []) != [], request.get(name), tab_title); 
     63                                 name name" /></dd> 
    5364      </dl> 
    5465 
     
    5667        <dt class="headerAdvanced">Advanced</dt> 
    5768        <dd class="contentAdvanced"> 
    58           <dl> 
     69          <dl tal:define="name string:url_expr_${id}; 
     70                          error python:errors.get(name, ''); 
     71                          tab_url tab/url_expr" 
     72              tal:attributes="class python:test(error, 'error', '')"> 
    5973            <dt><label>URL (Expression)</label></dt> 
    60             <dd><input type="text" value="" name="url_expr"     size="30" 
    61                        tal:attributes="value tab/url_expr; 
    62                                        name string:${attrs/name}_${id}" /></dd> 
     74            <dd> 
     75              <span tal:content="error">Validation error output</span> 
     76              <input type="text" value="" name="url_expr"     size="30" 
     77                     tal:attributes="value python:test(request.get(name, []) != [], request.get(name), tab_url); 
     78                                     name name" /></dd> 
    6379          </dl> 
    64           <dl> 
     80          <dl tal:define="name string:id_${id}; 
     81                          error python:errors.get(name, ''); 
     82                          tab_id tab/id" 
     83              tal:attributes="class python:test(error, 'error', '')"> 
    6584            <dt><label>Id</label></dt> 
    66             <dd><input type="text" value="" name="id" 
    67                        tal:attributes="value tab/id; 
    68                                        name string:${attrs/name}_${id}" /></dd> 
     85            <dd> 
     86              <span tal:content="error">Validation error output</span> 
     87              <input type="text" value="" name="id" 
     88                     tal:attributes="value python:test(request.get(name, []) != [], request.get(name), tab_id); 
     89                                     name name" /></dd> 
    6990          </dl> 
    70           <dl> 
     91          <dl tal:define="name string:available_expr_${id}; 
     92                          error python:errors.get(name, ''); 
     93                          tab_cond tab/available_expr" 
     94              tal:attributes="class python:test(error, 'error', '')"> 
    7195            <dt><label>Condition (Expression)</label></dt> 
    72             <dd><input type="text" value="" name="condition"  size="30" 
    73                        tal:attributes="value tab/available_expr; 
    74                                        name string:${attrs/name}_${id}" /></dd> 
     96            <dd> 
     97              <span tal:content="error">Validation error output</span> 
     98              <input type="text" value="" name="available_expr"  size="30" 
     99                     tal:attributes="value python:test(request.get(name, []) != [], request.get(name), tab_cond); 
     100                                     name name" /></dd> 
    75101          </dl> 
    76102          <div class="visualClear"><!-- --></div> 
     
    81107        <input type="submit" class="editsave"   i18n:attributes="value" value="Save"   /> 
    82108        <input type="submit" class="editcancel" i18n:attributes="value" value="Cancel" /> 
     109        <input type="reset"  class="editreset"  i18n:attributes="value" value="Reset"  /> 
    83110      </div> 
    84111 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt

    r1092 r1094  
    8181  <ul class="csshover" 
    8282      id="tabslist" 
    83       tal:content="structure python:view.getActionsList(category=category)" /> 
     83      tal:content="structure python:view.getActionsList(category=category, errors=errors)" /> 
    8484 
    8585  <form id="addaction"