亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? connector.py

?? 論壇程序可以實現多人同時交流,jsp + mysql實現的 請大家多多交流
?? PY
?? 第 1 頁 / 共 2 頁
字號:
#!/usr/bin/env python

"""
FCKeditor - The text editor for Internet - http://www.fckeditor.net
Copyright (C) 2003-2007 Frederico Caldeira Knabben

== BEGIN LICENSE ==

Licensed under the terms of any of the following licenses at your
choice:

 - GNU General Public License Version 2 or later (the "GPL")
   http://www.gnu.org/licenses/gpl.html

 - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
   http://www.gnu.org/licenses/lgpl.html

 - Mozilla Public License Version 1.1 or later (the "MPL")
   http://www.mozilla.org/MPL/MPL-1.1.html

== END LICENSE ==

Connector for Python.

Tested With:
Standard:
	Python 2.3.3
Zope:
	Zope Version: (Zope 2.8.1-final, python 2.3.5, linux2)
	Python Version: 2.3.5 (#4, Mar 10 2005, 01:40:25)
		[GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)]
	System Platform: linux2
"""

"""
Author Notes (04 December 2005):
This module has gone through quite a few phases of change.  Obviously,
I am only supporting that part of the code that I use.  Initially
I had the upload directory as a part of zope (ie. uploading files
directly into Zope), before realising that there were too many
complex intricacies within Zope to deal with.  Zope is one ugly piece
of code.  So I decided to complement Zope by an Apache server (which
I had running anyway, and doing nothing).  So I mapped all uploads
from an arbitrary server directory to an arbitrary web directory.
All the FCKeditor uploading occurred this way, and I didn't have to
stuff around with fiddling with Zope objects and the like (which are
terribly complex and something you don't want to do - trust me).

Maybe a Zope expert can touch up the Zope components.  In the end,
I had FCKeditor loaded in Zope (probably a bad idea as well), and
I replaced the connector.py with an alias to a server module.
Right now, all Zope components will simple remain as is because
I've had enough of Zope.

See notes right at the end of this file for how I aliased out of Zope.

Anyway, most of you probably wont use Zope, so things are pretty
simple in that regard.

Typically, SERVER_DIR is the root of WEB_DIR (not necessarily).
Most definitely, SERVER_USERFILES_DIR points to WEB_USERFILES_DIR.
"""

import cgi
import re
import os
import string

"""
escape

Converts the special characters '<', '>', and '&'.

RFC 1866 specifies that these characters be represented
in HTML as &lt; &gt; and &amp; respectively. In Python
1.5 we use the new string.replace() function for speed.
"""
def escape(text, replace=string.replace):
    text = replace(text, '&', '&amp;') # must be done 1st
    text = replace(text, '<', '&lt;')
    text = replace(text, '>', '&gt;')
    text = replace(text, '"', '&quot;')
    return text

"""
getFCKeditorConnector

Creates a new instance of an FCKeditorConnector, and runs it
"""
def getFCKeditorConnector(context=None):
	# Called from Zope.  Passes the context through
	connector = FCKeditorConnector(context=context)
	return connector.run()


"""
FCKeditorRequest

A wrapper around the request object
Can handle normal CGI request, or a Zope request
Extend as required
"""
class FCKeditorRequest(object):
	def __init__(self, context=None):
		if (context is not None):
			r = context.REQUEST
		else:
			r = cgi.FieldStorage()
		self.context = context
		self.request = r

	def isZope(self):
		if (self.context is not None):
			return True
		return False

	def has_key(self, key):
		return self.request.has_key(key)

	def get(self, key, default=None):
		value = None
		if (self.isZope()):
			value = self.request.get(key, default)
		else:
			if key in self.request.keys():
				value = self.request[key].value
			else:
				value = default
		return value

"""
FCKeditorConnector

The connector class
"""
class FCKeditorConnector(object):
	# Configuration for FCKEditor
	# can point to another server here, if linked correctly
	#WEB_HOST = "http://127.0.0.1/"
	WEB_HOST = ""
	SERVER_DIR = "/var/www/html/"

	WEB_USERFILES_FOLDER = WEB_HOST + "upload/"
	SERVER_USERFILES_FOLDER = SERVER_DIR + "upload/"

	# Allow access (Zope)
	__allow_access_to_unprotected_subobjects__ = 1
	# Class Attributes
	parentFolderRe = re.compile("[\/][^\/]+[\/]?$")

	"""
	Constructor
	"""
	def __init__(self, context=None):
		# The given root path will NOT be shown to the user
		# Only the userFilesPath will be shown

		# Instance Attributes
		self.context = context
		self.request = FCKeditorRequest(context=context)
		self.rootPath = self.SERVER_DIR
		self.userFilesFolder = self.SERVER_USERFILES_FOLDER
		self.webUserFilesFolder = self.WEB_USERFILES_FOLDER

		# Enables / Disables the connector
		self.enabled = False # Set to True to enable this connector

		# These are instance variables
		self.zopeRootContext = None
		self.zopeUploadContext = None

		# Copied from php module =)
		self.allowedExtensions = {
				"File": None,
				"Image": None,
				"Flash": None,
				"Media": None
				}
		self.deniedExtensions = {
				"File": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis","sh","shtml","shtm","phtm" ],
				"Image": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis","sh","shtml","shtm","phtm" ],
				"Flash": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis","sh","shtml","shtm","phtm" ],
				"Media": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis","sh","shtml","shtm","phtm" ]
				}

	"""
	Zope specific functions
	"""
	def isZope(self):
		# The context object is the zope object
		if (self.context is not None):
			return True
		return False

	def getZopeRootContext(self):
		if self.zopeRootContext is None:
			self.zopeRootContext = self.context.getPhysicalRoot()
		return self.zopeRootContext

	def getZopeUploadContext(self):
		if self.zopeUploadContext is None:
			folderNames = self.userFilesFolder.split("/")
			c = self.getZopeRootContext()
			for folderName in folderNames:
				if (folderName <> ""):
					c = c[folderName]
			self.zopeUploadContext = c
		return self.zopeUploadContext

	"""
	Generic manipulation functions
	"""
	def getUserFilesFolder(self):
		return self.userFilesFolder

	def getWebUserFilesFolder(self):
		return self.webUserFilesFolder

	def getAllowedExtensions(self, resourceType):
		return self.allowedExtensions[resourceType]

	def getDeniedExtensions(self, resourceType):
		return self.deniedExtensions[resourceType]

	def removeFromStart(self, string, char):
		return string.lstrip(char)

	def removeFromEnd(self, string, char):
		return string.rstrip(char)

	def convertToXmlAttribute(self, value):
		if (value is None):
			value = ""
		return escape(value)

	def convertToPath(self, path):
		if (path[-1] <> "/"):
			return path + "/"
		else:
			return path

	def getUrlFromPath(self, resourceType, path):
		if (resourceType is None) or (resourceType == ''):
			url = "%s%s" % (
					self.removeFromEnd(self.getUserFilesFolder(), '/'),
					path
					)
		else:
			url = "%s%s%s" % (
					self.getUserFilesFolder(),
					resourceType,
					path
					)
		return url

	def getWebUrlFromPath(self, resourceType, path):
		if (resourceType is None) or (resourceType == ''):
			url = "%s%s" % (
					self.removeFromEnd(self.getWebUserFilesFolder(), '/'),
					path
					)
		else:
			url = "%s%s%s" % (
					self.getWebUserFilesFolder(),
					resourceType,
					path
					)
		return url

	def removeExtension(self, fileName):
		index = fileName.rindex(".")
		newFileName = fileName[0:index]
		return newFileName

	def getExtension(self, fileName):
		index = fileName.rindex(".") + 1
		fileExtension = fileName[index:]
		return fileExtension

	def getParentFolder(self, folderPath):
		parentFolderPath = self.parentFolderRe.sub('', folderPath)
		return parentFolderPath

	"""
	serverMapFolder

	Purpose: works out the folder map on the server
	"""
	def serverMapFolder(self, resourceType, folderPath):
		# Get the resource type directory
		resourceTypeFolder = "%s%s/" % (
				self.getUserFilesFolder(),
				resourceType
				)
		# Ensure that the directory exists
		self.createServerFolder(resourceTypeFolder)

		# Return the resource type directory combined with the
		# required path
		return "%s%s" % (
				resourceTypeFolder,
				self.removeFromStart(folderPath, '/')
				)

	"""
	createServerFolder

	Purpose: physically creates a folder on the server
	"""
	def createServerFolder(self, folderPath):
		# Check if the parent exists
		parentFolderPath = self.getParentFolder(folderPath)
		if not(os.path.exists(parentFolderPath)):
			errorMsg = self.createServerFolder(parentFolderPath)
			if errorMsg is not None:
				return errorMsg
		# Check if this exists
		if not(os.path.exists(folderPath)):
			os.mkdir(folderPath)
			os.chmod(folderPath, 0755)
			errorMsg = None
		else:
			if os.path.isdir(folderPath):
				errorMsg = None
			else:
				raise "createServerFolder: Non-folder of same name already exists"
		return errorMsg


	"""
	getRootPath

	Purpose: returns the root path on the server
	"""
	def getRootPath(self):
		return self.rootPath

	"""
	setXmlHeaders

	Purpose: to prepare the headers for the xml to return
	"""
	def setXmlHeaders(self):
		#now = self.context.BS_get_now()
		#yesterday = now - 1
		self.setHeader("Content-Type", "text/xml")
		#self.setHeader("Expires", yesterday)
		#self.setHeader("Last-Modified", now)
		#self.setHeader("Cache-Control", "no-store, no-cache, must-revalidate")
		self.printHeaders()
		return

	def setHeader(self, key, value):
		if (self.isZope()):
			self.context.REQUEST.RESPONSE.setHeader(key, value)
		else:
			print "%s: %s" % (key, value)
		return

	def printHeaders(self):
		# For non-Zope requests, we need to print an empty line
		# to denote the end of headers
		if (not(self.isZope())):
			print ""

	"""
	createXmlFooter

	Purpose: returns the xml header
	"""
	def createXmlHeader(self, command, resourceType, currentFolder):
		self.setXmlHeaders()
		s = ""
		# Create the XML document header
		s += """<?xml version="1.0" encoding="utf-8" ?>"""
		# Create the main connector node
		s += """<Connector command="%s" resourceType="%s">""" % (
				command,
				resourceType
				)
		# Add the current folder node
		s += """<CurrentFolder path="%s" url="%s" />""" % (
				self.convertToXmlAttribute(currentFolder),
				self.convertToXmlAttribute(
					self.getWebUrlFromPath(
						resourceType,
						currentFolder
						)
					),
				)
		return s

	"""

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜av一区| 性做久久久久久久免费看| 日韩中文字幕亚洲一区二区va在线| 国内精品视频666| 欧美精选一区二区| 一区二区三区中文字幕电影| 欧美三级日本三级少妇99| 国产精品三级av在线播放| 精品一区二区精品| 欧美一区二区三区思思人| 久久久无码精品亚洲日韩按摩| 日韩国产一区二| 欧美日韩日本视频| 亚洲国产视频a| 欧美日韩一区二区三区在线| 日韩不卡一二三区| 91精品国产日韩91久久久久久| 午夜欧美视频在线观看| 欧美在线一区二区| 国产精品久久毛片av大全日韩| 99re热视频精品| 日韩美女视频一区| 色综合欧美在线| 一个色综合av| 日韩午夜精品视频| 国产乱人伦偷精品视频免下载 | 丝袜美腿亚洲色图| 8v天堂国产在线一区二区| 亚洲成人动漫av| 国产亚洲欧美日韩俺去了| 国产传媒欧美日韩成人| 国产精品久99| 色婷婷久久久综合中文字幕| 一区二区欧美在线观看| 在线不卡a资源高清| 蜜臀av国产精品久久久久| 欧美撒尿777hd撒尿| 国产中文一区二区三区| 久久久久久综合| av在线一区二区| 亚洲男同性恋视频| 日韩欧美国产午夜精品| 成人亚洲一区二区一| 一区二区三区成人| 国产天堂亚洲国产碰碰| 色欧美88888久久久久久影院| 婷婷丁香激情综合| 久久久久久久综合色一本| 欧美日韩视频在线第一区 | 欧美精品一二三区| 麻豆国产精品官网| 一二三四社区欧美黄| 2021久久国产精品不只是精品| 成人性生交大片免费看中文网站| 亚洲色图视频网站| 国产视频一区二区三区在线观看| 欧美视频一二三区| 国产 欧美在线| 日韩精品久久久久久| 亚洲精品视频一区二区| 日韩视频免费观看高清完整版在线观看 | 18成人在线视频| 在线观看亚洲a| 国产白丝网站精品污在线入口| 一区二区高清在线| 国产精品女主播av| 欧美大片拔萝卜| 不卡的av在线| 国产麻豆视频精品| 污片在线观看一区二区| 国产精品国产三级国产普通话三级 | 色诱视频网站一区| 激情五月激情综合网| 中文子幕无线码一区tr| 欧美不卡一二三| 日本电影亚洲天堂一区| 国产·精品毛片| 麻豆国产精品777777在线| 国产精品一区二区在线播放| 日本免费新一区视频| 天天av天天翘天天综合网 | 日韩成人精品在线观看| 天天av天天翘天天综合网 | 国产精品毛片久久久久久久| 国产视频亚洲色图| 国产精品网站在线观看| 国产精品传媒在线| 最新高清无码专区| 一区二区三区欧美激情| 夜夜揉揉日日人人青青一国产精品| 亚洲精品水蜜桃| 亚洲高清免费视频| 美女一区二区视频| 国产精品1024| 91蜜桃在线观看| 欧美日本韩国一区二区三区视频| 欧美日韩激情一区二区三区| 91精品国产综合久久蜜臀| 日韩欧美国产综合| 日本一区二区三区国色天香 | 蜜臀国产一区二区三区在线播放| 中文字幕亚洲精品在线观看| 亚洲黄色片在线观看| 久久久久久久久岛国免费| 在线影院国内精品| 欧美麻豆精品久久久久久| 欧美电影在线免费观看| 欧美一级黄色录像| 精品少妇一区二区三区| 国产精品免费久久久久| 亚洲国产精品久久久久秋霞影院 | 午夜精品久久久| 日本丰满少妇一区二区三区| 91精品国产综合久久精品| 欧美片在线播放| 久久精品网站免费观看| 亚洲欧美偷拍三级| 免费观看一级欧美片| 成人av资源网站| 51精品国自产在线| 日本一区二区在线不卡| 国产欧美久久久精品影院| 久久av资源站| 日韩一级片在线观看| 中文欧美字幕免费| 亚洲激情第一区| 精品欧美乱码久久久久久| 欧美一区中文字幕| 国产丝袜欧美中文另类| 亚洲一级二级在线| 国产一区久久久| 欧美亚洲一区二区三区四区| 欧美大片在线观看一区二区| 综合分类小说区另类春色亚洲小说欧美| 亚洲视频你懂的| 99视频精品免费视频| 欧美大尺度电影在线| 亚洲欧洲日产国产综合网| 婷婷丁香激情综合| 97超碰欧美中文字幕| 精品1区2区在线观看| 亚洲国产cao| 91视频观看视频| 久久久一区二区三区捆绑**| 五月天网站亚洲| 92精品国产成人观看免费 | 日本午夜一本久久久综合| 不卡区在线中文字幕| 精品国产1区二区| 无吗不卡中文字幕| 色狠狠综合天天综合综合| 国产精品无码永久免费888| 精品一二三四在线| 制服丝袜成人动漫| 亚洲国产欧美在线人成| 91亚洲男人天堂| 中文字幕av一区二区三区高| 国产一区二区在线视频| 69久久99精品久久久久婷婷| 国产亚洲欧美激情| 国产成人在线观看免费网站| 51精品国自产在线| 亚洲成人在线免费| 91色九色蝌蚪| 18欧美乱大交hd1984| 99久久精品免费| 亚洲女同一区二区| 色综合久久中文字幕综合网| 中文字幕一区二区不卡| 99麻豆久久久国产精品免费| 国产精品欧美久久久久无广告| 高清免费成人av| 国产精品福利一区| 99久久久国产精品| 欧美激情一区二区三区全黄| 色哟哟欧美精品| 亚洲精品国久久99热| 精品视频在线免费看| 亚洲福中文字幕伊人影院| 欧美日韩免费在线视频| 日韩成人免费电影| 欧美videofree性高清杂交| 国产在线看一区| 久久网站最新地址| 成人自拍视频在线| 国产精品久久久久aaaa| 91福利精品视频| 日韩高清在线电影| 亚洲精品一区在线观看| 国产成人精品一区二区三区四区| 国产亚洲精品资源在线26u| a美女胸又www黄视频久久| 亚洲综合色婷婷| 日韩一区二区三区在线观看| 国产伦精品一区二区三区免费| 国产精品久久久久久久久搜平片| 色婷婷综合久久久久中文一区二区| 亚洲chinese男男1069| 精品99999| 色狠狠色狠狠综合|