~lucasaba/webhs/devel

« back to all changes in this revision

Viewing changes to web/js/fckeditor/editor/filemanager/connectors/py/zope.py

  • Committer: Luca Saba
  • Date: 2009-08-26 17:51:33 UTC
  • Revision ID: lucasaba@gmail.com-20090826175133-3uggkrqe8auoooxo
Inserito tinyMCE a posto di fck come editor.
A seguito di numerosi litigi.....ho, momentaneamente, bypassato l'editor
grafico per scegliere una normale textarea della quale posso controllare meglio 
le caratteristiche di stile.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
 
3
 
"""
4
 
FCKeditor - The text editor for Internet - http://www.fckeditor.net
5
 
Copyright (C) 2003-2009 Frederico Caldeira Knabben
6
 
 
7
 
== BEGIN LICENSE ==
8
 
 
9
 
Licensed under the terms of any of the following licenses at your
10
 
choice:
11
 
 
12
 
- GNU General Public License Version 2 or later (the "GPL")
13
 
http://www.gnu.org/licenses/gpl.html
14
 
 
15
 
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
16
 
http://www.gnu.org/licenses/lgpl.html
17
 
 
18
 
- Mozilla Public License Version 1.1 or later (the "MPL")
19
 
http://www.mozilla.org/MPL/MPL-1.1.html
20
 
 
21
 
== END LICENSE ==
22
 
 
23
 
Connector for Python and Zope.
24
 
 
25
 
This code was not tested at all.
26
 
It just was ported from pre 2.5 release, so for further reference see
27
 
\editor\filemanager\browser\default\connectors\py\connector.py in previous
28
 
releases.
29
 
 
30
 
"""
31
 
 
32
 
from fckutil import *
33
 
from connector import *
34
 
import config as Config
35
 
 
36
 
class FCKeditorConnectorZope(FCKeditorConnector):
37
 
        """
38
 
        Zope versiof FCKeditorConnector
39
 
        """
40
 
        # Allow access (Zope)
41
 
        __allow_access_to_unprotected_subobjects__ = 1
42
 
 
43
 
        def __init__(self, context=None):
44
 
                """
45
 
                Constructor
46
 
                """
47
 
                FCKeditorConnector.__init__(self, environ=None) # call superclass constructor
48
 
                # Instance Attributes
49
 
                self.context = context
50
 
                self.request = FCKeditorRequest(context)
51
 
 
52
 
        def getZopeRootContext(self):
53
 
                if self.zopeRootContext is None:
54
 
                        self.zopeRootContext = self.context.getPhysicalRoot()
55
 
                return self.zopeRootContext
56
 
 
57
 
        def getZopeUploadContext(self):
58
 
                if self.zopeUploadContext is None:
59
 
                        folderNames = self.userFilesFolder.split("/")
60
 
                        c = self.getZopeRootContext()
61
 
                        for folderName in folderNames:
62
 
                                if (folderName <> ""):
63
 
                                        c = c[folderName]
64
 
                        self.zopeUploadContext = c
65
 
                return self.zopeUploadContext
66
 
 
67
 
        def setHeader(self, key, value):
68
 
                self.context.REQUEST.RESPONSE.setHeader(key, value)
69
 
 
70
 
        def getFolders(self, resourceType, currentFolder):
71
 
                # Open the folders node
72
 
                s = ""
73
 
                s += """<Folders>"""
74
 
                zopeFolder = self.findZopeFolder(resourceType, currentFolder)
75
 
                for (name, o) in zopeFolder.objectItems(["Folder"]):
76
 
                        s += """<Folder name="%s" />""" % (
77
 
                                        convertToXmlAttribute(name)
78
 
                                        )
79
 
                # Close the folders node
80
 
                s += """</Folders>"""
81
 
                return s
82
 
 
83
 
        def getZopeFoldersAndFiles(self, resourceType, currentFolder):
84
 
                folders = self.getZopeFolders(resourceType, currentFolder)
85
 
                files = self.getZopeFiles(resourceType, currentFolder)
86
 
                s = folders + files
87
 
                return s
88
 
 
89
 
        def getZopeFiles(self, resourceType, currentFolder):
90
 
                # Open the files node
91
 
                s = ""
92
 
                s += """<Files>"""
93
 
                zopeFolder = self.findZopeFolder(resourceType, currentFolder)
94
 
                for (name, o) in zopeFolder.objectItems(["File","Image"]):
95
 
                        s += """<File name="%s" size="%s" />""" % (
96
 
                                        convertToXmlAttribute(name),
97
 
                                        ((o.get_size() / 1024) + 1)
98
 
                                        )
99
 
                # Close the files node
100
 
                s += """</Files>"""
101
 
                return s
102
 
 
103
 
        def findZopeFolder(self, resourceType, folderName):
104
 
                # returns the context of the resource / folder
105
 
                zopeFolder = self.getZopeUploadContext()
106
 
                folderName = self.removeFromStart(folderName, "/")
107
 
                folderName = self.removeFromEnd(folderName, "/")
108
 
                if (resourceType <> ""):
109
 
                        try:
110
 
                                zopeFolder = zopeFolder[resourceType]
111
 
                        except:
112
 
                                zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=resourceType, title=resourceType)
113
 
                                zopeFolder = zopeFolder[resourceType]
114
 
                if (folderName <> ""):
115
 
                        folderNames = folderName.split("/")
116
 
                        for folderName in folderNames:
117
 
                                zopeFolder = zopeFolder[folderName]
118
 
                return zopeFolder
119
 
 
120
 
        def createFolder(self, resourceType, currentFolder):
121
 
                # Find out where we are
122
 
                zopeFolder = self.findZopeFolder(resourceType, currentFolder)
123
 
                errorNo = 0
124
 
                errorMsg = ""
125
 
                if self.request.has_key("NewFolderName"):
126
 
                        newFolder = self.request.get("NewFolderName", None)
127
 
                        zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=newFolder, title=newFolder)
128
 
                else:
129
 
                        errorNo = 102
130
 
                return self.sendErrorNode ( errorNo, errorMsg )
131
 
 
132
 
        def uploadFile(self, resourceType, currentFolder, count=None):
133
 
                zopeFolder = self.findZopeFolder(resourceType, currentFolder)
134
 
                file = self.request.get("NewFile", None)
135
 
                fileName = self.getFileName(file.filename)
136
 
                fileNameOnly = self.removeExtension(fileName)
137
 
                fileExtension = self.getExtension(fileName).lower()
138
 
                if (count):
139
 
                        nid = "%s.%s.%s" % (fileNameOnly, count, fileExtension)
140
 
                else:
141
 
                        nid = fileName
142
 
                title = nid
143
 
                try:
144
 
                        zopeFolder.manage_addProduct['OFSP'].manage_addFile(
145
 
                                        id=nid,
146
 
                                        title=title,
147
 
                                        file=file.read()
148
 
                                        )
149
 
                except:
150
 
                        if (count):
151
 
                                count += 1
152
 
                        else:
153
 
                                count = 1
154
 
                        return self.zopeFileUpload(resourceType, currentFolder, count)
155
 
                return self.sendUploadResults( 0 )
156
 
 
157
 
class FCKeditorRequest(object):
158
 
        "A wrapper around the request object"
159
 
        def __init__(self, context=None):
160
 
                r = context.REQUEST
161
 
                self.request = r
162
 
 
163
 
        def has_key(self, key):
164
 
                return self.request.has_key(key)
165
 
 
166
 
        def get(self, key, default=None):
167
 
                return self.request.get(key, default)
168
 
 
169
 
"""
170
 
Running from zope, you will need to modify this connector.
171
 
If you have uploaded the FCKeditor into Zope (like me), you need to
172
 
move this connector out of Zope, and replace the "connector" with an
173
 
alias as below.  The key to it is to pass the Zope context in, as
174
 
we then have a like to the Zope context.
175
 
 
176
 
## Script (Python) "connector.py"
177
 
##bind container=container
178
 
##bind context=context
179
 
##bind namespace=
180
 
##bind script=script
181
 
##bind subpath=traverse_subpath
182
 
##parameters=*args, **kws
183
 
##title=ALIAS
184
 
##
185
 
 
186
 
import Products.zope as connector
187
 
return connector.FCKeditorConnectorZope(context=context).doResponse()
188
 
"""