source: extensions/FCKEditor/editor/filemanager/connectors/py/zope.py @ 3295

Last change on this file since 3295 was 3295, checked in by patdenice, 15 years ago

New extension added:
FCK Editor (2.0.a)

File size: 5.6 KB
Line 
1#!/usr/bin/env python
2
3"""
4FCKeditor - The text editor for Internet - http://www.fckeditor.net
5Copyright (C) 2003-2009 Frederico Caldeira Knabben
6
7== BEGIN LICENSE ==
8
9Licensed under the terms of any of the following licenses at your
10choice:
11
12- GNU General Public License Version 2 or later (the "GPL")
13http://www.gnu.org/licenses/gpl.html
14
15- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
16http://www.gnu.org/licenses/lgpl.html
17
18- Mozilla Public License Version 1.1 or later (the "MPL")
19http://www.mozilla.org/MPL/MPL-1.1.html
20
21== END LICENSE ==
22
23Connector for Python and Zope.
24
25This code was not tested at all.
26It just was ported from pre 2.5 release, so for further reference see
27\editor\filemanager\browser\default\connectors\py\connector.py in previous
28releases.
29
30"""
31
32from fckutil import *
33from connector import *
34import config as Config
35
36class 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
157class 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"""
170Running from zope, you will need to modify this connector.
171If you have uploaded the FCKeditor into Zope (like me), you need to
172move this connector out of Zope, and replace the "connector" with an
173alias as below.  The key to it is to pass the Zope context in, as
174we 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
186import Products.zope as connector
187return connector.FCKeditorConnectorZope(context=context).doResponse()
188"""
Note: See TracBrowser for help on using the repository browser.