Commit 6fa7e67d34349512d6535901f7b70f375b607d36

Authored by Kevin G Fourie
1 parent e0f5b4c1

Line ending updates.

docs/kt-phpdoc.ini
1   -;; phpDocumentor parse configuration file
2   -;;
3   -;; This file is designed to cut down on repetitive typing on the command-line or web interface
4   -;; You can copy this file to create a number of configuration files that can be used with the
5   -;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web
6   -;; interface will automatically generate a list of .ini files that can be used.
7   -;;
8   -;; default.ini is used to generate the online manual at http://www.phpdoc.org/docs
9   -;;
10   -;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
11   -;;
12   -;; Copyright 2002, Greg Beaver <cellog@php.net>
13   -;;
14   -;; WARNING: do not change the name of any command-line parameters, phpDocumentor will ignore them
15   -
16   -[Parse Data]
17   -;; title of all the documentation
18   -;; legal values: any string
19   -title = KnowledgeTree ##VERSION##
20   -
21   -;; parse files that start with a . like .bash_profile
22   -;; legal values: true, false
23   -hidden = true
24   -
25   -;; show elements marked @access private in documentation by setting this to on
26   -;; legal values: on, off
27   -parseprivate = on
28   -
29   -;; parse with javadoc-like description (first sentence is always the short description)
30   -;; legal values: on, off
31   -javadocdesc = off
32   -
33   -;; add any custom @tags separated by commas here
34   -;; legal values: any legal tagname separated by commas.
35   -;customtags = mytag1,mytag2
36   -
37   -;; This is only used by the XML:DocBook/peardoc2 converter
38   -defaultcategoryname = Documentation
39   -
40   -;; what is the main package?
41   -;; legal values: alphanumeric string plus - and _
42   -defaultpackagename = KnowledgeTree
43   -
44   -;; output any parsing information? set to on for cron jobs
45   -;; legal values: on
46   -;quiet = on
47   -
48   -;; parse a PEAR-style repository. Do not turn this on if your project does
49   -;; not have a parent directory named "pear"
50   -;; legal values: on/off
51   -;pear = on
52   -
53   -;; where should the documentation be written?
54   -;; legal values: a legal path
55   -;target = /home/cellog/output
56   -target = phpdoc
57   -
58   -;; Which files should be parsed out as special documentation files, such as README,
59   -;; INSTALL and CHANGELOG? This overrides the default files found in
60   -;; phpDocumentor.ini (this file is not a user .ini file, but the global file)
61   -readmeinstallchangelog = README, INSTALL, FAQ, LICENSE, COPYING, CHANGELOG, LICENSE
62   -
63   -;; limit output to the specified packages, even if others are parsed
64   -;; legal values: package names separated by commas
65   -;packageoutput = package1,package2
66   -
67   -;; comma-separated list of files to parse
68   -;; legal values: paths separated by commas
69   -;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory
70   -
71   -;; comma-separated list of directories to parse
72   -;; legal values: directory paths separated by commas
73   -;directory = /path1,/path2,.,..,subdirectory
74   -;directory = /home/jeichorn/cvs/pear
75   -;directory = /home/cellog/workspace/phpdoc
76   -directory = ../
77   -
78   -;; template base directory (the equivalent directory of <installdir>/phpDocumentor)
79   -;templatebase = /path/to/my/templates
80   -
81   -;; directory to find any example files in through @example and {@example} tags
82   -;examplesdir = /path/to/my/templates
83   -
84   -;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
85   -;; legal values: any wildcard strings separated by commas
86   -;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value
87   -;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/
88   -ignore = thirdparty/
89   -
90   -;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
91   -;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,
92   -;; HTML:frames:earthli,
93   -;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,
94   -;; HTML:frames:DOM/phphtmllib,HTML:frames:DOM/earthli
95   -;; HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS
96   -;; PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default
97   -;output=HTML:frames:earthli,HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:DOM/earthli,HTML:frames:DOM/phphtmllib,HTML:frames:phpedit,HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS
98   -output=HTML:frames:DOM/earthli
99   -
100   -;; turn this option on if you want highlighted source code for every file
101   -;; legal values: on/off
102   -sourcecode = on
  1 +;; phpDocumentor parse configuration file
  2 +;;
  3 +;; This file is designed to cut down on repetitive typing on the command-line or web interface
  4 +;; You can copy this file to create a number of configuration files that can be used with the
  5 +;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web
  6 +;; interface will automatically generate a list of .ini files that can be used.
  7 +;;
  8 +;; default.ini is used to generate the online manual at http://www.phpdoc.org/docs
  9 +;;
  10 +;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
  11 +;;
  12 +;; Copyright 2002, Greg Beaver <cellog@php.net>
  13 +;;
  14 +;; WARNING: do not change the name of any command-line parameters, phpDocumentor will ignore them
  15 +
  16 +[Parse Data]
  17 +;; title of all the documentation
  18 +;; legal values: any string
  19 +title = KnowledgeTree ##VERSION##
  20 +
  21 +;; parse files that start with a . like .bash_profile
  22 +;; legal values: true, false
  23 +hidden = true
  24 +
  25 +;; show elements marked @access private in documentation by setting this to on
  26 +;; legal values: on, off
  27 +parseprivate = on
  28 +
  29 +;; parse with javadoc-like description (first sentence is always the short description)
  30 +;; legal values: on, off
  31 +javadocdesc = off
  32 +
  33 +;; add any custom @tags separated by commas here
  34 +;; legal values: any legal tagname separated by commas.
  35 +;customtags = mytag1,mytag2
  36 +
  37 +;; This is only used by the XML:DocBook/peardoc2 converter
  38 +defaultcategoryname = Documentation
  39 +
  40 +;; what is the main package?
  41 +;; legal values: alphanumeric string plus - and _
  42 +defaultpackagename = KnowledgeTree
  43 +
  44 +;; output any parsing information? set to on for cron jobs
  45 +;; legal values: on
  46 +;quiet = on
  47 +
  48 +;; parse a PEAR-style repository. Do not turn this on if your project does
  49 +;; not have a parent directory named "pear"
  50 +;; legal values: on/off
  51 +;pear = on
  52 +
  53 +;; where should the documentation be written?
  54 +;; legal values: a legal path
  55 +;target = /home/cellog/output
  56 +target = phpdoc
  57 +
  58 +;; Which files should be parsed out as special documentation files, such as README,
  59 +;; INSTALL and CHANGELOG? This overrides the default files found in
  60 +;; phpDocumentor.ini (this file is not a user .ini file, but the global file)
  61 +readmeinstallchangelog = README, INSTALL, FAQ, LICENSE, COPYING, CHANGELOG, LICENSE
  62 +
  63 +;; limit output to the specified packages, even if others are parsed
  64 +;; legal values: package names separated by commas
  65 +;packageoutput = package1,package2
  66 +
  67 +;; comma-separated list of files to parse
  68 +;; legal values: paths separated by commas
  69 +;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory
  70 +
  71 +;; comma-separated list of directories to parse
  72 +;; legal values: directory paths separated by commas
  73 +;directory = /path1,/path2,.,..,subdirectory
  74 +;directory = /home/jeichorn/cvs/pear
  75 +;directory = /home/cellog/workspace/phpdoc
  76 +directory = ../
  77 +
  78 +;; template base directory (the equivalent directory of <installdir>/phpDocumentor)
  79 +;templatebase = /path/to/my/templates
  80 +
  81 +;; directory to find any example files in through @example and {@example} tags
  82 +;examplesdir = /path/to/my/templates
  83 +
  84 +;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
  85 +;; legal values: any wildcard strings separated by commas
  86 +;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value
  87 +;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/
  88 +ignore = thirdparty/
  89 +
  90 +;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
  91 +;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,
  92 +;; HTML:frames:earthli,
  93 +;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,
  94 +;; HTML:frames:DOM/phphtmllib,HTML:frames:DOM/earthli
  95 +;; HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS
  96 +;; PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default
  97 +;output=HTML:frames:earthli,HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:DOM/earthli,HTML:frames:DOM/phphtmllib,HTML:frames:phpedit,HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS
  98 +output=HTML:frames:DOM/earthli
  99 +
  100 +;; turn this option on if you want highlighted source code for every file
  101 +;; legal values: on/off
  102 +sourcecode = on
... ...
kthelp/ktcore/EN/welcomeCommercial.html
1   -<html>
2   -<head>
3   -<title>Welcome to #APP_NAME#</title>
4   -</head>
5   -<body>
6   -<p class="descriptiveText"><b>#APP_NAME# is Document Management Made Simple.</b></p> <br>
7   -
8   -<p class="descriptiveText">Easily and securely manage your company's document creation, editing, versioning, and sharing - all from a powerful Web interface and Microsoft&#0174 Office&#0174 and Windows&#0174 Explorer&#0174 tools.</p> <br>
9   -
10   -<p class="descriptiveText">A subscription to #APP_NAME# provides your organization with product updates, enhanced document management features, and commercial support. Please view your welcome mailer for information on accessing these services.</p> <br>
11   -
12   -</body>
  1 +<html>
  2 +<head>
  3 +<title>Welcome to #APP_NAME#</title>
  4 +</head>
  5 +<body>
  6 +<p class="descriptiveText"><b>#APP_NAME# is Document Management Made Simple.</b></p> <br>
  7 +
  8 +<p class="descriptiveText">Easily and securely manage your company's document creation, editing, versioning, and sharing - all from a powerful Web interface and Microsoft&#0174 Office&#0174 and Windows&#0174 Explorer&#0174 tools.</p> <br>
  9 +
  10 +<p class="descriptiveText">A subscription to #APP_NAME# provides your organization with product updates, enhanced document management features, and commercial support. Please view your welcome mailer for information on accessing these services.</p> <br>
  11 +
  12 +</body>
13 13 </html>
14 14 \ No newline at end of file
... ...
lib/alert/EmailTemplate.inc.php
1   -<?php
2   -
3   -require_once(KT_LIB_DIR . "/templating/templating.inc.php");
4   -
5   -/**
6   - * Represents an email template
7   - *
8   - */
9   -class EmailTemplate{
10   - /** template */
11   - var $sTemplate;
12   - /** template data */
13   - var $aTemplateData;
14   -
15   - function EmailTemplate($sTemplate, $aTemplateData = array()){
16   - $this->sTemplate = $sTemplate;
17   - $this->aTemplateData = $aTemplateData;
18   - }
19   -
20   - function getTemplate(){
21   - return $this->sTemplate;
22   - }
23   -
24   - function setTemplate($sTemplate){
25   - $this->sTemplate = $sTemplate;
26   - }
27   -
28   - function getTemplateData(){
29   - return $this->aTemplateData;
30   - }
31   -
32   - function setTemplateData($aTemplateData){
33   - $this->aTemplateData = $aTemplateData;
34   - }
35   -
36   - /**
37   - * Renders template to a valid email body.
38   - *
39   - * @return HTML email body
40   - */
41   - function getBody(){
42   - $oTemplating =& KTTemplating::getSingleton();
43   - $oTemplate = $oTemplating->loadTemplate($this->sTemplate);
44   - return "<html><body>".$oTemplate->render($this->aTemplateData)."</body></html>";
45   - }
46   -
47   -}
48   -
49   -
50   -
51   -
52   -
53   -
54   -
55   -
56   -
57   -
  1 +<?php
  2 +
  3 +require_once(KT_LIB_DIR . "/templating/templating.inc.php");
  4 +
  5 +/**
  6 + * Represents an email template
  7 + *
  8 + */
  9 +class EmailTemplate{
  10 + /** template */
  11 + var $sTemplate;
  12 + /** template data */
  13 + var $aTemplateData;
  14 +
  15 + function EmailTemplate($sTemplate, $aTemplateData = array()){
  16 + $this->sTemplate = $sTemplate;
  17 + $this->aTemplateData = $aTemplateData;
  18 + }
  19 +
  20 + function getTemplate(){
  21 + return $this->sTemplate;
  22 + }
  23 +
  24 + function setTemplate($sTemplate){
  25 + $this->sTemplate = $sTemplate;
  26 + }
  27 +
  28 + function getTemplateData(){
  29 + return $this->aTemplateData;
  30 + }
  31 +
  32 + function setTemplateData($aTemplateData){
  33 + $this->aTemplateData = $aTemplateData;
  34 + }
  35 +
  36 + /**
  37 + * Renders template to a valid email body.
  38 + *
  39 + * @return HTML email body
  40 + */
  41 + function getBody(){
  42 + $oTemplating =& KTTemplating::getSingleton();
  43 + $oTemplate = $oTemplating->loadTemplate($this->sTemplate);
  44 + return "<html><body>".$oTemplate->render($this->aTemplateData)."</body></html>";
  45 + }
  46 +
  47 +}
  48 +
  49 +
  50 +
  51 +
  52 +
  53 +
  54 +
  55 +
  56 +
  57 +
58 58 ?>
59 59 \ No newline at end of file
... ...
lib/foldermanagement/compressionArchiveUtil.inc.php
1   -<?php
2   -/**
3   - * $Id:
4   - *
5   - * KnowledgeTree Community Edition
6   - * Document Management Made Simple
7   - * Copyright (C) 2008, 2009 KnowledgeTree Inc.
8   - * Portions copyright The Jam Warehouse Software (Pty) Limited
9   - *
10   - * This program is free software; you can redistribute it and/or modify it under
11   - * the terms of the GNU General Public License version 3 as published by the
12   - * Free Software Foundation.
13   - *
14   - * This program is distributed in the hope that it will be useful, but WITHOUT
15   - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16   - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17   - * details.
18   - *
19   - * You should have received a copy of the GNU General Public License
20   - * along with this program. If not, see <http://www.gnu.org/licenses/>.
21   - *
22   - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
23   - * California 94120-7775, or email info@knowledgetree.com.
24   - *
25   - * The interactive user interfaces in modified source and object code versions
26   - * of this program must display Appropriate Legal Notices, as required under
27   - * Section 5 of the GNU General Public License version 3.
28   - *
29   - * In accordance with Section 7(b) of the GNU General Public License version 3,
30   - * these Appropriate Legal Notices must retain the display of the "Powered by
31   - * KnowledgeTree" logo and retain the original copyright notice. If the display of the
32   - * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
33   - * must display the words "Powered by KnowledgeTree" and retain the original
34   - * copyright notice.
35   - * Contributor( s): ______________________________________
36   - *
37   - */
38   -
39   -/**
40   -* Class to create and download a zip file
41   -*/
42   -class ZipFolder {
43   -
44   - var $sTmpPath = '';
45   - var $sZipFileName = '';
46   - var $sZipFile = '';
47   - var $sPattern = '';
48   - var $sFolderPattern = '';
49   - var $aPaths = array();
50   - var $aReplaceKeys = array();
51   - var $aReplaceValues = array();
52   - var $sOutputEncoding = 'UTF-8';
53   -
54   - /**
55   - * Constructor
56   - *
57   - * @param string $sZipFileName The name of the zip file - gets ignored at the moment.
58   - * @param string $exportCode The code to use if a zip file has already been created.
59   - */
60   - function ZipFolder($sZipFileName, $exportCode = null) {
61   - $this->oKTConfig =& KTConfig::getSingleton();
62   - $this->oStorage =& KTStorageManagerUtil::getSingleton();
63   -
64   - $this->sOutputEncoding = $this->oKTConfig->get('export/encoding', 'UTF-8');
65   -
66   - $this->sPattern = "[\*|\%|\\\|\/|\<|\>|\+|\:|\?|\||\'|\"]";
67   - $this->sFolderPattern = "[\*|\%|\<|\>|\+|\:|\?|\||\'|\"]";
68   -
69   - // If the export code exists then a temp zip directory has already been created
70   - if(!empty($exportCode)){
71   - $aData = KTUtil::arrayGet($_SESSION['zipcompression'], $exportCode);
72   -
73   - if(!empty($aData)){
74   - $sTmpPath = $aData['dir'];
75   - }
76   - }else {
77   - $sBasedir = $this->oKTConfig->get("urls/tmpDirectory");
78   - $sTmpPath = tempnam($sBasedir, 'kt_compress_zip');
79   -
80   - unlink($sTmpPath);
81   - mkdir($sTmpPath, 0755);
82   - }
83   -
84   - // Hard coding the zip file name.
85   - // It normally uses the folder name but if there are special characters in the name then it doesn't download properly.
86   - $sZipFileName = 'kt_zip';
87   -
88   - $this->sTmpPath = $sTmpPath;
89   - $this->sZipFileName = $sZipFileName;
90   - $this->aPaths = array();
91   -
92   - $aReplace = array(
93   - "[" => "[[]",
94   - " " => "[ ]",
95   - "*" => "[*]",
96   - "?" => "[?]",
97   - );
98   -
99   - $this->aReplaceKeys = array_keys($aReplace);
100   - $this->aReplaceValues = array_values($aReplace);
101   - }
102   -
103   - /**
104   - * Return the full path
105   - *
106   - * @param mixed $oFolderOrDocument May be a Folder or Document
107   - */
108   - function getFullFolderPath($oFolder)
109   - {
110   - static $sRootFolder = null;
111   -
112   - if (is_null($sRootFolder))
113   - {
114   - $oRootFolder = Folder::get(1);
115   - $sRootFolder = $oRootFolder->getName();
116   - }
117   -
118   - $sFullPath = $sRootFolder . '/';
119   - $sFullPath .= $oFolder->getFullPath();
120   -
121   -
122   - if (substr($sFullPath,-1) == '/') $sFullPath = substr($sFullPath,0,-1);
123   - return $sFullPath;
124   - }
125   -
126   -
127   - /**
128   - * Add a document to the zip file
129   - */
130   - function addDocumentToZip($oDocument, $oFolder = null) {
131   - if(empty($oFolder)){
132   - $oFolder = Folder::get($oDocument->getFolderID());
133   - }
134   -
135   - $sDocPath = $this->getFullFolderPath($oFolder);
136   - $sDocPath = preg_replace($this->sFolderPattern, '-', $sDocPath);
137   - $sDocPath = $this->_convertEncoding($sDocPath, true);
138   -
139   -
140   - $sDocName = $oDocument->getFileName();
141   - $sDocName = preg_replace($this->sPattern, '-', $sDocName);
142   - $sDocName = $this->_convertEncoding($sDocName, true);
143   -
144   - $sParentFolder = $this->sTmpPath.'/'.$sDocPath;
145   - $newDir = $this->sTmpPath;
146   -
147   - $aFullPath = split('/', $sDocPath);
148   - foreach ($aFullPath as $dirPart) {
149   - $newDir = sprintf("%s/%s", $newDir, $dirPart);
150   - if (!file_exists($newDir)) {
151   - mkdir($newDir, 0700);
152   - }
153   - }
154   -
155   - $sOrigFile = $this->oStorage->temporaryFile($oDocument);
156   - $sFilename = $sParentFolder.'/'.$sDocName;
157   - copy($sOrigFile, $sFilename);
158   -
159   - $this->aPaths[] = $sDocPath.'/'.$sDocName;
160   - return true;
161   - }
162   -
163   - /**
164   - * Add a folder to the zip file
165   - */
166   - function addFolderToZip($oFolder) {
167   - $sFolderPath = $this->getFullFolderPath($oFolder) .'/';
168   - $sFolderPath = preg_replace($this->sFolderPattern, '-', $sFolderPath);
169   - $sFolderPath = $this->_convertEncoding($sFolderPath, true);
170   -
171   - $newDir = $this->sTmpPath;
172   -
173   - $aFullPath = split('/', $sFolderPath);
174   - foreach ($aFullPath as $dirPart) {
175   - $newDir = sprintf("%s/%s", $newDir, $dirPart);
176   - if (!file_exists($newDir)) {
177   - mkdir($newDir, 0700);
178   - }
179   - }
180   -
181   - $this->aPaths[] = $sFolderPath;
182   - return true;
183   - }
184   -
185   - /**
186   - * Zip the temp folder
187   - */
188   - function createZipFile($bEchoStatus = FALSE) {
189   - if(empty($this->aPaths)){
190   - return PEAR::raiseError(_kt("No folders or documents found to compress"));
191   - }
192   -
193   - // Set environment language to output character encoding
194   - $loc = $this->sOutputEncoding;
195   - putenv("LANG=$loc");
196   - putenv("LANGUAGE=$loc");
197   - $loc = setlocale(LC_ALL, $loc);
198   -
199   -
200   -
201   - $sManifest = sprintf("%s/%s", $this->sTmpPath, "MANIFEST");
202   - file_put_contents($sManifest, join("\n", $this->aPaths));
203   - $sZipFile = sprintf("%s/%s.zip", $this->sTmpPath, $this->sZipFileName);
204   - $sZipFile = str_replace('<', '', str_replace('</', '', str_replace('>', '', $sZipFile)));
205   - $sZipCommand = KTUtil::findCommand("export/zip", "zip");
206   - $aCmd = array($sZipCommand, "-r", $sZipFile, ".", "-i@MANIFEST");
207   - $sOldPath = getcwd();
208   - chdir($this->sTmpPath);
209   -
210   - // Note that the popen means that pexec will return a file descriptor
211   - $aOptions = array('popen' => 'r');
212   - $fh = KTUtil::pexec($aCmd, $aOptions);
213   -
214   - if($bEchoStatus){
215   - $last_beat = time();
216   - while(!feof($fh)) {
217   - if ($i % 1000 == 0) {
218   - $this_beat = time();
219   - if ($last_beat + 1 < $this_beat) {
220   - $last_beat = $this_beat;
221   - print "&nbsp;";
222   - }
223   - }
224   - $contents = fread($fh, 4096);
225   - if ($contents) {
226   - print nl2br($this->_convertEncoding($contents, false));
227   - }
228   - $i++;
229   - }
230   - }
231   - pclose($fh);
232   -
233   - // Save the zip file and path into session
234   - $_SESSION['zipcompression'] = KTUtil::arrayGet($_SESSION, 'zipcompression', array());
235   - $sExportCode = KTUtil::randomString();
236   - $_SESSION['zipcompression'][$sExportCode] = array(
237   - 'file' => $sZipFile,
238   - 'dir' => $this->sTmpPath,
239   - );
240   - $_SESSION['zipcompression']['exportcode'] = $sExportCode;
241   -
242   - $this->sZipFile = $sZipFile;
243   - return $sExportCode;
244   - }
245   -
246   - /**
247   - * Download the zip file
248   - */
249   - function downloadZipFile($exportCode = NULL) {
250   - if(!(isset($exportCode) && !empty($exportCode))) {
251   - $exportCode = KTUtil::arrayGet($_SESSION['zipcompression'], 'exportcode');
252   - }
253   -
254   - $aData = KTUtil::arrayGet($_SESSION['zipcompression'], $exportCode);
255   -
256   - if(!empty($aData)){
257   - $sZipFile = $aData['file'];
258   - $sTmpPath = $aData['dir'];
259   - }else{
260   - $sZipFile = $this->sZipFile;
261   - $sTmpPath = $this->sTmpPath;
262   - }
263   -
264   - if (!file_exists($sZipFile)) {
265   - return PEAR::raiseError(_kt('The ZIP file can only be downloaded once - if you cancel the download, you will need to reload the page.'));
266   - }
267   -
268   - $mimeType = 'application/zip; charset=utf-8;';
269   - $fileSize = filesize($sZipFile);
270   - $fileName = $this->sZipFileName . '.zip';
271   -
272   - KTUtil::download($sZipFile, $mimeType, $fileSize, $fileName);
273   - KTUtil::deleteDirectory($sTmpPath);
274   - return true;
275   - }
276   -
277   - /**
278   - * Check that iconv exists and that the selected encoding is supported.
279   - */
280   - function checkConvertEncoding() {
281   - if(!function_exists("iconv")) {
282   - return PEAR::raiseError(_kt('IConv PHP extension not installed. The zip file compression could not handle output filename encoding conversion !'));
283   - }
284   - $oKTConfig = $this->oKTConfig;
285   - $this->sOutputEncoding = $oKTConfig->get('export/encoding', 'UTF-8');
286   -
287   - // Test the specified encoding
288   - if(iconv("UTF-8", $this->sOutputEncoding, "") === FALSE) {
289   - return PEAR::raiseError(_kt('Specified output encoding for the zip files compression does not exists !'));
290   - }
291   - return true;
292   - }
293   -
294   - function _convertEncoding($sMystring, $bEncode) {
295   - if (strcasecmp($this->sOutputEncoding, "UTF-8") === 0) {
296   - return $sMystring;
297   - }
298   - if ($bEncode) {
299   - return iconv("UTF-8", $this->sOutputEncoding, $sMystring);
300   - } else {
301   - return iconv($this->sOutputEncoding, "UTF-8", $sMystring);
302   - }
303   - }
304   -}
  1 +<?php
  2 +/**
  3 + * $Id:
  4 + *
  5 + * KnowledgeTree Community Edition
  6 + * Document Management Made Simple
  7 + * Copyright (C) 2008, 2009 KnowledgeTree Inc.
  8 + * Portions copyright The Jam Warehouse Software (Pty) Limited
  9 + *
  10 + * This program is free software; you can redistribute it and/or modify it under
  11 + * the terms of the GNU General Public License version 3 as published by the
  12 + * Free Software Foundation.
  13 + *
  14 + * This program is distributed in the hope that it will be useful, but WITHOUT
  15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  16 + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  17 + * details.
  18 + *
  19 + * You should have received a copy of the GNU General Public License
  20 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21 + *
  22 + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
  23 + * California 94120-7775, or email info@knowledgetree.com.
  24 + *
  25 + * The interactive user interfaces in modified source and object code versions
  26 + * of this program must display Appropriate Legal Notices, as required under
  27 + * Section 5 of the GNU General Public License version 3.
  28 + *
  29 + * In accordance with Section 7(b) of the GNU General Public License version 3,
  30 + * these Appropriate Legal Notices must retain the display of the "Powered by
  31 + * KnowledgeTree" logo and retain the original copyright notice. If the display of the
  32 + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
  33 + * must display the words "Powered by KnowledgeTree" and retain the original
  34 + * copyright notice.
  35 + * Contributor( s): ______________________________________
  36 + *
  37 + */
  38 +
  39 +/**
  40 +* Class to create and download a zip file
  41 +*/
  42 +class ZipFolder {
  43 +
  44 + var $sTmpPath = '';
  45 + var $sZipFileName = '';
  46 + var $sZipFile = '';
  47 + var $sPattern = '';
  48 + var $sFolderPattern = '';
  49 + var $aPaths = array();
  50 + var $aReplaceKeys = array();
  51 + var $aReplaceValues = array();
  52 + var $sOutputEncoding = 'UTF-8';
  53 +
  54 + /**
  55 + * Constructor
  56 + *
  57 + * @param string $sZipFileName The name of the zip file - gets ignored at the moment.
  58 + * @param string $exportCode The code to use if a zip file has already been created.
  59 + */
  60 + function ZipFolder($sZipFileName, $exportCode = null) {
  61 + $this->oKTConfig =& KTConfig::getSingleton();
  62 + $this->oStorage =& KTStorageManagerUtil::getSingleton();
  63 +
  64 + $this->sOutputEncoding = $this->oKTConfig->get('export/encoding', 'UTF-8');
  65 +
  66 + $this->sPattern = "[\*|\%|\\\|\/|\<|\>|\+|\:|\?|\||\'|\"]";
  67 + $this->sFolderPattern = "[\*|\%|\<|\>|\+|\:|\?|\||\'|\"]";
  68 +
  69 + // If the export code exists then a temp zip directory has already been created
  70 + if(!empty($exportCode)){
  71 + $aData = KTUtil::arrayGet($_SESSION['zipcompression'], $exportCode);
  72 +
  73 + if(!empty($aData)){
  74 + $sTmpPath = $aData['dir'];
  75 + }
  76 + }else {
  77 + $sBasedir = $this->oKTConfig->get("urls/tmpDirectory");
  78 + $sTmpPath = tempnam($sBasedir, 'kt_compress_zip');
  79 +
  80 + unlink($sTmpPath);
  81 + mkdir($sTmpPath, 0755);
  82 + }
  83 +
  84 + // Hard coding the zip file name.
  85 + // It normally uses the folder name but if there are special characters in the name then it doesn't download properly.
  86 + $sZipFileName = 'kt_zip';
  87 +
  88 + $this->sTmpPath = $sTmpPath;
  89 + $this->sZipFileName = $sZipFileName;
  90 + $this->aPaths = array();
  91 +
  92 + $aReplace = array(
  93 + "[" => "[[]",
  94 + " " => "[ ]",
  95 + "*" => "[*]",
  96 + "?" => "[?]",
  97 + );
  98 +
  99 + $this->aReplaceKeys = array_keys($aReplace);
  100 + $this->aReplaceValues = array_values($aReplace);
  101 + }
  102 +
  103 + /**
  104 + * Return the full path
  105 + *
  106 + * @param mixed $oFolderOrDocument May be a Folder or Document
  107 + */
  108 + function getFullFolderPath($oFolder)
  109 + {
  110 + static $sRootFolder = null;
  111 +
  112 + if (is_null($sRootFolder))
  113 + {
  114 + $oRootFolder = Folder::get(1);
  115 + $sRootFolder = $oRootFolder->getName();
  116 + }
  117 +
  118 + $sFullPath = $sRootFolder . '/';
  119 + $sFullPath .= $oFolder->getFullPath();
  120 +
  121 +
  122 + if (substr($sFullPath,-1) == '/') $sFullPath = substr($sFullPath,0,-1);
  123 + return $sFullPath;
  124 + }
  125 +
  126 +
  127 + /**
  128 + * Add a document to the zip file
  129 + */
  130 + function addDocumentToZip($oDocument, $oFolder = null) {
  131 + if(empty($oFolder)){
  132 + $oFolder = Folder::get($oDocument->getFolderID());
  133 + }
  134 +
  135 + $sDocPath = $this->getFullFolderPath($oFolder);
  136 + $sDocPath = preg_replace($this->sFolderPattern, '-', $sDocPath);
  137 + $sDocPath = $this->_convertEncoding($sDocPath, true);
  138 +
  139 +
  140 + $sDocName = $oDocument->getFileName();
  141 + $sDocName = preg_replace($this->sPattern, '-', $sDocName);
  142 + $sDocName = $this->_convertEncoding($sDocName, true);
  143 +
  144 + $sParentFolder = $this->sTmpPath.'/'.$sDocPath;
  145 + $newDir = $this->sTmpPath;
  146 +
  147 + $aFullPath = split('/', $sDocPath);
  148 + foreach ($aFullPath as $dirPart) {
  149 + $newDir = sprintf("%s/%s", $newDir, $dirPart);
  150 + if (!file_exists($newDir)) {
  151 + mkdir($newDir, 0700);
  152 + }
  153 + }
  154 +
  155 + $sOrigFile = $this->oStorage->temporaryFile($oDocument);
  156 + $sFilename = $sParentFolder.'/'.$sDocName;
  157 + copy($sOrigFile, $sFilename);
  158 +
  159 + $this->aPaths[] = $sDocPath.'/'.$sDocName;
  160 + return true;
  161 + }
  162 +
  163 + /**
  164 + * Add a folder to the zip file
  165 + */
  166 + function addFolderToZip($oFolder) {
  167 + $sFolderPath = $this->getFullFolderPath($oFolder) .'/';
  168 + $sFolderPath = preg_replace($this->sFolderPattern, '-', $sFolderPath);
  169 + $sFolderPath = $this->_convertEncoding($sFolderPath, true);
  170 +
  171 + $newDir = $this->sTmpPath;
  172 +
  173 + $aFullPath = split('/', $sFolderPath);
  174 + foreach ($aFullPath as $dirPart) {
  175 + $newDir = sprintf("%s/%s", $newDir, $dirPart);
  176 + if (!file_exists($newDir)) {
  177 + mkdir($newDir, 0700);
  178 + }
  179 + }
  180 +
  181 + $this->aPaths[] = $sFolderPath;
  182 + return true;
  183 + }
  184 +
  185 + /**
  186 + * Zip the temp folder
  187 + */
  188 + function createZipFile($bEchoStatus = FALSE) {
  189 + if(empty($this->aPaths)){
  190 + return PEAR::raiseError(_kt("No folders or documents found to compress"));
  191 + }
  192 +
  193 + // Set environment language to output character encoding
  194 + $loc = $this->sOutputEncoding;
  195 + putenv("LANG=$loc");
  196 + putenv("LANGUAGE=$loc");
  197 + $loc = setlocale(LC_ALL, $loc);
  198 +
  199 +
  200 +
  201 + $sManifest = sprintf("%s/%s", $this->sTmpPath, "MANIFEST");
  202 + file_put_contents($sManifest, join("\n", $this->aPaths));
  203 + $sZipFile = sprintf("%s/%s.zip", $this->sTmpPath, $this->sZipFileName);
  204 + $sZipFile = str_replace('<', '', str_replace('</', '', str_replace('>', '', $sZipFile)));
  205 + $sZipCommand = KTUtil::findCommand("export/zip", "zip");
  206 + $aCmd = array($sZipCommand, "-r", $sZipFile, ".", "-i@MANIFEST");
  207 + $sOldPath = getcwd();
  208 + chdir($this->sTmpPath);
  209 +
  210 + // Note that the popen means that pexec will return a file descriptor
  211 + $aOptions = array('popen' => 'r');
  212 + $fh = KTUtil::pexec($aCmd, $aOptions);
  213 +
  214 + if($bEchoStatus){
  215 + $last_beat = time();
  216 + while(!feof($fh)) {
  217 + if ($i % 1000 == 0) {
  218 + $this_beat = time();
  219 + if ($last_beat + 1 < $this_beat) {
  220 + $last_beat = $this_beat;
  221 + print "&nbsp;";
  222 + }
  223 + }
  224 + $contents = fread($fh, 4096);
  225 + if ($contents) {
  226 + print nl2br($this->_convertEncoding($contents, false));
  227 + }
  228 + $i++;
  229 + }
  230 + }
  231 + pclose($fh);
  232 +
  233 + // Save the zip file and path into session
  234 + $_SESSION['zipcompression'] = KTUtil::arrayGet($_SESSION, 'zipcompression', array());
  235 + $sExportCode = KTUtil::randomString();
  236 + $_SESSION['zipcompression'][$sExportCode] = array(
  237 + 'file' => $sZipFile,
  238 + 'dir' => $this->sTmpPath,
  239 + );
  240 + $_SESSION['zipcompression']['exportcode'] = $sExportCode;
  241 +
  242 + $this->sZipFile = $sZipFile;
  243 + return $sExportCode;
  244 + }
  245 +
  246 + /**
  247 + * Download the zip file
  248 + */
  249 + function downloadZipFile($exportCode = NULL) {
  250 + if(!(isset($exportCode) && !empty($exportCode))) {
  251 + $exportCode = KTUtil::arrayGet($_SESSION['zipcompression'], 'exportcode');
  252 + }
  253 +
  254 + $aData = KTUtil::arrayGet($_SESSION['zipcompression'], $exportCode);
  255 +
  256 + if(!empty($aData)){
  257 + $sZipFile = $aData['file'];
  258 + $sTmpPath = $aData['dir'];
  259 + }else{
  260 + $sZipFile = $this->sZipFile;
  261 + $sTmpPath = $this->sTmpPath;
  262 + }
  263 +
  264 + if (!file_exists($sZipFile)) {
  265 + return PEAR::raiseError(_kt('The ZIP file can only be downloaded once - if you cancel the download, you will need to reload the page.'));
  266 + }
  267 +
  268 + $mimeType = 'application/zip; charset=utf-8;';
  269 + $fileSize = filesize($sZipFile);
  270 + $fileName = $this->sZipFileName . '.zip';
  271 +
  272 + KTUtil::download($sZipFile, $mimeType, $fileSize, $fileName);
  273 + KTUtil::deleteDirectory($sTmpPath);
  274 + return true;
  275 + }
  276 +
  277 + /**
  278 + * Check that iconv exists and that the selected encoding is supported.
  279 + */
  280 + function checkConvertEncoding() {
  281 + if(!function_exists("iconv")) {
  282 + return PEAR::raiseError(_kt('IConv PHP extension not installed. The zip file compression could not handle output filename encoding conversion !'));
  283 + }
  284 + $oKTConfig = $this->oKTConfig;
  285 + $this->sOutputEncoding = $oKTConfig->get('export/encoding', 'UTF-8');
  286 +
  287 + // Test the specified encoding
  288 + if(iconv("UTF-8", $this->sOutputEncoding, "") === FALSE) {
  289 + return PEAR::raiseError(_kt('Specified output encoding for the zip files compression does not exists !'));
  290 + }
  291 + return true;
  292 + }
  293 +
  294 + function _convertEncoding($sMystring, $bEncode) {
  295 + if (strcasecmp($this->sOutputEncoding, "UTF-8") === 0) {
  296 + return $sMystring;
  297 + }
  298 + if ($bEncode) {
  299 + return iconv("UTF-8", $this->sOutputEncoding, $sMystring);
  300 + } else {
  301 + return iconv($this->sOutputEncoding, "UTF-8", $sMystring);
  302 + }
  303 + }
  304 +}
305 305 ?>
... ...