--- ECHO_content/ECHO_Nav.py 2004/09/01 17:48:31 1.44
+++ ECHO_content/ECHO_Nav.py 2010/02/15 19:03:28 1.84
@@ -1,5 +1,5 @@
-# Objekte zur Erzeugung von Navigationselementen
-
+# Objekte zur Erzeugung von Navigationselement
+from AccessControl import ClassSecurityInfo
from Globals import DTMLFile
from OFS.Image import Image,cookId
from OFS.Folder import Folder
@@ -12,9 +12,9 @@ from Products.PageTemplates.ZopePageTemp
import os.path
from Globals import package_home
import urllib
-from ECHO_helpers import displayTypes,checkOnlyOneInGroup
-from ECHO_collection import content_html
-
+from ECHO_helpers import *
+from ECHO_collection import content_html
+from types import *
from Globals import DTMLFile
@@ -27,11 +27,22 @@ import re
import string
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
import os.path
-from Globals import package_home
+
import urllib
-from ECHO_helpers import displayTypes,checkOnlyOneInGroup
+from ECHO_helpers import displayTypes,checkOnlyOneInGroup,unicodify
from ECHO_collection import content_html
+import logging
+#def ersetzt logging
+def logger(txt,method,txt2):
+ """logging"""
+ logging.info(txt+ txt2)
+
+STORAGEMANAGER_URL_DEFAULT = "http://storage-web.mpiwg-berlin.mpg.de/storage/storeOnline?path="
+try:
+ from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
+except:
+ logger('ECHO_Nav',logging.INFO,'ZSQLSimpleSearch not supported')
@@ -51,6 +62,7 @@ class ECHO_ZCatalogElement(SimpleItem):
self.weight=weight
self.content=contentType
+
manage_options= SimpleItem.manage_options+(
{'label':'Main Config','action':'changeECHO_ZCatalogElementForm'},
)
@@ -75,7 +87,7 @@ class ECHO_ZCatalogElement(SimpleItem):
def changeECHO_ZCatalogElementForm(self):
"""change"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_ZCatalogElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_ZCatalogElement.zpt')).__of__(self)
return pt()
def changeECHO_ZCatalogElement(self,title,field,catalogId,baseUrl,weight,contentType,RESPONSE=None):
@@ -90,19 +102,28 @@ class ECHO_ZCatalogElement(SimpleItem):
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
def getKeywordList(self):
- return getattr(self,self.catalogId).uniqueValuesFor(self.field)
+ try:
+ return getattr(self,self.catalogId).uniqueValuesFor(self.field)
+ except:
+ #return getattr(self,self.catalogId).query(self.field)
+
+ list= [x for x in getattr(getattr(self,self.catalogId),self.field).words()]
+ list.sort()
+ return list
def getNavList(self):
- """ausgabe der treffer list für navigation"""
+ """ausgabe der treffer list fuer navigation"""
records=self.getKeywordList()
-
+ records=[x.encode('utf-8') for x in records]
+ records.sort()
if not records:
return []
else:
ret=[]
for record in records:
+
#print "RC",record
#if record:
# ret.append((record,self.baseUrl+urllib.quote(record)))
@@ -116,12 +137,13 @@ class ECHO_ZCatalogElement(SimpleItem):
def manage_addECHO_ZCatalogElementForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_ZCatalogElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_ZCatalogElement.zpt')).__of__(self)
return pt()
-def manage_addECHO_ZCatalogElement(self,id,title,field,baseUrl,weight,contentType,RESPONSE=None):
+def manage_addECHO_ZCatalogElement(self,id,title,field,catalogId,baseUrl,weight,contentType,RESPONSE=None):
"""Add an ECHO_ZCatalogelement"""
- self._setObject(id,ECHO_ZCatalogElement(id,title,field,baseUrl,weight,contentType))
+
+ self._setObject(id,ECHO_ZCatalogElement(id,title,field,catalogId,baseUrl,weight,contentType))
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -140,9 +162,9 @@ class ECHO_contentType(Image):
def changeECHO_contentTypeForm(self):
"""Change the description text"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_contentType.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_contentType.zpt')).__of__(self)
return pt()
-
+
def changeECHO_contentType(self,description,RESPONSE=None):
"""Change the Content"""
self.description=description
@@ -238,7 +260,7 @@ class ECHO_sqlElement(SimpleItem):
def changeECHO_sqlElementForm(self):
"""change"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_sqlElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_sqlElement.zpt')).__of__(self)
return pt()
def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
@@ -254,30 +276,25 @@ class ECHO_sqlElement(SimpleItem):
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
- def searchQuery(self,query=None,obj=None):
- #presently a hack, tests if search is of the search method, if not look at the next level.
- #
- #return self.ZSQLsimpleSearch(var=self.query)
- if not query:
- query=self.query
-
- if self.search.meta_type=="Z SQL Method":
- return self.search(var=self.query)
- else:
- if self.aq_parent.aq_parent.search.meta_type=="Z SQL Method":
- return self.aq_parent.aq_parent.search(var=self.query)
- else:
- return []
-
-
-
-
- def getNavList(self):
- """ausgabe der treffer list für navigation"""
+ try:
+ searchQuery=ZSQLExtendFolder.ZSQLSimpleSearch
+ except:
+ logger('ECHO_Nav',logging.INFO,'ZSQLSimpleSearch not supported')
+
+ def getNavList(self):
+ """ausgabe der treffer list fuer navigation"""
- records=self.searchQuery()
+ #naechste schritte sind trial and error, warum geht mal das eine mal das andere 2.3 / 2.4 ??
+
+ try:
+ try:
+ records=self.ZSQLSimpleSearch(query=self.query)
+ except:
+ records=self.searchQuery(self.aq_parent,query=self.query) #python 2.4 version (??)
+ except:
+ records=self.searchQuery(query=self.query)#python 2.3 version(??)
-
+
if not records:
return []
else:
@@ -286,6 +303,7 @@ class ECHO_sqlElement(SimpleItem):
try:
ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
except:
+ logger('ECHO_Nav',logging.INFO,"error, search")
"""notrhing"""
return ret
@@ -293,7 +311,7 @@ class ECHO_sqlElement(SimpleItem):
def manage_addECHO_sqlElementForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_sqlElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_sqlElement.zpt')).__of__(self)
return pt()
def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
@@ -304,43 +322,51 @@ def manage_addECHO_sqlElement(self,id,ti
RESPONSE.redirect('manage_main')
-class ECHO_pageTemplate(ZopePageTemplate):
+class ECHO_pageTemplate(ZopePageTemplate,ECHO_basis):
"""pageTemplate Objekt"""
meta_type="ECHO_pageTemplate"
-
+ security=ClassSecurityInfo()
+
+
_default_content_fn = os.path.join(package_home(globals()),
'html/ECHO_pageTemplateDefault.html')
- manage_options=ZopePageTemplate.manage_options+(
+ manage_options=ZopePageTemplate.manage_options+ECHO_basis.manage_options+(
{'label':'Main Config','action':'changeECHO_pageTemplateMainForm'},
+ {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
)
+ security.declarePublic('content_html')
+
+ def addChanges(self):
+ """do nothing leere methode, notwendig, da bei veerbung
+ von dieser klasse nur ueberschrieben werden kann,
+ falls methode per url aufgerufen werden soll"""
+
+ return True
+
def content_html(self):
- """content_html"""
- return content_html(self,'pageTemplate')
+ """content_html"""
+ return content_html(self,'pageTemplate')
def changeECHO_pageTemplateMainForm(self):
"""change"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateMain.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_pageTemplateMain.zpt')).__of__(self)
return pt()
- def changeECHO_pageTemplateMain(self,weight,contentType,label,description,RESPONSE=None,isAlwaysClickable=None):
+ def changeECHO_pageTemplateMain(self,weight,contentType,label,description,RESPONSE=None,isAlwaysClickable=None,suffix=None,prefix=None):
"""change"""
self.weight=weight
self.contentType=contentType
self.label=label
self.description=description
self.isAlwaysClickable=isAlwaysClickable
+ self.suffix=suffix
+ self.prefix=prefix
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
-
- def getLabel(self):
- if hasattr(self,'label'):
- return self.label.encode('utf-8')
- else:
- return 0
-
+
def getWeight(self):
"""get weight"""
if hasattr(self,'weight'):
@@ -367,7 +393,7 @@ class ECHO_pageTemplate(ZopePageTemplate
def manage_addECHO_pageTemplateForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_pageTemplate.zpt')).__of__(self)
return pt()
from urllib import quote
@@ -417,36 +443,100 @@ def manage_addECHO_pageTemplate(self, id
class ECHO_navigation(Folder):
"""Navigations Element"""
meta_type="ECHO_Navigation"
+ management_page_charset="utf-8"
+
+ def getUsername(self):
+ """get name of user"""
+ username=str(self.REQUEST['AUTHENTICATED_USER'])
+ if username=='Anonymous User':
+ return None
+ else:
+ return username
+
+ def searchExternalCollection(self,url,simpleSearch):
+ """search external collection via xmlrpc"""
+ server=xmlrpclib.Server(url)
+
+ results=server.getSubcolsXMLRpc(simpleSearch)
+
+ return results
+
+ def getXMLRpcConnection(self,url):
+ """getxmlrpc"""
+ if not hasattr(self,"_v_server"):
+ self._v_server=[]
+
+ server=xmlrpclib.Server(url)
+ self._v_server.append(server)
+
+ return len(self._v_server)-1
+
+ def getXMLRpcMethod(self,nr,method,compressed=None):
+ """getmethod"""
+
+ ret= eval('self._v_server[%i].%s'%(nr,method))
+ if compressed:
+ ret=decodeRPC(ret)
+ return ret
+
+ def getNavInfo(self):
+ """root informationen"""
+ if hasattr(self,'logo_image'):
+ if hasattr(self.logo_image,'tag'):
+ imageTag=self.logo_image.tag()
+ else:
+ imageTag=''
+ return (self.title,imageTag)
+
+ def linkBar(self,parent):
+ """linkbarer balken"""
+ str=""
+
+
+ while not(parent.meta_type == "ECHO_root"):
+ fragment="""%s"""%(parent.absolute_url(),parent.label)
+ str=fragment+"/"+str
+ parent=parent.aq_parent
+
+ return str
+
+ def decode(self,str):
+ """decoder"""
+ return unicodify(str)
def ECHOFormatListStr(self,list,search="\n",replace="
"):
"""formatiert liste im str"""
- if list:
- return re.sub(search,replace,list)
- else:
- return
+ if list:
+ return re.sub(search,replace,list)
+ else:
+ return
def ECHO_cacheManageForm(self):
- """change form"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_cacheManageForm').__of__(self)
- pt.content_type="text/html"
- return pt()
+ """change form"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_cacheManageForm')).__of__(self)
+ pt.content_type="text/html"
+ return pt()
def ECHO_cacheManage(self,cacheManagerName=None,deleteCache=None, activateCache=None,RESPONSE=None):
- """cachemanager"""
- if cacheManagerName=="": chacheManagerName=None
-
- self.cacheManagerName=cacheManagerName
- self.setCache(managerName=cacheManagerName)
-
- if deleteCache:
- self.deleteCache()
+ """cachemanager"""
+ if cacheManagerName=="": chacheManagerName=None
+
+ self.cacheManagerName=cacheManagerName
+ self.setCache(managerName=cacheManagerName)
+
+ if deleteCache:
+ try:
+ self.deleteCache()
+ except:
+ for roots in self.ZopeFind(self,obj_metatypes=['ECHO_root'],search_sub=1):
+ roots[1].deleteCache()
+
- print activateCache
- self.activateCache=activateCache
+ self.activateCache=activateCache
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
+ if RESPONSE is not None:
+ RESPONSE.redirect('manage_main')
+
def setCache(self,obj=None,RESPONSE=None,managerName='CacheManager'):
"""setze alle collections auf cache = CacheManager"""
@@ -454,47 +544,55 @@ class ECHO_navigation(Folder):
if not obj:
obj = self
- entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_collection'],search_sub=1)
+ entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_collection','VLP_resource'],search_sub=1)
for entry in entries:
- #print entry[0]
entry[1].ZCacheable_setManagerId(managerName)
return "changed all CM in: "+self.title
- displayedMetaTypes=displayTypes
+
+ displayableMetaTypes=displayTypes
+
def getImageViewers(self):
"""images"""
viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
return viewers
def getR(self):
- """re"""
- return self.REQUEST
+ """re"""
+ return self.REQUEST
def __init__(self,id,title,pathToHierarchy):
"""init"""
self.id=id
self.title=title
self.pathToHierarchy=pathToHierarchy
-
+ self.displayedMetaTypes=displayTypes
+
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'ECHO_navigationConfigForm'},
{'label':'Cache','action':'ECHO_cacheManageForm'},
)
-
+ displayedMetaTypes=displayTypes
+
+ def getStorageManagerURL(self):
+ """returns the URL to the storagemanager"""
+ return getattr(self,"storageManagerURL",STORAGEMANAGER_URL_DEFAULT)
def ECHO_navigationConfigForm(self):
"""configForm"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_navigation.zpt')).__of__(self)
return pt()
- def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
+ def ECHO_navigationConfig(self,title,pathToHierarchy,storageManagerURL="",displayedMetaTypes=displayTypes,RESPONSE=None):
"""config"""
self.title=title
self.pathToHierarchy=pathToHierarchy
+ self.displayedMetaTypes=toList(displayedMetaTypes)[0:]
+ self.storageManagerURL=storageManagerURL
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -530,8 +628,9 @@ class ECHO_navigation(Folder):
# if not generate new hash
obj=objtemp
-
+
for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
+
x=keys[1]
if depth>1:
nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)
@@ -554,7 +653,7 @@ class ECHO_navigation(Folder):
def barFromHash(self,hash,start=None,sortField=None,location=None):
"""Erzeuge Navigations Element"""
- #print "hash",hash
+
listNav=[]
if not start:
temp=hash
@@ -566,7 +665,7 @@ class ECHO_navigation(Folder):
tempObj=self.pathToHierarchy[0:]
tempObj=re.sub("/",".",tempObj)
tempObj="self.aq_parent"+tempObj
- #print tempObj
+ #print tempObj
objtemp=eval(tempObj)
obj=objtemp
@@ -591,34 +690,41 @@ class ECHO_navigation(Folder):
#print "TEMP",temp,self.tempSorted(temp, field=sortField)
for x in self.tempSorted(temp, field=sortField):
-
+
if not temp[x][1].title == "":
if (temp[x][1].meta_type=="ECHO_sqlElement") or (temp[x][1].meta_type=="ECHO_ZCatalogElement"):
-
+
for z in temp[x][1].getNavList():
- listNav.append((z[0],z[1],None))
+ listNav.append((z[0],z[1],None,'',''))
else:
# add label falls existiert und nicht leer
if hasattr(temp[x][1],'label'):
- if not temp[x][1].label=='':
+
+ if not temp[x][1].getLabel()=='':
+ label=temp[x][1].getLabel()
+ else:
try:
- label=temp[x][1].label.encode('utf-8','ignore')
+ label=temp[x][1].getTitle()
except:
- label=temp[x][1].label
- else:
- label=temp[x][1].title.encode('utf-8')
+ logger("ECHO_Nav",logging.ERROR,"%s has neither getLabel nor getTile implemented"%temp[x][1].getId())
+ label=""
else:
- label=temp[x][1].title.encode('utf-8')
+ label=temp[x][1].getTitle()
+
if location:
+
loc=getattr(temp[x][1],'location','top')
if (loc==location):
- listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))
- else:
- listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))
+
+ listNav.append((label,createPath(self,self.absolute_url(),temp[x][1].absolute_url(relative=1))+getattr(temp[x][1],'queryString',''),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
+ else:
+
+ listNav.append((label,createPath(self,self.absolute_url(),temp[x][1].absolute_url(relative=1))+getattr(temp[x][1],'queryString',''),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
+ #print self.REQUEST
return listNav
def tempSorted(self,hash,field="weight"):
@@ -627,7 +733,10 @@ class ECHO_navigation(Folder):
for x in hash.keys():
#print hash[x][1]
if hasattr(hash[x][1],field):
- weight=getattr(hash[x][1],field)
+ try:
+ weight=int(getattr(hash[x][1],field))
+ except:
+ weight=getattr(hash[x][1],field)
#print weight
else:
weight=0
@@ -643,10 +752,21 @@ class ECHO_navigation(Folder):
def isSelectedPath(self,item):
"""test is path is already selected"""
+
+ testStr=re.sub("/index_html",'',self.REQUEST.get('URL',''))
+
+ if len(item)<2:
+ return 0
+ #falls exakte Uebereinstimmung dann immer 1
+ if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''):
+
+ return 1
+
+ found=re.search("\?(.*)",item[1])
- found=re.search("\?(.*)/",item[1])
if found:
temp=re.sub(" ","%20",found.group(0))
+
#print temp+"::"+self.REQUEST['QUERY_STRING']
if ("?"+self.REQUEST['QUERY_STRING'])==temp:
if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
@@ -670,8 +790,15 @@ class ECHO_navigation(Folder):
return 1
else:
return 0
+
-
+ def getPathStyle(self, item, style=""):
+ """returns a string with the given style + 'sel' if the path is already selected."""
+
+ if self.isSelectedPath(item):
+ return style + 'sel'
+ else:
+ return style
def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
@@ -700,8 +827,9 @@ class ECHO_navigation(Folder):
for key in self.tempSorted(temp):
description=temp[x][1].title
-
- url=createPath(self.absolute_url(),temp[key][1].absolute_url())
+
+
+ url=createPath(self,self.absolute_url(),temp[key][1].absolute_url(relative=1))
if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
html=html+startTag+"[%s]" % description+endTag
@@ -734,13 +862,13 @@ class ECHO_navigation(Folder):
#except:
# keys=""
-
+
return keys
def numberOfMainNavElements(self):
- """number of main elements"""
+ """number of main elements"""
- return len(self.barFromHash(self.createNavHash(0)))
+ return len(self.barFromHash(self.createNavHash(0)))
def startOfHierarchy(self,list):
splitted=self.pathToHierarchy.split("/")
@@ -752,10 +880,27 @@ class ECHO_navigation(Folder):
nr=0
return nr+1
+ def subNavStatic(self,obj):
+ """subnav" von self"""
+ def sortWeight(x,y):
+ x1=int(getattr(x[1],'weight','0'))
+ y1=int(getattr(y[1],'weight','0'))
+ return cmp(x1,y1)
+ print "obj",obj
+ subs=self.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes)
+ subret=[]
+
+ for x in subs:
+ if not(x[1].title==""):
+ subret.append(x)
+ subret.sort(sortWeight)
+ return subret
+
def secondNavElements(self):
- """Zweite Ordnung"""
+ """Zweite Ordnung Navigationselemente"""
hash=self.createNavHash(2,checkOnly="no")
+
actual_url=self.REQUEST['URL']
ult_temp=re.sub(self.absolute_url(),"",actual_url)
@@ -763,14 +908,14 @@ class ECHO_navigation(Folder):
splitted=ult_temp.split("/")
- #print "AU",self.absolute_url(),splitted
- #start=[splitted[2]] #orig
+ #print "AU",self.absolute_url(),splitted
+ #start=[splitted[2]] #orig
startNr= self.startOfHierarchy(splitted)
- start=[splitted[startNr]]
-
+ start=[splitted[startNr]]
+
#print start
-
+
keys=self.barFromHash(hash,start=start)
@@ -796,7 +941,7 @@ class ECHO_navigation(Folder):
#start=splitted[2:order+1] #orig
startNr= self.startOfHierarchy(splitted)
#print startNr
- start=splitted[startNr:order+startNr-1]
+ start=splitted[startNr:order+startNr-1]
#print start
keys=self.barFromHash(hash,start=start)
@@ -832,7 +977,7 @@ class ECHO_navigation(Folder):
def manage_addECHO_navigationForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_navigation.zpt')).__of__(self)
return pt()
def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
@@ -847,15 +992,26 @@ def manage_addECHO_navigation(self,id,ti
-def createPath(url1,url2):
- temp1=url1.split("/")
- temp2=url2.split("/")
- for test in temp1:
- if temp2[0]==test:
+def createPath(self,url1,url2):
+ #bugfix in absolute_url, ploetzlich erschein in absolute_url der physikalische pfad.
+
+ if self.REQUEST.has_key('VirtualRootPhysicalPath'):
+ vp="/".join(self.REQUEST['VirtualRootPhysicalPath'])
+ if (len(vp)>0):
+ if vp[0]=="/":
+ vp=vp[1:]
+
+ url2=url2.replace(vp+"/",'')
+ else:
+ temp1=url1.split("/")
+ temp2=url2.split("/")
+ for test in temp1:
+ if temp2[0]==test:
del temp2[0]
-
- #print "CP:"+url1+"::"+url2+"::"+url1+"/"+string.join(temp2,"/")
- return url1+"/"+string.join(temp2,"/")
+
+ url2= string.join(temp2,"/")
+
+ return url1+"/"+url2
def sortWeight(x,y):
#print x[1],y[1]