From ab444657ff959d975d84babeb9c17ae05752f9da Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Sat, 21 May 2011 10:41:57 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20V3.4-BUG-FIX=20to=20HEAD=20=20=20=2025?= =?UTF-8?q?384:=20ALF-5352=20-=20user=20usages=20=20=20=20-=20re-apply=20r?= =?UTF-8?q?19862=20(ALF-713=20fix)=20that=20was=20lost=20(probably=20due?= =?UTF-8?q?=20to=20merge=20conflict)=20=20=20=2025440:=20Merged=20DEV/TEMP?= =?UTF-8?q?ORARY=20to=20V3.4-BUG-FIX=20=20=20=20=20=20=2025232:=20ALF-4300?= =?UTF-8?q?:=20DB2:=20Review=20schema=20(eg.=20VARCHAR=20columns)=20with?= =?UTF-8?q?=20respect=20to=20multi-byte=20support=20(when=20using=20DB2=20?= =?UTF-8?q?/=20UTF-8)=20=20=20=20=20=20=2025371:=20ALF-4300:=20DB2:=20Revi?= =?UTF-8?q?ew=20schema=20(eg.=20VARCHAR=20columns)=20with=20respect=20to?= =?UTF-8?q?=20multi-byte=20support=20(when=20using=20DB2=20/=20UTF-8)=20?= =?UTF-8?q?=20=20=20=20=20=20-=20All=20VARCHAR=20fields=20quadrupled=20for?= =?UTF-8?q?=20DB2=20relative=20to=20MySQL=20to=20support=20UTF-8=20charact?= =?UTF-8?q?er=20sets=20=20=20=20=20=20=20-=20=E2=80=98varchar-field-sizes-?= =?UTF-8?q?quadruple-increasing.sql=E2=80=99=20introduced=20by=20patch=20?= =?UTF-8?q?=20=20=20=20=20=20-=20Minor=20conflict=20anticipated=20on=20Alf?= =?UTF-8?q?rescoSchemaUpdate-2.1-A--to--2.2-ACL.sql;=20ensure=20larger=20c?= =?UTF-8?q?olumn=20size=20is=20kept.=20=20=20=20=20=20=20-=20Schema=20numb?= =?UTF-8?q?er=20now=20at=204201.=20=20=20=2025444:=20Fix=20ALF-6689:=20WQS?= =?UTF-8?q?:=20Incorrect=20work=20of=20email=20field=20on=20contact=20page?= =?UTF-8?q?=20=20=20=20Fix=20ALF-7058:=20WQS:=20Blog=20article=20page=20of?= =?UTF-8?q?=20custom=20type=20gives=20an=20error=20=20=20=2025447:=20Fix?= =?UTF-8?q?=20ALF-5198:=20WQS:=20Error=20while=20Name=20field=20filled=20w?= =?UTF-8?q?ith=20more=20than=2070=20characters=20or=20special=20characters?= =?UTF-8?q?=20=20=20=2025506:=20ALF-6281:=20Actions=20for=20folder=20do=20?= =?UTF-8?q?not=20work=20(Quickr=20connector=20plug-in)=20=20=20=2025534:?= =?UTF-8?q?=20ALF-646:=20Alfresco=20Logo=20isn't=20displayed=20in=20SPP=20?= =?UTF-8?q?Open=20window=20=20=20=2025590:=20Merged=20DEV/TEMPORARY=20to?= =?UTF-8?q?=20V3.4-BUG-FIX=20=20=20=20=20=20=2025582:=20ALF-6282:=20Incorr?= =?UTF-8?q?ect=20behavior=20of=20Propertiesa=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?-=20Add=20"Created",=20"Modified"=20and=20"Label"=20tags=20to?= =?UTF-8?q?=20document/folder=20entries=20in=20AlfrescoAtomBasedFeedServic?= =?UTF-8?q?eImpl.createEntry()=20=20=20=2025595:=20Merged=20DEV/TEMPORARY?= =?UTF-8?q?=20to=20V3.4-BUG-FIX=20=20=20=20=20=20=2025592:ALF-7194:=20Savi?= =?UTF-8?q?ng=20a=20Excel=20file=20with=20CIFS=20reset=20permissions.=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20-=20Copy=20value=20of=20"Inherit=20P?= =?UTF-8?q?arent=20Space=20Permissions"=20flag=20to=20the=20new=20node=20i?= =?UTF-8?q?n=20ContentDiskDriver.cloneNode()=20method.=20=20=20=2025635:?= =?UTF-8?q?=20Merged=20DEV/TEMPORARY=20to=20V3.4-BUG-FIX=20=20=20=20=20=20?= =?UTF-8?q?=2025574:=20ALF-6288:=20Action=20'Send=20Link'=20is=20not=20wor?= =?UTF-8?q?ked=20=20=20=20=20=20=2025616:=20ALF-6288:=20Action=20'Send=20L?= =?UTF-8?q?ink'=20is=20not=20worked=20=20=20=20=20=20=20=20=20=20-=20Alfre?= =?UTF-8?q?scoQuickrPathHelper.getNodePath()=20method=20was=20modified=20t?= =?UTF-8?q?o=20return=20full=20node=20path,=20e.g.=20"/Company=20Home/Site?= =?UTF-8?q?s/TestSite/documentLibrary/test.odt".=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20-=20AlfrescoQuickrPathHelper.removeSlashesAndRoot(String?= =?UTF-8?q?=20value)=20method=20was=20renamed=20to=20AlfrescoQuickrPathHel?= =?UTF-8?q?per.resolveNodePath(String=20path,=20boolean=20isRelative).=20?= =?UTF-8?q?=20=20=2025638:=20Merged=20DEV/TEMPORARY=20to=20V3.4-BUG-FIX=20?= =?UTF-8?q?(with=20feedback=20from=20Gary)=20=20=20=20=20=20=2025376:=20AL?= =?UTF-8?q?F-684:=20Ftp=20requests=20to=20the=20IPv6=20resolved=20hostname?= =?UTF-8?q?=20are=20failing=20=20=20=20=20=20=20=20=20=20The=20ftp.ipv6.en?= =?UTF-8?q?abled=20property=20was=20removed,=20and=20a=20ServerSocket=20is?= =?UTF-8?q?=20opened=20without=20InetAddress=20parameter.=20It=20allows=20?= =?UTF-8?q?Java=20to=20determine=20if=20a=20IPv6=20is=20used=20and=20bind?= =?UTF-8?q?=20"::"=20any=20local=20address=20to=20the=20server=20socket.?= =?UTF-8?q?=20It=20allows=20to=20connect=20to=20the=20Alfresco=20FTP=20usi?= =?UTF-8?q?ng=20both=20IPv4=20and=20IPv6=20addresses=20regardless=20to=20s?= =?UTF-8?q?erver=20OS.=20=20=20=2025639:=20ALF-5115:=20Removed=20circular?= =?UTF-8?q?=20dependency=20from=20non-continuous=20builds=20=20=20=20-=20N?= =?UTF-8?q?o=20need=20to=20use=20-f=20continuous.xml=20anymore=20when=20bu?= =?UTF-8?q?ilding=20enterprise=20or=20community=20=20=20=20-=20Added=20ass?= =?UTF-8?q?emble-command-extras=20stub=20to=20community=20build.xml,=20ove?= =?UTF-8?q?rridden=20by=20enterprise=20build.xml=20and=20called=20by=20con?= =?UTF-8?q?tinuous.xml=20=20=20=2025699:=20MERGE=20DEV=20to=20V3.4-BUG-FIX?= =?UTF-8?q?=20=20=20=20=20=20ALF-5745=20:=20AVMTemplateNode=20d:date=20pro?= =?UTF-8?q?perties=20are=20wrong.=20=20=20=2025770:=20Investigation=20test?= =?UTF-8?q?s=20for=20ALF-6904:=20Wrong=20behaviour=20when=20overriding=20a?= =?UTF-8?q?=20constraint=20in=20content=20model=20=20=20=2025774:=20Fixed?= =?UTF-8?q?=20ALF-7193:=20XAM=20Connector:=20xam.archive.nodePropertiesToW?= =?UTF-8?q?rite=20must=20not=20make=20properties=20mandatory=20=20=20=20?= =?UTF-8?q?=20-=20The=20property=20had=20to=20be=20set=20to=20null=20-=20a?= =?UTF-8?q?chievable=20because=20it=20is=20MLText=20=20=20=20=20-=20Added?= =?UTF-8?q?=20full=20d:mltext=20expansion=20=20=20=20=20-=20Added=20double?= =?UTF-8?q?=20checks=20for=20nulls=20creeping=20in=20=20=20=2025851:=20Fix?= =?UTF-8?q?ed=20ALF-7381:=20OOM=20when=20Debug=20logging=20on=20ReferenceC?= =?UTF-8?q?ountingReadOnlyIndexReaderFactory=20=20=20=20=20-=20Use=20a=20W?= =?UTF-8?q?eakHashMap=20=20=20=2025853:=20Merged=20DEV/TEMPORARY=20to=20V3?= =?UTF-8?q?.4-BUG-FIX=20=20=20=20=20=20=2025852:=20ALF-6373:=20Preview=20i?= =?UTF-8?q?sn't=20generated=20for=20content=20added=20by=20quickr=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Added=20AlfrescoQuickrDocumentHelper.getMi?= =?UTF-8?q?meType(NodeRef=20fileRef)=20method=20that=20resolves=20the=20mi?= =?UTF-8?q?me=20type=20using=20the=20node=20name.=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Set=20the=20mime=20type=20of=20nodes=20created=20in=20Alf?= =?UTF-8?q?rescoDocumentServiceImpl=20and=20AlfrescoAtomBasedFeedServiceIm?= =?UTF-8?q?pl.=20=20=20=2025860:=20Resolve=20ALF-7286:=20CMIS=20UP=20link?= =?UTF-8?q?=20for=20document=20doesn't=20contain=20all=20parents=20=20=20?= =?UTF-8?q?=2025866:=20Fix=20for=20ALF-6312=20=20=20=20=20=20-=20moved=20c?= =?UTF-8?q?onfiguration=20to=20the=20correct=20file=20to=20be=20picked=20u?= =?UTF-8?q?p=20by=20Spring=20Surf=20=20=20=2025870:=20Merged=20DEV/TEMPORA?= =?UTF-8?q?RY=20to=20V3.4-BUG-FIX=20=20=20=20=20=20=2025840:=20ALF-6279:?= =?UTF-8?q?=20Failed=20to=20save=20properties=20in=20Symphony=20documents.?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20AlfrescoDocumentServiceImpl.setDo?= =?UTF-8?q?cType()=20method=20was=20modified=20to=20check=20for=20existenc?= =?UTF-8?q?e=20of=20document=20type=20in=20provided=20ClbDraft=20object.?= =?UTF-8?q?=20=20=20=2025908:=20Set=203.4.2=20revision=20=20=20=2025931:?= =?UTF-8?q?=20Fix=20for=20ALF-6565:=20Explorer=20UI=20allows=20duplication?= =?UTF-8?q?=20of=20Replication=20targets=20which=20in=20effects=20breaks?= =?UTF-8?q?=20Alfresco=20=20=20=2025987:=20DOC-238:=20Sharepoint=20(VTI)?= =?UTF-8?q?=20Protocol=20Configuration=20Documentation=20is=20outdated=20-?= =?UTF-8?q?=20have=20added=20comments=20in=20the=20properties=20file=20to?= =?UTF-8?q?=20indicate=20what=20they=20do=20=20=20=2025994:=20WQS:=20Added?= =?UTF-8?q?=20a=20little=20more=20information=20to=20the=20log=20message?= =?UTF-8?q?=20when=20a=20404=20is=20returned=20=20=20=2026003:=20ALF-7663:?= =?UTF-8?q?=20NPEs=20when=20using=20PermissionService=20with=20AVM=20store?= =?UTF-8?q?s=20=20=20=20-=20added=20unit=20tests=20for=20regression=20test?= =?UTF-8?q?ing=20=20=20=20-=20no=20longer=20an=20issue=20=20=20=2026004:?= =?UTF-8?q?=20ALF-7662:=20AVM=20permissions=20-=20access=20denied=20except?= =?UTF-8?q?ion=20when=20trying=20to=20create=20file=20in=20a=20layered=20d?= =?UTF-8?q?irectory,=20when=20no=20explicit=20permissions=20set=20(on=20ro?= =?UTF-8?q?ot=20dir=20node)=20=20=20=20-=20test=20passes=20on=203.4.2=20-?= =?UTF-8?q?=20updated=20test=20to=20reflect=202.1=20state=20=20=20=2026011?= =?UTF-8?q?:=20ALF-6372=20Now=20when=20the=20package=20manager=20adds=20it?= =?UTF-8?q?ems=20to=20a=20package=20it=20does=20not=20mark=20the=20items?= =?UTF-8?q?=20as=20modified.=20=20=20=2026026:=20ALF-6350:=20Add=20support?= =?UTF-8?q?=20for=20Ideographic=20Space=20to=20the=20Full=20Text=20Search?= =?UTF-8?q?=20-=20=20=20=20-=20added=20full=20set=20of=20Unicode=20charact?= =?UTF-8?q?ers=20for=20letters=20and=20digits=20(0x0000=20-=200xFFFF)=20?= =?UTF-8?q?=20=20=20-=20added=20fill=20set=20of=20Unicode=20whitespace=20?= =?UTF-8?q?=20=20=20-=20class=20to=20generate=20Unicode=20types=20->=20ran?= =?UTF-8?q?ges=20=20=20=20-=20upgraded=20antlr=20to=203.3.=20(required=20t?= =?UTF-8?q?o=20resolve=203.2=20bug)=20=20=20=20-=20fixed=20Lexer=20and=20p?= =?UTF-8?q?arser=20test=20=20=20=20-=20much=20still=20depends=20on=20the?= =?UTF-8?q?=20tokeniser=20....=20=20=20=2026048:=20Fix=20for=20ALF-7507=20?= =?UTF-8?q?-=20Manage=20Deleted=20Items=20-=20Recover=20All=20Icon=20Missi?= =?UTF-8?q?ng=20=20=20=2026050:=20Fixed=20failing=20tests=20WorkflowFormPr?= =?UTF-8?q?ocessorTest=20and=20TaskFormProcessorTest.=20=20=20=2026068:=20?= =?UTF-8?q?Resolve=20ALF-7342=20-=20dynamic=20Models=20-=20unable=20to=20a?= =?UTF-8?q?dd=20new=20properties=20to=20an=20aspect=20if=20the=20aspect=20?= =?UTF-8?q?is=20a=20mandatory=20aspect=20of=20another=20aspect=20=20=20=20?= =?UTF-8?q?26082:=20WQS:=20Improved=20debug-level=20logging=20to=20track?= =?UTF-8?q?=20WQS-to-repo=20interaction=20better.=20=20=20=2026094:=20Some?= =?UTF-8?q?=20formatting=20=20=20=2026095:=20Fixed=20ALF-7531:=20alfresco.?= =?UTF-8?q?jgroups.bind=5Finterface=20is=20not=20taken=20into=20account=20?= =?UTF-8?q?=20=20=20=20-=20Added=20'bind=5Finterface'=20property=20to=20TC?= =?UTF-8?q?P=20config=20=20=20=20=20-=20Value=20injected=20into=20system?= =?UTF-8?q?=20properties:=20alfresco.jgroups.bind=5Finterface=20=20=20=202?= =?UTF-8?q?6130:=20Fix=20for=20CIFS=20multitenancy=20not=20working.=20ALF-?= =?UTF-8?q?6816.=20=20=20=20Need=20to=20search=20the=20global=20share=20li?= =?UTF-8?q?st=20for=20admin=20named=20pipe=20shares.=20=20=20=2026131:=20F?= =?UTF-8?q?ix=20for=20CIFS=20cut/paste=20write-protected=20error.=20ALF-18?= =?UTF-8?q?22=20=20=20=2026132:=20Solairs/NFS=20ReadDir=20issue,=20cannot?= =?UTF-8?q?=20list=20folder=20more=20than=20once.=20ALF-5386=20=20=20=20Se?= =?UTF-8?q?arch=20resume=20id/cookie=20value=20of=20zero=20has=20special?= =?UTF-8?q?=20meaning=20for=20NFS.=20=20=20=2026133:=20Changed=20FTP=20ret?= =?UTF-8?q?urn=20status=20for=20MKD=20command=20to=20257,=20for=20RFC=20co?= =?UTF-8?q?mpliance.=20ALF-7501.=20=20=20=2026136:=20Fix=20for=20FTP=20CWD?= =?UTF-8?q?-MKD-CWD=20sequence=20failing.=20ALF-7530=20=20=20=20Trim=20fil?= =?UTF-8?q?esystem=20path=20to=20make=20sure=20there=20is=20no=20trailing?= =?UTF-8?q?=20backslash.=20=20=20=2026144:=20Merged=20V3.4=20to=20V3.4-BUG?= =?UTF-8?q?-FIX=20=20=20=20=20=20=2025890:=20Fix=20for=20ALF-5796=20-=20It?= =?UTF-8?q?'s=20impossible=20to=20add=20tag=20in=20Japanese=20language=20(?= =?UTF-8?q?IE=20specific)=20=20=20=20=20=20=2025891:=20Fixes:=20ALF-7363?= =?UTF-8?q?=20(updated=20JA=20translation)=20=20=20=20=20=20=2025894:=20Fi?= =?UTF-8?q?xed=20Legal=20and=20License=20url=20in=20About=20dialog=20=20?= =?UTF-8?q?=20=20=20=20=2025896:=20ALF-6476=20-translation=20on=20Transfer?= =?UTF-8?q?=20Target=20configuration=20=20=20=20=20=20=2025899:=20First=20?= =?UTF-8?q?cut=20of=20French=20transfer=20properties.=20=20Mostly=20Englis?= =?UTF-8?q?h!=20but=20has=203=20lines=20of=20French.=20=20=20=20=20=20=202?= =?UTF-8?q?5900:=20Fix=20for=20ALF-6916:=20More=20Deployment=20Reports=20a?= =?UTF-8?q?ction=20causes=20an=20error=20=20=20=20=20=20=2025901:=20Fixes:?= =?UTF-8?q?=20ALF-6847=20(Italian=20Translation)=20=20=20=20=20=20=2025902?= =?UTF-8?q?:=20Fixes:=20ALF-6861=20(incorrectly=20encoded=20German=20chara?= =?UTF-8?q?cter)=20=20=20=20=20=20=2025904:=20Fixes:=20ALF-6755=20(transla?= =?UTF-8?q?tion=20quoting=20error)=20=20=20=20=20=20=2025911:=20Fixes:=20A?= =?UTF-8?q?LF-6478=20-=20French=20translation=20correction=20=20=20=20=20?= =?UTF-8?q?=20=2025913:=20Fixes:=20ALF-6334=20and=20ALF-6477=20(Profile=20?= =?UTF-8?q?Edit=20style=20issues=20-=20makes=20mark=20up=20consistent,=20c?= =?UTF-8?q?lears=20floats=20to=20allow=20for=20foreign=20languages=20being?= =?UTF-8?q?=20a=20tad=20more=20verbose=20than=20English=20and=20adjusts=20?= =?UTF-8?q?padding=20to=20help=20input=20boxes=20line=20up.=20=20=20=20=20?= =?UTF-8?q?=20=2025914:=20Help=20URL=20for=203.4=20enterprise=20docs=20=20?= =?UTF-8?q?=20=20=20=20=2025915:=20Updates=20TinyMCE=20translation=20as=20?= =?UTF-8?q?requested=20in=20ALF-6486.=20=20=20=20=20=20=2025916:=20Updated?= =?UTF-8?q?=20support=20URL=20in=20readme=20=20=20=20=20=20=2025917:=20Fix?= =?UTF-8?q?es:=20ALF-6482,=20wrong=20word=20order=20in=20FR=20has=20been?= =?UTF-8?q?=20corrected.=20=20=20=20=20=20=2025919:=20Fixes:=20ALF-6655=20?= =?UTF-8?q?updated=20to=20allow=20enough=20space=20for=20verbose=20languag?= =?UTF-8?q?es=20(e.g.=20FR,=20ES)=20=20=20=20=20=20=2025925:=20Fix=20for?= =?UTF-8?q?=20ALF-6885:=20alfresco-enterprise-3.4.0.zip=20package=20has=20?= =?UTF-8?q?2=20issues=20with=20apply=5Famps.sh=20=20=20=20=20=20=2025936:?= =?UTF-8?q?=20ALF-6469=20-=20transfer=20folders=20internationalized=20=20?= =?UTF-8?q?=20=20=20=20=2025941:=20Merged=20BRANCHES/DEV/dwebster/=20to=20?= =?UTF-8?q?BRANCHES/V3.4:=20=20=20=20=20=20=20=20=20=2025939:=20Latest=20J?= =?UTF-8?q?A=20update=20from=20Translators,=20received:=202011-02-28=20=20?= =?UTF-8?q?=20=20=20=20=2025943:=20Merged=20BRANCHES/DEV/dwebster/=20to=20?= =?UTF-8?q?BRANCHES/V3.4:=20=20=20=20=20=20=20=20=20=2025942:=20Language?= =?UTF-8?q?=20updates=20for=20property=20string=20changes=20and=20addition?= =?UTF-8?q?s=20between=203.4.0=20and=203.4.1=20=20=20=20=20=20=2025946:=20?= =?UTF-8?q?ALF-7191:=20Generate=20duplicate=20=5Fen=20resource=20bundles,?= =?UTF-8?q?=20using=20location=20of=20=5Ffr=20bundles=20as=20a=20guide=20f?= =?UTF-8?q?or=20ALL=20bundles=20under=20alfresco=20and=20share=20WEB-INF/c?= =?UTF-8?q?lasses=20=20=20=20=20=20=2025947:=20ALF-7191:=20Reverse=20accid?= =?UTF-8?q?entally=20committed=20changes=20to=20WebDAV=20in=2025946!=20=20?= =?UTF-8?q?=20=20=20=20=2025949:=20Fixes:=20ALF-6521=20and=20ALF-6493=20(S?= =?UTF-8?q?ite=20discussion's=20handling=20of=20tags=20with=20special=20ch?= =?UTF-8?q?aracters=20in=20them)=20=20=20=20=20=20=2025950:=20Fixes:=20ALF?= =?UTF-8?q?-6489=20-=20encodes=20the=20content's=20name=20to=20make=20it?= =?UTF-8?q?=20safe=20for=20a=20URL.=20=20=20=20=20=20=2025951:=20Fixes:=20?= =?UTF-8?q?ALF-6487=20Adjusts=20styling=20for=20rename=20panel=20=20=20=20?= =?UTF-8?q?=20=20=2025954:=20ALF-7191=20-=20Generate=20=5Fen=20bundles=20f?= =?UTF-8?q?or=20all=20message=20bundles=20for=20Explorer=20and=20Share=20-?= =?UTF-8?q?=20using=20known=20location=20of=20message=20bundles=20=20=20?= =?UTF-8?q?=20=20=20=2025956:=20Allow=20a=20bit=20of=20leeway=20with=20aud?= =?UTF-8?q?it=20timing=20during=20delete=20tests=20=20=20=20=20=20=2025957?= =?UTF-8?q?:=20Fixed=20ALF-7341:=20Upload=20performance=20degradation=20wh?= =?UTF-8?q?en=20uploading=20contents=20to=20folders=20with=20content=20rul?= =?UTF-8?q?es=20applied.=20=20=20=20=20=20=20=20=20=20-=20Action=20executi?= =?UTF-8?q?ons=20were=20being=20recorded=20by=20the=20ActionTrackingServic?= =?UTF-8?q?e=20for=20all=20actions=20=20=20=20=20=20=20=20=20=20-=20Post-c?= =?UTF-8?q?ommit=20updates=20of=20the=20action=20node=20was=20reducing=20p?= =?UTF-8?q?erformance=20=20=20=20=20=20=20=20=20=20-=20Added=20'trackStatu?= =?UTF-8?q?s'=20to=20ActionExecuter,=20ActionDefinition=20and=20Action=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20-=20Default=20'trackStatus'=20is=20f?= =?UTF-8?q?alse;=20exceptions:=20'replicationActionExecutor'=20and=20'comm?= =?UTF-8?q?it-transfer'=20=20=20=20=20=20=20=20=20=20-=20Adjusted=20tests?= =?UTF-8?q?=20accordingly=20=20=20=20=20=20=20=20=20=20-=20General=20clean?= =?UTF-8?q?up=20around=20modifications=20=20=20=20=20=20=2025964:=20ALF-56?= =?UTF-8?q?25=20-=20When=20viewing=20properties=20in=20version=20history?= =?UTF-8?q?=20hitting=20close=20results=20in=20loop=20=20=20=20=20=20=2025?= =?UTF-8?q?970:=20Merged=20BRANCHES/DEV/V3.4-BUG-FIX=20to=20BRANCHES/V3.4:?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=2025967:=20Fix=20ALF-7440:=20WQS:?= =?UTF-8?q?=20commons-pool=20library=20has=20been=20upgraded,=20but=20WQS?= =?UTF-8?q?=20build=20properties=20have=20not=20been=20changed=20according?= =?UTF-8?q?ly=20=20=20=20=20=20=2025971:=20ALF-7441:=20Help=20URLs=20point?= =?UTF-8?q?ing=20to=20new=20doc=20system=20(1=20of=202)=20=20=20=20=20=20?= =?UTF-8?q?=2025972:=20ALF-7441:=20Help=20URLs=20pointing=20to=20new=20doc?= =?UTF-8?q?=20system=20(2=20of=202)=20=20=20=20=20=20=2025974:=20Reverted?= =?UTF-8?q?=20rev=2025964=20-=20as=20fix=20is=20scheduled=20for=203.4.2=20?= =?UTF-8?q?=20=20=20=20=20=2025979:=20Disabling=20intermittent=20failing?= =?UTF-8?q?=20unit=20test.=20ALF-7443=20logged.=20=20=20=20=20=20=2025980:?= =?UTF-8?q?=20Merged=20V3.4-BUG-FIX=20to=20V3.4=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=2025978:=20ALF-7394=20-=20Alfresco=20Network=20dashlet,=20now?= =?UTF-8?q?=20Alfresco=20Support=20information=20=20=20=20=20=20=2026014:?= =?UTF-8?q?=20ALF-7087=20-=20Cannot=20override=20webscript=20files=20in=20?= =?UTF-8?q?case=20of=20using=20jboss=205.1GA=20=20=20=20=20=20=2026024:=20?= =?UTF-8?q?ALF-7466=20-=20Links=20do=20not=20appear=20correctly=20in=20the?= =?UTF-8?q?=20management=20Console=20(RM)=20=20=20=20=20=20=2026036:=20ALF?= =?UTF-8?q?-6403:=20Merged=20V3.4=20to=20V3.4=20(lost=20revision)=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=2025627:=20Fixes=20ALF-7222:=20Updated=20lin?= =?UTF-8?q?ux=20installer=20window=20height=20(with=20taller=20image=20to?= =?UTF-8?q?=20hide=20additonal=20background)=20=20=20=20=20=20=2026039:=20?= =?UTF-8?q?Fix=20intermittent=20failures=20in=20InviteServiceTest.tearDown?= =?UTF-8?q?()=20=20=20=20=20=20=2026040:=20Fix=20intermittent=20failures?= =?UTF-8?q?=20in=20InviteServiceTest.setUp()=20=20=20=20=20=20=2026043:=20?= =?UTF-8?q?Sync=20up=20run-junit-test=20with=20junit=20macros=20so=20that?= =?UTF-8?q?=20it=20can=20be=20used=20to=20run=20unit=20tests=20in=20an=20e?= =?UTF-8?q?nterprise=20environment=20(e.g.=20DB2=20/=20Oracle)=20=20=20=20?= =?UTF-8?q?=20=20=2026044:=20Possibly=20fix=20intermittent=20TransferServi?= =?UTF-8?q?ceImplTest=20failures=20by=20using=20org.alfresco.repo.transact?= =?UTF-8?q?ion.RetryingTransactionInterceptor=20=20=20=20=20=20=2026052:?= =?UTF-8?q?=20Do=20not=20wait=20indefinitely=20for=20a=20heartbeat=20in=20?= =?UTF-8?q?HeartBeatTest.=20A=20broken=20heartbeat=20would=20cause=20the?= =?UTF-8?q?=20build=20to=20hang=20forever!=20=20=20=20=20=20=2026056:=20Me?= =?UTF-8?q?rged=20V3.4-TEAM=20to=20V3.4=20=20=20=20=20=20=20=20=20=2026053?= =?UTF-8?q?:=20Added=20in=20loop=20to=20wait=20for=20asynchronous=20post-f?= =?UTF-8?q?ailure=20auditing=20(ALF-3055)=20=20=20=20=20=20=2026077:=20Upp?= =?UTF-8?q?ed=20LOGFILSIZ=20to=20avoid=20failures=20in=20unit=20tests=20wi?= =?UTF-8?q?th=20large=20transactions=20on=20DB2=20=20=20=20=20=20=2026084:?= =?UTF-8?q?=20Avoid=20intermittent=20test=20failures=20in=20AbstractTestFo?= =?UTF-8?q?rmRestApi=20by=20using=20retrying=20transactions=20=20=20=20=20?= =?UTF-8?q?=20=2026096:=20Correction=20to=20DB2=20drop=20/=20create=20comm?= =?UTF-8?q?ands=20=20=20=20=20=20=2026097:=20Fixes:=20ALF-7102,=20typo=20i?= =?UTF-8?q?n=20property=20string.=20=20=20=20=20=20=2026100:=20Merged=20V3?= =?UTF-8?q?.4-TEAM=20to=20V3.4=20=20=20=20=20=20=20=20=20=2025985:=20Anoth?= =?UTF-8?q?er=20cycle=20of=20fixing=20installer=20from=20Win=20builds.=20?= =?UTF-8?q?=20Still=20waiting=20for=20official=20fix=20from=20Bitrock.=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=2026067:=20Fixes=20for=20installer=20b?= =?UTF-8?q?uilds=20on=20Windows=20=20=20=20=20=20=2026102:=20Attempt=20to?= =?UTF-8?q?=20avoid=20intermittent=20failures=20in=20TaggingServiceImplTes?= =?UTF-8?q?t=20by=20upping=20wait=20time=20=20=20=20=20=20=2026109:=20Anot?= =?UTF-8?q?her=20go=20at=20executing=20the=20db2=20creation=20statements?= =?UTF-8?q?=20synchronously=20through=20db2cmd=20=20=20=20=20=20=2026111:?= =?UTF-8?q?=20ALF-6764=20-=20Copyright=20year=20on=20Share=20login=20page?= =?UTF-8?q?=20out=20of=20date=20=20=20=20=20=20=2026127:=20Merged=20V3.4-T?= =?UTF-8?q?EAM=20to=20V3.4=20=20=20=20=20=20=20=20=20=2026120:=20Fix=20pos?= =?UTF-8?q?tgres.bki=20on=20Win=20builds=20=20=20=20=20=20=2026142:=20Merg?= =?UTF-8?q?ed=20PATCHES/V3.4.0=20to=20V3.4=20=20=20=20=20=20=20=20=20=2025?= =?UTF-8?q?999:=20ALF-7377:=20Validate=20and=20reject=20partial=20WebDAV?= =?UTF-8?q?=20requests=20sometimes=20produced=20by=20NetDrive=20=20=20=202?= =?UTF-8?q?6145:=20Merged=20V3.4=20to=20V3.4-BUG-FIX=20(RECORD=20ONLY)=20?= =?UTF-8?q?=20=20=20=20=20=2026143:=20Merged=20PATCHES/V3.4.0=20to=20V3.4?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=2026005:=20Merged=20V3.4-BUG-FIX=20?= =?UTF-8?q?to=20PATCHES/V3.4.0=20=20=20=20=20=20=20=20=20=20=20=20=2026002?= =?UTF-8?q?:=20ALF-7282=20Updated=20NodeListConverter=20so=20that=20it=20n?= =?UTF-8?q?ow=20implements=20the=20method=20revert(Object,=20ProcessDefini?= =?UTF-8?q?tion)=20=20=20=2026153:=20Fix=20for=20CIFS=20concurrent=20folde?= =?UTF-8?q?r=20listing=20returns=20wrong=20list=20of=20files.=20ALF-6385.?= =?UTF-8?q?=20=20=20=20Synchronize=20the=20VirtualCircuit.allocateSearchSl?= =?UTF-8?q?ot()=20method=20and=20put=20a=20marker=20object=20in=20the=20al?= =?UTF-8?q?located=20slot=20so=20it=20does=20not=20get=20reused=20before?= =?UTF-8?q?=20the=20real=20search=20is=20put=20into=20the=20slot.=20=20=20?= =?UTF-8?q?=2026156:=20Merged=20/BRANCHES/DEV/BELARUS/V3.3-2010=5F12=5F20?= =?UTF-8?q?=20to=20BRANCHES/DEV/V3.4-BUG-FIX:=20=20=20=20=20=20=2024902:?= =?UTF-8?q?=20ALF-5985:=20Users=20with=20an=20apostrophe=20in=20their=20us?= =?UTF-8?q?ername=20cannot=20cancel=20their=20own=20workflow=20no=20action?= =?UTF-8?q?=20button=20shown=20=20=20=2026177:=20ALF-6686=20-=20DOCLIB=20-?= =?UTF-8?q?=20add=20'add-default-resource'=20as=20enhancement.=20=20=20=20?= =?UTF-8?q?26181:=20Fix=20for=20ALF-7179=20-=20NPE=20on=20Check=20in=20act?= =?UTF-8?q?ion=20when=20define=20lockable=20aspect=20as=20mandatory.=20=20?= =?UTF-8?q?=20=2026182:=20ALF-3145=20-=20Caller=20of=20CopyBehaviorCallbac?= =?UTF-8?q?k.getCopyProperties=20should=20ensure=20modifiability=20of=20pr?= =?UTF-8?q?operties=20map=20=20=20=20=20=20-=20Copy=20Service=20was=20alre?= =?UTF-8?q?ady=20done.=20=20=20Merged=20similar=20changes=20to=20CopyBehav?= =?UTF-8?q?iourCallback.=20=20=20=2026185:=20ALF-7238=20-=20Value=20for=20?= =?UTF-8?q?$fieldHtmlId=20changes=20after=20metadata=20refresh=20=20=20=20?= =?UTF-8?q?26196:=20Fixed=20ALF-3383:=20range=20slider=20does=20not=20hono?= =?UTF-8?q?r=20xs:fractionDigits=20=20=20=2026202:=20ALF-6947:=20RM=20LOV?= =?UTF-8?q?=20Constraint=20values=20are=20not=20returned=20in=20alphabetic?= =?UTF-8?q?=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * RM list of values are now shown in the UI as ordered * this can be overridden in the constrant definition but isn't exposed in the admin UI 26206: Fixed ALF-6538 "My Tasks Dashlet needs to use Page URL" (code contribution from Jeff Potts) 26211: Fixed ALF-1289 "Search for groups on "Add Group" form works incorrectly" 26213: Fixes ALF-6697: Updates to flash and html uploaders to prevent files named with (Windows) illegal characters from being uploaded 26220: Fixed CopyServicePolicies javadoc 26221: Fixed ALF-4926: Incorrect behavior of update and move rule for the same folder - Pulled rule-specific code out of FileFolderService - Added detection for new nodes and renamed nodes in current transaction - New nodes will only fire inbound properties, renamed nodes won't fire outbound, etc - Added in coverage tests: - testCheckThatModifyNameDoesNotTriggerInboundRule - testCheckThatModifyNameDoesNotTriggerOutboundRule - testUpdateAndMoveRuleOnSameFolder - Requires regression tests of ALF-4846 and rule-based test cases - Inbound, update and outbound have to be respected for all clients 26222: Confirmed 3.4 fix presence for ALF-5001: cm:name uniqueness check can fail if the property is not set - Unit test the condition - Checked that code now uses the node UUID as a cm:name substitute 26228: Test fix after rev 25770 for ALF-6904 26232: Fixes ALF-6697: Improved error handling for HTML uploader 26236: Fixes ALF-6697: Re-use forms validation logic 26237: Build fix for lexer tests (character encoding issues on build box + using unfixed antlr test environment for one test) 26244: Merged BRANCHES/DEV/BELARUS/V3.3-2011_01_18 to BRANCHES/DEV/V3.4-BUG-FIX: (with modifications) 25071: ALF-1846: Workflow validation is not perfomed when tasks progression are requested 26259: Fix for ALF-7520: Upgrading from "old permission model" to "new permission model" (DmPermissionsPatch) - include generic patch to fix up permission inheritance issues Probable work around for ALF-7453: ACL Propagation issue for large number of users/ACLs 26276: Unit test fix for ALF-4926: Incorrect behavior of update and move rule for the same folder - Content update trigger now ignores nodes that are created in the same transaction 26277: Fix for ALF-7636, the onLoggedOut function was being called directly rather than an event being triggered, which made it impossible for plugins to use the event. 26278: Fix ALF-7568: Thumbnails should not go into the trash can - For 3.4: Just the content model setting for cm:thumbnail - Relates to TEAM rev 25038 26283: If we're not doing action tracking during execution and completion, then don't do the pending step either (ALF-7341) 26284: ALF-5998 - German language pack error in Explorer - Incorrect layout of Manage Task button in My tasks component in alfresco explorer 26285: Hopefully avoid intermittent failures caused by either slow machines (by ensuring locks are held during slow execution), and fixing up the action tracking parts of the test (broken by ALF-7341 changes) 26286: ALF-5889 - Italian translation errors in Explorer and Share - Aspects 26299: Fixed ALF-6289 "Contributor is absent in Permissions section at the details page" 26305: ALF-7264 - Improve error messages when there are no valid email addresses to send an email too (avoids a null pointer, instead gives a helpful one), and also a provisional fix for @localhost email validation (pending a proper fix via VALIDATOR-292) 26308: ALF-6073 - *.docx document is displayed on all views (Document List portlet) 26309: ALF-7532 - Content Rule on RM site (other than Folder) creates 'GUID' folder in Share Note: Fixed on Team, but along with many other unrelated fixes; hence not merged directly. 26311: Fixed ALF-7162: Bulk import NPE 26317: ALF-5560 - Incorrect behaviour on import. RM FilePlan now tolerates (but does not render) non-RM content which was causing the original issue. 26318: Fixes ALF-7321: Ensure that WCM and Share groups don't appear as options in Repository web-client start workflow wizard for group and pooled review workflows 26327: Merged V3.4 to V3.4-BUG-FIX 26158: Merged DEV/TEMPORARY to V3.4 26154: ALF-7571: Create Web Project wizard - Step 3 Superfluous “cellpadding” elements were removed. Missing space was added. 26164: ALF-6885: Changed svn:eol-style from native to LF for all .sh scripts 26165: Merged V3.4-TEAM to V3.4 26161: Fix full installer. 26178: Merged DEV/TEMPORARY to V3.4 26172: ALF-7601: 3.4.1 SDK WebServiceSamples multiple problems Configuration properties for WebServiceSamples was moved to correct place. Dependency to SDK AlfrescoEmbedded was added to classpath. It is required for FileCopyUtils from Spring which is used in WebServiceSamples. 26190: Reversed 26165 / 26161 - breaks installer building 26192: Convert TaggingServiceImplTest to use retrying transactions! 26194: ALF-7045: AVM upgrade - re-implement AVM "rename duplicates" patch as a DB upgrade script 26195: Update installer overlay files 26197: Final installer updates - built and tested on OSX 26199: Allow relocatable data for postgres - part2 26204: Attempt to avoid intermittent unit test failures in RecordsManagementAuditServiceImplTest by adding some Thread.sleep() calls to allow for asynchronous audit behaviour 26207: Set site notification to false on install (ALF-6181) 26212: Merged DEV to V3.4 26203: ALF-7605 PostgreSQL: Upgrade from 2.1.7 to 3.4.1 is failing - constraint "alf_access_control_entry_acl_id_key" does not exist 1. The statements which are drop constraints, marked as optional 2. The alter statements with new constraint names were added 26245: Added OOo port number configuration 26256: Fixes ALF-7679: Remove webscript-framework-config-custom.xml file 26270: License updates from Ashutosh 26274: Fix intermittent unit test failure with retrying transaction 26275: Possible fix to intermittent test failure. 26295: Reduce scope of retrying transaction, in a hope of fixing TaggingServiceImplTest.testOnStartupJob() 26303: And the prize for the largest number of retrying transactions in a single unit test goes to... 26307: Fixes: ALF-7704: Japanese language option not appearing in dropdown box on log in page. 26314: Another defensive sleep() in RecordsManagementAuditServiceImplTest 26325: Moved defensive sleep() in RecordsManagementAuditServiceImplTest 26329: Resolved merge issue in TaggingServiceImplTest 26332: ALF-7499: DOD5015 PublishUpdatesJob is not resilient to missing nodes 26337: Build fix - Added checks for new "sorted" parameter on ListOfValuesConstraint 26338: ALF-6004 - Verisonable aspect applied to content in Web Quick Start does not result in version information being exposed 26341: ALF-5394 Fixed issue where pooled actors (users not groups) were not working properly. 26352: Removed svn:mergeinfo 26357: ALF-5369: Disposition errors when importing FilePlan which includes custom event * missing events are now created with the information available * prevents exception when browsing imported file plan * TODO make sure sufficient information is stored in the export file so that events missing can be correctly recreated 26358: Found and fixed javascript error/bug when date-picker was used in form w read-only="true" 26360: Fixed ALF-5980 "Language pack errors in Share - Incorrect layout on Manage permissions page" 26362: Fixed ALF-5894 "Italian language pack in Share - Incorrect layout of My Profile dashlet" 26367: MERGE SWIFT to V3.4 BUG-FIX for ALF-5125 word offfice 2007 creates permanent temporary files on 3.2.2.1, and possible wrong ownership 26001 26081 26208 26216 26261 26315 26339 26370: MERGE DEV To V3.4-BUG FIX 26342 : ALF-5125 - word office 2007 creates permanent temporary files on 3.2.2.1, and possible wrong ownership 26382: Using predefined statics and neatening 26387: ALF-4101: Blog Archive filter has duplicate dates 26396: Fix for ALF-7834: CLONE -ACL Propagation issue for large number of users/ACLs - final part of fix for locking ACL changes (avoid simultaneous changes to the ACEs associated with an ACL) 26397: ALF-7823 - CIFS shuffle looses "mime type" of attachment. ALF-7670 - MS Word 2003 'Save As' to CIFS in a folder with a rule 'extract common metadata' does NOT extract the metadata 26398: Fixed ALF-6384 "Share - 'Insert Image Library' function in WIKI not working properly in IE8" 26407: Merged V3.4-2010_11_29 to V3.4-BUG-FIX 24159: ALF-413: Incorrect notification is displayed on Manage deleted items page when deleting an item that is already recovered 26412: Fix for ALF-4400: Share Search - Not Finding Document When Search Uses More Than One Tag in the Search Criteria - added TAG field - UI no longer has to do ugly query build and TAG is part of the default macro - Fixed unreported AND OR precedence issue and added grouping 26424: Fix for ALF-7795: Greater than (>) operator does not work with untokenised String properties in CMIS Query - fixed with issues will be resolved in SOLR/SWIFT - any term starting with { (used to encode locale) will be excluded from the range. - range queries not supported for urls .... 26449: Fixed ALF-5385 "Unable to edit groups on ts.alfresco.com" 26454: Fix for ALF-7852: Query consuming all heap and receiving an OOM exception - missing close on TermDocs and TermPositions 26460: ALF-634, ALF-7103 Externalized the JBPM Config location, so it can now be set as a property in repository.properties. 26470: Fixed ALF-7744: Ensure that new options.limit gets set when updating RSS feed results 26479: ALF-6533 - GROUP_EVERYONE is a special group, so when looking up the members to send an email, we need to call a different authority service method to get everyone 26484: ALF-7715 - Switch from the old Ant ZipFile to the new Commons Compress one, which supports the new file encoding zip extension 26488: ALF-7192 - Invitation code should support subtypes of Site in addition 26489: ALF-7192 - Update the Browse Bean and Site Aspect policy to support subtypes of Site 26493: ALF-7192 - When handling permissions and roles on sites, allow for sites which are a subtype of the default site type, rather than only supporting SiteModel.TYPE_SITE. (Unit test to follow) 26499: Fixes ALF-6415: Ensure that labels on installer radio buttons doesn't flow outside the window 26511: Merged DEV to V3.4-BUG-FIX 26406: ALF-7680: Check out of document allows users to create Working-Copy into Spaces where they do not have write access - Unit tests for ALF-7680 and ETHREEOH-535 were added. 26442: ALF-7680: Check out of document allows users to create Working-Copy into Spaces where they do not have write access - If destination folder for working copy is the same as the parent folder of the source node then working copy should be created even if the user has no permissions to create children in the parent of the source node. The following logic was added for Check Out operation to apply it: - if the target folder node is the same as the parent folder of the source document then working copy is created using 'System' user - if the target folder is a different parent, then working copy is created using current user. 26515: Partially fixes ALF-5774: Set correct Japanese date formatting on Repo Web Client summary panels 26529: Fix for ALF-6722 MT: Cancel workflow button isn't available for tenant users 26533: Fixed ALF-6563: Can't properly expose categories or associations on AWE forms 26534: Added correct source files for jbpm-jpdl-3.3.1 26535: Updated disabled testAsynchronousTaskExecutes as part of investigation into ALF-6405 26537: Fixed ALF-7927: Script error on Step 3 of Create Web Project Wizard - IE6/IE7 26540: ALF-7192 - Add unit test for custom site type 26559: Merged DEV to V3.4-BUG-FIX 26547: ALF-7528 : JSF - Edit online with Office 2010 causes the document mimetype to be lost - PutMethod was modified to use only guessed mime type for documents and completely ignore the Content-Type header from client. 26560: Fixes ALF-7931: Ensure checkboxes render correctly in IE6 for forms and replication job 26565: ALF-7232 - remove temporary (unit test) debug from log4j.properties 26566: Add a couple more site service checks for roles 26568: Fixes: ALF-7950 - escaped apostrophe 26576: Fix for: ALF-7996: Error when applying patch.fixAclInheritance - removed having clause for nasty where clause - hopefully optimised out .... 26580: Fixed ALF-7915 "Cannot delete rules created with check-in perform action." 26591: ALF-7995 - Repo tier web script get dataLists returns rule folder. Also fixed incorrect folder path rendering on non-Site rules page and removed reference to non-existent file. 26598: Add notes on if Transformers can be converted to Tika or not, and if not why 26601: Fixed ALF-7804: XAM: Long paths cause 'org.snia.xam.InvalidArgumentException' when XAM aspect is applied - Path-generation truncates the first characters to leave only 512 in the path - Added catch and WARN on failure to write properties to XSet (rather than fail) - Added log4j config for XAM 26603: Fixes: ALF-868 - IE Bug. 26604: Fixes: ALF-6486 - L10N bug in width of TinyMCE's dropdown lists not accommodating longer phrases in other languages. Width is now fluid 26606: Fixes: ALF-7397 - Removed repeated chars in JA dates that include long names for days of the week. 26611: Upgrade POI and Tika for ALF-7959 26612: Add test file from ALF-7959, tweaked to include the "Quick" text, and with the original user details munged 26613: Fix up unit tests after Tika upgrade for ALF-7959 26618: ALF-7959 - Convert the Outlook MSG text converter to using Tika, which fixes encoding problems 26628: Merged PATCHES/V3.1.2 to V3.4-BUG-FIX 26626: Merged DEV/TEMPORARY to PATCHES/V3.1.2 26400: ALF-607: Rules not firing on subspaces Execute RuleServiceImpl. getRules(), RuleServiceImpl. getOwningNodeRef(Rule) and RuleServiceImpl. getOwningNodeRef(Action) methods from System User. 26630: Merged HEAD to V3.4-BUG-FIX 26620: Modified to allow for multiple mime-types for Alfresco 3.3+. Related to ALF-4027. 26629: ALF-4027: Kofax Binaries corresponding to 26620 26650: Merged SWIFT to V3.4-BUG-FIX 26093: Workaround to the fact that the Solr classpath has got too large to include on a Windows command line! (32K) 26683: ALF-8045: VersionableAspect now properly resolves the namespaces of the QNames registered with excludedOnUpdateProps 26684: Resolve ALF-7515: CMIS operation getObjectRelationships() is not spec compliant 26689: Change the status code for the CIFS Trans2QueryPath response when the file does not exist. Possible fix for ALF-6727. 26691: Merged DEV/TEMPORARY to V3.4-BUG-FIX 26681: ALF-1871: FileLink and FolderLink items do not appear in WebDav Modify PropFindMethod to show file/folder links and return href of original node. Modify GetMethod to allow browser deal with file/folder links. 26692: Merged DEV/TEMPORARY to V3.4-BUG-FIX 26558: ALF-7910: It's impossible to delete folder with accentuated letter via IMAP from Outlook 2010 Call "AlfrescoImapFolder sourceNode = getFolder(user, oldMailboxName);" before decoding oldMailboxName in ImapServiceImpl.renameMailbox() method. Update JavaDoc in AlfrescoImapService. Add testRenameAccentedMailbox() test. 26693: Merged DEV/TEMPORARY to V3.4-BUG-FIX 26544: ALF-7911: Cannot contribute via IMAP if another user with only Consumer permissions has logged in first Dynamically check readOnly in AlfrescoImapFolder.isReadOnly() method. 26694: Merged DEV/TEMPORARY to V3.4-BUG-FIX (with corrections) 26343: ALF-6945 Failed Kerberos SSO auth returns HTML web page with wrong text/plain MIME type Setting content-type to text/html added for page used for failed Kerberos and NTLM authentications. 26695: Resolve ALF-7538: CMIS AtomPub: Not possible to retrieve associations defined via an Aspect. 26696: ALF-6132: Correction to handling of optional elements by Pavel 26701: Fixes ALF-8064: Ensure Windows installer respects manual service startup selection 26706: Resolve ALF-7759: MTOM is not enabled for all CMIS Web Services 26713: Resolve ALF-7994: Custom behavior is not triggered when creating content via CMIS 26717: Resolve ALF-6848: CMIS Rest: Properties Filter Parameter incorrectly functioning. 26720: Fix ALF-7977: Webform validation on change is always passing 26726: ALF-7086: Root folder has wrong Allowable Actions 26727: Resolve ALF-6266: Incorrect exception thrown when deleting a non-existing document (web-services binding) 26728: WQS: Performance enhancements. Local max throughput increased from 11 PIs/sec to 24 PIs/sec with 15 concurrent users (CPU utilization dropped from 100% to 70%) 26729: ALF-8045: Fix VersionServiceImplTest 26735: Merged DEV/TEMPORARY to V3.4-BUG-FIX 26725: ALF-3919 : WCM - JSF does not return an appropriate warning when creating content with ' ; ' character 1. The AVMNodeConverter class was modified to allow ';' character usage in web content names. 26736: Merged V3.4 to V3.4-BUG-FIX 26411: Fixes: ALF-7292 and ALF-7289, removes "· " from after Web and before Alfresco. 26413: Fixes: ALF-7765 - ensures naming consistency 26414: Fixes: ALF-7697 - Rewording the URL help text on the create site dialogue 26417: Fixes: ALF-7414, confused and hardcoded date-formatting & date formatting translations fixed. 26610: Fix for: ALF-8007: Lucene index not coherent or not up to date or we can not rely on it to check that a working copy exist. 26739: ALF-8085 - DMDeploymentTarget uses System.out 26748: ALF-7929: Script error on Web Form Details window - IE6/ IE7 - Fix up to CHK-10095 reviewed by Kev 26749: ALF-7557: Display full paths of categories in Explorer (reviewed by Kev) 26751: ALF-8079: NPE in ContentDiskDriver 26754: Fixes: ALF-2984. parseInt octal bug, so forcing dec. 26761: Merged V3.4 to V3.4-BUG-FIX (RECORD ONLY) 26760: Merged V3.4-BUG-FIX to V3.4 26759: Merged V3.4-BUG-FIX to V3.4 (3.4.2) 26762: ALF-8028 ResultSet not closed in TransferServiceImpl2 try...finally pattern was added to search operation. 26764: Further fixes to teh patch for: ALF-7834: CLONE -ACL Propagation issue for large number of users/ACLs 26765: ALF-634, ALF-7103: Possible fix to JBPM regressions introduced by r26460 26788: Further fixes to the patch for: ALF-7834: CLONE -ACL Propagation issue for large number of users/ACLs - fix type that would have missed a minor error (for unused shared ACLs) 26815: ALF-5500: Support site subtypes in SPP 26863: Merged DEV/TEMPORARY to V3.4-BUG-FIX 26853: ALF-3792: Copy Access Should Be More Restrictive Checking permissions for “Copy” was added action. Security settings for FileFolderService.copy operations were made more strict for Alfresco and RM. 26890: Merged HEAD to V3.4-BUG-FIX 26856: Fixed ClientInfo is null in sessionLoggedOn event. JLAN-121. 26867: Fix for wildcard search handling returning dot and dot-dot file entries. ALF-4960. 26868: Fix for wildcard search handling returning dot and dot-dot file entries, repo filesystem. ALF-4960. 26888: CIFS path broken when ß (German sz) char is in folder name. ALF-7186. 26909: AVMRepository: add missing error info - report store name (if not found) 26934: Fixed ALF-6532: Upload new version fails in Share (checkout) when using ContentStoreSelector - Includes investigative tests from DEV rev 26902 - Fixed safeCopyContent to cater for first-time setting of property where content is already in new store (copy operations) - Tested XAM use-case as well 26996: Fix for ALF-8229. patch.webSiteAddModerated upgrade error. Trivial fix sanctioned for check-in on 3.4.2 by SteveR. 26997: Undoing accidental check-in of eclipse project files changes. 27045: Change to CIFS session setup exception processing as per ALF-229. 27069: ALF-3871: Global properties now visible through JMX 27108: Merged PATCHES/V3.3.3 to V3.4-BUG-FIX 27107: ALF-8388: Merged PATCHES/V3.3.4 to PATCHES/V3.3.3 26894: ALF-7237: Further diagnostics for maxChecks and maxCheckTime 27110: Merge DEV to V3.4-BUG-FIX 26859 : ALF-6546 - JCR export fails when node has a null property value 27116: ALF-8190 - Minor version labels non-intuitive now the minor version will start at 0.1 rather than 1.0 27121: Fixed ALF-8307: Audit query template in 3.4.0 should quote key values for application and username 27332: Follow on test corrections from the fix to ALF-8190. 27508: Merge Dev to V3.4-BUG-FIX 27153 : ALF-5496 Commenting on a Space creates an Empty Folder via CIFS 27575: Merged DEV/TEMPORARY to V3.4-BUG-FIX 27070: ALF-4954: when cookies are disabled, Share enters into a loop, Explorer outputs a java.lang.NullPointerException exception, Firefox 1. SSOAuthenticationFilter and login page for Share application was modified to handle lack of cookies in a manner web-client do that. 27586: Ignore default build directory for virtual server 27587: Fix for ALF-8188: Share - Search returns no result when using special characters - not really a bug .... added implementation to support \u0000 style encoding in the parser but not the impl 27590: Merged DEV to V3.4-BUG-FIX 27147: ALF-7979 : Metadata extracters should log a warning/error when type conversion of field values fails 1. Adding additional logging for type conversion failure during metadata extraction. - Additionally removed some false TODOs and fixed generics in class 27593: Fix for: ALF-7827: CMIS Contains does not support TEXT, ALL, d:content etc as would be expected - added to match Alfresco FTS 27595: Fix for: ALF-8073: Property value not stored in Lucene index if stored=true and tokenized=false - if stored is selected the value will be stored in the plain property entry 27599: Merged V3.3 to V3.4-BUG-FIX 27130: Merged DEV/TEMPORARY to V3.3 27129: ALF-8141: Using the copy/move action causes the Path QName to change to 'copy' or 'move' MoveActionExecuter: Remove PARAM_ASSOC_TYPE_QNAME and PARAM_ASSOC_QNAME(Also remove it from classes that use them). Use FileFolderService for move operation. CopyActionExecuter: Remove PARAM_ASSOC_TYPE_QNAME and PARAM_ASSOC_QNAME(Also remove it from classes that use them). Use CopyService with original assocTypeQName and assocQName(Don't use FileFolderService here because it doesn't respect deep copy flag). 27155: ALF-8141: Fix up unit tests plus RESTful calls to RuleService 27601: Fix up unit tests following merge of ALF-8141 27604: Fix for ALF-7738: Hyphen not handled correctly in cmis-alfresco search for Aspects/types : " no viable alternative at character 'a' " - query names are now escaped where required 27613: Upgrade Tika and POI for ALF-7978 27618: ALF-1813 Fixed security issue where tasks could be edited by a user who did not have acess tot he task. 27637: Merged DEV/TEMPORARY to V3.4-BUG-FIX 26965: ALF-8258: sharedLockTokens property duplicated many times Changed LockInfo.sharedLockTokens from LinkedList to HashSet because in RFC "Lock token URIs MUST be unique across all resources for all time.", and therefore sharedLockTokens should contain non-repeatable values. 27662: ALF-8549: activities.getFeedControls() does not return a scriptable object in Javascript - also fix REST call (/api/activities/feed/controls) to return JSON 27663: Perf improvement: cache User Feed Controls (for generator job run) - note: activity feed controls are not currently exposed via Share UI 27668: ALF-8413: Share Feed Generator on Oracle generates NPE (when commenting in repo view) - fix NPE (note: in general Share does not post activities outside of site context + feed generator is currently based on site members) 27669: ALF-8549: activities.getFeedControls() does not return a scriptable object in Javascript - quick test fix for PostgreSQL (follow-on from r27662) 27697: ALF-8581: User activities are displayed twice in My Activities dashlet (in cluster env) - add cluster job lock service (SLNG-770) 27776: ALF-8581: Reverted changes to FeedGeneratorJob 27806: Merged DEV to V3.4-BUG-FIX 27793: ALF-8351 : JBPM Tables in Oracle missing index on Foreign Keys leading to table Locks 1. Sql script that creates indexes for foreign keys in jbpm tables was implemented. This script synchronizes jbpm indexes with mysql version. Merge changes: Changed 4.0 references to 3.4; Incremented schema number. 27808: Fixed ALF-7510: Share - Workflow 'due date' field date validation doesn't work properly 27811: Fixed ALF-6179: WebDAV has problems if username contains spaces 27812: Partial fix for ALF-7032: Alfresco doesn't escape special XML characters in AtomPub 27815: Switched to use ?xml instead of ?html in partial fix for ALF-7032: Alfresco doesn't escape special XML characters in AtomPub 27825: ALF-8489 Fixed issue by removing inappropriate 'requiredApprovePercent' field. 27852: Fix for ALF-7845 index.recovery.mode=AUTO doesn't rebuild avm index - applied provided patch 27857: Fix for ALF-868: Large Table Data causes TinyMCE to drop below Alfresco Footer in Web Form - IE7 only 27860: Fixes: ALF-2199 Errors in CSS files. 27866: Fixes: ALF-1327 - truncation issues in the calendar. 27881: Fixes bug in Chrome introduced with r27866 27898: CIFS on Windows fails to start under certain conditions. ALF-8723 27901: Merged DEV to V3.4-BUG-FIX 27891: ALF-7421: An opensolaris NFS client cannot see folders renamed using the web UI after two minutes. NFS server cache updating policy handler was implemented: - NfsServerNodeMonitor.java’ – new policy handler for NFS server; - NFSServerBean.java’ was modified to configure implemented node monitor with NFS server instance during server start up; - file-servers.properties’ was expanded with new properties for new node monitor which allows controlling node monitor 'enabled' state; - file-servers-context.xml’ was expanded with bean configuration for new node monitor and with configuration for NFS server bean to accept newly configured node monitor bean; - ShareDetailsHash.java’ was modified to externalize hashtable of the cache; - NFSServer.java’ was modified to externalize its cache for public access 27902: ALF-8744 - Untransalted strings in Recent shapshot 27903: Fixes: ALF-5717 Issues with non i18n/L10N Data List form fields. 27922: Fixes: ALF-8726 by back porting some Team usability fixes. *Do Not Merge* 27923: Fixes: ALF-8429 - Replaces hard coded English tooltip with a pre-existing i18n string. 27929: Fixed ALF-8768: Wrong path in comment for wcm-bootstrap-context.xml 27938: Partial Fix for: ALF-8720: Adds missing spaces. 27940: Merged V3.3 to V3.4-BUG-FIX 27851: Fix for ALF-8476:CLONE -Query consuming all heap and receiving an OOM exception - actually fixes stack overflow with skipTo when there are lots of deleted docs in an index in a row (<10000 on the default settings) ---- Modified : /alfresco/BRANCHES/DEV/V3.4-BUG-FIX Modified : /alfresco/BRANCHES/DEV/V3.4-BUG-FIX/root/projects/repository/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java Modified : /alfresco/BRANCHES/DEV/V3.4-BUG-FIX/root/projects/repository/source/java/org/alfresco/repo/search/impl/lucene/FilterIndexReaderByStringId.java 27942: Merged V3.4 to V3.4-BUG-FIX 26772: Fix for ALF-7843 - Created via SPP all-day event displays incorrectly 26775: Fix for ALF-3374 - Reverting a file in workflow causes a Successful error message 26778: Fix message Failed to find I18N message key: reset_categories for locale: en_US 26781: Fix for ALF-6488 - LangPack FR - [Site's Wiki] Renaming a wiki's page - special chars handling 26783: Fixed ALF-7421: An opensolaris NFS client cannot see folders renamed using the web UI after two minutes. - De-Hibernate DAO refactor missed implementing 'system.enableTimestampPropagation' - Set 'system.enableTimestampPropagation=true' in alfresco-global.properties - Timestamps will be written to immediate parent folder and will therefore not drop out of the filestate cache after 2 min 26785: Services-layer fix for ALF-8036. Incorrect permissions copied when copying folder with permissions from one site to another. UI will have to make changes in the UI layer in order to use new Services methods, thus completing the fix. This check-in adds support in the SiteService for moving and copying site-contained nodes. New move/copy methods are available in the Java Foundation API and in the JavaScript API which mimic the signatures of those in the NodeService and CopyService respectively. These methods simply delegate to the back-end services and so behaviours should be the same as before if they are used in place of the node and copy service methods. With one exception: The SiteService wrapper methods detect when the relocated node has been copied/moved between two different Share sites and clears permissions from the relocated node (and its primary descendants) that refer to the previous site. This has not been implemented using policies/behaviours as we can't bind the behaviour to any particular content class. Nodes of any type could be copied/moved between sites. 26787: Removed erroneous import from StreamContent - incorrect dependency on de.schlichtherle.io.FileOutputStream 26803: Fixes: ALF-8138, adds a i18n property for a ToDo list's attachment title. 26806: Fixed ALF-8154: Shorten the node path as prefix-only path - Use Path.toPrefixString instead of Path.toString - Provides improved fix for ALF-7804 26824: Fixed ALF-7012: WCM - Schema error "xs:enumeration full" select button group shows "Please select..." 26832: UI-layer fix component for ALF-8036 and a refactoring of the Services-layer fix component. Rather than add various facade methods to the SiteService for all the copy & move variants in NodeService, CopyService, FileFolderService etc, I have added a single new method to the SiteService cleanSitePermissions(). This removes all out-of-date site permissions after a node has been moved or copied to a new site. Also changed the slingshot action webscripts for move-to and copy-to to call this cleanUp method. 26838: Rewording a misleading code comment. Related to ALF-8036 changes. 26847: ALF-6727: File server protocols don't report the read only attribute for folders unless new configuration setting filesystem.setReadOnlyFlagOnFolders is true - Default is false - On windows, the read only attribute doesn't mean the folder is read only - it means "this folder has been customized - please fetch a desktop.ini". - This results in poor performance for non-admin users due to lots of secondary fetches for configuration information. - See the bug for more details. 26855: ALF-6727: Missing files from last check in 26858: Merged V3.4-TEAM to V3.4 26841: Fix for ALF-1044. (Searching for groups whose names contain regex reserved chars.) The fix was to add [] as reserved chars to the RegEx SimpleLanguageDef. Thanks AndyH. 26860: ALF-7101 and ALF-7866 - don't show the rules options to collaborators, as they shouldn't be able to create/manage rules 26861: Merged DEV/TEMPORARY to V3.4 (with corrections) 26157: ALF-1544: Server won't start on JBoss: Unable to resolve drag and drop application as a file, class path resource [alfresco/desktop/Alfresco.exe] DesktopAction uses Resource’s InputStream for drug-n-drop files representation. 26870: ALF-6727: Fix up ContentDiskDriverTest 26898: Fix ALF-8219: Deploying WQS in the same container as Alfresco causes startup to stall 26899: Possible installer build fix - uncomment project.readmeFile - set failifexecutionfails="true" on installer build targets so we know if installer building failed! 26900: ALF-8180: The installer shouldn't randomly delete a directory called tomcat that it didn't create - Fix provided by Bitrock 26919: Backing out 3 changes related to ALF-8036 due to uncertainty over fix approach. I'm reverse-merging revisions 26785, 26832 and 26838 out of this 3.4.2 branch. The fix version for ALF-8036 has been changed to 3.4.3 and so we don't want an unfinished fix on 3.4.2. In fact, this fix may be finished, but there is some uncertainty now over the approach to adopt (strip permissions vs. prevert copying of permissions). This fix will go to Team and 3.4.3 instead. 26932: Fixed a couple of non-unicode French characters that were messing up my scripts and: Merged BRANCHES/DEV/dwebster/ to BRANCHES/V3.4: 26911: Latest updates from translators (based on rev26710) 26944: ALF-3569 - Alfresco repository CIFS driver not setting timestamps. 26952: Finishes the completeness tests & fixes several L10N bugs. 26972: Fixes ALF-8272: Alfresco cannot be started after fresh install 26980: ALF-8287 - All buttons are disabled on Data Lists page. 27039: Merged BRANCHES/DEV/dwebsterV34 to BRANCHES/V3.4: - Update from Translators (based on r26837). 27059: Merged PATCHES/V3.4.1 to V3.4 26959: ALF-8261: 3.4 JSF performance regression introduced by WebProjectServiceImpl.hasWebProjectsRoot() (ALF-3085) 27020: ALF-8281: CLONE -'Move To' operation for categories, folders and records doesn't work ESCALATION 27061: Merged PATCHES/V3.3.4 to V3.4 27032: ALF-8289: Merged DEV to PATCHES/V3.3.4 27028: ALF-8289: Occasionally, web form complains of missing required fields when the fields are indeed populated 27068: Merged DEV to V3.4 27067: ALF-3774 : Unable to disable listening on port 7500 (JGroups) 1. DummyProtocol was changed to rewrite default configuration. This changes turn off diagnostic probing for DummyChannel. 27071: Fixed ALF-8363: BadSqlGrammarException during patch.fixAclInheritance on Oracle - Using '... = true' does not work for Oracle. - Replaced with parameterClass="boolean" and #trueOrFalse# - Tested against limited dataset so some condition paths might be missed. 27083: ALF-8124: Corrected ${} placeholders in Japanese installer strings 27088: Fixed ALF-8377: Generic KeywordSearch is not resilient to stale Lucene indexes - Cleaned up PersonSearchTest - Added exists check to KeywordSearch - Rationalized related bean declarations 27113: Fixed ALF-1322 "Creating user with username containing spaces works incorrectly" 27127: ALF-8346 - 'Complete event' button for folders is disabled in IE 27136: Installer string updates from Gloria 27173: Fix for: ALF-7834: CLONE - ACL Propagation issue for large number of users/ACLs - manually fix up the cache when changing inheritance 27503: Fix for ALF-8345 - Extra icons on the form of adding translation without content(IE specific) 27504: Fix for ALF-6917 - A system error happens when user attempted press toggle 'Version History' 27505: ALF-6215 - French Language pack - It's incorrect layout in Document List component 27509: ALF-8451: Port AVM-rename-dupes.sql to DB2 and SQL Server 27511: ALF-7165: User with contributor role cannot view content 27512: Installer string updates from Gloria - Corrections to msgid Installer.ReadmeFile.View 27557: case sensitivity issues with terminfo database building from Windows 27563: Merged DEV to V3.4 27558: ALF-8408: Impossible to upload a new file by contributor to subspace when rule is applied to subspaces Retrieving of rule was surrounded in RunAs(System username) block. It allows to retrieve rule node and its actions if user has no read permissions to rule node and to rule's actions. JUnit test "PermissionsForPropagatedRules_ALF_8408" was added. 27602: Fix for ALF-5625 - When viewing properties in version history hitting close results in loop (V3.4.2) 27622: ALF-5607: Remove bundled postgres data directory on installation abort on Linux 27639: Fix for ALF-6488 - Decode HTML content before creating page url argument for wiki 27647: Fix for ALF-8552 27672: ALF-8553: PatchService didn't recurse on dependents of already applied patches - Hence patch ordering was wrong on V3.4 upgrade 27684: ALF-8553, ALF-8602: set batchMaxQueryRange on patch.fixNameCrcValues-2 to avoid OOM 27687: Merge DEV to V3.4 27674 : ALF-8453 CIFS Failed to save versionable MS Word content as collaborator 27690: Merged DEV/TEMPORARY to V3.4 27688: ALF-7822 : AVM projects unavailable after upgrade to 3.4.1 script was modified to prevent data corruption 27775: Fixes ALF-8654: Add removed quotes back into .po files 27805: ALF-2935: Properly control RMI port in Bitrock installer - order repository-properties before shared-properties so that you can specify the port in alfresco-global.properties if you want to - include a tokenized alfresco-shared.properties in the WCM installation files 27807: Merged V3.4-TEAM to V3.4 27756: ALF-8207 - ALL LANG - Themes are not translated 27840: ALF-8687: No items display for series when opening it from library list 27853: Fixes: ALF-7465 - Removes some of the differences between the Add Event and Remove Event dialogues & reuses existing TagLibrary component to avoid conflicts. 27856: ALF-8687: No items display for series when opening it from library list. Slight refactor to better match non-RM doclib code. 27871: Fixes ALF-8124: Ensure Spanish locale for installer shows product name correctly 27932: Fixes ALF-5519: alfresco-enterprise-wcmqs-3.3.3.zip does not contain awe.war - Added awe.war to WQS zip file 27944: Merged V3.4 to V3.4-BUG-FIX (RECORD ONLY) 26766: Merged V3.4-BUG-FIX to V3.4 26761: Merged V3.4 to V3.4-BUG-FIX (RECORD ONLY) 26760: Merged V3.4-BUG-FIX to V3.4 26759: Merged V3.4-BUG-FIX to V3.4 (3.4.2) 26762: ALF-8028 ResultSet not closed in TransferServiceImpl2 try...finally pattern was added to search operation. 26764: Further fixes to the patch for: ALF-7834: CLONE -ACL Propagation issue for large number of users/ACLs 26765: ALF-634, ALF-7103: Possible fix to JBPM regressions introduced by r26460 26831: Merged V3.4-BUG-FIX to V3.4 26788: Further fixes to the patch for: ALF-7834: CLONE -ACL Propagation issue for large number of users/ACLs - fix type that would have missed a minor error (for unused shared ACLs) 27016: Merged V3.4-BUG-FIX to V3.4 26996: Fix for ALF-8229. patch.webSiteAddModerated upgrade error Trivial fix sanctioned for check-in on 3.4.2 by SteveR 26997: Undoing accidental check-in of eclipse project files changes 27859: Merged BRANCHES/DEV/V3.4-BUG-FIX to BRANCHES/V3.4: 27857: Fix for ALF-868: Large Table Data causes TinyMCE to drop below Alfresco Footer in Web Form - IE7 only git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@27948 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/cmis-ws-context.xml | 16 ++--- .../cmis/descendants.get.atomfeed.ftl | 4 +- .../org/alfresco/cmis/lib/modify.lib.js | 16 +---- .../org/alfresco/cmis/parent.get.js | 7 +++ .../alfresco/cmis/parents.get.atomfeed.ftl | 4 +- .../org/alfresco/cmis/parents.get.js | 11 +++- .../org/alfresco/cmis/tree.get.atomfeed.ftl | 2 +- .../org/alfresco/office/office.inc.ftl | 2 +- .../alfresco/portlets/doclist.get.html.ftl | 2 - .../portlets/doclistpanel.get.html.ftl | 2 +- .../alfresco/portlets/myspaces.get.html.ftl | 2 - .../portlets/mytaskspanel.get.html.ftl | 2 +- .../control/userfeed-controls.get.json.ftl | 13 ++-- .../repository/audit/query.get.json.ftl | 4 +- .../blogs/posts/blog-posts-per-month.get.js | 2 +- .../repository/comments/comments.post.json.js | 24 +++++--- .../alfresco/slingshot/datalists/lists.get.js | 2 +- .../action/move-to.post.json.js | 2 +- .../alfresco/slingshot/search/search.lib.js | 10 +-- .../alfresco/slingshot/wiki/move.post.json.js | 8 +-- .../slingshot/wiki/move.post.properties | 2 + .../slingshot/wiki/move.post_de.properties | 2 + .../slingshot/wiki/move.post_es.properties | 2 + .../slingshot/wiki/move.post_fr.properties | 2 + .../slingshot/wiki/move.post_it.properties | 2 + .../slingshot/wiki/move.post_ja.properties | 2 + .../web-scripts-application-context.xml | 9 +-- .../repo/cmis/rest/CMISAssocsMethod.java | 10 ++- .../repo/cmis/ws/DMAbstractServicePort.java | 2 +- .../cmis/ws/DMRelationshipServicePort.java | 2 +- .../repo/web/scripts/bean/KeywordSearch.java | 37 ++++------- .../web/scripts/content/StreamContent.java | 3 +- .../web/scripts/rule/RuleServiceTest.java | 2 - .../web/scripts/search/PersonSearchTest.java | 49 +++++---------- .../org/alfresco/repo/webdav/GetMethod.java | 39 ++++++++++-- .../org/alfresco/repo/webdav/LockInfo.java | 17 +++--- .../alfresco/repo/webdav/PropFindMethod.java | 61 +++++++++++-------- .../org/alfresco/repo/webdav/PutMethod.java | 12 +--- .../alfresco/repo/webdav/UnlockMethod.java | 4 +- .../java/org/alfresco/repo/webdav/WebDAV.java | 3 +- .../alfresco/repo/webdav/WebDAVHelper.java | 12 ++++ .../alfresco/repo/webdav/WebDAVMethod.java | 14 ++++- .../auth/BaseSSOAuthenticationFilter.java | 4 ++ 43 files changed, 240 insertions(+), 187 deletions(-) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.properties create mode 100755 config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_de.properties create mode 100755 config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_es.properties create mode 100755 config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_fr.properties create mode 100755 config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_it.properties create mode 100755 config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_ja.properties diff --git a/config/alfresco/cmis-ws-context.xml b/config/alfresco/cmis-ws-context.xml index 7db644b6dd..2c2023417e 100644 --- a/config/alfresco/cmis-ws-context.xml +++ b/config/alfresco/cmis-ws-context.xml @@ -30,7 +30,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -175,7 +175,7 @@ - + @@ -204,7 +204,7 @@ - + @@ -232,7 +232,7 @@ - + @@ -261,7 +261,7 @@ - + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.atomfeed.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.atomfeed.ftl index baf22cf98f..a77e9d99a4 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.atomfeed.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.atomfeed.ftl @@ -23,9 +23,9 @@ [#if depth > 0 || depth == -1] [#list cmischildren(node, typesFilter) as child] [#if child.isDocument] - [@entryLib.document node=child renditionfilter=renditionFilter propfilter=propFilter includeallowableactions=includeAllowableActions includerelationships=includeRelationships/] + [@entryLib.document node=child renditionfilter=renditionFilter propfilter=filter includeallowableactions=includeAllowableActions includerelationships=includeRelationships/] [#else] - [@entryLib.folder node=child renditionfilter=renditionFilter propfilter=propFilter typesfilter=types includeallowableactions=includeAllowableActions includerelationships=includeRelationships depth=1 maxdepth=depth/] + [@entryLib.folder node=child renditionfilter=renditionFilter propfilter=filter typesfilter=types includeallowableactions=includeAllowableActions includerelationships=includeRelationships depth=1 maxdepth=depth/] [/#if] [/#list] [/#if] diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js index 5fac82158f..8349013cc5 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js @@ -28,11 +28,11 @@ function createNode(parent, entry, slug, versioningState) var baseType = type.typeId.baseTypeId; if (baseType == DOCUMENT_TYPE_ID) { - node = parent.createFile(name); + node = parent.createFile(name, type.typeId.QName); } else if (baseType == FOLDER_TYPE_ID) { - node = parent.createFolder(name); + node = parent.createFolder(name, type.typeId.QName); } else if (baseType == POLICY_TYPE_ID) { @@ -46,18 +46,6 @@ function createNode(parent, entry, slug, versioningState) return null; } - // specialize to required custom type - if (type.typeId != DOCUMENT_TYPE_ID && type.typeId != FOLDER_TYPE_ID) - { - if (!node.specializeType(type.typeId.QName)) - { - status.code = 400; - status.message = "Cannot create object of type " + typeId; - status.redirect = true; - return null; - } - } - // update node properties (excluding object type & name) var exclude = [ PROP_OBJECT_TYPE_ID, PROP_NAME ]; var updated = updateNode(node, entry, exclude, function(propDef) {return patchValidator(propDef, true);}); diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js index bdb565e61f..0ba0cf2a57 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js @@ -18,6 +18,13 @@ script: status.redirect = true; break script; } + if (node.parent == null || !node.hasPermission("Read")) + { + status.code = 404; + status.message = "Object " + object.ref + " parent not found"; + status.redirect = true; + break script; + } model.node = node.parent; // property filter diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.atomfeed.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.atomfeed.ftl index 3843ac445f..cadca434ec 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.atomfeed.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.atomfeed.ftl @@ -16,9 +16,9 @@ [@linksLib.linkvia href="${nodeuri}"/] [/@feedLib.node] -[#if parent?? && parent.isContainer] +[#list parents as parent] [@entryLib.folder node=parent renditionfilter=renditionFilter propfilter=filter includeallowableactions=includeAllowableActions includerelationships=includeRelationships relativePathSegment=node.name/] -[/#if] +[/#list] diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js index b6828cf4db..d34c5d1bf0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js @@ -9,7 +9,16 @@ script: break script; } model.node = object.node; - model.parent = model.node.parent; + + var parents = []; + for each (var parent in model.node.parents) + { + if (parent.hasPermission("Read") && parent.isContainer) + { + parents.push(parent); + } + } + model.parents = parents; // property filter model.filter = args[cmis.ARG_FILTER]; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.atomfeed.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.atomfeed.ftl index 8cc9141c66..268b5e0e5b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.atomfeed.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.atomfeed.ftl @@ -22,7 +22,7 @@ [#if depth > 0 || depth == -1] [#list cmischildren(node, "folders") as child] - [@entryLib.foldertree node=child renditionfilter=renditionFilter propfilter=propFilter includeallowableactions=includeAllowableActions includerelationships=includeRelationships maxdepth=depth/] + [@entryLib.foldertree node=child renditionfilter=renditionFilter propfilter=filter includeallowableactions=includeAllowableActions includerelationships=includeRelationships maxdepth=depth/] [/#list] [/#if] diff --git a/config/alfresco/templates/webscripts/org/alfresco/office/office.inc.ftl b/config/alfresco/templates/webscripts/org/alfresco/office/office.inc.ftl index 3dacca0eb7..033ab04fc7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/office/office.inc.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/office/office.inc.ftl @@ -1,5 +1,5 @@ <#macro header title defaultQuery=""> -<#assign helpUrl = message("office.help.url", server.versionMajor, server.versionMinor, server.edition?lower_case)> +<#assign helpUrl = message("office.help.url", server.versionMajor, server.versionMinor, server.edition)> diff --git a/config/alfresco/templates/webscripts/org/alfresco/portlets/doclist.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/portlets/doclist.get.html.ftl index 6c0cea6e59..0e37fef5d0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/portlets/doclist.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/portlets/doclist.get.html.ftl @@ -303,8 +303,6 @@ a.docItem, a.docItem:hover width: 87px; height: 20px; border: 1px solid #fff; - float: left; - display: block; padding: 10px 0px 8px 36px; cursor: pointer; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/portlets/doclistpanel.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/portlets/doclistpanel.get.html.ftl index 91977be336..f1b331955c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/portlets/doclistpanel.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/portlets/doclistpanel.get.html.ftl @@ -11,7 +11,7 @@ <#list docs as d> <#if d.isDocument> <#if (filter=0) || - (filter=1 && d.mimetype="application/msword" || d.mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document") || + (filter=1 && (d.mimetype="application/msword" || d.mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document")) || (filter=2 && d.mimetype="text/html") || (filter=3 && d.mimetype="application/pdf") || (filter=4 && (dateCompare(d.properties["cm:modified"],date,weekms) == 1 || dateCompare(d.properties["cm:created"], date, weekms) == 1))> diff --git a/config/alfresco/templates/webscripts/org/alfresco/portlets/myspaces.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/portlets/myspaces.get.html.ftl index 9608445fad..98e3c46465 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/portlets/myspaces.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/portlets/myspaces.get.html.ftl @@ -389,8 +389,6 @@ a.spaceBreadcrumbLink:link, a.spaceBreadcrumbLink:visited, a.spaceBreadcrumbLink width: 87px; height: 20px; border: 1px solid #ffffff; - float: left; - display: block; padding: 10px 0px 8px 36px; cursor: pointer; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/portlets/mytaskspanel.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/portlets/mytaskspanel.get.html.ftl index 70c5cafcdb..e5f1d3eb4f 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/portlets/mytaskspanel.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/portlets/mytaskspanel.get.html.ftl @@ -66,7 +66,7 @@ diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.json.ftl index 21a7ae373b..879b270a62 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.json.ftl @@ -1,7 +1,12 @@ +<#escape x as jsonUtils.encodeJSONString(x)> [ <#if feedControls??> - <#list feedControls as feedControl> - ${feedControl}<#if feedControl_has_next>, - + <#list feedControls as feedControl> + { + "siteId": "${feedControl.siteId}", + "appToolId": "${feedControl.appToolId}" + }<#if feedControl_has_next>, + -] \ No newline at end of file +] + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/audit/query.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/audit/query.get.json.ftl index 159610b30b..6c326d7d42 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/audit/query.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/audit/query.get.json.ftl @@ -6,8 +6,8 @@ <#list entries as entry> { "id":${entry.id?c}, - "application":${entry.application}, - "user":<#if entry.user??>${entry.user}<#else>null, + "application":"${entry.application}", + "user":"<#if entry.user??>${entry.user}<#else>null", "time":"${xmldate(entry.time)}", "values": <#if entry.values??> diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-per-month.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-per-month.get.js index 7a384847de..899812591c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-per-month.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-per-month.get.js @@ -64,7 +64,7 @@ function getBlogPostMonths(node) var currData = null; for (var x=0; x < nodes.length; x++) { - var date = nodes[x].properties["cm:created"]; + var date = nodes[x].properties["cm:published"]; // is this a new month? if (currYear != date.getFullYear() || currMonth != date.getMonth()) diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.post.json.js index 913d5dfcbb..945340d55a 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.post.json.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.post.json.js @@ -44,20 +44,24 @@ function main() model.item = getCommentData(comment); model.node = node; - // post an activitiy item, but only if we got a site + // post an activity item, but only if we've got a site if (json.has("site") && json.has("itemTitle") && json.has("page")) { - var params = jsonUtils.toObject(json.get("pageParams")), strParams = ""; - for (param in params) + var siteId = json.get("site"); + if ((siteId != null) && (siteId != "")) { - strParams += param + "=" + encodeURIComponent(params[param]) + "&"; + var params = jsonUtils.toObject(json.get("pageParams")), strParams = ""; + for (param in params) + { + strParams += param + "=" + encodeURIComponent(params[param]) + "&"; + } + var data = + { + title: json.get("itemTitle"), + page: json.get("page") + (strParams != "" ? "?" + strParams.substring(0, strParams.length - 1) : "") + } + activities.postActivity("org.alfresco.comments.comment-created", siteId, "comments", jsonUtils.toJSONString(data)); } - var data = - { - title: json.get("itemTitle"), - page: json.get("page") + (strParams != "" ? "?" + strParams.substring(0, strParams.length - 1) : "") - } - activities.postActivity("org.alfresco.comments.comment-created", json.get("site"), "comments", jsonUtils.toJSONString(data)); } } diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/lists.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/lists.get.js index b4670f7218..b47295f025 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/lists.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/lists.get.js @@ -36,7 +36,7 @@ function getDataLists() return ( { container: parsedArgs.rootNode, - lists: parsedArgs.rootNode.children + lists: parsedArgs.rootNode.childAssocs["cm:contains"] || [] }); } diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js index 7795fe239d..a62bc0318b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js @@ -49,7 +49,7 @@ function runAction(p_params) } else { - if (p_params.parent !== null) + if (p_params.parent && p_params.parent !== null) { parent = search.findNode(p_params.parent); } diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js index 0d82c9ee26..399fc02c60 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js @@ -21,7 +21,7 @@ const SITES_SPACE_QNAME_PATH = "/app:company_home/st:sites/"; const DISCUSSION_QNAMEPATH = "/fm:discussion"; const COMMENT_QNAMEPATH = DISCUSSION_QNAMEPATH + "/cm:Comments/"; const QUERY_TEMPLATES = [ - {field: "keywords", template: "%(cm:name cm:title cm:description ia:whatEvent ia:descriptionEvent lnk:title lnk:description TEXT)"}]; + {field: "keywords", template: "%(cm:name cm:title cm:description ia:whatEvent ia:descriptionEvent lnk:title lnk:description TEXT TAG)"}]; /** * Returns site information data structure. @@ -666,11 +666,13 @@ function getSearchResults(params) // Simple keyword search and tag specific search if (term !== null && term.length !== 0) { - ftsQuery = "(" + term + " PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(term) + "/member\") "; + // TAG is now part of the default macro + ftsQuery = term + " "; } else if (tag !== null && tag.length !== 0) { - ftsQuery = "PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(tag) + "/member\" "; + // Just look for tag + ftsQuery = "TAG:" + tag +" "; } // Advanced search form data search. @@ -787,7 +789,7 @@ function getSearchResults(params) if (path != null) { - ftsQuery = 'PATH:"' + path + '/*" AND ' + ftsQuery; + ftsQuery = 'PATH:"' + path + '/*" AND (' + ftsQuery + ') '; } ftsQuery = '(' + ftsQuery + ') AND -TYPE:"cm:thumbnail"'; diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js index 9b793c4122..d47b1e6b65 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js @@ -58,20 +58,20 @@ function main() var placeholder = createWikiPage(currentName, wiki, { - content: "This page has been moved [[" + newName + "|here]]." + content: msg.get("page-moved") + " [[" + newName + "|" + msg.get("page-moved-here") + "]]." }); - + var data = { title: newName.replace(/_/g, " "), page: json.get("page") + "?title=" + newName, custom0: currentName.replace(/_/g, " ") } - + activities.postActivity("org.alfresco.wiki.page-renamed", params.siteId, "wiki", jsonUtils.toJSONString(data)); return ( { - name: newName // Return the new name to the client (?) + name: newName // Return the new name to the client }); } \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.properties b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.properties new file mode 100644 index 0000000000..57100114ea --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.properties @@ -0,0 +1,2 @@ +page-moved=This page has been moved +page-moved-here=here \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_de.properties b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_de.properties new file mode 100755 index 0000000000..a6f699dcbd --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_de.properties @@ -0,0 +1,2 @@ +page-moved=Diese Seite wurde verschoben nach +page-moved-here=hier. diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_es.properties b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_es.properties new file mode 100755 index 0000000000..e25e4227db --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_es.properties @@ -0,0 +1,2 @@ +page-moved=La p\u00e1gina se ha movido a +page-moved-here=aqu\u00ed diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_fr.properties b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_fr.properties new file mode 100755 index 0000000000..41d87595d1 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_fr.properties @@ -0,0 +1,2 @@ +page-moved=Cette page a \u00e9t\u00e9 d\u00e9plac\u00e9e +page-moved-here=ici diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_it.properties b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_it.properties new file mode 100755 index 0000000000..0348d266c2 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_it.properties @@ -0,0 +1,2 @@ +page-moved=La pagina \u00e8 stata spostata +page-moved-here=qui diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_ja.properties b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_ja.properties new file mode 100755 index 0000000000..c460ffc499 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post_ja.properties @@ -0,0 +1,2 @@ +page-moved=\u3053\u306e\u30da\u30fc\u30b8\u306f\u79fb\u52d5\u3057\u307e\u3057\u305f +page-moved-here=\u3053\u3053 diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 491312ed3c..f75b4ad36b 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -401,16 +401,13 @@ - + + - - - - - + diff --git a/source/java/org/alfresco/repo/cmis/rest/CMISAssocsMethod.java b/source/java/org/alfresco/repo/cmis/rest/CMISAssocsMethod.java index 22f635c6cc..d4de7a0147 100644 --- a/source/java/org/alfresco/repo/cmis/rest/CMISAssocsMethod.java +++ b/source/java/org/alfresco/repo/cmis/rest/CMISAssocsMethod.java @@ -87,7 +87,15 @@ public class CMISAssocsMethod implements TemplateMethodModelEx arg = args.get(i++); if (arg instanceof TemplateScalarModel) { - direction = CMISRelationshipDirectionEnum.FACTORY.fromLabel(((TemplateScalarModel)arg).getAsString()); + String strDirection = ((TemplateScalarModel)arg).getAsString(); + if (strDirection.equalsIgnoreCase(("both"))) + { + direction = CMISRelationshipDirectionEnum.EITHER; + } + else + { + direction = CMISRelationshipDirectionEnum.FACTORY.fromLabel(strDirection); + } } } catch (IndexOutOfBoundsException e) diff --git a/source/java/org/alfresco/repo/cmis/ws/DMAbstractServicePort.java b/source/java/org/alfresco/repo/cmis/ws/DMAbstractServicePort.java index 16b0f8c45d..41e4c25afa 100644 --- a/source/java/org/alfresco/repo/cmis/ws/DMAbstractServicePort.java +++ b/source/java/org/alfresco/repo/cmis/ws/DMAbstractServicePort.java @@ -97,7 +97,7 @@ public class DMAbstractServicePort INCLUDE_RELATIONSHIPS_ENUM_MAPPING = new HashMap(5); INCLUDE_RELATIONSHIPS_ENUM_MAPPING.put(EnumIncludeRelationships.SOURCE, CMISRelationshipDirectionEnum.SOURCE); INCLUDE_RELATIONSHIPS_ENUM_MAPPING.put(EnumIncludeRelationships.TARGET, CMISRelationshipDirectionEnum.TARGET); - INCLUDE_RELATIONSHIPS_ENUM_MAPPING.put(EnumIncludeRelationships.BOTH, CMISRelationshipDirectionEnum.BOTH); + INCLUDE_RELATIONSHIPS_ENUM_MAPPING.put(EnumIncludeRelationships.BOTH, CMISRelationshipDirectionEnum.EITHER); try { diff --git a/source/java/org/alfresco/repo/cmis/ws/DMRelationshipServicePort.java b/source/java/org/alfresco/repo/cmis/ws/DMRelationshipServicePort.java index 41b53e00fe..9b761e7230 100644 --- a/source/java/org/alfresco/repo/cmis/ws/DMRelationshipServicePort.java +++ b/source/java/org/alfresco/repo/cmis/ws/DMRelationshipServicePort.java @@ -45,7 +45,7 @@ public class DMRelationshipServicePort extends DMAbstractServicePort implements RELATIONSHIP_DIRECTION_MAPPING = new HashMap(5); RELATIONSHIP_DIRECTION_MAPPING.put(EnumRelationshipDirection.SOURCE, CMISRelationshipDirectionEnum.SOURCE); RELATIONSHIP_DIRECTION_MAPPING.put(EnumRelationshipDirection.TARGET, CMISRelationshipDirectionEnum.TARGET); - RELATIONSHIP_DIRECTION_MAPPING.put(EnumRelationshipDirection.EITHER, CMISRelationshipDirectionEnum.BOTH); + RELATIONSHIP_DIRECTION_MAPPING.put(EnumRelationshipDirection.EITHER, CMISRelationshipDirectionEnum.EITHER); } /** diff --git a/source/java/org/alfresco/repo/web/scripts/bean/KeywordSearch.java b/source/java/org/alfresco/repo/web/scripts/bean/KeywordSearch.java index 741b5224cf..3b555c6170 100644 --- a/source/java/org/alfresco/repo/web/scripts/bean/KeywordSearch.java +++ b/source/java/org/alfresco/repo/web/scripts/bean/KeywordSearch.java @@ -29,6 +29,7 @@ import org.alfresco.repo.template.TemplateNode; import org.alfresco.repo.web.scripts.RepositoryImageResolver; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.SearchParameters; @@ -66,34 +67,28 @@ public class KeywordSearch extends DeclarativeWebScript protected ServiceRegistry serviceRegistry; protected RepositoryImageResolver imageResolver; protected SearchService searchService; + protected NodeService nodeService; - /** - * @param searchService - */ public void setSearchService(SearchService searchService) { this.searchService = searchService; } - /** - * @param imageResolver - */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + public void setRepositoryImageResolver(RepositoryImageResolver imageResolver) { this.imageResolver = imageResolver; } - /** - * @param serviceRegistry - */ public void setServiceRegistry(ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; } - /* (non-Javadoc) - * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) - */ @Override protected Map executeImpl(WebScriptRequest req, Status status) { @@ -148,10 +143,6 @@ public class KeywordSearch extends DeclarativeWebScript /** * Execute the search - * - * @param searchTerms - * @param startPage - * @return */ private SearchResult search(String searchTerms, int startPage, int itemsPerPage, Locale locale, WebScriptRequest req) { @@ -229,6 +220,11 @@ public class KeywordSearch extends DeclarativeWebScript for (int i = 0; i < searchResult.getTotalPageItems(); i++) { NodeRef node = results.getNodeRef(i + searchResult.getStartIndex() - 1); + // Make the search resilient to invalid nodes + if (!nodeService.exists(node)) + { + continue; + } float score = results.getScore(i + searchResult.getStartIndex() - 1); nodes[i] = new SearchTemplateNode(node, score); } @@ -383,9 +379,6 @@ public class KeywordSearch extends DeclarativeWebScript /** * Construct - * - * @param nodeRef - * @param score */ public SearchTemplateNode(NodeRef nodeRef, float score) { @@ -395,17 +388,12 @@ public class KeywordSearch extends DeclarativeWebScript /** * Gets the result row score - * - * @return score */ public float getScore() { return score; } - /* (non-Javadoc) - * @see org.alfresco.repo.template.BaseContentNode#getUrl() - */ @Override public String getUrl() { @@ -416,5 +404,4 @@ public class KeywordSearch extends DeclarativeWebScript URLEncoder.encode(getName()) } ); } } - } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/content/StreamContent.java b/source/java/org/alfresco/repo/web/scripts/content/StreamContent.java index 03c2cb75f5..eed952c530 100644 --- a/source/java/org/alfresco/repo/web/scripts/content/StreamContent.java +++ b/source/java/org/alfresco/repo/web/scripts/content/StreamContent.java @@ -19,6 +19,7 @@ package org.alfresco.repo.web.scripts.content; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -58,8 +59,6 @@ import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.extensions.webscripts.WebScriptStatus; import org.springframework.util.FileCopyUtils; -import de.schlichtherle.io.FileOutputStream; - /** * Web script 'type' that can be used when the binary data of a content property needs to be streamed back to the client * as the result of executing the web script. diff --git a/source/java/org/alfresco/repo/web/scripts/rule/RuleServiceTest.java b/source/java/org/alfresco/repo/web/scripts/rule/RuleServiceTest.java index 455a3cdd52..eedb93ffec 100644 --- a/source/java/org/alfresco/repo/web/scripts/rule/RuleServiceTest.java +++ b/source/java/org/alfresco/repo/web/scripts/rule/RuleServiceTest.java @@ -755,8 +755,6 @@ public class RuleServiceTest extends BaseWebScriptTest // build parameterValues JSONObject parameterValues = new JSONObject(); parameterValues.put("destination-folder", destination); - parameterValues.put("assoc-name", "cm:copy"); - parameterValues.put("assoc-type", "cm:contains"); // add parameterValues result.put("parameterValues", parameterValues); diff --git a/source/java/org/alfresco/repo/web/scripts/search/PersonSearchTest.java b/source/java/org/alfresco/repo/web/scripts/search/PersonSearchTest.java index 4714b312c9..58a716ff4a 100644 --- a/source/java/org/alfresco/repo/web/scripts/search/PersonSearchTest.java +++ b/source/java/org/alfresco/repo/web/scripts/search/PersonSearchTest.java @@ -22,10 +22,11 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.web.scripts.BaseWebScriptTest; -import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.util.PropertyMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest; import org.springframework.extensions.webscripts.TestWebScriptServer.Response; @@ -37,11 +38,12 @@ import org.springframework.extensions.webscripts.TestWebScriptServer.Response; * @author Mark Rogers */ public class PersonSearchTest extends BaseWebScriptTest -{ +{ + private static Log logger = LogFactory.getLog(PersonSearchTest.class); + private MutableAuthenticationService authenticationService; private AuthenticationComponent authenticationComponent; private PersonService personService; - private AuthorityService authorityService; private static final String USER_ONE = "PersonSearchTestOne"; private static final String USER_TWO = "PersonSearchTestTwo"; @@ -55,7 +57,6 @@ public class PersonSearchTest extends BaseWebScriptTest this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService"); this.authenticationComponent = (AuthenticationComponent)getServer().getApplicationContext().getBean("authenticationComponent"); this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService"); - this.authorityService = (AuthorityService)getServer().getApplicationContext().getBean("AuthorityService"); this.authenticationComponent.setSystemUserAsCurrentUser(); // Create users @@ -93,32 +94,27 @@ public class PersonSearchTest extends BaseWebScriptTest /** * This is a basic sanity check of the search/person script. - * @throws Exception */ public void testSearch() throws Exception { - /** + /* * Do the first query for default format and all results */ { Response response = sendRequest(new GetRequest("/api/search/person?q=*"), Status.STATUS_OK); -// JSONObject top = new JSONObject(response.getContentAsString()); -// logger.debug(response.getContentAsString()); - System.out.println(response.getContentAsString()); + logger.debug(response.getContentAsString()); } - /** + /* * Same search with HTML format */ { Response response = sendRequest(new GetRequest("/api/search/person.html?q=*"), Status.STATUS_OK); -// JSONObject top = new JSONObject(response.getContentAsString()); -// logger.debug(response.getContentAsString()); - System.out.println(response.getContentAsString()); + logger.debug(response.getContentAsString()); } - /** + /* * Negative test - missing mandatory parameter * * Should really be a INVALID_REQUEST @@ -128,30 +124,13 @@ public class PersonSearchTest extends BaseWebScriptTest public void testPortletSearch() throws Exception { - /** - * Do the first query for default format and all results - */ - { - Response response = sendRequest(new GetRequest("/api/search/person.portlet?q=*"), Status.STATUS_OK); -// JSONObject top = new JSONObject(response.getContentAsString()); -// logger.debug(response.getContentAsString()); - System.out.println(response.getContentAsString()); - } + Response response = sendRequest(new GetRequest("/api/search/person.portlet?q=*"), Status.STATUS_OK); + logger.debug(response.getContentAsString()); } public void testAtomSearch() throws Exception { - /** - * Do the first query for default format and all results - */ - { - Response response = sendRequest(new GetRequest("/api/search/person.atom?q=*"), Status.STATUS_OK); -// JSONObject top = new JSONObject(response.getContentAsString()); -// logger.debug(response.getContentAsString()); - System.out.println(response.getContentAsString()); - } + Response response = sendRequest(new GetRequest("/api/search/person.atom?q=*"), Status.STATUS_OK); + logger.debug(response.getContentAsString()); } - - - } diff --git a/source/java/org/alfresco/repo/webdav/GetMethod.java b/source/java/org/alfresco/repo/webdav/GetMethod.java index edb8919be0..6733a5d9b4 100644 --- a/source/java/org/alfresco/repo/webdav/GetMethod.java +++ b/source/java/org/alfresco/repo/webdav/GetMethod.java @@ -37,6 +37,7 @@ import org.alfresco.service.cmr.model.FileNotFoundException; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.Path; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.TypeConverter; @@ -166,8 +167,13 @@ public class GetMethod extends WebDAVMethod throw new WebDAVServerException(HttpServletResponse.SC_NOT_FOUND); } + FileInfo realNodeInfo = nodeInfo; + if (nodeInfo.isLink()) + { + realNodeInfo = getFileFolderService().getFileInfo(nodeInfo.getLinkNodeRef()); + } // Check if the node is a folder - if (nodeInfo.isFolder()) + if (realNodeInfo.isFolder()) { // is content required if (!m_returnContent) @@ -182,27 +188,27 @@ public class GetMethod extends WebDAVMethod } else { - NodeRef pathNodeRef = nodeInfo.getNodeRef(); + NodeRef pathNodeRef = realNodeInfo.getNodeRef(); // Return the node details, and content if requested, check that the node passes the pre-conditions - checkPreConditions(nodeInfo); + checkPreConditions(realNodeInfo); // Build the response header m_response.setHeader(WebDAV.HEADER_ETAG, getDAVHelper().makeQuotedETag(pathNodeRef)); - Date modifiedDate = nodeInfo.getModifiedDate(); + Date modifiedDate = realNodeInfo.getModifiedDate(); if (modifiedDate != null) { long modDate = DefaultTypeConverter.INSTANCE.longValue(modifiedDate); m_response.setHeader(WebDAV.HEADER_LAST_MODIFIED, WebDAV.formatHeaderDate(modDate)); } - ContentReader reader = fileFolderService.getReader(nodeInfo.getNodeRef()); + ContentReader reader = fileFolderService.getReader(realNodeInfo.getNodeRef()); // ensure that we generate something, even if the content is missing reader = FileContentReader.getSafeContentReader( (ContentReader) reader, I18NUtil.getMessage(FileContentReader.MSG_MISSING_CONTENT), - nodeInfo.getNodeRef(), reader); + realNodeInfo.getNodeRef(), reader); // there is content associated with the node m_response.setHeader(WebDAV.HEADER_CONTENT_LENGTH, Long.toString(reader.getSize())); m_response.setHeader(WebDAV.HEADER_CONTENT_TYPE, reader.getMimetype()); @@ -316,6 +322,12 @@ public class GetMethod extends WebDAVMethod { writer = m_response.getWriter(); + boolean wasLink = false; + if (fileInfo.isLink()) + { + fileInfo = getFileFolderService().getFileInfo(fileInfo.getLinkNodeRef()); + wasLink = true; + } // Get the list of child nodes for the parent node List childNodeInfos = fileFolderService.list(fileInfo.getNodeRef()); @@ -367,7 +379,22 @@ public class GetMethod extends WebDAVMethod { rootURL = rootURL + WebDAVHelper.PathSeperator; } + if (wasLink) + { + Path pathToNode = getNodeService().getPath(fileInfo.getNodeRef()); + if (pathToNode.size() > 2) + { + pathToNode = pathToNode.subPath(2, pathToNode.size() - 1); + } + rootURL = getURLForPath(m_request, pathToNode.toDisplayPath(getNodeService(), getPermissionService()), true); + if (rootURL.endsWith(WebDAVHelper.PathSeperator) == false) + { + rootURL = rootURL + WebDAVHelper.PathSeperator; + } + + rootURL = rootURL + WebDAVHelper.encodeURL(fileInfo.getName(), m_userAgent) + WebDAVHelper.PathSeperator; + } // Start with a link to the parent folder so we can navigate back up, unless we are at the root level if (fileInfo.getNodeRef().equals(getRootNodeRef()) == false) { diff --git a/source/java/org/alfresco/repo/webdav/LockInfo.java b/source/java/org/alfresco/repo/webdav/LockInfo.java index 8696187bb9..d8db2db685 100644 --- a/source/java/org/alfresco/repo/webdav/LockInfo.java +++ b/source/java/org/alfresco/repo/webdav/LockInfo.java @@ -18,7 +18,8 @@ */ package org.alfresco.repo.webdav; -import java.util.LinkedList; +import java.util.HashSet; +import java.util.Set; /** * Class to represent a WebDAV lock info @@ -41,7 +42,7 @@ public class LockInfo private boolean shared = false; // Shared lock tokens - private LinkedList sharedLockTokens = null; + private Set sharedLockTokens = null; // Shared lock token separator private static final String SHARED_LOCK_TOKEN_SEPARATOR = ","; @@ -148,15 +149,15 @@ public class LockInfo * divided with SHARED_LOCK_TOKEN_SEPARATOR value. * @return List of shared lock tokens */ - public static LinkedList parseSharedLockTokens(String sharedLockTokens) + public static Set parseSharedLockTokens(String sharedLockTokens) { if (sharedLockTokens == null) { return null; } - LinkedList result = new LinkedList(); String[] sl = sharedLockTokens.split(SHARED_LOCK_TOKEN_SEPARATOR); + Set result = new HashSet(sl.length * 2); for (int i = 0; i < sl.length; i++) { result.add(sl[i]); @@ -170,7 +171,7 @@ public class LockInfo * * @return LinkedList */ - public LinkedList getSharedLockTokens() + public Set getSharedLockTokens() { return sharedLockTokens; } @@ -180,7 +181,7 @@ public class LockInfo * * @param sharedLockTokens */ - public void setSharedLockTokens(LinkedList sharedLockTokens) + public void setSharedLockTokens(Set sharedLockTokens) { this.sharedLockTokens = sharedLockTokens; } @@ -194,7 +195,7 @@ public class LockInfo { if (sharedLockTokens == null) { - sharedLockTokens = new LinkedList(); + sharedLockTokens = new HashSet(3); } sharedLockTokens.add(token); } @@ -206,7 +207,7 @@ public class LockInfo * @param lockTokens list of shared locks * @return String */ - public static String makeSharedLockTokensString(LinkedList lockTokens) + public static String makeSharedLockTokensString(Set lockTokens) { StringBuilder str = new StringBuilder(); diff --git a/source/java/org/alfresco/repo/webdav/PropFindMethod.java b/source/java/org/alfresco/repo/webdav/PropFindMethod.java index c865a9002e..913c8b3769 100644 --- a/source/java/org/alfresco/repo/webdav/PropFindMethod.java +++ b/source/java/org/alfresco/repo/webdav/PropFindMethod.java @@ -37,6 +37,7 @@ import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileNotFoundException; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.Path; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.TypeConverter; import org.alfresco.service.namespace.QName; @@ -287,24 +288,19 @@ public class PropFindMethod extends WebDAVMethod // Output the child node details for (FileInfo curChildInfo : childNodeInfos) { - // Do not output link nodes - - if ( curChildInfo.isLink() == false) - { - // Build the path for the current child node - baseBuild.setLength(curBaseLen); + // Build the path for the current child node + baseBuild.setLength(curBaseLen); - baseBuild.append(curChildInfo.getName()); + baseBuild.append(curChildInfo.getName()); - // Output the current child node details - generateResponseForNode(xml, curChildInfo, baseBuild.toString()); + // Output the current child node details + generateResponseForNode(xml, curChildInfo, baseBuild.toString()); - // If the child is a folder add it to the list of next level nodes - if (nextNodeInfos != null && curChildInfo.isFolder()) - { - nextNodeInfos.add(curChildInfo); - } - } + // If the child is a folder add it to the list of next level nodes + if (nextNodeInfos != null && curChildInfo.isFolder()) + { + nextNodeInfos.add(curChildInfo); + } } } @@ -387,6 +383,24 @@ public class PropFindMethod extends WebDAVMethod // Build the href string for the current node String strHRef = getURLForPath(m_request, path, isFolder); + if (nodeInfo.isLink()) + { + Path pathToNode = getNodeService().getPath(nodeInfo.getLinkNodeRef()); + if (pathToNode.size() > 2) + { + pathToNode = pathToNode.subPath(2, pathToNode.size() - 1); + } + + String rootURL = getURLForPath(m_request, pathToNode.toDisplayPath(getNodeService(), getPermissionService()), true); + if (rootURL.endsWith(WebDAVHelper.PathSeperator) == false) + { + rootURL = rootURL + WebDAVHelper.PathSeperator; + } + + String fname = (String) getNodeService().getProperty(nodeInfo.getLinkNodeRef(), ContentModel.PROP_NAME); + strHRef = rootURL + WebDAVHelper.encodeURL(fname, m_userAgent) + WebDAVHelper.PathSeperator; + isFolder = getFileFolderService().getFileInfo(nodeInfo.getLinkNodeRef()).isFolder(); + } xml.startElement(WebDAV.DAV_NS, WebDAV.XML_HREF, WebDAV.XML_NS_HREF, getDAVHelper().getNullAttributes()); xml.write(strHRef); xml.endElement(WebDAV.DAV_NS, WebDAV.XML_HREF, WebDAV.XML_NS_HREF); @@ -394,7 +408,7 @@ public class PropFindMethod extends WebDAVMethod switch (m_mode) { case GET_NAMED_PROPS: - generateNamedPropertiesResponse(xml, nodeInfo); + generateNamedPropertiesResponse(xml, nodeInfo, isFolder); break; case GET_ALL_PROPS: generateAllPropertiesResponse(xml, nodeRef, isFolder); @@ -416,10 +430,9 @@ public class PropFindMethod extends WebDAVMethod * @param node NodeRef * @param isDir boolean */ - private void generateNamedPropertiesResponse(XMLWriter xml, FileInfo nodeInfo) throws Exception + private void generateNamedPropertiesResponse(XMLWriter xml, FileInfo nodeInfo, boolean isDir) throws Exception { NodeRef nodeRef = nodeInfo.getNodeRef(); - boolean isFolder = nodeInfo.isFolder(); // Get the properties for the node Map props = getNodeService().getProperties(nodeRef); @@ -452,7 +465,7 @@ public class PropFindMethod extends WebDAVMethod // Check if the client is requesting lock information if (propName.equals(WebDAV.XML_LOCK_DISCOVERY)) // && metaData.isLocked()) { - generateLockDiscoveryResponse(xml, nodeRef, isFolder); + generateLockDiscoveryResponse(xml, nodeRef, isDir); } else if (propName.equals(WebDAV.XML_SUPPORTED_LOCK)) { @@ -467,7 +480,7 @@ public class PropFindMethod extends WebDAVMethod // If the node is a folder then return as a collection type xml.startElement(WebDAV.DAV_NS, WebDAV.XML_RESOURCE_TYPE, WebDAV.XML_NS_RESOURCE_TYPE, nullAttr); - if (isFolder) + if (isDir) { xml.write(DocumentHelper.createElement(WebDAV.XML_NS_COLLECTION)); } @@ -521,7 +534,7 @@ public class PropFindMethod extends WebDAVMethod xml.write(WebDAV.formatModifiedDate(typeConv.convert(Date.class, davValue))); xml.endElement(WebDAV.DAV_NS, WebDAV.XML_GET_LAST_MODIFIED, WebDAV.XML_NS_GET_LAST_MODIFIED); } - else if (propName.equals(WebDAV.XML_GET_CONTENT_LANGUAGE) && !isFolder) + else if (propName.equals(WebDAV.XML_GET_CONTENT_LANGUAGE) && !isDir) { // Get the content language // TODO: @@ -532,7 +545,7 @@ public class PropFindMethod extends WebDAVMethod // TODO: xml.endElement(WebDAV.DAV_NS, WebDAV.XML_GET_CONTENT_LANGUAGE, WebDAV.XML_NS_GET_CONTENT_LANGUAGE); } - else if (propName.equals(WebDAV.XML_GET_CONTENT_TYPE) && !isFolder) + else if (propName.equals(WebDAV.XML_GET_CONTENT_TYPE) && !isDir) { // Get the content type davValue = WebDAV.getDAVPropertyValue(props, WebDAV.XML_GET_CONTENT_TYPE); @@ -545,7 +558,7 @@ public class PropFindMethod extends WebDAVMethod xml.write(typeConv.convert(String.class, davValue)); xml.endElement(WebDAV.DAV_NS, WebDAV.XML_GET_CONTENT_TYPE, WebDAV.XML_NS_GET_CONTENT_TYPE); } - else if (propName.equals(WebDAV.XML_GET_ETAG) && !isFolder) + else if (propName.equals(WebDAV.XML_GET_ETAG) && !isDir) { // Output the etag @@ -558,7 +571,7 @@ public class PropFindMethod extends WebDAVMethod // Get the content length, if it's not a folder long len = 0; - if (!isFolder) + if (!isDir) { ContentData contentData = (ContentData) props.get(ContentModel.PROP_CONTENT); if (contentData != null) diff --git a/source/java/org/alfresco/repo/webdav/PutMethod.java b/source/java/org/alfresco/repo/webdav/PutMethod.java index 2deee22791..01eefe869e 100644 --- a/source/java/org/alfresco/repo/webdav/PutMethod.java +++ b/source/java/org/alfresco/repo/webdav/PutMethod.java @@ -154,16 +154,8 @@ public class PutMethod extends WebDAVMethod // Access the content ContentWriter writer = fileFolderService.getWriter(contentNodeInfo.getNodeRef()); // set content properties - String mimetype = null; - if (m_strContentType != null) - { - mimetype = m_strContentType; - } - else - { - String guessedMimetype = getMimetypeService().guessMimetype(contentNodeInfo.getName()); - mimetype = guessedMimetype; - } + String mimetype = getMimetypeService().guessMimetype(contentNodeInfo.getName()); + writer.setMimetype(mimetype); // Get the input stream from the request data diff --git a/source/java/org/alfresco/repo/webdav/UnlockMethod.java b/source/java/org/alfresco/repo/webdav/UnlockMethod.java index c3b627d8f0..786a5d6015 100644 --- a/source/java/org/alfresco/repo/webdav/UnlockMethod.java +++ b/source/java/org/alfresco/repo/webdav/UnlockMethod.java @@ -18,7 +18,7 @@ */ package org.alfresco.repo.webdav; -import java.util.LinkedList; +import java.util.Set; import javax.servlet.http.HttpServletResponse; @@ -166,7 +166,7 @@ public class UnlockMethod extends WebDAVMethod String sharedLocks = (String) nodeService.getProperty(lockNodeInfo.getNodeRef(), WebDAVModel.PROP_SHARED_LOCK_TOKENS); if (sharedLocks != null) { - LinkedList locks = LockInfo.parseSharedLockTokens(sharedLocks); + Set locks = LockInfo.parseSharedLockTokens(sharedLocks); if (locks != null && locks.contains(m_strLockToken)) { diff --git a/source/java/org/alfresco/repo/webdav/WebDAV.java b/source/java/org/alfresco/repo/webdav/WebDAV.java index cbb955913e..1247e9f3d9 100644 --- a/source/java/org/alfresco/repo/webdav/WebDAV.java +++ b/source/java/org/alfresco/repo/webdav/WebDAV.java @@ -35,6 +35,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; +import org.alfresco.util.ISO9075; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -573,7 +574,7 @@ public class WebDAV str.append(WebDAV.OPAQUE_LOCK_TOKEN); str.append(lockNode.getId()); str.append(LOCK_TOKEN_SEPERATOR); - str.append(owner); + str.append(ISO9075.encode(owner)); return str.toString(); } diff --git a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java index e7de1aa565..5c0e11d602 100644 --- a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java +++ b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java @@ -39,6 +39,7 @@ import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.AuthenticationService; +import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.util.EqualsHelper; import org.apache.commons.logging.Log; @@ -75,6 +76,7 @@ public class WebDAVHelper private MimetypeService m_mimetypeService; private LockService m_lockService; private AuthenticationService m_authService; + private PermissionService m_permissionService; // Empty XML attribute list @@ -94,6 +96,7 @@ public class WebDAVHelper m_dictionaryService = m_serviceRegistry.getDictionaryService(); m_mimetypeService = m_serviceRegistry.getMimetypeService(); m_lockService = m_serviceRegistry.getLockService(); + m_permissionService = m_serviceRegistry.getPermissionService(); m_authService = authService; } @@ -167,6 +170,15 @@ public class WebDAVHelper return m_lockService; } + /** + * + * @return Return the permission service + */ + public final PermissionService getPermissionService() + { + return m_permissionService; + } + /** * @return Return the copy service */ diff --git a/source/java/org/alfresco/repo/webdav/WebDAVMethod.java b/source/java/org/alfresco/repo/webdav/WebDAVMethod.java index b757d513b9..e8940bdbd1 100644 --- a/source/java/org/alfresco/repo/webdav/WebDAVMethod.java +++ b/source/java/org/alfresco/repo/webdav/WebDAVMethod.java @@ -32,6 +32,7 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.Map.Entry; import java.util.regex.Pattern; @@ -61,6 +62,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.AuthenticationService; +import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.RegexQNamePattern; import org.alfresco.service.transaction.TransactionService; @@ -655,6 +657,16 @@ public abstract class WebDAVMethod return m_davHelper.getLockService(); } + /** + * Convenience method to return the permission service + * + * @return PermissionService + */ + protected final PermissionService getPermissionService() + { + return m_davHelper.getPermissionService(); + } + /** * Convenience method to return the authentication service * @@ -912,7 +924,7 @@ public abstract class WebDAVMethod private void checkLockToken(LockInfo lockInfo, boolean ignoreShared, boolean lockMethod) throws WebDAVServerException { String nodeLockToken = lockInfo.getToken(); - LinkedList sharedLockTokens = lockInfo.getSharedLockTokens(); + Set sharedLockTokens = lockInfo.getSharedLockTokens(); if (m_conditions != null) { diff --git a/source/java/org/alfresco/repo/webdav/auth/BaseSSOAuthenticationFilter.java b/source/java/org/alfresco/repo/webdav/auth/BaseSSOAuthenticationFilter.java index fdee62b105..cb7669f837 100644 --- a/source/java/org/alfresco/repo/webdav/auth/BaseSSOAuthenticationFilter.java +++ b/source/java/org/alfresco/repo/webdav/auth/BaseSSOAuthenticationFilter.java @@ -72,6 +72,8 @@ public abstract class BaseSSOAuthenticationFilter extends BaseAuthenticationFilt private boolean m_isActive = true; + protected static final String MIME_HTML_TEXT = "text/html"; + /** * @param serverConfiguration the serverConfiguration to set */ @@ -515,6 +517,8 @@ public abstract class BaseSSOAuthenticationFilter extends BaseAuthenticationFilt { if ( hasLoginPage()) { + resp.setContentType(MIME_HTML_TEXT); + final PrintWriter out = resp.getWriter(); out.println(""); out.println("