~ubuntu-branches/ubuntu/oneiric/moin/oneiric-security

« back to all changes in this revision

Viewing changes to MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/zope.py

  • Committer: Bazaar Package Importer
  • Author(s): Jamie Strandboge
  • Date: 2010-03-30 12:55:34 UTC
  • mfrom: (0.1.17 sid)
  • Revision ID: james.westby@ubuntu.com-20100330125534-4c2ufc1rok24447l
Tags: 1.9.2-2ubuntu1
* Merge from Debian testing (LP: #521834). Based on work by Stefan Ebner.
  Remaining changes:
 - Remove python-xml from Suggests field, the package isn't anymore in
   sys.path.
 - Demote fckeditor from Recommends to Suggests; the code was previously
   embedded in moin, but it was also disabled, so there's no reason for us
   to pull this in by default currently. Note: This isn't necessary anymore
   but needs a MIR for fckeditor, so postpone dropping this change until
   lucid+1
* debian/rules:
  - Replace hardcoded python2.5 with python* and hardcore python2.6 for ln
* debian/control.in: drop versioned depends on cdbs

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
"""