ZEXPI ((U OFS.FolderqUFolderqtqNt.}q(Udeprecated_navigator.ptq(UIq(U'Products.PageTemplates.ZopePageTemplateqUZopePageTemplateqttQU records_cloneq (UIq (U#Products.PythonScripts.PythonScriptq U PythonScriptq ttQU__ac_local_roles__q }qUvsbabuq]qUOwnerqasUleft.gifq(UIq(U OFS.ImageqUImageqttQU_objectsq(}q(U meta_typeqUScript (Python)qUidqU check_formqu}q(hUFolderqhUskillsqu}q(hhhUmake_record_idq u}q!(U meta_typeq"UScript (Python)q#Uidq$Uformulator_to_storage_metatypesq%u}q&(U meta_typeq'UScript (Python)q(Uidq)U export.csvq*u}q+(h'U Page Templateq,h)U export.xmlq-u}q.(U meta_typeq/UScript (Python)q0Uidq1U stringifyq2u}q3(h/h0h1U process_formq4u}q5(h/U DTML Documentq6h1Ustylesheet.cssq7u}q8(h/h0h1U get_recordsq9u}q:(U meta_typeq;U DTML Documentqu}q?(U meta_typeq@UScript (Python)qAUidqBU setup_searchqCu}qD(U meta_typeqEUScript (Python)qFUidqGUsearch_resultsqHu}qI(U meta_typeqJUImageqKUidqLU info_iconqMu}qN(U meta_typeqOU Page TemplateqPUidqQU search.ptqRu}qS(U meta_typeqTU Page TemplateqUUidqVUform.ptqWu}qX(U meta_typeqYUScript (Python)qZUidq[U view_tabularq\u}q](hYUImageq^h[Uup.gifq_u}q`(hYh^h[Udn.gifqau}qb(hYh^h[Uleft.gifqcu}qd(hYh^h[U right.gifqeu}qf(U meta_typeqgU DTML MethodqhUidqiU index_htmlqju}qk(U meta_typeqlUScript (Python)qmUidqnUrecords_removeqou}qp(hlhmhnh u}qq(U meta_typeqrU Page TemplateqsUidqtUdeprecated_index_htmlquu}qv(hrhshthuth\(UIqw(h U PythonScriptqxttQhR(UIqy(hUZopePageTemplateqzttQU_ownerq{(]q|U acl_usersq}aUvsbabuq~th9(UIq(h U PythonScriptqttQhUformsqU setup_searchq(UIq(h U PythonScriptqttQUdn.gifq(UIq(hUImageqttQhW(UIq(hUZopePageTemplateqttQh*(UIq(h U PythonScriptqttQUmake_record_idq(UIq(h U PythonScriptqttQU index_htmlq(UIq(UOFS.DTMLMethodqU DTMLMethodqttQUtitleqU Web FormsqUsearch_resultsq(UIq(h U PythonScriptqttQU stringifyq(UIq(h U PythonScriptqttQU right.gifq(UIq(hUImageqttQh7(UIq(UOFS.DTMLDocumentqU DTMLDocumentqttQhu(UIq(hUZopePageTemplateqttQh>(UIq(hU DTMLDocumentqttQU export.xmlq(UIq(hUZopePageTemplateqttQho(UIq(h U PythonScriptqttQUup.gifq(UIq(hUImageqttQh4(UIq(h U PythonScriptqttQU check_formq(UIq(h U PythonScriptqttQhM(UIq(hUImageqttQUskillsq(UIq(hUFolderqttQh%(UIq(h U PythonScriptqttQu.I [((U'Products.PageTemplates.ZopePageTemplateqUZopePageTemplateqtqNt.}q(U_dav_writelocksq(UIq(U PersistenceqUPersistentMappingqttQUexpandq KUidq Udeprecated_navigator.ptq U__ac_local_roles__q }q Uvsbabuq]qUOwnerqasU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qo}qU_asgnsq}qU name_subpathqUtraverse_subpathqssbU_textqT The title
No records yet
qU content_typeqU text/htmlqUtitleqURecord Navigatorqu.I ((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (Urecidsq U _getattr_q U_getattrq U containerq UrequestqURESPONSEqUcountqUrecidqUcontextqUcook_idqUgetattrqUsrcqUclonedqUNoneqtU co_argcountqKubU_paramsqU recids=[]qUidqU records_cloneqU__ac_local_roles__q}qUvsbabuq]q UOwnerq!asU_dav_writelocksq"(UJq#(U Persistenceq$UPersistentMappingq%ttQU _bind_namesq&(cShared.DC.Scripts.Bindings NameAssignments q'oq(}q)U_asgnsq*}q+(Uname_containerq,U containerq-U name_subpathq.Utraverse_subpathq/U name_contextq0Ucontextq1U name_m_selfq2Uscriptq3usbU func_defaultsq4(]q5tq6U_codeq7TOcsgdZdS(NcsDt}|td}||d}d}x|dr}|td} t t|d} | djo|td| | } | | ddd|| d y&|| td d | | Wn  nX|d }nq?W|t j o||d d Sn|SdS(NsREQUESTsRESPONSEismake_record_ids manage_clonesmanage_changePropertiesstitles Cloned from sCatalogscatalog_objectisredirectsindex_html?msg=records+cloned(s _getattr_s_getattrs containersrequestsRESPONSEscountsrecidssrecidscontextscook_idsgetattrssrcsclonedsNone(srecidss _getattr_s_getattrs containersrequestsRESPONSEscountsrecidscontextscook_idsgetattrssrcsclonedsNone((sScript (Python)s records_clones # #(s records_clone(s records_clone((sScript (Python)ssq8U_bodyq9Trequest = container.REQUEST RESPONSE = request.RESPONSE count = 0 for recid in recids: cook_id = context.make_record_id() src = getattr(context, recid, 0) if src != 0: cloned=context.manage_clone(src, cook_id) cloned.manage_changeProperties(title='Cloned from ' + src.title) try: context.Catalog.catalog_object(cloned, cook_id) except: pass count = count + 1 if request is not None: return RESPONSE.redirect('index_html?msg=records+cloned') else: return count q:U Script_magicq;KUwarningsq<)Utitleq=U Clone recordsq>Uerrorsq?)U Python_magicq@U* qAu.I((U OFS.ImageqUImageqtqNt.}q(UsizeqKUdataqUGIF89aӽ{{{hhhBBBAAA777 !,t` diE#F- FbH#D' P=baAL8E1iP,`KW h6\sw\;    sbobobase_modification_timesModified On s %s s get_fields get_valuestitles iis s s@ sgetIds stringifysdates getPropertysgetPropertyTypes sstrips%s s absolute_urls/form.pts %s s N(s _getattr_s_getattrsresultsgetattrscontextsform_idso_formsrecordsscolumnssfields count_recordso_rs count_fieldsvalsNone(srecordsscolumnssform_ids _getattr_s_getattrsresultsgetattrscontextso_formsfields count_recordso_rs count_fieldsvalsNone((sScript (Python)s view_tabularsD  *  3      +9  + N(s view_tabular(s view_tabular((sScript (Python)ssq;U_bodyq\n \n""" for field in columns: if field == 'bobobase_modification_time': result += """Modified On\n""" else: result += """%s\n""" % (o_form.get_field(field).get_value('title')) result += """\n""" count_record = 0 for o_r in records: count_record = count_record + 1 if count_record%2==0: result += """\n""" else: result += """\n""" count_field = 0 result += """\n""" % o_r.getId() for field in columns: count_field = count_field + 1 if field == 'bobobase_modification_time': val = context.stringify(o_r.bobobase_modification_time(), 'date') else: val = context.stringify(o_r.getProperty(field), o_r.getPropertyType(field)) if val is None: val = ' ' elif val.strip() == '': val = ' ' if count_field==1: result += """%s\n""" % (o_r.absolute_url()+'/form.pt', val) else: result += """%s\n""" % val result += """\n""" result += """\n""" return result q=U Script_magicq>KUwarningsq?)Utitleq@USimple tabular viewqAUerrorsqB)U Python_magicqCU* qDu.I"F((U'Products.PageTemplates.ZopePageTemplateqUZopePageTemplateqtqNt.}q(U_dav_writelocksq(UJq(U PersistenceqUPersistentMappingqttQUexpandq KUidq U search.ptq U__ac_local_roles__q }q Uvsbabuq]qUOwnerqasU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qo}qU_asgnsq}qU name_subpathqUtraverse_subpathqssbU_textqT The title

content title or id

error or information message
Records

   

Filter Records Step 1: Set Filter Condition
Each field is AND'ed. For checkbox/multiselect fields, the search is for any value you choose in such fields.
Group
Example Title Example Value

Filter Records Step 2: Customize Results Display
Available Fields Reporting Fields

Move a selected item in Selected Items up
Move a selected item in Selected Items down

Move selected items to Unselected Items
Move selected items to Selected Items

qU content_typeqU text/htmlqUtitleqUSearch Recordsqu.I@((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (U _getattr_q U_getattrq Ustringq Ulowerq UcontextqUpUrecsqUidqUo_rqtU co_argcountqKubU_paramsqUUidqU get_recordsqU__ac_local_roles__q}qUvsbabuq]qUOwnerqasU_dav_writelocksq(UIq(U PersistenceqUPersistentMappingqttQU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments q oq!}q"U_asgnsq#}q$(Uname_containerq%U containerq&U name_subpathq'Utraverse_subpathq(U name_contextq)Ucontextq*U name_m_selfq+Uscriptq,usbU func_defaultsq-NU_codeq.TcsdZdS(Nc stdkl}tddotd}n t} g} x^|ddgd r?\}} |ddo |d|nquW |d d |SdS( N(slowers hasPropertysabracadabra_is_records aq_parents objectItemssFolderisappendssortcs: t|dd|ddS(Nstitleslower(scmps_getattrsxsy(sxsyscmps_getattr(s_getattr(sScript (Python)s s( s _getattr_s_getattrsstringslowerscontextspsrecssidso_r( s _getattr_s_getattrsstringslowerscontextspsrecssidso_r((s_getattrsScript (Python)s get_recordss  0(s get_records(s get_records((sScript (Python)ssq/U_bodyq0T{from string import lower if context.hasProperty('abracadabra_is_record'): #already inside a data record #TODO: fix this p = context.aq_parent else: p = context recs = [] for (id, o_r) in p.objectItems(['Folder']): if o_r.hasProperty('abracadabra_is_record'): recs.append(o_r) recs.sort(lambda x, y: cmp(x.title.lower(), y.title.lower())) return recs q1U Script_magicq2KUwarningsq3)Uerrorsq4)U Python_magicq5U* q6u.I((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (U _getitem_q U_getitemq U _getattr_q U_getattrq U catalog_idqUform_idqUhasattrqUcontextqUgetattrqUcatalogqUformulator_to_catalog_indextypeqUo_formqUfieldqU indextypeqUrecqtU co_argcountqKubU_paramsqUUidqU setup_searchqU__ac_local_roles__q}qUsbabuq]q UOwnerq!asU_dav_writelocksq"(UIq#(U Persistenceq$UPersistentMappingq%ttQU _bind_namesq&(cShared.DC.Scripts.Bindings NameAssignments q'oq(}q)U_asgnsq*}q+(Uname_containerq,U containerq-U name_subpathq.Utraverse_subpathq/U name_contextq0Ucontextq1U name_m_selfq2Uscriptq3usbU func_defaultsq4NU_codeq5T csdZdS(s= Makes a catalog in the folder and index database records there Whenever you run this, existing catalog is deleted and new one created. Run this from inside a database folder. Since keeping indexes updated is automatic, you DON'T NEED TO RUN THIS AGAIN unless you change the form field names, add extra fields etc. cst}t} d d} d}t|td|o|td|gn|||tddd|dt|td|d } hd d <d d <d d<dd<dd<d d<d d<d d<d d<dd<dd<dd<} $tt|d } %x|| dd %rp} &|| d|| djoE'|| || d} |(| d|| d| dnqLW+xD|tdd +r+}|-| d |||d!qWd"S(#s= Makes a catalog in the folder and index database records there Whenever you run this, existing catalog is deleted and new one created. Run this from inside a database folder. Since keeping indexes updated is automatic, you DON'T NEED TO RUN THIS AGAIN unless you change the form field names, add extra fields etc. sCatalogsforms aq_explicitsmanage_delObjectssmanage_addProductsZCatalogsmanage_addZCatalogsisKeywords CheckBoxFieldsFields DateTimeFields EmailFieldsTexts LinesFields LinkFields ListFieldsMultiCheckBoxFieldsMultiListFields RadioFieldsRawTextAreaFields StringFields TextAreaFields get_fieldss meta_typeskeyssaddIndexsidsIndexs get_recordsscatalog_objectsgetIdN(s _getitem_s_getitems _getattr_s_getattrs catalog_idsform_idshasattrscontextsgetattrscatalogsformulator_to_catalog_indextypeso_formsfields indextypesrec(s _getitem_s_getitems _getattr_s_getattrs catalog_idsform_idshasattrscontextsgetattrscatalogsformulator_to_catalog_indextypeso_formsfields indextypesrec((sScript (Python)s setup_searchs   #"u!%+$N(s setup_search(s setup_search((sScript (Python)ssq6U_bodyq7T1""" Makes a catalog in the folder and index database records there Whenever you run this, existing catalog is deleted and new one created. Run this from inside a database folder. Since keeping indexes updated is automatic, you DON'T NEED TO RUN THIS AGAIN unless you change the form field names, add extra fields etc. """ catalog_id = 'Catalog' form_id = 'form' #recreate the catalog if hasattr(context.aq_explicit, catalog_id): context.manage_delObjects([catalog_id]) context.manage_addProduct['ZCatalog'].manage_addZCatalog(catalog_id, '') catalog = getattr(context.aq_explicit, catalog_id, 0) #now, create catalog indexes from the form #let us make anything searchable, and a combination of all #fields for full-text quick search formulator_to_catalog_indextype = { 'CheckBoxField':'Keyword', 'DateTimeField':'Field', 'EmailField':'Field', 'LinesField':'Text', 'LinkField':'Text', 'ListField':'Keyword', 'MultiCheckBoxField':'Keyword', 'MultiListField':'Keyword', 'RadioField':'Field', 'RawTextAreaField':'Text', 'StringField':'Text', 'TextAreaField':'Text', } o_form = getattr(context, form_id, 0) for field in o_form.get_fields(): if field.meta_type in formulator_to_catalog_indextype.keys(): indextype = formulator_to_catalog_indextype[field.meta_type] catalog.addIndex(field.id, indextype + 'Index') #Now, go ahead and index all records for rec in context.get_records(): #rec.manage_addProperty(id='PrincipiaSearchSource', type='text', value=rec.title) catalog.catalog_object(rec, rec.getId()) q8U Script_magicq9KUwarningsq:)Utitleq;U7Create Catalog, Indexes, records, search interface etc.qU* q?u.I=((U OFS.ImageqUImageqtqNt.}q(UsizeqK`UdataqU`GIF89afff!,1i>ě-΀}8het_ӥƨ"xLN8u|,;qU__ac_local_roles__q}q Uvsbabuq ]q UOwnerq asU__name__q Udn.gifqU content_typeqU image/gifqUtitleqU move downqU preconditionqUUwidthqKUheightqKu.I3((U'Products.PageTemplates.ZopePageTemplateqUZopePageTemplateqtqNt.}q(U_dav_writelocksq(UIq(U PersistenceqUPersistentMappingqttQUexpandq KUidq Uform.ptq U__ac_local_roles__q }q Uvsbabuq]qUOwnerqasU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qo}qU_asgnsq}qU name_subpathqUtraverse_subpathqssbU_textqT The title

content title or id

content title or id

error or information message

!Please check the following and try again:

  • Error field:
form header
Group
Example Title *
description
Example Value Example Value
Example Title *
description
Example Value Example Value !
error goes here

qU content_typeqU text/htmlqUtitleqU Form Rendererqu.I((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (Uform_idq U _getitem_q U_getitemq U _getattr_q U_getattrqU_print_qU_printqUstringqUjoinqU containerqUrequestqURESPONSEqUcontextqU purify_fieldqUo_rqU make_recordqUgetattrqUo_formqUappendqU$append0qUfieldqUfieldsqUrecq UftU co_argcountq!KubU_paramsq"Uform_id='form'q#Uidq$U export.csvq%U__ac_local_roles__q&}q'Uvsbabuq(]q)UOwnerq*asU_dav_writelocksq+(UIq,(U Persistenceq-UPersistentMappingq.ttQU _bind_namesq/(cShared.DC.Scripts.Bindings NameAssignments q0oq1}q2U_asgnsq3}q4(Uname_containerq5U containerq6U name_subpathq7Utraverse_subpathq8U name_m_selfq9Uscriptq:U name_contextq;Ucontextqtq?U_codeq@Td csddZdS(Nsformcset}t}t}dkl|td} || d} || ddd|| ddd|t d || dd d || dd d  dd}tt |d}|| ddoegi}||ddr6}||d|| djo||nq+~}n ||d}!dg}"x;|d"r.}|#|d||dqW$||dIJ|&tddo)||t|IJn<+x5|t dd+r,|||IJq4W-|SdS(sprint a CSV record(sjoinsREQUESTsRESPONSEs setHeaders Content-Typesapplication/octet-streamsContent-Dispositionsattachment; filename="%s.csv"sgetIdsContent-Descriptionssuper sPragmasPubliccs t} ||ddd}||dddjp||dddjod|d}n|SdS(s!work around for quotes and commassreplaces"s\"sfinds,iN(s _getattr_s_getattrss(sss _getattr_s_getattr((sScript (Python)s purify_field s 8c st}||dg}x|dr}|d||d}|d||d}|t d||}||d|q-W|dSd S( sprint a CSV recordsgetIdis getPropertysidsgetPropertyTypes stringifysappends,N( s _getattr_s_getattrsosrecsfieldssfso_rsvsvtscontexts purify_fieldsjoin( sosfieldss _getattr_s_getattrsrecsfso_rsvsvtscontexts purify_fieldsjoin(so_rsjoins purify_field(sScript (Python)s make_records !!ishas_keysselected_fieldss get_fieldssidsappendstitles,s hasPropertysabracadabra_is_recordssearch_resultsN(s _getitem_s_getitems _getattr_s_getattrs_print_s_printsstringsjoins containersrequestsRESPONSEscontexts purify_fields make_recordsgetattrsform_idso_formsappends$append0sfieldsfieldssrecsfso_r(sform_ids _getitem_s_getitems _getattr_s_getattrs_print_s_printsstringsjoins containersrequestsRESPONSEscontexts purify_fieldso_rs make_recordsgetattrso_formsappends$append0sfieldsfieldssrecsf((so_rsjoins purify_fieldsScript (Python)s export.csvs*%)  e )!(s export.csv(s export.csv((sScript (Python)ssqAU_bodyqBTfrom string import join request = container.REQUEST RESPONSE = request.RESPONSE RESPONSE.setHeader('Content-Type', 'application/octet-stream') RESPONSE.setHeader('Content-Disposition','attachment; filename="%s.csv"' % context.getId()) RESPONSE.setHeader('Content-Description','super ') #RESPONSE.setHeader('Cache-Control','no-cache') RESPONSE.setHeader('Pragma','Public') #RESPONSE.setHeader('Content-Type', 'application/vnd.ms-excel') def purify_field(s): """work around for quotes and commas""" s = s.replace('"', '\\"') if s.find(',')>=0 or s.find('"')>=0: s = '"' + s + '"' return s def make_record(o, fields): """print a CSV record""" rec = [o.getId()] for f in fields: v = o_r.getProperty(f.id) vt = o_r.getPropertyType(f.id) v = context.stringify(v, vt) rec.append(purify_field(v)) return join(rec,",") o_form = getattr(context, form_id, 0) if request.has_key('selected_fields'): fields = [field for field in o_form.get_fields() if field.id in request['selected_fields']] else: fields = o_form.get_fields() rec = ['id'] for f in fields: rec.append(purify_field(f.title())) print join(rec, ",") if container.hasProperty('abracadabra_is_record'): #already inside a data record #TODO: fix this print make_record(container, fields) else: for o_r in context.search_results(): print make_record(o_r, fields) return printed qCU Script_magicqDKUwarningsqE)UtitleqFUExport result set as CSVqGUerrorsqH)U Python_magicqIU* qJu.I [((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (U _getattr_q U_getattrq Ucontextq U rec_formatq UrecidqUcountqUhasattrqtU co_argcountqKubU_paramsqUUidqUmake_record_idqU__ac_local_roles__q}qUvsbabuq]qUOwnerqasU_dav_writelocksq(UIq(U PersistenceqUPersistentMappingqttQU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq }q!U_asgnsq"}q#(Uname_containerq$U containerq%U name_subpathq&Utraverse_subpathq'U name_m_selfq(Uscriptq)U name_contextq*Ucontextq+usbU func_defaultsq,NU_codeq-T`csdZdS(s we can possibly add additional unique identifiers like userid, ip etc. this, probably should be in a plugin a loop that goes through to exhaust already present id's would be nice too cst}dy |td}Wn d}nX |||tddd} d}xSdoHt|td|od ||f}nP|d}qtW|Sd S( s we can possibly add additional unique identifiers like userid, ip etc. this, probably should be in a plugin a loop that goes through to exhaust already present id's would be nice too srecord_id_formatsrec_%ssZopeTimesstrftimes %Y%m%d%H%M%Siis aq_explicits%s_%dN(s _getattr_s_getattrscontexts rec_formatsrecidscountshasattr(s _getattr_s_getattrscontexts rec_formatsrecidscountshasattr((sScript (Python)smake_record_ids ( N(smake_record_id(smake_record_id((sScript (Python)ssq.U_bodyq/T""" we can possibly add additional unique identifiers like userid, ip etc. this, probably should be in a plugin a loop that goes through to exhaust already present id's would be nice too """ try: rec_format = context.record_id_format except: rec_format = "rec_%s" recid = rec_format % (context.ZopeTime().strftime('%Y%m%d%H%M%S')) count = 0 while 1: if hasattr(context.aq_explicit, recid): recid = "%s_%d" % (recid, count) else: break count = count + 1 return recid q0U Script_magicq1KUwarningsq2)Utitleq3U&Make a unique id for saving the recordq4Uerrorsq5)U Python_magicq6U* q7u.I((UOFS.DTMLMethodqU DTMLMethodqtqNt.}q(U__ac_local_roles__q}qUvsbabuq]qUOwnerq asU__name__q U index_htmlq Utitleq UUglobalsq }qUrawqU< qU_varsq}qu.I Q((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (U_write_q U_writeq U _getitem_q U_getitemq U _getattr_qU_getattrqU containerqUrequestqURESPONSEqUmapqUfieldqUresultsqUcontextqUrtU co_argcountqKubU_paramsqUUidqUsearch_resultsqU__ac_local_roles__q}qUsbabuq]qUOwnerqasU _bind_namesq (cShared.DC.Scripts.Bindings NameAssignments q!oq"}q#U_asgnsq$}q%(Uname_containerq&U containerq'U name_subpathq(Utraverse_subpathq)U name_m_selfq*Uscriptq+U name_contextq,Ucontextq-usbU func_defaultsq.NU_codeq/TcsdZdS(s This simply does a translation to remove field_ prefix from Formulator forms and to return _actual objects_ from Catalog. This is not very efficient, but that is better than saving everything in Catalog meta_data c sWt}t}t}d|td}||d}h}  x||dd rp}  || dddjo/ ||| || || ddsq0U_bodyq1T|""" This simply does a translation to remove field_ prefix from Formulator forms and to return _actual objects_ from Catalog. This is not very efficient, but that is better than saving everything in Catalog meta_data """ request = container.REQUEST RESPONSE = request.RESPONSE map = {} for field in request.keys(): if field.find('field_')==0: #this is a formulator field, make a key without 'field_' map[field[6:]] = request[field] else: map[field] = request[field] results = [] for r in context.Catalog.searchResults(REQUEST=map): results.append(context.Catalog.getobject(r.data_record_id_)) return results q2U Script_magicq3KUwarningsq4)Utitleq5U"Returns query results from Catalogq6Uerrorsq7)U Python_magicq8U* q9u.I((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (UvUvtq U _getattr_q U_getattrq Ustringq UjoinqtU co_argcountqKubU_paramsqUv, vtqUidqU stringifyqU__ac_local_roles__q}qUvsbabuq]qUOwnerqasU_dav_writelocksq(UIq(U PersistenceqUPersistentMappingqttQU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}q U_asgnsq!}q"(Uname_containerq#U containerq$U name_subpathq%Utraverse_subpathq&U name_m_selfq'Uscriptq(U name_contextq)Ucontextq*usbU func_defaultsq+NU_codeq,TcsdZdS(s; v is the value, vt is the meta_type return a text version c st}ddkl}|djo||d}n|djo||dd}n|djod|}n |d jo||d d d }n |Sd S(s; v is the value, vt is the meta_type return a text version (sjoinsliness, sdatesstrftimes%Y-%m-%d %H:%M:%Ssfloats%fstextsreplaces s; N(s _getattr_s_getattrsstringsjoinsvtsv(svsvts _getattr_s_getattrsstringsjoin((sScript (Python)s stringifys #),N(s stringify(s stringify((sScript (Python)ssq-U_bodyq.U""" v is the value, vt is the meta_type return a text version """ from string import join if vt=='lines': v = join(v, ", ") if vt=='date': v = v.strftime('%Y-%m-%d %H:%M:%S') if vt=='float': v = "%f" % v if vt=='text': v = v.replace("\n","; ") return v q/U Script_magicq0KUwarningsq1)Utitleq2U Returns a string version of dataq3Uerrorsq4)U Python_magicq5U* q6u.I((U OFS.ImageqUImageqtqNt.}q(UsizeqKUdataqUGIF89aӽ{{{hhhBBBAAA777 !,u@diDHcb/F纀f g(Ȥ4"rN.4UH,Y)PD @:f4.>M8xK6 Vq@L8V87; <!;qU__ac_local_roles__q}q Uvsbabuq ]q UOwnerq asU__name__q U right.gifqU content_typeqU image/gifqUtitleqU move rightqU preconditionqUUwidthqKUheightqKu.I\((UOFS.DTMLDocumentqU DTMLDocumentqtqNt.}q(U_dav_writelocksq(UIq(U PersistenceqUPersistentMappingqttQU__ac_local_roles__q }q Uvsbabuq ]q UOwnerq asU__name__qUstylesheet.cssqUtitleqUUglobalsq}qUrawqT`body { font-family: verdana, arial, sans-serif; } div.help { font-size: 8pt; color: #393; font-weight: normal; } fieldset { padding: 5px 5px 5px 5px; margin: 5px 5px 5px 5px; border: 1px solid #696; } fieldset legend { float: right; border: 1px solid #696; background-color: #9c9; color: #000; padding: 5px 5px 5px 5px; font-size: 10pt; } .msg { border: 1px solid #39c; background-color: #efefdc; color: #363; padding: 5px 5px 5px 5px; margin: 5px 5px 5px 5px; font-style: italic; } .err { border: 1px solid red; background-color : #ffcccc; width: auto; padding: 5px 0; } .errortext { font: bold smaller sans-serif; } ol#navigator { margin: 0 0 0 0; padding: 0 0 0 0; font-size: 80%; } ol#navigator li { margin: 0 0 0 0; padding: 0 0 0 0; whitespace: nowrap; } ol#navigator li a { text-decoration: none; } input { border: 1px solid gray; } input.button { background-color: silver; } ul#navigator-toolbar { font-size: 8pt; margin: 0 0 0 0; padding: 0 0 0 0; } ul#navigator-toolbar li { border-bottom: 1px solid gray; text-align: left; } table.datatable, table.datatable tr { font-size: xx-small; border: 1px solid gray; padding: 0 0 0 0; } table.datatable td, table.datatable th { border-bottom: 1px solid gray; border-right: 1px solid gray; margin: 0 0 0 0; padding: 0 2px 0 2px; } tr.row-header, tr.row-header th, tr.row-header td { background-color: #6fc; } tr.row-data-odd, tr.row-data-odd th, tr.row-data-odd td { background-color: #cfc; } tr.row-data-even, tr.row-data-even th, tr.row-data-even td { background-color: #9c9; } qU_varsq}qu.I3((U'Products.PageTemplates.ZopePageTemplateqUZopePageTemplateqtqNt.}q(U_dav_writelocksq(UJq(U PersistenceqUPersistentMappingqttQUexpandq KUidq Udeprecated_index_htmlq U__ac_local_roles__q }q Uvsbabuq]qUOwnerqasU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qo}qU_asgnsq}qU name_subpathqUtraverse_subpathqssbU_textqT The title qU content_typeqU text/htmlqUtitleqUFormsqu.I3((UOFS.DTMLDocumentqU DTMLDocumentqtqNt.}q(U__ac_local_roles__q}qUvsbabuq]qUOwnerq asU__name__q U00readmeq Utitleq UUglobalsq }qUrawqTAuthor:: sbabu@home ----------------------- Needs latest version of Formulator Go to "skills" for a sample database/form. To use: ======================= 1. Create a folder to hold your form and data records If you have preference on how to name your data records, create a string property named `record_id_format` with valie prefix_%s_suffix - %s will be replaced with current time. If you want to change the logic for the entire thing, create a new script with id `make_record_id` 2. Create a Formulator object with id `form` inside that - Go to "Settings" tab and add `check_form` as the form processor. 3. Add fields and groups as you please. Note that first field in the first group is considered the title of data record. 4. Click on view -> add few records Bugs: ======================== 1. Probably plenty :-) 2. Catalog update has a bug in that it creates an empty entry qU_varsq}qu.I ((U'Products.PageTemplates.ZopePageTemplateqUZopePageTemplateqtqNt.}q(U_dav_writelocksq(UIq(U PersistenceqUPersistentMappingqttQUexpandq KUidq U export.xmlq U__ac_local_roles__q }q Uvsbabuq]qUOwnerqasU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qo}qU_asgnsq}qU name_subpathqUtraverse_subpathqssbU_textqTC en-us vsb
qU content_typeqU text/htmlqUtitleqUExport result set as XMLqu.I ((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (Urecidsq U _getattr_q U_getattrq U containerq UrequestqURESPONSEqUcountqUridqUcontextqUNoneqtU co_argcountqKubU_paramsqU recids=[]qUidqUrecords_removeqU__ac_local_roles__q}qUvsbabuq]qUOwnerqasU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq }q!U_asgnsq"}q#(Uname_containerq$U containerq%U name_subpathq&Utraverse_subpathq'U name_m_selfq(Uscriptq)U name_contextq*Ucontextq+usbU func_defaultsq,(]q-tq.U_codeq/TcsgdZdS(Nc s5t}|td}||d}d}xT|drG}|d}y#||tdd|Wn  nXq?W| td| |t j ow |djo ||dd Sn|td d o||dd Sn||dd SndSdS(NsREQUESTsRESPONSEiisCatalogsuncatalog_objectsmanage_delObjectssredirects#index_html?msg=no+records+specifieds hasPropertysabracadabra_is_records ../index_html?msg=record+deletedsindex_html?msg=record+deleted( s _getattr_s_getattrs containersrequestsRESPONSEscountsrecidssridscontextsNone( srecidss _getattr_s_getattrs containersrequestsRESPONSEscountsridscontextsNone((sScript (Python)srecords_removes    (srecords_remove(srecords_remove((sScript (Python)ssq0U_bodyq1T1request = container.REQUEST RESPONSE = request.RESPONSE count=0 for rid in recids: count = count + 1 try: context.Catalog.uncatalog_object(rid) except: pass context.manage_delObjects(recids) if request is not None: if count==0: return RESPONSE.redirect('index_html?msg=no+records+specified') if context.hasProperty('abracadabra_is_record'): return RESPONSE.redirect('../index_html?msg=record+deleted') else: return RESPONSE.redirect('index_html?msg=record+deleted') else: return 1 q2U Script_magicq3KUwarningsq4)Utitleq5URemove recordsq6Uerrorsq7)U Python_magicq8U* q9u.IY((U OFS.ImageqUImageqtqNt.}q(UsizeqK]UdataqU]GIF89afff!,.i>ě-0 ƅ"*J:gՖ8lT?b;qU__ac_local_roles__q}q Uvsbabuq ]q UOwnerq asU__name__q Uup.gifqU content_typeqU image/gifqUtitleqU(E:\zopemy\Products\Newsletter\www\up.gifqU preconditionqUUwidthqKUheightqKu.I((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (Uform_idq U_write_q U_writeq U _getitem_q U_getitemqU _getattr_qU_getattrqU containerqUrequestqURESPONSEqUstringqUjoinqUcontextqUmeta_types_property_mappingqU property_mapqUgetattrqUo_formqUNoneqUr_titleqUfieldqU request_fieldqUvtqUrecq Ucook_idq!Ukeyq"tU co_argcountq#KubU_paramsq$Uform_id='form'q%Uidq&U process_formq'U__ac_local_roles__q(}q)Uvsbabuq*]q+UOwnerq,asU_dav_writelocksq-(UJq.(U Persistenceq/UPersistentMappingq0ttQU _bind_namesq1(cShared.DC.Scripts.Bindings NameAssignments q2oq3}q4U_asgnsq5}q6(Uname_containerq7U containerq8U name_subpathq9Utraverse_subpathq:U name_m_selfq;UscriptqusbU func_defaultsq?(Uformq@tqAU_codeqBT csddZdS(s Save the form as appropriate abracadabra_is_record is a property used to denote if the folder is a record - hopefully, no one will name a form field like that. TODO: define this property_name as a property... sformc!st}t}t}d |td} ||d}  dk l } |t d} hddfd<}tt |d}t}xU||d dr<}d ||d }|| ||d }|||d jo/||||f||||d sqCU _proxy_rolesqD(UManagerqEtqFU_bodyqGT""" Save the form as appropriate abracadabra_is_record is a property used to denote if the folder is a record - hopefully, no one will name a form field like that. TODO: define this property_name as a property... """ request = container.REQUEST RESPONSE = request.RESPONSE from string import join meta_types_property_mapping = context.formulator_to_storage_metatypes() #make a template object from form #update contents into that #and put the first field as title property_map = {'abracadabra_is_record':('boolean',1)} o_form = getattr(context, form_id, 0) r_title = None for field in o_form.get_fields(): request_field = 'field_' + field.id vt = meta_types_property_mapping[field.meta_type] if request_field in request.keys(): property_map[field.id] = (vt, request[request_field]) else: if 'lines' == vt: property_map[field.id] = (vt, []) else: property_map[field.id] = (vt, None) if r_title is None: r_title = context.stringify(property_map[field.id][1], property_map[field.id][0]) #now, we need to check if we are in a record folder #if so, this means we are trying to update a 'record'. In that case, #simply update the properties of the current folder. if context.aq_explicit.hasProperty('abracadabra_is_record'): rec = context rec.manage_editProperties({'title':r_title}) cook_id = '' else: cook_id = context.make_record_id() context.manage_addFolder(cook_id, r_title) rec = context[cook_id] for key in property_map.keys(): if rec.hasProperty(key): rec.manage_delProperties([key]) #Zope doesn't have updateOneProperty; Instead of updating whole property sheet #easier to delete the property and let it get added. rec.manage_addProperty(id=key, type=property_map[key][0], value=property_map[key][1]) #cataloging while update-save doesn't work try: context.Catalog.uncatalog_object(cook_id) except: pass try: context.Catalog.catalog_object(rec,cook_id) except: pass return cook_id qHU Script_magicqIKUwarningsqJ)UtitleqKU Process formqLUerrorsqM)U Python_magicqNU* qOu.I((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq (Uform_idq U_write_q U_writeq U _getattr_q U_getattrqUProducts.Formulator.FormqUFormValidationErrorqUcontextqUreqqUerrorqU formErrorsqUgetattrqUo_formqUo_pageqUeUiUtitleqUtextqUNoneqUsavedqtU co_argcountqKubU_paramsqUform_id='form'qUidqU check_formq U__ac_local_roles__q!}q"Uvsbabuq#]q$UOwnerq%asU_dav_writelocksq&(UJq'(U Persistenceq(UPersistentMappingq)ttQU _bind_namesq*(cShared.DC.Scripts.Bindings NameAssignments q+oq,}q-U_asgnsq.}q/(Uname_containerq0U containerq1U name_subpathq2Utraverse_subpathq3U name_m_selfq4Uscriptq5U name_contextq6Ucontextq7usbU func_defaultsq8(Uformq9tq:U_codeq;TcsddZdS(s This form checks request data against a formulator object. If there are no errors, it calls process() TODO: If errors, return so that formulator can display those sformc st}t}ddkl} |td} d}  h}  t t|d} t tdd} y|| d|Wn|j o}xz||ddrd}|||dd d }||d }||f|| |||dd sqU Script_magicq?KUwarningsq@)UtitleqAUCheck a form and pass onqBUerrorsqC)U Python_magicqDU* qEu.I((U OFS.ImageqUImageqtqNt.}q(UsizeqM2UdataqT2GIF89a  }v:{{9zz?yyMyyFxx2ssEss1rr>rr7gg0ff3ee/``bb``__#]]XXTTRRDD@@22!,-A.)+5  8!'6 , :# GKG"$4IKI;%@K@&3K9(E*2՞70JD1C H/F<  8;qU__ac_local_roles__q}q Usbabuq ]q UOwnerq asU__name__q U info_iconqU content_typeqU image/gifqUtitleqU InformationqU preconditionqUUwidthqKUheightqKu.Iw((U OFS.FolderqUFolderqtqNt.}q(UidqUskillsqU__ac_local_roles__q}qUvsbabuq ]q UOwnerq asU_objectsq (}q (U meta_typeqUFormulator FormqhUformqu}q(U meta_typeqUZCatalogqUidqUCatalogqu}q(U meta_typeqUFolderqUidqUrec_20040404162229qu}q(hhhUrec_20040404162240qutU _propertiesq(}q(hUtitleqUmodeq UwUtypeq!Ustringq"u}q#(Uidq$Urecord_id_formatq%Utypeq&Ustringq'uth(UKq((hUFolderq)ttQh(UJ q*(UProducts.ZCatalog.ZCatalogq+UZCatalogq,ttQh%Urec_%sq-h(UKq.(hUFolderq/ttQhUSkills Databaseq0Uformq1(UJq2(UProducts.Formulator.Formq3UZMIFormq4ttQu.I ((U#Products.PythonScripts.PythonScriptqU PythonScriptqtqNt.}q(U func_codeq(cShared.DC.Scripts.Signature FuncCode qoq}q(U co_varnamesq )U co_argcountq KubU_paramsq UUidq Uformulator_to_storage_metatypesq U__ac_local_roles__q}qUvsbabuq]qUOwnerqasU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqU name_contextqUcontextq usbU func_defaultsq!NU_codeq"TcsdZdS(s Formulator supports many different field types; This maps those field types to Storage's (in this case, ZODB) property types. csdhdd<dd<dd<dd<dd<d d <d d <dd <d d<d d<d d<dd<dd<dd<dd<dd<ddsq#U_bodyq$To""" Formulator supports many different field types; This maps those field types to Storage's (in this case, ZODB) property types. """ return { 'CheckBoxField':'string', 'DateTimeField':'date', 'EmailField':'string', 'FileField':'string', 'FloatField':'float', 'IntegerField':'int', 'LinesField':'lines', 'LinkField':'string', 'ListField':'lines', 'MultiCheckBoxField':'lines', 'MultiListField':'lines', 'PasswordField':'string', 'PatternField':'string', 'RadioField':'string', 'RawTextAreaField':'text', 'StringField':'string', 'TextAreaField':'text', } q%U Script_magicq&KUwarningsq')Utitleq(U#Simply a mapping between data typesq)Uerrorsq*)U Python_magicq+U* q,u.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.JB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.JB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.JB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.IB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.JB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.JB((U PersistenceqUPersistentMappingqtqNt.}qU _containerq}qs.K+((U OFS.FolderqUFolderqtqNt.}q(U personal_siteqUUidqUrec_20040404162229qU__ac_local_roles__q}q Uvsbabuq ]q UOwnerq asUoperating_systemsq ]q(UWindowsqUSolarisqeUprogramming_languagesq]q(UC#qUVBScriptqeU _propertiesq(}q(hUtitleqUmodeqUwUtypeqUstringqu}q(hhhhu}q(hUemailqhhu}q(hUtoolsqhUlinesq u}q!(hh hh u}q"(hhhh u}q#(hUemp_nameq$hhu}q%(hUabracadabra_is_recordq&hUbooleanq'u}q((hU interestsq)hh uth$U George W Bushq*Uemailq+U bush@war.comq,hh*h&KUtoolsq-]q.h)]q/U Maintenanceq0au.J ((UProducts.ZCatalog.ZCatalogqUZCatalogqtqNt.}q(UidqUCatalogqU__ac_local_roles__q}qUvsbabuq ]q UOwnerq asU_catalogq (UJ&q (UProducts.ZCatalog.CatalogqUCatalogqtqtqQUvocab_idqUU vocabularyqNUtitleqUU thresholdqM'u.K:((U OFS.FolderqUFolderqtqNt.}q(U personal_siteqUUidqUrec_20040404162240qU__ac_local_roles__q}q Uvsbabuq ]q UOwnerq asUoperating_systemsq ]q(ULinuxqUSolarisqeUprogramming_languagesq]q(UC++qUC#qUJavaqUVBScriptqeU _propertiesq(}q(hUtitleqUmodeqUwUtypeqUstringqu}q(UidqhUtypeqUstringq u}q!(hUemailq"hh u}q#(hUtoolsq$hUlinesq%u}q&(hh hh%u}q'(hhhh%u}q((hUemp_nameq)hh u}q*(hUabracadabra_is_recordq+hUbooleanq,u}q-(hU interestsq.hh%uth)U Tony Blairq/h"U blair@war.comq0hh/h+Kh$]q1h.]q2U Maintenanceq3au.J<((UProducts.Formulator.FormqUZMIFormqtqNt.}q(UenctypeqUUidqUformqU__ac_local_roles__q}q Uvsbabuq ]q UOwnerq asU personal_siteq (UJ'q(U"Products.Formulator.StandardFieldsqU LinkFieldqtqtqQUprogramming_languagesq(UJ(q(hUMultiCheckBoxFieldqtqtqQU_objectsq(}q(U meta_typeqU LinkFieldqUidqh u}q(hUMultiCheckBoxFieldqhU interestsqu}q (U meta_typeq!U StringFieldq"Uidq#Uemp_nameq$u}q%(U meta_typeq&UMultiCheckBoxFieldq'Uidq(Uoperating_systemsq)u}q*(h&h'h(hu}q+(U meta_typeq,UMultiCheckBoxFieldq-Uidq.Utoolsq/u}q0(U meta_typeq1U EmailFieldq2Uidq3Uemailq4utUactionq5U check_formq6Ugroupsq7}q8(U About Youq9]q:(h$h4h heU Your Skillsq;]q<(h)hh/euh$(UJ)q=(hU StringFieldq>tq?tq@QUmethodqAUPOSTqBh(UJ-qC(hUMultiCheckBoxFieldqDtqEtqFQU group_listqG]qH(h9h;eUoperating_systemsqI(UJ,qJ(hUMultiCheckBoxFieldqKtqLtqMQUemailqN(UJ+qO(hU EmailFieldqPtqQtqRQU row_lengthqSKUnameqTUformqUUtitleqVUEmployee SkillsqWUtoolsqX(UJ*qY(hUMultiCheckBoxFieldqZtq[tq\QUencodingq]UUTF-8q^u.J&7((UProducts.ZCatalog.CatalogqUCatalogqtqNt.}q(Uschemaq}qU__len__q(UJ_q(U BTrees.Lengthq ULengthq tq tq QUdataq (UJ`q(UBTrees._IOBTreeqUIOBTreeqtqtqQUnamesq)Uindexesq}q(U personal_siteq(UJaq(U*Products.PluginIndexes.TextIndex.TextIndexqU TextIndexqtqtqQUemailq(UJbq(U,Products.PluginIndexes.FieldIndex.FieldIndexqU FieldIndexqtq tq!QUtoolsq"(UJcq#(U0Products.PluginIndexes.KeywordIndex.KeywordIndexq$U KeywordIndexq%tq&tq'QUoperating_systemsq((UJdq)(h$U KeywordIndexq*tq+tq,QUprogramming_languagesq-(UJeq.(h$U KeywordIndexq/tq0tq1QUemp_nameq2(UJfq3(hU TextIndexq4tq5tq6QU interestsq7(UJgq8(h$U KeywordIndexq9tq:tq;QuUuidsq<(UJhq=(UBTrees.OIBTreeq>UOIBTreeq?tq@tqAQUpathsqB(UJiqC(hUIOBTreeqDtqEtqFQu.J'r((U"Products.Formulator.StandardFieldsqU LinkFieldqtqNt.}q(Umessage_valuesq}q(Urequired_not_foundqU%Input is required but no input given.qUnot_linkq UThe specified link is broken.q Uexternal_validator_failedq U(The input failed the external validator.q Utoo_longq UToo much input was given.quUidqU personal_siteqUvaluesq}q(U link_typeqUexternalqUhiddenqKU display_widthqK(UunicodeqKU css_classqUU check_timeoutqG@U max_lengthqUUalternate_nameqUUexternal_validatorqUUdisplay_maxwidthqUUrequiredqKUwhitespace_preserveqKUdefaultq UUtitleq!U Personal Siteq"Utruncateq#KU descriptionq$UDo you have a personal site?q%U check_linkq&KUextraq'UuU overridesq(}q)(hUhUhUhUhUhUhUhUhUhUh$Uh&Uh Uh!Uh#UhUhUh'UuUtalesq*}q+(hUhUhUhUhUhUhUhUhUhUh$Uh&Uh Uh!Uh#UhUhUh'Uuu.J(((U"Products.Formulator.StandardFieldsqUMultiCheckBoxFieldqtqNt.}q(Umessage_valuesq}q(Urequired_not_foundqU%Input is required but no input given.qUexternal_validator_failedq U(The input failed the external validator.q Uunknown_selectionq U.You selected an item that was not in the list.q uUidq Uprogramming_languagesqUvaluesq}q(Ualternate_nameqUUhiddenqKUunicodeqKU css_classqUUview_separatorqU
qUexternal_validatorqUUrequiredqKUitemsq]q((UCUCt(UC++qUC++qt(UC#qUC#qt(UJavaqUJavaq t(UVBScriptq!UVBScriptq"t(UPerlq#UPerlq$t(UPHPq%UPHPq&t(UPythonq'UPythonq(t(URubyq)URubyq*t(URebolq+URebolq,t(USQLq-USQLq.teUdefaultq/]q0Utitleq1UProgramming Languagesq2U descriptionq3U4What programming languages are you comfortable with?q4U orientationq5Uverticalq6uU overridesq7}q8(hUhUhUhUhUh5UhUhUh/Uh1Uh3UhUuUtalesq9}q:(hUhUhUhUhUh5UhUhUh/Uh1Uh3UhUuu.J)((U"Products.Formulator.StandardFieldsqU StringFieldqtqNt.}q(Umessage_valuesq}q(Urequired_not_foundqU%Input is required but no input given.qUexternal_validator_failedq U(The input failed the external validator.q Utoo_longq UToo much input was given.q uUidq Uemp_nameqUvaluesq}q(Ualternate_nameqUUhiddenqKU display_widthqKUunicodeqKU max_lengthqKdUexternal_validatorqUUdisplay_maxwidthqUUrequiredqKU css_classqUUdefaultqUUtitleqUNameqUtruncateqKU descriptionqU+Your full name, as First Middle Last SuffixqUwhitespace_preserveq KUextraq!UuU overridesq"}q#(hUhUhUhUhUhUhUhUhUhUhUhUhUh Uh!UuUtalesq$}q%(hUhUhUhUhUhUhUhUhUhUhUhUhUh Uh!Uuu.J-((U"Products.Formulator.StandardFieldsqUMultiCheckBoxFieldqtqNt.}q(Umessage_valuesq}q(Urequired_not_foundqU%Input is required but no input given.qUexternal_validator_failedq U(The input failed the external validator.q Uunknown_selectionq U.You selected an item that was not in the list.q uUidq U interestsqUvaluesq}q(Ualternate_nameqUUhiddenqKUunicodeqKU css_classqUUview_separatorqU
qUexternal_validatorqUUrequiredqKUitemsq]q((U MaintenanceqU Maintenanceqt(U ScriptingqU ScriptingqteUdefaultq]q Utitleq!U Interestsq"U descriptionq#U!What are your personal interests?q$U orientationq%U horizontalq&uU overridesq'}q((hUhUhUhUhUh%UhUhUhUh!Uh#UhUuUtalesq)}q*(hUhUhUhUhUh%UhUhUhUh!Uh#UhUuu.J,q((U"Products.Formulator.StandardFieldsqUMultiCheckBoxFieldqtqNt.}q(Umessage_valuesq}q(Urequired_not_foundqU%Input is required but no input given.qUexternal_validator_failedq U(The input failed the external validator.q Uunknown_selectionq U.You selected an item that was not in the list.q uUidq Uoperating_systemsqUvaluesq}q(Ualternate_nameqUUhiddenqKUunicodeqKUitemsq]q((UWindowsqUWindowsqt(ULinuxqULinuxqt(UHP-UXqUHP-UXqt(USolarisqUSolarisqt(UBSDqUBSDqt(UMac 9q UMac 9q!t(UOSXq"UOSXq#teUview_separatorq$U
q%Uexternal_validatorq&UUrequiredq'KU css_classq(UUdefaultq)]q*Utitleq+UOperating Systemsq,U descriptionq-U#Choose all OS you are familiar withq.U orientationq/U horizontalq0uU overridesq1}q2(hUhUhUhUh$Uh/Uh'Uh(Uh)Uh+Uh-Uh&UuUtalesq3}q4(hUhUhUhUh$Uh/Uh'Uh(Uh)Uh+Uh-Uh&Uuu.J+((U"Products.Formulator.StandardFieldsqU EmailFieldqtqNt.}q(Umessage_valuesq}q(U not_emailqU#You did not enter an email address.qUrequired_not_foundq U%Input is required but no input given.q Uexternal_validator_failedq U(The input failed the external validator.q Utoo_longq UToo much input was given.quUidqUemailqUvaluesq}q(Ualternate_nameqUUhiddenqKU display_widthqKUunicodeqKU max_lengthqUUexternal_validatorqUUdisplay_maxwidthqUUrequiredqKU css_classqUUdefaultqUUtitleqUE-mailqUtruncateqKU descriptionq UUwhitespace_preserveq!KUextraq"UuU overridesq#}q$(hUhUhUhUhUhUhUhUhUhUhUhUh Uh!Uh"UuUtalesq%}q&(hUhUhUhUhUhUhUhUhUhUhUhUh Uh!Uh"Uuu.J*F((U"Products.Formulator.StandardFieldsqUMultiCheckBoxFieldqtqNt.}q(Umessage_valuesq}q(Urequired_not_foundqU%Input is required but no input given.qUexternal_validator_failedq U(The input failed the external validator.q Uunknown_selectionq U.You selected an item that was not in the list.q uUidq UtoolsqUvaluesq}q(Ualternate_nameqUUhiddenqKUunicodeqKU css_classqUUview_separatorqU
qUexternal_validatorqUU orientationqUverticalqUrequiredqKUitemsq]q((UMS Project 2000+qht(UOracle Designerqht(UOracle Developerqht(U Unix Toolsq h t(UMS Excelq!h!t(U MS Accessq"h"teUdefaultq#]q$Utitleq%UToolsq&U descriptionq'U$What tools are you comfortable with?q(uU overridesq)}q*(hUhUhUhUhUhUhUhUh#Uh%Uh'UhUuUtalesq+}q,(hUhUhUhUhUhUhUhUh#Uh%Uh'UhUuu.J_&((U BTrees.LengthqULengthqtqNt.K.J`=((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[)J([)ttttq.Ja((U*Products.PluginIndexes.TextIndex.TextIndexqU TextIndexqtqNt.}q(UidqU personal_siteqU_lexiconq(UJq(U(Products.PluginIndexes.TextIndex.Lexiconq ULexiconq tq tq QU useOperatorq UorqU call_methodsqNU ignore_exqNU_unindexq(UJq(UBTrees._IOBTreeqUIOBTreeqtqtqQUcatalogq(UJ q(UProducts.ZCatalog.ZCatalogqUZCatalogqttqQU vocabulary_idqU __intern__qU_indexq(UJq(hUIOBTreeq tq!tq"Qu.Jb((U,Products.PluginIndexes.FieldIndex.FieldIndexqU FieldIndexqtqNt.}q(U__len__q(UJq(U BTrees.LengthqULengthqtq tq QUidq Uemailq U_indexq (UJq(UBTrees.OOBTreeqUOOBTreeqtqtqQU useOperatorqUorqU call_methodsqNU ignore_exq(UJ q(UProducts.ZCatalog.ZCatalogqUZCatalogqttqQU operatorsq]q(hUandqeU_unindexq(UJq(UBTrees._IOBTreeq UIOBTreeq!tq"tq#Qu.Jc((U0Products.PluginIndexes.KeywordIndex.KeywordIndexqU KeywordIndexqtqNt.}q(U__len__q(UJq(U BTrees.LengthqULengthqtq tq QUidq Utoolsq U_indexq (UJq(UBTrees.OOBTreeqUOOBTreeqtqtqQU useOperatorqUorqU call_methodsqNU ignore_exq(UJ q(UProducts.ZCatalog.ZCatalogqUZCatalogqttqQU operatorsq]q(hUandqeU_unindexq(UJq(UBTrees._IOBTreeq UIOBTreeq!tq"tq#Qu.Jd((U0Products.PluginIndexes.KeywordIndex.KeywordIndexqU KeywordIndexqtqNt.}q(U__len__q(UJq(U BTrees.LengthqULengthqtq tq QUidq Uoperating_systemsq U_indexq (UJq(UBTrees.OOBTreeqUOOBTreeqtqtqQU useOperatorqUorqU call_methodsqNU ignore_exq(UJ q(UProducts.ZCatalog.ZCatalogqUZCatalogqttqQU operatorsq]q(hUandqeU_unindexq(UJq(UBTrees._IOBTreeq UIOBTreeq!tq"tq#Qu.Je((U0Products.PluginIndexes.KeywordIndex.KeywordIndexqU KeywordIndexqtqNt.}q(U__len__q(UJq(U BTrees.LengthqULengthqtq tq QUidq Uprogramming_languagesq U_indexq (UJq(UBTrees.OOBTreeqUOOBTreeqtqtqQU useOperatorqUorqU call_methodsqNU ignore_exq(UJ q(UProducts.ZCatalog.ZCatalogqUZCatalogqttqQU operatorsq]q(hUandqeU_unindexq(UJq(UBTrees._IOBTreeq UIOBTreeq!tq"tq#Qu.Jf((U*Products.PluginIndexes.TextIndex.TextIndexqU TextIndexqtqNt.}q(UidqUemp_nameqU_lexiconq(UJq(U(Products.PluginIndexes.TextIndex.Lexiconq ULexiconq tq tq QU useOperatorq UorqU call_methodsqNU ignore_exqNU_unindexq(UJq(UBTrees._IOBTreeqUIOBTreeqtqtqQUcatalogq(UJ q(UProducts.ZCatalog.ZCatalogqUZCatalogqttqQU vocabulary_idqU __intern__qU_indexq(UJq(hUIOBTreeq tq!tq"Qu.Jg((U0Products.PluginIndexes.KeywordIndex.KeywordIndexqU KeywordIndexqtqNt.}q(U__len__q(UJq(U BTrees.LengthqULengthqtq tq QUidq U interestsq U_indexq (UJq(UBTrees.OOBTreeqUOOBTreeqtqtqQU useOperatorqUorqU call_methodsqNU ignore_exq(UJ q(UProducts.ZCatalog.ZCatalogqUZCatalogqttqQU operatorsq]q(hUandqeU_unindexq(UJq(UBTrees._IOBTreeq UIOBTreeq!tq"tq#Qu.Jhf((UBTrees.OIBTreeqUOIBTreeqtqNt.((((Urec_20040404162229qJ'[Urec_20040404162240qJ([ttttq.Jig((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[Urec_20040404162229qJ([Urec_20040404162240qttttq.Jj((U(Products.PluginIndexes.TextIndex.LexiconqULexiconqtqNt.}q(U useSplitterqU ZopeSplitterqU SplitterFuncqcProducts.PluginIndexes.TextIndex.Splitter.ZopeSplitter.ZopeSplitter ZopeSplitter qUsplitterParamsq NU _inverseLexq (UJq (UBTrees._IOBTreeq UIOBTreeq tqtqQU_lexiconq(UJq(UBTrees.OIBTreeqUOIBTreeqtqtqQUstop_synq}qu.J'((UBTrees.IOBTreeqUIOBTreeqtqNt.N.J'((UBTrees.IOBTreeqUIOBTreeqtqNt.N.J&((U BTrees.LengthqULengthqtqNt.K.Jq((UBTrees.OOBTreeqUOOBTreeqtqNt.((((U bush@war.comq(ULq(UBTrees._IIBTreeqU IITreeSetqttQttttq.J[((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[U bush@war.comqJ([U bush@war.comqttttq.J&((U BTrees.LengthqULengthqtqNt.K.J'((UBTrees.OOBTreeqUOOBTreeqtqNt.N.JA((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[]qJ([]qttttq.J&((U BTrees.LengthqULengthqtqNt.K.J((UBTrees.OOBTreeqUOOBTreeqtqNt.((((USolarisq(ULq(UBTrees._IIBTreeqU IITreeSetqttQUWindowsq(UKq (hU IITreeSetq ttQttttq .Jq((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[]q(UWindowsqUSolarisqeJ([]q(UWindowsqUSolarisq ettttq .J&((U BTrees.LengthqULengthqtqNt.K.J((UBTrees.OOBTreeqUOOBTreeqtqNt.((((UC#q(ULq(UBTrees._IIBTreeqU IITreeSetqttQUVBScriptq(ULq (hU IITreeSetq ttQttttq .Ji((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[]q(UC#qUVBScriptqeJ([]q(UC#qUVBScriptq ettttq .Jj((U(Products.PluginIndexes.TextIndex.LexiconqULexiconqtqNt.}q(U useSplitterqU ZopeSplitterqU SplitterFuncqcProducts.PluginIndexes.TextIndex.Splitter.ZopeSplitter.ZopeSplitter ZopeSplitter qUsplitterParamsq NU _inverseLexq (UKq (UBTrees._IOBTreeq UIOBTreeq tqtqQU_lexiconq(UKq(UBTrees.OIBTreeqUOIBTreeqtqtqQUstop_synq}qu.JY((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[]q(J#^J=[eJ([]q(J#^J=[ettttq.Ja((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J#^}q(J'[KJ([KuJ=[}q(J'[KJ([Kuttttq.J&((U BTrees.LengthqULengthqtqNt.K.Jp((UBTrees.OOBTreeqUOOBTreeqtqNt.((((U Maintenanceq(UKq(UBTrees._IIBTreeqU IITreeSetqttQttttq.Ja((UBTrees._IOBTreeqUIOBTreeqtqNt.((((J'[]qU MaintenanceqaJ([]qU Maintenanceqattttq.J((UBTrees._IOBTreeqUIOBTreeqtqNt.((((JUcomqJHUhttpqJ;g UporkingqJd0Uorg/qJLVU//wwwqJN|iU//vsbabuq ttttq .J((UBTrees.OIBTreeqUOIBTreeqtqNt.((((U//vsbabuqJN|iU//wwwqJLVUcomqJUhttpqJHUorg/qJd0Uporkingq J;g ttttq .L=((UBTrees._IIBTreeqU IITreeSetqtqNt.((((J'[J([ttttq.L=((UBTrees._IIBTreeqU IITreeSetqtqNt.((((J'[J([ttttq.K=((UBTrees._IIBTreeqU IITreeSetqtqNt.((((J'[J([ttttq.L=((UBTrees._IIBTreeqU IITreeSetqtqNt.((((J'[J([ttttq.L=((UBTrees._IIBTreeqU IITreeSetqtqNt.((((J'[J([ttttq.K((UBTrees._IOBTreeqUIOBTreeqtqNt.((((JNUaliqJ\UmaryqJ UcheeksqJUnyceqJע6UbabuqJIUerikqJ0MUmitziqJOUpillaiqJmWUparedesqJ=[UgeorgeqJXY]UnadiaqJjgUwithrowqJoUblairqJ"tUcoffmanqttttq .K((UBTrees.OIBTreeqUOIBTreeqtqNt.((((U agnihotriqJ@UaliqJNUanjaliqJUparedesqJmWUpillaiqJOUreneeqJIUshibuqJaNUtonyqJdBUtorvaldsqJRU vattekkatqJEUwithrowqJjgttttq .K=((UBTrees._IIBTreeqU IITreeSetqtqNt.((((J'[J([ttttq.