source: publico/SDE/trunk/StrDocElem.py @ 809

Última Alteração nesse arquivo desde 809 foi 809, incluída por ciciliati, 14 anos atrás

Versão 1.0: Alterados os meta-types das classes!!!
Esta versão foi desenvolvida com base na versão 0.0.2.
Faltam, portanto, as implementações da v. 0.0.3.
Fazer um diff(v002,v003) e aplicar sobre a v100.

File size: 11.9 KB
Linha 
1# -*- coding: iso-8859-1 -*-
2
3"""
4from OFS.SimpleItem import SimpleItem
5from Globals import Persistent
6from Acquisition import Implicit
7"""
8from OFS.OrderedFolder import OrderedFolder
9from Products.ZCatalog.CatalogAwareness import CatalogAware
10from OFS.ObjectManager import ObjectManager
11from OFS.PropertyManager import PropertyManager
12import string
13
14def StrDocElem_addForm(self, REQUEST):
15    "HTML para adicionar um novo objeto StrDocElem"
16    return """
17<HTML>
18<HEAD><TITLE>Add StrDocElement</TITLE></HEAD>
19<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">
20<H2>Add StrDocElement</H2>
21<form action="StrDocElem_add"><table>
22<tr><th>Id</th>
23    <td><input type=text name=id value="Automatic assignment" disabled=true></td>
24</tr>
25<tr><th>Type</th>
26    <td><input type=text name=type></td>
27</tr>
28<tr><td></td><td><input type=submit value=" Add "></td></tr>
29</table></form>
30</body></html>
31"""
32
33def StrDocElem_add(self,REQUEST):
34    "Método para adicionar um objeto StrDocElem"
35    request = REQUEST
36    RESPONSE =  request.RESPONSE
37    temp_id = self.newElemId()
38    request.set('id',temp_id)
39    instance = StrDocElem(request)
40    instance.reindex_object()
41    self._setObject(request.id,instance)
42    instance=getattr(self.this(),request.id)
43    defelem = ""
44    if request.has_key('type'):
45        instance.manage_changeProperties(type=request.type)
46        defelem=instance.definitionElement(obj=instance)
47        for p in defelem.objectValues('SDE-Template-Attribute'):
48            instance.manage_addProperty(id='@'+p.id+'@', value='', type='string')
49    if request.has_key('position'):
50        offset = request.position
51    else:
52        offset = 0
53    self.manage_move_objects_to_top (request, temp_id)
54    if offset > 0:
55        self.manage_move_objects_down (request, temp_id, offset)
56    if hasattr(defelem,"initial_text"):
57        if defelem.initial_text != "":
58            instance.manage_changeProperties(text=defelem.initial_text)
59    if 'SDE_AfterInsert' in defelem.objectIds('Script (Python)'):
60        defelem.SDE_AfterInsert(instance)
61    return instance
62
63class StrDocElem(OrderedFolder,CatalogAware,ObjectManager,PropertyManager):
64    "Classe de elementos de documentos estruturados"
65    meta_type = 'SDE-Document-Element'
66    filtered_meta_types = []
67
68    def __init__(self,REQUEST):
69        self.id = REQUEST.id
70        self._setProperty("type",'')
71        self._setProperty("text",'')
72
73    # *** attributes
74    def attributes(self):
75        defelem = self.definitionElement(obj=self)
76        attr = []
77        for a in self.propertyItems():
78            if ((a[0][0] == '@') and (a[0][-1] == '@')):
79                attr_id = a[0][1:-1]
80                try:
81                    attr_name = defelem[attr_id].name()
82                except:
83                    attr_name = attr_id
84                attr.append (list ((attr_id,a[1],attr_name)))
85        return attr
86
87    # *** definitionPath
88    def definitionPath (self,absolute=0):
89        return self.parent().definitionPath(absolute) + "/" + self.type
90
91    # *** getAttribute
92    def getAttribute (self,attribute=''):
93        return self.getProperty('@'+attribute+'@','')
94
95    # *** has_own_value
96    def has_own_value(self):
97        defelem = self.definitionElement(obj=self)
98        if hasattr(defelem, "has_own_value"):
99            return defelem.has_own_value
100        else:
101            return ""
102
103    # *** manage_beforeDelete (EVENT)
104    def manage_beforeDelete (self, item, containeR):
105        defElem = self.definitionElement(obj=self)
106        if 'SDE_BeforeDelete' in defElem.objectIds('Script (Python)'):
107            defElem.SDE_BeforeDelete(item)
108        return
109
110    # *** parent
111    def parent (self):
112        return self.aq_parent
113
114    # *** render
115    def render(self):
116        printed = ""
117        printed+= str(self.text)
118        for x in (self.objectValues()):
119            printed+= str(x.render())
120        return printed
121
122    # *** renderHTML
123    def renderHTML(self,indent=0):
124        printed = ""
125        i = indent * 8
126        printed+= "<div style=\"padding-left: %ipx;\">%s</div>" % (i,self.text)
127        for x in (self.objectValues()):
128            printed+= str(x.renderHTML(indent+4))
129        printed+= "\n"
130        return printed
131
132    # *** renderHTMLforEditing
133    def renderHTMLforEditing (self,indent=0,elem_id=""):
134        printed =""
135        i = indent * 8
136        defelem = self.definitionElement(obj=self)
137        attr = self.attributes()
138        printed+= "<a name=\"%s\"></a>" % self.id
139        if (elem_id == self.id):
140            printed+= "<form method=\"post\" action=\"%s/save\">" % self.absolute_url()
141            printed+= "    <p>(%s)<br>" % defelem.name()
142            for a in attr:
143                printed+= a[2] + ':<input type="text" size="10" name="txattr_' + a[0] + '" value="' + a[1] + '">&nbsp;&nbsp;&nbsp;'
144            if self.has_own_value():
145                printed+= "    <textarea name=\"textedit\" cols=\"%i\" rows=\"4\" style=\"padding-left: %ipx;\">%s</textarea><br>" % (130-indent,i,self.text)
146            else:
147                printed+= "    <input name=\"textedit\" type=\"hidden\" value=\"%s\">" % self.text
148            printed+= "    <input name=\"cmd\" type=\"submit\" value=\"Gravar\">"
149            printed+= "    <input name=\"cmd\" type=\"submit\" value=\"Excluir\">"
150            printed+= "    <input type=\"reset\" value=\"Original\">"
151
152            tmpObjs = self.possibleChild(obj=self)
153            if (tmpObjs != []):
154                printed+= "    <select name=\"selChild\" onChange=AddChildOnSelect('%s',this)>" % self.absolute_url()
155                printed+= "        <option selected>Inserir filho...</option>"
156                opt = 0
157                for obj in tmpObjs:
158                    printed+= "        <option value=\"%i\">%s</option>" % (opt, obj[2])
159                    opt = opt + 1
160                printed+= "    </select>"
161            printed+= "</p>"
162            printed+= "</form>"
163        else:
164            strlink = "(%s)" % defelem.name()
165            str_attr = ''
166            for a in attr:
167                if str_attr:
168                    str_attr = str_attr + '&nbsp;&nbsp;&nbsp;'
169                else:
170                    str_attr = '['
171                str_attr = str_attr + a[2] + '="' + a[1] + '";'
172            if str_attr:
173                str_attr = str_attr[:-1] + ']'
174            printed+= "<p style=\"padding-left: %ipx; white-space: pre;\"><a class=\"elem\" href=\"renderHTMLforEditing?elem_id=%s#%s\">%s</a> %s" % (i,self.id,self.id,strlink,str_attr)
175            printed+= "%s</p>" % self.text
176        for x in (self.objectValues()):
177            printed+= x.renderHTMLforEditing(indent+4,elem_id)
178        return printed
179
180    # *** renderXML
181    def renderXML (self,indent=""):
182        printed=""
183        pref = self.template().xmlns_prefix
184        xmltag = self.definitionElement(obj=self).xmlTag()
185        attr = self.attributes()
186        str_attr = ''
187        for a in attr:
188            str_attr = str_attr + ' ' + a[0] + '="' + str(a[1]) + '"'
189        printed+= "%s<%s:%s id=\"%s\"%s>" % (indent,pref,xmltag,self.id,str_attr)
190        if self.has_own_value():
191            printed+= "%s<%s:%s_text>%s</%s:%s_text>" % (indent+"   ",pref,xmltag,self.text,pref,xmltag)
192        for x in (self.objectValues("SDE-Document-Element")):
193            printed+= x.renderXML(indent+"   ")
194        printed+= "%s</%s:%s>" % (indent,pref,xmltag)
195        return printed
196
197    # *** renderXMLforEditing
198    def renderXMLforEditing (self,indent=0, id_edit='', path='', prev='', next=''):
199        "Método de renderização XML"
200        printed=""
201        spaces = ''
202        for i in range (0,indent * 4):
203            spaces = spaces + ' '
204
205        defelem = self.definitionElement(obj=self)
206        attr = self.attributes()
207        chd = self.possibleChild(obj=self)
208        id = self.id
209
210        if path:
211            c_path = path + id + '/'
212        else:
213            c_path = id + '/'
214
215        if (id_edit==id) and (defelem.has_own_value):
216            str_edit_attrib = 'yes'
217        else:
218            str_edit_attrib = 'no'
219
220        str_moveup_attrib = 'no'
221        if prev:
222            if prev.type == self.type:
223                str_moveup_attrib = 'yes'
224
225        str_movedn_attrib = 'no'
226        if next:
227            if next.type == self.type:
228                str_movedn_attrib = 'yes'
229
230        printed+= '%s<sd_element id="%s" type="%s" type_name="%s" editing="%s" path="%s" up="%s" down="%s">\n' % (spaces, id, self.type, defelem.name(), str_edit_attrib, path, str_moveup_attrib, str_movedn_attrib)
231        if defelem.has_own_value:
232            printed+= '%s    <sde_text>%s</sde_text>\n' % (spaces, self.text)
233        if attr != []:
234            for a in attr:
235                printed+= '%s    <sde_attr id="%s" name="%s">%s</sde_attr>\n' % (spaces, a[0], a[2], a[1])
236        for c in chd:
237            if c[1] == 0:
238                if c[3]:
239                    str_opt = "yes"
240                else:
241                    str_opt = "no"
242                printed+= '%s    <sde_child type="%s" name="%s" pos="%s" opt="%s" path="%s"></sde_child>\n' % (spaces, c[0],c[2],c[1], str_opt, c_path)
243        pos = 0
244        t_prev = ''
245        t_next = ''
246        t_objs = self.objectValues()
247        t_i = 0
248        t_max = len(t_objs) - 1
249        while t_i <= t_max:
250            x = t_objs[t_i]
251            if t_i > 0:
252                t_prev = t_objs[t_i - 1]
253            else:
254                t_prev = ''
255            if t_i < (t_max):
256                t_next = t_objs[t_i + 1]
257            else:
258                t_next = ''
259            printed+= x.renderXMLforEditing(indent+1, id_edit, path + id + '/', t_prev, t_next)
260            pos = pos + 1
261            for c in chd:
262                if c[1] == pos:
263                    if c[3]:
264                        str_opt = "yes"
265                    else:
266                        str_opt = "no"
267                    printed+= '%s    <sde_child type="%s" name="%s" pos="%s" opt="%s" path="%s"></sde_child>\n' % (spaces, c[0],c[2],c[1], str_opt, c_path)
268            t_i = t_i + 1
269        for c in chd:
270            if c[1] > pos:
271                if c[3]:
272                    str_opt = "yes"
273                else:
274                    str_opt = "no"
275                printed+= '%s    <sde_child type="%s" name="%s" pos="%s" opt="%s" path="%s"></sde_child>\n' % (spaces, c[0],c[2],c[1], str_opt, c_path)
276        printed+= '%s</sd_element>\n' % spaces
277        return printed
278
279    def move_up(self):
280        self.parent().manage_move_objects_up(self.REQUEST, self.id, 1)
281        defElem = self.definitionElement(obj=self)
282        if 'SDE_AfterMove' in defElem.objectIds('Script (Python)'):
283            defElem.SDE_AfterMove(self, "UP")
284        return
285
286    def move_down(self):
287        self.parent().manage_move_objects_down(self.REQUEST, self.id, 1)
288        defElem = self.definitionElement(obj=self)
289        if 'SDE_AfterMove' in defElem.objectIds('Script (Python)'):
290            defElem.SDE_AfterMove(self, "DOWN")
291        return
292
293    def save(self):
294        "Método para salvar os textos digitados"
295        request = self.REQUEST
296        RESPONSE = request.RESPONSE
297        act = request.cmd
298        anchor = ""
299        father = self.parent()
300        if act == "Gravar":
301            self.manage_changeProperties(text=request.textedit)
302            dic_attr = {}
303            attr = self.attributes()
304            for a in attr:
305                if request.has_key('txattr_' + a[0]):
306                    self.saveAttribute(a[0],request['txattr_'+a[0]])
307            if len(dic_attr) > 0:
308                self.manage_changeProperties(dic_attr)
309            if (father.meta_type == "SDE-Document"):
310                anchor = ""
311            else:
312                anchor = "?elem_id=%s#%s" % (father.id, father.id)
313        elif act == "Excluir":
314            request.set('id',self.id)
315            self.parent().delChild()
316        return RESPONSE.redirect (self.document().absolute_url() + "/renderHTMLforEditing" + anchor)
317
318    # *** saveAttribute
319    def saveAttribute(self,attribute='',value=''):
320        dic={}
321        dic['@'+attribute+'@'] = value
322        self.manage_changeProperties(dic)
323        return
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.