Commit 9094d5dc644aae6b4cd24171e5a0cf4675c2758d

Authored by conradverm
1 parent b56238bd

KTS-3025

"Move KTWSAPI foders to KnowledgeTree forge"
Moved.

Committed By: Conrad Vermeulen
Reviewed By: Kevin Fourie

git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@8061 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 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