4
FCKeditor - The text editor for Internet - http://www.fckeditor.net
5
Copyright (C) 2003-2009 Frederico Caldeira Knabben
9
Licensed under the terms of any of the following licenses at your
12
- GNU General Public License Version 2 or later (the "GPL")
13
http://www.gnu.org/licenses/gpl.html
15
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
16
http://www.gnu.org/licenses/lgpl.html
18
- Mozilla Public License Version 1.1 or later (the "MPL")
19
http://www.mozilla.org/MPL/MPL-1.1.html
23
Connector for Python and Zope.
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
33
from connector import *
34
import config as Config
36
class FCKeditorConnectorZope(FCKeditorConnector):
38
Zope versiof FCKeditorConnector
41
__allow_access_to_unprotected_subobjects__ = 1
43
def __init__(self, context=None):
47
FCKeditorConnector.__init__(self, environ=None) # call superclass constructor
49
self.context = context
50
self.request = FCKeditorRequest(context)
52
def getZopeRootContext(self):
53
if self.zopeRootContext is None:
54
self.zopeRootContext = self.context.getPhysicalRoot()
55
return self.zopeRootContext
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 <> ""):
64
self.zopeUploadContext = c
65
return self.zopeUploadContext
67
def setHeader(self, key, value):
68
self.context.REQUEST.RESPONSE.setHeader(key, value)
70
def getFolders(self, resourceType, currentFolder):
71
# Open the folders node
74
zopeFolder = self.findZopeFolder(resourceType, currentFolder)
75
for (name, o) in zopeFolder.objectItems(["Folder"]):
76
s += """<Folder name="%s" />""" % (
77
convertToXmlAttribute(name)
79
# Close the folders node
83
def getZopeFoldersAndFiles(self, resourceType, currentFolder):
84
folders = self.getZopeFolders(resourceType, currentFolder)
85
files = self.getZopeFiles(resourceType, currentFolder)
89
def getZopeFiles(self, resourceType, currentFolder):
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)
99
# Close the files node
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 <> ""):
110
zopeFolder = zopeFolder[resourceType]
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]
120
def createFolder(self, resourceType, currentFolder):
121
# Find out where we are
122
zopeFolder = self.findZopeFolder(resourceType, currentFolder)
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)
130
return self.sendErrorNode ( errorNo, errorMsg )
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()
139
nid = "%s.%s.%s" % (fileNameOnly, count, fileExtension)
144
zopeFolder.manage_addProduct['OFSP'].manage_addFile(
154
return self.zopeFileUpload(resourceType, currentFolder, count)
155
return self.sendUploadResults( 0 )
157
class FCKeditorRequest(object):
158
"A wrapper around the request object"
159
def __init__(self, context=None):
163
def has_key(self, key):
164
return self.request.has_key(key)
166
def get(self, key, default=None):
167
return self.request.get(key, default)
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.
176
## Script (Python) "connector.py"
177
##bind container=container
178
##bind context=context
181
##bind subpath=traverse_subpath
182
##parameters=*args, **kws
186
import Products.zope as connector
187
return connector.FCKeditorConnectorZope(context=context).doResponse()