Commit 579dcb63dcfb96bf29c183c6c0ee891357d18eae

Authored by kevin_fourie
1 parent 0d54dc56

Merged in from DEV trunk...

KTS-2143
"Manage Lookups for Field: Explanations incorrect"
Fixed.

Commited By: Kevin Fourie
Reviewed By: Conrad Vermeulen

Updated About page.

Committed By: Kevin Fourie
Reviewed By: Conrad Vermeulen

KTS-3033
"The bullets on the welcome dashlet render incorrectly"
Fixed. Added some left padding

Committed By: Megan Watson
Reviewed By: Jalaloedien Abrahams

KTC-177
"RSS feed appears wrong when launched from the 'Actions on this folder' when the folder has the internationalisation string as its name or the name of any of its subfolders."
Fixed. Added headers before displaying the feed. Cleaned up the htmlentities in the feed.

Committed By: Megan Watson
Reviewed By: Jonathan Byrne

KTS-3020
"When sent a link to a document in KnowledgeTree, asked to log in, but not taken to the document - taken to the dashboard."
Fixed. Modified the check on the last user to use the ip address and check if the last user timed out or not.

Committed by: Megan Watson
Reviewed by: Jonathan Byrne

KTS-3025
"Move KTWSAPI foders to KnowledgeTree forge"
Moved.

Committed By: Conrad Vermeulen
Reviewed By: Kevin Fourie

KTS-3038
"Scheduler plugins are not in the default data.sql install file"
Fixed. Updeated data.sql file.

Committed By: Kevin Fourie
Reviewed By: Megan Watson


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/STABLE/trunk@8063 c91229c3-7414-0410-bfa2-8a42b809f60b
ktwsapi/README.txt deleted
1 -KnowledgeTree WebService API  
2 -============================  
3 -  
4 -This folder contains the object model in various languages, used to access  
5 -KnowledgeTree via web services.  
6 \ No newline at end of file 0 \ No newline at end of file
ktwsapi/cpp/TODO.txt deleted
ktwsapi/delphi/doc/KTWSAPI.chm deleted
No preview for this file type
ktwsapi/delphi/examples/KTWSAPIExamples.bdsproj deleted
1 -<?xml version="1.0" encoding="utf-8"?>  
2 -<BorlandProject>  
3 - <PersonalityInfo>  
4 - <Option>  
5 - <Option Name="Personality">Delphi.Personality</Option>  
6 - <Option Name="ProjectType">VCLApplication</Option>  
7 - <Option Name="Version">1.0</Option>  
8 - <Option Name="GUID">{A7B8ECC5-0F7B-4E7C-8C44-8356FDCDB36A}</Option>  
9 - </Option>  
10 - </PersonalityInfo>  
11 - <Delphi.Personality>  
12 - <Source>  
13 - <Source Name="MainSource">KTWSAPIExamples.dpr</Source>  
14 - </Source>  
15 - <FileVersion>  
16 - <FileVersion Name="Version">7.0</FileVersion>  
17 - </FileVersion>  
18 - <Compiler>  
19 - <Compiler Name="A">8</Compiler>  
20 - <Compiler Name="B">0</Compiler>  
21 - <Compiler Name="C">1</Compiler>  
22 - <Compiler Name="D">1</Compiler>  
23 - <Compiler Name="E">0</Compiler>  
24 - <Compiler Name="F">0</Compiler>  
25 - <Compiler Name="G">1</Compiler>  
26 - <Compiler Name="H">1</Compiler>  
27 - <Compiler Name="I">1</Compiler>  
28 - <Compiler Name="J">0</Compiler>  
29 - <Compiler Name="K">0</Compiler>  
30 - <Compiler Name="L">1</Compiler>  
31 - <Compiler Name="M">0</Compiler>  
32 - <Compiler Name="N">1</Compiler>  
33 - <Compiler Name="O">1</Compiler>  
34 - <Compiler Name="P">1</Compiler>  
35 - <Compiler Name="Q">0</Compiler>  
36 - <Compiler Name="R">0</Compiler>  
37 - <Compiler Name="S">0</Compiler>  
38 - <Compiler Name="T">0</Compiler>  
39 - <Compiler Name="U">0</Compiler>  
40 - <Compiler Name="V">1</Compiler>  
41 - <Compiler Name="W">0</Compiler>  
42 - <Compiler Name="X">1</Compiler>  
43 - <Compiler Name="Y">1</Compiler>  
44 - <Compiler Name="Z">1</Compiler>  
45 - <Compiler Name="ShowHints">True</Compiler>  
46 - <Compiler Name="ShowWarnings">True</Compiler>  
47 - <Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>  
48 - <Compiler Name="NamespacePrefix"></Compiler>  
49 - <Compiler Name="GenerateDocumentation">False</Compiler>  
50 - <Compiler Name="DefaultNamespace"></Compiler>  
51 - <Compiler Name="SymbolDeprecated">True</Compiler>  
52 - <Compiler Name="SymbolLibrary">True</Compiler>  
53 - <Compiler Name="SymbolPlatform">True</Compiler>  
54 - <Compiler Name="SymbolExperimental">True</Compiler>  
55 - <Compiler Name="UnitLibrary">True</Compiler>  
56 - <Compiler Name="UnitPlatform">True</Compiler>  
57 - <Compiler Name="UnitDeprecated">True</Compiler>  
58 - <Compiler Name="UnitExperimental">True</Compiler>  
59 - <Compiler Name="HResultCompat">True</Compiler>  
60 - <Compiler Name="HidingMember">True</Compiler>  
61 - <Compiler Name="HiddenVirtual">True</Compiler>  
62 - <Compiler Name="Garbage">True</Compiler>  
63 - <Compiler Name="BoundsError">True</Compiler>  
64 - <Compiler Name="ZeroNilCompat">True</Compiler>  
65 - <Compiler Name="StringConstTruncated">True</Compiler>  
66 - <Compiler Name="ForLoopVarVarPar">True</Compiler>  
67 - <Compiler Name="TypedConstVarPar">True</Compiler>  
68 - <Compiler Name="AsgToTypedConst">True</Compiler>  
69 - <Compiler Name="CaseLabelRange">True</Compiler>  
70 - <Compiler Name="ForVariable">True</Compiler>  
71 - <Compiler Name="ConstructingAbstract">True</Compiler>  
72 - <Compiler Name="ComparisonFalse">True</Compiler>  
73 - <Compiler Name="ComparisonTrue">True</Compiler>  
74 - <Compiler Name="ComparingSignedUnsigned">True</Compiler>  
75 - <Compiler Name="CombiningSignedUnsigned">True</Compiler>  
76 - <Compiler Name="UnsupportedConstruct">True</Compiler>  
77 - <Compiler Name="FileOpen">True</Compiler>  
78 - <Compiler Name="FileOpenUnitSrc">True</Compiler>  
79 - <Compiler Name="BadGlobalSymbol">True</Compiler>  
80 - <Compiler Name="DuplicateConstructorDestructor">True</Compiler>  
81 - <Compiler Name="InvalidDirective">True</Compiler>  
82 - <Compiler Name="PackageNoLink">True</Compiler>  
83 - <Compiler Name="PackageThreadVar">True</Compiler>  
84 - <Compiler Name="ImplicitImport">True</Compiler>  
85 - <Compiler Name="HPPEMITIgnored">True</Compiler>  
86 - <Compiler Name="NoRetVal">True</Compiler>  
87 - <Compiler Name="UseBeforeDef">True</Compiler>  
88 - <Compiler Name="ForLoopVarUndef">True</Compiler>  
89 - <Compiler Name="UnitNameMismatch">True</Compiler>  
90 - <Compiler Name="NoCFGFileFound">True</Compiler>  
91 - <Compiler Name="ImplicitVariants">True</Compiler>  
92 - <Compiler Name="UnicodeToLocale">True</Compiler>  
93 - <Compiler Name="LocaleToUnicode">True</Compiler>  
94 - <Compiler Name="ImagebaseMultiple">True</Compiler>  
95 - <Compiler Name="SuspiciousTypecast">True</Compiler>  
96 - <Compiler Name="PrivatePropAccessor">True</Compiler>  
97 - <Compiler Name="UnsafeType">False</Compiler>  
98 - <Compiler Name="UnsafeCode">False</Compiler>  
99 - <Compiler Name="UnsafeCast">False</Compiler>  
100 - <Compiler Name="OptionTruncated">True</Compiler>  
101 - <Compiler Name="WideCharReduced">True</Compiler>  
102 - <Compiler Name="DuplicatesIgnored">True</Compiler>  
103 - <Compiler Name="UnitInitSeq">True</Compiler>  
104 - <Compiler Name="LocalPInvoke">True</Compiler>  
105 - <Compiler Name="MessageDirective">True</Compiler>  
106 - <Compiler Name="CodePage"></Compiler>  
107 - </Compiler>  
108 - <Linker>  
109 - <Linker Name="MapFile">0</Linker>  
110 - <Linker Name="OutputObjs">0</Linker>  
111 - <Linker Name="GenerateHpps">False</Linker>  
112 - <Linker Name="ConsoleApp">1</Linker>  
113 - <Linker Name="DebugInfo">False</Linker>  
114 - <Linker Name="RemoteSymbols">False</Linker>  
115 - <Linker Name="GenerateDRC">False</Linker>  
116 - <Linker Name="MinStackSize">16384</Linker>  
117 - <Linker Name="MaxStackSize">1048576</Linker>  
118 - <Linker Name="ImageBase">4194304</Linker>  
119 - <Linker Name="ExeDescription"></Linker>  
120 - </Linker>  
121 - <Directories>  
122 - <Directories Name="OutputDir"></Directories>  
123 - <Directories Name="UnitOutputDir"></Directories>  
124 - <Directories Name="PackageDLLOutputDir"></Directories>  
125 - <Directories Name="PackageDCPOutputDir"></Directories>  
126 - <Directories Name="SearchPath"></Directories>  
127 - <Directories Name="Packages"></Directories>  
128 - <Directories Name="Conditionals"></Directories>  
129 - <Directories Name="DebugSourceDirs"></Directories>  
130 - <Directories Name="UsePackages">False</Directories>  
131 - </Directories>  
132 - <Parameters>  
133 - <Parameters Name="RunParams"></Parameters>  
134 - <Parameters Name="HostApplication"></Parameters>  
135 - <Parameters Name="Launcher"></Parameters>  
136 - <Parameters Name="UseLauncher">False</Parameters>  
137 - <Parameters Name="DebugCWD"></Parameters>  
138 - <Parameters Name="Debug Symbols Search Path"></Parameters>  
139 - <Parameters Name="LoadAllSymbols">True</Parameters>  
140 - <Parameters Name="LoadUnspecifiedSymbols">False</Parameters>  
141 - </Parameters>  
142 - <Language>  
143 - <Language Name="ActiveLang"></Language>  
144 - <Language Name="ProjectLang">$00000000</Language>  
145 - <Language Name="RootDir"></Language>  
146 - </Language>  
147 - <VersionInfo>  
148 - <VersionInfo Name="IncludeVerInfo">False</VersionInfo>  
149 - <VersionInfo Name="AutoIncBuild">False</VersionInfo>  
150 - <VersionInfo Name="MajorVer">1</VersionInfo>  
151 - <VersionInfo Name="MinorVer">0</VersionInfo>  
152 - <VersionInfo Name="Release">0</VersionInfo>  
153 - <VersionInfo Name="Build">0</VersionInfo>  
154 - <VersionInfo Name="Debug">False</VersionInfo>  
155 - <VersionInfo Name="PreRelease">False</VersionInfo>  
156 - <VersionInfo Name="Special">False</VersionInfo>  
157 - <VersionInfo Name="Private">False</VersionInfo>  
158 - <VersionInfo Name="DLL">False</VersionInfo>  
159 - <VersionInfo Name="Locale">1044</VersionInfo>  
160 - <VersionInfo Name="CodePage">1252</VersionInfo>  
161 - </VersionInfo>  
162 - <VersionInfoKeys>  
163 - <VersionInfoKeys Name="CompanyName"></VersionInfoKeys>  
164 - <VersionInfoKeys Name="FileDescription"></VersionInfoKeys>  
165 - <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>  
166 - <VersionInfoKeys Name="InternalName"></VersionInfoKeys>  
167 - <VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>  
168 - <VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>  
169 - <VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>  
170 - <VersionInfoKeys Name="ProductName"></VersionInfoKeys>  
171 - <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>  
172 - <VersionInfoKeys Name="Comments"></VersionInfoKeys>  
173 - </VersionInfoKeys> <Excluded_Packages>  
174 - <Excluded_Packages Name="C:\Programfiler\Fellesfiler\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D10.bpl">RemObjects Everwood for Delphi</Excluded_Packages>  
175 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Core_D10.bpl">RemObjects SDK - Core Library</Excluded_Packages>  
176 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_WebBroker_D10.bpl">RemObjects SDK - WebBroker Library</Excluded_Packages>  
177 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_RODX_D10.bpl">RemObjects SDK - RODXSock Library</Excluded_Packages>  
178 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_BPDX_D10.bpl">RemObjects SDK - BPDX Library</Excluded_Packages>  
179 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_DataSnap_D10.bpl">RemObjects SDK - DataSnap Integration Pack</Excluded_Packages>  
180 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Pascal Script\Dcu\D10\PascalScript_Core_D10.bpl">RemObjects Pascal Script - Core Package</Excluded_Packages>  
181 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Pascal Script\Dcu\D10\PascalScript_RO_D10.bpl">RemObjects Pascal Script - RemObjects SDK 3.0 Integration</Excluded_Packages>  
182 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Indy_D10.bpl">RemObjects SDK - Indy Library</Excluded_Packages>  
183 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_IDE_D10.bpl">RemObjects SDK - IDE Integration for Win32</Excluded_Packages>  
184 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Core_D10.bpl">RemObjects Data Abstract - Core Library</Excluded_Packages>  
185 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IDE_D10.bpl">RemObjects Data Abstract - IDE Package</Excluded_Packages>  
186 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_ADODriver_D10.bpl">RemObjects Data Abstract - ADOExpress/dbGo Driver</Excluded_Packages>  
187 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IBXDriver_D10.bpl">RemObjects Data Abstract - InterBase Express Driver</Excluded_Packages>  
188 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_DBXDriver_D10.bpl">RemObjects Data Abstract - dbExpress Driver</Excluded_Packages>  
189 - <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Scripting_D10.bpl">RemObjects Data Abstract - Scripting Integration Library</Excluded_Packages>  
190 - </Excluded_Packages>  
191 - </Delphi.Personality>  
192 - <StarTeamAssociation></StarTeamAssociation>  
193 - <StarTeamNonRelativeFiles></StarTeamNonRelativeFiles>  
194 -</BorlandProject>  
ktwsapi/delphi/examples/KTWSAPIExamples.dpr deleted
1 -{  
2 - Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
3 -  
4 - All rights reserved.  
5 -  
6 - Redistribution and use in source and binary forms, with or without  
7 - modification, are permitted provided that the following conditions are met:  
8 -  
9 - i) Redistributions of source code must retain the above copyright notice,  
10 - this list of conditions and the following disclaimer.  
11 - ii) Redistributions in binary form must reproduce the above copyright  
12 - notice, this list of conditions and the following disclaimer in the  
13 - documentation and/or other materials provided with the distribution.  
14 - iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
15 - names of its contributors may be used to endorse or promote products  
16 - derived from this software without specific prior written permission.  
17 -  
18 - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
19 - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
20 - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
21 - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
22 - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
23 - EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
24 - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
25 - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
26 - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
27 - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
28 - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
29 -}  
30 -  
31 -{*  
32 - This is a Delphi port of the php api for KnowledgeTree WebService.  
33 -  
34 - @Author Bjarte Kalstveit Vebj�rnsen <bjarte@macaos.com>  
35 - @Version 1.0 BKV 24.09.2007 Initial revision  
36 -*}  
37 -  
38 -  
39 -program KTWSAPIExamples;  
40 -  
41 -uses  
42 - Forms,  
43 - uFolderContentExample in 'uFolderContentExample.pas' {FolderContentExample},  
44 - uwebservice in '..\uwebservice.pas',  
45 - uktwsapi in '..\uktwsapi.pas',  
46 - uPHPserialize in '..\uPHPserialize.pas';  
47 -  
48 -{$R *.res}  
49 -  
50 -begin  
51 - Application.Initialize;  
52 - Application.CreateForm(TFolderContentExample, FolderContentExample);  
53 - Application.Run;  
54 -end.  
55 -  
ktwsapi/delphi/examples/KTWSAPIExamples.res deleted
No preview for this file type
ktwsapi/delphi/examples/uFolderContentExample.dfm deleted
1 -object FolderContentExample: TFolderContentExample  
2 - Left = 0  
3 - Top = 0  
4 - Caption = 'FolderContentExample'  
5 - ClientHeight = 538  
6 - ClientWidth = 219  
7 - Color = clBtnFace  
8 - Font.Charset = DEFAULT_CHARSET  
9 - Font.Color = clWindowText  
10 - Font.Height = -11  
11 - Font.Name = 'Tahoma'  
12 - Font.Style = []  
13 - OldCreateOrder = False  
14 - PixelsPerInch = 96  
15 - TextHeight = 13  
16 - object tvFolderList: TTreeView  
17 - AlignWithMargins = True  
18 - Left = 3  
19 - Top = 34  
20 - Width = 213  
21 - Height = 501  
22 - Align = alClient  
23 - Images = ImageList4  
24 - Indent = 19  
25 - TabOrder = 0  
26 - OnCollapsed = tvFolderListCollapsed  
27 - OnExpanded = tvFolderListExpanded  
28 - end  
29 - object Button1: TButton  
30 - AlignWithMargins = True  
31 - Left = 3  
32 - Top = 3  
33 - Width = 213  
34 - Height = 25  
35 - Align = alTop  
36 - Caption = 'Populate folders'  
37 - TabOrder = 1  
38 - OnClick = Button1Click  
39 - end  
40 - object ImageList4: TImageList  
41 - Left = 8  
42 - Top = 496  
43 - Bitmap = {  
44 - 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600  
45 - 0000000000003600000028000000400000001000000001002000000000000010  
46 - 00000000000000000000000000000000000000000000078DBE00078DBE00078D  
47 - BE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D  
48 - BE00078DBE00078DBE00000000000000000000000000078DBE00078DBE00078D  
49 - BE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D  
50 - BE00078DBE000000000000000000000000000000000000000000000000000000  
51 - 0000000000000000000000000000000000000000000000000000000000000000  
52 - 0000000000000000000000000000000000000000000000000000000000000000  
53 - 0000000000000000000000000000000000000000000000000000000000000000  
54 - 000000000000000000000000000000000000078DBE0063CBF800078DBE00A3E1  
55 - FB0066CDF90065CDF80065CDF90065CDF90065CDF80065CDF90065CDF80066CD  
56 - F8003AADD800ACE7F500078DBE0000000000078DBE0025A1D10071C6E80084D7  
57 - FA0066CDF90065CDF90065CDF90065CDF90065CDF80065CDF90065CDF80066CE  
58 - F9003AADD8001999C90000000000000000000000000000000000000000000000  
59 - 0000000000000000000000000000000000000000000000000000000000000000  
60 - 0000000000000000000000000000000000000000000000000000000000000000  
61 - 0000000000000000000000000000000000000000000000000000000000000000  
62 - 000000000000000000000000000000000000078DBE006AD1F900078DBE00A8E5  
63 - FC006FD4FA006FD4F9006ED4FA006FD4F9006FD4FA006FD4FA006FD4FA006ED4  
64 - F9003EB1D900B1EAF500078DBE0000000000078DBE004CBCE70039A8D100A0E2  
65 - FB006FD4FA006FD4F9006ED4FA006FD4F9006FD4FA006FD4FA006FD4FA006ED4  
66 - F9003EB1D900C9F0F300078DBE00000000000000000000000000000000000000  
67 - 0000000000000000000000000000000000000000000000000000000000000000  
68 - 0000000000000000000000000000000000000000000000000000000000000000  
69 - 0000000000000000000000000000000000000000000000000000000000000000  
70 - 000000000000000000000000000000000000078DBE0072D6FA00078DBE00AEEA  
71 - FC0079DCFB0079DCFB0079DCFB0079DCFB0079DCFB007ADCFB0079DCFA0079DC  
72 - FA0044B5D900B6EEF600078DBE0000000000078DBE0072D6FA00078DBE00AEE9  
73 - FC0079DCFB0079DCFB0079DCFB0079DCFB0079DCFB007ADCFB0079DCFA0079DC  
74 - FA0044B5D900C9F0F300078DBE00000000000000000000000000000000000000  
75 - 0000000000000000000000000000000000000000000000000000000000000000  
76 - 0000000000000000000000000000000000000000000000000000000000000000  
77 - 0000000000000000000000000000000000000000000000000000000000000000  
78 - 000000000000000000000000000000000000078DBE0079DDFB00078DBE00B5EE  
79 - FD0083E4FB0084E4FB0083E4FC0083E4FC0084E4FC0083E4FC0083E4FB0084E5  
80 - FC0048B9DA00BBF2F600078DBE0000000000078DBE0079DDFB001899C7009ADF  
81 - F30092E7FC0084E4FB0083E4FC0083E4FC0084E4FC0083E4FC0083E4FB0084E5  
82 - FC0048B9DA00C9F0F3001496C400000000000000000000000000000000000000  
83 - 0000000000000000000000000000000000000000000000000000000000000000  
84 - 0000000000000000000000000000000000000000000000000000000000000000  
85 - 0000000000000000000000000000000000000000000000000000000000000000  
86 - 000000000000000000000000000000000000078DBE0082E3FC00078DBE00BAF3  
87 - FD008DEBFC008DEBFC008DEBFC008DEBFD008DEBFD008DEBFC008DEBFD008DEB  
88 - FC004CBBDA00BEF4F700078DBE0000000000078DBE0082E3FC0043B7DC0065C2  
89 - E000ABF0FC008DEBFC008DEBFC008DEBFD008DEBFD008DEBFC008DEBFD008DEB  
90 - FC004CBBDA00C9F0F300C9F0F300078DBE000000000000000000000000000000  
91 - 0000000000000000000000000000000000000000000000000000000000000000  
92 - 0000000000000000000000000000000000000000000000000000000000000000  
93 - 0000000000000000000000000000000000000000000000000000000000000000  
94 - 000000000000000000000000000000000000078DBE008AEAFC00078DBE00FFFF  
95 - FF00C9F7FE00C8F7FE00C9F7FE00C9F7FE00C9F7FE00C8F7FE00C9F7FE00C8F7  
96 - FE009BD5E700DEF9FB00078DBE0000000000078DBE008AEAFC0077DCF300219C  
97 - C700FEFFFF00C8F7FD00C9F7FD00C9F7FD00C9F7FE00C8F7FE00C9F7FD00C8F7  
98 - FE009BD5E600EAFEFE00D2F3F800078DBE000000000000000000000000000000  
99 - 0000000000000000000000000000000000000000000000000000000000000000  
100 - 0000000000000000000000000000000000000000000000000000000000000000  
101 - 0000000000000000000000000000000000000000000000000000000000000000  
102 - 000000000000000000000000000000000000078DBE0093F0FE00078DBE00078D  
103 - BE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D  
104 - BE00078DBE00078DBE00078DBE0000000000078DBE0093F0FE0093F0FD001697  
105 - C500078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D  
106 - BE00078DBE00078DBE00078DBE00078DBE000000000000000000000000000000  
107 - 0000000000000000000000000000000000000000000000000000000000000000  
108 - 0000000000000000000000000000000000000000000000000000000000000000  
109 - 0000000000000000000000000000000000000000000000000000000000000000  
110 - 000000000000000000000000000000000000078DBE009BF5FE009AF6FE009AF6  
111 - FE009BF5FD009BF6FE009AF6FE009BF5FE009AF6FD009BF5FE009AF6FE009AF6  
112 - FE000989BA00000000000000000000000000078DBE009BF5FE009AF6FE009AF6  
113 - FE009BF5FD009BF6FE009AF6FE009BF5FE009AF6FD009BF5FE009AF6FE009AF6  
114 - FE000989BA000000000000000000000000000000000000000000000000000000  
115 - 0000000000000000000000000000000000000000000000000000000000000000  
116 - 0000000000000000000000000000000000000000000000000000000000000000  
117 - 0000000000000000000000000000000000000000000000000000000000000000  
118 - 000000000000000000000000000000000000078DBE00FEFEFE00A0FBFF00A0FB  
119 - FE00A0FBFE00A1FAFE00A1FBFE00A0FAFE00A1FBFE00A1FBFF00A0FBFF00A1FB  
120 - FF000989BA00000000000000000000000000078DBE00FEFEFE00A0FBFF00A0FB  
121 - FE00A0FBFE00A1FAFE00A1FBFE00A0FAFE00A1FBFE00A1FBFF00A0FBFF00A1FB  
122 - FF000989BA000000000000000000000000000000000000000000000000000000  
123 - 0000000000000000000000000000000000000000000000000000000000000000  
124 - 0000000000000000000000000000000000000000000000000000000000000000  
125 - 0000000000000000000000000000000000000000000000000000000000000000  
126 - 00000000000000000000000000000000000000000000078DBE00FEFEFE00A5FE  
127 - FF00A5FEFF00A5FEFF00078DBE00078DBE00078DBE00078DBE00078DBE00078D  
128 - BE000000000000000000000000000000000000000000078DBE00FEFEFE00A5FE  
129 - FF00A5FEFF00A5FEFF00078DBE00078DBE00078DBE00078DBE00078DBE00078D  
130 - BE00000000000000000000000000000000000000000000000000000000000000  
131 - 0000000000000000000000000000000000000000000000000000000000000000  
132 - 0000000000000000000000000000000000000000000000000000000000000000  
133 - 0000000000000000000000000000000000000000000000000000000000000000  
134 - 0000000000000000000000000000000000000000000000000000078DBE00078D  
135 - BE00078DBE00078DBE0000000000000000000000000000000000000000000000  
136 - 0000000000000000000000000000000000000000000000000000078DBE00078D  
137 - BE00078DBE00078DBE0000000000000000000000000000000000000000000000  
138 - 0000000000000000000000000000000000000000000000000000000000000000  
139 - 0000000000000000000000000000000000000000000000000000000000000000  
140 - 0000000000000000000000000000000000000000000000000000000000000000  
141 - 0000000000000000000000000000000000000000000000000000000000000000  
142 - 0000000000000000000000000000000000000000000000000000000000000000  
143 - 0000000000000000000000000000000000000000000000000000000000000000  
144 - 0000000000000000000000000000000000000000000000000000000000000000  
145 - 0000000000000000000000000000000000000000000000000000000000000000  
146 - 0000000000000000000000000000000000000000000000000000000000000000  
147 - 0000000000000000000000000000000000000000000000000000000000000000  
148 - 0000000000000000000000000000000000000000000000000000000000000000  
149 - 0000000000000000000000000000000000000000000000000000000000000000  
150 - 0000000000000000000000000000000000000000000000000000000000000000  
151 - 0000000000000000000000000000000000000000000000000000000000000000  
152 - 0000000000000000000000000000000000000000000000000000000000000000  
153 - 0000000000000000000000000000000000000000000000000000000000000000  
154 - 0000000000000000000000000000000000000000000000000000000000000000  
155 - 0000000000000000000000000000000000000000000000000000000000000000  
156 - 0000000000000000000000000000000000000000000000000000000000000000  
157 - 0000000000000000000000000000000000000000000000000000000000000000  
158 - 0000000000000000000000000000000000000000000000000000000000000000  
159 - 0000000000000000000000000000000000000000000000000000000000000000  
160 - 0000000000000000000000000000000000000000000000000000000000000000  
161 - 0000000000000000000000000000000000000000000000000000000000000000  
162 - 0000000000000000000000000000000000000000000000000000000000000000  
163 - 0000000000000000000000000000000000000000000000000000000000000000  
164 - 0000000000000000000000000000000000000000000000000000000000000000  
165 - 0000000000000000000000000000000000000000000000000000000000000000  
166 - 0000000000000000000000000000000000000000000000000000000000000000  
167 - 0000000000000000000000000000000000000000000000000000000000000000  
168 - 0000000000000000000000000000000000000000000000000000000000000000  
169 - 0000000000000000000000000000000000000000000000000000000000000000  
170 - 0000000000000000000000000000000000000000000000000000000000000000  
171 - 0000000000000000000000000000000000000000000000000000000000000000  
172 - 0000000000000000000000000000000000000000000000000000000000000000  
173 - 0000000000000000000000000000000000000000000000000000000000000000  
174 - 000000000000000000000000000000000000424D3E000000000000003E000000  
175 - 2800000040000000100000000100010000000000800000000000000000000000  
176 - 000000000000000000000000FFFFFF0080038007000000000001000300000000  
177 - 0001000100000000000100010000000000010001000000000001000000000000  
178 - 0001000000000000000100000000000000070007000000000007000700000000  
179 - 800F800F00000000C3FFC3FF00000000FFFFFFFF00000000FFFFFFFF00000000  
180 - FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000  
181 - 000000000000}  
182 - end  
183 -end  
ktwsapi/delphi/examples/uFolderContentExample.pas deleted
1 -unit uFolderContentExample;  
2 -  
3 -interface  
4 -  
5 -uses  
6 - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
7 - Dialogs, uKtwsapi, uWebService, ImgList, ComCtrls, StdCtrls;  
8 -  
9 -type  
10 - TFolderContentExample = class(TForm)  
11 - tvFolderList: TTreeView;  
12 - ImageList4: TImageList;  
13 - Button1: TButton;  
14 - procedure Button1Click(Sender: TObject);  
15 - procedure tvFolderListCollapsed(Sender: TObject; Node: TTreeNode);  
16 - procedure tvFolderListExpanded(Sender: TObject; Node: TTreeNode);  
17 - private  
18 - { Private declarations }  
19 - FIsPopulating: Boolean;  
20 - procedure PopulateTreeView(items: kt_folder_items;  
21 - parent: TTreeNode; tv: TTreeView);  
22 - public  
23 - { Public declarations }  
24 - end;  
25 -  
26 -var  
27 - FolderContentExample: TFolderContentExample;  
28 - UserName, Password: String;  
29 -  
30 -implementation  
31 -  
32 -{$R *.dfm}  
33 -  
34 -procedure TFolderContentExample.Button1Click(Sender: TObject);  
35 -var  
36 - ktapi: TKTWSAPI;  
37 - folder: TKTWSAPI_Folder;  
38 - contents: kt_folder_contents;  
39 -begin  
40 - if FIsPopulating then Exit;  
41 -  
42 - Screen.Cursor := crHourglass;  
43 -  
44 - FIsPopulating := True;  
45 - ktapi := TKTWSAPI.Create;  
46 - try  
47 - ktapi.SetDownloadPath(ExtractFileDir(Application.ExeName));  
48 - ktapi.StartSession(UserName,Password);  
49 -  
50 - folder:= ktapi.GetRootFolder;  
51 - try  
52 - contents := folder.GetListing(10);  
53 - try  
54 - PopulateTreeView(contents.items, nil, tvFolderList);  
55 - finally  
56 - contents.Free;  
57 - end;  
58 - finally  
59 - folder.Free;  
60 - end;  
61 -  
62 - ktapi.Logout;  
63 - finally  
64 - ktapi.Free;  
65 - Screen.Cursor := crDefault;  
66 - FIsPopulating := False;  
67 - end;  
68 -end;  
69 -  
70 -procedure TFolderContentExample.PopulateTreeView(items: kt_folder_items; parent: TTreeNode;  
71 - tv: TTreeView);  
72 -var  
73 - I: Integer;  
74 - node: TTreeNode;  
75 - it: kt_folder_item;  
76 -begin  
77 - for I := 0 to Length(items) - 1 do  
78 - begin  
79 - it := items[i];  
80 - if it.item_type <> 'F' then Continue;  
81 - node := tv.Items.AddChild(parent, it.title);  
82 - node.ImageIndex := 0;  
83 - node.Data := it;  
84 - if (Length(it.items) > 0) then  
85 - PopulateTreeView(it.items, node, tv);  
86 - end;  
87 -end;  
88 -  
89 -procedure TFolderContentExample.tvFolderListCollapsed(Sender: TObject;  
90 - Node: TTreeNode);  
91 -begin  
92 - Node.ImageIndex := 0;  
93 -end;  
94 -  
95 -procedure TFolderContentExample.tvFolderListExpanded(Sender: TObject;  
96 - Node: TTreeNode);  
97 -begin  
98 - Node.ImageIndex := 1;  
99 -end;  
100 -  
101 -initialization  
102 - UserName := 'xxxx';  
103 - Password := 'xxxx';  
104 - uktwsapi.KTWebServerUrl := 'http://ktdms.trunk';  
105 - uktwsapi.KTWebServiceUrl := uktwsapi.KTWebServerUrl+'/ktwebservice/webservice.php?wsdl';  
106 - uktwsapi.KTUploadUrl := uktwsapi.KTWebServerUrl+'/ktwebservice/upload.php';  
107 -  
108 -end.  
ktwsapi/delphi/uPHPserialize.pas deleted
1 -{  
2 - Copyright (c) 2007, The Jam Warehouse Software (Pty) Ltd.  
3 -  
4 - All rights reserved.  
5 -  
6 - Redistribution and use in source and binary forms, with or without  
7 - modification, are permitted provided that the following conditions are met:  
8 -  
9 - i) Redistributions of source code must retain the above copyright notice,  
10 - this list of conditions and the following disclaimer.  
11 - ii) Redistributions in binary form must reproduce the above copyright  
12 - notice, this list of conditions and the following disclaimer in the  
13 - documentation and/or other materials provided with the distribution.  
14 - iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
15 - names of its contributors may be used to endorse or promote products  
16 - derived from this software without specific prior written permission.  
17 -  
18 - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
19 - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
20 - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
21 - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
22 - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
23 - EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
24 - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
25 - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
26 - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
27 - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
28 - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
29 -}  
30 -  
31 -{*  
32 - A helper unit to unserialize a php serialized string  
33 -  
34 - Inspired by the various implementaions presented here  
35 - http://www.phpguru.org/static/PHP_Unserialize.html  
36 -  
37 - @Author Bjarte Kalstveit Vebjørnsen <bjarte@macaos.com>  
38 - @Version 1.0 BKV 24.09.2007 Initial revision  
39 - @Todo A complementary serializing function would be nice  
40 -*}  
41 -  
42 -unit uPHPSerialize;  
43 -  
44 -interface  
45 -  
46 -uses  
47 - Classes, SysUtils, Variants, ComCtrls;  
48 -  
49 -type  
50 - TPHPValue = class;  
51 - TPHPArray = class;  
52 - TPHPSerialize = class;  
53 -  
54 - /// a single hash element  
55 - TPHPHashElement = record  
56 - Key: TPHPValue; /// The Key part of the element  
57 - Value: TPHPValue; /// The Value part of the element  
58 - end;  
59 -  
60 - /// an array of hash elements  
61 - TPHPHashedElementArray = array of TPHPHashElement;  
62 -  
63 - /// Tries to replicate a php array by accessing values through strings  
64 - /// @Todo: Add support for numeric keys  
65 - TPHPArray = class  
66 - private  
67 - FElements: TPHPHashedElementArray; /// array of hash elements  
68 - function GetValue(Key: string): TPHPValue; overload;  
69 - function GetValue(Key: TPHPValue): TPHPValue; overload;  
70 - procedure SetValue(Key: TPHPValue; VValue: TPHPValue); overload;  
71 - function GetCount: Integer;  
72 - function Getempty: Boolean;  
73 - public  
74 - property Value[Key: string]: TPHPValue read GetValue; default;  
75 - property Value[Key: TPHPValue]: TPHPValue read GetValue write SetValue; default;  
76 - property Count: Integer read GetCount;  
77 - property Empty: Boolean read Getempty;  
78 - procedure Clear;  
79 - constructor Create;  
80 - destructor Destroy; override;  
81 - end;  
82 -  
83 - /// Tries to represent a PHP value of any type  
84 - TPHPValue = class  
85 - private  
86 - FObj: TObject; /// Holds value if it's an object or array  
87 - FValue: String; /// Holds value if it's something else  
88 - procedure Clear;  
89 - public  
90 - constructor Create(Value: TObject); overload;  
91 - constructor Create(Value: String); overload;  
92 - destructor Destroy; override;  
93 - function AsString: String;  
94 - function AsDouble: Double;  
95 - function AsInteger: Integer;  
96 - function AsObject: TObject;  
97 - function AsArray: TPHPArray;  
98 - function AsBoolean: Boolean;  
99 - end;  
100 -  
101 - /// Class for unserializing a php serialized string  
102 - TPHPSerialize = class  
103 - private  
104 - function GetLength(Data: String): Integer;  
105 - function GetIntLength(Value: Integer): Integer;  
106 - public  
107 - class function Unserialize(Data: String): TPHPValue;  
108 - function _Unserialize(var Data: String): TPHPValue;  
109 - end;  
110 -  
111 -implementation  
112 -  
113 -{ TPHPSerialize }  
114 -  
115 -{*  
116 - Finds the length of they to the type  
117 -  
118 - @param string Data  
119 - @return integer  
120 -*}  
121 -function TPHPSerialize.GetLength(Data: String): Integer;  
122 -begin  
123 - Data := Copy(Data, 3, Length(Data));  
124 -  
125 - Result := StrToIntDef(Copy(Data, 0, Pos(':', Data)-1), 0);  
126 -end;  
127 -  
128 -{*  
129 - Finds the lenght of the character-space the value occupies  
130 -  
131 - @param integer Value  
132 - @return Integer  
133 -*}  
134 -function TPHPSerialize.GetIntLength(Value: Integer): Integer;  
135 -begin  
136 - Result := Length(IntToStr(Value));  
137 -end;  
138 -  
139 -{*  
140 - Helper function to use this class statically  
141 -  
142 - @param integer Value  
143 - @return Integer  
144 -*}  
145 -class function TPHPSerialize.Unserialize(Data: String): TPHPValue;  
146 -var  
147 - obj: TPHPSerialize;  
148 -begin  
149 - obj := TPHPSerialize.Create;  
150 - try  
151 - Result := obj._Unserialize(Data);  
152 - finally  
153 - obj.Free;  
154 - end;  
155 -end;  
156 -  
157 -{*  
158 - Recursing function for unserializing a string and creating a php value from it  
159 -  
160 - @see TPHPValue  
161 - @param Data String  
162 - @return TPHPValue  
163 -*}  
164 -function TPHPSerialize._Unserialize(var Data: String): TPHPValue;  
165 -var  
166 - I, Len: Integer;  
167 - Num: Double;  
168 - C: String;  
169 - Arr: TPHPArray;  
170 - Key, Value: TPHPValue;  
171 -begin  
172 - C := Copy(Data,0,1);  
173 -  
174 - if (C = 'a') then  
175 - begin  
176 - Len := GetLength(Data);  
177 - Data := Copy(Data, GetIntLength(Len) + 5, Length(Data) );  
178 -  
179 - Arr := TPHPArray.Create;  
180 - for I := 0 to Len-1 do  
181 - begin  
182 - Key := _Unserialize(Data);  
183 - Value := _Unserialize(Data);  
184 -  
185 - Arr[Key] := Value;  
186 - end;  
187 -  
188 - Data := Copy(Data, Length(Data));  
189 - Result := TPHPValue.Create(Arr);  
190 -  
191 - end else if (C = 's') then  
192 - begin  
193 - Len := GetLength(Data);  
194 - Result := TPHPValue.Create(Copy(Data, GetIntLength(Len) + 5, Len));  
195 - Data := Copy(Data, GetIntLength(Len) + 7 + Len, Length(Data));  
196 - end else if (C = 'i') or (C = 'd') then  
197 - begin  
198 - Num := StrToFloat(Copy(Data, 3, AnsiPos(';', Data)-3));  
199 - Result := TPHPValue.Create(FloatToStr(Num));  
200 - Data := Copy(Data, Length(FloatToStr(Num)) + 4, Length(Data));  
201 - end else if (C = 'b') then  
202 - begin  
203 - Result := TPHPValue.Create(BoolToStr(Copy(Data, 3, 1) = '1'));  
204 - Data := Copy(Data, 4, Length(Data));  
205 - end else if (C = 'O') or (C = 'r') or (C = 'C') or (C = 'R')  
206 - or (C = 'U') then  
207 - begin  
208 - raise Exception.Create('Unsupported PHP data type found!');  
209 - end else if (C = 'N') then  
210 - begin  
211 - Result := TPHPValue.Create(nil);  
212 - Data := Copy(Data, 2, Length(Data));  
213 - end else  
214 - begin  
215 - Result := TPHPValue.Create(nil);  
216 - Data := '';  
217 - end;  
218 -end;  
219 -  
220 -  
221 -{ TPHPValue }  
222 -  
223 -{*  
224 - Returns value as boolan  
225 -  
226 - @return boolean value  
227 -*}  
228 -function TPHPValue.AsBoolean: Boolean;  
229 -begin  
230 - Result := StrToBool(FValue);  
231 -end;  
232 -  
233 -{*  
234 - Returns value as double  
235 -  
236 - @return double value  
237 -*}  
238 -function TPHPValue.AsDouble: Double;  
239 -begin  
240 - Result := StrToFloat(FValue);  
241 -end;  
242 -  
243 -{*  
244 - Returns value as an associative-array  
245 -  
246 - @return associative-array  
247 -*}  
248 -function TPHPValue.AsArray: TPHPArray;  
249 -begin  
250 - Result := nil;  
251 - Assert(Assigned(FObj));  
252 -  
253 - if (FObj.ClassType = TPHPArray) then  
254 - Result := TPHPArray(FObj);  
255 -end;  
256 -  
257 -{*  
258 - Returns value as an integer  
259 -  
260 - @return integer value  
261 -*}  
262 -function TPHPValue.AsInteger: Integer;  
263 -begin  
264 - Result := StrToInt(FValue);  
265 -end;  
266 -  
267 -{*  
268 - Returns value as an object  
269 -  
270 - @return object value  
271 -*}  
272 -function TPHPValue.AsObject: TObject;  
273 -begin  
274 - Assert(Assigned(FObj));  
275 - Result := FObj;  
276 -end;  
277 -  
278 -{*  
279 - Returns value as a string  
280 -  
281 - @return string value  
282 -*}  
283 -function TPHPValue.AsString: String;  
284 -begin  
285 - Result := FValue;  
286 -end;  
287 -  
288 -{*  
289 - Constructor  
290 -  
291 - @param Value Value to store  
292 -*}  
293 -constructor TPHPValue.Create(Value: String);  
294 -begin  
295 - Clear;  
296 - FValue := Value;  
297 -end;  
298 -  
299 -{*  
300 - Constructor  
301 -  
302 - @param Value Value to store  
303 -*}  
304 -constructor TPHPValue.Create(Value: TObject);  
305 -begin  
306 - Clear;  
307 - FObj := Value;  
308 -end;  
309 -  
310 -{*  
311 - Clears current value  
312 -*}  
313 -procedure TPHPValue.Clear;  
314 -begin  
315 - FValue := '';  
316 - if Assigned(FObj) then FObj.Free;  
317 - FObj := nil;  
318 -end;  
319 -  
320 -{*  
321 - Destructor  
322 -*}  
323 -destructor TPHPValue.Destroy;  
324 -begin  
325 - Clear;  
326 - inherited;  
327 -end;  
328 -  
329 -{ TPHPArray }  
330 -  
331 -  
332 -{*  
333 - Clears whole array  
334 -*}  
335 -procedure TPHPArray.Clear;  
336 -var  
337 - i: Integer;  
338 -begin  
339 - for i := 0 to GetCount - 1 do  
340 - begin  
341 - FElements[i].Key.Free;  
342 - FElements[i].Key := nil;  
343 - FElements[i].Value.Free;  
344 - FElements[i].Value := nil;  
345 - end;  
346 - SetLength(FElements, 0);  
347 -end;  
348 -  
349 -{*  
350 - Constructor  
351 -*}  
352 -constructor TPHPArray.Create;  
353 -begin  
354 - inherited;  
355 - Clear;  
356 -end;  
357 -  
358 -{*  
359 - Destructor  
360 -*}  
361 -destructor TPHPArray.Destroy;  
362 -begin  
363 - Clear;  
364 - inherited;  
365 -end;  
366 -  
367 -{*  
368 - Returns the number of items in the array  
369 -  
370 - @return number of items  
371 -*}  
372 -function TPHPArray.GetCount: Integer;  
373 -begin  
374 - Result := Length(FElements);  
375 -end;  
376 -  
377 -{*  
378 - Checks if the array is empty  
379 -  
380 - @return true  
381 -*}  
382 -function TPHPArray.Getempty: Boolean;  
383 -begin  
384 - Result := Length(FElements) = 0;  
385 -end;  
386 -  
387 -{*  
388 - Fetch a phpvalue from the array  
389 -  
390 - @param Key Handle to phpvalue  
391 - @return handle to phpvalue  
392 -*}  
393 -function TPHPArray.GetValue(Key: TPHPValue): TPHPValue;  
394 -begin  
395 - Result := GetValue(Key.FValue);  
396 -end;  
397 -  
398 -{*  
399 - Fetch a phpvalue from the array  
400 -  
401 - @param Key Index to element  
402 - @return handle to phpvalue  
403 -*}  
404 -function TPHPArray.GetValue(Key: string): TPHPValue;  
405 -var  
406 - i: Integer;  
407 - r: Boolean;  
408 -begin  
409 - Result := nil;  
410 - i := 0;  
411 - r := False;  
412 - while (i < Length(FElements)) and (not r) do  
413 - begin  
414 - if AnsiUpperCase(FElements[i].key.AsString) = AnsiUpperCase(Key) then  
415 - begin  
416 - Result := FElements[i].Value;  
417 - r := True;  
418 - end;  
419 - i := i + 1;  
420 - end;  
421 -end;  
422 -  
423 -{*  
424 - Insert a phpvalue into the array  
425 -  
426 - @param Key Index to element  
427 - @return handle to phpvalue  
428 -*}  
429 -procedure TPHPArray.SetValue(Key, VValue: TPHPValue);  
430 -var  
431 - i, j: Integer;  
432 - r: Boolean;  
433 - E: TPHPHashedElementArray;  
434 -begin  
435 - if VValue <> nil then  
436 - begin  
437 - i := 0;  
438 - r := False;  
439 - while (i < Length(FElements)) and not r do  
440 - begin  
441 - if AnsiUpperCase(FElements[i].key.AsString) = AnsiUpperCase(Key.AsString) then  
442 - begin  
443 - FElements[i].Value := VValue;  
444 - r := True;  
445 - end;  
446 - i := i + 1;  
447 - end;  
448 - if not r then  
449 - begin  
450 - SetLength(FElements, Length(FElements) + 1);  
451 - FElements[Length(FElements) - 1].Key := Key;  
452 - FElements[Length(FElements) - 1].Value := Vvalue;  
453 - end;  
454 - end;  
455 -  
456 - SetLength(E, Length(FElements));  
457 - for i := 0 to Length(FElements) - 1 do E[i] := FElements[i];  
458 - SetLength(FElements, 0);  
459 - for i := 0 to Length(E) - 1 do if (E[i].Key.AsString <> '')  
460 - and (E[i].Value <> nil) then  
461 - begin  
462 - j := Length(FElements);  
463 - setlength(FElements, j + 1);  
464 - FElements[j] := E[i];  
465 - end;  
466 -end;  
467 -  
468 -end.  
469 -  
ktwsapi/delphi/uktwsapi.pas deleted
1 -{  
2 - Copyright (c) 2007, The Jam Warehouse Software (Pty) Ltd.  
3 -  
4 - All rights reserved.  
5 -  
6 - Redistribution and use in source and binary forms, with or without  
7 - modification, are permitted provided that the following conditions are met:  
8 -  
9 - i) Redistributions of source code must retain the above copyright notice,  
10 - this list of conditions and the following disclaimer.  
11 - ii) Redistributions in binary form must reproduce the above copyright  
12 - notice, this list of conditions and the following disclaimer in the  
13 - documentation and/or other materials provided with the distribution.  
14 - iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
15 - names of its contributors may be used to endorse or promote products  
16 - derived from this software without specific prior written permission.  
17 -  
18 - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
19 - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
20 - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
21 - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
22 - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
23 - EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
24 - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
25 - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
26 - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
27 - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
28 - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
29 -}  
30 -  
31 -{*  
32 - This is a Delphi port of the php api for KnowledgeTree WebService.  
33 -  
34 - @Author Bjarte Kalstveit Vebjørnsen <bjarte@macaos.com>  
35 - @Version 1.0 BKV 24.09.2007 Initial revision  
36 -*}  
37 -  
38 -unit uktwsapi;  
39 -  
40 -interface  
41 -  
42 -uses  
43 - Classes, SysUtils, SOAPHTTPClient, uwebservice;  
44 -  
45 -type  
46 -  
47 - /// Base exception class  
48 - EKTWSAPI_Exception = class(Exception);  
49 -  
50 - TKTWSAPI_FolderItem = class;  
51 - TKTWSAPI_Folder = class;  
52 - TKTWSAPI_Document = class;  
53 - TKTWSAPI = class;  
54 -  
55 - /// Base class for documents and folders  
56 - TKTWSAPI_FolderItem = class(TObject)  
57 - private  
58 - FKTAPI: TKTWSAPI; /// Handle to KTAPI object  
59 - FParentId: Integer; /// Id of parent folder  
60 -  
61 - function _GetFileSize(FileName: WideString): WideString;  
62 - function _UploadFile(FileName, Action: WideString; DocumentId: Integer = 0): WideString;  
63 - function _DownloadFile(Url, LocalPath, FileName: WideString): Boolean;  
64 - function _SaveBase64StringAsFile(Base64String, LocalPath, FileName: WideString): Boolean;  
65 - function _LoadFileAsBase64String(FileName: WideString): WideString;  
66 -  
67 - public  
68 - function GetParentFolder:TKTWSAPI_Folder;  
69 - end;  
70 -  
71 - /// Class representing a folder  
72 - TKTWSAPI_Folder = class(TKTWSAPI_FolderItem)  
73 - private  
74 - FFolderName, /// Name of folder  
75 - FFullPath: WideString; /// Full path to folder  
76 -  
77 - FFolderId: Integer; /// Id to folder  
78 - public  
79 - constructor Create(KTAPI:TKTWSAPI; FolderDetail: kt_folder_detail); overload;  
80 - class function Get(KTAPI: TKTWSAPI; FolderId:Integer): TKTWSAPI_Folder;  
81 - function GetParentFolderId: Integer;  
82 - function GetFolderName: WideString;  
83 - function GetFolderId: Integer;  
84 - function GetFolderByName(FolderName: WideString): TKTWSAPI_Folder;  
85 - function GetFullPath: WideString;  
86 - function GetListing(Depth: Integer=1; What: WideString = 'DF'): kt_folder_contents;  
87 - function GetDocumentByName(Title: WideString): TKTWSAPI_Document;  
88 - function GetDocumentByFileName(FileName: WideString): TKTWSAPI_Document;  
89 - function AddFolder(FolderName: WideString): TKTWSAPI_Folder;  
90 - function Delete(Reason: WideString): Boolean;  
91 - function Rename(NewName: WideString): Boolean;  
92 - function Move(TargetFolder:TKTWSAPI_Folder; Reason: WideString): Boolean;  
93 - function Copy(TargetFolder:TKTWSAPI_Folder; Reason: WideString): Boolean;  
94 - function AddDocument(FileName: WideString; Title: WideString = '';  
95 - DocumentType: WideString = ''): TKTWSAPI_Document;  
96 - function AddDocumentBase64(FileName: WideString; Title: WideString = '';  
97 - DocumentType: WideString = ''): TKTWSAPI_Document;  
98 - published  
99 - property FolderName: WideString read FFolderName write FFolderName;  
100 - property FullPath: WideString read FFullPath write FFullPath;  
101 - property FolderId: Integer read FFolderId write FFolderId;  
102 - end;  
103 -  
104 - /// Class representing a document  
105 - TKTWSAPI_Document = class(TKTWSAPI_FolderItem)  
106 - private  
107 -  
108 - FDocumentId: Integer; /// Id of document  
109 - FTitle, /// Title of document  
110 - FDocumentType, /// Type of document  
111 - FVersion, /// Document version  
112 - FFileName, /// Original filename  
113 - FCreatedDate, /// Date created  
114 - FCreatedBy, /// Name of user who created  
115 - FUpdatedDate, /// Date updated  
116 - FUpdatedBy, /// Name of user who updated  
117 - FWorkflow, /// Workflow  
118 - FWorkflowState, /// Workflow state  
119 - FCheckoutBy, /// Name of user who checked out  
120 - FFullPath: WideString; /// Full path to document  
121 - public  
122 - constructor Create(KTAPI: TKTWSAPI; DocumentDetail: kt_document_detail);  
123 -  
124 - class function Get(KTAPI: TKTWSAPI; DocumentId: Integer;  
125 - LoadInfo: Boolean = System.True): TKTWSAPI_Document;  
126 - function Checkin(FileName, Reason: WideString; MajorUpdate: Boolean): Boolean;  
127 - function Checkout(Reason: WideString; LocalPath: WideString = '';  
128 - DownloadFile: Boolean = True): Boolean;  
129 - function UndoCheckout(Reason: WideString): Boolean;  
130 - function Download(Version: WideString = ''; LocalPath: WideString = ''; FileName: WideString = ''): Boolean;  
131 - function Delete(Reason: WideString): Boolean;  
132 - function ChangeOwner(UserName, Reason: WideString): Boolean;  
133 - function Copy(Folder: TKTWSAPI_Folder; Reason: WideString;  
134 - NewTitle: WideString = ''; NewFileName: WideString = ''): Boolean;  
135 - function Move(Folder: TKTWSAPI_Folder; Reason: WideString;  
136 - NewTitle: WideString = ''; NewFileName: WideString = ''): Boolean;  
137 - function ChangeDocumentType(DocumentType: WideString): Boolean;  
138 - function RenameTitle(NewTitle: WideString): Boolean;  
139 - function RenameFilename(NewFilename: WideString): Boolean;  
140 - function StartWorkflow(WorkFlow: WideString): Boolean;  
141 - function DeleteWorkflow: Boolean;  
142 - function PeformWorkflowTransition(Transition, Reason: WideString): Boolean;  
143 - function GetMetadata:kt_metadata_response;  
144 - function UpdateMetadata(Metadata: kt_metadata_fieldsets): Boolean;  
145 - function GetTransactionHistory: kt_document_transaction_history_response;  
146 - function GetVersionHistory: kt_document_version_history_response;  
147 - function GetLinks: kt_linked_document_response;  
148 - function Link(DocumentId: Integer; const LinkType: WideString): Boolean;  
149 - function Unlink(DocumentId: Integer): Boolean;  
150 - function CheckinBase64(FileName, Reason: WideString; MajorUpdate: Boolean): Boolean;  
151 - function CheckoutBase64(Reason: WideString; LocalPath: WideString = '';  
152 - DownloadFile: Boolean = True): Boolean;  
153 - function DownloadBase64(Version: WideString = ''; LocalPath: WideString = ''): Boolean;  
154 - function GetTypes: kt_document_types_response;  
155 - function GetLinkTypes: kt_document_types_response;  
156 -  
157 - property DocumentId: Integer read FDocumentId write FDocumentId;  
158 - property Title: WideString read FTitle write FTitle;  
159 - property DocumentType: WideString read FDocumentType write FDocumentType;  
160 - property Version: WideString read FVersion write FVersion;  
161 - property FileName: WideString read FFileName write FFileName;  
162 - property CreatedDate: WideString read FCreatedBy write FCreatedBy;  
163 - property CreatedBy: WideString read FCreatedBy write FCreatedBy;  
164 - property UpdatedDate: WideString read FUpdatedDate write FUpdatedDate;  
165 - property UpdatedBy: WideString read FUpdatedBy write FUpdatedBy;  
166 - property Workflow: WideString read FWorkflow write FWorkflow;  
167 - property WorkflowState: WideString read FWorkflowState write FWorkflowState;  
168 - property CheckoutBy: WideString read FCheckoutBy write FCheckoutBy;  
169 - property FullPath: WideString read FFullPath write FFullPath;  
170 - end;  
171 -  
172 - /// Api entry point  
173 - TKTWSAPI = class  
174 - private  
175 -  
176 - FSession, /// Current session id  
177 - FDownloadPath: WideString; /// Current download path  
178 -  
179 - FSoapClient:KnowledgeTreePort; /// Object implementing the  
180 - /// KnowledgeTreePort interface  
181 - public  
182 - constructor Create();  
183 - function GetDownloadPath: WideString;  
184 - function SetDownloadPath(DownloadPath:WideString): Boolean;  
185 - function StartAnonymousSession(Ip: WideString = ''): WideString;  
186 - function StartSession(Username, Password: WideString; Ip: WideString = ''): WideString;  
187 - function ActiveSession(Session: WideString; Ip: WideString = ''): WideString;  
188 - function Logout: Boolean;  
189 - function GetRootFolder: TKTWSAPI_Folder;  
190 - function GetFolderById(FolderId: Integer): TKTWSAPI_Folder;  
191 - function GetDocumentById(DocumentId: Integer): TKTWSAPI_Document;  
192 - published  
193 - property SoapClient: KnowledgeTreePort read FSoapClient write FSoapClient;  
194 - property Session: WideString read FSession write FSession;  
195 - end;  
196 -var  
197 - KTWebServerUrl: WideString; /// Your webserver url  
198 - KTUploadUrl: WideString; /// URL to the web-service upload.php  
199 - KTWebServiceUrl: WideString; /// URL to the web-service wsdl  
200 -  
201 -implementation  
202 -  
203 -uses  
204 - IdComponent, IdURI, IdHttp, IdMultipartFormData, IdGlobalProtocols,  
205 - uPHPSerialize, EncdDecd;  
206 -const  
207 - KTWSAPI_ERR_SESSION_IN_USE =  
208 - 'There is a session already active.'; /// Exception message when session is in use  
209 - KTWSAPI_ERR_SESSION_NOT_STARTED =  
210 - 'An active session has not been started.'; /// Exception message when session is not started  
211 -  
212 -  
213 -{ TKTWSAPI_FolderItem }  
214 -  
215 -{*  
216 - Finds the filesize of a file.  
217 -  
218 - @param FileName Path to the file  
219 - @return The size of the file as a string  
220 -*}  
221 -function TKTWSAPI_FolderItem._GetFileSize(FileName: WideString): WideString;  
222 -var  
223 - SearchRec: TSearchRec;  
224 - sgPath: string;  
225 - inRetval, I1: Integer;  
226 -begin  
227 - sgPath := ExpandFileName(FileName);  
228 - try  
229 - inRetval := FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec);  
230 - if inRetval = 0 then  
231 - I1 := SearchRec.Size  
232 - else  
233 - I1 := -1;  
234 - finally  
235 - SysUtils.FindClose(SearchRec);  
236 - end;  
237 - Result := IntToStr(I1);  
238 -end;  
239 -  
240 -{*  
241 - Reads a file into a string and base64 encodes it.  
242 -  
243 - @param Base64String Base64 encoded string  
244 - @param LocalPath Path to load from  
245 - @param FileName FileName to read  
246 - @return base64 encoded string  
247 - @throws EKTWSAPI_Exception 'Could not access file to read.'  
248 -*}  
249 -function TKTWSAPI_FolderItem._LoadFileAsBase64String(FileName: WideString): WideString;  
250 -var  
251 - Stream: TFileStream;  
252 - InString: AnsiString;  
253 -begin  
254 - if not FileExists(FileName) then  
255 - raise EKTWSAPI_Exception.Create('Could not access file to read.');  
256 - Stream := TFileStream.Create(FileName, fmOpenRead);  
257 - try  
258 - SetLength(InString, Stream.Size);  
259 - Stream.ReadBuffer(InString[1], Length(InString));  
260 - Result := EncodeString(InString);  
261 - finally  
262 - Stream.Free;  
263 - end;  
264 -end;  
265 -  
266 -{*  
267 - Save a Base64 encoded string as a file.  
268 -  
269 - @param Base64String Base64 encoded string  
270 - @param LocalPath Path to save to  
271 - @param FileName FileName to save as  
272 - @return true if success  
273 -*}  
274 -function TKTWSAPI_FolderItem._SaveBase64StringAsFile(Base64String, LocalPath,  
275 - FileName: WideString): Boolean;  
276 -var  
277 - OutString: AnsiString;  
278 - Stream: TFileStream;  
279 - LocalFileName: String;  
280 -begin  
281 - LocalFileName := LocalPath + '/' + FileName;  
282 - OutString := DecodeString(Base64String);  
283 - Stream := TFileStream.Create(LocalFileName, fmCreate);  
284 - try  
285 - // For some reason it fails if I use WideString instead of AnsiString  
286 - Stream.WriteBuffer(Pointer(OutString)^, Length(OutString));  
287 - Result := true;  
288 - finally  
289 - Stream.Free;  
290 - end;  
291 -end;  
292 -  
293 -{*  
294 - Upload a file to KT.  
295 -  
296 - @param FileName Path to upload file  
297 - @param Action Which action to perform with the file (A = Add, C = Checkin)  
298 - @param DocumentId Id of the document  
299 - @return The temporary filename on the server  
300 - @throws EKTWSAPI_Exception Could not access file to upload.  
301 - @throws EKTWSAPI_Exception No response from server.  
302 - @throws EKTWSAPI_Exception Could not upload file.  
303 -*}  
304 -function TKTWSAPI_FolderItem._UploadFile(FileName, Action: WideString;  
305 - DocumentId: Integer): WideString;  
306 -var  
307 - UploadName, UploadStatus, SessionId, StatusCode: WideString;  
308 - PostStream: TIdMultiPartFormDataStream;  
309 - ResponseStream: TStringStream;  
310 - Fields: TStringList;  
311 - HTTP: TIdHTTP;  
312 - UploadData: TPHPValue;  
313 - FilesArr: TPHPArray;  
314 -begin  
315 - Result := '';  
316 - if not FileExists(FileName) then  
317 - raise EKTWSAPI_Exception.Create('Could not access file to upload.');  
318 - // TODO: Check if file is readable  
319 -  
320 - if (DocumentId = 0) then  
321 - UploadName := 'upload_document'  
322 - else  
323 - UploadName := 'upload_'+IntToStr(DocumentId);  
324 - SessionId := FKTAPI.Session;  
325 -  
326 - HTTP := TIdHttp.Create(nil);  
327 - try  
328 - PostStream := TIdMultiPartFormDataStream.Create;  
329 - ResponseStream := TStringStream.Create('');  
330 - Fields := TStringList.Create;  
331 - try  
332 - PostStream.AddFormField('session_id', SessionId);  
333 - PostStream.AddFormField('action', Action);  
334 - PostStream.AddFormField('document_id',IntToStr(DocumentId));  
335 - PostStream.AddFormField(UploadName,'@' + FileName);  
336 - PostStream.AddFile('file',FileName,GetMIMETypeFromFile(FileName));  
337 -  
338 - HTTP.Request.ContentType := PostStream.RequestContentType;  
339 - HTTP.Post(KTUploadURL, PostStream, ResponseStream);  
340 - if (ResponseStream.DataString = '') then  
341 - raise EKTWSAPI_Exception.Create('No response from server.');  
342 - ExtractStrings(['&'], [' '], pAnsiChar(ResponseStream.DataString), Fields);  
343 -  
344 - StatusCode := Copy(Fields[0], Pos('=',Fields[0])+1, 1);  
345 - if (StatusCode <> '0') then  
346 - raise EKTWSAPI_Exception.Create('Could not upload file.');  
347 -  
348 -  
349 - UploadStatus := Copy(Fields[1], Pos('=',Fields[1])+1, Length(Fields[1]));  
350 - UploadStatus := TIdURI.URLDecode(UploadStatus);  
351 - UploadData := TPHPSerialize.Unserialize(TIdURI.URLDecode(UploadStatus));  
352 - Assert(Assigned(UploadData));  
353 - Assert(Assigned(UploadData.AsArray['file']));  
354 - try  
355 - FilesArr := UploadData.AsArray['file'].AsArray;  
356 -  
357 - if (FilesArr['size'].AsString <> _GetFileSize(FileName)) then  
358 - raise EKTWSAPI_Exception.Create('Could not upload file.');  
359 -  
360 - Result := FilesArr['tmp_name'].AsString;  
361 - finally  
362 - UploadData.Free;  
363 - end;  
364 - finally  
365 - PostStream.Free;  
366 - ResponseStream.Free;  
367 - Fields.Free;  
368 - end;  
369 - finally  
370 - HTTP.Free;  
371 - end;  
372 -end;  
373 -  
374 -{*  
375 - Downloads a file from KT.  
376 -  
377 - @param Url Http-url to download  
378 - @param LocalPath Path to save to  
379 - @param FileName FileName to save as  
380 - @return true if success  
381 - @throws EKTWSAPI_Exception Could not create local file  
382 -*}  
383 -function TKTWSAPI_FolderItem._DownloadFile(Url, LocalPath,  
384 - FileName: WideString): Boolean;  
385 -var  
386 - Stream: TMemoryStream;  
387 - LocalFileName: WideString;  
388 - FP: File;  
389 - HTTP: TIdHTTP;  
390 -begin  
391 - LocalFileName := LocalPath + '/' + FileName;  
392 -  
393 - AssignFile(FP, LocalFileName);  
394 - {$I-}  
395 - Rewrite(FP,1);  
396 - {$I+}  
397 - if (IOResult <> 0) then  
398 - raise EKTWSAPI_Exception.Create('Could not create local file');  
399 - CloseFile(FP);  
400 - HTTP := TIdHttp.Create(Nil);  
401 - try  
402 - Stream := TMemoryStream.Create;  
403 - try  
404 - HTTP.Get(Url, Stream);  
405 - Stream.SaveToFile(LocalFileName);  
406 - Result := true;  
407 - finally  
408 - Stream.Free;  
409 - end;  
410 - finally  
411 - HTTP.Free;  
412 - end;  
413 -end;  
414 -  
415 -{*  
416 - Returns a reference to the parent folder.  
417 -  
418 - @return Handle to parent folder  
419 -*}  
420 -function TKTWSAPI_FolderItem.GetParentFolder: TKTWSAPI_Folder;  
421 -begin  
422 - Result := FKTAPI.GetFolderById(FParentId);  
423 -end;  
424 -  
425 -  
426 - { TKTWSAPI_Folder }  
427 -  
428 -{*  
429 - Constructor  
430 -  
431 - @param KTAPI Handle to KTAPI object  
432 - @param FolderDetail Handle to kt_folder_detail  
433 -*}  
434 -constructor TKTWSAPI_Folder.Create(KTAPI: TKTWSAPI;  
435 - FolderDetail: kt_folder_detail);  
436 -begin  
437 - FKTAPI := KTAPI;  
438 - FFolderId := FolderDetail.id;  
439 - FFolderName := FolderDetail.folder_name;  
440 - FParentId := FolderDetail.parent_id;  
441 - FFullPath := FolderDetail.full_path;  
442 -end;  
443 -  
444 -{*  
445 - Returns a reference to a TKTWSAPI_Folder  
446 -  
447 - @param KTAPI Handle to KTAPI object  
448 - @param FolderId Id of folder to fetch  
449 - @return folder handle  
450 - @throws EKTWSAPI_Exception Response message  
451 -*}  
452 -class function TKTWSAPI_Folder.Get(KTAPI: TKTWSAPI;  
453 - FolderId: Integer): TKTWSAPI_Folder;  
454 -var  
455 - FolderDetail: kt_folder_detail;  
456 -begin  
457 - Assert(Assigned(KTAPI));  
458 - Assert(KTAPI.ClassNameIs('TKTWSAPI'));  
459 - Result := nil;  
460 -  
461 - FolderDetail := KTAPI.SoapClient.get_folder_detail(KTAPI.Session, FolderId);  
462 - try  
463 - if (FolderDetail.status_code <> 0) then  
464 - raise EKTWSAPI_Exception.Create(FolderDetail.message_);  
465 -  
466 - Result := TKTWSAPI_Folder.Create(KTAPI, FolderDetail);  
467 -  
468 - finally  
469 - FolderDetail.Free;  
470 - end;  
471 -end;  
472 -  
473 -{*  
474 - Returns the parent folder id.  
475 -  
476 - @return parent folder id  
477 -*}  
478 -function TKTWSAPI_Folder.GetParentFolderId: Integer;  
479 -begin  
480 - Result := FParentId;  
481 -end;  
482 -  
483 -{*  
484 - Returns the folder name.  
485 -  
486 - @return folder name  
487 -*}  
488 -function TKTWSAPI_Folder.GetFolderName: WideString;  
489 -begin  
490 - Result := FFolderName;  
491 -end;  
492 -  
493 -{*  
494 - Returns the current folder id.  
495 -  
496 - @return current folder id  
497 -*}  
498 -function TKTWSAPI_Folder.GetFolderId: Integer;  
499 -begin  
500 - Result := FFolderId;  
501 -end;  
502 -  
503 -{*  
504 - Returns the folder based on foldername.  
505 -  
506 - @param FolderName Name of folder  
507 - @return folder handle  
508 - @throws EKTWSAPI_Exception Response message  
509 -*}  
510 -function TKTWSAPI_Folder.GetFolderByName(FolderName: WideString): TKTWSAPI_Folder;  
511 -var  
512 - Path: WideString;  
513 - FolderDetail: kt_folder_detail;  
514 -begin  
515 - Path := FFullPath + '/' + FolderName;  
516 - if (System.Copy(Path, 0, 13) = '/Root Folder/') then  
517 - Path := System.Copy(Path, 13, Length(Path)-1);  
518 - if (System.Copy(Path, 0, 12) = 'Root Folder/') then  
519 - Path := System.Copy(Path, 12, Length(Path)-1);  
520 -  
521 - FolderDetail := FKTAPI.SoapClient.get_folder_detail_by_name(FKTAPI.Session,  
522 - Path);  
523 -  
524 - if (FolderDetail.status_code <> 0) then  
525 - raise EKTWSAPI_Exception.Create(FolderDetail.message_);  
526 -  
527 - Result := TKTWSAPI_Folder.Create(FKTAPI, FolderDetail);  
528 -end;  
529 -  
530 -{*  
531 - Returns the full folder path.  
532 -  
533 - @return Full folder path  
534 -*}  
535 -function TKTWSAPI_Folder.GetFullPath: WideString;  
536 -begin  
537 - Result := FFullPath;  
538 -end;  
539 -  
540 -{*  
541 - Returns the contents of a folder.  
542 -  
543 - @param Depth How many sub-folders to fetch  
544 - @param What to fetch (F=Folders, D=Documents, FD=Both)  
545 - @return folder contents handle  
546 - @throws EKTWSAPI_Exception Response message  
547 -*}  
548 -function TKTWSAPI_Folder.GetListing(Depth: Integer;  
549 - What: WideString): kt_folder_contents;  
550 -begin  
551 - Result := FKTAPI.SoapClient.get_folder_contents(  
552 - FKTAPI.Session, FFolderId, Depth, What);  
553 -  
554 - if (Result.status_code <> 0) then  
555 - raise EKTWSAPI_Exception.Create(Result.message_);  
556 -end;  
557 -  
558 -{*  
559 - Returns a document based on title.  
560 -  
561 - @param Title Title of document  
562 - @return document handle  
563 - @throws EKTWSAPI_Exception Response message  
564 -*}  
565 -function TKTWSAPI_Folder.GetDocumentByName(Title: WideString): TKTWSAPI_Document;  
566 -var  
567 - Path: WideString;  
568 - DocumentDetail: kt_document_detail;  
569 -begin  
570 - Path := FFullPath + '/' + Title;  
571 - if (System.Copy(Path, 0, 13) = '/Root Folder/') then  
572 - Path := System.Copy(Path, 13, Length(Path)-1);  
573 - if (System.Copy(Path, 0, 12) = 'Root Folder/') then  
574 - Path := System.Copy(Path, 12, Length(Path)-1);  
575 -  
576 - DocumentDetail := FKTAPI.SoapClient.get_document_detail_by_name(FKTAPI.Session,  
577 - Path, 'T');  
578 -  
579 - if (DocumentDetail.status_code <> 0) then  
580 - raise EKTWSAPI_Exception.Create(DocumentDetail.message_);  
581 -  
582 - Result := TKTWSAPI_Document.Create(FKTAPI, DocumentDetail);  
583 -end;  
584 -  
585 -{*  
586 - Returns a document based on filename.  
587 -  
588 - @param FileName Name of file  
589 - @return document handle  
590 - @throws EKTWSAPI_Exception Response message  
591 -*}  
592 -function TKTWSAPI_Folder.GetDocumentByFileName(  
593 - FileName: WideString): TKTWSAPI_Document;  
594 -var  
595 - Path: WideString;  
596 - DocumentDetail: kt_document_detail;  
597 -begin  
598 - Result := nil;  
599 - Path := FFullPath + '/' + FileName;  
600 - if (System.Copy(Path, 0, 13) = '/Root Folder/') then  
601 - Path := System.Copy(Path, 13, Length(Path)-1);  
602 - if (System.Copy(Path, 0, 12) = 'Root Folder/') then  
603 - Path := System.Copy(Path, 12, Length(Path)-1);  
604 -  
605 - DocumentDetail := FKTAPI.SoapClient.get_document_detail_by_name(FKTAPI.Session,  
606 - Path, 'F');  
607 - try  
608 - if (DocumentDetail.status_code <> 0) then  
609 - raise EKTWSAPI_Exception.Create(DocumentDetail.message_);  
610 - Result := TKTWSAPI_Document.Create(FKTAPI, DocumentDetail);  
611 - finally  
612 - DocumentDetail.Free;  
613 - end;  
614 -end;  
615 -  
616 -{*  
617 - Adds a sub folder.  
618 -  
619 - @param FolderName Name of folder  
620 - @return new folder handle  
621 - @throws EKTWSAPI_Exception Response message  
622 -*}  
623 -function TKTWSAPI_Folder.AddFolder(FolderName: WideString): TKTWSAPI_Folder;  
624 -var  
625 - FolderDetail: kt_folder_detail;  
626 -begin  
627 - Result := nil;  
628 - FolderDetail := FKTAPI.SoapClient.create_folder(FKTAPI.Session, FFolderId, FolderName);  
629 - try  
630 - if (FolderDetail.status_code <> 0) then  
631 - raise EKTWSAPI_Exception.Create(FolderDetail.message_);  
632 -  
633 - Result := TKTWSAPI_Folder.Create(FKTAPI, FolderDetail);  
634 - finally  
635 - FolderDetail.Free;  
636 - end;  
637 -end;  
638 -  
639 -{*  
640 - Deletes the current folder.  
641 -  
642 - @param Reason Reason for deletetion  
643 - @return true  
644 - @throws EKTWSAPI_Exception Response message  
645 -*}  
646 -function TKTWSAPI_Folder.Delete(Reason: WideString): Boolean;  
647 -var  
648 - response: kt_response;  
649 -begin  
650 - // TODO: check why no transaction in folder_transactions  
651 - Result := System.False;  
652 - response := FKTAPI.SoapClient.delete_folder(FKTAPI.Session,  
653 - FFolderId, Reason);  
654 - try  
655 - if (response.status_code <> 0) then  
656 - raise EKTWSAPI_Exception.Create(response.message_);  
657 - Result := System.True;  
658 - finally  
659 - response.Free;  
660 - end;  
661 -end;  
662 -  
663 -{*  
664 - Renames the current folder.  
665 -  
666 - @param NewName New folder name  
667 - @return true  
668 - @throws EKTWSAPI_Exception Response message  
669 -*}  
670 -function TKTWSAPI_Folder.Rename(NewName: WideString): Boolean;  
671 -var  
672 - response: kt_response;  
673 -begin  
674 - Result := System.False;  
675 - response := FKTAPI.SoapClient.rename_folder(FKTAPI.Session,  
676 - FFolderId, NewName);  
677 - try  
678 - if (response.status_code <> 0) then  
679 - raise EKTWSAPI_Exception.Create(response.message_);  
680 - Result := System.True;  
681 - finally  
682 - response.Free;  
683 - end;  
684 -end;  
685 -  
686 -{*  
687 - Moves a folder to another location.  
688 -  
689 - @param TargetFolder Handle to target folder  
690 - @param Reason Reason for move  
691 - @return true  
692 - @throws EKTWSAPI_Exception Response message  
693 -*}  
694 -function TKTWSAPI_Folder.Move(TargetFolder: TKTWSAPI_Folder;  
695 - Reason: WideString): Boolean;  
696 -var  
697 - response: kt_response;  
698 -begin  
699 - Result := System.False;  
700 - Assert(Assigned(TargetFolder));  
701 - Assert(TargetFolder.ClassNameIs('TKTWSAPI_Folder'));  
702 -  
703 - response := FKTAPI.SoapClient.move_folder(FKTAPI.Session,  
704 - FFolderId, TargetFolder.GetFolderId, Reason);  
705 - try  
706 - if (response.status_code <> 0) then  
707 - raise EKTWSAPI_Exception.Create(response.message_);  
708 - Result := System.True;  
709 - finally  
710 - response.Free;  
711 - end;  
712 -end;  
713 -  
714 -{*  
715 - Copies a folder to another location  
716 -  
717 - @param TargetFolder Handle to target folder  
718 - @param Reason Reason for copy  
719 - @return true  
720 - @throws EKTWSAPI_Exception Response message  
721 -*}  
722 -function TKTWSAPI_Folder.Copy(TargetFolder: TKTWSAPI_Folder;  
723 - Reason: WideString): Boolean;  
724 -var  
725 - TargetId: Integer;  
726 - response: kt_response;  
727 -begin  
728 - Result := System.False;  
729 - Assert(Assigned(TargetFolder));  
730 - Assert(TargetFolder.ClassNameIs('TKTWSAPI_Folder'));  
731 -  
732 - TargetId := TargetFolder.GetFolderId;  
733 - response := FKTAPI.SoapClient.copy_folder(FKTAPI.Session,  
734 - FFolderId, TargetId, Reason);  
735 - try  
736 - if (response.status_code <> 0) then  
737 - raise EKTWSAPI_Exception.Create(response.message_);  
738 - Result := System.True;  
739 - finally  
740 - response.Free;  
741 - end;  
742 -end;  
743 -  
744 -{*  
745 - Adds a document to the current folder.  
746 -  
747 - @param FileName FileName to upload  
748 - @param Title Title to give document  
749 - @param DocumentType Documenttype of document (Default is 'Default')  
750 - @return handle to new document  
751 - @throws EKTWSAPI_Exception Response message  
752 -*}  
753 -function TKTWSAPI_Folder.AddDocument(FileName, Title,  
754 - DocumentType: WideString): TKTWSAPI_Document;  
755 -var  
756 - BaseName, TempFileName: WideString;  
757 - DocumentDetail: kt_document_detail;  
758 -begin  
759 - Result := nil;  
760 - BaseName := ExtractFileName(FileName);  
761 - if (Title = '') then  
762 - Title := BaseName;  
763 - if (DocumentType = '') then  
764 - DocumentType := 'Default';  
765 -  
766 - TempFileName := _UploadFile(FileName, 'A');  
767 - DocumentDetail := FKTAPI.FSoapClient.add_document(FKTAPI.Session, FFolderId,  
768 - Title, BaseName, DocumentType, TempFileName);  
769 - try  
770 - if (DocumentDetail.status_code <> 0) then  
771 - raise EKTWSAPI_Exception.Create(DocumentDetail.message_);  
772 -  
773 - Result := TKTWSAPI_Document.Create(FKTAPI, DocumentDetail);  
774 - finally  
775 - DocumentDetail.Free;  
776 - end;  
777 -end;  
778 -  
779 -{*  
780 - Adds a document to the current folder through web service.  
781 -  
782 - @param FileName FileName to upload  
783 - @param Title Title to give document  
784 - @param DocumentType Documenttype of document (Default is 'Default')  
785 - @return handle to new document  
786 - @throws EKTWSAPI_Exception Response message  
787 -*}  
788 -function TKTWSAPI_Folder.AddDocumentBase64(FileName, Title,  
789 - DocumentType: WideString): TKTWSAPI_Document;  
790 -begin  
791 - raise EKTWSAPI_Exception.Create('Not implemented yet!');  
792 -end;  
793 -  
794 -{ TKTWSAPI_Document }  
795 -  
796 -{*  
797 - Constructor  
798 -  
799 - @param KTAPI Handle to KTAPI object  
800 - @param DocumentDetail handle to kt_document_detail  
801 -*}  
802 -constructor TKTWSAPI_Document.Create(KTAPI: TKTWSAPI;  
803 - DocumentDetail: kt_document_detail);  
804 -begin  
805 - FKTAPI := KTAPI;  
806 - FDocumentId := DocumentDetail.document_id;  
807 - FTitle := DocumentDetail.title;  
808 - FDocumentType := DocumentDetail.document_type;  
809 - FVersion := DocumentDetail.version;  
810 - FFilename := DocumentDetail.filename;  
811 - FCreatedDate := DocumentDetail.created_date;  
812 - FCreatedBy := DocumentDetail.created_by;  
813 - FUpdatedDate := DocumentDetail.updated_date;  
814 - FUpdatedBy := DocumentDetail.updated_by;  
815 - FParentId := DocumentDetail.folder_id;  
816 - FWorkflow := DocumentDetail.workflow;  
817 - FWorkflowState := DocumentDetail.workflow_state;  
818 - FCheckoutBy := DocumentDetail.checkout_by;  
819 - FFullPath := DocumentDetail.full_path;  
820 -end;  
821 -  
822 -{*  
823 - Returns a reference to a document.  
824 -  
825 - @param KTAPI Handle to KTAPI object  
826 - @param DocumentId Id of document  
827 - @param LoadInfo Call web service to load document details  
828 - @return handle to document  
829 - @throws EKTWSAPI_Exception Response message  
830 -*}  
831 -class function TKTWSAPI_Document.Get(KTAPI: TKTWSAPI; DocumentId: Integer;  
832 - LoadInfo: Boolean): TKTWSAPI_Document;  
833 -var  
834 - DocumentDetail:kt_document_detail;  
835 -begin  
836 - Assert(Assigned(KTAPI));  
837 - Assert(KTAPI.ClassNameIs('TKTWSAPI'));  
838 - if LoadInfo then  
839 - begin  
840 - DocumentDetail := KTAPI.SoapClient.get_document_detail(KTAPI.Session, DocumentId);  
841 -  
842 - if (DocumentDetail.status_code <> 0) then  
843 - raise EKTWSAPI_Exception.Create(DocumentDetail.message_);  
844 -  
845 - end else  
846 - begin  
847 - DocumentDetail := kt_document_detail.Create;  
848 - DocumentDetail.document_id := DocumentId;  
849 - end;  
850 - try  
851 - Result := TKTWSAPI_Document.Create(KTAPI, DocumentDetail);  
852 - finally  
853 - DocumentDetail.Free;  
854 - end;  
855 -end;  
856 -  
857 -{*  
858 - Checks in a document.  
859 -  
860 - @param FileName Name of file to checkin  
861 - @param Reason Reason for checkin  
862 - @param MajorUpdate Checkin as a major update (bumps major version number)  
863 - @return true  
864 - @throws EKTWSAPI_Exception Response message  
865 -*}  
866 -function TKTWSAPI_Document.Checkin(FileName, Reason: WideString;  
867 - MajorUpdate: Boolean): Boolean;  
868 -var  
869 - BaseName, TempFileName: WideString;  
870 - response: kt_response;  
871 -begin  
872 - Result := System.False;  
873 - BaseName := ExtractFileName(FileName);  
874 -  
875 - TempFileName := _UploadFile(FileName, 'C', FDocumentId);  
876 - response := FKTAPI.SoapClient.checkin_document(FKTAPI.Session, FDocumentId, BaseName, Reason, TempFileName, MajorUpdate);  
877 - try  
878 - if (response.status_code <> 0) then  
879 - raise EKTWSAPI_Exception.Create(response.message_);  
880 - Result := System.True;  
881 - finally  
882 - response.Free;  
883 - end;  
884 -end;  
885 -  
886 -{*  
887 - Checks out a document.  
888 -  
889 - @param Reason Reason for checkout  
890 - @param LocalPath to save downloaded file to  
891 - @param DownloadFile if false then checkout will happen without download  
892 - @return true  
893 - @throws EKTWSAPI_Exception local path does not exist  
894 - @throws EKTWSAPI_Exception Response message  
895 -*}  
896 -function TKTWSAPI_Document.Checkout(Reason, LocalPath: WideString;  
897 - DownloadFile: Boolean): Boolean;  
898 -var  
899 - response: kt_response;  
900 - Url: WideString;  
901 -begin  
902 - Result := System.False;  
903 - if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath;  
904 -  
905 - if not DirectoryExists(LocalPath) then  
906 - raise EKTWSAPI_Exception.Create('local path does not exist');  
907 -  
908 - // TODO check if Directory is writable  
909 -  
910 - response := FKTAPI.SoapClient.checkout_document(FKTAPI.Session, FDocumentId, Reason);  
911 - try  
912 - if (response.status_code <> 0) then  
913 - raise EKTWSAPI_Exception.Create(response.message_);  
914 -  
915 - Url := response.message_;  
916 -  
917 - if DownloadFile then  
918 - _DownloadFile(KTWebServerURL+Url, LocalPath, FFileName);  
919 -  
920 - Result := System.True;  
921 - finally  
922 - response.Free;  
923 - end;  
924 -end;  
925 -  
926 -{*  
927 - Undo a document checkout  
928 -  
929 - @param Reason Reason for undoing the checkout  
930 - @return true  
931 - @throws EKTWSAPI_Exception Response message  
932 -*}  
933 -function TKTWSAPI_Document.UndoCheckout(Reason: WideString): Boolean;  
934 -var  
935 - response: kt_response;  
936 -begin  
937 - Result := System.False;  
938 - response := FKTAPI.SoapClient.undo_document_checkout(FKTAPI.Session, FDocumentId, Reason);  
939 - try  
940 - if (response.status_code <> 0) then  
941 - raise EKTWSAPI_Exception.Create(response.message_);  
942 -  
943 - Result := System.True;  
944 - finally  
945 - response.Free;  
946 - end;  
947 -end;  
948 -  
949 -{*  
950 - Download a version of the document  
951 -  
952 - @param Version Which version of document to download  
953 - @param LocalPath Optional path to save file to  
954 - @param FileName Optional filename to save file as  
955 - @return true  
956 - @throws EKTWSAPI_Exception local path does not exist  
957 - @throws EKTWSAPI_Exception Response message  
958 -*}  
959 -function TKTWSAPI_Document.Download(Version, LocalPath, FileName: WideString): Boolean;  
960 -var  
961 - response: kt_response;  
962 - Url: WideString;  
963 -begin  
964 - Result := System.False;  
965 - if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath;  
966 - if (FileName = '') then FileName := FFileName;  
967 -  
968 - if (not DirectoryExists(LocalPath)) then  
969 - raise EKTWSAPI_Exception.Create('local path does not exist');  
970 -  
971 - // TODO: Check if local path is writable  
972 -  
973 - response := FKTAPI.SoapClient.download_document(FKTAPI.Session, FDocumentId);  
974 - try  
975 - if (response.status_code <> 0) then  
976 - raise EKTWSAPI_Exception.Create(response.message_);  
977 - Url := response.message_;  
978 - Result := _DownloadFile(KTWebServerURL+Url, LocalPath, FileName);  
979 - finally  
980 - response.Free;  
981 - end;  
982 -end;  
983 -  
984 -  
985 -{*  
986 - Download a version of the document through webservice  
987 -  
988 - @param Version Which version of document to download  
989 - @param LocalPath Path to save file to  
990 - @return true  
991 - @throws EKTWSAPI_Exception Response message  
992 -*}  
993 -function TKTWSAPI_Document.DownloadBase64(Version,  
994 - LocalPath: WideString): Boolean;  
995 -var  
996 - response: kt_response;  
997 -begin  
998 - Result := System.False;  
999 - if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath;  
1000 - if (FileName = '') then FileName := FFileName;  
1001 -  
1002 - if (not DirectoryExists(LocalPath)) then  
1003 - raise EKTWSAPI_Exception.Create('local path does not exist');  
1004 -  
1005 - // TODO: Check if local path is writable  
1006 -  
1007 - response := FKTAPI.SoapClient.download_base64_document(FKTAPI.Session, FDocumentId);  
1008 - try  
1009 - if (response.status_code <> 0) then  
1010 - raise EKTWSAPI_Exception.Create(response.message_);  
1011 - Result := _SaveBase64StringAsFile(response.message_, LocalPath, FileName);  
1012 - finally  
1013 - response.Free;  
1014 - end;  
1015 -end;  
1016 -  
1017 -{*  
1018 - Deletes the current document.  
1019 -  
1020 - @param Reason Reason for delete  
1021 - @return true  
1022 - @throws EKTWSAPI_Exception Response message  
1023 -*}  
1024 -function TKTWSAPI_Document.Delete(Reason: WideString): Boolean;  
1025 -var  
1026 - response: kt_response;  
1027 -begin  
1028 - Result := System.False;  
1029 - response := FKTAPI.SoapClient.delete_document(FKTAPI.Session, FDocumentId, Reason);  
1030 - try  
1031 - if (response.status_code <> 0) then  
1032 - raise EKTWSAPI_Exception.Create(response.message_);  
1033 -  
1034 - Result := System.True;  
1035 - finally  
1036 - response.Free;  
1037 - end;  
1038 -end;  
1039 -  
1040 -{*  
1041 - Changes the owner of the document.  
1042 -  
1043 - @param UserName Username of new owner  
1044 - @param Reason Reason for the owner change  
1045 - @return true  
1046 - @throws EKTWSAPI_Exception Response message  
1047 -*}  
1048 -function TKTWSAPI_Document.ChangeOwner(UserName, Reason: WideString): Boolean;  
1049 -var  
1050 - response: kt_response;  
1051 -begin  
1052 - Result := System.False;  
1053 - response := FKTAPI.SoapClient.change_document_owner(FKTAPI.Session, FDocumentId, UserName, Reason);  
1054 - try  
1055 - if (response.status_code <> 0) then  
1056 - raise EKTWSAPI_Exception.Create(response.message_);  
1057 -  
1058 - Result := System.True;  
1059 - finally  
1060 - response.Free;  
1061 - end;  
1062 -end;  
1063 -  
1064 -{*  
1065 - Copies the current document to the specified folder.  
1066 -  
1067 - @param Folder Handle to target folder  
1068 - @param Reason Reason for copy  
1069 - @param NewTitle New title of the file  
1070 - @param NewFileName New filename of the file  
1071 - @return true  
1072 - @throws EKTWSAPI_Exception Response message  
1073 -*}  
1074 -function TKTWSAPI_Document.Copy(Folder: TKTWSAPI_Folder; Reason, NewTitle,  
1075 - NewFileName: WideString): Boolean;  
1076 -var  
1077 - response: kt_response;  
1078 - FolderId: Integer;  
1079 -begin  
1080 - Result := System.False;  
1081 - Assert(Assigned(Folder));  
1082 - Assert(Folder.ClassNameIs('TKTWSAPI_Folder'));  
1083 - FolderId := Folder.GetFolderId;  
1084 -  
1085 - response := FKTAPI.SoapClient.copy_document(FKTAPI.Session, FDocumentId, FolderId, Reason, NewTitle, NewFileName);  
1086 - try  
1087 - if (response.status_code <> 0) then  
1088 - raise EKTWSAPI_Exception.Create(response.message_);  
1089 -  
1090 - Result := System.True;  
1091 - finally  
1092 - response.Free;  
1093 - end;  
1094 -end;  
1095 -  
1096 -{*  
1097 - Moves the current document to the specified folder.  
1098 -  
1099 - @param Folder Handle to target folder  
1100 - @param Reason Reason for move  
1101 - @param NewTitle New title of the file  
1102 - @param NewFileName New filename of the file  
1103 - @return true  
1104 - @throws EKTWSAPI_Exception Response message  
1105 -*}  
1106 -function TKTWSAPI_Document.Move(Folder: TKTWSAPI_Folder; Reason, NewTitle,  
1107 - NewFileName: WideString): Boolean;  
1108 -var  
1109 - response: kt_response;  
1110 - FolderId: Integer;  
1111 -begin  
1112 - Result := System.False;  
1113 - Assert(Assigned(Folder));  
1114 - Assert(Folder.ClassNameIs('TKTWSAPI_Folder'));  
1115 - FolderId := Folder.GetFolderId;  
1116 -  
1117 - response := FKTAPI.SoapClient.move_document(FKTAPI.Session, FDocumentId, FolderId, Reason, NewTitle, NewFileName);  
1118 - try  
1119 - if (response.status_code <> 0) then  
1120 - raise EKTWSAPI_Exception.Create(response.message_);  
1121 - Result := System.True;  
1122 - finally  
1123 - response.Free;  
1124 - end;  
1125 -end;  
1126 -  
1127 -{*  
1128 - Changes the document type.  
1129 -  
1130 - @param DocumentType DocumentType to change to  
1131 - @return true  
1132 - @throws EKTWSAPI_Exception Response message  
1133 -*}  
1134 -function TKTWSAPI_Document.ChangeDocumentType(DocumentType: WideString): Boolean;  
1135 -var  
1136 - response: kt_response;  
1137 -begin  
1138 - Result := System.False;  
1139 - response := FKTAPI.SoapClient.change_document_type(FKTAPI.Session, FDocumentId, DocumentType);  
1140 - try  
1141 - if (response.status_code <> 0) then  
1142 - raise EKTWSAPI_Exception.Create(response.message_);  
1143 -  
1144 - Result := System.True;  
1145 - finally  
1146 - response.Free;  
1147 - end;  
1148 -end;  
1149 -  
1150 -{*  
1151 - Renames the title of the current document.  
1152 -  
1153 - @param NewTitle New title of the document  
1154 - @return true  
1155 - @throws EKTWSAPI_Exception Response message  
1156 -*}  
1157 -function TKTWSAPI_Document.RenameTitle(NewTitle: WideString): Boolean;  
1158 -var  
1159 - response: kt_response;  
1160 -begin  
1161 - Result := System.False;  
1162 - response := FKTAPI.SoapClient.rename_document_title(FKTAPI.Session, FDocumentId, NewTitle);  
1163 - try  
1164 - if (response.status_code <> 0) then  
1165 - raise EKTWSAPI_Exception.Create(response.message_);  
1166 -  
1167 - Result := System.True;  
1168 - finally  
1169 - response.Free;  
1170 - end;  
1171 -end;  
1172 -  
1173 -{*  
1174 - Renames the filename of the current document.  
1175 -  
1176 - @param NewFilename New filename of the document  
1177 - @return true  
1178 -*}  
1179 -function TKTWSAPI_Document.RenameFilename(NewFilename: WideString): Boolean;  
1180 -var  
1181 - response: kt_response;  
1182 -begin  
1183 - Result := System.False;  
1184 - response := FKTAPI.SoapClient.rename_document_filename(FKTAPI.Session, FDocumentId, NewFilename);  
1185 - try  
1186 - if (response.status_code <> 0) then  
1187 - raise EKTWSAPI_Exception.Create(response.message_);  
1188 -  
1189 - Result := System.True;  
1190 - finally  
1191 - response.Free;  
1192 - end;  
1193 -end;  
1194 -  
1195 -{*  
1196 - Starts a workflow on the current document.  
1197 -  
1198 - @param WorkFlow Workflow  
1199 - @return true  
1200 - @throws EKTWSAPI_Exception Response message  
1201 -*}  
1202 -function TKTWSAPI_Document.StartWorkflow(WorkFlow: WideString): Boolean;  
1203 -var  
1204 - response: kt_response;  
1205 -begin  
1206 - Result := System.False;  
1207 - response := FKTAPI.SoapClient.start_document_workflow(FKTAPI.Session, FDocumentId, WorkFlow);  
1208 - try  
1209 - if (response.status_code <> 0) then  
1210 - raise EKTWSAPI_Exception.Create(response.message_);  
1211 -  
1212 - Result := System.True;  
1213 - finally  
1214 - response.Free;  
1215 - end;  
1216 -end;  
1217 -  
1218 -{*  
1219 - Removes the workflow process from the current document.  
1220 -  
1221 - @return true  
1222 - @throws EKTWSAPI_Exception Response message  
1223 -*}  
1224 -function TKTWSAPI_Document.DeleteWorkflow: Boolean;  
1225 -var  
1226 - response: kt_response;  
1227 -begin  
1228 - Result := System.False;  
1229 - response := FKTAPI.SoapClient.delete_document_workflow(FKTAPI.Session, FDocumentId);  
1230 - try  
1231 - if (response.status_code <> 0) then  
1232 - raise EKTWSAPI_Exception.Create(response.message_);  
1233 -  
1234 - Result := System.True;  
1235 - finally  
1236 - response.Free;  
1237 - end;  
1238 -end;  
1239 -  
1240 -{*  
1241 - Performs a transition on the current document.  
1242 -  
1243 - @param Transition Transition  
1244 - @param Reason Reason for transition  
1245 - @return true  
1246 - @throws EKTWSAPI_Exception Response message  
1247 -*}  
1248 -function TKTWSAPI_Document.PeformWorkflowTransition(Transition,  
1249 - Reason: WideString): Boolean;  
1250 -var  
1251 - response: kt_response;  
1252 -begin  
1253 - Result := System.False;  
1254 - response := FKTAPI.SoapClient.perform_document_workflow_transition(FKTAPI.Session, FDocumentId, Transition, Reason);  
1255 - try  
1256 - if (response.status_code <> 0) then  
1257 - raise EKTWSAPI_Exception.Create(response.message_);  
1258 -  
1259 - Result := System.True;  
1260 - finally  
1261 - response.Free;  
1262 - end;  
1263 -end;  
1264 -  
1265 -{*  
1266 - Returns metadata on the document.  
1267 -  
1268 - @return handle to metadata  
1269 - @throws EKTWSAPI_Exception Response message  
1270 -*}  
1271 -function TKTWSAPI_Document.GetMetadata: kt_metadata_response;  
1272 -begin  
1273 - Result := FKTAPI.SoapClient.get_document_metadata(FKTAPI.Session, FDocumentId);  
1274 -  
1275 - if (Result.status_code <> 0) then  
1276 - raise EKTWSAPI_Exception.Create(Result.message_);  
1277 -end;  
1278 -  
1279 -{*  
1280 - Updates the metadata on the current document.  
1281 -  
1282 - @param Metadata Handle to metadata  
1283 - @return true  
1284 - @throws EKTWSAPI_Exception Response message  
1285 -*}  
1286 -function TKTWSAPI_Document.UpdateMetadata(  
1287 - Metadata: kt_metadata_fieldsets): Boolean;  
1288 -var  
1289 - response: kt_response;  
1290 -begin  
1291 - Result := System.False;  
1292 - response := FKTAPI.SoapClient.update_document_metadata(FKTAPI.Session, FDocumentId, MetaData);  
1293 - try  
1294 - if (response.status_code <> 0) then  
1295 - raise EKTWSAPI_Exception.Create(response.message_);  
1296 -  
1297 - Result := System.True;  
1298 - finally  
1299 - response.Free;  
1300 - end;  
1301 -end;  
1302 -  
1303 -{*  
1304 - Returns the transaction history on the current document.  
1305 -  
1306 - @return handle to transaction history  
1307 - @throws EKTWSAPI_Exception Response message  
1308 -*}  
1309 -function TKTWSAPI_Document.GetTransactionHistory: kt_document_transaction_history_response;  
1310 -begin  
1311 - Result := FKTAPI.SoapClient.get_document_transaction_history(FKTAPI.Session, FDocumentId);  
1312 - if (Result.status_code <> 0) then  
1313 - raise EKTWSAPI_Exception.Create(Result.message_);  
1314 -end;  
1315 -  
1316 -{*  
1317 - Returns the version history on the current document.  
1318 -  
1319 - @return handle to document version history  
1320 - @throws EKTWSAPI_Exception Response message  
1321 -*}  
1322 -function TKTWSAPI_Document.GetVersionHistory: kt_document_version_history_response;  
1323 -begin  
1324 - Result := FKTAPI.SoapClient.get_document_version_history(FKTAPI.Session, FDocumentId);  
1325 - if (Result.status_code <> 0) then  
1326 - raise EKTWSAPI_Exception.Create(Result.message_);  
1327 -end;  
1328 -  
1329 -{*  
1330 - Returns the links of the current document  
1331 -  
1332 - @return handle to document version history  
1333 - @throws EKTWSAPI_Exception Response message  
1334 -*}  
1335 -function TKTWSAPI_Document.GetLinks: kt_linked_document_response;  
1336 -begin  
1337 - Result := FKTAPI.SoapClient.get_document_links(FKTAPI.Session, FDocumentId);  
1338 - if (Result.status_code <> 0) then  
1339 - raise EKTWSAPI_Exception.Create(Result.message_);  
1340 -end;  
1341 -  
1342 -{*  
1343 - Links the current document to a DocumentId  
1344 -  
1345 - @param DocumentId DocumentId to link to  
1346 - @param LinkType Type of link  
1347 - @return true  
1348 - @throws EKTWSAPI_Exception Response message  
1349 -*}  
1350 -function TKTWSAPI_Document.Link(DocumentId: Integer;  
1351 - const LinkType: WideString): Boolean;  
1352 -var  
1353 - response: kt_response;  
1354 -begin  
1355 - Result := System.False;  
1356 - response := FKTAPI.SoapClient.link_documents(FKTAPI.Session, FDocumentId,  
1357 - DocumentId, LinkType);  
1358 - try  
1359 - if (response.status_code <> 0) then  
1360 - raise EKTWSAPI_Exception.Create(response.message_);  
1361 - Result := System.True;  
1362 - finally  
1363 - response.Free;  
1364 - end;  
1365 -end;  
1366 -  
1367 -{*  
1368 - Unlinks the current document from a DocumentId  
1369 -  
1370 - @param DocumentId DocumentId to unlink to  
1371 - @return true  
1372 - @throws EKTWSAPI_Exception Response message  
1373 -*}  
1374 -function TKTWSAPI_Document.Unlink(DocumentId: Integer): Boolean;  
1375 -var  
1376 - response: kt_response;  
1377 -begin  
1378 - Result := System.False;  
1379 - response := FKTAPI.SoapClient.unlink_documents(FKTAPI.Session, FDocumentId,  
1380 - DocumentId);  
1381 - try  
1382 - if (response.status_code <> 0) then  
1383 - raise EKTWSAPI_Exception.Create(response.message_);  
1384 - Result := System.True;  
1385 - finally  
1386 - response.Free;  
1387 - end;  
1388 -end;  
1389 -  
1390 -{*  
1391 - Checks out a document and downloads document through webservice  
1392 -  
1393 - @param Reason Reason for checkout  
1394 - @param LocalPath to save downloaded file to  
1395 - @return true  
1396 - @throws EKTWSAPI_Exception local path does not exist  
1397 - @throws EKTWSAPI_Exception Response message  
1398 -*}  
1399 -function TKTWSAPI_Document.CheckoutBase64(Reason,  
1400 - LocalPath: WideString; DownloadFile: Boolean): Boolean;  
1401 -var  
1402 - response: kt_response;  
1403 -begin  
1404 - Result := System.False;  
1405 - if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath;  
1406 -  
1407 - if not DirectoryExists(LocalPath) then  
1408 - raise EKTWSAPI_Exception.Create('local path does not exist');  
1409 -  
1410 - // TODO check if Directory is writable  
1411 -  
1412 - response := FKTAPI.SoapClient.checkout_base64_document(FKTAPI.Session, FDocumentId, Reason, DownloadFile);  
1413 - try  
1414 - if (response.status_code <> 0) then  
1415 - raise EKTWSAPI_Exception.Create(response.message_);  
1416 - Result := True;  
1417 - if DownloadFile then  
1418 - Result := _SaveBase64StringAsFile(response.message_, LocalPath, FFileName);  
1419 - finally  
1420 - response.Free;  
1421 - end;  
1422 -end;  
1423 -  
1424 -{*  
1425 - Gets list of document types  
1426 -  
1427 - @return handle to document types response  
1428 - @throws EKTWSAPI_Exception Response message  
1429 -*}  
1430 -function TKTWSAPI_Document.GetTypes: kt_document_types_response;  
1431 -begin  
1432 - Result := FKTAPI.SoapClient.get_document_types(FKTAPI.Session);  
1433 - if (Result.status_code <> 0) then  
1434 - raise EKTWSAPI_Exception.Create(Result.message_);  
1435 -end;  
1436 -  
1437 -{*  
1438 - Get list of document link types  
1439 - @return handle to document types response  
1440 - @throws EKTWSAPI_Exception Response message  
1441 -*}  
1442 -function TKTWSAPI_Document.GetLinkTypes: kt_document_types_response;  
1443 -begin  
1444 - Result := FKTAPI.SoapClient.get_document_link_types(FKTAPI.Session);  
1445 - if (Result.status_code <> 0) then  
1446 - raise EKTWSAPI_Exception.Create(Result.message_);  
1447 -end;  
1448 -  
1449 -{*  
1450 - Checks in a document and uploads through webservice  
1451 -  
1452 - @param FileName Name of file to checkin  
1453 - @param Reason Reason for checkin  
1454 - @param MajorUpdate Checkin as a major update (bumps major version number)  
1455 - @return true  
1456 - @throws EKTWSAPI_Exception Response message  
1457 -*}  
1458 -function TKTWSAPI_Document.CheckinBase64(FileName, Reason: WideString;  
1459 - MajorUpdate: Boolean): Boolean;  
1460 -var  
1461 - Base64String, BaseName: WideString;  
1462 - response: kt_response;  
1463 -begin  
1464 - Result := System.False;  
1465 - Base64String := _LoadFileAsBase64String(FileName);  
1466 - BaseName := ExtractFileName(FileName);  
1467 -  
1468 - response := FKTAPI.SoapClient.checkin_base64_document(FKTAPI.Session,  
1469 - FDocumentId, BaseName, Reason, Base64String, MajorUpdate);  
1470 - try  
1471 - if (response.status_code <> 0) then  
1472 - raise EKTWSAPI_Exception.Create(response.message_);  
1473 - Result := System.True;  
1474 - finally  
1475 - response.Free;  
1476 - end;  
1477 -end;  
1478 -  
1479 -{ TKTWSAPI }  
1480 -  
1481 -{*  
1482 - Constructor  
1483 -*}  
1484 -constructor Tktwsapi.Create();  
1485 -begin  
1486 - FSoapClient := GetKnowledgeTreePort(False, KTWebServiceUrl);  
1487 - FDownloadPath := '';  
1488 -end;  
1489 -  
1490 -{*  
1491 - This returns the default location where documents are downloaded in download() and checkout().  
1492 -  
1493 - @return string  
1494 -*}  
1495 -function TKTWSAPI.GetDownloadPath: WideString;  
1496 -begin  
1497 - Result := FDownloadPath;  
1498 -end;  
1499 -  
1500 -{*  
1501 - Allows the default location for downloaded documents to be changed.  
1502 -  
1503 - @param DownloadPath Path to writable folder  
1504 - @return true  
1505 -*}  
1506 -function TKTWSAPI.SetDownloadPath(DownloadPath: WideString): Boolean;  
1507 -begin  
1508 - if (not DirectoryExists(DownloadPath)) then  
1509 - raise EKTWSAPI_Exception.Create('local path is not writable');  
1510 - // TODO : Check if folder is writable  
1511 -  
1512 - FDownloadPath := DownloadPath;  
1513 - Result := System.True;  
1514 -end;  
1515 -  
1516 -{*  
1517 - Starts an anonymous session.  
1518 -  
1519 - @param Ip Users Ip-adress  
1520 - @return Active session id  
1521 -*}  
1522 -function TKTWSAPI.StartAnonymousSession(Ip: WideString): WideString;  
1523 -begin  
1524 - Result := StartSession('anonymous', '', Ip);  
1525 -end;  
1526 -  
1527 -{*  
1528 - Starts a user session.  
1529 -  
1530 - @param Username Users username  
1531 - @param Password Users password  
1532 - @param Ip Users Ip-adress  
1533 - @return Active session id  
1534 - @throws EKTWSAPI_Exception KTWSAPI_ERR_SESSION_IN_USE  
1535 - @throws EKTWSAPI_Exception Response message  
1536 -*}  
1537 -function TKTWSAPI.StartSession(Username, Password, Ip: WideString): WideString;  
1538 -var  
1539 - response: kt_response;  
1540 -begin  
1541 - if (FSession <> '') then  
1542 - raise EKTWSAPI_Exception.Create(KTWSAPI_ERR_SESSION_IN_USE);  
1543 - response := FSoapClient.login(Username, Password, Ip);  
1544 - try  
1545 - if (response.status_code <> 0) then  
1546 - raise EKTWSAPI_Exception.Create(response.message_);  
1547 - FSession := response.message_;  
1548 - Result := FSession;  
1549 - finally  
1550 - response.Free;  
1551 - end;  
1552 -end;  
1553 -  
1554 -{*  
1555 - Sets an active session.  
1556 -  
1557 - @param Session Session id to activate  
1558 - @param Ip Users Ip-adress  
1559 - @return Active session id  
1560 - @throws EKTWSAPI_Exception KTWSAPI_ERR_SESSION_IN_USE  
1561 -*}  
1562 -function TKTWSAPI.ActiveSession(Session, Ip: WideString): WideString;  
1563 -begin  
1564 - if (FSession <> '') then  
1565 - raise EKTWSAPI_Exception.Create(KTWSAPI_ERR_SESSION_IN_USE);  
1566 - FSession := Session;  
1567 - Result := FSession;  
1568 -end;  
1569 -  
1570 -{*  
1571 - Closes an active session.  
1572 -  
1573 - @return true  
1574 -*}  
1575 -function TKTWSAPI.Logout: Boolean;  
1576 -var  
1577 - response: kt_response;  
1578 -begin  
1579 - Result := System.False;  
1580 -  
1581 - if (FSession = '') then  
1582 - raise EKTWSAPI_Exception.Create(KTWSAPI_ERR_SESSION_NOT_STARTED);  
1583 - response := FSoapClient.logout(FSession);  
1584 - try  
1585 - if (response.status_code <> 0) then  
1586 - raise EKTWSAPI_Exception.Create(response.message_);  
1587 - FSession := '';  
1588 - Result := System.True;  
1589 - finally  
1590 - response.Free;  
1591 - end;  
1592 -end;  
1593 -  
1594 -{*  
1595 - Returns a reference to the root folder.  
1596 -  
1597 - @return handle to folder  
1598 -*}  
1599 -function TKTWSAPI.GetRootFolder: TKTWSAPI_Folder;  
1600 -begin  
1601 - Result := GetFolderById(1);  
1602 -end;  
1603 -  
1604 -{*  
1605 - Returns a reference to a folder based on id.  
1606 -  
1607 - @param FolderId Id of folder  
1608 - @return handle to folder  
1609 -*}  
1610 -function TKTWSAPI.GetFolderById(FolderId: Integer): TKTWSAPI_Folder;  
1611 -begin  
1612 - if FSession = '' then  
1613 - raise EKTWSAPI_Exception.Create('A session is not active');  
1614 - Result := TKTWSAPI_Folder.Get(Self, FolderId);  
1615 -end;  
1616 -  
1617 -{*  
1618 - Returns a reference to a document based on id.  
1619 -  
1620 - @param DocumentId Id of document  
1621 - @return handle to document  
1622 -*}  
1623 -function TKTWSAPI.GetDocumentById(DocumentId: Integer): TKTWSAPI_Document;  
1624 -begin  
1625 - if FSession = '' then  
1626 - raise EKTWSAPI_Exception.Create('A session is not active');  
1627 - Result := TKTWSAPI_Document.Get(Self, DocumentId)  
1628 -end;  
1629 -  
1630 -end.  
ktwsapi/delphi/uwebservice.pas deleted
1 -{  
2 - Copyright (c) 2007, The Jam Warehouse Software (Pty) Ltd.  
3 -  
4 - All rights reserved.  
5 -  
6 - Redistribution and use in source and binary forms, with or without  
7 - modification, are permitted provided that the following conditions are met:  
8 -  
9 - i) Redistributions of source code must retain the above copyright notice,  
10 - this list of conditions and the following disclaimer.  
11 - ii) Redistributions in binary form must reproduce the above copyright  
12 - notice, this list of conditions and the following disclaimer in the  
13 - documentation and/or other materials provided with the distribution.  
14 - iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
15 - names of its contributors may be used to endorse or promote products  
16 - derived from this software without specific prior written permission.  
17 -  
18 - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
19 - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
20 - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
21 - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
22 - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
23 - EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
24 - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
25 - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
26 - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
27 - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
28 - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
29 -}  
30 -  
31 -{*  
32 - Unit auto-generated by delphi's wsdl imported  
33 -  
34 - @Author Bjarte Kalstveit Vebjørnsen <bjarte@macaos.com>  
35 - @Version 1.0 BKV 24.09.2007 Initial revision  
36 -*}  
37 -  
38 -// ************************************************************************ //  
39 -// The types declared in this file were generated from data read from the  
40 -// WSDL File described below:  
41 -// WSDL : http://ktdms.trunk/ktwebservice/webservice.php?wsdl  
42 -// Codegen : [wfDebug,wfGenerateWarnings,wfUseSerializerClassForAttrs]  
43 -// Version : 1.0  
44 -// (23.09.2007 21:20:12 - 1.33.2.6)  
45 -// ************************************************************************ //  
46 -  
47 -unit uwebservice;  
48 -  
49 -interface  
50 -  
51 -uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;  
52 -  
53 -type  
54 -  
55 - // ************************************************************************ //  
56 - // The following types, referred to in the WSDL document are not being represented  
57 - // in this file. They are either aliases[@] of other types represented or were referred  
58 - // to but never[!] declared in the document. The types from the latter category  
59 - // typically map to predefined/known XML or Borland types; however, they could also  
60 - // indicate incorrect WSDL documents that failed to declare or import a schema type.  
61 - // ************************************************************************ //  
62 - // !:int - "http://www.w3.org/2001/XMLSchema"  
63 - // !:string - "http://www.w3.org/2001/XMLSchema"  
64 - // !:boolean - "http://www.w3.org/2001/XMLSchema"  
65 -  
66 - kt_response = class; { "urn:KnowledgeTree" }  
67 - kt_folder_detail = class; { "urn:KnowledgeTree" }  
68 - kt_folder_item = class; { "urn:KnowledgeTree" }  
69 - kt_folder_contents = class; { "urn:KnowledgeTree" }  
70 - kt_document_detail = class; { "urn:KnowledgeTree" }  
71 - kt_metadata_selection_item = class; { "urn:KnowledgeTree" }  
72 - kt_metadata_field = class; { "urn:KnowledgeTree" }  
73 - kt_metadata_fieldset = class; { "urn:KnowledgeTree" }  
74 - kt_metadata_response = class; { "urn:KnowledgeTree" }  
75 - kt_document_transitions_response = class; { "urn:KnowledgeTree" }  
76 - kt_document_transaction_history_item = class; { "urn:KnowledgeTree" }  
77 - kt_linked_document = class; { "urn:KnowledgeTree" }  
78 - kt_linked_document_response = class; { "urn:KnowledgeTree" }  
79 - kt_document_transaction_history_response = class; { "urn:KnowledgeTree" }  
80 - kt_document_version_history_item = class; { "urn:KnowledgeTree" }  
81 - kt_document_version_history_response = class; { "urn:KnowledgeTree" }  
82 - kt_document_types_response = class; { "urn:KnowledgeTree" }  
83 -  
84 -  
85 -  
86 - // ************************************************************************ //  
87 - // Namespace : urn:KnowledgeTree  
88 - // ************************************************************************ //  
89 - kt_response = class(TRemotable)  
90 - private  
91 - Fstatus_code: Integer;  
92 - Fmessage_: WideString;  
93 - published  
94 - property status_code: Integer read Fstatus_code write Fstatus_code;  
95 - property message_: WideString read Fmessage_ write Fmessage_;  
96 - end;  
97 -  
98 -  
99 -  
100 - // ************************************************************************ //  
101 - // Namespace : urn:KnowledgeTree  
102 - // ************************************************************************ //  
103 - kt_folder_detail = class(TRemotable)  
104 - private  
105 - Fstatus_code: Integer;  
106 - Fmessage_: WideString;  
107 - Fid: Integer;  
108 - Ffolder_name: WideString;  
109 - Fparent_id: Integer;  
110 - Ffull_path: WideString;  
111 - published  
112 - property status_code: Integer read Fstatus_code write Fstatus_code;  
113 - property message_: WideString read Fmessage_ write Fmessage_;  
114 - property id: Integer read Fid write Fid;  
115 - property folder_name: WideString read Ffolder_name write Ffolder_name;  
116 - property parent_id: Integer read Fparent_id write Fparent_id;  
117 - property full_path: WideString read Ffull_path write Ffull_path;  
118 - end;  
119 -  
120 - kt_folder_items = array of kt_folder_item; { "urn:KnowledgeTree" }  
121 -  
122 -  
123 - // ************************************************************************ //  
124 - // Namespace : urn:KnowledgeTree  
125 - // ************************************************************************ //  
126 - kt_folder_item = class(TRemotable)  
127 - private  
128 - Fid: Integer;  
129 - Fitem_type: WideString;  
130 - Ftitle: WideString;  
131 - Fcreator: WideString;  
132 - Fchecked_out_by: WideString;  
133 - Fmodified_by: WideString;  
134 - Ffilename: WideString;  
135 - Fsize: WideString;  
136 - Fmajor_version: WideString;  
137 - Fminor_version: WideString;  
138 - Fstorage_path: WideString;  
139 - Fmime_type: WideString;  
140 - Fmime_icon_path: WideString;  
141 - Fmime_display: WideString;  
142 - Fworkflow: WideString;  
143 - Fworkflow_state: WideString;  
144 - Fitems: kt_folder_items;  
145 - public  
146 - destructor Destroy; override;  
147 - published  
148 - property id: Integer read Fid write Fid;  
149 - property item_type: WideString read Fitem_type write Fitem_type;  
150 - property title: WideString read Ftitle write Ftitle;  
151 - property creator: WideString read Fcreator write Fcreator;  
152 - property checked_out_by: WideString read Fchecked_out_by write Fchecked_out_by;  
153 - property modified_by: WideString read Fmodified_by write Fmodified_by;  
154 - property filename: WideString read Ffilename write Ffilename;  
155 - property size: WideString read Fsize write Fsize;  
156 - property major_version: WideString read Fmajor_version write Fmajor_version;  
157 - property minor_version: WideString read Fminor_version write Fminor_version;  
158 - property storage_path: WideString read Fstorage_path write Fstorage_path;  
159 - property mime_type: WideString read Fmime_type write Fmime_type;  
160 - property mime_icon_path: WideString read Fmime_icon_path write Fmime_icon_path;  
161 - property mime_display: WideString read Fmime_display write Fmime_display;  
162 - property workflow: WideString read Fworkflow write Fworkflow;  
163 - property workflow_state: WideString read Fworkflow_state write Fworkflow_state;  
164 - property items: kt_folder_items read Fitems write Fitems;  
165 - end;  
166 -  
167 -  
168 -  
169 - // ************************************************************************ //  
170 - // Namespace : urn:KnowledgeTree  
171 - // ************************************************************************ //  
172 - kt_folder_contents = class(TRemotable)  
173 - private  
174 - Fstatus_code: Integer;  
175 - Fmessage_: WideString;  
176 - Ffolder_id: Integer;  
177 - Ffolder_name: WideString;  
178 - Ffull_path: WideString;  
179 - Fitems: kt_folder_items;  
180 - public  
181 - destructor Destroy; override;  
182 - published  
183 - property status_code: Integer read Fstatus_code write Fstatus_code;  
184 - property message_: WideString read Fmessage_ write Fmessage_;  
185 - property folder_id: Integer read Ffolder_id write Ffolder_id;  
186 - property folder_name: WideString read Ffolder_name write Ffolder_name;  
187 - property full_path: WideString read Ffull_path write Ffull_path;  
188 - property items: kt_folder_items read Fitems write Fitems;  
189 - end;  
190 -  
191 -  
192 -  
193 - // ************************************************************************ //  
194 - // Namespace : urn:KnowledgeTree  
195 - // ************************************************************************ //  
196 - kt_document_detail = class(TRemotable)  
197 - private  
198 - Fstatus_code: Integer;  
199 - Fmessage_: WideString;  
200 - Ftitle: WideString;  
201 - Fdocument_type: WideString;  
202 - Fversion: WideString;  
203 - Ffilename: WideString;  
204 - Fcreated_date: WideString;  
205 - Fcreated_by: WideString;  
206 - Fupdated_date: WideString;  
207 - Fupdated_by: WideString;  
208 - Fdocument_id: Integer;  
209 - Ffolder_id: Integer;  
210 - Fworkflow: WideString;  
211 - Fworkflow_state: WideString;  
212 - Fcheckout_by: WideString;  
213 - Ffull_path: WideString;  
214 - published  
215 - property status_code: Integer read Fstatus_code write Fstatus_code;  
216 - property message_: WideString read Fmessage_ write Fmessage_;  
217 - property title: WideString read Ftitle write Ftitle;  
218 - property document_type: WideString read Fdocument_type write Fdocument_type;  
219 - property version: WideString read Fversion write Fversion;  
220 - property filename: WideString read Ffilename write Ffilename;  
221 - property created_date: WideString read Fcreated_date write Fcreated_date;  
222 - property created_by: WideString read Fcreated_by write Fcreated_by;  
223 - property updated_date: WideString read Fupdated_date write Fupdated_date;  
224 - property updated_by: WideString read Fupdated_by write Fupdated_by;  
225 - property document_id: Integer read Fdocument_id write Fdocument_id;  
226 - property folder_id: Integer read Ffolder_id write Ffolder_id;  
227 - property workflow: WideString read Fworkflow write Fworkflow;  
228 - property workflow_state: WideString read Fworkflow_state write Fworkflow_state;  
229 - property checkout_by: WideString read Fcheckout_by write Fcheckout_by;  
230 - property full_path: WideString read Ffull_path write Ffull_path;  
231 - end;  
232 -  
233 -  
234 -  
235 - // ************************************************************************ //  
236 - // Namespace : urn:KnowledgeTree  
237 - // ************************************************************************ //  
238 - kt_metadata_selection_item = class(TRemotable)  
239 - private  
240 - Fid: Integer;  
241 - Fname_: WideString;  
242 - Fvalue: WideString;  
243 - Fparent_id: Integer;  
244 - published  
245 - property id: Integer read Fid write Fid;  
246 - property name_: WideString read Fname_ write Fname_;  
247 - property value: WideString read Fvalue write Fvalue;  
248 - property parent_id: Integer read Fparent_id write Fparent_id;  
249 - end;  
250 -  
251 - kt_metadata_selection = array of kt_metadata_selection_item; { "urn:KnowledgeTree" }  
252 -  
253 -  
254 - // ************************************************************************ //  
255 - // Namespace : urn:KnowledgeTree  
256 - // ************************************************************************ //  
257 - kt_metadata_field = class(TRemotable)  
258 - private  
259 - Fname_: WideString;  
260 - Frequired: Boolean;  
261 - Fvalue: WideString;  
262 - Fdescription: WideString;  
263 - Fcontrol_type: WideString;  
264 - Fselection: kt_metadata_selection;  
265 - public  
266 - destructor Destroy; override;  
267 - published  
268 - property name_: WideString read Fname_ write Fname_;  
269 - property required: Boolean read Frequired write Frequired;  
270 - property value: WideString read Fvalue write Fvalue;  
271 - property description: WideString read Fdescription write Fdescription;  
272 - property control_type: WideString read Fcontrol_type write Fcontrol_type;  
273 - property selection: kt_metadata_selection read Fselection write Fselection;  
274 - end;  
275 -  
276 - kt_metadata_fields = array of kt_metadata_field; { "urn:KnowledgeTree" }  
277 -  
278 -  
279 - // ************************************************************************ //  
280 - // Namespace : urn:KnowledgeTree  
281 - // ************************************************************************ //  
282 - kt_metadata_fieldset = class(TRemotable)  
283 - private  
284 - Ffieldset: WideString;  
285 - Fdescription: WideString;  
286 - Ffields: kt_metadata_fields;  
287 - public  
288 - destructor Destroy; override;  
289 - published  
290 - property fieldset: WideString read Ffieldset write Ffieldset;  
291 - property description: WideString read Fdescription write Fdescription;  
292 - property fields: kt_metadata_fields read Ffields write Ffields;  
293 - end;  
294 -  
295 - kt_metadata_fieldsets = array of kt_metadata_fieldset; { "urn:KnowledgeTree" }  
296 -  
297 -  
298 - // ************************************************************************ //  
299 - // Namespace : urn:KnowledgeTree  
300 - // ************************************************************************ //  
301 - kt_metadata_response = class(TRemotable)  
302 - private  
303 - Fstatus_code: Integer;  
304 - Fmessage_: WideString;  
305 - Fmetadata: kt_metadata_fieldsets;  
306 - public  
307 - destructor Destroy; override;  
308 - published  
309 - property status_code: Integer read Fstatus_code write Fstatus_code;  
310 - property message_: WideString read Fmessage_ write Fmessage_;  
311 - property metadata: kt_metadata_fieldsets read Fmetadata write Fmetadata;  
312 - end;  
313 -  
314 - kt_document_transitions = array of WideString; { "urn:KnowledgeTree" }  
315 -  
316 -  
317 - // ************************************************************************ //  
318 - // Namespace : urn:KnowledgeTree  
319 - // ************************************************************************ //  
320 - kt_document_transitions_response = class(TRemotable)  
321 - private  
322 - Fstatus_code: Integer;  
323 - Fmessage_: WideString;  
324 - Fmetadata: kt_document_transitions;  
325 - published  
326 - property status_code: Integer read Fstatus_code write Fstatus_code;  
327 - property message_: WideString read Fmessage_ write Fmessage_;  
328 - property metadata: kt_document_transitions read Fmetadata write Fmetadata;  
329 - end;  
330 -  
331 -  
332 -  
333 - // ************************************************************************ //  
334 - // Namespace : urn:KnowledgeTree  
335 - // ************************************************************************ //  
336 - kt_document_transaction_history_item = class(TRemotable)  
337 - private  
338 - Ftransaction_name: WideString;  
339 - Fusername: WideString;  
340 - Fversion: WideString;  
341 - Fcomment: WideString;  
342 - Fdatetime: WideString;  
343 - published  
344 - property transaction_name: WideString read Ftransaction_name write Ftransaction_name;  
345 - property username: WideString read Fusername write Fusername;  
346 - property version: WideString read Fversion write Fversion;  
347 - property comment: WideString read Fcomment write Fcomment;  
348 - property datetime: WideString read Fdatetime write Fdatetime;  
349 - end;  
350 -  
351 -  
352 -  
353 - // ************************************************************************ //  
354 - // Namespace : urn:KnowledgeTree  
355 - // ************************************************************************ //  
356 - kt_linked_document = class(TRemotable)  
357 - private  
358 - Fdocument_id: Integer;  
359 - Ftitle: WideString;  
360 - Fsize: Integer;  
361 - Fworkflow: WideString;  
362 - Fworkflow_state: WideString;  
363 - Flink_type: WideString;  
364 - published  
365 - property document_id: Integer read Fdocument_id write Fdocument_id;  
366 - property title: WideString read Ftitle write Ftitle;  
367 - property size: Integer read Fsize write Fsize;  
368 - property workflow: WideString read Fworkflow write Fworkflow;  
369 - property workflow_state: WideString read Fworkflow_state write Fworkflow_state;  
370 - property link_type: WideString read Flink_type write Flink_type;  
371 - end;  
372 -  
373 - kt_linked_documents = array of kt_linked_document; { "urn:KnowledgeTree" }  
374 -  
375 -  
376 - // ************************************************************************ //  
377 - // Namespace : urn:KnowledgeTree  
378 - // ************************************************************************ //  
379 - kt_linked_document_response = class(TRemotable)  
380 - private  
381 - Fstatus_code: Integer;  
382 - Fmessage_: WideString;  
383 - Fparent_document_id: WideString;  
384 - Flinks: kt_linked_documents;  
385 - public  
386 - destructor Destroy; override;  
387 - published  
388 - property status_code: Integer read Fstatus_code write Fstatus_code;  
389 - property message_: WideString read Fmessage_ write Fmessage_;  
390 - property parent_document_id: WideString read Fparent_document_id write Fparent_document_id;  
391 - property links: kt_linked_documents read Flinks write Flinks;  
392 - end;  
393 -  
394 - kt_document_transaction_history = array of kt_document_transaction_history_item; { "urn:KnowledgeTree" }  
395 -  
396 -  
397 - // ************************************************************************ //  
398 - // Namespace : urn:KnowledgeTree  
399 - // ************************************************************************ //  
400 - kt_document_transaction_history_response = class(TRemotable)  
401 - private  
402 - Fstatus_code: Integer;  
403 - Fmessage_: WideString;  
404 - Fhistory: kt_document_transaction_history;  
405 - public  
406 - destructor Destroy; override;  
407 - published  
408 - property status_code: Integer read Fstatus_code write Fstatus_code;  
409 - property message_: WideString read Fmessage_ write Fmessage_;  
410 - property history: kt_document_transaction_history read Fhistory write Fhistory;  
411 - end;  
412 -  
413 -  
414 -  
415 - // ************************************************************************ //  
416 - // Namespace : urn:KnowledgeTree  
417 - // ************************************************************************ //  
418 - kt_document_version_history_item = class(TRemotable)  
419 - private  
420 - Fuser: Integer;  
421 - Fmetadata_version: WideString;  
422 - Fcontent_version: WideString;  
423 - published  
424 - property user: Integer read Fuser write Fuser;  
425 - property metadata_version: WideString read Fmetadata_version write Fmetadata_version;  
426 - property content_version: WideString read Fcontent_version write Fcontent_version;  
427 - end;  
428 -  
429 - kt_document_version_history = array of kt_document_version_history_item; { "urn:KnowledgeTree" }  
430 -  
431 -  
432 - // ************************************************************************ //  
433 - // Namespace : urn:KnowledgeTree  
434 - // ************************************************************************ //  
435 - kt_document_version_history_response = class(TRemotable)  
436 - private  
437 - Fstatus_code: Integer;  
438 - Fmessage_: WideString;  
439 - Fhistory: kt_document_version_history;  
440 - public  
441 - destructor Destroy; override;  
442 - published  
443 - property status_code: Integer read Fstatus_code write Fstatus_code;  
444 - property message_: WideString read Fmessage_ write Fmessage_;  
445 - property history: kt_document_version_history read Fhistory write Fhistory;  
446 - end;  
447 -  
448 - kt_document_types_array = array of WideString; { "urn:KnowledgeTree" }  
449 -  
450 -  
451 - // ************************************************************************ //  
452 - // Namespace : urn:KnowledgeTree  
453 - // ************************************************************************ //  
454 - kt_document_types_response = class(TRemotable)  
455 - private  
456 - Fstatus_code: Integer;  
457 - Fmessage_: WideString;  
458 - Fdocument_types: kt_document_types_array;  
459 - published  
460 - property status_code: Integer read Fstatus_code write Fstatus_code;  
461 - property message_: WideString read Fmessage_ write Fmessage_;  
462 - property document_types: kt_document_types_array read Fdocument_types write Fdocument_types;  
463 - end;  
464 -  
465 -  
466 - // ************************************************************************ //  
467 - // Namespace : http://schemas.xmlsoap.org/soap/envelope/  
468 - // soapAction: http://schemas.xmlsoap.org/soap/envelope/#KTWebService#%operationName%  
469 - // transport : http://schemas.xmlsoap.org/soap/http  
470 - // style : rpc  
471 - // binding : KnowledgeTreeBinding  
472 - // service : KnowledgeTreeService  
473 - // port : KnowledgeTreePort  
474 - // URL : http://ktdms.trunk/ktwebservice/webservice.php  
475 - // ************************************************************************ //  
476 - KnowledgeTreePort = interface(IInvokable)  
477 - ['{FA35CA60-1DC3-B3C7-6C65-BE4E3A6A8A22}']  
478 - function login(const username: WideString; const password: WideString; const ip: WideString): kt_response; stdcall;  
479 - function anonymous_login(const ip: WideString): kt_response; stdcall;  
480 - function logout(const session_id: WideString): kt_response; stdcall;  
481 - function get_folder_detail(const session_id: WideString; const folder_id: Integer): kt_folder_detail; stdcall;  
482 - function get_folder_detail_by_name(const session_id: WideString; const folder_name: WideString): kt_folder_detail; stdcall;  
483 - function get_folder_contents(const session_id: WideString; const folder_id: Integer; const depth: Integer; const what: WideString): kt_folder_contents; stdcall;  
484 - function create_folder(const session_id: WideString; const folder_id: Integer; const folder_name: WideString): kt_folder_detail; stdcall;  
485 - function delete_folder(const session_id: WideString; const folder_id: Integer; const reason: WideString): kt_response; stdcall;  
486 - function rename_folder(const session_id: WideString; const folder_id: Integer; const newname: WideString): kt_response; stdcall;  
487 - function get_document_links(const session_id: WideString; const document_id: Integer): kt_linked_document_response; stdcall;  
488 - function link_documents(const session_id: WideString; const parent_document_id: Integer; const child_document_id: Integer; const type_: WideString): kt_response; stdcall;  
489 - function unlink_documents(const session_id: WideString; const parent_document_id: Integer; const child_document_id: Integer): kt_response; stdcall;  
490 - function copy_folder(const session_id: WideString; const source_id: Integer; const target_id: Integer; const reason: WideString): kt_response; stdcall;  
491 - function move_folder(const session_id: WideString; const source_id: Integer; const target_id: Integer; const reason: WideString): kt_response; stdcall;  
492 - function get_document_detail(const session_id: WideString; const document_id: Integer): kt_document_detail; stdcall;  
493 - function checkin_document(const session_id: WideString; const document_id: Integer; const filename: WideString; const reason: WideString; const tempfilename: WideString; const major_update: Boolean): kt_response; stdcall;  
494 - function checkin_small_document(const session_id: WideString; const document_id: Integer; const filename: WideString; const reason: WideString; const base64: WideString; const major_update: Boolean): kt_response; stdcall;  
495 - function checkin_base64_document(const session_id: WideString; const document_id: Integer; const filename: WideString; const reason: WideString; const base64: WideString; const major_update: Boolean): kt_response; stdcall;  
496 - function add_document(const session_id: WideString; const folder_id: Integer; const title: WideString; const filename: WideString; const documentype: WideString; const tempfilename: WideString): kt_document_detail; stdcall;  
497 - function add_small_document(const session_id: WideString; const folder_id: Integer; const title: WideString; const filename: WideString; const documentype: WideString; const base64: WideString): kt_document_detail; stdcall;  
498 - function add_base64_document(const session_id: WideString; const folder_id: Integer; const title: WideString; const filename: WideString; const documentype: WideString; const base64: WideString): kt_document_detail; stdcall;  
499 - function get_document_detail_by_name(const session_id: WideString; const document_name: WideString; const what: WideString): kt_document_detail; stdcall;  
500 - function checkout_document(const session_id: WideString; const document_id: Integer; const reason: WideString): kt_response; stdcall;  
501 - function checkout_small_document(const session_id: WideString; const document_id: Integer; const reason: WideString; const download: Boolean): kt_response; stdcall;  
502 - function checkout_base64_document(const session_id: WideString; const document_id: Integer; const reason: WideString; const download: Boolean): kt_response; stdcall;  
503 - function undo_document_checkout(const session_id: WideString; const document_id: Integer; const reason: WideString): kt_response; stdcall;  
504 - function download_document(const session_id: WideString; const document_id: Integer): kt_response; stdcall;  
505 - function download_small_document(const session_id: WideString; const document_id: Integer): kt_response; stdcall;  
506 - function download_base64_document(const session_id: WideString; const document_id: Integer): kt_response; stdcall;  
507 - function delete_document(const session_id: WideString; const document_id: Integer; const reason: WideString): kt_response; stdcall;  
508 - function change_document_owner(const session_id: WideString; const document_id: Integer; const username: WideString; const reason: WideString): kt_response; stdcall;  
509 - function copy_document(const session_id: WideString; const document_id: Integer; const folder_id: Integer; const reason: WideString; const newtitle: WideString; const newfilename: WideString): kt_response; stdcall;  
510 - function move_document(const session_id: WideString; const document_id: Integer; const folder_id: Integer; const reason: WideString; const newtitle: WideString; const newfilename: WideString): kt_response; stdcall;  
511 - function rename_document_title(const session_id: WideString; const document_id: Integer; const newtitle: WideString): kt_response; stdcall;  
512 - function rename_document_filename(const session_id: WideString; const document_id: Integer; const newfilename: WideString): kt_response; stdcall;  
513 - function change_document_type(const session_id: WideString; const document_id: Integer; const documenttype: WideString): kt_response; stdcall;  
514 - function start_document_workflow(const session_id: WideString; const document_id: Integer; const workflow: WideString): kt_response; stdcall;  
515 - function delete_document_workflow(const session_id: WideString; const document_id: Integer): kt_response; stdcall;  
516 - function perform_document_workflow_transition(const session_id: WideString; const document_id: Integer; const transition: WideString; const reason: WideString): kt_response; stdcall;  
517 - function get_document_metadata(const session_id: WideString; const document_id: Integer): kt_metadata_response; stdcall;  
518 - function get_document_type_metadata(const session_id: WideString; const document_type: WideString): kt_metadata_response; stdcall;  
519 - function update_document_metadata(const session_id: WideString; const document_id: Integer; const metadata: kt_metadata_fieldsets): kt_response; stdcall;  
520 - function get_document_workflow_transitions(const session_id: WideString; const document_id: Integer): kt_document_transitions_response; stdcall;  
521 - function get_document_workflow_state(const session_id: WideString; const document_id: Integer): kt_response; stdcall;  
522 - function get_document_transaction_history(const session_id: WideString; const document_id: Integer): kt_document_transaction_history_response; stdcall;  
523 - function get_document_version_history(const session_id: WideString; const document_id: Integer): kt_document_version_history_response; stdcall;  
524 - function get_document_types(const session_id: WideString): kt_document_types_response; stdcall;  
525 - function get_document_link_types(const session_id: WideString): kt_document_types_response; stdcall;  
526 - end;  
527 -  
528 -function GetKnowledgeTreePort(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): KnowledgeTreePort;  
529 -  
530 -  
531 -implementation  
532 -  
533 -function GetKnowledgeTreePort(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): KnowledgeTreePort;  
534 -const  
535 - defWSDL = 'http://ktdms.trunk/ktwebservice/webservice.php?wsdl';  
536 - defURL = 'http://ktdms.trunk/ktwebservice/webservice.php';  
537 - defSvc = 'KnowledgeTreeService';  
538 - defPrt = 'KnowledgeTreePort';  
539 -var  
540 - RIO: THTTPRIO;  
541 -begin  
542 - Result := nil;  
543 - if (Addr = '') then  
544 - begin  
545 - if UseWSDL then  
546 - Addr := defWSDL  
547 - else  
548 - Addr := defURL;  
549 - end;  
550 - if HTTPRIO = nil then  
551 - RIO := THTTPRIO.Create(nil)  
552 - else  
553 - RIO := HTTPRIO;  
554 - try  
555 - Result := (RIO as KnowledgeTreePort);  
556 - if UseWSDL then  
557 - begin  
558 - RIO.WSDLLocation := Addr;  
559 - RIO.Service := defSvc;  
560 - RIO.Port := defPrt;  
561 - end else  
562 - RIO.URL := Addr;  
563 - finally  
564 - if (Result = nil) and (HTTPRIO = nil) then  
565 - RIO.Free;  
566 - end;  
567 -end;  
568 -  
569 -  
570 -destructor kt_folder_item.Destroy;  
571 -var  
572 - I: Integer;  
573 -begin  
574 - for I := 0 to Length(Fitems)-1 do  
575 - if Assigned(Fitems[I]) then  
576 - Fitems[I].Free;  
577 - SetLength(Fitems, 0);  
578 - inherited Destroy;  
579 -end;  
580 -  
581 -destructor kt_folder_contents.Destroy;  
582 -var  
583 - I: Integer;  
584 -begin  
585 - for I := 0 to Length(Fitems)-1 do  
586 - if Assigned(Fitems[I]) then  
587 - Fitems[I].Free;  
588 - SetLength(Fitems, 0);  
589 - inherited Destroy;  
590 -end;  
591 -  
592 -destructor kt_metadata_field.Destroy;  
593 -var  
594 - I: Integer;  
595 -begin  
596 - for I := 0 to Length(Fselection)-1 do  
597 - if Assigned(Fselection[I]) then  
598 - Fselection[I].Free;  
599 - SetLength(Fselection, 0);  
600 - inherited Destroy;  
601 -end;  
602 -  
603 -destructor kt_metadata_fieldset.Destroy;  
604 -var  
605 - I: Integer;  
606 -begin  
607 - for I := 0 to Length(Ffields)-1 do  
608 - if Assigned(Ffields[I]) then  
609 - Ffields[I].Free;  
610 - SetLength(Ffields, 0);  
611 - inherited Destroy;  
612 -end;  
613 -  
614 -destructor kt_metadata_response.Destroy;  
615 -var  
616 - I: Integer;  
617 -begin  
618 - for I := 0 to Length(Fmetadata)-1 do  
619 - if Assigned(Fmetadata[I]) then  
620 - Fmetadata[I].Free;  
621 - SetLength(Fmetadata, 0);  
622 - inherited Destroy;  
623 -end;  
624 -  
625 -destructor kt_linked_document_response.Destroy;  
626 -var  
627 - I: Integer;  
628 -begin  
629 - for I := 0 to Length(Flinks)-1 do  
630 - if Assigned(Flinks[I]) then  
631 - Flinks[I].Free;  
632 - SetLength(Flinks, 0);  
633 - inherited Destroy;  
634 -end;  
635 -  
636 -destructor kt_document_transaction_history_response.Destroy;  
637 -var  
638 - I: Integer;  
639 -begin  
640 - for I := 0 to Length(Fhistory)-1 do  
641 - if Assigned(Fhistory[I]) then  
642 - Fhistory[I].Free;  
643 - SetLength(Fhistory, 0);  
644 - inherited Destroy;  
645 -end;  
646 -  
647 -destructor kt_document_version_history_response.Destroy;  
648 -var  
649 - I: Integer;  
650 -begin  
651 - for I := 0 to Length(Fhistory)-1 do  
652 - if Assigned(Fhistory[I]) then  
653 - Fhistory[I].Free;  
654 - SetLength(Fhistory, 0);  
655 - inherited Destroy;  
656 -end;  
657 -  
658 -initialization  
659 - InvRegistry.RegisterInterface(TypeInfo(KnowledgeTreePort), 'http://schemas.xmlsoap.org/soap/envelope/', '');  
660 - InvRegistry.RegisterDefaultSOAPAction(TypeInfo(KnowledgeTreePort), 'http://schemas.xmlsoap.org/soap/envelope/#KTWebService#%operationName%');  
661 - InvRegistry.RegisterExternalParamName(TypeInfo(KnowledgeTreePort), 'link_documents', 'type_', 'type');  
662 - RemClassRegistry.RegisterXSClass(kt_response, 'urn:KnowledgeTree', 'kt_response');  
663 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_response), 'message_', 'message');  
664 - RemClassRegistry.RegisterXSClass(kt_folder_detail, 'urn:KnowledgeTree', 'kt_folder_detail');  
665 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_folder_detail), 'message_', 'message');  
666 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_folder_items), 'urn:KnowledgeTree', 'kt_folder_items');  
667 - RemClassRegistry.RegisterXSClass(kt_folder_item, 'urn:KnowledgeTree', 'kt_folder_item');  
668 - RemClassRegistry.RegisterXSClass(kt_folder_contents, 'urn:KnowledgeTree', 'kt_folder_contents');  
669 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_folder_contents), 'message_', 'message');  
670 - RemClassRegistry.RegisterXSClass(kt_document_detail, 'urn:KnowledgeTree', 'kt_document_detail');  
671 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_detail), 'message_', 'message');  
672 - RemClassRegistry.RegisterXSClass(kt_metadata_selection_item, 'urn:KnowledgeTree', 'kt_metadata_selection_item');  
673 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_metadata_selection_item), 'name_', 'name');  
674 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_metadata_selection), 'urn:KnowledgeTree', 'kt_metadata_selection');  
675 - RemClassRegistry.RegisterXSClass(kt_metadata_field, 'urn:KnowledgeTree', 'kt_metadata_field');  
676 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_metadata_field), 'name_', 'name');  
677 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_metadata_fields), 'urn:KnowledgeTree', 'kt_metadata_fields');  
678 - RemClassRegistry.RegisterXSClass(kt_metadata_fieldset, 'urn:KnowledgeTree', 'kt_metadata_fieldset');  
679 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_metadata_fieldsets), 'urn:KnowledgeTree', 'kt_metadata_fieldsets');  
680 - RemClassRegistry.RegisterXSClass(kt_metadata_response, 'urn:KnowledgeTree', 'kt_metadata_response');  
681 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_metadata_response), 'message_', 'message');  
682 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_transitions), 'urn:KnowledgeTree', 'kt_document_transitions');  
683 - RemClassRegistry.RegisterXSClass(kt_document_transitions_response, 'urn:KnowledgeTree', 'kt_document_transitions_response');  
684 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_transitions_response), 'message_', 'message');  
685 - RemClassRegistry.RegisterXSClass(kt_document_transaction_history_item, 'urn:KnowledgeTree', 'kt_document_transaction_history_item');  
686 - RemClassRegistry.RegisterXSClass(kt_linked_document, 'urn:KnowledgeTree', 'kt_linked_document');  
687 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_linked_documents), 'urn:KnowledgeTree', 'kt_linked_documents');  
688 - RemClassRegistry.RegisterXSClass(kt_linked_document_response, 'urn:KnowledgeTree', 'kt_linked_document_response');  
689 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_linked_document_response), 'message_', 'message');  
690 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_transaction_history), 'urn:KnowledgeTree', 'kt_document_transaction_history');  
691 - RemClassRegistry.RegisterXSClass(kt_document_transaction_history_response, 'urn:KnowledgeTree', 'kt_document_transaction_history_response');  
692 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_transaction_history_response), 'message_', 'message');  
693 - RemClassRegistry.RegisterXSClass(kt_document_version_history_item, 'urn:KnowledgeTree', 'kt_document_version_history_item');  
694 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_version_history), 'urn:KnowledgeTree', 'kt_document_version_history');  
695 - RemClassRegistry.RegisterXSClass(kt_document_version_history_response, 'urn:KnowledgeTree', 'kt_document_version_history_response');  
696 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_version_history_response), 'message_', 'message');  
697 - RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_types_array), 'urn:KnowledgeTree', 'kt_document_types_array');  
698 - RemClassRegistry.RegisterXSClass(kt_document_types_response, 'urn:KnowledgeTree', 'kt_document_types_response');  
699 - RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_types_response), 'message_', 'message');  
700 -  
701 -end.  
ktwsapi/dotnet/TODO.txt deleted
ktwsapi/java/TODO.txt deleted
ktwsapi/php/docs/INSTALL.txt deleted
1 -KnowledgeTree Web Server Object Model - PHP Edition  
2 -===================================================  
3 -  
4 -The KTWSAPI PHP edition implements the object model wrapping the web services. It can thus be deployed on  
5 -a remote machine independant of the actual KnowledgeTree installation.  
6 -  
7 -Dependencies  
8 -============  
9 -1) libcurl  
10 -2) PEAR::SOAP  
11 -  
12 -Installation  
13 -============  
14 -  
15 -Copy the ktwsapi/php folder to some location in your project.  
16 -  
17 -Update ktwsapi_cfg.inc.php with the appropriate settings for your system.  
18 -  
19 -Examples  
20 -========  
21 -  
22 -There are some examples in the ktwsapi/php/examples folder.  
23 -  
ktwsapi/php/examples/ktws_eg_add_document.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * This is a sample of how to add a document to the repository.  
34 - */  
35 -  
36 -require_once('../ktwsapi.inc.php');  
37 -  
38 -$ktapi = new KTWSAPI(KTWebService_WSDL);  
39 -  
40 -$response = $ktapi->start_session('admin','admin');  
41 -if (PEAR::isError($response))  
42 -{  
43 - print $response->getMessage();  
44 - exit;  
45 -}  
46 -  
47 -$root = $ktapi->get_root_folder();  
48 -  
49 -$root->add_document('c:/temp/test.doc');  
50 -  
51 -$ktapi->logout();  
52 -  
53 -?>  
ktwsapi/php/examples/ktws_eg_anonymous.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * Demonstrates how to create an anonymous session.  
34 - */  
35 -  
36 -require_once('../ktwsapi.inc.php');  
37 -  
38 -$ktapi = new KTWSAPI(KTWebService_WSDL);  
39 -  
40 -$response = $ktapi->start_anonymous_session();  
41 -if (PEAR::isError($response))  
42 -{  
43 - print $response->getMessage();  
44 - exit;  
45 -}  
46 -  
47 -// do something  
48 -  
49 -$root=$ktapi->get_root_folder();  
50 -  
51 -// when done, logout  
52 -  
53 -  
54 -$ktapi->logout();  
55 -  
56 -?>  
ktwsapi/php/examples/ktws_eg_checkin.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * Demonstrates document checkout and checkin  
34 - */  
35 -  
36 -require_once('../ktwsapi.inc.php');  
37 -  
38 -$ktapi = new KTWSAPI(KTWebService_WSDL);  
39 -  
40 -// change session to something that is in table 'active_sessions'  
41 -  
42 -$response = $ktapi->active_session('sj5827sohdoj6h3nvifrcsa1f2');  
43 -if (PEAR::isError($response))  
44 -{  
45 - print $response->getMessage();  
46 - exit;  
47 -}  
48 -  
49 -$root = $ktapi->get_root_folder();  
50 -if (PEAR::isError($root))  
51 -{  
52 - print $root->getMessage();  
53 - exit;  
54 -}  
55 -  
56 -$document = $root->add_document('c:/temp/test.doc');  
57 -if (PEAR::isError($document))  
58 -{  
59 - print $document->getMessage();  
60 - exit;  
61 -}  
62 -  
63 -$result = $document->checkout('going to update','c:/');  
64 -if (PEAR::isError($result))  
65 -{  
66 - print $result->getMessage();  
67 - exit;  
68 -}  
69 -  
70 -$result = $document->checkin('c:/test.doc','have updated',false);  
71 -if (PEAR::isError($result))  
72 -{  
73 - print $result->getMessage();  
74 - exit;  
75 -}  
76 -  
77 -$ktapi->logout();  
78 -  
79 -?>  
ktwsapi/php/examples/ktws_eg_create_folder.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * Demonstrates creating a folder in an active session.  
34 - */  
35 -  
36 -require_once('../ktwsapi.inc.php');  
37 -  
38 -$ktapi = new KTWSAPI(KTWebService_WSDL);  
39 -  
40 -// change session to something that is in table 'active_sessions'  
41 -  
42 -$response = $ktapi->active_session('qekolkpkk9mq2nlc31ghndi1l2');  
43 -if (PEAR::isError($response))  
44 -{  
45 - print $response->getMessage();  
46 - exit;  
47 -}  
48 -  
49 -$root = $ktapi->get_root_folder();  
50 -if (PEAR::isError($root))  
51 -{  
52 - print $root->getMessage();  
53 - exit;  
54 -}  
55 -  
56 -$folder = $root->add_folder('test folder');  
57 -if (PEAR::isError($folder))  
58 -{  
59 - print $folder->getMessage();  
60 - exit;  
61 -}  
62 -  
63 -$subfolder = $folder->add_folder('test sub folder');  
64 -if (PEAR::isError($subfolder))  
65 -{  
66 - print $subfolder->getMessage();  
67 - exit;  
68 -}  
69 -  
70 -?>  
ktwsapi/php/examples/ktws_eg_doc_info.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * Demonstrates using an active session and getting document info and metadata.  
34 - */  
35 -  
36 -require_once('../ktwsapi.inc.php');  
37 -  
38 -$ktapi = new KTWSAPI(KTWebService_WSDL);  
39 -  
40 -// change session to something that is in table 'active_sessions'  
41 -  
42 -$response = $ktapi->active_session('sj5827sohdoj6h3nvifrcsa1f2');  
43 -if (PEAR::isError($response))  
44 -{  
45 - print $response->getMessage();  
46 - exit;  
47 -}  
48 -  
49 -// lets ge the document based on id.  
50 -  
51 -$document = $ktapi->get_document_by_id(50);  
52 -if (PEAR::isError($document))  
53 -{  
54 - print $document->getMessage();  
55 - exit;  
56 -}  
57 -  
58 -// lets get the document metadata  
59 -  
60 -$metadata = $document->get_metadata();  
61 -if (PEAR::isError($metadata))  
62 -{  
63 - print $metadata->getMessage();  
64 - exit;  
65 -}  
66 -var_dump($metadata);  
67 -  
68 -?>  
ktwsapi/php/examples/ktws_eg_folder_listing.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * Demonstrates document checkout and checkin  
34 - */  
35 -  
36 -require_once('../ktwsapi.inc.php');  
37 -  
38 -$ktapi = new KTWSAPI(KTWebService_WSDL);  
39 -  
40 -// change session to something that is in table 'active_sessions'  
41 -  
42 -$response = $ktapi->active_session('sj5827sohdoj6h3nvifrcsa1f2');  
43 -if (PEAR::isError($response))  
44 -{  
45 - print $response->getMessage();  
46 - exit;  
47 -}  
48 -  
49 -$root = $ktapi->get_root_folder();  
50 -if (PEAR::isError($root))  
51 -{  
52 - print $root->getMessage();  
53 - exit;  
54 -}  
55 -  
56 -$listing = $root->get_listing();  
57 -if (PEAR::isError($listing))  
58 -{  
59 - print $listing->getMessage();  
60 - exit;  
61 -}  
62 -  
63 -// lets display the items  
64 -  
65 -foreach($listing as $folderitem)  
66 -{  
67 - $title = $folderitem->title;  
68 - $item_type = $folderitem->item_type;  
69 - $mime_display = $folderitem->mime_display;  
70 -  
71 - print "$title $item_type $mime_display\n";  
72 -}  
73 -  
74 -?>  
ktwsapi/php/ktwsapi.inc.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * This is the object model for the KnowledgeTree WebService.  
34 - */  
35 -  
36 -// TODO: add more validation based on information already returned. this can prevent all validation being done server side and minimise a little traffic possibly...  
37 -// TODO: caching so that requests don't have to be returned.  
38 -// TODO: possibly add a subscriber model, where updates can be propogated through to a cache/model on the client side.  
39 -  
40 -require_once('ktwsapi_cfg.inc.php');  
41 -  
42 -ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . KT_PEAR_DIR);  
43 -  
44 -require_once('SOAP/Client.php');  
45 -  
46 -define('KTWSAPI_ERR_SESSION_IN_USE','There is a session already active.');  
47 -define('KTWSAPI_ERR_SESSION_NOT_STARTED','An active session has not been started.');  
48 -  
49 -class KTWSAPI_FolderItem  
50 -{  
51 - var $ktapi;  
52 -  
53 - var $parent_id;  
54 -  
55 - /**  
56 - * Upload a file to KT. Returns a temp filename on the server.  
57 - *  
58 - * @param string $filename  
59 - * @param string $action  
60 - * @param int $document_id  
61 - * @return string  
62 - */  
63 - function _upload_file($filename, $action, $document_id=null)  
64 - {  
65 - if (!extension_loaded('curl'))  
66 - {  
67 - return new PEAR_Error('CURL library not included.');  
68 - }  
69 -  
70 - if (!is_file($filename) || !is_readable($filename))  
71 - {  
72 - return new PEAR_Error('Could not access file to upload.');  
73 - }  
74 -  
75 - if (is_null($document_id))  
76 - {  
77 - $uploadname="upload_document";  
78 - }  
79 - else  
80 - {  
81 - $uploadname="upload_$document_id";  
82 -  
83 - }  
84 -  
85 - $session_id = $this->ktapi->session;  
86 -  
87 - $ch = curl_init();  
88 - $fp = fopen ($filename, 'r');  
89 - curl_setopt($ch, CURLOPT_URL, KTUploadURL);  
90 - curl_setopt($ch, CURLOPT_POST, 1);  
91 -  
92 - $post_fields = array(  
93 - 'session_id'=>$session_id,  
94 - 'action'=>$action,  
95 - 'document_id'=>$document_id,  
96 - $uploadname=>'@' . $filename  
97 -  
98 - );  
99 -  
100 - $str = serialize($post_fields);  
101 -  
102 - curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);  
103 - curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
104 - $response = curl_exec ($ch);  
105 - curl_close ($ch);  
106 -  
107 - if ($response == '')  
108 - {  
109 - return new PEAR_Error('No response from server.');  
110 - }  
111 -  
112 - $fields=explode('&',$response);  
113 - $status_code=-1;  
114 - $msg='*not set*';  
115 - $upload_status='';  
116 -  
117 -  
118 - foreach($fields as $field)  
119 - {  
120 - list($fieldname, $value) = explode('=', $field);  
121 -  
122 - $$fieldname = $value;  
123 - }  
124 -  
125 - if ($status_code == 0)  
126 - {  
127 - $upload_status= unserialize(urldecode($upload_status));  
128 -  
129 - if ($upload_status[$uploadname]['size'] == filesize($filename))  
130 - {  
131 - return $upload_status[$uploadname]['tmp_name'];  
132 - }  
133 - }  
134 - return new PEAR_Error('Could not upload file.');  
135 -  
136 - }  
137 -  
138 - /**  
139 - * Downlaods a file from KT.  
140 - *  
141 - * @param string $url  
142 - * @param string $localpath  
143 - * @param string $filename  
144 - * @return boolean  
145 - */  
146 - function _download_file($url, $localpath, $filename)  
147 - {  
148 - $localfilename = $localpath . '/' . $filename;  
149 -  
150 - $fp = fopen($localfilename,'wb');  
151 - if ($fp == null)  
152 - {  
153 - return new PEAR_Error('Could not create local file');  
154 - }  
155 -  
156 - $ch = curl_init();  
157 -  
158 - curl_setopt($ch, CURLOPT_FILE, $fp);  
159 - curl_setopt($ch, CURLOPT_HEADER, 0);  
160 - curl_setopt($ch, CURLOPT_URL, $url);  
161 -  
162 - $response = curl_exec($ch);  
163 - if ($response == false)  
164 - {  
165 - $response = new PEAR_Error(curl_error($ch));  
166 - }  
167 - else  
168 - {  
169 - $response = true;  
170 - }  
171 - curl_close($ch);  
172 -  
173 - fclose($fp);  
174 -  
175 - return $response;  
176 - }  
177 -  
178 - /**  
179 - * Returns a reference to the parent folder.  
180 - *  
181 - * @return KTWSAPI_Folder  
182 - */  
183 - function &get_parent_folder()  
184 - {  
185 - $parent = &KTAPI::get_folder_by_id($this->parent_id);  
186 - return $parent;  
187 - }  
188 -  
189 -}  
190 -  
191 -class KTWSAPI_Folder extends KTWSAPI_FolderItem  
192 -{  
193 - var $folder_name;  
194 - var $full_path;  
195 - var $folder_id;  
196 -  
197 - /**  
198 - * Constructor  
199 - *  
200 - * @param KTWSAPI $ktapi  
201 - * @param kt_folder_detail $kt_folder_detail  
202 - * @return KTWSAPI_Folder  
203 - */  
204 - function KTWSAPI_Folder(&$ktapi, $kt_folder_detail)  
205 - {  
206 - $this->ktapi = &$ktapi;  
207 - $this->folder_id = $kt_folder_detail->id+0;  
208 - $this->folder_name = $kt_folder_detail->folder_name;  
209 - $this->parent_id = $kt_folder_detail->parent_id+0;  
210 - $this->full_path = $kt_folder_detail->full_path;  
211 - }  
212 -  
213 - /**  
214 - * Returns a reference to a KTWSAPI_Folder  
215 - *  
216 - * @param KTWSAPI $ktapi  
217 - * @param int $folderid  
218 - * @return KTWSAPI_Folder  
219 - */  
220 - function &get(&$ktapi, $folderid)  
221 - {  
222 - assert(!is_null($ktapi));  
223 - assert(is_a($ktapi, 'KTWSAPI'));  
224 - assert(is_numeric($folderid));  
225 -  
226 - $folderid += 0;  
227 -  
228 - $kt_folder_detail = $ktapi->soapclient->get_folder_detail($ktapi->session, $folderid);  
229 - if (SOAP_Client::isError($kt_folder_detail))  
230 - {  
231 - return $kt_folder_detail;  
232 - }  
233 -  
234 - if ($kt_folder_detail->status_code != 0)  
235 - {  
236 - return new PEAR_Error($kt_folder_detail->message);  
237 - }  
238 -  
239 - $folder = & new KTWSAPI_Folder($ktapi, $kt_folder_detail);  
240 -  
241 - return $folder;  
242 - }  
243 -  
244 - /**  
245 - * Returnss the parent folder id.  
246 - *  
247 - * @return int  
248 - */  
249 - function get_parent_folder_id()  
250 - {  
251 - return $this->parent_id;  
252 - }  
253 -  
254 - /**  
255 - * Returns the folder name.  
256 - *  
257 - * @return string  
258 - */  
259 - function get_folder_name()  
260 - {  
261 - return $this->folder_name;  
262 - }  
263 -  
264 - /**  
265 - * Returns the current folder id.  
266 - *  
267 - * @return int  
268 - */  
269 - function get_folderid()  
270 - {  
271 - return $this->folder_id;  
272 - }  
273 -  
274 - /**  
275 - * Returns the foldre based on foldername.  
276 - *  
277 - * @param string $foldername  
278 - * @return KTWSAPI_Folder  
279 - */  
280 - function &get_folder_by_name($foldername)  
281 - {  
282 - $path = $this->full_path . '/' . $foldername;  
283 - if (substr($path,0,13) == '/Root Folder/')  
284 - {  
285 - $path = substr($path,13);  
286 - }  
287 - if (substr($path,0,12) == 'Root Folder/')  
288 - {  
289 - $path = substr($path,12);  
290 - }  
291 -  
292 - $kt_folder_detail = $this->ktapi->soapclient->get_folder_detail_by_name($this->ktapi->session, $path);  
293 -  
294 - if (SOAP_Client::isError($kt_folder_detail))  
295 - {  
296 - return $kt_folder_detail;  
297 - }  
298 -  
299 - if ($kt_folder_detail->status_code != 0)  
300 - {  
301 - return new PEAR_Error($kt_folder_detail->message);  
302 - }  
303 -  
304 - $folder= & new KTWSAPI_Folder($this->ktapi, $kt_folder_detail);  
305 - return $folder;  
306 - }  
307 -  
308 - /**  
309 - * Returns the full folder path.  
310 - *  
311 - * @return string  
312 - */  
313 - function get_full_path()  
314 - {  
315 - return $this->full_path;  
316 - }  
317 -  
318 - /**  
319 - * Returns the contents of a folder.  
320 - *  
321 - * @param int $depth  
322 - * @param string $what  
323 - * @return kt_folder_items  
324 - */  
325 - function get_listing($depth=1, $what='DF')  
326 - {  
327 - $kt_folder_contents = $this->ktapi->soapclient->get_folder_contents($this->ktapi->session, $this->folder_id, $depth+0, $what);  
328 - if (SOAP_Client::isError($kt_folder_contents))  
329 - {  
330 - return $kt_folder_contents;  
331 - }  
332 -  
333 - if ($kt_folder_contents->status_code != 0)  
334 - {  
335 - return new PEAR_Error($kt_folder_contents->message);  
336 - }  
337 -  
338 - return $kt_folder_contents->items;  
339 - }  
340 -  
341 - /**  
342 - * Returns a document based on title.  
343 - *  
344 - * @param string $title  
345 - * @return KTWSAPI_Document  
346 - */  
347 - function &get_document_by_name($title)  
348 - {  
349 - $path = $this->full_path . '/' . $title;  
350 - if (substr($path,0,13) == '/Root Folder/')  
351 - {  
352 - $path = substr($path,13);  
353 - }  
354 - if (substr($path,0,12) == 'Root Folder/')  
355 - {  
356 - $path = substr($path,12);  
357 - }  
358 -  
359 - $kt_document_detail = $this->ktapi->soapclient->get_document_detail_by_name($this->ktapi->session, $path, 'T');  
360 -  
361 - if (SOAP_Client::isError($kt_document_detail))  
362 - {  
363 - return $kt_document_detail;  
364 - }  
365 -  
366 - if ($kt_document_detail->status_code != 0)  
367 - {  
368 - return new PEAR_Error($kt_document_detail->message);  
369 - }  
370 -  
371 - $document = & new KTWSAPI_Document($this->ktapi, $kt_document_detail);  
372 -  
373 - return $document;  
374 - }  
375 -  
376 - /**  
377 - * Returns a document based on filename.  
378 - *  
379 - * @param string $filename  
380 - * @return KTWSAPI_Document  
381 - */  
382 - function &get_document_by_filename($filename)  
383 - {  
384 - $path = $this->full_path . '/' . $filename;  
385 - if (substr($path,0,13) == '/Root Folder/')  
386 - {  
387 - $path = substr($path,13);  
388 - }  
389 - if (substr($path,0,12) == 'Root Folder/')  
390 - {  
391 - $path = substr($path,12);  
392 - }  
393 -  
394 - $kt_document_detail = $this->ktapi->soapclient->get_document_detail_by_name($this->ktapi->session, $path, 'F');  
395 -  
396 - if (SOAP_Client::isError($kt_document_detail))  
397 - {  
398 - return $kt_document_detail;  
399 - }  
400 -  
401 - if ($kt_document_detail->status_code != 0)  
402 - {  
403 - return new PEAR_Error($kt_document_detail->message);  
404 - }  
405 -  
406 - $document = & new KTWSAPI_Document($this->ktapi, $kt_document_detail);  
407 - return $document;  
408 - }  
409 -  
410 -  
411 - /**  
412 - * Adds a sub folder.  
413 - *  
414 - * @param string $foldername  
415 - * @return KTWSAPI_Folder  
416 - */  
417 - function &add_folder($foldername)  
418 - {  
419 - $kt_folder_detail = $this->ktapi->soapclient->create_folder($this->ktapi->session, $this->folder_id, $foldername);  
420 - if (SOAP_Client::isError($kt_folder_detail))  
421 - {  
422 - return $kt_folder_detail;  
423 - }  
424 -  
425 - if ($kt_folder_detail->status_code != 0)  
426 - {  
427 - return new PEAR_Error($kt_folder_detail->message);  
428 - }  
429 -  
430 - $folder = &new KTWSAPI_Folder($this->ktapi, $kt_folder_detail);  
431 -  
432 - return $folder;  
433 - }  
434 -  
435 - /**  
436 - * Deletes the current folder.  
437 - *  
438 - * @param string $reason  
439 - * @return true  
440 - */  
441 - function delete($reason)  
442 - {  
443 - // TODO: check why no transaction in folder_transactions  
444 - $kt_response = $this->ktapi->soapclient->delete_folder($this->ktapi->session, $this->folder_id, $reason);  
445 - if (SOAP_Client::isError($kt_response))  
446 - {  
447 - return $kt_response;  
448 - }  
449 -  
450 - if ($kt_response->status_code != 0)  
451 - {  
452 - return new PEAR_Error($kt_response->message);  
453 - }  
454 -  
455 - return true;  
456 - }  
457 -  
458 - /**  
459 - * Renames the current folder.  
460 - *  
461 - * @param string $newname  
462 - * @return true  
463 - */  
464 - function rename($newname)  
465 - {  
466 - $kt_response = $this->ktapi->soapclient->rename_folder($this->ktapi->session, $this->folder_id, $newname);  
467 - if (SOAP_Client::isError($kt_response))  
468 - {  
469 - return $kt_response;  
470 - }  
471 -  
472 - if ($kt_response->status_code != 0)  
473 - {  
474 - return new PEAR_Error($kt_response->message);  
475 - }  
476 -  
477 - return true;  
478 - }  
479 -  
480 - /**  
481 - * Moves a folder to another location.  
482 - *  
483 - * @param KTWSAPI_Folder $ktwsapi_target_folder  
484 - * @param string $reason  
485 - * @return true  
486 - */  
487 - function move(&$ktwsapi_target_folder, $reason='')  
488 - {  
489 - assert(!is_null($ktwsapi_target_folder));  
490 - assert(is_a($ktwsapi_target_folder,'KTWSAPI_Folder'));  
491 -  
492 - $kt_response = $this->ktapi->soapclient->move_folder($this->ktapi->session, $this->folder_id,$ktwsapi_target_folder->get_folderid());  
493 - if (SOAP_Client::isError($kt_response))  
494 - {  
495 - return $kt_response;  
496 - }  
497 -  
498 - if ($kt_response->status_code != 0)  
499 - {  
500 - return new PEAR_Error($kt_response->message);  
501 - }  
502 -  
503 - return true;  
504 - }  
505 -  
506 - /**  
507 - * Copies a folder to another location  
508 - *  
509 - * @param KTWSAPI_Folder $ktwsapi_target_folder  
510 - * @param string $reason  
511 - * @return true  
512 - */  
513 - function copy(&$ktwsapi_target_folder, $reason='')  
514 - {  
515 - assert(!is_null($ktwsapi_target_folder));  
516 - assert(is_a($ktwsapi_target_folder,'KTWSAPI_Folder'));  
517 -  
518 - $targetid=$ktwsapi_target_folder->get_folderid();  
519 -  
520 - $kt_response = $this->ktapi->soapclient->copy_folder($this->ktapi->session, $this->folder_id,$targetid, $reason);  
521 - if (SOAP_Client::isError($kt_response))  
522 - {  
523 - return $kt_response;  
524 - }  
525 -  
526 - if ($kt_response->status_code != 0)  
527 - {  
528 - return new PEAR_Error($kt_response->message);  
529 - }  
530 -  
531 - return true;  
532 - }  
533 -  
534 - /**  
535 - * Adds a document to the current folder.  
536 - *  
537 - * @param string $filename  
538 - * @param string $title  
539 - * @param string $documenttype  
540 - * @return KTWSAPI_Document  
541 - */  
542 - function &add_document($filename, $title=null, $documenttype=null)  
543 - {  
544 - if (empty($title))  
545 - {  
546 - $title=basename($filename);  
547 - }  
548 - $basename=basename($filename);  
549 -  
550 - if (empty($documenttype))  
551 - {  
552 - $documenttype='Default';  
553 - }  
554 -  
555 - // First step - upload file  
556 - $tempfilename = $this->_upload_file($filename,'A');  
557 - if (PEAR::isError($tempfilename))  
558 - {  
559 - return new PEAR_Error($tempfilename->message);  
560 - }  
561 -  
562 - // Second step - move file into KT  
563 - $kt_document_detail = $this->ktapi->soapclient->add_document($this->ktapi->session, $this->folder_id, $title, $basename, $documenttype, $tempfilename );  
564 - if (SOAP_Client::isError($kt_document_detail))  
565 - {  
566 - return $kt_document_detail;  
567 - }  
568 -  
569 - if ($kt_document_detail->status_code != 0)  
570 - {  
571 - return new PEAR_Error($kt_document_detail->message);  
572 - }  
573 -  
574 - $document = & new KTWSAPI_Document($this->ktapi, $kt_document_detail);  
575 - return $document;  
576 - }  
577 -}  
578 -  
579 -class KTWSAPI_Document extends KTWSAPI_FolderItem  
580 -{  
581 - var $document_id;  
582 - var $title;  
583 - var $document_type;  
584 - var $version;  
585 - var $filename;  
586 - var $created_date;  
587 - var $created_by;  
588 - var $updated_date;  
589 - var $updated_by;  
590 - var $workflow;  
591 - var $workflow_state;  
592 - var $checkout_by;  
593 - var $full_path;  
594 -  
595 - /**  
596 - * Constructor  
597 - *  
598 - * @param KTWSAPI $ktapi  
599 - * @param kt_document_detail $kt_document_detail  
600 - * @return KTWSAPI_Document  
601 - */  
602 - function KTWSAPI_Document(&$ktapi, $kt_document_detail)  
603 - {  
604 - $this->ktapi=&$ktapi;  
605 - $this->document_id = $kt_document_detail->document_id;  
606 - $this->title = $kt_document_detail->title;  
607 - $this->document_type = $kt_document_detail->document_type;  
608 - $this->version = $kt_document_detail->version;  
609 - $this->filename = $kt_document_detail->filename;  
610 - $this->created_date = $kt_document_detail->created_date;  
611 - $this->created_by = $kt_document_detail->created_by;  
612 - $this->updated_date = $kt_document_detail->updated_date;  
613 - $this->updated_by = $kt_document_detail->updated_by;  
614 - $this->parent_id = $kt_document_detail->folder_id;  
615 - $this->workflow = $kt_document_detail->workflow;  
616 - $this->workflow_state = $kt_document_detail->workflow_state;  
617 - $this->checkout_by = $kt_document_detail->checkout_by;  
618 - $this->full_path = $kt_document_detail->full_path;  
619 - }  
620 -  
621 - /**  
622 - * Returns a reference to a document.  
623 - *  
624 - * @param KTWSAPI $ktapi  
625 - * @param int $documentid  
626 - * @param boolean $loadinfo  
627 - * @return KTWSAPI_Document  
628 - */  
629 - function &get(&$ktapi, $documentid, $loadinfo=true)  
630 - {  
631 - assert(!is_null($ktapi));  
632 - assert(is_a($ktapi, 'KTWSAPI'));  
633 - assert(is_numeric($documentid));  
634 -  
635 - if ($loadinfo)  
636 - {  
637 - $kt_document_detail = $ktapi->soapclient->get_document_detail($ktapi->session, $documentid);  
638 - if (SOAP_Client::isError($kt_document_detail))  
639 - {  
640 - return $kt_document_detail;  
641 - }  
642 -  
643 - if ($kt_document_detail->status_code != 0)  
644 - {  
645 - return new PEAR_Error($kt_document_detail->message);  
646 - }  
647 - }  
648 - else  
649 - {  
650 - $kt_document_detail = array(  
651 - 'document_id'=>$documentid,  
652 - );  
653 - }  
654 -  
655 - $document=& new KTWSAPI_Document($ktapi, $kt_document_detail);  
656 - return $document;  
657 - }  
658 -  
659 - /**  
660 - * Checks in a document.  
661 - *  
662 - * @param string $filename  
663 - * @param string $reason  
664 - * @param boolean $major_update  
665 - * @return true  
666 - */  
667 - function checkin($filename, $reason, $major_update )  
668 - {  
669 - $basename=basename($filename);  
670 -  
671 - $tempfilename = $this->_upload_file($filename,'C', $this->document_id);  
672 - if (PEAR::isError($tempfilename))  
673 - {  
674 - return new PEAR_Error($tempfilename->message);  
675 - }  
676 -  
677 - $kt_response = $this->ktapi->soapclient->checkin_document($this->ktapi->session, $this->document_id, $basename, $reason, $tempfilename, $major_update );  
678 - if (SOAP_Client::isError($kt_response))  
679 - {  
680 - return $kt_response;  
681 - }  
682 -  
683 - if ($kt_response->status_code != 0)  
684 - {  
685 - return new PEAR_Error($kt_response->message);  
686 - }  
687 -  
688 - return true;  
689 - }  
690 -  
691 - /**  
692 - * Checks out a document.  
693 - *  
694 - * @param string $reason  
695 - * @param string $localpath  
696 - * @return true  
697 - */  
698 - function checkout($reason, $localpath=null)  
699 - {  
700 - if (is_null($localpath))  
701 - {  
702 - $localpath = $this->ktapi->get_download_path();  
703 - }  
704 -  
705 - if (!is_dir($localpath))  
706 - {  
707 - return new PEAR_Error('local path does not exist');  
708 - }  
709 - if (!is_writable($localpath))  
710 - {  
711 - return new PEAR_Error('local path is not writable');  
712 - }  
713 -  
714 - $kt_response = $this->ktapi->soapclient->checkout_document($this->ktapi->session, $this->document_id, $reason);  
715 - if (SOAP_Client::isError($kt_response))  
716 - {  
717 - return $kt_response;  
718 - }  
719 -  
720 - if ($kt_response->status_code != 0)  
721 - {  
722 - return new PEAR_Error($kt_response->message);  
723 - }  
724 -  
725 - $url = $kt_response->message;  
726 -  
727 - $response = $this->_download_file($url, $localpath, $this->filename);  
728 - if (PEAR::isError($response))  
729 - {  
730 - return new PEAR_Error($kt_response->message);  
731 - }  
732 -  
733 - return true;  
734 - }  
735 -  
736 - /**  
737 - * Undo a document checkout  
738 - *  
739 - * @param string $reason  
740 - * @return true  
741 - */  
742 - function undo_checkout($reason)  
743 - {  
744 - $kt_response = $this->ktapi->soapclient->undo_document_checkout($this->ktapi->session, $this->document_id, $reason);  
745 - if (SOAP_Client::isError($kt_response))  
746 - {  
747 - return $kt_response;  
748 - }  
749 -  
750 - if ($kt_response->status_code != 0)  
751 - {  
752 - return new PEAR_Error($kt_response->message);  
753 - }  
754 -  
755 - return true;  
756 - }  
757 -  
758 - /**  
759 - * Download a version of the document  
760 - *  
761 - * @param string $version  
762 - * @param string $localpath  
763 - * @return true  
764 - */  
765 - function download($version=null, $localpath=null)  
766 - {  
767 - if (is_null($localpath))  
768 - {  
769 - $localpath = $this->ktapi->get_download_path();  
770 - }  
771 -  
772 - if (!is_dir($localpath))  
773 - {  
774 - return new PEAR_Error('local path does not exist');  
775 - }  
776 - if (!is_writable($localpath))  
777 - {  
778 - return new PEAR_Error('local path is not writable');  
779 - }  
780 -  
781 - $kt_response = $this->ktapi->soapclient->download_document($this->ktapi->session, $this->document_id);  
782 - if (SOAP_Client::isError($kt_response))  
783 - {  
784 - return $kt_response;  
785 - }  
786 -  
787 - if ($kt_response->status_code != 0)  
788 - {  
789 - return new PEAR_Error($kt_response->message);  
790 - }  
791 -  
792 - $url = $kt_response->message;  
793 -  
794 - $response = $this->_download_file($url, $localpath, $this->filename);  
795 - if (PEAR::isError($response))  
796 - {  
797 - return new PEAR_Error($kt_response->message);  
798 - }  
799 -  
800 - return true;  
801 - }  
802 -  
803 - /**  
804 - * Deletes the current document.  
805 - *  
806 - * @param string $reason  
807 - * @return true  
808 - */  
809 - function delete($reason)  
810 - {  
811 - $kt_response = $this->ktapi->soapclient->delete_document($this->ktapi->session, $this->document_id, $reason);  
812 - if (SOAP_Client::isError($kt_response))  
813 - {  
814 - return $kt_response;  
815 - }  
816 -  
817 - if ($kt_response->status_code != 0)  
818 - {  
819 - return new PEAR_Error($kt_response->message);  
820 - }  
821 -  
822 - return true;  
823 - }  
824 -  
825 - /**  
826 - * Changes the owner of the document.  
827 - *  
828 - * @param string $username  
829 - * @param string $reason  
830 - * @return true  
831 - */  
832 - function change_owner($username, $reason)  
833 - {  
834 - $kt_response = $this->ktapi->soapclient->change_document_owner($this->ktapi->session, $this->document_id, $username, $reason);  
835 - if (SOAP_Client::isError($kt_response))  
836 - {  
837 - return $kt_response;  
838 - }  
839 -  
840 - if ($kt_response->status_code != 0)  
841 - {  
842 - return new PEAR_Error($kt_response->message);  
843 - }  
844 -  
845 - return true;  
846 - }  
847 -  
848 - /**  
849 - * Copies the document to the specified folder.  
850 - *  
851 - * @param KTWSAPI_Folder $folder  
852 - * @param string $reason  
853 - * @param string $newtitle  
854 - * @param string $newfilename  
855 - */  
856 - function copy(&$folder,$reason,$newtitle='',$newfilename='')  
857 - {  
858 - assert(is_a($folder,'KTWSAPI_Folder'));  
859 - assert(!is_null($folder));  
860 -  
861 - $folder_id = $folder->folderid;  
862 - $kt_response = $this->ktapi->soapclient->copy_document($this->ktapi->session, $this->document_id, $folder_id, $reason, $newtitle, $newfilename);  
863 - if (SOAP_Client::isError($kt_response))  
864 - {  
865 - return $kt_response;  
866 - }  
867 -  
868 - if ($kt_response->status_code != 0)  
869 - {  
870 - return new PEAR_Error($kt_response->message);  
871 - }  
872 -  
873 - return true;  
874 - }  
875 -  
876 - /**  
877 - * Moves the current folder to the specified folder.  
878 - *  
879 - * @param KTWSAPI_Folder $folder  
880 - * @param string $reason  
881 - * @param string $newtitle  
882 - * @param string $newfilename  
883 - * @return true  
884 - */  
885 - function move(&$folder,$reason,$newtitle='',$newfilename='')  
886 - {  
887 - assert(is_a($folder,'KTWSAPI_Folder'));  
888 - assert(!is_null($folder));  
889 -  
890 - $folder_id = $folder->folderid;  
891 - $kt_response = $this->ktapi->soapclient->move_document($this->ktapi->session, $this->document_id, $folder_id, $reason, $newtitle, $newfilename);  
892 - if (SOAP_Client::isError($kt_response))  
893 - {  
894 - return $kt_response;  
895 - }  
896 -  
897 - if ($kt_response->status_code != 0)  
898 - {  
899 - return new PEAR_Error($kt_response->message);  
900 - }  
901 -  
902 - return true;  
903 - }  
904 -  
905 - /**  
906 - * Changes the document type.  
907 - *  
908 - * @param string $documenttype  
909 - * @return true  
910 - */  
911 - function change_document_type($documenttype)  
912 - {  
913 - $kt_response = $this->ktapi->soapclient->change_document_type($this->ktapi->session, $this->document_id, $documenttype);  
914 - if (SOAP_Client::isError($kt_response))  
915 - {  
916 - return $kt_response;  
917 - }  
918 -  
919 - if ($kt_response->status_code != 0)  
920 - {  
921 - return new PEAR_Error($kt_response->message);  
922 - }  
923 -  
924 - return true;  
925 - }  
926 -  
927 - /**  
928 - * Renames the title of the current document.  
929 - *  
930 - * @param string $newtitle  
931 - * @return true  
932 - */  
933 - function rename_title( $newtitle)  
934 - {  
935 - $kt_response = $this->ktapi->soapclient->rename_document_title($this->ktapi->session, $this->document_id, $newtitle);  
936 - if (SOAP_Client::isError($kt_response))  
937 - {  
938 - return $kt_response;  
939 - }  
940 -  
941 - if ($kt_response->status_code != 0)  
942 - {  
943 - return new PEAR_Error($kt_response->message);  
944 - }  
945 -  
946 - return true;  
947 - }  
948 -  
949 - /**  
950 - * Renames the filename of the current document.  
951 - *  
952 - * @param string $newfilename  
953 - * @return true  
954 - */  
955 - function rename_filename( $newfilename)  
956 - {  
957 - $kt_response = $this->ktapi->soapclient->rename_document_filename($this->ktapi->session, $this->document_id, $newfilename);  
958 - if (SOAP_Client::isError($kt_response))  
959 - {  
960 - return $kt_response;  
961 - }  
962 -  
963 - if ($kt_response->status_code != 0)  
964 - {  
965 - return new PEAR_Error($kt_response->message);  
966 - }  
967 -  
968 - return true;  
969 - }  
970 -  
971 - /**  
972 - * Starts a workflow on the current document.  
973 - *  
974 - * @param string $workflow  
975 - * @return true  
976 - */  
977 - function start_workflow($workflow)  
978 - {  
979 - $kt_response = $this->ktapi->soapclient->start_document_workflow($this->ktapi->session, $this->document_id, $workflow);  
980 - if (SOAP_Client::isError($kt_response))  
981 - {  
982 - return $kt_response;  
983 - }  
984 -  
985 - if ($kt_response->status_code != 0)  
986 - {  
987 - return new PEAR_Error($kt_response->message);  
988 - }  
989 -  
990 - return true;  
991 - }  
992 -  
993 - /**  
994 - * Removes the workflow process from the current document.  
995 - *  
996 - * @return true  
997 - */  
998 - function delete_workflow()  
999 - {  
1000 - $kt_response = $this->ktapi->soapclient->delete_document_workflow($this->ktapi->session, $this->document_id);  
1001 - if (SOAP_Client::isError($kt_response))  
1002 - {  
1003 - return $kt_response;  
1004 - }  
1005 -  
1006 - if ($kt_response->status_code != 0)  
1007 - {  
1008 - return new PEAR_Error($kt_response->message);  
1009 - }  
1010 -  
1011 - return true;  
1012 - }  
1013 -  
1014 - /**  
1015 - * Performs a transition on the current document.  
1016 - *  
1017 - * @param string $transition  
1018 - * @param string $reason  
1019 - * @return true  
1020 - */  
1021 - function perform_workflow_transition($transition,$reason)  
1022 - {  
1023 - $kt_response = $this->ktapi->soapclient->perform_workflow_transition($this->ktapi->session, $this->document_id, $transition, $reason);  
1024 - if (SOAP_Client::isError($kt_response))  
1025 - {  
1026 - return $kt_response;  
1027 - }  
1028 -  
1029 - if ($kt_response->status_code != 0)  
1030 - {  
1031 - return new PEAR_Error($kt_response->message);  
1032 - }  
1033 -  
1034 - return true;  
1035 - }  
1036 -  
1037 - /**  
1038 - * Returns metadata on the document.  
1039 - *  
1040 - * @return kt_metadata_response  
1041 - */  
1042 - function get_metadata()  
1043 - {  
1044 - $kt_metadata_response = $this->ktapi->soapclient->get_document_metadata($this->ktapi->session, $this->document_id );  
1045 - if (SOAP_Client::isError($kt_metadata_response))  
1046 - {  
1047 - return $kt_metadata_response;  
1048 - }  
1049 -  
1050 - if ($kt_metadata_response->status_code != 0)  
1051 - {  
1052 - return new PEAR_Error($kt_metadata_response->message);  
1053 - }  
1054 -  
1055 - return $kt_metadata_response;  
1056 - }  
1057 -  
1058 - /**  
1059 - * Updates the metadata on the current document.  
1060 - *  
1061 - * @param kt_metadata $metadata  
1062 - * @return true  
1063 - */  
1064 - function update_metadata($metadata)  
1065 - {  
1066 - $kt_response = $this->ktapi->soapclient->update_document_metadata($this->ktapi->session, $this->document_id, $metadata);  
1067 - if (SOAP_Client::isError($kt_response))  
1068 - {  
1069 - return $kt_response;  
1070 - }  
1071 -  
1072 - if ($kt_response->status_code != 0)  
1073 - {  
1074 - return new PEAR_Error($kt_response->message);  
1075 - }  
1076 -  
1077 - return true;  
1078 - }  
1079 -  
1080 - /**  
1081 - * Returns the transaction history on the current document.  
1082 - *  
1083 - * @return kt_document_transaction_history  
1084 - */  
1085 - function get_transaction_history()  
1086 - {  
1087 - $kt_document_transaction_history_response = $this->ktapi->soapclient->get_document_transaction_history($this->ktapi->session, $this->document_id);  
1088 - if (SOAP_Client::isError($kt_document_transaction_history_response))  
1089 - {  
1090 - return $kt_document_transaction_history_response;  
1091 - }  
1092 -  
1093 - if ($kt_document_transaction_history_response->status_code != 0)  
1094 - {  
1095 - return new PEAR_Error($kt_document_transaction_history_response->message);  
1096 - }  
1097 -  
1098 - return $kt_document_transaction_history_response->history;  
1099 - }  
1100 -  
1101 - /**  
1102 - * Returns the version history on the current document.  
1103 - *  
1104 - * @return $kt_document_version_history  
1105 - */  
1106 - function get_version_history()  
1107 - {  
1108 - $kt_document_version_history_response = $this->ktapi->soapclient->get_document_version_history($this->ktapi->session, $this->document_id);  
1109 - if (SOAP_Client::isError($kt_document_version_history_response))  
1110 - {  
1111 - return $kt_document_version_history_response;  
1112 - }  
1113 -  
1114 - if ($kt_document_version_history_response->status_code != 0)  
1115 - {  
1116 - return new PEAR_Error($kt_document_version_history_response->message);  
1117 - }  
1118 -  
1119 - return $kt_document_version_history_response->history;  
1120 - }  
1121 -}  
1122 -  
1123 -class KTWSAPI  
1124 -{  
1125 - var $wsdl;  
1126 - /**  
1127 - * Enter description here...  
1128 - *  
1129 - * @var SOAP_Client  
1130 - */  
1131 - var $soapclient;  
1132 - var $timeout;  
1133 - var $session;  
1134 - var $download_path;  
1135 -  
1136 - /**  
1137 - * Constructor  
1138 - *  
1139 - * @param string $wsdl  
1140 - * @param int $timeout  
1141 - * @return KTWSAPI  
1142 - */  
1143 - function KTWSAPI($wsdl = KTWebService_WSDL, $timeout=30)  
1144 - {  
1145 - $this->wsdl = new SOAP_WSDL($wsdl);  
1146 - $this->timeout = $timeout;  
1147 - $this->soapclient = $this->wsdl->getProxy();  
1148 - $this->soapclient->setOpt('timeout', $this->timeout);  
1149 - $this->download_path = 'c:/temp';  
1150 - }  
1151 -  
1152 - /**  
1153 - * This returns the default location where documents are downloaded in download() and checkout().  
1154 - *  
1155 - * @return string  
1156 - */  
1157 - function get_download_path()  
1158 - {  
1159 - return $this->download_path;  
1160 - }  
1161 -  
1162 - /**  
1163 - * Allows the default location for downloaded documents to be changed.  
1164 - *  
1165 - * @param string $download_path  
1166 - * @return true  
1167 - */  
1168 - function set_download_path($download_path)  
1169 - {  
1170 - if (!is_dir($download_path))  
1171 - {  
1172 - return new PEAR_Error('local path is not writable');  
1173 - }  
1174 -  
1175 - if (!is_writable($download_path))  
1176 - {  
1177 - return new PEAR_Error('local path is not writable');  
1178 - }  
1179 - $this->download_path = $download_path;  
1180 - return true;  
1181 - }  
1182 -  
1183 - /**  
1184 - * Starts an anonymous session.  
1185 - *  
1186 - * @param string $ip  
1187 - * @return string  
1188 - */  
1189 - function start_anonymous_session($ip=null)  
1190 - {  
1191 - return $this->start_session('anonymous','',$ip);  
1192 - }  
1193 -  
1194 - /**  
1195 - * Starts a user session.  
1196 - *  
1197 - * @param string $username  
1198 - * @param string $password  
1199 - * @param string $ip  
1200 - * @return string  
1201 - */  
1202 - function start_session($username, $password, $ip=null)  
1203 - {  
1204 - if (!is_null($this->session))  
1205 - {  
1206 - return new PEAR_Error(KTWSAPI_ERR_SESSION_IN_USE);  
1207 - }  
1208 - $kt_response = $this->soapclient->login($username, $password, $ip);  
1209 - if (SOAP_Client::isError($kt_response))  
1210 - {  
1211 - return $kt_response;  
1212 - }  
1213 -  
1214 - if ($kt_response->status_code == 0)  
1215 - {  
1216 - $this->session = $kt_response->message;  
1217 - }  
1218 - else  
1219 - {  
1220 - return new PEAR_Error($kt_response->message);  
1221 - }  
1222 -  
1223 - return $this->session;  
1224 - }  
1225 -  
1226 - /**  
1227 - * Sets an active session.  
1228 - *  
1229 - * @param string $session  
1230 - * @param string $ip  
1231 - * @return string  
1232 - */  
1233 - function active_session($session, $ip=null)  
1234 - {  
1235 - if (!is_null($this->session))  
1236 - {  
1237 - return new PEAR_Error(KTWSAPI_ERR_SESSION_IN_USE);  
1238 - }  
1239 - $this->session = $session;  
1240 -  
1241 - return $session;  
1242 - }  
1243 -  
1244 - /**  
1245 - * Closes an active session.  
1246 - *  
1247 - * @return true  
1248 - */  
1249 - function logout()  
1250 - {  
1251 - if (is_null($this->session))  
1252 - {  
1253 - return new PEAR_Error(KTWSAPI_ERR_SESSION_NOT_STARTED);  
1254 - }  
1255 -  
1256 - $kt_response = $this->soapclient->logout($this->session);  
1257 -  
1258 - if ($kt_response->status_code != 0)  
1259 - {  
1260 - return new PEAR_Error($kt_response->message);  
1261 - }  
1262 - $this->session = null;  
1263 -  
1264 - return true;  
1265 - }  
1266 -  
1267 - /**  
1268 - * Returns a reference to the root folder.  
1269 - *  
1270 - * @return KTWSAPI_Folder  
1271 - */  
1272 - function &get_root_folder()  
1273 - {  
1274 - return $this->get_folder_by_id(1);  
1275 - }  
1276 -  
1277 - /**  
1278 - * Returns a reference to a folder based on id.  
1279 - *  
1280 - * @return KTWSAPI_Folder  
1281 - */  
1282 - function &get_folder_by_id($folderid)  
1283 - {  
1284 - if (is_null($this->session))  
1285 - {  
1286 - return new PEAR_Error('A session is not active');  
1287 - }  
1288 -  
1289 - return KTWSAPI_Folder::get($this, $folderid);  
1290 - }  
1291 -  
1292 - /**  
1293 - * Returns a reference to a document based on id.  
1294 - *  
1295 - * @param int $documentid  
1296 - * @return KTWSAPI_Document  
1297 - */  
1298 - function &get_document_by_id($documentid)  
1299 - {  
1300 - if (is_null($this->session))  
1301 - {  
1302 - return new PEAR_Error('A session is not active');  
1303 - }  
1304 -  
1305 - return KTWSAPI_Document::get($this, $documentid);  
1306 - }  
1307 -}  
1308 -  
1309 -?>  
ktwsapi/php/ktwsapi_cfg.inc.php deleted
1 -<?php  
2 -/**  
3 - * Copyright (c) 2008, The Jam Warehouse Software (Pty) Ltd.  
4 - *  
5 - * All rights reserved.  
6 - *  
7 - * Redistribution and use in source and binary forms, with or without  
8 - * modification, are permitted provided that the following conditions are met:  
9 - *  
10 - * i) Redistributions of source code must retain the above copyright notice,  
11 - * this list of conditions and the following disclaimer.  
12 - * ii) Redistributions in binary form must reproduce the above copyright  
13 - * notice, this list of conditions and the following disclaimer in the  
14 - * documentation and/or other materials provided with the distribution.  
15 - * iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the  
16 - * names of its contributors may be used to endorse or promote products  
17 - * derived from this software without specific prior written permission.  
18 - *  
19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  
20 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
21 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  
22 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
23 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
24 - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO,  
25 - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  
26 - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
27 - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING  
28 - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
29 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
30 - */  
31 -  
32 -/*  
33 - * This is the basic configuration for the KnowledgeTree WebService object model  
34 - */  
35 -  
36 -// Path to PEAR libraries  
37 -  
38 -define('KT_PEAR_DIR', '/knowledgetree/ktdms.trunk/thirdparty/pear');  
39 -  
40 -// URL to KnowledgeTree installation  
41 -// This must be configured by the administrator installing this component.  
42 -  
43 -define('KTWebServiceURL', 'http://localhost:80');  
44 -  
45 -define('KTWebService_WSDL', KTWebServiceURL . '/ktwebservice/index.php?wsdl');  
46 -define('KTUploadURL', KTWebServiceURL . '/ktwebservice/upload.php');  
47 -  
48 -?>  
ktwsapi/python/TODO.txt deleted
ktwsapi/ruby/TODO.txt deleted
login.php
@@ -8,32 +8,32 @@ @@ -8,32 +8,32 @@
8 * KnowledgeTree Open Source Edition 8 * KnowledgeTree Open Source Edition
9 * Document Management Made Simple 9 * Document Management Made Simple
10 * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited 10 * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited
11 - * 11 + *
12 * This program is free software; you can redistribute it and/or modify it under 12 * This program is free software; you can redistribute it and/or modify it under
13 * the terms of the GNU General Public License version 3 as published by the 13 * the terms of the GNU General Public License version 3 as published by the
14 * Free Software Foundation. 14 * Free Software Foundation.
15 - * 15 + *
16 * This program is distributed in the hope that it will be useful, but WITHOUT 16 * This program is distributed in the hope that it will be useful, but WITHOUT
17 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 17 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 18 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
19 * details. 19 * details.
20 - * 20 + *
21 * You should have received a copy of the GNU General Public License 21 * You should have received a copy of the GNU General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>. 22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 - * 23 + *
24 * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, 24 * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place,
25 * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. 25 * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com.
26 - * 26 + *
27 * The interactive user interfaces in modified source and object code versions 27 * The interactive user interfaces in modified source and object code versions
28 * of this program must display Appropriate Legal Notices, as required under 28 * of this program must display Appropriate Legal Notices, as required under
29 * Section 5 of the GNU General Public License version 3. 29 * Section 5 of the GNU General Public License version 3.
30 - * 30 + *
31 * In accordance with Section 7(b) of the GNU General Public License version 3, 31 * In accordance with Section 7(b) of the GNU General Public License version 3,
32 * these Appropriate Legal Notices must retain the display of the "Powered by 32 * these Appropriate Legal Notices must retain the display of the "Powered by
33 - * KnowledgeTree" logo and retain the original copyright notice. If the display of the 33 + * KnowledgeTree" logo and retain the original copyright notice. If the display of the
34 * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices 34 * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
35 - * must display the words "Powered by KnowledgeTree" and retain the original  
36 - * copyright notice. 35 + * must display the words "Powered by KnowledgeTree" and retain the original
  36 + * copyright notice.
37 * Contributor( s): ______________________________________ 37 * Contributor( s): ______________________________________
38 */ 38 */
39 39
@@ -95,24 +95,24 @@ class LoginPageDispatcher extends KTDispatcher { @@ -95,24 +95,24 @@ class LoginPageDispatcher extends KTDispatcher {
95 #var_dump($oUser); 95 #var_dump($oUser);
96 #var_dump(PEAR::raiseError()); 96 #var_dump(PEAR::raiseError());
97 } 97 }
98 - $iOldUserID = checkLastSessionUserID();  
99 -  
100 - //if the current person logging in isn't the same person who logged out or timed out  
101 - //then set the redirect to the dashboard and not the last page that was viewed.  
102 - if ($oUser->getId() != $iOldUserID['user_id']) 98 +
  99 + // If the last user from the same IP address timed out within the last hour then redirect to the dashboard
  100 + // Otherwise allow any other redirect to continue.
  101 + // The user might still be taken to the last page of the previous users session but
  102 + // if we always redirect to dashboard then we break other features such as linking in from emails or documents.
  103 + if (checkLastSessionUserID($oUser->getId()))
103 { 104 {
104 $_REQUEST['redirect'] = generateControllerLink('dashboard'); 105 $_REQUEST['redirect'] = generateControllerLink('dashboard');
105 -  
106 } 106 }
107 - 107 +
108 $session = new Session(); 108 $session = new Session();
109 $sessionID = $session->create($oUser); 109 $sessionID = $session->create($oUser);
110 if (PEAR::isError($sessionID)) { 110 if (PEAR::isError($sessionID)) {
111 return $sessionID; 111 return $sessionID;
112 } 112 }
113 - 113 +
114 $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); 114 $redirect = KTUtil::arrayGet($_REQUEST, 'redirect');
115 - 115 +
116 // DEPRECATED initialise page-level authorisation array 116 // DEPRECATED initialise page-level authorisation array
117 $_SESSION["pageAccess"] = NULL; 117 $_SESSION["pageAccess"] = NULL;
118 118
@@ -156,9 +156,9 @@ class LoginPageDispatcher extends KTDispatcher { @@ -156,9 +156,9 @@ class LoginPageDispatcher extends KTDispatcher {
156 156
157 $errorMessage = KTUtil::arrayGet($_REQUEST, 'errorMessage'); 157 $errorMessage = KTUtil::arrayGet($_REQUEST, 'errorMessage');
158 session_start(); 158 session_start();
159 - 159 +
160 $errorMessageConfirm = $_SESSION['errormessage']['login']; 160 $errorMessageConfirm = $_SESSION['errormessage']['login'];
161 - 161 +
162 $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); 162 $redirect = KTUtil::arrayGet($_REQUEST, 'redirect');
163 163
164 $oReg =& KTi18nregistry::getSingleton(); 164 $oReg =& KTi18nregistry::getSingleton();
@@ -337,16 +337,46 @@ class LoginPageDispatcher extends KTDispatcher { @@ -337,16 +337,46 @@ class LoginPageDispatcher extends KTDispatcher {
337 } 337 }
338 } 338 }
339 339
340 -//FIXME Direct Database Access  
341 -//checkLastSessionUserID finds the last user to logout or timeout  
342 -function checkLastSessionUserID() 340 +/**
  341 + * Check if the last user logging in from the same IP as the current user timed out in the last hour.
  342 + *
  343 + * @param unknown_type $userId
  344 + * @return unknown
  345 + */
  346 +function checkLastSessionUserID($userId)
343 { 347 {
344 - $sQuery = 'SELECT user_id FROM user_history ORDER BY id DESC LIMIT 1';  
345 - $res = DBUtil::getOneResult($sQuery);  
346 - return $res; 348 + // Get the current users IP Address
  349 + $sIp = '%'.$_SERVER['REMOTE_ADDR'];
  350 +
  351 + // Get the time for a day ago and an hour ago
  352 + $dif = time() - (24*60*60);
  353 + $sDayAgo = date('Y-m-d H:i:s', $dif);
  354 + $dif2 = time() - (60*60);
  355 + $sHourAgo = date('Y-m-d H:i:s', $dif2);
  356 +
  357 + // Get the session id for the last user to log in from the current IP address within the last day
  358 + // Use the session id to find if that user logged out or timed out within the last hour.
  359 + $sQuery = 'SELECT user_id, action_namespace FROM user_history
  360 + WHERE datetime > ? AND
  361 + session_id = (SELECT session_id FROM user_history WHERE comments LIKE ? AND datetime > ? ORDER BY id DESC LIMIT 1)
  362 + ORDER BY id DESC LIMIT 1';
  363 +
  364 + $aParams = array($sHourAgo, $sIp, $sDayAgo);
  365 + $res = DBUtil::getOneResult(array($sQuery, $aParams));
  366 +
  367 + if(PEAR::isError($res) || empty($res)){
  368 + return false;
  369 + }
  370 +
  371 + // Check whether the user timed out and whether it was the current user or a different one
  372 + if($res['action_namespace'] == 'ktcore.user_history.timeout' && $res['user_id'] != $userId){
  373 + return true;
  374 + }
  375 +
  376 + return false;
347 } 377 }
348 378
349 $dispatcher =& new LoginPageDispatcher(); 379 $dispatcher =& new LoginPageDispatcher();
350 $dispatcher->dispatch(); 380 $dispatcher->dispatch();
351 381
352 -?> 382 -?>
  383 +?>
353 \ No newline at end of file 384 \ No newline at end of file
plugins/rssplugin/KTrss.inc.php
@@ -336,111 +336,145 @@ class KTrss{ @@ -336,111 +336,145 @@ class KTrss{
336 $sSuffix = ''; 336 $sSuffix = '';
337 } 337 }
338 $hostPath = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$sSuffix; 338 $hostPath = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$sSuffix;
339 - $feed = "<?xml version=\"1.0\"?>\n";  
340 - $feed .= "<rss version=\"2.0\">\n".  
341 - "<channel>\n" .  
342 - "<title>".APP_NAME." RSS</title>\n" .  
343 - "<copyright>(c) 2007 The Jam Warehouse Software (Pty) Ltd. All Rights Reserved</copyright>\n" .  
344 - "<link>".$hostPath."</link>\n" .  
345 - "<description>KT-RSS</description>\n" .  
346 - "<image>\n".  
347 - "<title>".APP_NAME." RSS</title>\n".  
348 - "<width>140</width>\n".  
349 - "<height>28</height>".  
350 - "<link>".$hostPath."knowledgeTree/</link>\n".  
351 - "<url>".$hostPath."resources/graphics/ktlogo_rss.png</url>\n".  
352 - "</image>\n";  
353 - foreach($aItems as $aItems){  
354 - if($aItems[0][itemType] == 'folder'){  
355 - $sTypeSelect = 'folder.transactions&amp;fFolderId';  
356 - }elseif($aItems[0][itemType] == 'document'){  
357 - $sTypeSelect = 'document.transactionhistory&amp;fDocumentId'; 339 +
  340 + $head = "<?xml version=\"1.0\"?>\n
  341 + <rss version=\"2.0\">\n
  342 + <channel>\n
  343 + <title>".APP_NAME." RSS</title>\n
  344 + <copyright>(c) 2007 The Jam Warehouse Software (Pty) Ltd. All Rights Reserved</copyright>\n
  345 + <link>".$hostPath."</link>\n
  346 + <description>KT-RSS</description>\n
  347 + <image>\n
  348 + <title>".APP_NAME." RSS</title>\n
  349 + <width>140</width>\n
  350 + <height>28</height>
  351 + <link>".$hostPath."knowledgeTree/</link>\n
  352 + <url>".$hostPath."resources/graphics/ktlogo_rss.png</url>\n
  353 + </image>\n";
  354 +
  355 +
  356 + $feed = '';
  357 + foreach($aItems as $aItem){
  358 +
  359 + $aItemHead = $aItem[0][0];
  360 + $aItemList = $aItem[1];
  361 +
  362 + if($aItem[0][itemType] == 'folder'){
  363 + $sTypeSelect = 'folder.transactions&fFolderId';
  364 + }elseif($aItem[0][itemType] == 'document'){
  365 + $sTypeSelect = 'document.transactionhistory&fDocumentId';
358 } 366 }
359 - $feed .= "<item>\n" .  
360 - "<title>".htmlentities(KTrss::rss_sanitize($aItems[0][0][name],false), ENT_QUOTES, 'UTF-8')."</title>\n" .  
361 - "<link>".$hostPath."action.php?kt_path_info=ktcore.actions.".$sTypeSelect."=".$aItems[0][0]['id']."</link>\n" .  
362 - "<description>\n" .  
363 - "&lt;table border='0' width='90%'&gt;\n".  
364 - "&lt;tr&gt;\n".  
365 - "&lt;td width='5%' height='16px'&gt;" .  
366 - "&lt;a href='".$hostPath."action.php?kt_path_info=ktcore.actions.".$sTypeSelect."=".$aItems[0][0][id]."' &gt;&lt;img src='".$aItems[0][mimeTypeIcon]."' align='left' height='16px' width='16px' alt='' border='0' /&gt;&lt;/a&gt;" .  
367 - "&lt;/td&gt;\n".  
368 - "&lt;td align='left'&gt; ".$aItems[0][mimeTypeFName]."&lt;/td&gt;\n".  
369 - "&lt;/tr&gt;\n".  
370 - "&lt;tr&gt;\n".  
371 - "&lt;td colspan='2'&gt;\n".  
372 - ucfirst($aItems[0]['itemType'])." Information (ID: ".$aItems[0][0][id].")&lt;/&gt;\n".  
373 - "&lt;hr&gt;\n".  
374 - "&lt;table width='95%'&gt;\n".  
375 - "&lt;tr&gt;\n".  
376 - "&lt;td&gt;Filename: ".KTrss::rss_sanitize($aItems[0][0][filename])."&lt;/td&gt;\n".  
377 - "&lt;td&gt;\n".  
378 - "&lt;/tr&gt;\n".  
379 - "&lt;tr&gt;\n".  
380 - "&lt;td&gt;Author: ".$aItems[0][0][author]."&lt;/td&gt;\n".  
381 - "&lt;td&gt;\n".  
382 - "&lt;/tr&gt;\n".  
383 - "&lt;tr&gt;\n".  
384 - "&lt;td&gt;Owner: ";if($aItems[0][0][owner]){$feed .= $aItems[0][0][owner];}else{$feed .= "None";}  
385 - $feed .= "&lt;/td&gt;\n".  
386 - "&lt;td&gt;&lt;/td&gt;\n".  
387 - "&lt;/tr&gt;\n".  
388 - "&lt;tr&gt;\n";if($aItems[0][0][type]){  
389 - $feed .= "&lt;td&gt;Document type: ".$aItems[0][0][type]."&lt;/td&gt;\n".  
390 - "&lt;td&gt;&lt;/td&gt;\n";}  
391 - $feed .= "&lt;/tr&gt;\n".  
392 - "&lt;tr&gt;\n".  
393 - "&lt;td&gt;Workflow status: ";if($aItems[0][0][workflow_status]){$feed .= $aItems[0][0][workflow_status];}else{$feed .= "No Workflow";}  
394 - $feed .= "&lt;/td&gt;\n".  
395 - "&lt;td&gt;&lt;/td&gt;\n".  
396 - "&lt;/tr&gt;\n".  
397 - "&lt;/table&gt;&lt;br&gt;\n".  
398 - "Transaction Summary (Last 4)\n".  
399 - "&lt;hr&gt;\n".  
400 - "&lt;table width='100%'&gt;\n";  
401 - foreach($aItems[1] as $item){  
402 - $feed .= "&lt;tr&gt;\n".  
403 - "&lt;td&gt;".$item[type]." name:&lt;/td&gt;\n".  
404 - "&lt;td&gt;".KTrss::rss_sanitize($item[name] )."&lt;/td&gt;\n".  
405 - "&lt;/tr&gt;\n".  
406 - "&lt;tr&gt;\n".  
407 - "&lt;td&gt;Path:&lt;/td&gt;\n".  
408 - "&lt;td&gt;".KTrss::rss_sanitize($item[fullpath] )."&lt;/td&gt;\n".  
409 - "&lt;/tr&gt;\n".  
410 - "&lt;tr&gt;\n".  
411 - "&lt;td&gt;Transaction:&lt;/td&gt;\n".  
412 - "&lt;td&gt;".$item[transaction_name]."&lt;/td&gt;\n".  
413 - "&lt;/tr&gt;\n".  
414 - "&lt;tr&gt;\n".  
415 - "&lt;td&gt;Comment:&lt;/td&gt;\n".  
416 - "&lt;td&gt;".KTrss::rss_sanitize($item[comment] )."&lt;/td&gt;\n".  
417 - "&lt;/tr&gt;\n".  
418 - "&lt;tr&gt;\n";if($item[version]){  
419 - $feed .= "&lt;td&gt;Version:&lt;/td&gt;\n".  
420 - "&lt;td&gt;".$item[version]."&lt;/td&gt;\n";}  
421 - $feed .= "&lt;/tr&gt;\n".  
422 - "&lt;tr&gt;\n".  
423 - "&lt;td&gt;Date:&lt;/td&gt;\n".  
424 - "&lt;td&gt;".$item[datetime]."&lt;/td&gt;\n".  
425 - "&lt;/tr&gt;\n".  
426 - "&lt;tr&gt;\n".  
427 - "&lt;td&gt;User:&lt;/td&gt;\n".  
428 - "&lt;td&gt;".$item[user_name]."&lt;/td&gt;\n".  
429 - "&lt;/tr&gt;\n".  
430 - "&lt;tr&gt;\n".  
431 - "&lt;td colspan='2'&gt;&lt;hr width='100' align='left'&gt;&lt;/td&gt;\n".  
432 - "&lt;/tr&gt;\n";}  
433 - $feed .= "&lt;/table&gt;\n".  
434 - "&lt;/td&gt;\n".  
435 - "&lt;/tr&gt;\n".  
436 - "&lt;/table&gt;".  
437 - "</description>\n".  
438 - "</item>\n"; 367 +
  368 +
  369 + if($aItem[0][0][owner]){
  370 + $owner = $aItem[0][0][owner];
  371 + }else{
  372 + $owner = _kt('None');
  373 + }
  374 +
  375 + $type = '';
  376 + if($aItem[0][0][type]){
  377 + $type = '<tr><td>Document type: '.$aItem[0][0][type]."</td>\n<td></td></tr>\n";
  378 + }
  379 +
  380 + if($aItem[0][0][workflow_status]){
  381 + $workflow = $aItem[0][0][workflow_status];
  382 + }else{
  383 + $workflow = _kt('No Workflow');
  384 + }
  385 +
  386 + $xmlItemHead = "<item>\n
  387 + <title>".htmlentities($aItem[0][0][name], ENT_QUOTES, 'UTF-8')."</title>\n
  388 + <link>".$hostPath."action.php?kt_path_info=ktcore.actions.".htmlentities($sTypeSelect, ENT_QUOTES, 'UTF-8')."=".$aItem[0][0]['id']."</link>\n
  389 + <description>\n";
  390 +
  391 + $htmlItem = "<table border='0' width='90%'>\n
  392 + <tr>\n
  393 + <td width='5%' height='16px'>
  394 + <a href='".$hostPath."action.php?kt_path_info=ktcore.actions.".$sTypeSelect."=".$aItem[0][0][id]."' >
  395 + <img src='".$aItem[0][mimeTypeIcon]."' align='left' height='16px' width='16px' alt='' border='0' /></a>
  396 + </td>\n
  397 + <td align='left'> ".$aItem[0][mimeTypeFName]."</td>\n
  398 + </tr>\n
  399 + <tr>\n
  400 + <td colspan='2'>\n
  401 + ".ucfirst($aItem[0]['itemType'])." Information (ID: ".$aItem[0][0][id].")</>\n
  402 + <hr>\n
  403 +
  404 + <table width='95%'>\n
  405 + <tr>\n
  406 + <td>"._kt('Filename').": ".$aItem[0][0][filename]."</td>\n
  407 + </tr>\n
  408 + <tr>\n
  409 + <td>"._kt('Author').": ".$aItem[0][0][author]."</td>\n
  410 + </tr>\n
  411 + <tr>\n
  412 + <td>"._kt('Owner').": ".$owner."</td>\n
  413 + <td></td>\n
  414 + </tr>\n
  415 + ".$type."\n
  416 + <tr>\n
  417 + <td>"._kt('Workflow status').": ".$workflow."</td>\n
  418 + <td></td>\n
  419 + </tr>\n
  420 + </table><br>\n
  421 +
  422 + "._kt('Transaction Summary (Last 4)')."\n
  423 + <hr>\n
  424 +
  425 + <table width='100%'>\n";
  426 +
  427 + foreach($aItem[1] as $item){
  428 + $htmlItem .= "<tr>\n
  429 + <td>".$item[type]." name:</td>\n
  430 + <td>".$item[name]."</td>\n
  431 + </tr>\n
  432 + <tr>\n
  433 + <td>Path:</td>\n
  434 + <td>".$item[fullpath]."</td>\n
  435 + </tr>\n
  436 + <tr>\n
  437 + <td>Transaction:</td>\n
  438 + <td>".$item[transaction_name]."</td>\n
  439 + </tr>\n
  440 + <tr>\n
  441 + <td>Comment:</td>\n
  442 + <td>".$item[comment]."</td>\n
  443 + </tr>\n
  444 + <tr>\n";
  445 +
  446 + if($item[version]){
  447 + $htmlItem .= "<td>Version:</td>\n
  448 + <td>".$item[version]."</td>\n";
  449 + }
  450 + $htmlItem .= "</tr>\n
  451 + <tr>\n
  452 + <td>Date:</td>\n
  453 + <td>".$item[datetime]."</td>\n
  454 + </tr>\n
  455 + <tr>\n
  456 + <td>User:</td>\n
  457 + <td>".$item[user_name]."</td>\n
  458 + </tr>\n
  459 + <tr>\n
  460 + <td colspan='2'><hr width='100' align='left'></td>\n
  461 + </tr>\n";
  462 + }
  463 + $htmlItem .= "</table>\n
  464 + </td>\n
  465 + </tr>\n
  466 + </table>";
  467 +
  468 + $xmlItemFooter = "</description>\n</item>\n";
  469 +
  470 + // Use htmlentities to allow html tags in the xml.
  471 + $htmlItem = htmlentities($htmlItem, ENT_QUOTES, 'UTF-8');
  472 +
  473 + $feed .= $xmlItemHead.$htmlItem.$xmlItemFooter;
439 } 474 }
440 - $feed .= "</channel>\n" .  
441 - "</rss>\n"; 475 + $footer = "</channel>\n</rss>\n";
442 476
443 - return $feed; 477 + return $head.$feed.$footer;
444 } 478 }
445 479
446 // Takes in an array as a parameter and returns rss2.0 compatible xml 480 // Takes in an array as a parameter and returns rss2.0 compatible xml
@@ -449,26 +483,28 @@ class KTrss{ @@ -449,26 +483,28 @@ class KTrss{
449 $aPath = explode('/', trim($_SERVER['PHP_SELF'])); 483 $aPath = explode('/', trim($_SERVER['PHP_SELF']));
450 global $default; 484 global $default;
451 $hostPath = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$aPath[1]."/"; 485 $hostPath = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$aPath[1]."/";
452 - $feed = "<?xml version=\"1.0\"?>\n";  
453 - $feed .= "<rss version=\"2.0\">\n".  
454 - "<channel>\n" .  
455 - "<title>".APP_NAME." RSS</title>\n" .  
456 - "<copyright>(c) 2007 The Jam Warehouse Software (Pty) Ltd. All Rights Reserved</copyright>\n" .  
457 - "<link>".$hostPath."</link>\n" .  
458 - "<description>KT-RSS</description>\n" .  
459 - "<image>\n".  
460 - "<title>".APP_NAME." RSS</title>\n".  
461 - "<width>140</width>\n".  
462 - "<height>28</height>".  
463 - "<link>".$hostPath."knowledgeTree/</link>\n".  
464 - "<url>".$hostPath."resources/graphics/ktlogo_rss.png</url>\n".  
465 - "</image>\n";  
466 - $feed .= "<item>\n".  
467 - "<title>Feed load error</title>\n" .  
468 - "<description>".$sError."</description>\n".  
469 - "</item>\n";  
470 - $feed .= "</channel>\n" .  
471 - "</rss>\n"; 486 + $feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n
  487 + <rss version=\"2.0\">\n
  488 +
  489 + <channel>\n
  490 + <title>".APP_NAME." RSS</title>\n
  491 + <copyright>(c) 2007 The Jam Warehouse Software (Pty) Ltd. All Rights Reserved</copyright>\n
  492 + <link>{$hostPath}</link>\n
  493 + <description>KT-RSS</description>\n
  494 + <image>\n
  495 + <title>".APP_NAME." RSS</title>\n
  496 + <width>140</width>\n
  497 + <height>28</height>
  498 + <link>{$hostPath}knowledgeTree/</link>\n
  499 + <url>{$hostPath}resources/graphics/ktlogo_rss.png</url>\n
  500 + </image>\n
  501 + <item>\n
  502 + <title>Feed load error</title>\n
  503 + <description>".$sError."</description>\n
  504 + </item>\n
  505 + </channel>\n
  506 +
  507 + </rss>\n";
472 508
473 return $feed; 509 return $feed;
474 } 510 }
resources/css/kt-framing.css
@@ -1817,6 +1817,7 @@ hr { @@ -1817,6 +1817,7 @@ hr {
1817 1817
1818 #content ul { 1818 #content ul {
1819 list-style-image: url(../graphics/bullet.png); 1819 list-style-image: url(../graphics/bullet.png);
  1820 + padding-left: 15px;
1820 } 1821 }
1821 1822
1822 1823
@@ -5,32 +5,32 @@ @@ -5,32 +5,32 @@
5 * KnowledgeTree Open Source Edition 5 * KnowledgeTree Open Source Edition
6 * Document Management Made Simple 6 * Document Management Made Simple
7 * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited 7 * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited
8 - * 8 + *
9 * This program is free software; you can redistribute it and/or modify it under 9 * This program is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU General Public License version 3 as published by the 10 * the terms of the GNU General Public License version 3 as published by the
11 * Free Software Foundation. 11 * Free Software Foundation.
12 - * 12 + *
13 * This program is distributed in the hope that it will be useful, but WITHOUT 13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16 * details. 16 * details.
17 - * 17 + *
18 * You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 - * 20 + *
21 * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, 21 * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place,
22 * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. 22 * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com.
23 - * 23 + *
24 * The interactive user interfaces in modified source and object code versions 24 * The interactive user interfaces in modified source and object code versions
25 * of this program must display Appropriate Legal Notices, as required under 25 * of this program must display Appropriate Legal Notices, as required under
26 * Section 5 of the GNU General Public License version 3. 26 * Section 5 of the GNU General Public License version 3.
27 - * 27 + *
28 * In accordance with Section 7(b) of the GNU General Public License version 3, 28 * In accordance with Section 7(b) of the GNU General Public License version 3,
29 * these Appropriate Legal Notices must retain the display of the "Powered by 29 * these Appropriate Legal Notices must retain the display of the "Powered by
30 - * KnowledgeTree" logo and retain the original copyright notice. If the display of the 30 + * KnowledgeTree" logo and retain the original copyright notice. If the display of the
31 * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices 31 * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
32 - * must display the words "Powered by KnowledgeTree" and retain the original  
33 - * copyright notice. 32 + * must display the words "Powered by KnowledgeTree" and retain the original
  33 + * copyright notice.
34 * Contributor( s): ______________________________________ 34 * Contributor( s): ______________________________________
35 */ 35 */
36 36
@@ -66,75 +66,79 @@ if ( !empty( $altinfo) &amp;&amp; !isset( $_SERVER[&#39;PHP_AUTH_USER&#39;])) { @@ -66,75 +66,79 @@ if ( !empty( $altinfo) &amp;&amp; !isset( $_SERVER[&#39;PHP_AUTH_USER&#39;])) {
66 } 66 }
67 67
68 if (!validateUser($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) { 68 if (!validateUser($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
69 - header('WWW-Authenticate: Basic realm="KnowledgeTree DMS"');  
70 - header('HTTP/1.0 401 Unauthorized');  
71 - echo 'This RSS feed requires authentication. Please enter your username and password.';  
72 - exit; 69 + header('WWW-Authenticate: Basic realm="KnowledgeTree DMS"');
  70 + header('HTTP/1.0 401 Unauthorized');
  71 + echo 'This RSS feed requires authentication. Please enter your username and password.';
  72 + exit;
73 } else { 73 } else {
74 - $user = DBAuthenticator::getUser($_SERVER['PHP_AUTH_USER'], array('id'=>'id',));  
75 - $id = $user[$_SERVER['PHP_AUTH_USER']]['id']; 74 + $user = DBAuthenticator::getUser($_SERVER['PHP_AUTH_USER'], array('id'=>'id',));
  75 + $id = $user[$_SERVER['PHP_AUTH_USER']]['id'];
76 76
  77 + header('Content-Type: application/rss+xml; charset=utf-8;');
  78 + header('Content-Disposition: inline; filename="rss.xml"');
  79 + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  80 + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
77 81
78 - if(KTUtil::arrayGet($_REQUEST, 'docId')){ // if a docId parameter is passed  
79 - // get document id from http request object  
80 - $iDocumentId = KTUtil::arrayGet($_REQUEST, 'docId'); 82 + if(KTUtil::arrayGet($_REQUEST, 'docId')){ // if a docId parameter is passed
  83 + // get document id from http request object
  84 + $iDocumentId = KTUtil::arrayGet($_REQUEST, 'docId');
81 85
82 - if(KTrss::validateDocumentPermissions($id, $iDocumentId)){ // if document passes validation check  
83 - // get document info  
84 - $aDocumentInfo[] = KTrss::getOneDocument($iDocumentId, $id); 86 + if(KTrss::validateDocumentPermissions($id, $iDocumentId)){ // if document passes validation check
  87 + // get document info
  88 + $aDocumentInfo[] = KTrss::getOneDocument($iDocumentId, $id);
85 89
86 - if($aDocumentInfo){  
87 - // create rss xml for document  
88 - $documentFeed = KTrss::arrayToXML($aDocumentInfo);  
89 - }else{  
90 - // create rss xml for the error  
91 - $error = KTrss::errorToXML(_kt('This document has returned a empty response'));  
92 - }  
93 - }else{  
94 - // create rss xml for error  
95 - $error = KTrss::errorToXML(_kt('You are either not authorised to view details on this document or it does not exist.' .  
96 - ' Please visit http://' .$_SERVER['HTTP_HOST'].'/'.$GLOBALS['KTRootUrl'].'/ to browse for a valid document.'));  
97 - }  
98 - if(isset($error)){ // if an error exist, output...else out the result  
99 - echo $error;  
100 - }else{  
101 - echo $documentFeed;  
102 - }  
103 - }elseif(KTUtil::arrayGet($_REQUEST, 'folderId')){ // if a folderId parameter is passed  
104 - // get folder id from http request object  
105 - $iFolderId = KTUtil::arrayGet($_REQUEST, 'folderId'); 90 + if($aDocumentInfo){
  91 + // create rss xml for document
  92 + $documentFeed = KTrss::arrayToXML($aDocumentInfo);
  93 + }else{
  94 + // create rss xml for the error
  95 + $error = KTrss::errorToXML(_kt('This document has returned a empty response'));
  96 + }
  97 + }else{
  98 + // create rss xml for error
  99 + $error = KTrss::errorToXML(_kt('You are either not authorised to view details on this document or it does not exist.' .
  100 + ' Please visit http://' .$_SERVER['HTTP_HOST'].'/'.$GLOBALS['KTRootUrl'].'/ to browse for a valid document.'));
  101 + }
  102 + if(isset($error)){ // if an error exist, output...else out the result
  103 + echo $error;
  104 + }else{
  105 + echo $documentFeed;
  106 + }
  107 + }elseif(KTUtil::arrayGet($_REQUEST, 'folderId')){ // if a folderId parameter is passed
  108 + // get folder id from http request object
  109 + $iFolderId = KTUtil::arrayGet($_REQUEST, 'folderId');
106 110
107 - if(KTrss::validateFolderPermissions($id, $iFolderId)){ // if folder passes validation check  
108 - // get folder info  
109 - $aFolderInfo[] = KTrss::getOneFolder($iFolderId); 111 + if(KTrss::validateFolderPermissions($id, $iFolderId)){ // if folder passes validation check
  112 + // get folder info
  113 + $aFolderInfo[] = KTrss::getOneFolder($iFolderId);
110 114
111 - if($aFolderInfo){  
112 - // create rss xml for folder  
113 - $folderFeed = KTrss::arrayToXML($aFolderInfo);  
114 - }else{  
115 - // create rss xml for error  
116 - $error = KTrss::errorToXML(_kt('This document has returned a empty response'));  
117 - }  
118 - }else{  
119 - // create rss xml for error  
120 - $error = KTrss::errorToXML(_kt('You are either not authorised to view details on this folder or it does not exist.' .  
121 - ' Please visit http://' .$_SERVER['HTTP_HOST'].'/'.$GLOBALS['KTRootUrl'].'/ to browse for a valid folder.'));  
122 - }  
123 - if(isset($error)){ // if an error exist, output...else out the result  
124 - echo $error;  
125 - }else{  
126 - echo $folderFeed;  
127 - }  
128 - }else{ // else do normal rss parsing  
129 - // get full list of subscribed documents and folders  
130 - $aFullList = kt_array_merge(KTrss::getDocuments($id), KTrss::getFolders($id));  
131 - $internalFeed = KTrss::arrayToXML($aFullList);  
132 - echo $internalFeed;  
133 - } 115 + if($aFolderInfo){
  116 + // create rss xml for folder
  117 + $folderFeed = KTrss::arrayToXML($aFolderInfo);
  118 + }else{
  119 + // create rss xml for error
  120 + $error = KTrss::errorToXML(_kt('This document has returned a empty response'));
  121 + }
  122 + }else{
  123 + // create rss xml for error
  124 + $error = KTrss::errorToXML(_kt('You are either not authorised to view details on this folder or it does not exist.' .
  125 + ' Please visit http://' .$_SERVER['HTTP_HOST'].'/'.$GLOBALS['KTRootUrl'].'/ to browse for a valid folder.'));
  126 + }
  127 + if(isset($error)){ // if an error exist, output...else out the result
  128 + echo $error;
  129 + }else{
  130 + echo $folderFeed;
  131 + }
  132 + }else{ // else do normal rss parsing
  133 + // get full list of subscribed documents and folders
  134 + $aFullList = kt_array_merge(KTrss::getDocuments($id), KTrss::getFolders($id));
  135 + $internalFeed = KTrss::arrayToXML($aFullList);
  136 + echo $internalFeed;
  137 + }
134 } 138 }
135 139
136 // Validate user credentials 140 // Validate user credentials
137 function validateUser($username, $password){ 141 function validateUser($username, $password){
138 - return DBAuthenticator::checkPassword($username, $password); 142 + return DBAuthenticator::checkPassword($username, $password);
139 } 143 }
140 -?> 144 -?>
  145 +?>
141 \ No newline at end of file 146 \ No newline at end of file
sql/mysql/install/data.sql
@@ -765,7 +765,9 @@ INSERT INTO `plugins` VALUES @@ -765,7 +765,9 @@ INSERT INTO `plugins` VALUES
765 (18,'ktstandard.disclaimers.plugin','plugins/ktstandard/KTDisclaimers.php',0,0,NULL,0,'Disclaimers Plugin',0), 765 (18,'ktstandard.disclaimers.plugin','plugins/ktstandard/KTDisclaimers.php',0,0,NULL,0,'Disclaimers Plugin',0),
766 (19,'nbm.browseable.plugin','plugins/browseabledashlet/BrowseableDashletPlugin.php',0,0,NULL,0,'Orphaned Folders Plugin',0), 766 (19,'nbm.browseable.plugin','plugins/browseabledashlet/BrowseableDashletPlugin.php',0,0,NULL,0,'Orphaned Folders Plugin',0),
767 (20,'ktstandard.ktwebdavdashlet.plugin','plugins/ktstandard/KTWebDAVDashletPlugin.php',0,0,NULL,0,'WebDAV Dashlet Plugin',0), 767 (20,'ktstandard.ktwebdavdashlet.plugin','plugins/ktstandard/KTWebDAVDashletPlugin.php',0,0,NULL,0,'WebDAV Dashlet Plugin',0),
768 - (21,'ktcore.housekeeper.plugin','plugins/housekeeper/HouseKeeperPlugin.php',0,0,NULL,0,'Housekeeper',0); 768 + (21,'ktcore.housekeeper.plugin','plugins/housekeeper/HouseKeeperPlugin.php',0,0,NULL,0,'Housekeeper',0),
  769 + (22,'ktcore.scheduler.plugin','plugins/ktcore/scheduler/KTSchedulerPlugin.php',0,0,NULL,0,'Task Scheduler Plugin',0),
  770 + (23,'ktcore.schedulerdashlet.plugin','plugins/ktcore/scheduler/schedulerDashletPlugin.php',0,0,NULL,0,'Scheduler Dashlet Plugin',0);
769 /*!40000 ALTER TABLE `plugins` ENABLE KEYS */; 771 /*!40000 ALTER TABLE `plugins` ENABLE KEYS */;
770 UNLOCK TABLES; 772 UNLOCK TABLES;
771 773
@@ -1680,7 +1682,7 @@ UNLOCK TABLES; @@ -1680,7 +1682,7 @@ UNLOCK TABLES;
1680 1682
1681 LOCK TABLES `zseq_plugins` WRITE; 1683 LOCK TABLES `zseq_plugins` WRITE;
1682 /*!40000 ALTER TABLE `zseq_plugins` DISABLE KEYS */; 1684 /*!40000 ALTER TABLE `zseq_plugins` DISABLE KEYS */;
1683 -INSERT INTO `zseq_plugins` VALUES (21); 1685 +INSERT INTO `zseq_plugins` VALUES (23);
1684 /*!40000 ALTER TABLE `zseq_plugins` ENABLE KEYS */; 1686 /*!40000 ALTER TABLE `zseq_plugins` ENABLE KEYS */;
1685 UNLOCK TABLES; 1687 UNLOCK TABLES;
1686 1688
templates/ktcore/principals/about.smarty
@@ -11,7 +11,7 @@ KnowledgeTree&amp;trade; is a &lt;a href=&quot;http://www.knowledgetree.com/About/legal/trad @@ -11,7 +11,7 @@ KnowledgeTree&amp;trade; is a &lt;a href=&quot;http://www.knowledgetree.com/About/legal/trad
11 </p> 11 </p>
12 <p> 12 <p>
13 <strong>KnowledgeTree is a business unit of The Jam Warehouse Software (Pty) Ltd.</strong><br /> 13 <strong>KnowledgeTree is a business unit of The Jam Warehouse Software (Pty) Ltd.</strong><br />
14 -Unit 1, Tramber Place, Blake Street, Observatory, Cape Town, 7925 South Africa, +27 21 4477440, <a href="http://www.knowledgetree.com">http://www.knowledgetree.com</a><br /> 14 +<a href="http://www.knowledgetree.com">http://www.knowledgetree.com</a><br />
15 </p> 15 </p>
16 <p> 16 <p>
17 <strong>KnowledgeTree Sales</strong><br /> 17 <strong>KnowledgeTree Sales</strong><br />