Commit b1fdb3859a28d77072e45cec325106d40ee35441
1 parent
1f2708d5
Merged in from DEV trunk...
Updated license header in two omitted files. WSA-72 "Add missing fields to document detail structure in web services" Updated. Committed By: Conrad Vermeulen Reviewed By: Megan Watson KTS-2730 "When adding a document, the document util's add function dies on encountering an unlink" Updated. Committed By: Conrad Vermeulen Reviewed By: Megan Watson WSA-49 "Add missing fields to search structure in web services" Updated. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2732 "Create a new way to setup resources in plugins" Fixed. Added a function to the base class called run_setup that gets called when the plugins are loaded. Committed by: Megan Watson Reviewed by: Conrad Vermeulen WSA-78 "download manager does not construct a full url for the webservice download" Fixed. Committed By: Conrad Vermeulen Reviewed By: Martin Kirsten KTS-2733 "Colouration of DiskUsageDashlet is incorrect" Fixed. Thanks Dirk! Committed By: Kevin Fourie Reviewed By: Jonathan Byrne KTC-271 "Bulk upload does not work" Fixed. Added 'temp_file' to the options array. KTC-273 "All files uploaded with the function 'Import from Server Location' has a size of 0kb after upload" Fixed. Committed by: Megan Watson Reviewed by: Conrad Vermeulen KTS-2734 "sanitize to html removes information from data stored in the database. It was discovered that slashes were removed" Updated. Committed By: Conrad Vermeulen Reviewed By: Philip Arckoll KTS-2735 "Metadata values should not be sanitized until display on whichever interface." Updated. Committed By: Conrad Vermeulen Reviewed By: Philip Arckoll KTS-2736 "Metadata values constrained to 255 characters. some clients want larger values." Updated. Committed By: Conrad Vermeulen Reviewed By: Philip Arckoll KTC-275 "Files that are uploaded with the 'Import from Server Location' is MOVED instead of COPIED to the DMS." Fixed. Added a flag to aOptions to copy a file when uploading to the DMS instead of moving it. Committed By: Megan Watson Reviewed By: Conrad Vermeulen KTS-2301 "Number of characters allowed in a field is not 250 as is mostly specified" Updated. Changed filename and comment to be mediumtext compatible with other fields in other tables. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie WSA-76 "Update unit tests for document detail in web service" Updated. Added missing fields. WSA-79 "cater for custom_document_no and oem_document_id in webservices" Updated. Added placeholders for future use. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie WSA-77 "Update unit tests for search structure in web service" Updated. Added missing fields. WSA-79 "cater for custom_document_no and oem_document_id in webservices" Updated. Added placeholders for future use. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie WSA-75 "Create unit test for get_folder_contents in web services" Updated. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie WSA-49 "Improve the document_detail and folder_detail records to incorporate more fields available on the document" Updated. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2737 "Folder util sanitises too much which results in additional slashes being added to the database" Updated. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie WSA-77 "Update unit tests for search structure in web service" Updated. Added missing fields. WSA-79 "cater for custom_document_no and oem_document_id in webservices" Updated. Added placeholders for future use. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2744 "Documents are not being indexed in the queue" Fixed. Using new exec system. Committed By: Kevin Fourie Reviewed By: Conrad Vermeulen KTS-2708 "Refactor plugins registration and loading" Updated. Added the upgrade sql. Committed by: Kevin Fourie Reviewed by: Conrad Vermeulen KTS-2745 "More detailed errors need to be returned when a failure occurs when adding a document." Fixed. Added more detailed error messages. Committed By: Jonathan Byrne Reviewed By: Jalaloedien Abrahams KTS-2718 "Tags added to documents when the Tag Cloud add-in is disabled does not show in that Tag Cloud Dashlet once it has been enabled again." Fixed. Moved tag cloud trigger into core so it isn't dependant on the plugin. Committed By: Jonathan Byrne Reviewed By: Kevin Fourie KTS-2708 "Refactor plugins registration and loading" Updated. Added the upgrade sql. Committed by: Kevin Fourie Reviewed by: Conrad Vermeulen KTS-2600 "Document Indexer Statistics Dashlet - improve text / US spelling / Capitalization / Link to Management Page" Fixed. Committed By:Yusuf Davids Reviewed By:Jalaloedien Abrahams KTS-2646 "Database exception handler needs to be fixed" Fixed. All database errors are now logged and the user is sent to an improved page. Committed By:Yusuf Davids Reviewed By:Jalaloedien Abrahams KTS-2645 " A general exception handler is required to deal with thrown exceptions not caught by the application" Fixed. Committed By:Yusuf Davids Reviewed By:Jalaloedien Abrahams KTC-256 "UI not displaying correctly" Fixed. UI changed. Committed By:Yusuf Davids Reviewed By:Jalaloedien Abrahams KTS-2748 "Wrong filesize units at DiskUsageDashlet and zero-byte lines" Fixed. Corrected parition and filesize methods and catered to 0 size file. Committed By: Kevin Fourie Reviewed By: Jonathan Byrne Updated SVN tags. Committed By: Kevin Fourie Reviewed By: Jonathan Byrne KTC-239 "CLONE -Performance has become tragically slow (SUP-443)" Fixed. Added the DB optimise script to the scheduler. Modified the script to log messages instead of printing them. Added a check on the id to the scheduler tasks in the upgrade script. Committed by: Megan Watson Reviewed by: Conrad Vermeulen KTS-2748 "Wrong filesize units at DiskUsageDashlet and zero-byte lines" Updated. Fixed use of incorrect constants (replaced MEGA with MB). Committed by: Megan Watson Reviewed by: Conrad Vermeulen KTS-2746 "CLONE -Put the custom metadata fields in alphabetical order(SUP-304)" Fixed. Added a new config under ui. Put a usort on the fields. Committed by: Megan Watson Reviewed by: Conrad Vermeulen WSA-87 "Comparison of folders when validating upload path does not work on windows correctly" Fixed. Refactored some functionality and made the path seperator consistent. Committed By: Conrad Vermeulen Reviewed By: Isaac Lundal KTS-2751 "Logging statement in trigger registry has typo. this can cause php to bomb!" Fixed. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2752 "Folder Usage plugin must check the existance of the folder it is scanning" Fixed. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2600 "Document Indexer Statistics Dashlet - improve text / US spelling / Capitalization / Link to Management Page" Fixed. Committed By:Yusuf Davids Reviewed By:Jalaloedien Abrahams KTC-277 "Tags associated to documents that have been deleted still show in the Tag Clouds dashlet." Fixed. Altered the dashlet query. Committed By: Jalaloedien Abrahams Reviewed By: Conrad Vermeulen KTS-1850 "Major performance issue - SQL query" Fixed. Incorporated some of the changes from the optimisation patch into the core. Committed by: Megan Watson Reviewed by: Conrad Vermeulen KTS-2606 "KnowledgeTree 3.5 requires php5 to be installed. It should detect php4 and provide an elegant error message that it is no longer supported." Fixed. Inserted phpversion check in dmsDefaults.php. Committed By:Yusuf Davids Reviewed By:Jonathan Byrne WSA-87 "Comparison of folders when validating upload path does not work on windows correctly" Fixed. Refactored some functionality and made the path seperator consistent. Path was not being returned correctly in some cases. Committed By: Conrad Vermeulen Reviewed By: Isaac Lundal KTS-1850 "Major performance issue - SQL query" Updated. Removed lines replaced by the patch. Committed by: Megan Watson Reviewed by: Conrad Vermeulen Version bump to 3.5.2 Beta1 KTS-2669 "Discussion thread text rendering creates <br> tags" Fixed. Updated sanitize. Committed By:Yusuf Davids Reviewed By:Jonathan Byrne KTC-239 "CLONE -Performance has become tragically slow (SUP-443)" Updated. Added the @ sign in front of id when inserting. Committed by: Martin Kirsten Reviewed by: Megan Watson KTC-292 "Minor version does not increase when the Document Title is changed." Fixed. Added a new content version and updated the version number. Committed by: Megan Watson Reviewed by: Jonathan Byrne KTS- "" Updated. Location of error.css changed. Committed By:Yusuf Davids Reviewed By: KTS- "" Updated. Location of error_01.gif and error.css changed. Committed By:Yusuf Davids Reviewed By: KTS-2709 "After re-activating the Tag Cloud plugin this does not work" Fixed. Hid Tag fieldset and linked it to tag cloud plugin. Committed By: Jonathan Byrne Reviewed By: Jalaoedien Abrahams KTS-2759 "Extend scheduler looping every 30 seconds by default vs 10 seconds" Updated. Also added copyright. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2760 "Powerpoint files not being indexed" Fixed. powerpoint was missing. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2761 "Last run time in Indexer Dashlet is not updated" Updated. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2761 "Last run time in Indexer Dashlet is not updated" Fixed. queue updated to reflect live files only. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2762 "KTUtil::filesizeToString returns wrong filesizes" Updated. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie BBS-868 "CLONE -Login - remember password" Added a client policy to the server. Committed By: Isaac Lundall Reviewed By: Martin Kirsten KTS-2754 "Add a Document Fails" Updated. Added better error checking. Committed By: Kevin Fourie Reviewed By: Conrad Vermeulen KTS-2763 "pdf extractor does not have quotes around application name. this results in pdftotext not being called correcly in windows." Fixed. Committed By: Conrad Vermeulen Reviewed By: Jonathan Byrne KTC-296 "Bulk Download scrambles the folder hierarchy and only exports the first non-empty subfolder." Fixed. The document paths were missing the last folder in the path and being added to the one below. Committed by: Megan Watson Reviewed by: Conrad Vermeulen KTS-2157 "bulk upload does not validate that file is a zip file." Fixed. Added a check on the file type. Committed By: Megan Watson Reviewed By: Conrad Vermeulen Version bump to 3.5.2 beta1 KTS-2765 "csv mime type does not have an icon" Updated. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie KTS-2765 "csv mime type does not have an icon" Updated. Added omitted upgrades table entries. Committed By: Kevin Fourie Reviewed By: Conrad Vermeulen git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/STABLE/trunk@7812 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
85 changed files
with
2849 additions
and
1966 deletions
bin/dbmaint.php
| ... | ... | @@ -2,51 +2,57 @@ |
| 2 | 2 | |
| 3 | 3 | require_once('../config/dmsDefaults.php'); |
| 4 | 4 | |
| 5 | -print _kt('DB Maintenance') . "...\n\n"; | |
| 6 | - | |
| 7 | 5 | $action = 'check'; |
| 8 | 6 | $sqlaction = 'check table'; |
| 9 | 7 | if ($argc > 0) |
| 10 | 8 | { |
| 11 | 9 | foreach($argv as $arg) |
| 12 | 10 | { |
| 13 | - $arg=strtolower($arg); | |
| 14 | - switch ($arg) | |
| 11 | + $action=strtolower($arg); | |
| 12 | + switch ($action) | |
| 15 | 13 | { |
| 16 | - case 'check': | |
| 17 | 14 | case 'repair': |
| 15 | + $sqlaction='repair table'; | |
| 16 | + break; | |
| 18 | 17 | case 'optimize': |
| 19 | - $sqlaction="$arg table"; | |
| 20 | - $action = $arg; | |
| 18 | + $sqlaction='optimize table'; | |
| 21 | 19 | break; |
| 22 | 20 | case 'help': |
| 23 | 21 | print "Usage: dbmaint.php repair|check|optimize\n"; |
| 24 | 22 | exit; |
| 23 | + case 'check': | |
| 24 | + default: | |
| 25 | + $action = 'check'; | |
| 26 | + $sqlaction='check table'; | |
| 27 | + break; | |
| 25 | 28 | } |
| 26 | 29 | } |
| 27 | 30 | } |
| 28 | 31 | |
| 29 | -print '* ' . sprintf(_kt("Action selected: %s"), $action) . "\n\n"; | |
| 32 | +$default->log->info("DB Maintenance... \nAction selected: {$action}"); | |
| 30 | 33 | |
| 31 | 34 | $sql = "show tables"; |
| 32 | 35 | $tables = DBUtil::getResultArray($sql); |
| 33 | -foreach($tables as $table) | |
| 34 | -{ | |
| 35 | - $key = array_keys($table); | |
| 36 | - | |
| 37 | - $tablename=$table[$key[0]]; | |
| 38 | - $sql = "$sqlaction $tablename"; | |
| 39 | - $result = DBUtil::getOneResult($sql); | |
| 40 | 36 | |
| 41 | - if (PEAR::isError($result)) | |
| 42 | - { | |
| 43 | - print sprintf(_kt("Attempted: %s"), $sql) . "\n"; | |
| 44 | - print sprintf(_kt(' *: %s'), $result->getMessage()) . "\n"; | |
| 45 | - continue; | |
| 46 | - } | |
| 47 | - print sprintf(_kt("Running: %s - %s"), $sql, $result['Msg_text']) . "\n"; | |
| 37 | +if(!empty($tables)){ | |
| 38 | + foreach($tables as $table) | |
| 39 | + { | |
| 40 | + $key = array_keys($table); | |
| 41 | + | |
| 42 | + $tablename=$table[$key[0]]; | |
| 43 | + $sql = "$sqlaction $tablename;"; | |
| 44 | + $result = DBUtil::getOneResult($sql); | |
| 45 | + | |
| 46 | + if (PEAR::isError($result)) | |
| 47 | + { | |
| 48 | + $default->log->error('Attempted: '.$sql); | |
| 49 | + $default->log->error(' *: '.$result->getMessage()); | |
| 50 | + continue; | |
| 51 | + } | |
| 52 | + $default->log->info('Running: '.$sql .' - '. $result['Msg_text']); | |
| 53 | + } | |
| 48 | 54 | } |
| 49 | 55 | |
| 50 | -print _kt('Done.') . "\n"; | |
| 56 | +$default->log->info('Done.'); | |
| 51 | 57 | |
| 52 | 58 | ?> |
| 53 | 59 | \ No newline at end of file | ... | ... |
bin/scheduler.php
| ... | ... | @@ -199,13 +199,16 @@ if (empty($aList)) |
| 199 | 199 | $dirname = dirname($file); |
| 200 | 200 | chdir($dirname); |
| 201 | 201 | |
| 202 | - $cmd = "$phpPath $cmd"; | |
| 202 | + $cmd = "\"$phpPath\" $cmd"; | |
| 203 | 203 | } |
| 204 | 204 | |
| 205 | 205 | if (OS_WINDOWS) |
| 206 | - { | |
| 207 | - $cmd = str_replace( '/','\\',$cmd); | |
| 208 | - $res = `$cmd`; | |
| 206 | + { $default->log->info("Scheduler - dirname: $dirname cmd: $cmd"); | |
| 207 | + //$WshShell = new COM("WScript.Shell"); | |
| 208 | + //$res = $WshShell->Run($cmd, 0, true); | |
| 209 | + | |
| 210 | + KTUtil::pexec($cmd); | |
| 211 | + | |
| 209 | 212 | } |
| 210 | 213 | else |
| 211 | 214 | { | ... | ... |
bin/win32/schedulerService.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | +/** | |
| 4 | + * $Id: $ | |
| 5 | + * | |
| 6 | + * KnowledgeTree Open Source Edition | |
| 7 | + * Document Management Made Simple | |
| 8 | + * Copyright (C) 2004 - 2007 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 The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | |
| 23 | + * Blake Street, Observatory, 7925 South Africa. 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 | + | |
| 3 | 39 | $myservicename = 'ktscheduler'; |
| 4 | 40 | |
| 5 | 41 | // Connect to service dispatcher and notify that startup was successful |
| ... | ... | @@ -12,7 +48,7 @@ require_once('../../config/dmsDefaults.php'); |
| 12 | 48 | global $default; |
| 13 | 49 | |
| 14 | 50 | $config = KTConfig::getSingleton(); |
| 15 | -$schedulerInterval = $config->get('KnowledgeTree/schedulerInterval',10); // interval in seconds | |
| 51 | +$schedulerInterval = $config->get('KnowledgeTree/schedulerInterval',30); // interval in seconds | |
| 16 | 52 | //$phpPath = $config->get('externalBinary/php','php'); // TODO - fix me |
| 17 | 53 | |
| 18 | 54 | // Change to knowledgeTree/bin folder |
| ... | ... | @@ -48,13 +84,16 @@ while ($loop) |
| 48 | 84 | win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); // Add more cases to handle other service calls |
| 49 | 85 | } |
| 50 | 86 | // Run the scheduler script |
| 51 | - $cmd = "\"$phpPath\" scheduler.php"; | |
| 87 | + $cmd = "\"$phpPath\" \"$dir/scheduler.php\""; | |
| 88 | +$default->log->info('Scheduler Service: cmd - ' .$cmd ); | |
| 52 | 89 | |
| 53 | - $cmd = str_replace( '/','\\',$cmd); | |
| 54 | - $res = `"$cmd" 2>&1`; | |
| 90 | + $WshShell = new COM("WScript.Shell"); | |
| 91 | + $res = $WshShell->Run($cmd, 0, true); | |
| 92 | + //$cmd = str_replace( '/','\\',$cmd); | |
| 93 | + //$res = `$cmd 2>&1`; | |
| 55 | 94 | if (!empty($res)) |
| 56 | 95 | { |
| 57 | - $default->log->error('Scheduler: unexpected output - ' .$res); | |
| 96 | + $default->log->error('Scheduler Service: unexpected output - ' .$res); | |
| 58 | 97 | } |
| 59 | 98 | |
| 60 | 99 | sleep($schedulerInterval); | ... | ... |
config/config.ini
| ... | ... | @@ -135,6 +135,9 @@ fakeMimetype = default |
| 135 | 135 | ; "dot" command location |
| 136 | 136 | dot = dot |
| 137 | 137 | |
| 138 | +; sort the metadata fields alphabetically | |
| 139 | +metadata_sort = true | |
| 140 | + | |
| 138 | 141 | [i18n] |
| 139 | 142 | ; Default language for the interface |
| 140 | 143 | defaultLanguage = en |
| ... | ... | @@ -197,7 +200,7 @@ uiUrl = ${rootUrl}/presentation/lookAndFeel/knowledgeTree |
| 197 | 200 | |
| 198 | 201 | ;dedicated feed url |
| 199 | 202 | ;dedicatedrsstitle = RSS Feed Title |
| 200 | -;dedicatedrssurl = | |
| 203 | +;dedicatedrssurl = | |
| 201 | 204 | |
| 202 | 205 | ; files |
| 203 | 206 | stopwordsFile = ${fileSystemRoot}/config/stopwords.txt |
| ... | ... | @@ -351,6 +354,8 @@ captureReasonsCheckout = true |
| 351 | 354 | captureReasonsCancelCheckout = true |
| 352 | 355 | captureReasonsCopyInKT = true |
| 353 | 356 | captureReasonsMoveInKT = true |
| 357 | +;This setting governs whether the password can be stored on the client. | |
| 358 | +allowRememberPassword = true | |
| 354 | 359 | |
| 355 | 360 | ; settings for the Disk Usage dashlet |
| 356 | 361 | [DiskUsage] |
| ... | ... | @@ -362,3 +367,10 @@ warningThreshold=10 |
| 362 | 367 | ; the disk usage dashlet will will highlight the mount in RED |
| 363 | 368 | urgentThreshold=5 |
| 364 | 369 | |
| 370 | +[CustomErrorMessages] | |
| 371 | +;Turn custom error messages on or off here // account wide | |
| 372 | +customerrormessages=on | |
| 373 | +;name or url of custom error page | |
| 374 | +customerrorpagepath=customerrorpage.php | |
| 375 | +;Turn custom error handler on or off | |
| 376 | +customerrorhandler=on | |
| 365 | 377 | \ No newline at end of file | ... | ... |
config/dmsDefaults.php
| ... | ... | @@ -353,8 +353,20 @@ class KTInit { |
| 353 | 353 | } |
| 354 | 354 | return false; |
| 355 | 355 | } |
| 356 | + | |
| 356 | 357 | // }}} |
| 357 | 358 | |
| 359 | +function catchFatalErrors($p_OnOff='On'){ | |
| 360 | + ini_set('display_errors','On'); | |
| 361 | + $phperror='><div id="phperror" style="display:none">'; | |
| 362 | + ini_set('error_prepend_string',$phperror); | |
| 363 | + | |
| 364 | + $phperror='</div>><form name="catcher" action="/customerrorpage.php" method="post" ><input type="hidden" name="fatal" value=""></form> | |
| 365 | + <script> document.catcher.fatal.value = document.getElementById("phperror").innerHTML; document.catcher.submit();</script>'; | |
| 366 | + ini_set('error_append_string',$phperror); | |
| 367 | +} | |
| 368 | + | |
| 369 | + | |
| 358 | 370 | |
| 359 | 371 | // {{{ guessRootUrl() |
| 360 | 372 | function guessRootUrl() { |
| ... | ... | @@ -505,6 +517,8 @@ class KTInit { |
| 505 | 517 | $oKTConfig->setdefaultns('clientToolPolicies', 'captureReasonsCopyInKT', true); |
| 506 | 518 | $oKTConfig->setdefaultns('clientToolPolicies', 'captureReasonsMoveInKT', true); |
| 507 | 519 | |
| 520 | + $oKTConfig->setdefaultns('clientToolPolicies', 'allowRememberPassword', true); | |
| 521 | + | |
| 508 | 522 | $res = $this->readConfig(); |
| 509 | 523 | if (PEAR::isError($res)) { return $res; } |
| 510 | 524 | |
| ... | ... | @@ -595,6 +609,21 @@ require_once(KT_LIB_DIR . '/util/ktutil.inc'); |
| 595 | 609 | |
| 596 | 610 | require_once(KT_LIB_DIR . '/ktentity.inc'); |
| 597 | 611 | |
| 612 | +$KTInit->catchFatalErrors(); | |
| 613 | + | |
| 614 | +if (phpversion()<5){ | |
| 615 | + | |
| 616 | + $sErrorPage = 'http://'.$_SERVER['HTTP_HOST'].'/'.'customerrorpage.php'; | |
| 617 | + | |
| 618 | + session_start(); | |
| 619 | + | |
| 620 | + $_SESSION['sErrorMessage'] = 'KnowledgeTree now requires that PHP version 5 is installed. PHP version 4 is no longer supported.'; | |
| 621 | + | |
| 622 | + | |
| 623 | + header('location:'. $sErrorPage ) ; | |
| 624 | + | |
| 625 | +} | |
| 626 | + | |
| 598 | 627 | require_once(KT_LIB_DIR . '/config/config.inc.php'); |
| 599 | 628 | require_once(KT_DIR . '/search2/indexing/indexerCore.inc.php'); |
| 600 | 629 | ... | ... |
customerrorpage.php
0 โ 100644
| 1 | +<?php | |
| 2 | + | |
| 3 | +if (array_key_exists('fatal', $_POST)) | |
| 4 | +{ | |
| 5 | + $posted = $_POST['fatal']; | |
| 6 | + | |
| 7 | +} | |
| 8 | + | |
| 9 | +if (array_key_exists('Error_MessageOne', $_POST) && array_key_exists('Error_MessageTwo', $_POST)) | |
| 10 | +{ | |
| 11 | + $sErrorMessage = $_POST['Error_MessageOne'].''.$_POST['Error_MessageTwo']; | |
| 12 | + | |
| 13 | +} | |
| 14 | + | |
| 15 | +session_start(); | |
| 16 | +if (array_key_exists('sErrorMessage', $_SESSION)) | |
| 17 | +{ | |
| 18 | +$phperror = $_SESSION['sErrorMessage']; | |
| 19 | +} | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | +?> | |
| 24 | + | |
| 25 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html> | |
| 26 | + <head> | |
| 27 | + <title>Knowledgetree - Desklet</title> | |
| 28 | + <link rel="stylesheet" type="text/css" href="/resources/css/errors.css" /> | |
| 29 | + | |
| 30 | + <script type="text/javascript"> | |
| 31 | + | |
| 32 | +function Click() | |
| 33 | +{ | |
| 34 | +var open = document.getElementById('exp'); | |
| 35 | +open.style.display = 'block'; | |
| 36 | +} | |
| 37 | + | |
| 38 | +</script> | |
| 39 | + | |
| 40 | + </head> | |
| 41 | + <body> | |
| 42 | + | |
| 43 | + <div id="error-container"> | |
| 44 | + | |
| 45 | + <div id="acc-error"> | |
| 46 | + | |
| 47 | + | |
| 48 | + <h1>Error!! - You have encountered a problem starting your document management system.</h1> | |
| 49 | + <p><h2>Please contact your systems administrator</h2></p> | |
| 50 | + <p>For more details, click here <img src="/resources/graphics/info.gif" style="cursor: pointer;" onclick="Click()" /><div id ="exp" style="display: none; "> <?php if(isset($sErrorMessage)){ echo $sErrorMessage; }else if(isset($posted)){ echo $posted; } else if($phperror){ echo $phperror; } ?></div></p> | |
| 51 | + | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + | |
| 55 | + </body> | |
| 56 | +</html> | |
| 0 | 57 | \ No newline at end of file | ... | ... |
docs/VERSION-NAME.txt
docs/VERSION-OSS.txt
error_01.gif
0 โ 100644
2.09 KB
errors.css
0 โ 100644
| 1 | +div#error-container { | |
| 2 | + width: 500px; | |
| 3 | + color: #555; | |
| 4 | + font-size: 11px; | |
| 5 | + font-family: Verdana, Arial, sans-serif; | |
| 6 | +} | |
| 7 | +div#error-container div { | |
| 8 | + height: 140px; | |
| 9 | +} | |
| 10 | +div#error-container h1 { | |
| 11 | + font-weight: lighter; | |
| 12 | + font-size: 22px; | |
| 13 | + margin-left: 100px; | |
| 14 | +} | |
| 15 | +div#error-container p { | |
| 16 | + margin-left: 100px; | |
| 17 | +} | |
| 18 | + | |
| 19 | + div#acc-error { | |
| 20 | + background: transparent url(error_01.gif) no-repeat top left; | |
| 21 | + } | |
| 22 | + div#acc-suspend { | |
| 23 | + background: transparent url(error_02.gif) no-repeat top left; | |
| 24 | + } | |
| 25 | + div#acc-maint { | |
| 26 | + background: transparent url(error_03.gif) no-repeat top left; | |
| 27 | + } | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 0 | 44 | \ No newline at end of file | ... | ... |
ktapi/KTAPIDocument.inc.php
| ... | ... | @@ -35,6 +35,8 @@ |
| 35 | 35 | * |
| 36 | 36 | */ |
| 37 | 37 | |
| 38 | +//require_once(KT_DIR . '/ktwebservice/KTUploadManager.inc.php'); | |
| 39 | + | |
| 38 | 40 | class KTAPI_Document extends KTAPI_FolderItem |
| 39 | 41 | { |
| 40 | 42 | /** |
| ... | ... | @@ -175,14 +177,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 175 | 177 | } |
| 176 | 178 | DBUtil::commit(); |
| 177 | 179 | |
| 178 | - $tempfilename=addslashes($tempfilename); | |
| 179 | - $sql = "DELETE FROM uploaded_files WHERE tempfilename='$tempfilename'"; | |
| 180 | - $result = DBUtil::runQuery($sql); | |
| 181 | - if (PEAR::isError($result)) | |
| 182 | - { | |
| 183 | - return $result; | |
| 184 | - } | |
| 185 | - | |
| 180 | + KTUploadManager::temporary_file_imported($tempfilename); | |
| 186 | 181 | } |
| 187 | 182 | |
| 188 | 183 | /** |
| ... | ... | @@ -261,7 +256,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 261 | 256 | return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res); |
| 262 | 257 | } |
| 263 | 258 | |
| 264 | - $oDocumentTransaction = & new DocumentTransaction($this->document, $reason, 'ktcore.transactions.force_checkin'); | |
| 259 | + $oDocumentTransaction = new DocumentTransaction($this->document, $reason, 'ktcore.transactions.force_checkin'); | |
| 265 | 260 | |
| 266 | 261 | $res = $oDocumentTransaction->create(); |
| 267 | 262 | if (($res === false) || PEAR::isError($res)) { |
| ... | ... | @@ -280,13 +275,15 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 280 | 275 | dcv.size, |
| 281 | 276 | w.name as workflow, |
| 282 | 277 | ws.name as workflow_state, |
| 283 | - dlt.name as link_type | |
| 278 | + dlt.name as link_type, dtl.name as document_type, | |
| 279 | + dcv.major_version, dcv.minor_version | |
| 284 | 280 | FROM |
| 285 | 281 | document_link dl |
| 286 | 282 | INNER JOIN document_link_types dlt ON dl.link_type_id=dlt.id |
| 287 | 283 | INNER JOIN documents d ON dl.child_document_id=d.id |
| 288 | 284 | INNER JOIN document_metadata_version dmv ON d.metadata_version_id=dmv.id |
| 289 | 285 | INNER JOIN document_content_version dcv ON dmv.content_version_id=dcv.id |
| 286 | + INNER JOIN document_types_lookup dtl ON dtl.id=dmv.document_type_id | |
| 290 | 287 | LEFT OUTER JOIN workflow_documents wd ON d.id=wd.document_id |
| 291 | 288 | LEFT OUTER JOIN workflows w ON w.id=wd.workflow_id |
| 292 | 289 | LEFT OUTER JOIN workflow_states ws ON wd.state_id=ws.id |
| ... | ... | @@ -319,8 +316,12 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 319 | 316 | |
| 320 | 317 | $result[] = array( |
| 321 | 318 | 'document_id'=>(int)$row['document_id'], |
| 319 | + 'custom_document_no'=>'n/a', | |
| 320 | + 'oem_document_no'=>'n/a', | |
| 322 | 321 | 'title'=> $row['title'], |
| 323 | - 'size'=>(int)$row['size'], | |
| 322 | + 'document_type'=> $row['document_type'], | |
| 323 | + 'version'=> (float) ($row['major_version'] . '.' . $row['minor_version']), | |
| 324 | + 'filesize'=>(int)$row['size'], | |
| 324 | 325 | 'workflow'=>empty($row['workflow'])?'n/a':$row['workflow'], |
| 325 | 326 | 'workflow_state'=>empty($row['workflow_state'])?'n/a':$row['workflow_state'], |
| 326 | 327 | 'link_type'=>empty($row['link_type'])?'unknown':$row['link_type'], |
| ... | ... | @@ -432,7 +433,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 432 | 433 | return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res ); |
| 433 | 434 | } |
| 434 | 435 | |
| 435 | - $oDocumentTransaction = & new DocumentTransaction($this->document, $reason, 'ktcore.transactions.permissions_change'); | |
| 436 | + $oDocumentTransaction = new DocumentTransaction($this->document, $reason, 'ktcore.transactions.permissions_change'); | |
| 436 | 437 | |
| 437 | 438 | $res = $oDocumentTransaction->create(); |
| 438 | 439 | if (($res === false) || PEAR::isError($res)) { |
| ... | ... | @@ -776,7 +777,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 776 | 777 | return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $res); |
| 777 | 778 | } |
| 778 | 779 | |
| 779 | - $oDocumentTransaction = & new DocumentTransaction($this->document, sprintf(_kt('Document archived: %s'), $reason), 'ktcore.transactions.update'); | |
| 780 | + $oDocumentTransaction = new DocumentTransaction($this->document, sprintf(_kt('Document archived: %s'), $reason), 'ktcore.transactions.update'); | |
| 780 | 781 | $oDocumentTransaction->create(); |
| 781 | 782 | |
| 782 | 783 | DBUtil::commit(); |
| ... | ... | @@ -1339,7 +1340,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1339 | 1340 | $workflowid=$this->document->getWorkflowId(); |
| 1340 | 1341 | if (empty($workflowid)) |
| 1341 | 1342 | { |
| 1342 | - return new PEAR_Error(KTAPI_ERROR_WORKFLOW_NOT_IN_PROGRESS); | |
| 1343 | + return array(); | |
| 1343 | 1344 | } |
| 1344 | 1345 | |
| 1345 | 1346 | $result = array(); |
| ... | ... | @@ -1402,126 +1403,169 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1402 | 1403 | // make sure we ge tthe latest |
| 1403 | 1404 | $this->clearCache(); |
| 1404 | 1405 | |
| 1406 | + $config = KTConfig::getSingleton(); | |
| 1407 | + $wsversion = $config->get('webservice/version', LATEST_WEBSERVICE_VERSION); | |
| 1408 | + | |
| 1405 | 1409 | $detail = array(); |
| 1406 | 1410 | $document = $this->document; |
| 1407 | 1411 | |
| 1412 | + // get the document id | |
| 1413 | + $detail['document_id'] = (int) $document->getId(); | |
| 1414 | + | |
| 1415 | + $detail['custom_document_no'] = 'n/a'; | |
| 1416 | + $detail['oem_document_no'] = 'n/a'; | |
| 1417 | + | |
| 1418 | + // get the title | |
| 1408 | 1419 | $detail['title'] = $document->getName(); |
| 1409 | 1420 | |
| 1421 | + // get the document type | |
| 1410 | 1422 | $documenttypeid=$document->getDocumentTypeID(); |
| 1423 | + $documenttype = '* unknown *'; | |
| 1411 | 1424 | if (is_numeric($documenttypeid)) |
| 1412 | 1425 | { |
| 1413 | - $documenttype = DocumentType::get($documenttypeid); | |
| 1426 | + $dt = DocumentType::get($documenttypeid); | |
| 1414 | 1427 | |
| 1415 | - $documenttype=$documenttype->getName(); | |
| 1416 | - } | |
| 1417 | - else | |
| 1418 | - { | |
| 1419 | - $documenttype = '* unknown *'; | |
| 1428 | + if (!is_null($dt) && !PEAR::isError($dt)) | |
| 1429 | + { | |
| 1430 | + $documenttype=$dt->getName(); | |
| 1431 | + } | |
| 1420 | 1432 | } |
| 1421 | 1433 | $detail['document_type'] = $documenttype; |
| 1422 | 1434 | |
| 1423 | - $detail['version'] = $document->getVersion(); | |
| 1435 | + // get the filename | |
| 1424 | 1436 | $detail['filename'] = $document->getFilename(); |
| 1425 | 1437 | |
| 1426 | - $detail['created_date'] = $document->getCreatedDateTime(); | |
| 1438 | + // get the filesize | |
| 1439 | + $detail['filesize'] = (int) $document->getFileSize(); | |
| 1440 | + | |
| 1441 | + // get the folder id | |
| 1442 | + $detail['folder_id'] = (int) $document->getFolderID(); | |
| 1427 | 1443 | |
| 1444 | + // get the creator | |
| 1428 | 1445 | $userid = $document->getCreatorID(); |
| 1446 | + $username='n/a'; | |
| 1429 | 1447 | if (is_numeric($userid)) |
| 1430 | 1448 | { |
| 1449 | + $username = '* unknown *'; | |
| 1431 | 1450 | $user = User::get($userid); |
| 1432 | - $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); | |
| 1433 | - } | |
| 1434 | - else | |
| 1435 | - { | |
| 1436 | - $username='n/a'; | |
| 1451 | + if (!is_null($user) && !PEAR::isError($user)) | |
| 1452 | + { | |
| 1453 | + $username = $user->getName(); | |
| 1454 | + } | |
| 1437 | 1455 | } |
| 1438 | 1456 | $detail['created_by'] = $username; |
| 1439 | - $detail['updated_date'] = $document->getLastModifiedDate(); | |
| 1440 | - $detail['modified_date'] = $document->getLastModifiedDate(); | |
| 1441 | 1457 | |
| 1442 | - $userid = $document->getModifiedUserId(); | |
| 1458 | + // get the creation date | |
| 1459 | + $detail['created_date'] = $document->getCreatedDateTime(); | |
| 1460 | + | |
| 1461 | + // get the checked out user | |
| 1462 | + $userid = $document->getCheckedOutUserID(); | |
| 1463 | + $username='n/a'; | |
| 1443 | 1464 | if (is_numeric($userid)) |
| 1444 | 1465 | { |
| 1466 | + $username = '* unknown *'; | |
| 1445 | 1467 | $user = User::get($userid); |
| 1446 | - $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); | |
| 1447 | - } | |
| 1448 | - else | |
| 1449 | - { | |
| 1450 | - $username='n/a'; | |
| 1451 | - } | |
| 1452 | - $detail['modified_by'] = $username; | |
| 1453 | - $detail['updated_by'] = $username; | |
| 1454 | - $detail['document_id'] = (int) $document->getId(); | |
| 1455 | - $detail['folder_id'] = (int) $document->getFolderID(); | |
| 1456 | - | |
| 1457 | - $workflowid = $document->getWorkflowId(); | |
| 1458 | - if (is_numeric($workflowid)) | |
| 1459 | - { | |
| 1460 | - $workflow = KTWorkflow::get($workflowid); | |
| 1461 | - $workflowname=(is_null($workflow) || PEAR::isError($workflow))?'* unknown *':$workflow->getName(); | |
| 1462 | - } | |
| 1463 | - else | |
| 1464 | - { | |
| 1465 | - $workflowname='n/a'; | |
| 1468 | + if (!is_null($user) && !PEAR::isError($user)) | |
| 1469 | + { | |
| 1470 | + $username = $user->getName(); | |
| 1471 | + } | |
| 1466 | 1472 | } |
| 1467 | - $detail['workflow'] = $workflowname; | |
| 1473 | + $detail['checked_out_by'] = $username; | |
| 1468 | 1474 | |
| 1469 | - $stateid = $document->getWorkflowStateId(); | |
| 1470 | - if (is_numeric($stateid)) | |
| 1475 | + // get the checked out date | |
| 1476 | + list($major, $minor, $fix) = explode('.', $default->systemVersion); | |
| 1477 | + if ($major == 3 && $minor >= 5) | |
| 1471 | 1478 | { |
| 1472 | - $state = KTWorkflowState::get($stateid); | |
| 1473 | - $workflowstate=(is_null($state) || PEAR::isError($state))?'* unknown *':$state->getName(); | |
| 1479 | + $detail['checked_out_date'] = $document->getCheckedOutDate(); | |
| 1474 | 1480 | } |
| 1475 | 1481 | else |
| 1476 | 1482 | { |
| 1477 | - $workflowstate = 'n/a'; | |
| 1483 | + $detail['checked_out_date'] = $detail['modified_date']; | |
| 1478 | 1484 | } |
| 1479 | - $detail['workflow_state']=$workflowstate; | |
| 1480 | - | |
| 1481 | - $userid = $document->getOwnerID(); | |
| 1485 | + if (is_null($detail['checked_out_date'])) $detail['checked_out_date'] = 'n/a'; | |
| 1482 | 1486 | |
| 1487 | + // get the modified user | |
| 1488 | + $userid = $document->getModifiedUserId(); | |
| 1489 | + $username='n/a'; | |
| 1483 | 1490 | if (is_numeric($userid)) |
| 1484 | 1491 | { |
| 1492 | + $username = '* unknown *'; | |
| 1485 | 1493 | $user = User::get($userid); |
| 1486 | - $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); | |
| 1487 | - } | |
| 1488 | - else | |
| 1489 | - { | |
| 1490 | - $username = 'n/a'; | |
| 1494 | + if (!is_null($user) && !PEAR::isError($user)) | |
| 1495 | + { | |
| 1496 | + $username = $user->getName(); | |
| 1497 | + } | |
| 1491 | 1498 | } |
| 1492 | - $detail['owner'] = $username; | |
| 1493 | - | |
| 1494 | - $detail['is_immutable'] = (bool) $document->getImmutable(); | |
| 1495 | - | |
| 1499 | + $detail['modified_by'] = $detail['updated_by'] = $username; | |
| 1496 | 1500 | |
| 1497 | - $userid = $document->getCheckedOutUserID(); | |
| 1501 | + // get the modified date | |
| 1502 | + $detail['updated_date'] = $detail['modified_date'] = $document->getLastModifiedDate(); | |
| 1498 | 1503 | |
| 1504 | + // get the owner | |
| 1505 | + $userid = $document->getOwnerID(); | |
| 1506 | + $username='n/a'; | |
| 1499 | 1507 | if (is_numeric($userid)) |
| 1500 | 1508 | { |
| 1509 | + $username = '* unknown *'; | |
| 1501 | 1510 | $user = User::get($userid); |
| 1502 | - $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); | |
| 1511 | + if (!is_null($user) && !PEAR::isError($user)) | |
| 1512 | + { | |
| 1513 | + $username = $user->getName(); | |
| 1514 | + } | |
| 1503 | 1515 | } |
| 1504 | - else | |
| 1516 | + $detail['owned_by'] = $username; | |
| 1517 | + | |
| 1518 | + // get the version | |
| 1519 | + $detail['version'] = $document->getVersion(); | |
| 1520 | + if ($wsversion >= 2) | |
| 1505 | 1521 | { |
| 1506 | - $username = 'n/a'; | |
| 1522 | + $detail['version'] = (float) $detail['version']; | |
| 1507 | 1523 | } |
| 1508 | - $detail['checked_out_by'] = $username; | |
| 1509 | 1524 | |
| 1510 | - list($major, $minor, $fix) = explode('.', $default->systemVersion); | |
| 1525 | + // check immutability | |
| 1526 | + $detail['is_immutable'] = (bool) $document->getImmutable(); | |
| 1511 | 1527 | |
| 1528 | + // check permissions | |
| 1529 | + $detail['permissions'] = 'n/a'; | |
| 1512 | 1530 | |
| 1513 | - if ($major == 3 && $minor >= 5) | |
| 1531 | + // get workflow name | |
| 1532 | + $workflowid = $document->getWorkflowId(); | |
| 1533 | + $workflowname='n/a'; | |
| 1534 | + if (is_numeric($workflowid)) | |
| 1514 | 1535 | { |
| 1515 | - $detail['checked_out_date'] = $document->getCheckedOutDate(); | |
| 1536 | + $workflow = KTWorkflow::get($workflowid); | |
| 1537 | + if (!is_null($workflow) && !PEAR::isError($workflow)) | |
| 1538 | + { | |
| 1539 | + $workflowname = $workflow->getName(); | |
| 1540 | + } | |
| 1516 | 1541 | } |
| 1517 | - else | |
| 1542 | + $detail['workflow'] = $workflowname; | |
| 1543 | + | |
| 1544 | + // get the workflow state | |
| 1545 | + $stateid = $document->getWorkflowStateId(); | |
| 1546 | + $workflowstate = 'n/a'; | |
| 1547 | + if (is_numeric($stateid)) | |
| 1518 | 1548 | { |
| 1519 | - $detail['checked_out_date'] = $detail['modified_date']; | |
| 1549 | + $state = KTWorkflowState::get($stateid); | |
| 1550 | + if (!is_null($state) && !PEAR::isError($state)) | |
| 1551 | + { | |
| 1552 | + $workflowstate = $state->getName(); | |
| 1553 | + } | |
| 1520 | 1554 | } |
| 1521 | - if (is_null($detail['checked_out_date'])) $detail['checked_out_date'] = 'n/a'; | |
| 1555 | + $detail['workflow_state']=$workflowstate; | |
| 1522 | 1556 | |
| 1557 | + // get the full path | |
| 1523 | 1558 | $detail['full_path'] = $this->ktapi_folder->get_full_path() . '/' . $this->get_title(); |
| 1524 | 1559 | |
| 1560 | + // get mime info | |
| 1561 | + $mimetypeid = $document->getMimeTypeID(); | |
| 1562 | + $detail['mime_type'] =KTMime::getMimeTypeName($mimetypeid); | |
| 1563 | + $detail['mime_icon_path'] =KTMime::getIconPath($mimetypeid); | |
| 1564 | + $detail['mime_display'] =KTMime::getFriendlyNameForString($detail['mime_type']); | |
| 1565 | + | |
| 1566 | + // get the storage path | |
| 1567 | + $detail['storage_path'] = $document->getStoragePath(); | |
| 1568 | + | |
| 1525 | 1569 | return $detail; |
| 1526 | 1570 | } |
| 1527 | 1571 | |
| ... | ... | @@ -1541,7 +1585,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1541 | 1585 | $options = array(); |
| 1542 | 1586 | |
| 1543 | 1587 | |
| 1544 | - $oDocumentTransaction = & new DocumentTransaction($this->document, 'Document downloaded', 'ktcore.transactions.download', $aOptions); | |
| 1588 | + $oDocumentTransaction = new DocumentTransaction($this->document, 'Document downloaded', 'ktcore.transactions.download', $aOptions); | |
| 1545 | 1589 | $oDocumentTransaction->create(); |
| 1546 | 1590 | } |
| 1547 | 1591 | |
| ... | ... | @@ -1564,6 +1608,13 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1564 | 1608 | return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $transactions ); |
| 1565 | 1609 | } |
| 1566 | 1610 | |
| 1611 | + $config = KTConfig::getSingleton(); | |
| 1612 | + $wsversion = $config->get('webservice/version', LATEST_WEBSERVICE_VERSION); | |
| 1613 | + foreach($transactions as $key=>$transaction) | |
| 1614 | + { | |
| 1615 | + $transactions[$key]['version'] = (float) $transaction['version']; | |
| 1616 | + } | |
| 1617 | + | |
| 1567 | 1618 | return $transactions; |
| 1568 | 1619 | } |
| 1569 | 1620 | |
| ... | ... | @@ -1576,6 +1627,9 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1576 | 1627 | { |
| 1577 | 1628 | $metadata_versions = KTDocumentMetadataVersion::getByDocument($this->document); |
| 1578 | 1629 | |
| 1630 | + $config = KTConfig::getSingleton(); | |
| 1631 | + $wsversion = $config->get('webservice/version', LATEST_WEBSERVICE_VERSION); | |
| 1632 | + | |
| 1579 | 1633 | $versions = array(); |
| 1580 | 1634 | foreach ($metadata_versions as $version) |
| 1581 | 1635 | { |
| ... | ... | @@ -1585,18 +1639,20 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1585 | 1639 | |
| 1586 | 1640 | $userid = $document->getModifiedUserId(); |
| 1587 | 1641 | $user = User::get($userid); |
| 1588 | - if (PEAR::isError($user)) | |
| 1589 | - { | |
| 1590 | - $username = $user->getName(); | |
| 1591 | - } | |
| 1592 | - else | |
| 1642 | + $username = 'Unknown'; | |
| 1643 | + if (!PEAR::isError($user)) | |
| 1593 | 1644 | { |
| 1594 | - $username = 'Unknown'; | |
| 1645 | + $username = is_null($user)?'n/a':$user->getName(); | |
| 1595 | 1646 | } |
| 1596 | 1647 | |
| 1597 | 1648 | $version['user'] = $username; |
| 1598 | 1649 | $version['metadata_version'] = $document->getMetadataVersion(); |
| 1599 | 1650 | $version['content_version'] = $document->getVersion(); |
| 1651 | + if ($wsversion >= 2) | |
| 1652 | + { | |
| 1653 | + $version['metadata_version'] = (int) $version['metadata_version']; | |
| 1654 | + $version['content_version'] = (float) $version['content_version']; | |
| 1655 | + } | |
| 1600 | 1656 | |
| 1601 | 1657 | $versions[] = $version; |
| 1602 | 1658 | } |
| ... | ... | @@ -1616,7 +1672,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1616 | 1672 | } |
| 1617 | 1673 | DBUtil::startTransaction(); |
| 1618 | 1674 | |
| 1619 | - $transaction = & new DocumentTransaction($this->document, "Document expunged", 'ktcore.transactions.expunge'); | |
| 1675 | + $transaction = new DocumentTransaction($this->document, "Document expunged", 'ktcore.transactions.expunge'); | |
| 1620 | 1676 | |
| 1621 | 1677 | $transaction->create(); |
| 1622 | 1678 | ... | ... |
ktapi/KTAPIFolder.inc.php
| ... | ... | @@ -35,6 +35,8 @@ |
| 35 | 35 | * |
| 36 | 36 | */ |
| 37 | 37 | |
| 38 | +require_once(KT_DIR . '/ktwebservice/KTUploadManager.inc.php'); | |
| 39 | + | |
| 38 | 40 | class KTAPI_Folder extends KTAPI_FolderItem |
| 39 | 41 | { |
| 40 | 42 | /** |
| ... | ... | @@ -197,6 +199,7 @@ class KTAPI_Folder extends KTAPI_FolderItem |
| 197 | 199 | function get_full_path() |
| 198 | 200 | { |
| 199 | 201 | $path = $this->folder->getFullPath() . '/' . $this->folder->getName(); |
| 202 | + if (substr($path,0,1) == '/') $path = substr($path,1); | |
| 200 | 203 | |
| 201 | 204 | return $path; |
| 202 | 205 | } |
| ... | ... | @@ -350,7 +353,11 @@ class KTAPI_Folder extends KTAPI_FolderItem |
| 350 | 353 | 'id' => (int) $folder->getId(), |
| 351 | 354 | 'item_type' => 'F', |
| 352 | 355 | |
| 356 | + 'custom_document_no'=>'n/a', | |
| 357 | + 'oem_document_no'=>'n/a', | |
| 358 | + | |
| 353 | 359 | 'title' => $folder->getName(), |
| 360 | + 'document_type' => 'n/a', | |
| 354 | 361 | 'filename' => $folder->getName(), |
| 355 | 362 | 'filesize' => 'n/a', |
| 356 | 363 | |
| ... | ... | @@ -367,7 +374,7 @@ class KTAPI_Folder extends KTAPI_FolderItem |
| 367 | 374 | |
| 368 | 375 | 'version' => 'n/a', |
| 369 | 376 | |
| 370 | - 'immutable'=> 'n/a', | |
| 377 | + 'is_immutable'=> 'n/a', | |
| 371 | 378 | 'permissions' => 'n/a', |
| 372 | 379 | |
| 373 | 380 | 'workflow'=>'n/a', |
| ... | ... | @@ -469,11 +476,19 @@ class KTAPI_Folder extends KTAPI_FolderItem |
| 469 | 476 | |
| 470 | 477 | if ($wsversion >= 2) |
| 471 | 478 | { |
| 479 | + $docTypeId = $document->getDocumentTypeID(); | |
| 480 | + $documentType = DocumentType::get($docTypeId); | |
| 481 | + | |
| 482 | + | |
| 472 | 483 | $contents[] = array( |
| 473 | 484 | 'id' => (int) $document->getId(), |
| 474 | 485 | 'item_type' => 'D', |
| 475 | 486 | |
| 487 | + 'custom_document_no'=>'n/a', | |
| 488 | + 'oem_document_no'=>'n/a', | |
| 489 | + | |
| 476 | 490 | 'title' => $document->getName(), |
| 491 | + 'document_type'=>$documentType->getName(), | |
| 477 | 492 | 'filename' => $document->getFileName(), |
| 478 | 493 | 'filesize' => $document->getFileSize(), |
| 479 | 494 | |
| ... | ... | @@ -490,7 +505,7 @@ class KTAPI_Folder extends KTAPI_FolderItem |
| 490 | 505 | |
| 491 | 506 | 'version' => $document->getMajorVersionNumber() . '.' . $document->getMinorVersionNumber(), |
| 492 | 507 | |
| 493 | - 'immutable'=> $document->getImmutable()?'true':'false', | |
| 508 | + 'is_immutable'=> $document->getImmutable()?'true':'false', | |
| 494 | 509 | 'permissions' => 'n/a', |
| 495 | 510 | |
| 496 | 511 | 'workflow'=> $workflow, |
| ... | ... | @@ -590,13 +605,7 @@ class KTAPI_Folder extends KTAPI_FolderItem |
| 590 | 605 | } |
| 591 | 606 | DBUtil::commit(); |
| 592 | 607 | |
| 593 | - $tempfilename=addslashes($tempfilename); | |
| 594 | - $sql = "DELETE FROM uploaded_files WHERE tempfilename='$tempfilename'"; | |
| 595 | - $result = DBUtil::runQuery($sql); | |
| 596 | - if (PEAR::isError($result)) | |
| 597 | - { | |
| 598 | - return $result; | |
| 599 | - } | |
| 608 | + KTUploadManager::temporary_file_imported($tempfilename); | |
| 600 | 609 | |
| 601 | 610 | return new KTAPI_Document($this->ktapi, $this, $document); |
| 602 | 611 | } | ... | ... |
ktapi/KTAPISession.inc.php
| ... | ... | @@ -54,7 +54,7 @@ class KTAPI_Session |
| 54 | 54 | |
| 55 | 55 | $this->ktapi=&$ktapi; |
| 56 | 56 | $this->user=&$user; |
| 57 | - $this->origUserId = $_SESSION['userID']; | |
| 57 | + $this->origUserId = isset($_SESSION['userID'])?$_SESSION['userID']:null; | |
| 58 | 58 | $_SESSION['userID']=$user->getId(); |
| 59 | 59 | $this->active = false; |
| 60 | 60 | } | ... | ... |
ktwebdav/lib/KTWebDAVServer.inc.php
| ... | ... | @@ -42,7 +42,7 @@ require_once 'Log.php'; // thirdparty PEAR |
| 42 | 42 | |
| 43 | 43 | $userAgentValue = $_SERVER['HTTP_USER_AGENT']; |
| 44 | 44 | if (stristr($userAgentValue, "Microsoft Data Access Internet Publishing Provider DAV")) { |
| 45 | - // Fix for Novell Netdrive | |
| 45 | + // Fix for Novell Netdrive | |
| 46 | 46 | chdir(realpath(dirname(__FILE__))); |
| 47 | 47 | require_once '../../config/dmsDefaults.php'; // This is our plug into KT. |
| 48 | 48 | }else{ |
| ... | ... | @@ -1217,7 +1217,7 @@ class KTWebDAVServer extends HTTP_WebDAV_Server |
| 1217 | 1217 | $sQuery .= "ON D.metadata_version_id = DM.id "; |
| 1218 | 1218 | $sQuery .= "LEFT JOIN document_content_version AS DC "; |
| 1219 | 1219 | $sQuery .= "ON DM.content_version_id = DC.id "; |
| 1220 | - $sQuery .= "WHERE D.folder_id = ? AND DC.filename = ?"; | |
| 1220 | + $sQuery .= "WHERE D.folder_id = ? AND DC.filename = ? AND D.status_id=1"; | |
| 1221 | 1221 | |
| 1222 | 1222 | $aParams = array($iFolderID, $sFileName); |
| 1223 | 1223 | $iDocumentID = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id'); | ... | ... |
ktwebservice/KTDownloadManager.inc.php
| ... | ... | @@ -2,39 +2,39 @@ |
| 2 | 2 | |
| 3 | 3 | /** |
| 4 | 4 | * |
| 5 | - * $Id:$ | |
| 5 | + * $Id$ | |
| 6 | 6 | * |
| 7 | 7 | * KTDownloadManager manages files in the download_files table. |
| 8 | 8 | * |
| 9 | 9 | * KnowledgeTree Open Source Edition |
| 10 | 10 | * Document Management Made Simple |
| 11 | 11 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is free software; you can redistribute it and/or modify it under |
| 14 | 14 | * the terms of the GNU General Public License version 3 as published by the |
| 15 | 15 | * Free Software Foundation. |
| 16 | - * | |
| 16 | + * | |
| 17 | 17 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 18 | 18 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 19 | 19 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 20 | 20 | * details. |
| 21 | - * | |
| 21 | + * | |
| 22 | 22 | * You should have received a copy of the GNU General Public License |
| 23 | 23 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 24 | - * | |
| 24 | + * | |
| 25 | 25 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 26 | 26 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * The interactive user interfaces in modified source and object code versions |
| 29 | 29 | * of this program must display Appropriate Legal Notices, as required under |
| 30 | 30 | * Section 5 of the GNU General Public License version 3. |
| 31 | - * | |
| 31 | + * | |
| 32 | 32 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 33 | 33 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 34 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 34 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 35 | 35 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 36 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 37 | - * copyright notice. | |
| 36 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 37 | + * copyright notice. | |
| 38 | 38 | * Contributor( s): ______________________________________ |
| 39 | 39 | * |
| 40 | 40 | */ |
| ... | ... | @@ -57,7 +57,10 @@ class KTDownloadManager |
| 57 | 57 | $config = &KTConfig::getSingleton(); |
| 58 | 58 | |
| 59 | 59 | $this->age = $config->get('webservice/downloadExpiry',5); |
| 60 | - $this->download_url = $config->get('webservice/downloadUrl'); | |
| 60 | + | |
| 61 | + $protocol = $config->get('KnowledgeTree/sslEnabled')?'https':'http'; | |
| 62 | + | |
| 63 | + $this->download_url = $protocol . '://' . $_SERVER['HTTP_HOST'] . $config->get('webservice/downloadUrl'); | |
| 61 | 64 | $this->random=$config->get('webservice/randomKeyText','jhsdf8q1jkjpoiudfs7sd3ds1'); |
| 62 | 65 | } |
| 63 | 66 | ... | ... |
ktwebservice/KTUploadManager.inc.php
| ... | ... | @@ -52,7 +52,8 @@ class KTUploadManager |
| 52 | 52 | $config = KTConfig::getSingleton(); |
| 53 | 53 | |
| 54 | 54 | $this->age = $config->get('webservice/uploadExpiry',60); |
| 55 | - $this->temp_dir= $config->get('webservice/uploadDirectory'); | |
| 55 | + $this->temp_dir = $config->get('webservice/uploadDirectory'); | |
| 56 | + $this->temp_dir = str_replace('\\','/', $this->temp_dir); | |
| 56 | 57 | } |
| 57 | 58 | |
| 58 | 59 | /** |
| ... | ... | @@ -63,10 +64,48 @@ class KTUploadManager |
| 63 | 64 | function set_session($session) |
| 64 | 65 | { |
| 65 | 66 | $user = &$session->get_user(); |
| 66 | - $this->userid=$user->getId(); | |
| 67 | + $this->userid=$_SESSION['userID']; | |
| 67 | 68 | $this->session = $session->get_session(); |
| 68 | 69 | } |
| 69 | 70 | |
| 71 | + function get_temp_filename($prefix) | |
| 72 | + { | |
| 73 | + $tempfilename = tempnam($this->temp_dir,$prefix); | |
| 74 | + | |
| 75 | + return $tempfilename; | |
| 76 | + } | |
| 77 | + | |
| 78 | + function is_valid_temporary_file($tempfilename) | |
| 79 | + { | |
| 80 | + $tempdir = substr($tempfilename,0,strlen($this->temp_dir)); | |
| 81 | + $tempdir = str_replace('\\','/', $tempdir); | |
| 82 | + return ($tempdir == $this->temp_dir); | |
| 83 | + } | |
| 84 | + | |
| 85 | + function store_base64_file($base64, $prefix= 'sa_') | |
| 86 | + { | |
| 87 | + $tempfilename = $this->get_temp_filename($prefix); | |
| 88 | + if (!is_writable($tempfilename)) | |
| 89 | + { | |
| 90 | + return new PEAR_Error("Cannot write to file: $tempfilename"); | |
| 91 | + } | |
| 92 | + | |
| 93 | + if (!$this->is_valid_temporary_file($tempfilename)) | |
| 94 | + { | |
| 95 | + return new PEAR_Error("Invalid temporary file: $tempfilename. There is a problem with the temporary storage path: $this->temp_dir."); | |
| 96 | + } | |
| 97 | + | |
| 98 | + $fp=fopen($tempfilename, 'wb'); | |
| 99 | + if ($fp === false) | |
| 100 | + { | |
| 101 | + return new PEAR_Error("Cannot write content to temporary file: $tempfilename."); | |
| 102 | + } | |
| 103 | + fwrite($fp, base64_decode($base64)); | |
| 104 | + fclose($fp); | |
| 105 | + | |
| 106 | + return $tempfilename; | |
| 107 | + } | |
| 108 | + | |
| 70 | 109 | /** |
| 71 | 110 | * This tells the manager to manage a file that has been uploaded. |
| 72 | 111 | * |
| ... | ... | @@ -80,8 +119,9 @@ class KTUploadManager |
| 80 | 119 | $now=date('Y-m-d H:i:s'); |
| 81 | 120 | $now_str=date('YmdHis'); |
| 82 | 121 | |
| 83 | - $newtempfile = realpath($this->temp_dir) . '/' . $this->userid . '-'. $now_str; | |
| 84 | - if (DIRECTORY_SEPARATOR == '\\') { | |
| 122 | + $newtempfile = realpath($this->temp_dir) . '/' . $_SESSION['userID'] . '-'. $now_str; | |
| 123 | + if (OS_WINDOWS) | |
| 124 | + { | |
| 85 | 125 | $tempfile = str_replace('/','\\',$tempfile); |
| 86 | 126 | $newtempfile = str_replace('\\','/',$newtempfile); |
| 87 | 127 | } |
| ... | ... | @@ -105,12 +145,19 @@ class KTUploadManager |
| 105 | 145 | return $id; |
| 106 | 146 | } |
| 107 | 147 | global $php_errormsg; |
| 108 | - $result = @move_uploaded_file($tempfile, $newtempfile); | |
| 148 | + if (is_uploaded_file($tempfile)) | |
| 149 | + { | |
| 150 | + $result = @move_uploaded_file($tempfile, $newtempfile); | |
| 151 | + } | |
| 152 | + else | |
| 153 | + { | |
| 154 | + $result = @rename($tempfile, $newtempfile); | |
| 155 | + } | |
| 156 | + | |
| 109 | 157 | $tmp = $php_errormsg; |
| 110 | 158 | |
| 111 | 159 | if ($result == false) |
| 112 | 160 | { |
| 113 | - | |
| 114 | 161 | DBUtil::rollback(); |
| 115 | 162 | return new PEAR_Error($tmp); |
| 116 | 163 | } |
| ... | ... | @@ -136,11 +183,10 @@ class KTUploadManager |
| 136 | 183 | return $result; |
| 137 | 184 | } |
| 138 | 185 | |
| 139 | - function imported_file($action, $filename, $documentid) | |
| 186 | + function temporary_file_imported($tempfilename) | |
| 140 | 187 | { |
| 141 | - DBUtil::startTransaction(); | |
| 142 | - $filename=basename($filename); | |
| 143 | - $sql = "DELETE FROM uploaded_files WHERE action='$action' AND filename='$filename'"; | |
| 188 | + $tempfilename = addslashes(str_replace('\\','/',$tempfilename)); | |
| 189 | + $sql = "DELETE FROM uploaded_files WHERE tempfilename='$tempfilename'"; | |
| 144 | 190 | $rs = DBUtil::runQuery($sql); |
| 145 | 191 | if (PEAR::isError($rs)) |
| 146 | 192 | { |
| ... | ... | @@ -148,15 +194,7 @@ class KTUploadManager |
| 148 | 194 | return false; |
| 149 | 195 | } |
| 150 | 196 | |
| 151 | - $sql = "INSERT INTO index_files(document_id, user_id) VALUES($documentid, $this->userid)"; | |
| 152 | - DBUtil::runQuery($sql); | |
| 153 | - if (PEAR::isError($rs)) | |
| 154 | - { | |
| 155 | - DBUtil::rollback(); | |
| 156 | - return false; | |
| 157 | - } | |
| 158 | 197 | |
| 159 | - DBUtil::commit(); | |
| 160 | 198 | return true; |
| 161 | 199 | } |
| 162 | 200 | ... | ... |
ktwebservice/nunit/README
| ... | ... | @@ -11,6 +11,30 @@ The unit tests were written for NUnit. NUnit 2.2.0 was used during development. |
| 11 | 11 | |
| 12 | 12 | This framework was developed in Linux using Mono. |
| 13 | 13 | |
| 14 | +DATABASE | |
| 15 | +-------- | |
| 16 | + | |
| 17 | +Review helper.cs to see the configuration settings. UnixODBC is used. Sample config files: | |
| 18 | + | |
| 19 | + # odbc.ini | |
| 20 | + | |
| 21 | +[ktdms] | |
| 22 | +Driver = myodbcdriver | |
| 23 | +Description = MySQL ODBC 2.50 Driver DSN | |
| 24 | +SERVER = localhost | |
| 25 | +PORT = | |
| 26 | +Socket = /tmp/mysql.sock | |
| 27 | +USER = root | |
| 28 | +Password = | |
| 29 | +Database = ktdms | |
| 30 | +OPTION = 3 | |
| 31 | + | |
| 32 | + # odbcinst.ini | |
| 33 | +[myodbcdriver] | |
| 34 | +Description = MySQL ODBC 2.50 Driver DSN | |
| 35 | +Driver = /usr/lib64/unixODBC/libmyodbc3.so | |
| 36 | + | |
| 37 | + | |
| 14 | 38 | The document type 'NewType' must be added to the database for the document_type.cs unit test to run. |
| 15 | 39 | |
| 16 | 40 | |
| ... | ... | @@ -37,3 +61,4 @@ For more information: |
| 37 | 61 | |
| 38 | 62 | http://nunit.org/ |
| 39 | 63 | http://www.mono-project.com/ |
| 64 | +http://www.unixodbc.org | ... | ... |
ktwebservice/nunit/document_add.cs
| ... | ... | @@ -8,20 +8,20 @@ namespace MonoTests.KnowledgeTree |
| 8 | 8 | public class AddDocumentTest : KTTest |
| 9 | 9 | { |
| 10 | 10 | |
| 11 | - | |
| 11 | + | |
| 12 | 12 | private int _docId; |
| 13 | 13 | private int _folderId; |
| 14 | 14 | private String _filename; |
| 15 | - private String _content; | |
| 15 | + private String _content; | |
| 16 | 16 | |
| 17 | 17 | public AddDocumentTest() : base() |
| 18 | - { | |
| 18 | + { | |
| 19 | 19 | this._folderId = 1; |
| 20 | - } | |
| 20 | + } | |
| 21 | 21 | |
| 22 | 22 | [SetUp] |
| 23 | 23 | public void SetUp() |
| 24 | - { | |
| 24 | + { | |
| 25 | 25 | this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; |
| 26 | 26 | this._content = "hello world!"; |
| 27 | 27 | |
| ... | ... | @@ -29,10 +29,10 @@ namespace MonoTests.KnowledgeTree |
| 29 | 29 | |
| 30 | 30 | [TearDown] |
| 31 | 31 | public void TearDown() |
| 32 | - { | |
| 33 | - Helper.deleteFile(this._filename); | |
| 34 | - } | |
| 35 | - | |
| 32 | + { | |
| 33 | + Helper.deleteFile(this._filename); | |
| 34 | + } | |
| 35 | + | |
| 36 | 36 | [Test] |
| 37 | 37 | public void FindDocumentBeforeAdd() |
| 38 | 38 | { |
| ... | ... | @@ -49,7 +49,7 @@ namespace MonoTests.KnowledgeTree |
| 49 | 49 | { |
| 50 | 50 | System.Console.WriteLine("document not found. that is ok!"); |
| 51 | 51 | } |
| 52 | - } | |
| 52 | + } | |
| 53 | 53 | |
| 54 | 54 | [Test] |
| 55 | 55 | public void FindFolderBeforeAdd() |
| ... | ... | @@ -67,7 +67,7 @@ namespace MonoTests.KnowledgeTree |
| 67 | 67 | { |
| 68 | 68 | if (this._verbose) System.Console.WriteLine("folder not found. that is ok!"); |
| 69 | 69 | } |
| 70 | - } | |
| 70 | + } | |
| 71 | 71 | |
| 72 | 72 | [Test] |
| 73 | 73 | public void AddDocument() |
| ... | ... | @@ -89,7 +89,7 @@ namespace MonoTests.KnowledgeTree |
| 89 | 89 | Assert.AreEqual(0, response1.status_code); |
| 90 | 90 | Assert.AreEqual("kt unit test1", response1.title); |
| 91 | 91 | Assert.AreEqual("Default", response1.document_type); |
| 92 | - Assert.AreEqual("0.1", response1.version); | |
| 92 | + Assert.AreEqual(0.1, response1.version); | |
| 93 | 93 | Assert.AreEqual("kt_unit_test1.txt", response1.filename); |
| 94 | 94 | |
| 95 | 95 | Assert.IsFalse(response1.created_date == null); |
| ... | ... | @@ -172,7 +172,7 @@ namespace MonoTests.KnowledgeTree |
| 172 | 172 | Assert.AreEqual(0, response1.status_code); |
| 173 | 173 | Assert.AreEqual(filename, response1.title); |
| 174 | 174 | Assert.AreEqual("Default", response1.document_type); |
| 175 | - Assert.AreEqual("0.1", response1.version); | |
| 175 | + Assert.AreEqual(0.1, response1.version); | |
| 176 | 176 | Assert.AreEqual("kt_unit_test1.txt", response1.filename); |
| 177 | 177 | |
| 178 | 178 | Assert.IsFalse(response1.created_date == null); | ... | ... |
ktwebservice/nunit/document_contents.cs
0 โ 100644
| 1 | +using NUnit.Framework; | |
| 2 | +using System; | |
| 3 | +using System.IO; | |
| 4 | + | |
| 5 | +namespace MonoTests.KnowledgeTree | |
| 6 | +{ | |
| 7 | + [TestFixture] | |
| 8 | + public class DocumentContentsTest : KTTest | |
| 9 | + { | |
| 10 | + private int _folderId; | |
| 11 | + private Document _doc1; | |
| 12 | + | |
| 13 | + | |
| 14 | + [SetUp] | |
| 15 | + public void SetUp() | |
| 16 | + { | |
| 17 | + | |
| 18 | + this._doc1 = new Document(1, this._session, this._kt, this._verbose,false); | |
| 19 | + this._doc1.createFile(1); | |
| 20 | + | |
| 21 | + kt_folder_detail response = this._kt.create_folder(this._session, 1, "kt_unit_testabc"); | |
| 22 | + | |
| 23 | + | |
| 24 | + this._folderId = response.id; | |
| 25 | + | |
| 26 | + } | |
| 27 | + | |
| 28 | + [TearDown] | |
| 29 | + public void TearDown() | |
| 30 | + { | |
| 31 | + this._doc1.deleteFile(); | |
| 32 | + } | |
| 33 | + | |
| 34 | + [Test] | |
| 35 | + public void Query() | |
| 36 | + { | |
| 37 | + | |
| 38 | + kt_folder_contents response = this._kt.get_folder_contents(this._session, 1, 1, "DF"); | |
| 39 | + | |
| 40 | + Assert.AreEqual(0, response.status_code); | |
| 41 | + Assert.AreEqual(2, response.items.Length); | |
| 42 | + | |
| 43 | + Assert.AreEqual(this._doc1.docId, response.items[1].id); | |
| 44 | + | |
| 45 | + Assert.AreEqual("n/a", response.items[1].custom_document_no); | |
| 46 | + Assert.AreEqual("n/a", response.items[1].oem_document_no); | |
| 47 | + | |
| 48 | + Assert.AreEqual("D", response.items[1].item_type); | |
| 49 | + Assert.AreEqual(this._doc1.title, response.items[1].title); | |
| 50 | + Assert.AreEqual(this._doc1.realFilename, response.items[1].filename); | |
| 51 | + Assert.AreEqual("Default", response.items[1].document_type); | |
| 52 | + Assert.AreEqual(this._doc1.filesize+1 + "", response.items[1].filesize); | |
| 53 | + | |
| 54 | + Assert.AreEqual("Administrator", response.items[1].created_by); | |
| 55 | + Assert.AreEqual("Administrator", response.items[1].modified_by); | |
| 56 | + Assert.AreEqual("n/a", response.items[1].checked_out_by); | |
| 57 | + Assert.AreEqual("Administrator", response.items[1].owned_by); | |
| 58 | + Assert.AreEqual("0.1", response.items[1].version); | |
| 59 | + Assert.AreEqual("false", response.items[1].is_immutable); | |
| 60 | + Assert.AreEqual("n/a", response.items[1].permissions); | |
| 61 | + Assert.AreEqual("n/a", response.items[1].workflow); | |
| 62 | + Assert.AreEqual("n/a", response.items[1].workflow_state); | |
| 63 | + Assert.AreEqual("text/plain", response.items[1].mime_type); | |
| 64 | + Assert.AreEqual("text", response.items[1].mime_icon_path); | |
| 65 | + Assert.AreEqual("Plain Text", response.items[1].mime_display); | |
| 66 | + Assert.IsTrue("" != response.items[1].storage_path); | |
| 67 | + | |
| 68 | + Assert.AreEqual(this._folderId, response.items[0].id); | |
| 69 | + Assert.AreEqual("F", response.items[0].item_type); | |
| 70 | + Assert.AreEqual("kt_unit_testabc", response.items[0].title); | |
| 71 | + | |
| 72 | + Assert.AreEqual("kt_unit_testabc", response.items[0].filename); | |
| 73 | + Assert.AreEqual("n/a", response.items[0].document_type); | |
| 74 | + Assert.AreEqual("n/a", response.items[0].filesize); | |
| 75 | + | |
| 76 | + Assert.AreEqual("Administrator", response.items[0].created_by); | |
| 77 | + Assert.AreEqual("n/a", response.items[0].modified_by); | |
| 78 | + Assert.AreEqual("n/a", response.items[0].checked_out_by); | |
| 79 | + Assert.AreEqual("n/a", response.items[0].owned_by); | |
| 80 | + Assert.AreEqual("n/a", response.items[0].version); | |
| 81 | + Assert.AreEqual("n/a", response.items[0].is_immutable); | |
| 82 | + Assert.AreEqual("n/a", response.items[0].permissions); | |
| 83 | + Assert.AreEqual("n/a", response.items[0].workflow); | |
| 84 | + Assert.AreEqual("n/a", response.items[0].workflow_state); | |
| 85 | + Assert.AreEqual("folder", response.items[0].mime_type); | |
| 86 | + Assert.AreEqual("folder", response.items[0].mime_icon_path); | |
| 87 | + Assert.AreEqual("Folder", response.items[0].mime_display); | |
| 88 | + Assert.AreEqual("n/a",response.items[0].storage_path); | |
| 89 | + } | |
| 90 | + } | |
| 91 | +} | ... | ... |
ktwebservice/nunit/document_detail.cs
| ... | ... | @@ -6,16 +6,16 @@ namespace MonoTests.KnowledgeTree |
| 6 | 6 | { |
| 7 | 7 | [TestFixture] |
| 8 | 8 | public class DocumentDetailTest : KTTest |
| 9 | - { | |
| 9 | + { | |
| 10 | 10 | private int _docId; |
| 11 | 11 | private int _folderId; |
| 12 | 12 | private String _filename; |
| 13 | - private String _content; | |
| 13 | + private String _content; | |
| 14 | 14 | |
| 15 | 15 | |
| 16 | 16 | [SetUp] |
| 17 | 17 | public void SetUp() |
| 18 | - { | |
| 18 | + { | |
| 19 | 19 | |
| 20 | 20 | this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; |
| 21 | 21 | |
| ... | ... | @@ -23,7 +23,7 @@ namespace MonoTests.KnowledgeTree |
| 23 | 23 | |
| 24 | 24 | this._content = "hello world!"; |
| 25 | 25 | |
| 26 | - Helper.writeFile(this._filename, this._content); | |
| 26 | + Helper.writeFile(this._filename, this._content); | |
| 27 | 27 | this._folderId = 1; |
| 28 | 28 | |
| 29 | 29 | kt_document_detail response1 = this._kt.add_base64_document(this._session, this._folderId, filename, this._filename, "Default", Helper.ConvertFileToBase64Encoding(this._filename)); |
| ... | ... | @@ -47,7 +47,7 @@ namespace MonoTests.KnowledgeTree |
| 47 | 47 | if (this._verbose && response.status_code != 0) |
| 48 | 48 | { |
| 49 | 49 | System.Console.WriteLine("Could not delete file: " + this._filename); |
| 50 | - } | |
| 50 | + } | |
| 51 | 51 | |
| 52 | 52 | } |
| 53 | 53 | |
| ... | ... | @@ -61,12 +61,54 @@ namespace MonoTests.KnowledgeTree |
| 61 | 61 | [Test] |
| 62 | 62 | public void DocumentExistanceTest() |
| 63 | 63 | { |
| 64 | - kt_document_detail response = this._kt.get_document_detail(this._session, this._docId,""); | |
| 64 | + kt_document_detail response = this._kt.get_document_detail(this._session, this._docId,"MLTVH"); | |
| 65 | 65 | Assert.AreEqual(0, response.status_code); |
| 66 | 66 | Assert.AreEqual(this._docId, response.document_id); |
| 67 | + Assert.AreEqual("kt unit test1", response.title); | |
| 68 | + Assert.AreEqual("n/a", response.custom_document_no); | |
| 69 | + Assert.AreEqual("n/a", response.oem_document_no); | |
| 70 | + Assert.AreEqual("Default", response.document_type); | |
| 71 | + Assert.AreEqual("Root Folder/kt unit test1", response.full_path); | |
| 72 | + Assert.AreEqual("kt_unit_test1.txt", response.filename); | |
| 73 | + Assert.AreEqual(this._content.Length + 1, response.filesize); | |
| 74 | + Assert.AreEqual(this._folderId, response.folder_id); | |
| 75 | + Assert.AreEqual("Administrator", response.created_by); | |
| 76 | + Assert.IsTrue("" != response.created_date); | |
| 77 | + Assert.AreEqual("n/a", response.checked_out_by); | |
| 78 | + Assert.IsTrue("" != response.checked_out_date); | |
| 79 | + Assert.AreEqual("Administrator", response.modified_by); | |
| 80 | + Assert.IsTrue("" != response.modified_date); | |
| 81 | + Assert.AreEqual("Administrator", response.owned_by); | |
| 82 | + Assert.AreEqual(0.1, response.version); | |
| 83 | + Assert.AreEqual(false, response.is_immutable); | |
| 84 | + Assert.AreEqual("n/a", response.permissions); | |
| 85 | + Assert.AreEqual("n/a", response.workflow); | |
| 86 | + Assert.AreEqual("n/a", response.workflow_state); | |
| 87 | + Assert.AreEqual("text/plain", response.mime_type); | |
| 88 | + Assert.AreEqual("text", response.mime_icon_path); | |
| 89 | + Assert.AreEqual("Plain Text", response.mime_display); | |
| 90 | + Assert.IsTrue("" != response.storage_path); | |
| 91 | + Assert.AreEqual(2, response.metadata.Length); | |
| 92 | + Assert.AreEqual(null, response.links); | |
| 93 | + | |
| 94 | + Assert.AreEqual(1, response.transaction_history.Length); | |
| 95 | + Assert.AreEqual("Create", response.transaction_history[0].transaction_name); | |
| 96 | + Assert.AreEqual("Administrator", response.transaction_history[0].username); | |
| 97 | + Assert.AreEqual(0.1, response.transaction_history[0].version); | |
| 98 | + Assert.AreEqual("Document created", response.transaction_history[0].comment); | |
| 99 | + Assert.IsTrue("" != response.transaction_history[0].datetime); | |
| 100 | + | |
| 101 | + Assert.AreEqual(1, response.version_history.Length); | |
| 102 | + Assert.AreEqual("Administrator", response.version_history[0].user); | |
| 103 | + Assert.AreEqual(0, response.version_history[0].metadata_version); | |
| 104 | + Assert.AreEqual(0.1, response.version_history[0].content_version); | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + Assert.AreEqual(null, response.transitions); | |
| 67 | 109 | } |
| 68 | 110 | |
| 69 | - [Test] | |
| 111 | + //[Test] | |
| 70 | 112 | public void GetDetailByTitleTest() |
| 71 | 113 | { |
| 72 | 114 | kt_document_detail response = this._kt.get_document_detail_by_name(this._session, 1, "Root Folder/kt unit test1", "T",""); |
| ... | ... | @@ -76,7 +118,7 @@ namespace MonoTests.KnowledgeTree |
| 76 | 118 | } |
| 77 | 119 | |
| 78 | 120 | |
| 79 | - [Test] | |
| 121 | + //[Test] | |
| 80 | 122 | public void GetDetailByTitle2Test() |
| 81 | 123 | { |
| 82 | 124 | kt_document_detail response = this._kt.get_document_detail_by_title(this._session, 1, "Root Folder/kt unit test1", ""); |
| ... | ... | @@ -85,7 +127,7 @@ namespace MonoTests.KnowledgeTree |
| 85 | 127 | Assert.AreEqual(this._docId, response.document_id); |
| 86 | 128 | } |
| 87 | 129 | |
| 88 | - [Test] | |
| 130 | + //[Test] | |
| 89 | 131 | public void GetDetailByFileTest() |
| 90 | 132 | { |
| 91 | 133 | kt_document_detail response = this._kt.get_document_detail_by_name(this._session, 1, "Root Folder/kt_unit_test1.txt", "F",""); |
| ... | ... | @@ -93,7 +135,7 @@ namespace MonoTests.KnowledgeTree |
| 93 | 135 | Assert.AreEqual(0, response.status_code); |
| 94 | 136 | Assert.AreEqual(this._docId, response.document_id); |
| 95 | 137 | } |
| 96 | - [Test] | |
| 138 | + //[Test] | |
| 97 | 139 | public void GetDetailByFile2Test() |
| 98 | 140 | { |
| 99 | 141 | kt_document_detail response = this._kt.get_document_detail_by_filename(this._session, 1, "Root Folder/kt_unit_test1.txt", ""); |
| ... | ... | @@ -102,7 +144,7 @@ namespace MonoTests.KnowledgeTree |
| 102 | 144 | Assert.AreEqual(this._docId, response.document_id); |
| 103 | 145 | } |
| 104 | 146 | |
| 105 | - [Test] | |
| 147 | + //[Test] | |
| 106 | 148 | public void GetDetailByUnknownNameTest() |
| 107 | 149 | { |
| 108 | 150 | kt_document_detail response = this._kt.get_document_detail_by_name(this._session, 1, "Root Folder/kt_unit_test1.ssssdasdasd", "F",""); | ... | ... |
ktwebservice/nunit/document_download.cs
| 1 | 1 | using NUnit.Framework; |
| 2 | 2 | using System; |
| 3 | 3 | using System.IO; |
| 4 | -using System.Net; | |
| 4 | +using System.Net; | |
| 5 | 5 | |
| 6 | 6 | namespace MonoTests.KnowledgeTree |
| 7 | -{ | |
| 8 | - | |
| 9 | - | |
| 7 | +{ | |
| 10 | 8 | [TestFixture] |
| 11 | 9 | public class DocumentSystemMetadataTest : KTTest |
| 12 | 10 | { |
| ... | ... | @@ -61,10 +59,11 @@ namespace MonoTests.KnowledgeTree |
| 61 | 59 | |
| 62 | 60 | |
| 63 | 61 | long length = Helper.ConvertBase64EncodingToFile(update_resp.message, filename); |
| 64 | - //System.Console.WriteLine(Helper.readFile(filename)); | |
| 62 | + System.Console.WriteLine(Helper.readFile(filename)); | |
| 65 | 63 | |
| 66 | 64 | // TODO - why??? |
| 67 | - //Assert.AreEqual(length, this._doc1.filesize); | |
| 65 | + Assert.AreEqual(length, this._doc1.filesize+1); | |
| 66 | + | |
| 68 | 67 | } |
| 69 | 68 | } |
| 70 | 69 | } | ... | ... |
ktwebservice/nunit/document_links.cs
| ... | ... | @@ -47,6 +47,15 @@ namespace MonoTests.KnowledgeTree |
| 47 | 47 | Assert.AreEqual(this._doc1.docId, linkresp.parent_document_id); |
| 48 | 48 | Assert.AreEqual(1, linkresp.links.Length); |
| 49 | 49 | Assert.AreEqual(this._doc2.docId, linkresp.links[0].document_id); |
| 50 | + Assert.AreEqual(this._doc2.title, linkresp.links[0].title); | |
| 51 | + Assert.AreEqual("Default", linkresp.links[0].document_type); | |
| 52 | + Assert.AreEqual(this._doc2.filesize+1, linkresp.links[0].filesize); | |
| 53 | + Assert.AreEqual(0.1, linkresp.links[0].version); | |
| 54 | + Assert.AreEqual("n/a", linkresp.links[0].workflow); | |
| 55 | + Assert.AreEqual("n/a", linkresp.links[0].workflow_state); | |
| 56 | + Assert.AreEqual("Reference", linkresp.links[0].link_type); | |
| 57 | + Assert.AreEqual("n/a", linkresp.links[0].custom_document_no); | |
| 58 | + Assert.AreEqual("n/a", linkresp.links[0].oem_document_no); | |
| 50 | 59 | |
| 51 | 60 | response = this._kt.unlink_documents(this._session, this._doc1.docId, this._doc2.docId); |
| 52 | 61 | Assert.AreEqual(0, response.status_code); | ... | ... |
ktwebservice/nunit/document_metadata.cs
| ... | ... | @@ -108,5 +108,42 @@ namespace MonoTests.KnowledgeTree |
| 108 | 108 | |
| 109 | 109 | } |
| 110 | 110 | |
| 111 | + [Test] | |
| 112 | + public void UpdateDocumentMetadataWithSpecialCharactersTest() | |
| 113 | + { | |
| 114 | + kt_metadata_fieldset[] fs = new kt_metadata_fieldset[1]; | |
| 115 | + fs[0] = new kt_metadata_fieldset(); | |
| 116 | + fs[0].fieldset = "General information"; | |
| 117 | + fs[0].fields = new kt_metadata_field[3]; | |
| 118 | + fs[0].fields[0] = new kt_metadata_field(); | |
| 119 | + fs[0].fields[0].name = "Document Author"; | |
| 120 | + fs[0].fields[0].value = "Joe \\Soap"; | |
| 121 | + fs[0].fields[1] = new kt_metadata_field(); | |
| 122 | + fs[0].fields[1].name = "Category"; | |
| 123 | + fs[0].fields[1].value = "Tec/hn\\ical/"; | |
| 124 | + fs[0].fields[2] = new kt_metadata_field(); | |
| 125 | + fs[0].fields[2].name = "Media Type"; | |
| 126 | + fs[0].fields[2].value = "Text'"; | |
| 127 | + | |
| 128 | + kt_sysdata_item[] sysdata = new kt_sysdata_item[0]; | |
| 129 | + | |
| 130 | + kt_document_detail update_resp = this._kt.update_document_metadata(this._session, this._docId, fs, sysdata); | |
| 131 | + Assert.AreEqual(0, update_resp.status_code); | |
| 132 | + Assert.AreEqual("General information", update_resp.metadata[1].fieldset); | |
| 133 | + | |
| 134 | + Assert.AreEqual("Document Author", update_resp.metadata[1].fields[0].name); | |
| 135 | + Assert.AreEqual("Joe \\Soap", update_resp.metadata[1].fields[0].value); | |
| 136 | + | |
| 137 | + Assert.AreEqual("Category", update_resp.metadata[1].fields[1].name); | |
| 138 | + Assert.AreEqual("Tec/hn\\ical/", update_resp.metadata[1].fields[1].value); | |
| 139 | + | |
| 140 | + Assert.AreEqual("Media Type", update_resp.metadata[1].fields[2].name); | |
| 141 | + Assert.AreEqual("Text'", update_resp.metadata[1].fields[2].value); | |
| 142 | + | |
| 143 | + | |
| 144 | + } | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 111 | 148 | } |
| 112 | 149 | } | ... | ... |
ktwebservice/nunit/folder.cs
| ... | ... | @@ -7,7 +7,7 @@ namespace MonoTests.KnowledgeTree |
| 7 | 7 | [TestFixture] |
| 8 | 8 | public class FolderTest : KTTest |
| 9 | 9 | { |
| 10 | - | |
| 10 | + | |
| 11 | 11 | private int _folder_id; |
| 12 | 12 | private int _subfolder_id; |
| 13 | 13 | |
| ... | ... | @@ -18,7 +18,7 @@ namespace MonoTests.KnowledgeTree |
| 18 | 18 | |
| 19 | 19 | [TearDown] |
| 20 | 20 | public void TearDown() |
| 21 | - { | |
| 21 | + { | |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | 24 | [Test] |
| ... | ... | @@ -30,7 +30,7 @@ namespace MonoTests.KnowledgeTree |
| 30 | 30 | Assert.AreEqual(1, response.id); |
| 31 | 31 | Assert.AreEqual("Root Folder", response.folder_name); |
| 32 | 32 | Assert.AreEqual(0, response.parent_id); |
| 33 | - Assert.AreEqual("/Root Folder", response.full_path); // ??? DOESNT SEEM CONSISTENT - should be 'Root Filder' | |
| 33 | + Assert.AreEqual("Root Folder", response.full_path); | |
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | [Test] |
| ... | ... | @@ -74,8 +74,7 @@ namespace MonoTests.KnowledgeTree |
| 74 | 74 | [Test] |
| 75 | 75 | public void GetFolderContents() |
| 76 | 76 | { |
| 77 | - | |
| 78 | - kt_folder_contents response = this._kt.get_folder_contents(this._session, this._folder_id, 1, "DF"); | |
| 77 | + kt_folder_contents response = this._kt.get_folder_contents(this._session, this._folder_id, 1, "DF"); | |
| 79 | 78 | Assert.AreEqual(0,response.status_code); |
| 80 | 79 | Assert.AreEqual(this._folder_id,response.folder_id); |
| 81 | 80 | Assert.AreEqual("kt_unit_test", response.folder_name); |
| ... | ... | @@ -86,30 +85,43 @@ namespace MonoTests.KnowledgeTree |
| 86 | 85 | Assert.AreEqual(this._subfolder_id, response2.folder_id); |
| 87 | 86 | Assert.AreEqual("subfolder", response2.folder_name); |
| 88 | 87 | Assert.AreEqual("Root Folder/kt_unit_test/subfolder", response2.full_path); |
| 89 | - } | |
| 88 | + } | |
| 90 | 89 | |
| 91 | 90 | [Test] |
| 92 | 91 | public void RenameFolder() |
| 93 | 92 | { |
| 94 | - | |
| 95 | - kt_response response = this._kt.rename_folder(this._session, this._subfolder_id, "subfolder2"); | |
| 93 | + kt_response response = this._kt.rename_folder(this._session, this._subfolder_id, "subfolde'r2"); | |
| 96 | 94 | Assert.AreEqual(0, response.status_code); |
| 97 | 95 | |
| 98 | 96 | kt_folder_detail response2 = this._kt.get_folder_detail(this._session, this._subfolder_id); |
| 99 | 97 | Assert.AreEqual(0, response2.status_code); |
| 100 | 98 | Assert.AreEqual(this._subfolder_id, response2.id); |
| 101 | - Assert.AreEqual("subfolder2", response2.folder_name); | |
| 99 | + Assert.AreEqual("subfolde'r2", response2.folder_name); | |
| 102 | 100 | Assert.AreEqual(this._folder_id, response2.parent_id); |
| 103 | - Assert.AreEqual("Root Folder/kt_unit_test/subfolder2", response2.full_path); | |
| 104 | - } | |
| 101 | + Assert.AreEqual("Root Folder/kt_unit_test/subfolde'r2", response2.full_path); | |
| 102 | + } | |
| 105 | 103 | |
| 106 | 104 | [Test] |
| 107 | 105 | public void RemoveFolder() |
| 108 | 106 | { |
| 109 | - | |
| 110 | - kt_response response = this._kt.delete_folder(this._session, this._folder_id, "unit testing remove"); | |
| 107 | + kt_response response = this._kt.delete_folder(this._session, this._folder_id, "unit testing remove"); | |
| 111 | 108 | Assert.AreEqual(0, response.status_code); |
| 112 | - } | |
| 109 | + } | |
| 113 | 110 | |
| 111 | + [Test] | |
| 112 | + public void AddFolderWithSpecialCharacters() | |
| 113 | + { | |
| 114 | + kt_folder_detail response = this._kt.create_folder(this._session, 1, "kt.unit.test"); | |
| 115 | + Assert.AreEqual(0,response.status_code); | |
| 116 | + Assert.AreEqual("kt.unit.test",response.folder_name); | |
| 117 | + | |
| 118 | + response = this._kt.create_folder(this._session, 1, "kt ' unit \" test"); | |
| 119 | + Assert.AreEqual(0,response.status_code); | |
| 120 | + Assert.AreEqual("kt ' unit \" test",response.folder_name); | |
| 121 | + | |
| 122 | + response = this._kt.create_folder(this._session, 1, "kt - unit - test"); | |
| 123 | + Assert.AreEqual(0,response.status_code); | |
| 124 | + Assert.AreEqual("kt - unit - test",response.folder_name); | |
| 125 | + } | |
| 114 | 126 | } |
| 115 | 127 | } | ... | ... |
ktwebservice/nunit/helper.cs
| ... | ... | @@ -3,6 +3,8 @@ using System.Text; |
| 3 | 3 | using System.Net; |
| 4 | 4 | using System.IO; |
| 5 | 5 | using System.Collections; |
| 6 | +using System.Data; | |
| 7 | +using System.Data.Odbc; | |
| 6 | 8 | |
| 7 | 9 | namespace MonoTests.KnowledgeTree |
| 8 | 10 | { |
| ... | ... | @@ -22,17 +24,56 @@ namespace MonoTests.KnowledgeTree |
| 22 | 24 | { |
| 23 | 25 | protected KTWebService _kt; |
| 24 | 26 | protected String _session; |
| 25 | - protected bool _verbose; | |
| 27 | + protected bool _verbose; | |
| 28 | + | |
| 26 | 29 | |
| 27 | 30 | public KTTest() |
| 28 | 31 | { |
| 29 | 32 | this._kt = new KTWebService(); |
| 30 | 33 | kt_response response = this._kt.login("admin","admin","127.0.0.1"); |
| 31 | 34 | this._session = response.message; |
| 32 | - this._verbose = false; | |
| 33 | - | |
| 35 | + this._verbose = false; | |
| 36 | + this.setupDb(); | |
| 34 | 37 | } |
| 35 | 38 | |
| 39 | + void setupDb() | |
| 40 | + { | |
| 41 | + | |
| 42 | + String connectionString = "DSN=ktdms;" + "UID=root;" + "PWD="; | |
| 43 | + try | |
| 44 | + { | |
| 45 | + IDbConnection dbcon = new OdbcConnection(connectionString); | |
| 46 | + if (dbcon == null) | |
| 47 | + { | |
| 48 | + System.Console.WriteLine("Cannot create connection"); | |
| 49 | + } | |
| 50 | + dbcon.Open(); | |
| 51 | + IDbCommand dbcmd = dbcon.CreateCommand(); | |
| 52 | + if (dbcmd == null) | |
| 53 | + { | |
| 54 | + System.Console.WriteLine("Cannot create command"); | |
| 55 | + } | |
| 56 | + dbcmd.CommandText = "DELETE FROM folders WHERE id > 1"; | |
| 57 | + dbcmd.CommandType = CommandType.Text; | |
| 58 | + dbcmd.ExecuteNonQuery(); | |
| 59 | + dbcmd.CommandText = "DELETE FROM documents"; | |
| 60 | + dbcmd.CommandType = CommandType.Text; | |
| 61 | + dbcmd.ExecuteNonQuery(); | |
| 62 | + dbcmd.CommandText = "DELETE FROM document_types_lookup WHERE name = 'NewType'"; | |
| 63 | + dbcmd.ExecuteNonQuery(); | |
| 64 | + dbcmd.CommandText = "INSERT INTO document_types_lookup(id,name) VALUES(2,'NewType')"; | |
| 65 | + dbcmd.ExecuteNonQuery(); | |
| 66 | + dbcmd.Dispose(); | |
| 67 | + dbcmd = null; | |
| 68 | + dbcon.Close(); | |
| 69 | + dbcon = null; | |
| 70 | + } | |
| 71 | + catch(Exception ex) | |
| 72 | + { | |
| 73 | + System.Console.WriteLine(ex.Message); | |
| 74 | + } | |
| 75 | + } | |
| 76 | + | |
| 36 | 77 | ~KTTest() |
| 37 | 78 | { |
| 38 | 79 | this._kt.logout(this._session); |
| ... | ... | @@ -188,7 +229,7 @@ namespace MonoTests.KnowledgeTree |
| 188 | 229 | this.title = "kt unit test" + offset; |
| 189 | 230 | this.realFilename = "kt_unit_test" + offset + ".txt"; |
| 190 | 231 | this.filename = (Helper.isUnix()?("/tmp/"):("c:\\")) + this.realFilename; |
| 191 | - this.content = "hello world!"; | |
| 232 | + this.content = "Hello World!\nThis is a test! And more!\n\n\r\n"; | |
| 192 | 233 | this.docId = 0; |
| 193 | 234 | this.session = session; |
| 194 | 235 | this.kt = kt; |
| ... | ... | @@ -423,7 +464,6 @@ namespace MonoTests.KnowledgeTree |
| 423 | 464 | System.IO.FileStream inFile; |
| 424 | 465 | |
| 425 | 466 | byte[] binaryData; |
| 426 | - string base64String = ""; | |
| 427 | 467 | |
| 428 | 468 | try |
| 429 | 469 | { | ... | ... |
ktwebservice/nunit/makefile
| 1 | -RESULTS= authentication.result document_detail.result document_add.result document_checkout.result document_type.result document_links.result document_owner.result document_rename.result document_history.result document_workflow.result document_copy.result folder.result document_metadata.result document_system_metadata.result query.result | |
| 2 | -#document_download.result | |
| 1 | +RESULTS= authentication.result document_detail.result document_contents.result document_history.result folder.result document_metadata.result document_add.result document_checkout.result document_type.result document_links.result document_owner.result document_rename.result document_workflow.result document_copy.result document_system_metadata.result query.result document_download.result | |
| 3 | 2 | PROXY=KTproxy.cs |
| 4 | 3 | WSDL=ktdms.wsdl |
| 5 | 4 | ROOT_URL=http://ktdms.trunk |
| ... | ... | @@ -9,10 +8,8 @@ all: ${RESULTS} |
| 9 | 8 | |
| 10 | 9 | results: clean-results ${RESULTS} |
| 11 | 10 | |
| 12 | -KTproxy.dll: KTproxy.cs helper.cs | |
| 13 | - mcs -r:System.Web.Services /target:library KTproxy.cs helper.cs | |
| 14 | - | |
| 15 | - | |
| 11 | +KTproxy.dll: KTproxy.cs helper.cs | |
| 12 | + mcs -r:System.Web.Services -r:System.Data.dll /target:library KTproxy.cs helper.cs | |
| 16 | 13 | |
| 17 | 14 | KTproxy.cs: ktdms.wsdl |
| 18 | 15 | wsdl -out:${PROXY} ${WSDL} |
| ... | ... | @@ -26,8 +23,8 @@ clean: |
| 26 | 23 | clean-results: |
| 27 | 24 | rm -f ${RESULTS} |
| 28 | 25 | |
| 29 | -%.dll: %.cs KTproxy.dll | |
| 30 | - mcs -r:System.Web.Services -r:nunit.framework /r:KTproxy.dll -debug /target:library -out:$@ $< | |
| 26 | +%.dll: %.cs KTproxy.dll | |
| 27 | + mcs -r:System.Web.Services -r:nunit.framework /r:KTproxy.dll -debug /target:library -out:$@ $< | |
| 31 | 28 | |
| 32 | 29 | %.result: %.dll |
| 33 | 30 | (export KT_ROOT_URL=${ROOT_URL}; nunit-console $<) | ... | ... |
ktwebservice/nunit/query.cs
| ... | ... | @@ -7,16 +7,16 @@ namespace MonoTests.KnowledgeTree |
| 7 | 7 | [TestFixture] |
| 8 | 8 | public class QueryTest : KTTest |
| 9 | 9 | { |
| 10 | - | |
| 10 | + | |
| 11 | 11 | |
| 12 | 12 | [SetUp] |
| 13 | 13 | public void SetUp() |
| 14 | - { | |
| 14 | + { | |
| 15 | 15 | } |
| 16 | 16 | |
| 17 | 17 | [TearDown] |
| 18 | 18 | public void TearDown() |
| 19 | - { | |
| 19 | + { | |
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | [Test] |
| ... | ... | @@ -24,35 +24,38 @@ namespace MonoTests.KnowledgeTree |
| 24 | 24 | { |
| 25 | 25 | Document doc = new Document(0,this._session, this._kt, false, false); |
| 26 | 26 | doc.createFile(1); |
| 27 | - kt_search_response response = this._kt.search(this._session, "Filesize = \"13\"", ""); | |
| 27 | + int filesize = doc.content.Length+1; | |
| 28 | + kt_search_response response = this._kt.search(this._session, "Filesize = \""+filesize+"\"", ""); | |
| 28 | 29 | |
| 29 | 30 | Assert.AreEqual(0,response.status_code); |
| 30 | - Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 31 | + Assert.AreEqual("n/a", response.hits[0].custom_document_no); | |
| 32 | + Assert.AreEqual("n/a", response.hits[0].oem_document_no); | |
| 33 | + Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 31 | 34 | Assert.AreEqual(doc.title,response.hits[0].title); |
| 32 | - Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 33 | - | |
| 35 | + Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 36 | + | |
| 34 | 37 | response = this._kt.search(this._session, "DocumentId = \""+ response.hits[0].document_id +"\"", ""); |
| 35 | 38 | |
| 36 | 39 | Assert.AreEqual(0,response.status_code); |
| 37 | - Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 40 | + Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 38 | 41 | Assert.AreEqual(doc.title,response.hits[0].title); |
| 39 | - Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 40 | - | |
| 42 | + Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 43 | + | |
| 41 | 44 | response = this._kt.search(this._session, "Title = \""+ response.hits[0].title +"\"", ""); |
| 42 | 45 | |
| 43 | 46 | Assert.AreEqual(0,response.status_code); |
| 44 | - Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 47 | + Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 45 | 48 | Assert.AreEqual(doc.title,response.hits[0].title); |
| 46 | - Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 47 | - | |
| 48 | - | |
| 49 | + Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 50 | + | |
| 51 | + | |
| 49 | 52 | response = this._kt.search(this._session, "Filename = \""+ response.hits[0].filename +"\"", ""); |
| 50 | 53 | |
| 51 | 54 | Assert.AreEqual(0,response.status_code); |
| 52 | - Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 55 | + Assert.AreEqual(doc.content.Length + 1,response.hits[0].filesize); | |
| 53 | 56 | Assert.AreEqual(doc.title,response.hits[0].title); |
| 54 | - Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 55 | - | |
| 57 | + Assert.AreEqual(doc.realFilename,response.hits[0].filename); | |
| 58 | + | |
| 56 | 59 | doc.deleteFile(); |
| 57 | 60 | } |
| 58 | 61 | } | ... | ... |
ktwebservice/webservice.php
| ... | ... | @@ -59,7 +59,18 @@ if (defined('HAS_SEARCH_FUNCTIONALITY')) |
| 59 | 59 | require_once(KT_DIR . '/search2/search/search.inc.php'); |
| 60 | 60 | } |
| 61 | 61 | |
| 62 | -// TODO: Test getting files/metadata based on versioning works and implementation is consistent. | |
| 62 | +// TODO: allow downloading of metadata versions | |
| 63 | +// TODO: allow downloading of document versions | |
| 64 | +// TODO: chunking search results | |
| 65 | +// TODO: add basic permissions management - add permissions to folder based on user/groups | |
| 66 | +// TODO: refactor!!! download manager, split this file into a few smaller ones, etc | |
| 67 | +// TOdO: define more reason codes! | |
| 68 | +// TODO: get_folder must have a 'create' option | |
| 69 | +// TODO: redo metadata encoding | |
| 70 | +// TODO: unit tests - metadata - test return values in selectin - list/tree | |
| 71 | +// TODO: ktwsapi/php must be made compatible with v2/v3 | |
| 72 | + | |
| 73 | +// NOTE: some features are not implemented yet. most expected for v3. e.g. oem_document_no, custom_document_no, download($version)., get_metadata($version) | |
| 63 | 74 | |
| 64 | 75 | // Status Codes as defined in the specification. |
| 65 | 76 | |
| ... | ... | @@ -67,16 +78,24 @@ define('KTWS_SUCCESS', 0); |
| 67 | 78 | define('KTWS_ERR_INVALID_SESSION', 1); |
| 68 | 79 | define('KTWS_ERR_AUTHENTICATION_ERROR', 2); |
| 69 | 80 | define('KTWS_ERR_INSUFFICIENT_PERMISSIONS', 3); |
| 81 | + | |
| 70 | 82 | define('KTWS_ERR_FILE_NOT_FOUND', 10); |
| 71 | 83 | define('KTWS_ERR_INVALID_FILENAME', 20); |
| 84 | + | |
| 72 | 85 | define('KTWS_ERR_INVALID_DOCUMENT', 21); |
| 73 | 86 | define('KTWS_ERR_INVALID_FOLDER', 22); |
| 74 | 87 | define('KTWS_ERR_INVALID_METADATA', 23); |
| 75 | 88 | define('KTWS_ERR_INVALID_REASON', 24); |
| 76 | 89 | define('KTWS_ERR_INVALID_DEPTH', 25); |
| 90 | +define('KTWS_ERR_INVALID_DOCUMENT_TYPE', 26); | |
| 91 | + | |
| 77 | 92 | define('KTWS_ERR_PROBLEM', 98); |
| 78 | 93 | define('KTWS_ERR_DB_PROBLEM', 99); |
| 79 | 94 | |
| 95 | +if (!defined('LATEST_WEBSERVICE_VERSION')) | |
| 96 | +{ | |
| 97 | + define('LATEST_WEBSERVICE_VERSION',2); | |
| 98 | +} | |
| 80 | 99 | |
| 81 | 100 | function bool2str($bool) |
| 82 | 101 | { |
| ... | ... | @@ -120,7 +139,7 @@ class KTWebService |
| 120 | 139 | var $version; |
| 121 | 140 | var $ktapi; |
| 122 | 141 | |
| 123 | - | |
| 142 | + static $wsclass = 'KTWebService'; | |
| 124 | 143 | |
| 125 | 144 | function KTWebService() |
| 126 | 145 | { |
| ... | ... | @@ -182,7 +201,11 @@ class KTWebService |
| 182 | 201 | 'id' => 'int', |
| 183 | 202 | 'item_type' => 'string', |
| 184 | 203 | |
| 204 | + 'custom_document_no' => 'string', | |
| 205 | + 'oem_document_no' => 'string', | |
| 206 | + | |
| 185 | 207 | 'title' => 'string', |
| 208 | + 'document_type' => 'string', | |
| 186 | 209 | 'filename' => 'string', |
| 187 | 210 | 'filesize' => 'string', |
| 188 | 211 | |
| ... | ... | @@ -199,7 +222,7 @@ class KTWebService |
| 199 | 222 | |
| 200 | 223 | 'version' => 'string', |
| 201 | 224 | |
| 202 | - 'immutable'=>'boolean', | |
| 225 | + 'is_immutable'=>'string', | |
| 203 | 226 | 'permissions' => 'string', |
| 204 | 227 | |
| 205 | 228 | 'workflow'=>'string', |
| ... | ... | @@ -258,23 +281,45 @@ class KTWebService |
| 258 | 281 | array( |
| 259 | 282 | 'status_code'=>'int', |
| 260 | 283 | 'message'=>'string', |
| 284 | + | |
| 285 | + 'document_id' => 'int', | |
| 286 | + | |
| 287 | + 'custom_document_no' => 'string', | |
| 288 | + 'oem_document_no' => 'string', | |
| 289 | + | |
| 261 | 290 | 'title' => 'string', |
| 262 | 291 | 'document_type' => 'string', |
| 263 | - 'version' => 'string', | |
| 292 | + 'full_path' => 'string', | |
| 264 | 293 | 'filename' => 'string', |
| 265 | - 'created_date' => 'string', | |
| 294 | + 'filesize' => 'int', | |
| 295 | + 'folder_id' => 'int', | |
| 296 | + | |
| 266 | 297 | 'created_by' => 'string', |
| 267 | - 'modified_date' => 'string', | |
| 298 | + 'created_date' => 'string', | |
| 299 | + | |
| 300 | + 'checked_out_by'=>'string', | |
| 301 | + 'checked_out_date'=>'string', | |
| 302 | + | |
| 268 | 303 | 'modified_by' => 'string', |
| 269 | - 'document_id' => 'int', | |
| 270 | - 'folder_id' => 'int', | |
| 304 | + 'modified_date' => 'string', | |
| 305 | + | |
| 306 | + 'owned_by'=>'string', | |
| 307 | + | |
| 308 | + 'version' => 'float', | |
| 309 | + | |
| 310 | + 'is_immutable'=>'boolean', | |
| 311 | + 'permissions' => 'string', | |
| 312 | + | |
| 271 | 313 | 'workflow' => 'string', |
| 272 | 314 | 'workflow_state' => 'string', |
| 273 | - 'full_path' => 'string', | |
| 274 | - 'owner'=>'string', | |
| 275 | - 'is_immutable'=>'boolean', | |
| 276 | - 'checked_out_date'=>'string', | |
| 277 | - 'checked_out_by'=>'string', | |
| 315 | + | |
| 316 | + 'mime_type' => 'string', | |
| 317 | + 'mime_icon_path' => 'string', | |
| 318 | + 'mime_display' => 'string', | |
| 319 | + | |
| 320 | + 'storage_path' => 'string', | |
| 321 | + | |
| 322 | + | |
| 278 | 323 | 'metadata' => "{urn:$this->namespace}kt_metadata_fieldsets", |
| 279 | 324 | 'links' => "{urn:$this->namespace}kt_linked_documents", |
| 280 | 325 | 'transitions' => "{urn:$this->namespace}kt_workflow_transitions", |
| ... | ... | @@ -289,25 +334,44 @@ class KTWebService |
| 289 | 334 | $this->__typedef["{urn:$this->namespace}kt_search_result_item"] = |
| 290 | 335 | array( |
| 291 | 336 | 'document_id' => 'int', |
| 337 | + | |
| 338 | + 'custom_document_no' => 'string', | |
| 339 | + 'oem_document_no' => 'string', | |
| 340 | + | |
| 292 | 341 | 'relevance' => 'float', |
| 293 | 342 | 'text' => 'string', |
| 343 | + | |
| 294 | 344 | 'title' => 'string', |
| 345 | + 'document_type' => 'string', | |
| 295 | 346 | 'fullpath' => 'string', |
| 296 | - 'filesize' => 'int', | |
| 297 | - 'version' => 'string', | |
| 298 | - 'filename' => 'string', | |
| 347 | + 'filename' => 'string', | |
| 348 | + 'filesize' => 'int', | |
| 299 | 349 | 'folder_id' => 'int', |
| 300 | - 'workflow' => 'string', | |
| 301 | - 'workflow_state' => 'string', | |
| 302 | - 'mime_type' => 'string', | |
| 303 | - 'owner' => 'string', | |
| 350 | + | |
| 304 | 351 | 'created_by' => 'string', |
| 305 | 352 | 'created_date' => 'string', |
| 306 | - 'modified_by' => 'string', | |
| 307 | - 'modified_date' => 'string', | |
| 353 | + | |
| 308 | 354 | 'checked_out_by' => 'string', |
| 309 | 355 | 'checked_out_date' => 'string', |
| 356 | + | |
| 357 | + 'modified_by' => 'string', | |
| 358 | + 'modified_date' => 'string', | |
| 359 | + | |
| 360 | + 'owned_by' => 'string', | |
| 361 | + | |
| 362 | + 'version' => 'float', | |
| 310 | 363 | 'is_immutable' => 'boolean', |
| 364 | + 'permissions' => 'string', | |
| 365 | + | |
| 366 | + 'workflow' => 'string', | |
| 367 | + 'workflow_state' => 'string', | |
| 368 | + | |
| 369 | + 'mime_type' => 'string', | |
| 370 | + 'mime_icon_path' => 'string', | |
| 371 | + 'mime_display' => 'string', | |
| 372 | + | |
| 373 | + 'storage_path' => 'string', | |
| 374 | + | |
| 311 | 375 | 'status' => 'string', |
| 312 | 376 | ); |
| 313 | 377 | |
| ... | ... | @@ -351,7 +415,6 @@ class KTWebService |
| 351 | 415 | 'parent_id' => 'int' |
| 352 | 416 | ); |
| 353 | 417 | |
| 354 | - | |
| 355 | 418 | $this->__typedef["{urn:$this->namespace}kt_metadata_selection"] = |
| 356 | 419 | array( |
| 357 | 420 | array( |
| ... | ... | @@ -359,7 +422,6 @@ class KTWebService |
| 359 | 422 | ) |
| 360 | 423 | ); |
| 361 | 424 | |
| 362 | - | |
| 363 | 425 | $this->__typedef["{urn:$this->namespace}kt_metadata_field"] = |
| 364 | 426 | array( |
| 365 | 427 | 'name' => 'string', |
| ... | ... | @@ -421,11 +483,27 @@ class KTWebService |
| 421 | 483 | 'datetime' => 'string' |
| 422 | 484 | ); |
| 423 | 485 | |
| 486 | + if ($this->version >= 2) | |
| 487 | + { | |
| 488 | + $this->__typedef["{urn:$this->namespace}kt_document_transaction_history_item"] = | |
| 489 | + array( | |
| 490 | + 'transaction_name'=>'string', | |
| 491 | + 'username'=>'string', | |
| 492 | + 'version' => 'float', | |
| 493 | + 'comment' => 'string', | |
| 494 | + 'datetime' => 'string' | |
| 495 | + ); | |
| 496 | + } | |
| 497 | + | |
| 424 | 498 | $this->__typedef["{urn:$this->namespace}kt_linked_document"] = |
| 425 | 499 | array( |
| 426 | 500 | 'document_id'=>'int', |
| 427 | - 'title'=>'string', | |
| 428 | - 'size' => 'int', | |
| 501 | + 'custom_document_no' => 'string', | |
| 502 | + 'oem_document_no' => 'string', | |
| 503 | + 'title'=>'string', | |
| 504 | + 'document_type'=>'string', | |
| 505 | + 'filesize' => 'int', | |
| 506 | + 'version' => 'float', | |
| 429 | 507 | 'workflow' => 'string', |
| 430 | 508 | 'workflow_state' => 'string', |
| 431 | 509 | 'link_type' => 'string' |
| ... | ... | @@ -467,6 +545,16 @@ class KTWebService |
| 467 | 545 | 'content_version'=>'string', |
| 468 | 546 | ); |
| 469 | 547 | |
| 548 | + if ($this->version >= 2) | |
| 549 | + { | |
| 550 | + $this->__typedef["{urn:$this->namespace}kt_document_version_history_item"] = | |
| 551 | + array( | |
| 552 | + 'user'=>'string', | |
| 553 | + 'metadata_version'=>'int', | |
| 554 | + 'content_version'=>'float', | |
| 555 | + ); | |
| 556 | + } | |
| 557 | + | |
| 470 | 558 | $this->__typedef["{urn:$this->namespace}kt_document_version_history"] = |
| 471 | 559 | array( |
| 472 | 560 | array( |
| ... | ... | @@ -509,7 +597,6 @@ class KTWebService |
| 509 | 597 | ) |
| 510 | 598 | ); |
| 511 | 599 | |
| 512 | - | |
| 513 | 600 | $this->__typedef["{urn:$this->namespace}kt_client_policies_response"] = |
| 514 | 601 | array( |
| 515 | 602 | 'status_code' => 'int', |
| ... | ... | @@ -520,7 +607,6 @@ class KTWebService |
| 520 | 607 | /* methods */ |
| 521 | 608 | if (defined('HAS_SEARCH_FUNCTIONALITY')) |
| 522 | 609 | { |
| 523 | - | |
| 524 | 610 | $this->__dispatch_map['search'] = array( |
| 525 | 611 | 'in' => array('session_id' => 'string', 'search'=>'string' ,'options'=>'string'), |
| 526 | 612 | 'out' => array('return' => "{urn:$this->namespace}kt_search_response" ), |
| ... | ... | @@ -539,7 +625,6 @@ class KTWebService |
| 539 | 625 | 'out' => array('return' => "{urn:$this->namespace}kt_response" ), |
| 540 | 626 | ); |
| 541 | 627 | |
| 542 | - | |
| 543 | 628 | // logout |
| 544 | 629 | $this->__dispatch_map['logout'] = |
| 545 | 630 | array('in' => array('session_id' => 'string' ), |
| ... | ... | @@ -552,12 +637,22 @@ class KTWebService |
| 552 | 637 | 'out' => array('return' => "{urn:$this->namespace}kt_folder_detail"), |
| 553 | 638 | ); |
| 554 | 639 | |
| 640 | + if ($this->version >=3) | |
| 641 | + { | |
| 642 | + $this->__dispatch_map['get_folder_detail']['in'] = array('session_id' => 'string', 'folder_id' => 'int', 'create'=>'boolean' ); | |
| 643 | + } | |
| 644 | + | |
| 555 | 645 | // get_folder_detail_by_name |
| 556 | 646 | $this->__dispatch_map['get_folder_detail_by_name'] = |
| 557 | 647 | array('in' => array('session_id' => 'string', 'folder_name' => 'string' ), |
| 558 | 648 | 'out' => array('return' => "{urn:$this->namespace}kt_folder_detail"), |
| 559 | 649 | ); |
| 560 | 650 | |
| 651 | + if ($this->version >=3) | |
| 652 | + { | |
| 653 | + $this->__dispatch_map['get_folder_detail_by_name']['in'] = array('session_id' => 'string', 'folder_id' => 'int', 'create'=>'boolean' ); | |
| 654 | + } | |
| 655 | + | |
| 561 | 656 | // get_folder_contents |
| 562 | 657 | $this->__dispatch_map['get_folder_contents'] = |
| 563 | 658 | array('in' => array('session_id'=>'string','folder_id'=>'int','depth'=>'int','what'=>'string'), |
| ... | ... | @@ -580,7 +675,6 @@ class KTWebService |
| 580 | 675 | ); |
| 581 | 676 | } |
| 582 | 677 | |
| 583 | - | |
| 584 | 678 | // delete_folder |
| 585 | 679 | $this->__dispatch_map['delete_folder'] = |
| 586 | 680 | array('in' => array('session_id'=>'string','folder_id'=>'int','reason' =>'string'), |
| ... | ... | @@ -635,7 +729,6 @@ class KTWebService |
| 635 | 729 | $this->__dispatch_map['get_document_detail']['in'] = array('session_id' => 'string', 'document_id' => 'int', 'detail'=>'string' ); |
| 636 | 730 | } |
| 637 | 731 | |
| 638 | - | |
| 639 | 732 | // checkin_document |
| 640 | 733 | $this->__dispatch_map['checkin_document'] = |
| 641 | 734 | array('in' => array('session_id'=>'string','document_id'=>'int','filename'=>'string','reason' =>'string','tempfilename' =>'string', 'major_update'=>'boolean' ), |
| ... | ... | @@ -666,7 +759,6 @@ class KTWebService |
| 666 | 759 | array('in' => array('session_id'=>'string','document_id'=>'int','filename'=>'string','reason' =>'string','tempfilename' =>'string', 'major_update'=>'boolean', 'metadata'=>"{urn:$this->namespace}kt_metadata_fieldsets",'sysdata'=>"{urn:$this->namespace}kt_sysdata" ), |
| 667 | 760 | 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ) |
| 668 | 761 | ); |
| 669 | - | |
| 670 | 762 | } |
| 671 | 763 | |
| 672 | 764 | // add_document |
| ... | ... | @@ -701,12 +793,8 @@ class KTWebService |
| 701 | 793 | array('in' => array('session_id'=>'string','folder_id'=>'int','title'=>'string','filename'=>'string','documentype' =>'string','tempfilename' =>'string', 'metadata'=>"{urn:$this->namespace}kt_metadata_fieldsets",'sysdata'=>"{urn:$this->namespace}kt_sysdata" ), |
| 702 | 794 | 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ) |
| 703 | 795 | ); |
| 704 | - | |
| 705 | - | |
| 706 | 796 | } |
| 707 | 797 | |
| 708 | - | |
| 709 | - | |
| 710 | 798 | // get_document_detail_by_name |
| 711 | 799 | $this->__dispatch_map['get_document_detail_by_name'] = |
| 712 | 800 | array('in' => array('session_id' => 'string', 'document_name' => 'string', 'what'=>'string' ), |
| ... | ... | @@ -742,7 +830,6 @@ class KTWebService |
| 742 | 830 | ); |
| 743 | 831 | } |
| 744 | 832 | |
| 745 | - | |
| 746 | 833 | // checkout_small_document |
| 747 | 834 | $this->__dispatch_map['checkout_small_document'] = |
| 748 | 835 | array('in' => array('session_id'=>'string','document_id'=>'int','reason' =>'string','download' => 'boolean'), |
| ... | ... | @@ -754,7 +841,6 @@ class KTWebService |
| 754 | 841 | $this->__dispatch_map['checkout_small_document']['out'] = array('return' => "{urn:$this->namespace}kt_document_detail" ); |
| 755 | 842 | } |
| 756 | 843 | |
| 757 | - | |
| 758 | 844 | // checkout_base64_document |
| 759 | 845 | $this->__dispatch_map['checkout_base64_document'] = |
| 760 | 846 | array('in' => array('session_id'=>'string','document_id'=>'int','reason' =>'string','download' => 'boolean'), |
| ... | ... | @@ -767,7 +853,6 @@ class KTWebService |
| 767 | 853 | $this->__dispatch_map['checkout_base64_document']['out'] = array('return' => "{urn:$this->namespace}kt_document_detail" ); |
| 768 | 854 | } |
| 769 | 855 | |
| 770 | - | |
| 771 | 856 | // undo_document_checkout |
| 772 | 857 | $this->__dispatch_map['undo_document_checkout'] = |
| 773 | 858 | array('in' => array('session_id'=>'string','document_id'=>'int','reason' =>'string'), |
| ... | ... | @@ -779,8 +864,6 @@ class KTWebService |
| 779 | 864 | $this->__dispatch_map['undo_document_checkout']['out'] = array('return' => "{urn:$this->namespace}kt_document_detail" ); |
| 780 | 865 | } |
| 781 | 866 | |
| 782 | - | |
| 783 | - | |
| 784 | 867 | // download_document |
| 785 | 868 | $this->__dispatch_map['download_document'] = |
| 786 | 869 | array('in' => array('session_id'=>'string','document_id'=>'int' ), |
| ... | ... | @@ -800,13 +883,19 @@ class KTWebService |
| 800 | 883 | 'alias' => 'download_small_document' |
| 801 | 884 | ); |
| 802 | 885 | |
| 886 | + if ($this->version >= 3) | |
| 887 | + { | |
| 888 | + $this->__dispatch_map['download_document']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string' ); | |
| 889 | + $this->__dispatch_map['download_small_document']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string' ); | |
| 890 | + $this->__dispatch_map['download_base64_document']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string' ); | |
| 891 | + } | |
| 892 | + | |
| 803 | 893 | // delete_document |
| 804 | 894 | $this->__dispatch_map['delete_document'] = |
| 805 | 895 | array('in' => array('session_id'=>'string','document_id'=>'int','reason'=>'string'), |
| 806 | 896 | 'out' => array( 'return' => "{urn:$this->namespace}kt_response" ), |
| 807 | 897 | ); |
| 808 | 898 | |
| 809 | - | |
| 810 | 899 | // change_document_owner |
| 811 | 900 | $this->__dispatch_map['change_document_owner'] = |
| 812 | 901 | array('in' => array('session_id'=>'string','document_id'=>'int','username'=>'string','reason'=>'string'), |
| ... | ... | @@ -818,7 +907,6 @@ class KTWebService |
| 818 | 907 | $this->__dispatch_map['change_document_owner']['out'] = array( 'return' => "{urn:$this->namespace}kt_document_detail" ); |
| 819 | 908 | } |
| 820 | 909 | |
| 821 | - | |
| 822 | 910 | // copy_document |
| 823 | 911 | $this->__dispatch_map['copy_document'] = |
| 824 | 912 | array('in' => array('session_id'=>'string','document_id'=>'int','folder_id'=>'int','reason'=>'string','newtitle'=>'string','newfilename'=>'string'), |
| ... | ... | @@ -858,7 +946,6 @@ class KTWebService |
| 858 | 946 | $this->__dispatch_map['rename_document_filename']['out'] = array( 'return' => "{urn:$this->namespace}kt_document_detail" ); |
| 859 | 947 | } |
| 860 | 948 | |
| 861 | - | |
| 862 | 949 | // change_document_type |
| 863 | 950 | $this->__dispatch_map['change_document_type'] = |
| 864 | 951 | array('in' => array('session_id'=>'string','document_id'=>'int', 'documenttype'=>'string' ), |
| ... | ... | @@ -916,6 +1003,11 @@ class KTWebService |
| 916 | 1003 | 'out' => array( 'return' => "{urn:$this->namespace}kt_metadata_response" ), |
| 917 | 1004 | ); |
| 918 | 1005 | |
| 1006 | + if ($this->version >= 3) | |
| 1007 | + { | |
| 1008 | + $this->__dispatch_map['get_document_metadata']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string'); | |
| 1009 | + } | |
| 1010 | + | |
| 919 | 1011 | // get_document_type_metadata |
| 920 | 1012 | $this->__dispatch_map['get_document_type_metadata'] = |
| 921 | 1013 | array('in' => array('session_id'=>'string','document_type'=>'string' ), |
| ... | ... | @@ -934,17 +1026,14 @@ class KTWebService |
| 934 | 1026 | 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ) |
| 935 | 1027 | ); |
| 936 | 1028 | |
| 937 | - | |
| 938 | 1029 | } |
| 939 | 1030 | |
| 940 | - | |
| 941 | 1031 | //get_document_workflow_transitions |
| 942 | 1032 | $this->__dispatch_map['get_document_workflow_transitions'] = |
| 943 | 1033 | array('in' => array('session_id'=>'string','document_id'=>'int' ), |
| 944 | 1034 | 'out' => array( 'return' => "{urn:$this->namespace}kt_workflow_transitions_response" ), |
| 945 | 1035 | ); |
| 946 | 1036 | |
| 947 | - | |
| 948 | 1037 | //get_document_workflow_state |
| 949 | 1038 | $this->__dispatch_map['get_document_workflow_state'] = |
| 950 | 1039 | array('in' => array('session_id'=>'string','document_id'=>'int' ), |
| ... | ... | @@ -957,7 +1046,6 @@ class KTWebService |
| 957 | 1046 | 'out' => array( 'return' => "{urn:$this->namespace}kt_document_transaction_history_response" ), |
| 958 | 1047 | ); |
| 959 | 1048 | |
| 960 | - | |
| 961 | 1049 | // get_document_version_history |
| 962 | 1050 | $this->__dispatch_map['get_document_version_history'] = |
| 963 | 1051 | array('in' => array('session_id'=>'string','document_id'=>'int' ), |
| ... | ... | @@ -982,7 +1070,21 @@ class KTWebService |
| 982 | 1070 | 'out' => array( 'return' => "{urn:$this->namespace}kt_client_policies_response" ), |
| 983 | 1071 | ); |
| 984 | 1072 | |
| 1073 | + if ($this->version >= 2) | |
| 1074 | + { | |
| 1075 | + $this->__dispatch_map['get_client_policies']['in'] = array('session_id'=>'string', 'client'=>'string'); | |
| 1076 | + } | |
| 1077 | + } | |
| 985 | 1078 | |
| 1079 | + function get() | |
| 1080 | + { | |
| 1081 | + static $ws = null; | |
| 1082 | + if (is_null($ws)) | |
| 1083 | + { | |
| 1084 | + $classname = KTWebService::$wsclass; | |
| 1085 | + $ws = new $classname(); | |
| 1086 | + } | |
| 1087 | + return $ws; | |
| 986 | 1088 | } |
| 987 | 1089 | |
| 988 | 1090 | function debug($msg, $function = null, $level=0) |
| ... | ... | @@ -1012,6 +1114,14 @@ class KTWebService |
| 1012 | 1114 | } |
| 1013 | 1115 | } |
| 1014 | 1116 | |
| 1117 | + function _status($code, $message='') | |
| 1118 | + { | |
| 1119 | + if (PEAR::isError($message)) | |
| 1120 | + { | |
| 1121 | + $message = $message->getMessage(); | |
| 1122 | + } | |
| 1123 | + return array('status_code'=>$code, 'message'=>$message); | |
| 1124 | + } | |
| 1015 | 1125 | |
| 1016 | 1126 | /** |
| 1017 | 1127 | * This is used by all exposed functions dependant on the sessionid. |
| ... | ... | @@ -1032,12 +1142,7 @@ class KTWebService |
| 1032 | 1142 | |
| 1033 | 1143 | if ( PEAR::isError($session)) |
| 1034 | 1144 | { |
| 1035 | - $response=array( | |
| 1036 | - 'status_code'=>KTWS_ERR_INVALID_SESSION, | |
| 1037 | - 'message'=>$session->getMessage() | |
| 1038 | - ); | |
| 1039 | - | |
| 1040 | - return $response; | |
| 1145 | + return KTWebService::_status(KTWS_ERR_INVALID_SESSION,$session); | |
| 1041 | 1146 | } |
| 1042 | 1147 | $this->ktapi = $kt; |
| 1043 | 1148 | return $kt; |
| ... | ... | @@ -1051,10 +1156,7 @@ class KTWebService |
| 1051 | 1156 | */ |
| 1052 | 1157 | function anonymous_login($ip=null) |
| 1053 | 1158 | { |
| 1054 | - $response = array( | |
| 1055 | - 'status_code'=>KTWS_ERR_AUTHENTICATION_ERROR, | |
| 1056 | - 'message'=>'', | |
| 1057 | - ); | |
| 1159 | + $response = KTWebService::_status(KTWS_ERR_AUTHENTICATION_ERROR); | |
| 1058 | 1160 | |
| 1059 | 1161 | $kt = new KTAPI(); |
| 1060 | 1162 | |
| ... | ... | @@ -1086,10 +1188,7 @@ class KTWebService |
| 1086 | 1188 | */ |
| 1087 | 1189 | function login($username, $password, $ip=null) |
| 1088 | 1190 | { |
| 1089 | - $response = array( | |
| 1090 | - 'status_code'=>KTWS_ERR_AUTHENTICATION_ERROR, | |
| 1091 | - 'message'=>'', | |
| 1092 | - ); | |
| 1191 | + $response = KTWebService::_status(KTWS_ERR_AUTHENTICATION_ERROR); | |
| 1093 | 1192 | |
| 1094 | 1193 | $kt = new KTAPI(); |
| 1095 | 1194 | |
| ... | ... | @@ -1126,10 +1225,7 @@ class KTWebService |
| 1126 | 1225 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 1127 | 1226 | } |
| 1128 | 1227 | |
| 1129 | - $response=array( | |
| 1130 | - 'status_code'=>KTWS_ERR_INVALID_SESSION, | |
| 1131 | - 'message'=>'' | |
| 1132 | - ); | |
| 1228 | + $response = KTWebService::_status(KTWS_ERR_INVALID_SESSION); | |
| 1133 | 1229 | |
| 1134 | 1230 | $session = &$kt->get_session(); |
| 1135 | 1231 | if (PEAR::isError($session)) |
| ... | ... | @@ -1164,10 +1260,7 @@ class KTWebService |
| 1164 | 1260 | $folder = &$kt->get_folder_by_id($folder_id); |
| 1165 | 1261 | if (PEAR::isError($folder)) |
| 1166 | 1262 | { |
| 1167 | - $response=array( | |
| 1168 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1169 | - 'message'=>$folder->getMessage() | |
| 1170 | - ); | |
| 1263 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); | |
| 1171 | 1264 | $this->debug("get_folder_detail - " . $folder->getMessage(), $session_id); |
| 1172 | 1265 | return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); |
| 1173 | 1266 | } |
| ... | ... | @@ -1198,10 +1291,7 @@ class KTWebService |
| 1198 | 1291 | $folder = &$kt->get_folder_by_name($folder_name); |
| 1199 | 1292 | if (PEAR::isError($folder)) |
| 1200 | 1293 | { |
| 1201 | - $response=array( | |
| 1202 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1203 | - 'message'=>$folder->getMessage() | |
| 1204 | - ); | |
| 1294 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); | |
| 1205 | 1295 | $this->debug("get_folder_detail_by_name - cannot get folder $folder_name - " . $folder->getMessage(), $session_id); |
| 1206 | 1296 | return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); |
| 1207 | 1297 | } |
| ... | ... | @@ -1211,48 +1301,6 @@ class KTWebService |
| 1211 | 1301 | $detail['message']=''; |
| 1212 | 1302 | |
| 1213 | 1303 | return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $detail); |
| 1214 | - | |
| 1215 | - } | |
| 1216 | - | |
| 1217 | - /** | |
| 1218 | - * Encodes an array as kt_folder_item | |
| 1219 | - * | |
| 1220 | - * @param array $item | |
| 1221 | - * @param string $name | |
| 1222 | - * @return SOAP_Value of kt_folder_item | |
| 1223 | - * @access private | |
| 1224 | - * @static | |
| 1225 | - */ | |
| 1226 | - function _encode_folder_item($item, $name='item') | |
| 1227 | - { | |
| 1228 | - $item['id'] = (int) $item['id']; | |
| 1229 | - | |
| 1230 | - if (!empty($item['items'])) | |
| 1231 | - { | |
| 1232 | - $item['items'] = KTWebService::_encode_folder_items($item['items']); | |
| 1233 | - } | |
| 1234 | - | |
| 1235 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_item", $item); | |
| 1236 | - } | |
| 1237 | - | |
| 1238 | - /** | |
| 1239 | - * Encodes an array as kt_folder_items | |
| 1240 | - * | |
| 1241 | - * @param array $items | |
| 1242 | - * @param string $name | |
| 1243 | - * @return SOAP_Value of kt_folder_items | |
| 1244 | - * @access private | |
| 1245 | - * @static | |
| 1246 | - */ | |
| 1247 | - function _encode_folder_items($items, $name='items') | |
| 1248 | - { | |
| 1249 | - $encoded=array(); | |
| 1250 | - foreach($items as $item) | |
| 1251 | - { | |
| 1252 | - $encoded[] = KTWebService::_encode_folder_item($item); | |
| 1253 | - } | |
| 1254 | - | |
| 1255 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_items", $encoded); | |
| 1256 | 1304 | } |
| 1257 | 1305 | |
| 1258 | 1306 | /** |
| ... | ... | @@ -1264,12 +1312,17 @@ class KTWebService |
| 1264 | 1312 | * @access private |
| 1265 | 1313 | * @static |
| 1266 | 1314 | */ |
| 1267 | - function _encode_folder_contents($contents, $name='return') | |
| 1315 | + function _encode_folder_items($items) | |
| 1268 | 1316 | { |
| 1269 | - $contents['items'] = KTWebService::_encode_folder_items($contents['items']); | |
| 1270 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_contents", $contents); | |
| 1271 | - } | |
| 1317 | + foreach($items as $key=>$item) | |
| 1318 | + { | |
| 1319 | + $item['id'] = (int) $item['id']; | |
| 1320 | + $item['items'] = KTWebService::_encode_folder_items($item['items']); | |
| 1272 | 1321 | |
| 1322 | + $items[$key] = new SOAP_Value('item',"{urn:$this->namespace}kt_folder_item", $item); | |
| 1323 | + } | |
| 1324 | + return new SOAP_Value('items',"{urn:$this->namespace}kt_folder_items", $items); | |
| 1325 | + } | |
| 1273 | 1326 | |
| 1274 | 1327 | /** |
| 1275 | 1328 | * Returns the contents of a folder. |
| ... | ... | @@ -1292,10 +1345,8 @@ class KTWebService |
| 1292 | 1345 | $folder = &$kt->get_folder_by_id($folder_id); |
| 1293 | 1346 | if (PEAR::isError($folder)) |
| 1294 | 1347 | { |
| 1295 | - $response=array( | |
| 1296 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1297 | - 'message'=>$folder->getMessage() | |
| 1298 | - ); | |
| 1348 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); | |
| 1349 | + | |
| 1299 | 1350 | $this->debug("get_folder_contents - cannot get folderid $folder_id - " . $folder->getMessage(), $session_id); |
| 1300 | 1351 | return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_contents", $response); |
| 1301 | 1352 | } |
| ... | ... | @@ -1308,10 +1359,10 @@ class KTWebService |
| 1308 | 1359 | 'folder_id' => $folder_id+0, |
| 1309 | 1360 | 'folder_name'=>$folder->get_folder_name(), |
| 1310 | 1361 | 'full_path'=>$folder->get_full_path(), |
| 1311 | - 'items'=>$listing | |
| 1362 | + 'items'=>KTWebService::_encode_folder_items($listing) | |
| 1312 | 1363 | ); |
| 1313 | 1364 | |
| 1314 | - return KTWebService::_encode_folder_contents($contents); | |
| 1365 | + return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_contents", $contents); | |
| 1315 | 1366 | } |
| 1316 | 1367 | |
| 1317 | 1368 | /** |
| ... | ... | @@ -1335,10 +1386,8 @@ class KTWebService |
| 1335 | 1386 | $folder = &$kt->get_folder_by_id($folder_id); |
| 1336 | 1387 | if (PEAR::isError($folder)) |
| 1337 | 1388 | { |
| 1338 | - $response=array( | |
| 1339 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1340 | - 'message'=>$folder->getMessage() | |
| 1341 | - ); | |
| 1389 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); | |
| 1390 | + | |
| 1342 | 1391 | $this->debug("create_folder - cannot get folderid $folder_id - " . $folder->getMessage(), $session_id); |
| 1343 | 1392 | |
| 1344 | 1393 | return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); |
| ... | ... | @@ -1347,10 +1396,7 @@ class KTWebService |
| 1347 | 1396 | $newfolder = &$folder->add_folder($folder_name); |
| 1348 | 1397 | if (PEAR::isError($newfolder)) |
| 1349 | 1398 | { |
| 1350 | - $response=array( | |
| 1351 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1352 | - 'message'=>$newfolder->getMessage() | |
| 1353 | - ); | |
| 1399 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$newfolder); | |
| 1354 | 1400 | $this->debug("create_folder - cannot create folder $folder_name - " . $folder->getMessage(), $session_id); |
| 1355 | 1401 | |
| 1356 | 1402 | return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); |
| ... | ... | @@ -1380,10 +1426,7 @@ class KTWebService |
| 1380 | 1426 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 1381 | 1427 | } |
| 1382 | 1428 | |
| 1383 | - $response=array( | |
| 1384 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1385 | - 'message'=>'' | |
| 1386 | - ); | |
| 1429 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); | |
| 1387 | 1430 | |
| 1388 | 1431 | $folder = &$kt->get_folder_by_id($folder_id); |
| 1389 | 1432 | if (PEAR::isError($folder)) |
| ... | ... | @@ -1424,10 +1467,7 @@ class KTWebService |
| 1424 | 1467 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 1425 | 1468 | } |
| 1426 | 1469 | |
| 1427 | - $response=array( | |
| 1428 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1429 | - 'message'=>'' | |
| 1430 | - ); | |
| 1470 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); | |
| 1431 | 1471 | |
| 1432 | 1472 | $folder = &$kt->get_folder_by_id($folder_id); |
| 1433 | 1473 | if (PEAR::isError($folder)) |
| ... | ... | @@ -1469,10 +1509,7 @@ class KTWebService |
| 1469 | 1509 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 1470 | 1510 | } |
| 1471 | 1511 | |
| 1472 | - $response=array( | |
| 1473 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1474 | - 'message'=>'' | |
| 1475 | - ); | |
| 1512 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); | |
| 1476 | 1513 | |
| 1477 | 1514 | $src_folder = &$kt->get_folder_by_id($source_id); |
| 1478 | 1515 | if (PEAR::isError($src_folder)) |
| ... | ... | @@ -1524,10 +1561,7 @@ class KTWebService |
| 1524 | 1561 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 1525 | 1562 | } |
| 1526 | 1563 | |
| 1527 | - $response=array( | |
| 1528 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1529 | - 'message'=>'' | |
| 1530 | - ); | |
| 1564 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); | |
| 1531 | 1565 | |
| 1532 | 1566 | $src_folder = &$kt->get_folder_by_id($source_id); |
| 1533 | 1567 | if (PEAR::isError($src_folder)) |
| ... | ... | @@ -1574,10 +1608,7 @@ class KTWebService |
| 1574 | 1608 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_types_response", $kt); |
| 1575 | 1609 | } |
| 1576 | 1610 | |
| 1577 | - $response=array( | |
| 1578 | - 'status_code'=>KTWS_ERR_PROBLEM, | |
| 1579 | - 'message'=>'' | |
| 1580 | - ); | |
| 1611 | + $response = KTWebService::_status(KTWS_ERR_PROBLEM); | |
| 1581 | 1612 | |
| 1582 | 1613 | $result = $kt->get_documenttypes(); |
| 1583 | 1614 | if (PEAR::isError($result)) |
| ... | ... | @@ -1604,10 +1635,7 @@ class KTWebService |
| 1604 | 1635 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_types_response", $kt); |
| 1605 | 1636 | } |
| 1606 | 1637 | |
| 1607 | - $response=array( | |
| 1608 | - 'status_code'=>KTWS_ERR_PROBLEM, | |
| 1609 | - 'message'=>'' | |
| 1610 | - ); | |
| 1638 | + $response = KTWebService::_status(KTWS_ERR_PROBLEM); | |
| 1611 | 1639 | |
| 1612 | 1640 | $result = $kt->get_document_link_types(); |
| 1613 | 1641 | if (PEAR::isError($result)) |
| ... | ... | @@ -1644,10 +1672,8 @@ class KTWebService |
| 1644 | 1672 | $document = $kt->get_document_by_id($document_id); |
| 1645 | 1673 | if (PEAR::isError($document)) |
| 1646 | 1674 | { |
| 1647 | - $response=array( | |
| 1648 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 1649 | - 'message'=>$document->getMessage() | |
| 1650 | - ); | |
| 1675 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,$document); | |
| 1676 | + | |
| 1651 | 1677 | $this->debug("get_document_detail - cannot get documentid $document_id - " . $document->getMessage(), $session_id); |
| 1652 | 1678 | |
| 1653 | 1679 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| ... | ... | @@ -1676,35 +1702,59 @@ class KTWebService |
| 1676 | 1702 | $detail['version_history'] = array(); |
| 1677 | 1703 | $detail['transaction_history'] = array(); |
| 1678 | 1704 | |
| 1679 | - | |
| 1680 | 1705 | if (stripos($detailstr,'M') !== false) |
| 1681 | 1706 | { |
| 1682 | 1707 | $response = $this->get_document_metadata($session_id, $document_id); |
| 1683 | 1708 | $detail['metadata'] = $response->value['metadata']; |
| 1709 | + $detail['metadata']->name = 'metadata'; | |
| 1710 | + } | |
| 1711 | + else | |
| 1712 | + { | |
| 1713 | + $detail['metadata'] = KTWebService::_encode_metadata_fields($detail['metadata']); | |
| 1684 | 1714 | } |
| 1685 | 1715 | |
| 1686 | 1716 | if (stripos($detailstr,'L') !== false) |
| 1687 | 1717 | { |
| 1688 | - $response = $this->get_document_metadata($session_id, $document_id); | |
| 1718 | + $response = $this->get_document_links($session_id, $document_id); | |
| 1689 | 1719 | $detail['links'] = $response->value['links']; |
| 1720 | + $detail['links']->name = 'links'; | |
| 1721 | + } | |
| 1722 | + else | |
| 1723 | + { | |
| 1724 | + $detail['links'] = KTWebService::_encode_document_links($detail['links']); | |
| 1690 | 1725 | } |
| 1691 | 1726 | |
| 1692 | 1727 | if (stripos($detailstr,'T') !== false) |
| 1693 | 1728 | { |
| 1694 | 1729 | $response = $this->get_document_workflow_transitions($session_id, $document_id); |
| 1695 | - $detail['transitions'] = $response->value['transitions']; | |
| 1730 | + $detail['transitions'] = $response->value['transitions'] ; | |
| 1731 | + $detail['transitions']->name = 'transitions'; | |
| 1732 | + } | |
| 1733 | + else | |
| 1734 | + { | |
| 1735 | + $detail['transitions'] = KTWebService::_encode_document_workflow_transitions($detail['transitions']); | |
| 1696 | 1736 | } |
| 1697 | 1737 | |
| 1698 | 1738 | if (stripos($detailstr,'V') !== false) |
| 1699 | 1739 | { |
| 1700 | 1740 | $response = $this->get_document_version_history($session_id, $document_id); |
| 1701 | - $detail['version_history'] = $response->value['history']; | |
| 1741 | + $detail['version_history'] = $response->value['history']; | |
| 1742 | + $detail['version_history']->name = 'version_history'; | |
| 1743 | + } | |
| 1744 | + else | |
| 1745 | + { | |
| 1746 | + $detail['version_history'] = KTWebService::_encode_version_history($detail['version_history'],'version_history'); | |
| 1702 | 1747 | } |
| 1703 | 1748 | |
| 1704 | 1749 | if (stripos($detailstr,'H') !== false) |
| 1705 | 1750 | { |
| 1706 | 1751 | $response = $this->get_document_transaction_history($session_id, $document_id); |
| 1707 | - $detail['transaction_history'] = $response->value['history']; | |
| 1752 | + $detail['transaction_history'] = $response->value['history']; | |
| 1753 | + $detail['transaction_history']->name = 'transaction_history'; | |
| 1754 | + } | |
| 1755 | + else | |
| 1756 | + { | |
| 1757 | + $detail['transaction_history'] = KTWebService::_encode_transaction_history($detail['transaction_history'],'transaction_history'); | |
| 1708 | 1758 | } |
| 1709 | 1759 | |
| 1710 | 1760 | } |
| ... | ... | @@ -1734,10 +1784,9 @@ class KTWebService |
| 1734 | 1784 | function get_document_detail_by_name($session_id, $folder_id, $document_name, $what='T', $detail='') |
| 1735 | 1785 | { |
| 1736 | 1786 | $this->debug("get_document_detail_by_name('$session_id','$document_name','$what','$detail')"); |
| 1737 | - $response=array( | |
| 1738 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1739 | - 'message'=>'' | |
| 1740 | - ); | |
| 1787 | + | |
| 1788 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); | |
| 1789 | + | |
| 1741 | 1790 | if (empty($document_name)) |
| 1742 | 1791 | { |
| 1743 | 1792 | $response['message'] = 'Document_name is empty.'; |
| ... | ... | @@ -1785,64 +1834,7 @@ class KTWebService |
| 1785 | 1834 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| 1786 | 1835 | } |
| 1787 | 1836 | |
| 1788 | - $detailstr = $detail; | |
| 1789 | - | |
| 1790 | - $detail = $document->get_detail(); | |
| 1791 | - if (PEAR::isError($detail)) | |
| 1792 | - { | |
| 1793 | - $response['status_code'] = KTWS_ERR_PROBLEM; | |
| 1794 | - $response['message'] = $detail->getMessage(); | |
| 1795 | - | |
| 1796 | - $this->debug("get_document_detail_by_name - cannot get document detail - " . $detail->getMessage(), $session_id); | |
| 1797 | - | |
| 1798 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); | |
| 1799 | - } | |
| 1800 | - | |
| 1801 | - $detail['status_code']=KTWS_SUCCESS; | |
| 1802 | - $detail['message']=''; | |
| 1803 | - | |
| 1804 | - | |
| 1805 | - if ($this->version >= 2) | |
| 1806 | - { | |
| 1807 | - | |
| 1808 | - $detail['metadata'] = array(); | |
| 1809 | - $detail['links'] = array(); | |
| 1810 | - $detail['transitions'] = array(); | |
| 1811 | - $detail['version_history'] = array(); | |
| 1812 | - $detail['transaction_history'] = array(); | |
| 1813 | - | |
| 1814 | - if (stripos($detailstr,'M') !== false) | |
| 1815 | - { | |
| 1816 | - $response = $this->get_document_metadata($session_id, $document_id); | |
| 1817 | - $detail['metadata'] = $response->value['metadata']; | |
| 1818 | - } | |
| 1819 | - | |
| 1820 | - if (stripos($detailstr,'L') !== false) | |
| 1821 | - { | |
| 1822 | - $response = $this->get_document_metadata($session_id, $document_id); | |
| 1823 | - $detail['links'] = $response->value['links']; | |
| 1824 | - } | |
| 1825 | - | |
| 1826 | - if (stripos($detailstr,'T') !== false) | |
| 1827 | - { | |
| 1828 | - $response = $this->get_document_workflow_transitions($session_id, $document_id); | |
| 1829 | - $detail['transitions'] = $response->value['transitions']; | |
| 1830 | - } | |
| 1831 | - | |
| 1832 | - if (stripos($detailstr,'V') !== false) | |
| 1833 | - { | |
| 1834 | - $response = $this->get_document_version_history($session_id, $document_id); | |
| 1835 | - $detail['version_history'] = $response->value['history']; | |
| 1836 | - } | |
| 1837 | - | |
| 1838 | - if (stripos($detailstr,'H') !== false) | |
| 1839 | - { | |
| 1840 | - $response = $this->get_document_transaction_history($session_id, $document_id); | |
| 1841 | - $detail['transaction_history'] = $response->value['history']; | |
| 1842 | - } | |
| 1843 | - } | |
| 1844 | - | |
| 1845 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $detail); | |
| 1837 | + return $this->get_document_detail($session_id, $document->documentid, $detail); | |
| 1846 | 1838 | } |
| 1847 | 1839 | |
| 1848 | 1840 | /** |
| ... | ... | @@ -1868,15 +1860,11 @@ class KTWebService |
| 1868 | 1860 | // we need to add some security to ensure that people don't frig the checkin process to access restricted files. |
| 1869 | 1861 | // possibly should change 'tempfilename' to be a hash or id of some sort if this is troublesome. |
| 1870 | 1862 | $upload_manager = new KTUploadManager(); |
| 1871 | - $tempdir = substr($tempfilename,0,strlen($upload_manager->temp_dir)); | |
| 1872 | - if ($tempdir != $upload_manager->temp_dir) | |
| 1863 | + if (!$upload_manager->is_valid_temporary_file($tempfilename)) | |
| 1873 | 1864 | { |
| 1874 | - $response=array( | |
| 1875 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1876 | - 'message'=>'Invalid temporary file.' | |
| 1877 | - ); | |
| 1865 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,"Invalid temporary file: $tempfilename. Not compatible with $upload_manager->temp_dir."); | |
| 1878 | 1866 | |
| 1879 | - $this->debug("add_document - $upload_manager->temp_dir != $tempdir", $session_id); | |
| 1867 | + $this->debug("add_document - Invalid temporary file: $tempfilename. Not compatible with $upload_manager->temp_dir.", $session_id); | |
| 1880 | 1868 | |
| 1881 | 1869 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| 1882 | 1870 | } |
| ... | ... | @@ -1884,10 +1872,7 @@ class KTWebService |
| 1884 | 1872 | $folder = &$kt->get_folder_by_id($folder_id); |
| 1885 | 1873 | if (PEAR::isError($folder)) |
| 1886 | 1874 | { |
| 1887 | - $response=array( | |
| 1888 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 1889 | - 'message'=>$folder->getMessage() | |
| 1890 | - ); | |
| 1875 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); | |
| 1891 | 1876 | |
| 1892 | 1877 | $this->debug("add_document - cannot get folder $folder_id - " . $folder->getMessage(), $session_id); |
| 1893 | 1878 | |
| ... | ... | @@ -1897,13 +1882,8 @@ class KTWebService |
| 1897 | 1882 | $document = &$folder->add_document($title, $filename, $documenttype, $tempfilename); |
| 1898 | 1883 | if (PEAR::isError($document)) |
| 1899 | 1884 | { |
| 1900 | - $response=array( | |
| 1901 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 1902 | - 'message'=>$document->getMessage() | |
| 1903 | - ); | |
| 1904 | - | |
| 1885 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,$document); | |
| 1905 | 1886 | $this->debug("add_document - cannot add document - " . $document->getMessage(), $session_id); |
| 1906 | - | |
| 1907 | 1887 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| 1908 | 1888 | } |
| 1909 | 1889 | |
| ... | ... | @@ -1982,8 +1962,6 @@ class KTWebService |
| 1982 | 1962 | return $update_result; |
| 1983 | 1963 | } |
| 1984 | 1964 | |
| 1985 | - | |
| 1986 | - | |
| 1987 | 1965 | /** |
| 1988 | 1966 | * Adds a document to the repository. |
| 1989 | 1967 | * |
| ... | ... | @@ -2001,77 +1979,37 @@ class KTWebService |
| 2001 | 1979 | $kt = &$this->get_ktapi($session_id ); |
| 2002 | 1980 | if (is_array($kt)) |
| 2003 | 1981 | { |
| 2004 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $kt); | |
| 2005 | - } | |
| 2006 | - | |
| 2007 | - // create a temporary file | |
| 2008 | - $oConfig = KTConfig::getSingleton(); | |
| 2009 | - $tmp_dir = $oConfig->get('webservice/uploadDirectory'); | |
| 2010 | - | |
| 2011 | - $tempfilename = tempnam($tmp_dir,'sa_'); | |
| 2012 | - if (!is_writable($tempfilename)) | |
| 2013 | - { | |
| 2014 | - $response=array( | |
| 2015 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 2016 | - 'message'=>'Cannot write to temp folder: ' + $tempfilename | |
| 2017 | - ); | |
| 2018 | - $this->debug("add_small_document - cannot write $tempfilename", $session_id); | |
| 2019 | - | |
| 2020 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); | |
| 2021 | - } | |
| 2022 | - | |
| 2023 | - // we need to add some security to ensure that people don't frig the checkin process to access restricted files. | |
| 2024 | - // possibly should change 'tempfilename' to be a hash or id of some sort if this is troublesome. | |
| 2025 | - $upload_manager = new KTUploadManager(); | |
| 2026 | - $tempdir = substr($tempfilename,0,strlen($upload_manager->temp_dir)); | |
| 2027 | - if ( $tempdir != $upload_manager->temp_dir) | |
| 2028 | - { | |
| 2029 | - $response=array( | |
| 2030 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 2031 | - 'message'=>'Invalid temporary file.' | |
| 2032 | - ); | |
| 2033 | - | |
| 2034 | - $this->debug("add_small_document - $upload_manager->temp_dir != $tempdir ", $session_id); | |
| 2035 | - | |
| 2036 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); | |
| 1982 | + return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $kt); | |
| 2037 | 1983 | } |
| 2038 | 1984 | |
| 2039 | 1985 | $folder = &$kt->get_folder_by_id($folder_id); |
| 2040 | 1986 | if (PEAR::isError($folder)) |
| 2041 | 1987 | { |
| 2042 | - $response=array( | |
| 2043 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 2044 | - 'message'=>$folder->getMessage() | |
| 2045 | - ); | |
| 1988 | + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); | |
| 2046 | 1989 | $this->debug("add_small_document - cannot get folderid $folder_id - " . $folder->getMessage(), $session_id); |
| 2047 | 1990 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| 2048 | 1991 | } |
| 2049 | 1992 | |
| 2050 | - // write to the temporary file | |
| 2051 | - $fp=fopen($tempfilename, 'wb'); | |
| 2052 | - if ($fp === false) | |
| 2053 | - { | |
| 2054 | - $response=array( | |
| 2055 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2056 | - 'message'=>'Cannot write to temp file: ' + $tempfilename | |
| 2057 | - ); | |
| 2058 | - $this->debug("add_small_document - cannot get folderid $folder_id" , $session_id); | |
| 1993 | + $upload_manager = new KTUploadManager(); | |
| 1994 | + $tempfilename = $upload_manager->store_base64_file($base64); | |
| 1995 | + if (PEAR::isError($tempfilename)) | |
| 1996 | + { | |
| 1997 | + $reason = $tempfilename->getMessage(); | |
| 1998 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,'Cannot write to temp file: ' + $tempfilename . ". Reason: $reason"); | |
| 1999 | + $this->debug("add_small_document - cannot write $tempfilename. Reason: $reason", $session_id); | |
| 2000 | + | |
| 2059 | 2001 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| 2060 | - } | |
| 2061 | - fwrite($fp, base64_decode($base64)); | |
| 2062 | - fclose($fp); | |
| 2002 | + } | |
| 2063 | 2003 | |
| 2064 | 2004 | // simulate the upload |
| 2065 | - $upload_manager->uploaded($filename,$tempfilename, 'A'); | |
| 2005 | + $tempfilename = $upload_manager->uploaded($filename,$tempfilename, 'A'); | |
| 2066 | 2006 | |
| 2067 | 2007 | // add the document |
| 2068 | 2008 | $document = &$folder->add_document($title, $filename, $documenttype, $tempfilename); |
| 2069 | 2009 | if (PEAR::isError($document)) |
| 2070 | 2010 | { |
| 2071 | - $response=array( | |
| 2072 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2073 | - 'message'=>$document->getMessage() | |
| 2074 | - ); | |
| 2011 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,$document); | |
| 2012 | + | |
| 2075 | 2013 | $this->debug("add_small_document - cannot add document - " . $document->getMessage(), $session_id); |
| 2076 | 2014 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| 2077 | 2015 | } |
| ... | ... | @@ -2103,16 +2041,12 @@ class KTWebService |
| 2103 | 2041 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $kt); |
| 2104 | 2042 | } |
| 2105 | 2043 | |
| 2106 | - $response=array( | |
| 2107 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2108 | - 'message'=>'', | |
| 2109 | - ); | |
| 2044 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2110 | 2045 | |
| 2111 | - // we need to add some security to ensure that people don't frig the checkin process to access restricted files. | |
| 2046 | + // we need to add some security to ensure that people don't frig the checkin process to access restricted files. | |
| 2112 | 2047 | // possibly should change 'tempfilename' to be a hash or id of some sort if this is troublesome. |
| 2113 | 2048 | $upload_manager = new KTUploadManager(); |
| 2114 | - $tempdir = substr($tempfilename,0,strlen($upload_manager->temp_dir)); | |
| 2115 | - if ($tempdir != $upload_manager->temp_dir) | |
| 2049 | + if (!$upload_manager->is_valid_temporary_file($tempfilename)) | |
| 2116 | 2050 | { |
| 2117 | 2051 | $response['message'] = 'Invalid temporary file'; |
| 2118 | 2052 | $this->debug("checkin_document - $upload_manager->temp_dir != $tempdir", $session_id); |
| ... | ... | @@ -2141,9 +2075,8 @@ class KTWebService |
| 2141 | 2075 | return $this->get_document_detail($session_id, $document_id); |
| 2142 | 2076 | } |
| 2143 | 2077 | |
| 2144 | - | |
| 2145 | - function checkin_small_document_with_metadata($session_id, $document_id, $filename, $reason, $base64, $major_update, $metadata, $sysdata) | |
| 2146 | - { | |
| 2078 | + function checkin_small_document_with_metadata($session_id, $document_id, $filename, $reason, $base64, $major_update, $metadata, $sysdata) | |
| 2079 | + { | |
| 2147 | 2080 | $add_result = $this->checkin_small_document($session_id, $document_id, $filename, $reason, $base64, $major_update); |
| 2148 | 2081 | |
| 2149 | 2082 | $status_code = $add_result->value['status_code']; |
| ... | ... | @@ -2173,10 +2106,10 @@ class KTWebService |
| 2173 | 2106 | } |
| 2174 | 2107 | |
| 2175 | 2108 | return $update_result; |
| 2176 | - } | |
| 2109 | + } | |
| 2177 | 2110 | |
| 2178 | - function checkin_document_with_metadata($session_id, $document_id, $filename, $reason, $tempfilename, $major_update, $metadata, $sysdata) | |
| 2179 | - { | |
| 2111 | + function checkin_document_with_metadata($session_id, $document_id, $filename, $reason, $tempfilename, $major_update, $metadata, $sysdata) | |
| 2112 | + { | |
| 2180 | 2113 | $add_result = $this->checkin_document($session_id, $document_id, $filename, $reason, $tempfilename, $major_update); |
| 2181 | 2114 | |
| 2182 | 2115 | $status_code = $add_result->value['status_code']; |
| ... | ... | @@ -2206,7 +2139,7 @@ class KTWebService |
| 2206 | 2139 | } |
| 2207 | 2140 | |
| 2208 | 2141 | return $update_result; |
| 2209 | - } | |
| 2142 | + } | |
| 2210 | 2143 | |
| 2211 | 2144 | |
| 2212 | 2145 | /** |
| ... | ... | @@ -2229,55 +2162,21 @@ class KTWebService |
| 2229 | 2162 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $kt); |
| 2230 | 2163 | } |
| 2231 | 2164 | |
| 2232 | - $response=array( | |
| 2233 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2234 | - 'message'=>'', | |
| 2235 | - ); | |
| 2236 | - | |
| 2237 | - // create a temporary file | |
| 2238 | - $oConfig = KTConfig::getSingleton(); | |
| 2239 | - $tmp_dir = $oConfig->get('webservice/uploadDirectory'); | |
| 2240 | - | |
| 2241 | - $tempfilename = tempnam($tmp_dir,'su_'); | |
| 2242 | - if (!is_writable($tempfilename)) | |
| 2243 | - { | |
| 2244 | - $response=array( | |
| 2245 | - 'status_code'=>KTWS_ERR_INVALID_FOLDER, | |
| 2246 | - 'message'=>'Cannot write to temp folder: ' + $tempfilename | |
| 2247 | - ); | |
| 2248 | - | |
| 2249 | - $this->debug("checkin_small_document - $tempfilename is not writable", $session_id); | |
| 2250 | - | |
| 2251 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); | |
| 2252 | - } | |
| 2165 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2253 | 2166 | |
| 2254 | - // we need to add some security to ensure that people don't frig the checkin process to access restricted files. | |
| 2255 | - // possibly should change 'tempfilename' to be a hash or id of some sort if this is troublesome. | |
| 2256 | 2167 | $upload_manager = new KTUploadManager(); |
| 2257 | - $tempdir = substr($tempfilename,0,strlen($upload_manager->temp_dir)); | |
| 2258 | - if ($tempdir != $upload_manager->temp_dir) | |
| 2168 | + $tempfilename = $upload_manager->store_base64_file($base64, 'su_'); | |
| 2169 | + if (PEAR::isError($tempfilename)) | |
| 2259 | 2170 | { |
| 2260 | - $response['message'] = 'Invalid temporary file'; | |
| 2261 | - $this->debug("checkin_small_document - $upload_manager->temp_dir != $tempdir", $session_id); | |
| 2262 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); | |
| 2263 | - } | |
| 2171 | + $reason = $tempfilename->getMessage(); | |
| 2172 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,'Cannot write to temp file: ' + $tempfilename . ". Reason: $reason"); | |
| 2173 | + $this->debug("checkin_small_document - cannot write $tempfilename. Reason: $reason", $session_id); | |
| 2264 | 2174 | |
| 2265 | - // write to the temporary file | |
| 2266 | - $fp=fopen($tempfilename, 'wb'); | |
| 2267 | - if ($fp === false) | |
| 2268 | - { | |
| 2269 | - $response=array( | |
| 2270 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2271 | - 'message'=>'Cannot write to temp file: ' + $tempfilename | |
| 2272 | - ); | |
| 2273 | - $this->debug("checkin_small_document - cannot write $tempfilename", $session_id); | |
| 2274 | 2175 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); |
| 2275 | - } | |
| 2276 | - fwrite($fp, base64_decode($base64)); | |
| 2277 | - fclose($fp); | |
| 2176 | + } | |
| 2278 | 2177 | |
| 2279 | 2178 | // simulate the upload |
| 2280 | - $upload_manager->uploaded($filename,$tempfilename, 'C'); | |
| 2179 | + $tempfilename = $upload_manager->uploaded($filename,$tempfilename, 'C'); | |
| 2281 | 2180 | |
| 2282 | 2181 | $document = &$kt->get_document_by_id($document_id); |
| 2283 | 2182 | if (PEAR::isError($document)) |
| ... | ... | @@ -2316,10 +2215,7 @@ class KTWebService |
| 2316 | 2215 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2317 | 2216 | } |
| 2318 | 2217 | |
| 2319 | - $response=array( | |
| 2320 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2321 | - 'message'=>'' | |
| 2322 | - ); | |
| 2218 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2323 | 2219 | |
| 2324 | 2220 | $document = &$kt->get_document_by_id($document_id); |
| 2325 | 2221 | if (PEAR::isError($document)) |
| ... | ... | @@ -2381,10 +2277,7 @@ class KTWebService |
| 2381 | 2277 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2382 | 2278 | } |
| 2383 | 2279 | |
| 2384 | - $response=array( | |
| 2385 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2386 | - 'message'=>'' | |
| 2387 | - ); | |
| 2280 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2388 | 2281 | |
| 2389 | 2282 | $document = &$kt->get_document_by_id($document_id); |
| 2390 | 2283 | if (PEAR::isError($document)) |
| ... | ... | @@ -2455,10 +2348,7 @@ class KTWebService |
| 2455 | 2348 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2456 | 2349 | } |
| 2457 | 2350 | |
| 2458 | - $response=array( | |
| 2459 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2460 | - 'message'=>'' | |
| 2461 | - ); | |
| 2351 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2462 | 2352 | |
| 2463 | 2353 | $document = &$kt->get_document_by_id($document_id); |
| 2464 | 2354 | if (PEAR::isError($document)) |
| ... | ... | @@ -2496,7 +2386,7 @@ class KTWebService |
| 2496 | 2386 | |
| 2497 | 2387 | * @return kt_response. status_code can be KTWS_ERR_INVALID_SESSION, KTWS_ERR_INVALID_DOCUMENT or KTWS_SUCCESS |
| 2498 | 2388 | */ |
| 2499 | - function download_document($session_id, $document_id) | |
| 2389 | + function download_document($session_id, $document_id, $version=null) | |
| 2500 | 2390 | { |
| 2501 | 2391 | $this->debug("download_document('$session_id',$document_id)"); |
| 2502 | 2392 | |
| ... | ... | @@ -2506,10 +2396,7 @@ class KTWebService |
| 2506 | 2396 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2507 | 2397 | } |
| 2508 | 2398 | |
| 2509 | - $response=array( | |
| 2510 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2511 | - 'message'=>'' | |
| 2512 | - ); | |
| 2399 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2513 | 2400 | |
| 2514 | 2401 | $document = &$kt->get_document_by_id($document_id); |
| 2515 | 2402 | if (PEAR::isError($document)) |
| ... | ... | @@ -2548,7 +2435,7 @@ class KTWebService |
| 2548 | 2435 | |
| 2549 | 2436 | * @return kt_response. status_code can be KTWS_ERR_INVALID_SESSION, KTWS_ERR_INVALID_DOCUMENT or KTWS_SUCCESS |
| 2550 | 2437 | */ |
| 2551 | - function download_small_document($session_id, $document_id) | |
| 2438 | + function download_small_document($session_id, $document_id, $version=null) | |
| 2552 | 2439 | { |
| 2553 | 2440 | $this->debug("download_small_document('$session_id',$document_id)"); |
| 2554 | 2441 | |
| ... | ... | @@ -2558,10 +2445,7 @@ class KTWebService |
| 2558 | 2445 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2559 | 2446 | } |
| 2560 | 2447 | |
| 2561 | - $response=array( | |
| 2562 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2563 | - 'message'=>'' | |
| 2564 | - ); | |
| 2448 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2565 | 2449 | |
| 2566 | 2450 | $document = &$kt->get_document_by_id($document_id); |
| 2567 | 2451 | if (PEAR::isError($document)) |
| ... | ... | @@ -2620,10 +2504,8 @@ class KTWebService |
| 2620 | 2504 | { |
| 2621 | 2505 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2622 | 2506 | } |
| 2623 | - $response=array( | |
| 2624 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2625 | - 'message'=>'' | |
| 2626 | - ); | |
| 2507 | + | |
| 2508 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2627 | 2509 | |
| 2628 | 2510 | $document = &$kt->get_document_by_id($document_id); |
| 2629 | 2511 | if (PEAR::isError($document)) |
| ... | ... | @@ -2670,10 +2552,8 @@ class KTWebService |
| 2670 | 2552 | { |
| 2671 | 2553 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 2672 | 2554 | } |
| 2673 | - $response=array( | |
| 2674 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2675 | - 'message'=>'' | |
| 2676 | - ); | |
| 2555 | + | |
| 2556 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2677 | 2557 | |
| 2678 | 2558 | $document = &$kt->get_document_by_id($document_id); |
| 2679 | 2559 | if (PEAR::isError($document)) |
| ... | ... | @@ -2687,6 +2567,7 @@ class KTWebService |
| 2687 | 2567 | $result = $document->change_document_type($documenttype); |
| 2688 | 2568 | if (PEAR::isError($result)) |
| 2689 | 2569 | { |
| 2570 | + $response['status_code'] = KTWS_ERR_INVALID_DOCUMENT_TYPE; | |
| 2690 | 2571 | $response['message'] = $result->getMessage(); |
| 2691 | 2572 | $this->debug("change_document_type - cannot change type - " . $result->getMessage(), $session_id); |
| 2692 | 2573 | |
| ... | ... | @@ -2722,10 +2603,8 @@ class KTWebService |
| 2722 | 2603 | { |
| 2723 | 2604 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2724 | 2605 | } |
| 2725 | - $response=array( | |
| 2726 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2727 | - 'message'=>'' | |
| 2728 | - ); | |
| 2606 | + | |
| 2607 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2729 | 2608 | |
| 2730 | 2609 | $document = &$kt->get_document_by_id($document_id); |
| 2731 | 2610 | if (PEAR::isError($document)) |
| ... | ... | @@ -2780,10 +2659,8 @@ class KTWebService |
| 2780 | 2659 | { |
| 2781 | 2660 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 2782 | 2661 | } |
| 2783 | - $response=array( | |
| 2784 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2785 | - 'message'=>'' | |
| 2786 | - ); | |
| 2662 | + | |
| 2663 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2787 | 2664 | |
| 2788 | 2665 | $document = &$kt->get_document_by_id($document_id); |
| 2789 | 2666 | if (PEAR::isError($document)) |
| ... | ... | @@ -2837,10 +2714,8 @@ class KTWebService |
| 2837 | 2714 | { |
| 2838 | 2715 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 2839 | 2716 | } |
| 2840 | - $response=array( | |
| 2841 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2842 | - 'message'=>'' | |
| 2843 | - ); | |
| 2717 | + | |
| 2718 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2844 | 2719 | |
| 2845 | 2720 | $document = &$kt->get_document_by_id($document_id); |
| 2846 | 2721 | if (PEAR::isError($document)) |
| ... | ... | @@ -2890,10 +2765,8 @@ class KTWebService |
| 2890 | 2765 | { |
| 2891 | 2766 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 2892 | 2767 | } |
| 2893 | - $response=array( | |
| 2894 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2895 | - 'message'=>'' | |
| 2896 | - ); | |
| 2768 | + | |
| 2769 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2897 | 2770 | |
| 2898 | 2771 | $document = &$kt->get_document_by_id($document_id); |
| 2899 | 2772 | if (PEAR::isError($document)) |
| ... | ... | @@ -2916,7 +2789,6 @@ class KTWebService |
| 2916 | 2789 | return $this->get_document_detail($session_id, $document_id); |
| 2917 | 2790 | } |
| 2918 | 2791 | |
| 2919 | - | |
| 2920 | 2792 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); |
| 2921 | 2793 | } |
| 2922 | 2794 | |
| ... | ... | @@ -2946,10 +2818,7 @@ class KTWebService |
| 2946 | 2818 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 2947 | 2819 | } |
| 2948 | 2820 | |
| 2949 | - $response=array( | |
| 2950 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 2951 | - 'message'=>'' | |
| 2952 | - ); | |
| 2821 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 2953 | 2822 | |
| 2954 | 2823 | $document = &$kt->get_document_by_id($document_id); |
| 2955 | 2824 | if (PEAR::isError($document)) |
| ... | ... | @@ -2999,10 +2868,8 @@ class KTWebService |
| 2999 | 2868 | { |
| 3000 | 2869 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 3001 | 2870 | } |
| 3002 | - $response=array( | |
| 3003 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3004 | - 'message'=>'' | |
| 3005 | - ); | |
| 2871 | + | |
| 2872 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3006 | 2873 | |
| 3007 | 2874 | $document = &$kt->get_document_by_id($document_id); |
| 3008 | 2875 | if (PEAR::isError($document)) |
| ... | ... | @@ -3049,10 +2916,8 @@ class KTWebService |
| 3049 | 2916 | { |
| 3050 | 2917 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 3051 | 2918 | } |
| 3052 | - $response=array( | |
| 3053 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3054 | - 'message'=>'' | |
| 3055 | - ); | |
| 2919 | + | |
| 2920 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3056 | 2921 | |
| 3057 | 2922 | $document = &$kt->get_document_by_id($document_id); |
| 3058 | 2923 | if (PEAR::isError($document)) |
| ... | ... | @@ -3102,10 +2967,8 @@ class KTWebService |
| 3102 | 2967 | { |
| 3103 | 2968 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 3104 | 2969 | } |
| 3105 | - $response=array( | |
| 3106 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3107 | - 'message'=>'' | |
| 3108 | - ); | |
| 2970 | + | |
| 2971 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3109 | 2972 | |
| 3110 | 2973 | $document = &$kt->get_document_by_id($document_id); |
| 3111 | 2974 | if (PEAR::isError($document)) |
| ... | ... | @@ -3133,100 +2996,41 @@ class KTWebService |
| 3133 | 2996 | } |
| 3134 | 2997 | |
| 3135 | 2998 | /** |
| 3136 | - * Encodes the array as a kt_metadata_selection_item | |
| 3137 | - * | |
| 3138 | - * @param aray $item | |
| 3139 | - * @param string $name | |
| 3140 | - * @return SOAP_Value of kt_metadata_selection_item | |
| 3141 | - * @access private | |
| 3142 | - * @static | |
| 3143 | - */ | |
| 3144 | - function _encode_metadata_selection_item($item, $name='item') | |
| 3145 | - { | |
| 3146 | - if (!is_null($item['id'])) | |
| 3147 | - { | |
| 3148 | - $item['id'] = (int) $item['id']; | |
| 3149 | - } | |
| 3150 | - | |
| 3151 | - if (!is_null($item['parent_id'])) | |
| 3152 | - { | |
| 3153 | - $item['parent_id'] = (int) $item['parent_id']; | |
| 3154 | - } | |
| 3155 | - | |
| 3156 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_selection_item", $item); | |
| 3157 | - } | |
| 3158 | - | |
| 3159 | - /** | |
| 3160 | - * Encode an array as kt_metadata_selection | |
| 2999 | + * Encode an array as kt_metadata_fields | |
| 3161 | 3000 | * |
| 3162 | - * @param array $selection | |
| 3001 | + * @param array $fields | |
| 3163 | 3002 | * @param string $name |
| 3164 | - * @return SOAP_Value of kt_metadata_selection | |
| 3003 | + * @return SOAP_Value of kt_metadata_fields | |
| 3165 | 3004 | * @access private |
| 3166 | 3005 | * @static |
| 3167 | 3006 | */ |
| 3168 | - | |
| 3169 | - function _encode_metadata_selection($selection, $name='selection') | |
| 3007 | + function _encode_metadata_fields($fields) | |
| 3170 | 3008 | { |
| 3171 | - $encoded=array(); | |
| 3172 | - foreach($selection as $field) | |
| 3173 | - { | |
| 3174 | - $encoded[] = KTWebService::_encode_metadata_selection_item($field); | |
| 3175 | - } | |
| 3176 | - | |
| 3177 | - if (empty($encoded)) | |
| 3009 | + foreach($fields as $key=>$field) | |
| 3178 | 3010 | { |
| 3179 | - $encoded=null; | |
| 3180 | - } | |
| 3011 | + $selection = $field['selection']; | |
| 3012 | + foreach($selection as $skey=>$sitem) | |
| 3013 | + { | |
| 3014 | + if (!is_null($item['id'])) | |
| 3015 | + { | |
| 3016 | + $sitem['id'] = (int) $sitem['id']; | |
| 3017 | + } | |
| 3018 | + | |
| 3019 | + if (!is_null($sitem['parent_id'])) | |
| 3020 | + { | |
| 3021 | + $sitem['parent_id'] = (int) $sitem['parent_id']; | |
| 3022 | + } | |
| 3023 | + $selection[$skey] = new SOAP_Value('item',"{urn:$this->namespace}kt_metadata_selection_item", $sitem); | |
| 3024 | + } | |
| 3181 | 3025 | |
| 3182 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_selection", $encoded); | |
| 3183 | - } | |
| 3026 | + $field['selection'] = new SOAP_Value('selection',"{urn:$this->namespace}kt_metadata_selection", $selection); | |
| 3184 | 3027 | |
| 3185 | - /** | |
| 3186 | - * Encode an array as kt_metadata_field | |
| 3187 | - * | |
| 3188 | - * @param arra $field | |
| 3189 | - * @param string $name | |
| 3190 | - * @return SOAP_Value of kt_metadata_field | |
| 3191 | - * @access private | |
| 3192 | - * @static | |
| 3193 | - */ | |
| 3028 | + $field['required'] = is_null($field['required'])?false:(bool) $field['required']; | |
| 3194 | 3029 | |
| 3195 | - function _encode_metadata_field($field, $name='field') | |
| 3196 | - { | |
| 3197 | - if (!empty($field['selection'])) | |
| 3198 | - { | |
| 3199 | - $field['selection'] = KTWebService::_encode_metadata_selection($field['selection']); | |
| 3200 | - } | |
| 3201 | - if (!is_null($field['required'])) | |
| 3202 | - { | |
| 3203 | - $field['required'] = (bool) $field['required']; | |
| 3030 | + $fields[$key] = new SOAP_Value('field',"{urn:$this->namespace}kt_metadata_field", $field); | |
| 3204 | 3031 | } |
| 3205 | 3032 | |
| 3206 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_field", $field); | |
| 3207 | - } | |
| 3208 | - | |
| 3209 | - /** | |
| 3210 | - * Encode an array as kt_metadata_fields | |
| 3211 | - * | |
| 3212 | - * @param array $fields | |
| 3213 | - * @param string $name | |
| 3214 | - * @return SOAP_Value of kt_metadata_fields | |
| 3215 | - * @access private | |
| 3216 | - * @static | |
| 3217 | - */ | |
| 3218 | - function _encode_metadata_fields($fields, $name='fields') | |
| 3219 | - { | |
| 3220 | - $encoded=array(); | |
| 3221 | - foreach($fields as $field) | |
| 3222 | - { | |
| 3223 | - $encoded[] = KTWebService::_encode_metadata_field($field); | |
| 3224 | - } | |
| 3225 | - if (empty($encoded)) | |
| 3226 | - { | |
| 3227 | - $encoded=null; | |
| 3228 | - } | |
| 3229 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_fields", $encoded); | |
| 3033 | + return new SOAP_Value('fields',"{urn:$this->namespace}kt_metadata_fields", $fields); | |
| 3230 | 3034 | } |
| 3231 | 3035 | |
| 3232 | 3036 | /** |
| ... | ... | @@ -3291,7 +3095,6 @@ class KTWebService |
| 3291 | 3095 | } |
| 3292 | 3096 | |
| 3293 | 3097 | return new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_response", $response); |
| 3294 | - | |
| 3295 | 3098 | } |
| 3296 | 3099 | |
| 3297 | 3100 | /** |
| ... | ... | @@ -3301,7 +3104,6 @@ class KTWebService |
| 3301 | 3104 | * @param string $document_type |
| 3302 | 3105 | * @return kt_metadata_response |
| 3303 | 3106 | */ |
| 3304 | - | |
| 3305 | 3107 | function get_document_type_metadata($session_id, $document_type) |
| 3306 | 3108 | { |
| 3307 | 3109 | $this->debug("get_document_type_metadata('$session_id','$document_type')"); |
| ... | ... | @@ -3310,10 +3112,8 @@ class KTWebService |
| 3310 | 3112 | { |
| 3311 | 3113 | return new SOAP_Value('return',"{urn:$this->namespace}kt_metadata_response", $kt); |
| 3312 | 3114 | } |
| 3313 | - $response=array( | |
| 3314 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3315 | - 'message'=>'' | |
| 3316 | - ); | |
| 3115 | + | |
| 3116 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3317 | 3117 | |
| 3318 | 3118 | $metadata = $kt->get_document_type_metadata($document_type); |
| 3319 | 3119 | if (PEAR::isError($metadata)) |
| ... | ... | @@ -3370,10 +3170,8 @@ class KTWebService |
| 3370 | 3170 | { |
| 3371 | 3171 | return new SOAP_Value('return',"{urn:$this->namespace}kt_metadata_response", $kt); |
| 3372 | 3172 | } |
| 3373 | - $response=array( | |
| 3374 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3375 | - 'message'=>'' | |
| 3376 | - ); | |
| 3173 | + | |
| 3174 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3377 | 3175 | |
| 3378 | 3176 | $document = &$kt->get_document_by_id($document_id); |
| 3379 | 3177 | if (PEAR::isError($document)) |
| ... | ... | @@ -3438,10 +3236,8 @@ class KTWebService |
| 3438 | 3236 | { |
| 3439 | 3237 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); |
| 3440 | 3238 | } |
| 3441 | - $response=array( | |
| 3442 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3443 | - 'message'=>'' | |
| 3444 | - ); | |
| 3239 | + | |
| 3240 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3445 | 3241 | |
| 3446 | 3242 | $document = &$kt->get_document_by_id($document_id); |
| 3447 | 3243 | if (PEAR::isError($document)) |
| ... | ... | @@ -3459,7 +3255,6 @@ class KTWebService |
| 3459 | 3255 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); |
| 3460 | 3256 | } |
| 3461 | 3257 | |
| 3462 | - | |
| 3463 | 3258 | if ($this->version >= 2) |
| 3464 | 3259 | { |
| 3465 | 3260 | $result = $document->update_sysdata($sysdata); |
| ... | ... | @@ -3470,13 +3265,11 @@ class KTWebService |
| 3470 | 3265 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); |
| 3471 | 3266 | } |
| 3472 | 3267 | |
| 3473 | - | |
| 3474 | 3268 | return $this->get_document_detail($session_id, $document_id, 'M'); |
| 3475 | 3269 | } |
| 3476 | 3270 | $response['status_code'] = KTWS_SUCCESS; |
| 3477 | 3271 | |
| 3478 | 3272 | return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); |
| 3479 | - | |
| 3480 | 3273 | } |
| 3481 | 3274 | |
| 3482 | 3275 | /** |
| ... | ... | @@ -3494,10 +3287,7 @@ class KTWebService |
| 3494 | 3287 | { |
| 3495 | 3288 | return new SOAP_Value('return',"{urn:$this->namespace}kt_workflow_transitions_response", $kt); |
| 3496 | 3289 | } |
| 3497 | - $response=array( | |
| 3498 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3499 | - 'message'=>'' | |
| 3500 | - ); | |
| 3290 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3501 | 3291 | |
| 3502 | 3292 | $document = &$kt->get_document_by_id($document_id); |
| 3503 | 3293 | if (PEAR::isError($document)) |
| ... | ... | @@ -3517,11 +3307,16 @@ class KTWebService |
| 3517 | 3307 | } |
| 3518 | 3308 | |
| 3519 | 3309 | $response['status_code'] = KTWS_SUCCESS; |
| 3520 | - $response['transitions'] = $result; | |
| 3310 | + $response['transitions'] = KTWebService::_encode_document_workflow_transitions($result); | |
| 3521 | 3311 | |
| 3522 | 3312 | return new SOAP_Value('return',"{urn:$this->namespace}kt_workflow_transitions_response", $response); |
| 3523 | 3313 | } |
| 3524 | 3314 | |
| 3315 | + function _encode_document_workflow_transitions($transitions, $name='transitions') | |
| 3316 | + { | |
| 3317 | + return new SOAP_Value($name,"{urn:$this->namespace}kt_workflow_transitions", $transitions); | |
| 3318 | + } | |
| 3319 | + | |
| 3525 | 3320 | /** |
| 3526 | 3321 | * Returns the current state that the document is in. |
| 3527 | 3322 | * |
| ... | ... | @@ -3538,10 +3333,7 @@ class KTWebService |
| 3538 | 3333 | { |
| 3539 | 3334 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 3540 | 3335 | } |
| 3541 | - $response=array( | |
| 3542 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3543 | - 'message'=>'' | |
| 3544 | - ); | |
| 3336 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3545 | 3337 | |
| 3546 | 3338 | $document = &$kt->get_document_by_id($document_id); |
| 3547 | 3339 | if (PEAR::isError($document)) |
| ... | ... | @@ -3567,20 +3359,6 @@ class KTWebService |
| 3567 | 3359 | } |
| 3568 | 3360 | |
| 3569 | 3361 | /** |
| 3570 | - * Encode an array as kt_document_transaction_history_item | |
| 3571 | - * | |
| 3572 | - * @param array $item | |
| 3573 | - * @param string $name | |
| 3574 | - * @return SOAP_Value of kt_document_transaction_history_item | |
| 3575 | - * @access private | |
| 3576 | - * @static | |
| 3577 | - */ | |
| 3578 | - function _encode_transaction_history_item($item, $name='item') | |
| 3579 | - { | |
| 3580 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_transaction_history_item", $item); | |
| 3581 | - } | |
| 3582 | - | |
| 3583 | - /** | |
| 3584 | 3362 | * Encode an array as kt_document_transaction_history |
| 3585 | 3363 | * |
| 3586 | 3364 | * @param array $history |
| ... | ... | @@ -3591,29 +3369,11 @@ class KTWebService |
| 3591 | 3369 | */ |
| 3592 | 3370 | function _encode_transaction_history($history, $name='history') |
| 3593 | 3371 | { |
| 3594 | - $encoded=array(); | |
| 3595 | - foreach($history as $item) | |
| 3372 | + foreach($history as $key=>$item) | |
| 3596 | 3373 | { |
| 3597 | - $encoded[] = KTWebService::_encode_transaction_history_item($item); | |
| 3374 | + $history[$key] = new SOAP_Value('item',"{urn:$this->namespace}kt_document_transaction_history_item", $item); | |
| 3598 | 3375 | } |
| 3599 | - | |
| 3600 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_transaction_history", $encoded); | |
| 3601 | - } | |
| 3602 | - | |
| 3603 | - /** | |
| 3604 | - * Encode an array as kt_document_transaction_history_response | |
| 3605 | - * | |
| 3606 | - * @param array $response | |
| 3607 | - * @param string $name | |
| 3608 | - * @return SOAP_Value of kt_document_transaction_history_response | |
| 3609 | - * @access private | |
| 3610 | - * @static | |
| 3611 | - */ | |
| 3612 | - function _encode_transaction_history_response($response, $name='return') | |
| 3613 | - { | |
| 3614 | - $response['history'] = KTWebService::_encode_transaction_history($response['history']); | |
| 3615 | - | |
| 3616 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_transaction_history_response", $response); | |
| 3376 | + return new SOAP_Value($name,"{urn:$this->namespace}kt_document_transaction_history", $history); | |
| 3617 | 3377 | } |
| 3618 | 3378 | |
| 3619 | 3379 | /** |
| ... | ... | @@ -3631,10 +3391,7 @@ class KTWebService |
| 3631 | 3391 | { |
| 3632 | 3392 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_transaction_history_response", $kt); |
| 3633 | 3393 | } |
| 3634 | - $response=array( | |
| 3635 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3636 | - 'message'=>'' | |
| 3637 | - ); | |
| 3394 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3638 | 3395 | |
| 3639 | 3396 | $document = &$kt->get_document_by_id($document_id); |
| 3640 | 3397 | if (PEAR::isError($document)) |
| ... | ... | @@ -3654,23 +3411,9 @@ class KTWebService |
| 3654 | 3411 | } |
| 3655 | 3412 | |
| 3656 | 3413 | $response['status_code'] = KTWS_SUCCESS; |
| 3657 | - $response['history'] = $result; | |
| 3414 | + $response['history'] = KTWebService::_encode_transaction_history($result); | |
| 3658 | 3415 | |
| 3659 | - return KTWebService::_encode_transaction_history_response($response); | |
| 3660 | - } | |
| 3661 | - | |
| 3662 | - /** | |
| 3663 | - * Encode an array as kt_document_version_history_item | |
| 3664 | - * | |
| 3665 | - * @param array $item | |
| 3666 | - * @param string $name | |
| 3667 | - * @return SOAP_Value of kt_document_version_history_item | |
| 3668 | - * @access private | |
| 3669 | - * @static | |
| 3670 | - */ | |
| 3671 | - function _encode_version_history_item($item, $name='item') | |
| 3672 | - { | |
| 3673 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_version_history_item", $item); | |
| 3416 | + return new SOAP_Value('return',"{urn:$this->namespace}kt_document_transaction_history_response", $response); | |
| 3674 | 3417 | } |
| 3675 | 3418 | |
| 3676 | 3419 | /** |
| ... | ... | @@ -3684,32 +3427,13 @@ class KTWebService |
| 3684 | 3427 | */ |
| 3685 | 3428 | function _encode_version_history($history, $name='history') |
| 3686 | 3429 | { |
| 3687 | - $encoded=array(); | |
| 3688 | - foreach($history as $item) | |
| 3430 | + foreach($history as $key=>$item) | |
| 3689 | 3431 | { |
| 3690 | - $encoded[] = KTWebService::_encode_version_history_item($item); | |
| 3432 | + $history[$key] = new SOAP_Value('item',"{urn:$this->namespace}kt_document_version_history_item", $item); | |
| 3691 | 3433 | } |
| 3692 | - | |
| 3693 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_version_history", $encoded); | |
| 3694 | - } | |
| 3695 | - | |
| 3696 | - /** | |
| 3697 | - * Encode an array as kt_document_version_history_response | |
| 3698 | - * | |
| 3699 | - * @param array $response | |
| 3700 | - * @param string $name | |
| 3701 | - * @return SOAP_Value of kt_document_version_history_response | |
| 3702 | - * @access private | |
| 3703 | - * @static | |
| 3704 | - */ | |
| 3705 | - function _encode_version_history_response($response, $name='return') | |
| 3706 | - { | |
| 3707 | - $response['history'] = KTWebService::_encode_version_history($response['history']); | |
| 3708 | - | |
| 3709 | - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_version_history_response", $response); | |
| 3434 | + return new SOAP_Value($name,"{urn:$this->namespace}kt_document_version_history", $history); | |
| 3710 | 3435 | } |
| 3711 | 3436 | |
| 3712 | - | |
| 3713 | 3437 | /** |
| 3714 | 3438 | * Returns the version history. |
| 3715 | 3439 | * |
| ... | ... | @@ -3726,10 +3450,7 @@ class KTWebService |
| 3726 | 3450 | { |
| 3727 | 3451 | return new SOAP_Value('return',"{urn:$this->namespace}kt_document_version_history_response", $kt); |
| 3728 | 3452 | } |
| 3729 | - $response=array( | |
| 3730 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3731 | - 'message'=>'' | |
| 3732 | - ); | |
| 3453 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3733 | 3454 | |
| 3734 | 3455 | $document = &$kt->get_document_by_id($document_id); |
| 3735 | 3456 | if (PEAR::isError($document)) |
| ... | ... | @@ -3749,12 +3470,11 @@ class KTWebService |
| 3749 | 3470 | } |
| 3750 | 3471 | |
| 3751 | 3472 | $response['status_code'] = KTWS_SUCCESS; |
| 3752 | - $response['history'] = $result; | |
| 3473 | + $response['history'] =KTWebService::_encode_version_history($result); | |
| 3753 | 3474 | |
| 3754 | - return KTWebService::_encode_version_history_response($response); | |
| 3475 | + return new SOAP_Value('return',"{urn:$this->namespace}kt_document_version_history_response", $response); | |
| 3755 | 3476 | } |
| 3756 | 3477 | |
| 3757 | - | |
| 3758 | 3478 | /** |
| 3759 | 3479 | * Returns a list of linked documents |
| 3760 | 3480 | * |
| ... | ... | @@ -3789,12 +3509,25 @@ class KTWebService |
| 3789 | 3509 | } |
| 3790 | 3510 | |
| 3791 | 3511 | $links = $document->get_linked_documents(); |
| 3792 | - $response['links'] = new SOAP_Value('links',"{urn:$this->namespace}kt_linked_documents", $links); | |
| 3512 | + $response['links'] = KTWebService::_encode_document_links($links); | |
| 3793 | 3513 | $response['status_code'] = KTWS_SUCCESS; |
| 3794 | 3514 | |
| 3795 | 3515 | return new SOAP_Value('return',"{urn:$this->namespace}kt_linked_document_response", $response); |
| 3796 | 3516 | } |
| 3797 | 3517 | |
| 3518 | + function _encode_document_links($links, $name='links') | |
| 3519 | + { | |
| 3520 | + foreach($links as $key=>$link) | |
| 3521 | + { | |
| 3522 | + $link['document_id'] = (int) $link['document_id']; | |
| 3523 | + $link['filesize'] = (int) $link['filesize']; | |
| 3524 | + | |
| 3525 | + $links[$key] = new SOAP_Value('links',"{urn:$this->namespace}kt_linked_document", $link); | |
| 3526 | + } | |
| 3527 | + | |
| 3528 | + return new SOAP_Value($name,"{urn:$this->namespace}kt_linked_documents", $links); | |
| 3529 | + } | |
| 3530 | + | |
| 3798 | 3531 | /** |
| 3799 | 3532 | * Removes a link between documents |
| 3800 | 3533 | * |
| ... | ... | @@ -3812,10 +3545,7 @@ class KTWebService |
| 3812 | 3545 | { |
| 3813 | 3546 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 3814 | 3547 | } |
| 3815 | - $response=array( | |
| 3816 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3817 | - 'message'=>'' | |
| 3818 | - ); | |
| 3548 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3819 | 3549 | |
| 3820 | 3550 | $document = &$kt->get_document_by_id($parent_document_id); |
| 3821 | 3551 | if (PEAR::isError($document)) |
| ... | ... | @@ -3864,10 +3594,7 @@ class KTWebService |
| 3864 | 3594 | { |
| 3865 | 3595 | return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); |
| 3866 | 3596 | } |
| 3867 | - $response=array( | |
| 3868 | - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, | |
| 3869 | - 'message'=>'' | |
| 3870 | - ); | |
| 3597 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); | |
| 3871 | 3598 | |
| 3872 | 3599 | $document = &$kt->get_document_by_id($parent_document_id); |
| 3873 | 3600 | if (PEAR::isError($document)) |
| ... | ... | @@ -3899,17 +3626,13 @@ class KTWebService |
| 3899 | 3626 | } |
| 3900 | 3627 | |
| 3901 | 3628 | function _encode_client_policies($policies) |
| 3902 | - { | |
| 3903 | - $encoded=array(); | |
| 3904 | - foreach($policies as $policy) | |
| 3905 | - { | |
| 3906 | - $encoded[] = new SOAP_Value('policy',"{urn:$this->namespace}kt_client_policy", $policy); | |
| 3907 | - } | |
| 3908 | - if (empty($encoded)) | |
| 3629 | + { | |
| 3630 | + foreach($policies as $key=>$policy) | |
| 3909 | 3631 | { |
| 3910 | - $encoded=null; | |
| 3632 | + $policies[$key] = new SOAP_Value('policy',"{urn:$this->namespace}kt_client_policy", $policy); | |
| 3911 | 3633 | } |
| 3912 | - return new SOAP_Value('policies',"{urn:$this->namespace}kt_client_policies_array", $encoded); | |
| 3634 | + | |
| 3635 | + return new SOAP_Value('policies',"{urn:$this->namespace}kt_client_policies_array", $policies); | |
| 3913 | 3636 | } |
| 3914 | 3637 | |
| 3915 | 3638 | /** |
| ... | ... | @@ -3918,7 +3641,7 @@ class KTWebService |
| 3918 | 3641 | * @param string $session_id |
| 3919 | 3642 | * @return kt_client_policies_response |
| 3920 | 3643 | */ |
| 3921 | - function get_client_policies($session_id) | |
| 3644 | + function get_client_policies($session_id, $client=null) | |
| 3922 | 3645 | { |
| 3923 | 3646 | $this->debug("get_client_policies('$session_id')"); |
| 3924 | 3647 | $config = KTConfig::getSingleton(); |
| ... | ... | @@ -3964,9 +3687,13 @@ class KTWebService |
| 3964 | 3687 | 'value' => bool2str($config->get('clientToolPolicies/captureReasonsMoveInKT')), |
| 3965 | 3688 | 'type' => 'boolean' |
| 3966 | 3689 | ), |
| 3690 | + array( | |
| 3691 | + 'name' => 'allow_remember_password', | |
| 3692 | + 'value' => bool2str($config->get('clientToolPolicies/allowRememberPassword')), | |
| 3693 | + 'type' => 'boolean' | |
| 3694 | + ), | |
| 3967 | 3695 | ); |
| 3968 | 3696 | |
| 3969 | - | |
| 3970 | 3697 | $response['policies'] = $this->_encode_client_policies($policies); |
| 3971 | 3698 | $response['message'] = 'Knowledgetree client policies retrieval succeeded.'; |
| 3972 | 3699 | $response['status_code'] = KTWS_SUCCESS; |
| ... | ... | @@ -3991,11 +3718,9 @@ class KTWebService |
| 3991 | 3718 | { |
| 3992 | 3719 | return new SOAP_Value('return',"{urn:$this->namespace}kt_search_response", $kt); |
| 3993 | 3720 | } |
| 3994 | - $response=array( | |
| 3995 | - 'status_code'=>KTWS_ERR_PROBLEM, | |
| 3996 | - 'message'=>'', | |
| 3997 | - 'hits'=>array() | |
| 3998 | - ); | |
| 3721 | + | |
| 3722 | + $response = KTWebService::_status(KTWS_ERR_PROBLEM); | |
| 3723 | + $response['hits'] = array(); | |
| 3999 | 3724 | |
| 4000 | 3725 | if (!defined('HAS_SEARCH_FUNCTIONALITY')) |
| 4001 | 3726 | { |
| ... | ... | @@ -4024,7 +3749,6 @@ class KTWebService |
| 4024 | 3749 | return new SOAP_Value('return',"{urn:$this->namespace}kt_search_response", $response); |
| 4025 | 3750 | } |
| 4026 | 3751 | |
| 4027 | - | |
| 4028 | 3752 | /** |
| 4029 | 3753 | * The main json request processing function. |
| 4030 | 3754 | * |
| ... | ... | @@ -4186,8 +3910,7 @@ class KTWebService |
| 4186 | 3910 | |
| 4187 | 3911 | } |
| 4188 | 3912 | |
| 4189 | - | |
| 4190 | -$webservice = new KTWebService(); | |
| 3913 | +$webservice = KTWebService::get(); | |
| 4191 | 3914 | $webservice->run(); |
| 4192 | 3915 | |
| 4193 | 3916 | -?> |
| 3917 | +?> | |
| 4194 | 3918 | \ No newline at end of file | ... | ... |
lib/browse/DocumentCollection.inc.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | * |
| 36 | 36 | */ |
| ... | ... | @@ -618,4 +618,54 @@ class AdvancedCollection { |
| 618 | 618 | } |
| 619 | 619 | } |
| 620 | 620 | |
| 621 | -?> | |
| 621 | +class ExtCollection { | |
| 622 | + | |
| 623 | + var $columns; | |
| 624 | + var $folders; | |
| 625 | + var $documents; | |
| 626 | + | |
| 627 | + /** | |
| 628 | + * Add the column headers | |
| 629 | + * | |
| 630 | + * @param array $aColumns | |
| 631 | + */ | |
| 632 | + function addColumns($aColumns) { | |
| 633 | + $this->columns = $aColumns; | |
| 634 | + } | |
| 635 | + | |
| 636 | + /** | |
| 637 | + * Add the folders under the folder | |
| 638 | + * | |
| 639 | + * @param array $aFolders | |
| 640 | + */ | |
| 641 | + function addFolders($aFolders) { | |
| 642 | + $this->folders = $aFolders; | |
| 643 | + } | |
| 644 | + | |
| 645 | + /** | |
| 646 | + * Add the documents contained in the folder | |
| 647 | + * | |
| 648 | + * @param array $aDocuments | |
| 649 | + */ | |
| 650 | + function addDocuments($aDocuments) { | |
| 651 | + $this->documents = $aDocuments; | |
| 652 | + } | |
| 653 | + | |
| 654 | + function render() { | |
| 655 | + | |
| 656 | + global $main; | |
| 657 | + $main->requireJSResource('thirdpartyjs/extjs/adapter/ext/ext-base.js'); | |
| 658 | + $main->requireJSResource('thirdpartyjs/extjs/ext-all.js'); | |
| 659 | + $main->requireJSResource('resources/js/browse_ext.js'); | |
| 660 | + | |
| 661 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 662 | + $oTemplate = $oTemplating->loadTemplate('kt3/ext_collection'); | |
| 663 | + $aTemplateData = array( | |
| 664 | + ); | |
| 665 | + | |
| 666 | + // in order to allow OTHER things than batch to move us around, we do: | |
| 667 | + return $oTemplate->render($aTemplateData); | |
| 668 | + } | |
| 669 | +} | |
| 670 | + | |
| 671 | +?> | |
| 622 | 672 | \ No newline at end of file | ... | ... |
lib/cache/cache.inc.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | */ |
| 36 | 36 | |
| ... | ... | @@ -75,9 +75,14 @@ class KTCache { |
| 75 | 75 | if (!file_exists($aOptions['cacheDir'])) { |
| 76 | 76 | mkdir($aOptions['cacheDir']); |
| 77 | 77 | } |
| 78 | + | |
| 79 | + // See thirdparty/pear/Cache/Lite.php to customize cache | |
| 78 | 80 | $aOptions['lifeTime'] = 60; |
| 79 | 81 | $aOptions['memoryCaching'] = true; |
| 80 | 82 | $aOptions['automaticSerialization'] = true; |
| 83 | + /* Patched line */ | |
| 84 | + // Disable fileCaching (when cache > 5Mo) | |
| 85 | + $aOptions['onlyMemoryCaching'] = true; | |
| 81 | 86 | |
| 82 | 87 | $this->cacheDir = $aOptions['cacheDir']; |
| 83 | 88 | ... | ... |
lib/dispatcher.inc.php
| ... | ... | @@ -538,6 +538,39 @@ class KTErrorDispatcher extends KTStandardDispatcher { |
| 538 | 538 | |
| 539 | 539 | function dispatch() { |
| 540 | 540 | require_once(KT_LIB_DIR . '/validation/errorviewer.inc.php'); |
| 541 | + require_once(KT_LIB_DIR . '/validation/customerrorviewer.inc.php'); | |
| 542 | + | |
| 543 | + $oCustomViewer =& KTCustomErrorViewer::initCustomErrorViewer(); | |
| 544 | + | |
| 545 | + //if the custom error messages are set to 'on' in the config file | |
| 546 | + //we check if the error page exists and redirect to it if it does. | |
| 547 | + //if either the page doesn't exit or the custom error option is off in the config file | |
| 548 | + //we carry out default error reporting | |
| 549 | + if ($oCustomViewer->getCustomErrorConfigSetting() == 'on'){ | |
| 550 | + $CustomErrorPage = $oCustomViewer->getCustomErrorRedirectPage(); | |
| 551 | + if ( $CustomErrorPage != '0') //if an error is not returned from getCustomErrorRedirectPage(); | |
| 552 | + { | |
| 553 | + $sErrorHandler = $oCustomViewer->getCustomErrorHandlerSetting(); | |
| 554 | + | |
| 555 | + //redirect | |
| 556 | + if ($sErrorHandler == 'on') | |
| 557 | + { | |
| 558 | + //if custom error handler is set to on inside config.ini then send error object with error page | |
| 559 | + $oCustomViewer->doCustomErrorPageRedirect($CustomErrorPage, $this->oError); | |
| 560 | + } | |
| 561 | + else if ($sErrorHandler != 'on') | |
| 562 | + { | |
| 563 | + //if custom error handler is set to off inside config.ini then just send error page | |
| 564 | + $oCustomViewer->doCustomErrorPageRedirect($CustomErrorPage); | |
| 565 | + } | |
| 566 | + | |
| 567 | + //exit without errors | |
| 568 | + exit(0); | |
| 569 | + } | |
| 570 | + } | |
| 571 | + | |
| 572 | + //if either customer error messages is off or the custom error page doesn't exist the function will run | |
| 573 | + //the default error handling here | |
| 541 | 574 | $oRegistry =& KTErrorViewerRegistry::getSingleton(); |
| 542 | 575 | $oViewer =& $oRegistry->getViewer($this->oError); |
| 543 | 576 | $this->oPage->setTitle($oViewer->view()); | ... | ... |
lib/documentmanagement/DocumentFieldLink.inc
| ... | ... | @@ -7,39 +7,39 @@ |
| 7 | 7 | * KnowledgeTree Open Source Edition |
| 8 | 8 | * Document Management Made Simple |
| 9 | 9 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 10 | - * | |
| 10 | + * | |
| 11 | 11 | * This program is free software; you can redistribute it and/or modify it under |
| 12 | 12 | * the terms of the GNU General Public License version 3 as published by the |
| 13 | 13 | * Free Software Foundation. |
| 14 | - * | |
| 14 | + * | |
| 15 | 15 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 16 | 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 17 | 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 18 | 18 | * details. |
| 19 | - * | |
| 19 | + * | |
| 20 | 20 | * You should have received a copy of the GNU General Public License |
| 21 | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 22 | - * | |
| 22 | + * | |
| 23 | 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 24 | 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 25 | - * | |
| 25 | + * | |
| 26 | 26 | * The interactive user interfaces in modified source and object code versions |
| 27 | 27 | * of this program must display Appropriate Legal Notices, as required under |
| 28 | 28 | * Section 5 of the GNU General Public License version 3. |
| 29 | - * | |
| 29 | + * | |
| 30 | 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 31 | 31 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 32 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 33 | 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 34 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | - * copyright notice. | |
| 34 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | + * copyright notice. | |
| 36 | 36 | * Contributor( s): ______________________________________ |
| 37 | 37 | */ |
| 38 | 38 | |
| 39 | 39 | require_once(KT_LIB_DIR . "/util/sanitize.inc"); |
| 40 | 40 | |
| 41 | 41 | class DocumentFieldLink extends KTEntity { |
| 42 | - | |
| 42 | + | |
| 43 | 43 | /** document field link primary key */ |
| 44 | 44 | var $iId; |
| 45 | 45 | /** primary key of document to which field is linked */ |
| ... | ... | @@ -55,9 +55,9 @@ class DocumentFieldLink extends KTEntity { |
| 55 | 55 | 'iDocumentFieldId' => 'document_field_id', |
| 56 | 56 | 'sValue' => 'value', |
| 57 | 57 | ); |
| 58 | - | |
| 58 | + | |
| 59 | 59 | /** |
| 60 | - * Default constructor | |
| 60 | + * Default constructor | |
| 61 | 61 | * |
| 62 | 62 | * @param Primary key of document to which field is linked |
| 63 | 63 | * @param Primary key of field to which document is linked |
| ... | ... | @@ -71,7 +71,7 @@ class DocumentFieldLink extends KTEntity { |
| 71 | 71 | $this->iDocumentFieldId = $iNewDocumentFieldId; |
| 72 | 72 | $this->sValue = $sNewValue; |
| 73 | 73 | } |
| 74 | - | |
| 74 | + | |
| 75 | 75 | /** |
| 76 | 76 | * Get the document field link primary key |
| 77 | 77 | * |
| ... | ... | @@ -81,7 +81,7 @@ class DocumentFieldLink extends KTEntity { |
| 81 | 81 | function getId() { |
| 82 | 82 | return $this->iId; |
| 83 | 83 | } |
| 84 | - | |
| 84 | + | |
| 85 | 85 | /** |
| 86 | 86 | * Get the primary key of the document to which the field is linked |
| 87 | 87 | * |
| ... | ... | @@ -91,7 +91,7 @@ class DocumentFieldLink extends KTEntity { |
| 91 | 91 | function getMetadataVersionId() { |
| 92 | 92 | return $this->iMetadataVersionId; |
| 93 | 93 | } |
| 94 | - | |
| 94 | + | |
| 95 | 95 | /** |
| 96 | 96 | * Set the primary key of the document to which the field is linked |
| 97 | 97 | * |
| ... | ... | @@ -101,7 +101,7 @@ class DocumentFieldLink extends KTEntity { |
| 101 | 101 | function setMetadataVersionId($iNewValue) { |
| 102 | 102 | $this->iMetadataVersionId = $iNewValue; |
| 103 | 103 | } |
| 104 | - | |
| 104 | + | |
| 105 | 105 | /** |
| 106 | 106 | * Get the primary key of the field to which the document is linked |
| 107 | 107 | * |
| ... | ... | @@ -111,7 +111,7 @@ class DocumentFieldLink extends KTEntity { |
| 111 | 111 | function getDocumentFieldId() { |
| 112 | 112 | return $this->iDocumentFieldId; |
| 113 | 113 | } |
| 114 | - | |
| 114 | + | |
| 115 | 115 | /** |
| 116 | 116 | * Set the primary key of the field to which the document is related |
| 117 | 117 | * |
| ... | ... | @@ -121,7 +121,7 @@ class DocumentFieldLink extends KTEntity { |
| 121 | 121 | function setDocumentFieldId($iNewVale) { |
| 122 | 122 | $this->iDocumentFieldId = $iNewValue; |
| 123 | 123 | } |
| 124 | - | |
| 124 | + | |
| 125 | 125 | /** |
| 126 | 126 | * Get the value of the field |
| 127 | 127 | * |
| ... | ... | @@ -129,9 +129,9 @@ class DocumentFieldLink extends KTEntity { |
| 129 | 129 | * |
| 130 | 130 | */ |
| 131 | 131 | function getValue() { |
| 132 | - return sanitizeForSQLtoHTML($this->sValue); | |
| 132 | + return $this->sValue; | |
| 133 | 133 | } |
| 134 | - | |
| 134 | + | |
| 135 | 135 | /** |
| 136 | 136 | * Set the value of the field |
| 137 | 137 | * |
| ... | ... | @@ -145,7 +145,7 @@ class DocumentFieldLink extends KTEntity { |
| 145 | 145 | function _table () { |
| 146 | 146 | return KTUtil::getTableName('document_fields_link'); |
| 147 | 147 | } |
| 148 | - | |
| 148 | + | |
| 149 | 149 | /** |
| 150 | 150 | * |
| 151 | 151 | * Static function. Given a document fields link primary key will create | ... | ... |
lib/documentmanagement/documentcore.inc.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | * |
| 36 | 36 | */ |
| ... | ... | @@ -181,13 +181,16 @@ class KTDocumentCore extends KTEntity { |
| 181 | 181 | |
| 182 | 182 | // {{{ ktentity requirements |
| 183 | 183 | function _fieldValues () { |
| 184 | - $sNewFullPath = Folder::generateFolderPath($this->iFolderId); | |
| 185 | - if (!PEAR::isError($sNewFullPath)) { | |
| 186 | - $this->sFullPath = $sNewFullPath; | |
| 187 | - } | |
| 188 | - $sNewParentFolderIds = Folder::generateFolderIds($this->iFolderId); | |
| 189 | - if (!PEAR::isError($sNewParentFolderIds)) { | |
| 190 | - $this->sParentFolderIds = $sNewParentFolderIds; | |
| 184 | + static $lastFolder = null; | |
| 185 | + if (is_null($lastFolder) || $lastFolder->getID() !== $this->iFolderId) { | |
| 186 | + $lastFolder = Folder::get($this->iFolderId); | |
| 187 | + if (PEAR::isError($lastFolder)) { | |
| 188 | + $lastFolder = null; | |
| 189 | + } | |
| 190 | + } | |
| 191 | + if (!is_null($lastFolder)) { | |
| 192 | + $this->sFullPath = $lastFolder->getFullPath(); | |
| 193 | + $this->sParentFolderIds = $lastFolder->getParentFolderIDs(); | |
| 191 | 194 | } |
| 192 | 195 | return parent::_fieldValues(); |
| 193 | 196 | } |
| ... | ... | @@ -256,6 +259,9 @@ class KTDocumentCore extends KTEntity { |
| 256 | 259 | $this->bImmutable = false; |
| 257 | 260 | } |
| 258 | 261 | $oFolder = Folder::get($this->getFolderId()); |
| 262 | + if (PEAR::isError($oFolder) || ($oFolder === false) || empty($oFolder) ) { | |
| 263 | + return false; | |
| 264 | + } | |
| 259 | 265 | $this->iPermissionObjectId = $oFolder->getPermissionObjectId(); |
| 260 | 266 | $res = parent::create(); |
| 261 | 267 | ... | ... |
lib/documentmanagement/documentutil.inc.php
| ... | ... | @@ -561,7 +561,9 @@ class KTDocumentUtil { |
| 561 | 561 | |
| 562 | 562 | $oUploadChannel =& KTUploadChannel::getSingleton(); |
| 563 | 563 | $oUploadChannel->sendMessage(new KTUploadNewFile($sFilename)); |
| 564 | + DBUtil::startTransaction(); | |
| 564 | 565 | $oDocument =& KTDocumentUtil::_add($oFolder, $sFilename, $oUser, $aOptions); |
| 566 | + | |
| 565 | 567 | // $oUploadChannel->sendMessage(new KTUploadGenericMessage(_kt('Document created'))); |
| 566 | 568 | if (PEAR::isError($oDocument)) { |
| 567 | 569 | return $oDocument; |
| ... | ... | @@ -633,6 +635,7 @@ class KTDocumentUtil { |
| 633 | 635 | } |
| 634 | 636 | KTDocumentUtil::updateSearchableText($oDocument, true); |
| 635 | 637 | |
| 638 | + DBUtil::commit(); | |
| 636 | 639 | $oUploadChannel->sendMessage(new KTUploadGenericMessage(_kt('All done...'))); |
| 637 | 640 | |
| 638 | 641 | return $oDocument; |
| ... | ... | @@ -718,7 +721,7 @@ class KTDocumentUtil { |
| 718 | 721 | $iMimeTypeId = KTMime::getMimeTypeID($sType, $oDocument->getFileName()); |
| 719 | 722 | $oDocument->setMimeTypeId($iMimeTypeId); |
| 720 | 723 | |
| 721 | - $res = $oStorage->upload($oDocument, $sFilename); | |
| 724 | + $res = $oStorage->upload($oDocument, $sFilename, $aOptions); | |
| 722 | 725 | if ($res === false) { |
| 723 | 726 | return PEAR::raiseError(sprintf(_kt("Couldn't store contents: %s"), _kt('No reason given'))); |
| 724 | 727 | } |
| ... | ... | @@ -727,7 +730,7 @@ class KTDocumentUtil { |
| 727 | 730 | } |
| 728 | 731 | KTDocumentUtil::setComplete($oDocument, 'contents'); |
| 729 | 732 | |
| 730 | - if ($aOptions['cleanup_initial_file']) { | |
| 733 | + if ($aOptions['cleanup_initial_file'] && file_exists($sFilename)) { | |
| 731 | 734 | @unlink($sFilename); |
| 732 | 735 | } |
| 733 | 736 | ... | ... |
lib/foldermanagement/Folder.inc
| ... | ... | @@ -7,32 +7,32 @@ |
| 7 | 7 | * KnowledgeTree Open Source Edition |
| 8 | 8 | * Document Management Made Simple |
| 9 | 9 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 10 | - * | |
| 10 | + * | |
| 11 | 11 | * This program is free software; you can redistribute it and/or modify it under |
| 12 | 12 | * the terms of the GNU General Public License version 3 as published by the |
| 13 | 13 | * Free Software Foundation. |
| 14 | - * | |
| 14 | + * | |
| 15 | 15 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 16 | 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 17 | 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 18 | 18 | * details. |
| 19 | - * | |
| 19 | + * | |
| 20 | 20 | * You should have received a copy of the GNU General Public License |
| 21 | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 22 | - * | |
| 22 | + * | |
| 23 | 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 24 | 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 25 | - * | |
| 25 | + * | |
| 26 | 26 | * The interactive user interfaces in modified source and object code versions |
| 27 | 27 | * of this program must display Appropriate Legal Notices, as required under |
| 28 | 28 | * Section 5 of the GNU General Public License version 3. |
| 29 | - * | |
| 29 | + * | |
| 30 | 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 31 | 31 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 32 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 33 | 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 34 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | - * copyright notice. | |
| 34 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | + * copyright notice. | |
| 36 | 36 | * Contributor( s): ______________________________________ |
| 37 | 37 | */ |
| 38 | 38 | |
| ... | ... | @@ -82,10 +82,10 @@ class Folder extends KTEntity { |
| 82 | 82 | // }}} |
| 83 | 83 | |
| 84 | 84 | function getID() { return $this->iId; } |
| 85 | - function getName() { return sanitizeForSQLtoHTML($this->sName); } | |
| 86 | - function setName($sNewValue) { $this->sName = sanitizeForSQL($sNewValue); } | |
| 87 | - function getDescription() { return sanitizeForSQLtoHTML($this->sDescription); } | |
| 88 | - function setDescription($sNewValue) { $this->sDescription = sanitizeForSQL($sNewValue); } | |
| 85 | + function getName() { return ($this->sName); } | |
| 86 | + function setName($sNewValue) { $this->sName = ($sNewValue); } | |
| 87 | + function getDescription() { return ($this->sDescription); } | |
| 88 | + function setDescription($sNewValue) { $this->sDescription = ($sNewValue); } | |
| 89 | 89 | function getParentID() { return $this->iParentID; } |
| 90 | 90 | function setParentID($iNewValue) { $this->iParentID = $iNewValue; } |
| 91 | 91 | function getCreatorID() { return $this->iCreatorID; } | ... | ... |
lib/foldermanagement/compressionArchiveUtil.inc.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | * |
| 36 | 36 | */ |
| ... | ... | @@ -79,10 +79,17 @@ class ZipFolder { |
| 79 | 79 | /** |
| 80 | 80 | * Add a document to the zip file |
| 81 | 81 | */ |
| 82 | - function addDocumentToZip($oDocument) { | |
| 83 | - $sParentFolder = str_replace('<', '', str_replace('</', '', str_replace('>', '', sprintf('%s/%s', $this->sTmpPath, $oDocument->getFullPath())))); | |
| 82 | + function addDocumentToZip($oDocument, $oFolder = null) { | |
| 83 | + if(empty($oFolder)){ | |
| 84 | + $oFolder = Folder::get($oDocument->getFolderID()); | |
| 85 | + } | |
| 86 | + | |
| 87 | + $sDocPath = $oFolder->getFullPath().'/'.$oFolder->getName(); | |
| 88 | + $sDocName = $oDocument->getFileName(); | |
| 89 | + | |
| 90 | + $sParentFolder = str_replace('<', '', str_replace('</', '', str_replace('>', '', sprintf('%s/%s', $this->sTmpPath, $sDocPath)))); | |
| 84 | 91 | $newDir = $this->sTmpPath; |
| 85 | - $sFullPath = str_replace('<', '', str_replace('</', '', str_replace('>', '', $this->_convertEncoding($oDocument->getFullPath(), true)))); | |
| 92 | + $sFullPath = str_replace('<', '', str_replace('</', '', str_replace('>', '', $this->_convertEncoding($sDocPath, true)))); | |
| 86 | 93 | foreach (split('/', $sFullPath) as $dirPart) { |
| 87 | 94 | $newDir = sprintf("%s/%s", $newDir, $dirPart); |
| 88 | 95 | if (!file_exists($newDir)) { |
| ... | ... | @@ -91,11 +98,11 @@ class ZipFolder { |
| 91 | 98 | } |
| 92 | 99 | |
| 93 | 100 | $sOrigFile = str_replace('<', '', str_replace('</', '', str_replace('>', '', $this->oStorage->temporaryFile($oDocument)))); |
| 94 | - $sFilename = sprintf("%s/%s", $sParentFolder, str_replace('<', '', str_replace('</', '', str_replace('>', '', $oDocument->getFileName())))); | |
| 101 | + $sFilename = sprintf("%s/%s", $sParentFolder, str_replace('<', '', str_replace('</', '', str_replace('>', '', $sDocName)))); | |
| 95 | 102 | $sFilename = $this->_convertEncoding($sFilename, true); |
| 96 | 103 | copy($sOrigFile, $sFilename); |
| 97 | 104 | |
| 98 | - $sPath = str_replace('<', '', str_replace('</', '', str_replace('>', '', sprintf("%s/%s", $oDocument->getFullPath(), $oDocument->getFileName())))); | |
| 105 | + $sPath = str_replace('<', '', str_replace('</', '', str_replace('>', '', sprintf("%s/%s", $sDocPath, $sDocName)))); | |
| 99 | 106 | $sPath = str_replace($this->aReplaceKeys, $this->aReplaceValues, $sPath); |
| 100 | 107 | $sPath = $this->_convertEncoding($sPath, true); |
| 101 | 108 | ... | ... |
lib/foldermanagement/folderutil.inc.php
| ... | ... | @@ -57,8 +57,8 @@ class KTFolderUtil { |
| 57 | 57 | } |
| 58 | 58 | $oStorage =& KTStorageManagerUtil::getSingleton(); |
| 59 | 59 | $oFolder =& Folder::createFromArray(array( |
| 60 | - 'name' => sanitizeForSQL($sFolderName), | |
| 61 | - 'description' => sanitizeForSQL($sFolderName), | |
| 60 | + 'name' => ($sFolderName), | |
| 61 | + 'description' => ($sFolderName), | |
| 62 | 62 | 'parentid' => $oParentFolder->getID(), |
| 63 | 63 | 'creatorid' => $oUser->getID(), |
| 64 | 64 | )); | ... | ... |
lib/import/bulkimport.inc.php
| ... | ... | @@ -7,32 +7,32 @@ |
| 7 | 7 | * KnowledgeTree Open Source Edition |
| 8 | 8 | * Document Management Made Simple |
| 9 | 9 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 10 | - * | |
| 10 | + * | |
| 11 | 11 | * This program is free software; you can redistribute it and/or modify it under |
| 12 | 12 | * the terms of the GNU General Public License version 3 as published by the |
| 13 | 13 | * Free Software Foundation. |
| 14 | - * | |
| 14 | + * | |
| 15 | 15 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 16 | 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 17 | 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 18 | 18 | * details. |
| 19 | - * | |
| 19 | + * | |
| 20 | 20 | * You should have received a copy of the GNU General Public License |
| 21 | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 22 | - * | |
| 22 | + * | |
| 23 | 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 24 | 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 25 | - * | |
| 25 | + * | |
| 26 | 26 | * The interactive user interfaces in modified source and object code versions |
| 27 | 27 | * of this program must display Appropriate Legal Notices, as required under |
| 28 | 28 | * Section 5 of the GNU General Public License version 3. |
| 29 | - * | |
| 29 | + * | |
| 30 | 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 31 | 31 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 32 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 33 | 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 34 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | - * copyright notice. | |
| 34 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | + * copyright notice. | |
| 36 | 36 | * Contributor( s): ______________________________________ |
| 37 | 37 | */ |
| 38 | 38 | |
| ... | ... | @@ -72,7 +72,7 @@ class KTBulkImportManager { |
| 72 | 72 | |
| 73 | 73 | function _importfolder($oFolder, $sPath) { |
| 74 | 74 | $oPermission = KTPermission::getByName('ktcore.permissions.addFolder'); |
| 75 | - | |
| 75 | + | |
| 76 | 76 | $aDocPaths = $this->oStorage->listDocuments($sPath); |
| 77 | 77 | if (PEAR::isError($aDocPaths)) { |
| 78 | 78 | return $aDocPaths; |
| ... | ... | @@ -91,7 +91,7 @@ class KTBulkImportManager { |
| 91 | 91 | if (Folder::folderExistsName(utf8_encode(basename($sFolderPath)), KTUtil::getId($oFolder))) { |
| 92 | 92 | $_SESSION['KTErrorMessage'][] = sprintf(_kt("The folder %s is already present in %s. Adding files into pre-existing folder."), utf8_encode(basename($sFolderPath)), $oFolder->getName()); |
| 93 | 93 | $aOptions = Folder::getList("parent_id = " . KTUtil::getId($oFolder) . ' AND name = "' . DBUtil::escapeSimple(utf8_encode(basename($sFolderPath))) . '"'); |
| 94 | - if (PEAR::isError($aOptions)) { | |
| 94 | + if (PEAR::isError($aOptions)) { | |
| 95 | 95 | return $aOptions; |
| 96 | 96 | } |
| 97 | 97 | if (count($aOptions) != 1) { |
| ... | ... | @@ -100,7 +100,7 @@ class KTBulkImportManager { |
| 100 | 100 | $oThisFolder = $aOptions[0]; |
| 101 | 101 | } |
| 102 | 102 | } else { |
| 103 | - | |
| 103 | + | |
| 104 | 104 | if(KTPermissionUtil::userHasPermissionOnItem($this->oUser, $oPermission, $oFolder)) |
| 105 | 105 | { |
| 106 | 106 | $oThisFolder = KTFolderUtil::add($oFolder, utf8_encode(basename($sFolderPath)), $this->oUser); |
| ... | ... | @@ -119,7 +119,7 @@ class KTBulkImportManager { |
| 119 | 119 | } |
| 120 | 120 | |
| 121 | 121 | $res = $this->_importfolder($oThisFolder, $sFolderPath); |
| 122 | - | |
| 122 | + | |
| 123 | 123 | if (PEAR::isError($res)) { |
| 124 | 124 | return $res; |
| 125 | 125 | } |
| ... | ... | @@ -128,6 +128,7 @@ class KTBulkImportManager { |
| 128 | 128 | |
| 129 | 129 | function _importdocument($oFolder, $sPath) { |
| 130 | 130 | $aInfo = $this->oStorage->getDocumentInfo($sPath); |
| 131 | + $sTmpFileName = sprintf("%s/%s", $this->oStorage->sBasePath, $sPath); | |
| 131 | 132 | if (PEAR::isError($aInfo)) { |
| 132 | 133 | return $aInfo; |
| 133 | 134 | } |
| ... | ... | @@ -135,7 +136,7 @@ class KTBulkImportManager { |
| 135 | 136 | /*if (KTDocumentUtil::nameExists($oFolder, utf8_encode(basename($sPath)))) { |
| 136 | 137 | $_SESSION['KTErrorMessage'][] = sprintf(_kt("The document %s is already present in %s. Ignoring."), utf8_encode(basename($sPath)), $oFolder->getName()); |
| 137 | 138 | $oDocument =& Document::getByNameAndFolder(utf8_encode(basename($sPath)), KTUtil::getId($oFolder)); |
| 138 | - return $oDocument; | |
| 139 | + return $oDocument; | |
| 139 | 140 | } else if (KTDocumentUtil::fileExists($oFolder, utf8_encode(basename($sPath)))) { |
| 140 | 141 | $_SESSION['KTErrorMessage'][] = sprintf(_kt("The document %s is already present in %s. Ignoring."), utf8_encode(basename($sPath)), $oFolder->getName()); |
| 141 | 142 | $oDocument =& Document::getByFilenameAndFolder(utf8_encode(basename($sPath)), KTUtil::getId($oFolder)); |
| ... | ... | @@ -144,10 +145,12 @@ class KTBulkImportManager { |
| 144 | 145 | // else |
| 145 | 146 | $aOptions = array( |
| 146 | 147 | // XXX: Multiversion Import |
| 147 | - 'contents' => $aInfo->aVersions[0], | |
| 148 | + //'contents' => $aInfo->aVersions[0], | |
| 149 | + 'temp_file' => $sTmpFileName, | |
| 148 | 150 | 'metadata' => $this->aMetadata, |
| 149 | 151 | 'documenttype' => $this->oDocumentType, |
| 150 | 152 | ); |
| 153 | + $aOptions = array_merge($aOptions, $this->aOptions); | |
| 151 | 154 | $oDocument =& KTDocumentUtil::add($oFolder, utf8_encode(basename($sPath)), $this->oUser, $aOptions); |
| 152 | 155 | return $oDocument; |
| 153 | 156 | } | ... | ... |
lib/ktentity.inc
| ... | ... | @@ -7,32 +7,32 @@ |
| 7 | 7 | * KnowledgeTree Open Source Edition |
| 8 | 8 | * Document Management Made Simple |
| 9 | 9 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 10 | - * | |
| 10 | + * | |
| 11 | 11 | * This program is free software; you can redistribute it and/or modify it under |
| 12 | 12 | * the terms of the GNU General Public License version 3 as published by the |
| 13 | 13 | * Free Software Foundation. |
| 14 | - * | |
| 14 | + * | |
| 15 | 15 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 16 | 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 17 | 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 18 | 18 | * details. |
| 19 | - * | |
| 19 | + * | |
| 20 | 20 | * You should have received a copy of the GNU General Public License |
| 21 | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 22 | - * | |
| 22 | + * | |
| 23 | 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 24 | 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 25 | - * | |
| 25 | + * | |
| 26 | 26 | * The interactive user interfaces in modified source and object code versions |
| 27 | 27 | * of this program must display Appropriate Legal Notices, as required under |
| 28 | 28 | * Section 5 of the GNU General Public License version 3. |
| 29 | - * | |
| 29 | + * | |
| 30 | 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 31 | 31 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 32 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 33 | 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 34 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | - * copyright notice. | |
| 34 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | + * copyright notice. | |
| 36 | 36 | * Contributor( s): ______________________________________ |
| 37 | 37 | */ |
| 38 | 38 | |
| ... | ... | @@ -742,58 +742,65 @@ class KTEntityUtil { |
| 742 | 742 | // var_dump("Building proxy for $sClassName"); |
| 743 | 743 | $methods = get_class_methods($sClassName); |
| 744 | 744 | $allcode = array(); |
| 745 | + $allcode[] = sprintf('var $cacheGlobal = null;%s', "\n"); | |
| 746 | + | |
| 745 | 747 | foreach ($methods as $sMethod) { |
| 746 | - $code = sprintf('function %s() { $aArgs = func_get_args(); return $this->_callOnObject("%s", $aArgs); }%s', $sMethod, $sMethod, "\n"); | |
| 747 | - $allcode[] = $code; | |
| 748 | + if ($sMethod == 'getid') { | |
| 749 | + $code = sprintf('function getId() { return $this->iId; }'); | |
| 750 | + } else if ($sMethod == '_table' || $sMethod == 'update' ) { | |
| 751 | + $code = sprintf('function %s() { return parent::%s(); }', $sMethod, $sMethod); | |
| 752 | + } else if ($sMethod == 'get') { | |
| 753 | + $code = sprintf('function get($oId) { return $this->get(%s, $oid); }', $sClassName); | |
| 754 | + } else { | |
| 755 | + $code = sprintf('function %s() { $aArgs = func_get_args(); return $this->_callOnObject("%s", $aArgs); }%s', $sMethod, $sMethod, "\n"); | |
| 756 | + } | |
| 757 | + $allcode[] = $code; | |
| 748 | 758 | } |
| 749 | 759 | |
| 750 | 760 | $allcode[] = sprintf('function &_fetch() { |
| 751 | - if (!empty($GLOBALS["_OBJECTCACHE"]["%s"][$this->iId])) { | |
| 752 | - $oObject =& $GLOBALS["_OBJECTCACHE"]["%s"][$this->iId]; | |
| 761 | + if (!empty($this->cacheGlobal[$this->iId])) { | |
| 762 | + $oObject =& $this->cacheGlobal[$this->iId]; | |
| 763 | + return $oObject; | |
| 764 | + } | |
| 765 | + $oObject =new %s; | |
| 766 | + $res = $oObject->load($this->iId); | |
| 767 | + if (PEAR::isError($res)) { | |
| 768 | + return $res; | |
| 769 | + } | |
| 770 | + $this->cacheGlobal[$this->iId] =& $oObject; | |
| 753 | 771 | return $oObject; |
| 754 | - } | |
| 755 | - $oObject =new %s; | |
| 756 | - $res = $oObject->load($this->iId); | |
| 757 | - if (PEAR::isError($res)) { | |
| 758 | - return $res; | |
| 759 | - } | |
| 760 | - $GLOBALS["_OBJECTCACHE"]["%s"][$this->iId] =& $oObject; | |
| 761 | - return $oObject; | |
| 762 | - } | |
| 763 | - ', $sClassName, $sClassName, $sClassName, $sClassName); | |
| 772 | + }', $sClassName, $sClassName, $sClassName, $sClassName); | |
| 764 | 773 | |
| 765 | 774 | $allcode[] = sprintf('function _save(&$oObject) { |
| 766 | - $GLOBALS["_OBJECTCACHE"]["%s"][$this->iId] =& $oObject; | |
| 767 | - } | |
| 768 | - ', $sClassName); | |
| 775 | + $this->cacheGlobal[$this->iId] =& $oObject; | |
| 776 | + }', $sClassName); | |
| 769 | 777 | |
| 770 | 778 | $allcode[] = 'function &_callOnObject($sName, $aArgs) { |
| 771 | - $oObject =& $this->_fetch(); | |
| 772 | - if (PEAR::isError($oObject)) { | |
| 773 | - return $oObject; | |
| 774 | - } | |
| 775 | - /* */ | |
| 776 | - $res = call_user_func_array(array(&$oObject, $sName), $aArgs); | |
| 777 | - $this->_save($oObject); | |
| 778 | - return $res; | |
| 779 | - /* */ | |
| 779 | + $oObject =& $this->_fetch(); | |
| 780 | + if (PEAR::isError($oObject)) { | |
| 781 | + return $oObject; | |
| 782 | + } | |
| 783 | + /* */ | |
| 784 | + $res = call_user_func_array(array(&$oObject, $sName), $aArgs); | |
| 785 | + $this->cacheGlobal[$this->iId] =& $oObject; | |
| 786 | + return $res; | |
| 787 | + /* */ | |
| 780 | 788 | |
| 781 | - /* */ | |
| 782 | - $aExecArgs = array(); | |
| 783 | - $exec = \'$res =& $oObject->$sName(\'; | |
| 784 | - foreach (array_keys($aArgs) as $iKey) { | |
| 785 | - $aExecArgs[] = \'$aArgs[\' . $iKey . \']\'; | |
| 786 | - } | |
| 787 | - $exec .= join(", ", $aExecArgs); | |
| 788 | - $exec .= \');\'; | |
| 789 | - eval($exec); | |
| 790 | - $this->_save($oObject); | |
| 791 | - return $res; | |
| 792 | - /* */ | |
| 793 | - } | |
| 794 | - '; | |
| 789 | + /* */ | |
| 790 | + $aExecArgs = array(); | |
| 791 | + $exec = \'$res =& $oObject->$sName(\'; | |
| 792 | + foreach (array_keys($aArgs) as $iKey) { | |
| 793 | + $aExecArgs[] = \'$aArgs[\' . $iKey . \']\'; | |
| 794 | + } | |
| 795 | + $exec .= join(", ", $aExecArgs); | |
| 796 | + $exec .= \');\'; | |
| 797 | + eval($exec); | |
| 798 | + $this->cacheGlobal[$this->iId] =& $oObject; | |
| 799 | + return $res; | |
| 800 | + /* */ | |
| 801 | + }'; | |
| 795 | 802 | |
| 796 | - $allcode[] = sprintf('function %s ($iId) { $this->iId = $iId; }' . "\n", $sProxyClassName); | |
| 803 | + $allcode[] = sprintf('function %s ($iId) { $this->iId = $iId; $this->cacheGlobal =& $GLOBALS["_OBJECTCACHE"][%s]; }' . "\n", $sProxyClassName, $sClassName); | |
| 797 | 804 | |
| 798 | 805 | $gen = sprintf("class %s extends %s {\n", $sProxyClassName, $sClassName); |
| 799 | 806 | $gen .= " " . join("\n ", $allcode) . "\n"; | ... | ... |
lib/metadata/fieldsetregistry.inc.php
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | 3 | * $Id$ |
| 4 | - * | |
| 4 | + * | |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | */ |
| 36 | 36 | |
| 37 | -/* fun with adaptors. | |
| 37 | +/* fun with adaptors. | |
| 38 | 38 | * |
| 39 | 39 | * Each fieldset type needs to handle |
| 40 | 40 | * - widget generation |
| ... | ... | @@ -44,23 +44,23 @@ |
| 44 | 44 | * - fulltext generation |
| 45 | 45 | * - search widget/criteria |
| 46 | 46 | * |
| 47 | - * Very little of this is actually handled in this version. In fact, at the | |
| 48 | - * moment the entire thing is faked. This is done to make add/edit a little | |
| 47 | + * Very little of this is actually handled in this version. In fact, at the | |
| 48 | + * moment the entire thing is faked. This is done to make add/edit a little | |
| 49 | 49 | * more sane. |
| 50 | 50 | * |
| 51 | 51 | * In the long term, the "correct" approach here will be to make the actual |
| 52 | 52 | * KTFieldsetType a class, and to extend fieldset with a "config_array" and |
| 53 | - * "fieldset_type_namespace" params. | |
| 53 | + * "fieldset_type_namespace" params. | |
| 54 | 54 | * |
| 55 | 55 | * Comments and suggestions on this are welcome. |
| 56 | 56 | */ |
| 57 | - | |
| 57 | + | |
| 58 | 58 | require_once(KT_LIB_DIR . "/widgets/widgetfactory.inc.php"); |
| 59 | 59 | require_once(KT_LIB_DIR . "/validation/validatorfactory.inc.php"); |
| 60 | 60 | |
| 61 | 61 | class KTFieldsetRegistry { |
| 62 | 62 | var $fieldsettypes; |
| 63 | - | |
| 63 | + | |
| 64 | 64 | var $oVF; |
| 65 | 65 | var $oWF; |
| 66 | 66 | |
| ... | ... | @@ -70,11 +70,11 @@ class KTFieldsetRegistry { |
| 70 | 70 | } |
| 71 | 71 | return $GLOBALS['_KT_PLUGIN']['oKTFieldsetRegistry']; |
| 72 | 72 | } |
| 73 | - | |
| 73 | + | |
| 74 | 74 | function registerType($sClassname, $sNS, $sFile) { |
| 75 | 75 | // stub |
| 76 | 76 | } |
| 77 | - | |
| 77 | + | |
| 78 | 78 | function formElementsForFieldset($fieldsetOrType, $sContainerName, $oDocument = null) { |
| 79 | 79 | // we want to create: |
| 80 | 80 | // |
| ... | ... | @@ -82,32 +82,32 @@ class KTFieldsetRegistry { |
| 82 | 82 | // - widgets |
| 83 | 83 | // |
| 84 | 84 | // use $oDocument as a stub *if* its set. |
| 85 | - | |
| 85 | + | |
| 86 | 86 | } |
| 87 | 87 | |
| 88 | 88 | function widgetsForFieldset($fieldsetOrType, $sContainerName, $oDocument = null) { |
| 89 | 89 | // this is likely to be called repeatedly. |
| 90 | 90 | if (is_null($this->oWF)) { |
| 91 | - $this->oWF =& KTWidgetFactory::getSingleton(); | |
| 92 | - } | |
| 93 | - | |
| 91 | + $this->oWF =& KTWidgetFactory::getSingleton(); | |
| 92 | + } | |
| 93 | + | |
| 94 | 94 | // we're going to create one of two things, here: |
| 95 | 95 | // - conditional fieldset widget |
| 96 | 96 | // - a "Fieldset" widget |
| 97 | - | |
| 97 | + | |
| 98 | 98 | // FIXME delegate. |
| 99 | 99 | $oFieldset =& $fieldsetOrType; |
| 100 | 100 | if ($oFieldset->getIsConditional()) { |
| 101 | - return PEAR::raiseError(_kt("Conditional Fieldsets are not yet implemented")); | |
| 101 | + return PEAR::raiseError(_kt("Conditional Fieldsets are not yet implemented")); | |
| 102 | 102 | } else { |
| 103 | 103 | $widgets = array(); |
| 104 | 104 | $fields = $oFieldset->getFields(); |
| 105 | - | |
| 105 | + | |
| 106 | 106 | foreach ($fields as $oField) { |
| 107 | 107 | |
| 108 | - $fname = 'metadata_' . $oField->getId(); | |
| 108 | + $fname = 'metadata_' . $oField->getId(); | |
| 109 | 109 | $value = null; |
| 110 | - | |
| 110 | + | |
| 111 | 111 | // check if we had an old value |
| 112 | 112 | if (!is_null($oDocument)) { |
| 113 | 113 | $oFL = DocumentFieldLink::getByDocumentAndField($oDocument, $oField); |
| ... | ... | @@ -115,7 +115,7 @@ class KTFieldsetRegistry { |
| 115 | 115 | $value = $oFL->getValue(); |
| 116 | 116 | } |
| 117 | 117 | } |
| 118 | - | |
| 118 | + | |
| 119 | 119 | // we have to hack in support for the hardcoded types of fields |
| 120 | 120 | // handled by the "generic" widget. |
| 121 | 121 | // |
| ... | ... | @@ -150,7 +150,7 @@ class KTFieldsetRegistry { |
| 150 | 150 | 'id_method' => 'getName', |
| 151 | 151 | 'label_method' => 'getName', |
| 152 | 152 | 'unselected_label' => _kt("No selection."), |
| 153 | - 'simple_select' => false, | |
| 153 | + 'simple_select' => false, | |
| 154 | 154 | )); |
| 155 | 155 | } else if ($type == 'ktcore.fields.tree') { |
| 156 | 156 | $widgets[] = $this->oWF->get('ktcore.widgets.treemetadata', array( |
| ... | ... | @@ -164,7 +164,7 @@ class KTFieldsetRegistry { |
| 164 | 164 | )); |
| 165 | 165 | } |
| 166 | 166 | } |
| 167 | - | |
| 167 | + | |
| 168 | 168 | return array($this->oWF->get('ktcore.widgets.fieldset',array( |
| 169 | 169 | 'label' => $oFieldset->getName(), |
| 170 | 170 | 'description' => $oFieldset->getDescription(), |
| ... | ... | @@ -173,33 +173,36 @@ class KTFieldsetRegistry { |
| 173 | 173 | ))); |
| 174 | 174 | } |
| 175 | 175 | } |
| 176 | - | |
| 176 | + | |
| 177 | 177 | |
| 178 | 178 | function validatorsForFieldset($fieldsetOrType, $sContainerName, $oDocument = null, $bIncludeAuto = false) { |
| 179 | 179 | // this is likely to be called repeatedly. |
| 180 | 180 | if (is_null($this->oVF)) { |
| 181 | - $this->oVF =& KTValidatorFactory::getSingleton(); | |
| 182 | - } | |
| 183 | - | |
| 181 | + $this->oVF =& KTValidatorFactory::getSingleton(); | |
| 182 | + } | |
| 183 | + | |
| 184 | 184 | // FIXME delegate. |
| 185 | 185 | $oFieldset =& $fieldsetOrType; |
| 186 | 186 | if ($oFieldset->getIsConditional()) { |
| 187 | - return PEAR::raiseError(_kt("Conditional Fieldsets are not yet implemented")); | |
| 187 | + return PEAR::raiseError(_kt("Conditional Fieldsets are not yet implemented")); | |
| 188 | 188 | } else { |
| 189 | 189 | $validators = array(); |
| 190 | 190 | $fields = $oFieldset->getFields(); |
| 191 | - | |
| 191 | + | |
| 192 | 192 | if ($bIncludeAuto) { |
| 193 | 193 | // we need to do *all* validation |
| 194 | 194 | // since we may be used outside a form. |
| 195 | 195 | // |
| 196 | 196 | // to prevent code duplication, we cheat and get the autovalidators |
| 197 | 197 | // this makes add/edit forms marginally less efficient, but we'll deal. |
| 198 | - | |
| 198 | + | |
| 199 | 199 | $widgets = $this->widgetsForFieldset($oFieldset, $sContainerName, $sDocument); |
| 200 | 200 | $validators = kt_array_merge($validators, $widgets[0]->getValidators()); |
| 201 | 201 | } |
| 202 | - | |
| 202 | + | |
| 203 | + $config = KTConfig::getSingleton(); | |
| 204 | + $maxLength = $config->get('KnowledgeTree/maxMetadataLength',10240); | |
| 205 | + | |
| 203 | 206 | foreach ($fields as $oField) { |
| 204 | 207 | |
| 205 | 208 | $type = ''; |
| ... | ... | @@ -212,11 +215,12 @@ class KTFieldsetRegistry { |
| 212 | 215 | } else { |
| 213 | 216 | $type = 'ktcore.fields.string'; |
| 214 | 217 | } |
| 215 | - | |
| 218 | + | |
| 216 | 219 | $fname = 'metadata_' . $oField->getId(); |
| 217 | 220 | if ($type == 'ktcore.fields.string') { |
| 218 | 221 | $validators[] = $this->oVF->get('ktcore.validators.string',array( |
| 219 | 222 | 'test' => $fname, |
| 223 | + 'max_length'=>$maxLength, | |
| 220 | 224 | 'output' => $fname, |
| 221 | 225 | )); |
| 222 | 226 | } else if ($type == 'ktcore.fields.lookup') { |
| ... | ... | @@ -238,14 +242,14 @@ class KTFieldsetRegistry { |
| 238 | 242 | $validators[] = PEAR::raiseError(sprintf(_kt("Unable to deal with field: id %d"), $oField->getId())); |
| 239 | 243 | } |
| 240 | 244 | } |
| 241 | - | |
| 245 | + | |
| 242 | 246 | return array($this->oVF->get('ktcore.validators.fieldset',array( |
| 243 | 247 | 'test' => $sContainerName, |
| 244 | 248 | 'output' => $sContainerName, |
| 245 | 249 | 'validators' => $validators, |
| 246 | 250 | ))); |
| 247 | 251 | } |
| 248 | - } | |
| 252 | + } | |
| 249 | 253 | } |
| 250 | 254 | |
| 251 | 255 | ?> | ... | ... |
lib/permissions/permissionutil.inc.php
| ... | ... | @@ -196,15 +196,41 @@ class KTPermissionUtil { |
| 196 | 196 | $sWhere = 'permission_object_id = ?'; |
| 197 | 197 | $aParams = array($oPO->getID()); |
| 198 | 198 | $aFolders =& Folder::getList(array($sWhere, $aParams)); |
| 199 | + | |
| 200 | + // init once time those var for speeding up updates | |
| 201 | + $oChannel =& KTPermissionChannel::getSingleton(); | |
| 202 | + $aPermAssigns = KTPermissionAssignment::getByObjectMulti($oPO); | |
| 203 | + $aMapPermAllowed = array(); | |
| 204 | + foreach ($aPermAssigns as $oPermAssign) { | |
| 205 | + $oPermDescriptor = KTPermissionDescriptor::get($oPermAssign->getPermissionDescriptorID()); | |
| 206 | + $aGroupIDs = $oPermDescriptor->getGroups(); | |
| 207 | + $aUserIDs = array(); | |
| 208 | + $aRoleIDs = $oPermDescriptor->getRoles(); | |
| 209 | + $aAllowed = array( | |
| 210 | + 'group' => $aGroupIDs, | |
| 211 | + 'user' => $aUserIDs, | |
| 212 | + 'role' => $aRoleIDs, | |
| 213 | + ); | |
| 214 | + $aMapPermAllowed[$oPermAssign->getPermissionID()] = $aAllowed; | |
| 215 | + } | |
| 216 | + $aMapPermDesc = array(); | |
| 217 | + foreach ($aMapPermAllowed as $iPermissionId => $aAllowed) { | |
| 218 | + $oLookupPD = KTPermissionUtil::getOrCreateDescriptor($aAllowed); | |
| 219 | + $aMapPermDesc[$iPermissionId] = $oLookupPD->getID(); | |
| 220 | + } | |
| 221 | + | |
| 222 | + $oPermLookup = KTPermissionLookupAssignment::findOrCreateLookupByPermissionDescriptorMap($aMapPermDesc); | |
| 223 | + $aOptions = array('channel' => $oChannel, 'map_allowed' => $aMapPermAllowed, 'perm_lookup' => $oPermLookup); | |
| 224 | + | |
| 199 | 225 | if (!PEAR::isError($aFolders)) { |
| 200 | 226 | foreach ($aFolders as $oFolder) { |
| 201 | - KTPermissionUtil::updatePermissionLookup($oFolder); | |
| 227 | + KTPermissionUtil::updatePermissionLookup($oFolder, $aOptions); | |
| 202 | 228 | } |
| 203 | 229 | } |
| 204 | 230 | $aDocuments =& Document::getList(array($sWhere, $aParams)); |
| 205 | 231 | if (!PEAR::isError($aDocuments)) { |
| 206 | 232 | foreach ($aDocuments as $oDocument) { |
| 207 | - KTPermissionUtil::updatePermissionLookup($oDocument); | |
| 233 | + KTPermissionUtil::updatePermissionLookup($oDocument, $aOptions); | |
| 208 | 234 | } |
| 209 | 235 | } |
| 210 | 236 | } |
| ... | ... | @@ -248,18 +274,29 @@ class KTPermissionUtil { |
| 248 | 274 | * Update's the permission lookup on one folder or document, |
| 249 | 275 | * non-recursively. |
| 250 | 276 | */ |
| 251 | - function updatePermissionLookup(&$oFolderOrDocument) { | |
| 252 | - if (!is_a($oFolderOrDocument, 'Folder')) { | |
| 253 | - if (!is_a($oFolderOrDocument, 'Document')) { | |
| 254 | - if (!is_a($oFolderOrDocument, 'KTDocumentCore')) { | |
| 255 | - return ; // we occasionally get handed a PEAR::raiseError. Just ignore it. | |
| 256 | - } | |
| 257 | - } | |
| 258 | - } | |
| 259 | - | |
| 260 | - $oChannel =& KTPermissionChannel::getSingleton(); | |
| 261 | - if (is_a($oFolderOrDocument, 'Folder')) { | |
| 262 | - $msg = sprintf("Updating folder %s", join("/", $oFolderOrDocument->getPathArray())); | |
| 277 | + function updatePermissionLookup(&$oFolderOrDocument, $aOptions = null) { | |
| 278 | + $is_a_folder = is_a($oFolderOrDocument, 'Folder'); | |
| 279 | + $is_a_document = is_a($oFolderOrDocument, 'Document') || is_a($oFolderOrDocument, 'KTDocumentCore'); | |
| 280 | + | |
| 281 | + $oChannel = null; | |
| 282 | + $aMapPermAllowed = null; | |
| 283 | + $oPermLookup = null; | |
| 284 | + if (!is_null($aOptions)) { | |
| 285 | + $oChannel = $aOptions['channel']; | |
| 286 | + $aMapPermAllowed = $aOptions['map_allowed']; | |
| 287 | + $oPermLookup = $aOptions['perm_lookup']; | |
| 288 | + } | |
| 289 | + | |
| 290 | + if (!$is_a_folder && !$is_a_document) { | |
| 291 | + return ; // we occasionally get handed a PEAR::raiseError. Just ignore it. | |
| 292 | + } | |
| 293 | + | |
| 294 | + | |
| 295 | + if (is_null($oChannel)) { | |
| 296 | + $oChannel =& KTPermissionChannel::getSingleton(); | |
| 297 | + } | |
| 298 | + if ($is_a_folder) { | |
| 299 | + $msg = sprintf("Updating folder %s", join('/', $oFolderOrDocument->getPathArray())); | |
| 263 | 300 | } else { |
| 264 | 301 | if (is_a($oFolderOrDocument, 'Document')) { |
| 265 | 302 | $msg = sprintf("Updating document %s", $oFolderOrDocument->getName()); |
| ... | ... | @@ -273,23 +310,26 @@ class KTPermissionUtil { |
| 273 | 310 | if (empty($iPermissionObjectId)) { |
| 274 | 311 | return; |
| 275 | 312 | } |
| 276 | - $oPO = KTPermissionObject::get($iPermissionObjectId); | |
| 277 | - $aPAs = KTPermissionAssignment::getByObjectMulti($oPO); | |
| 278 | - $aMapPermAllowed = array(); | |
| 279 | - foreach ($aPAs as $oPA) { | |
| 280 | - $oPD = KTPermissionDescriptor::get($oPA->getPermissionDescriptorID()); | |
| 281 | - $aGroupIDs = $oPD->getGroups(); | |
| 282 | - $aUserIDs = array(); | |
| 283 | - $aRoleIDs = $oPD->getRoles(); | |
| 284 | - $aAllowed = array( | |
| 285 | - "group" => $aGroupIDs, | |
| 286 | - "user" => $aUserIDs, | |
| 287 | - "role" => $aRoleIDs, | |
| 288 | - ); | |
| 289 | - $aMapPermAllowed[$oPA->getPermissionID()] = $aAllowed; | |
| 290 | - } | |
| 291 | - | |
| 292 | - if (!is_a($oFolderOrDocument, 'Folder')) { | |
| 313 | + | |
| 314 | + if (is_null($aMapPermAllowed)) { | |
| 315 | + $oPO = KTPermissionObject::get($iPermissionObjectId); | |
| 316 | + $aPAs = KTPermissionAssignment::getByObjectMulti($oPO); | |
| 317 | + $aMapPermAllowed = array(); | |
| 318 | + foreach ($aPAs as $oPA) { | |
| 319 | + $oPD = KTPermissionDescriptor::get($oPA->getPermissionDescriptorID()); | |
| 320 | + $aGroupIDs = $oPD->getGroups(); | |
| 321 | + $aUserIDs = array(); | |
| 322 | + $aRoleIDs = $oPD->getRoles(); | |
| 323 | + $aAllowed = array( | |
| 324 | + 'group' => $aGroupIDs, | |
| 325 | + 'user' => $aUserIDs, | |
| 326 | + 'role' => $aRoleIDs, | |
| 327 | + ); | |
| 328 | + $aMapPermAllowed[$oPA->getPermissionID()] = $aAllowed; | |
| 329 | + } | |
| 330 | + } | |
| 331 | + | |
| 332 | + if (!$is_a_folder) { | |
| 293 | 333 | $aDynamicConditions = KTPermissionDynamicCondition::getByPermissionObject($oPO); |
| 294 | 334 | if (!PEAR::isError($aDynamicConditions)) { |
| 295 | 335 | foreach ($aDynamicConditions as $oDynamicCondition) { |
| ... | ... | @@ -299,7 +339,7 @@ class KTPermissionUtil { |
| 299 | 339 | $aPermissionIds = $oDynamicCondition->getAssignment(); |
| 300 | 340 | foreach ($aPermissionIds as $iPermissionId) { |
| 301 | 341 | $aCurrentAllowed = KTUtil::arrayGet($aMapPermAllowed, $iPermissionId, array()); |
| 302 | - $aCurrentAllowed["group"][] = $iGroupId; | |
| 342 | + $aCurrentAllowed['group'][] = $iGroupId; | |
| 303 | 343 | $aMapPermAllowed[$iPermissionId] = $aCurrentAllowed; |
| 304 | 344 | } |
| 305 | 345 | } |
| ... | ... | @@ -307,7 +347,7 @@ class KTPermissionUtil { |
| 307 | 347 | } |
| 308 | 348 | } |
| 309 | 349 | |
| 310 | - if (!is_a($oFolderOrDocument, 'Folder')) { | |
| 350 | + if (!$is_a_folder) { | |
| 311 | 351 | $oState = KTWorkflowUtil::getWorkflowStateForDocument($oFolderOrDocument); |
| 312 | 352 | if (!(PEAR::isError($oState) || is_null($oState) || ($oState == false))) { |
| 313 | 353 | $aWorkflowStatePermissionAssignments = KTWorkflowStatePermissionAssignment::getByState($oState); |
| ... | ... | @@ -320,9 +360,9 @@ class KTPermissionUtil { |
| 320 | 360 | $aUserIDs = array(); |
| 321 | 361 | $aRoleIDs = $oPD->getRoles(); |
| 322 | 362 | $aAllowed = array( |
| 323 | - "group" => $aGroupIDs, | |
| 324 | - "user" => $aUserIDs, | |
| 325 | - "role" => $aRoleIDs, | |
| 363 | + 'group' => $aGroupIDs, | |
| 364 | + 'user' => $aUserIDs, | |
| 365 | + 'role' => $aRoleIDs, | |
| 326 | 366 | ); |
| 327 | 367 | $aMapPermAllowed[$iPermissionId] = $aAllowed; |
| 328 | 368 | } |
| ... | ... | @@ -331,8 +371,11 @@ class KTPermissionUtil { |
| 331 | 371 | |
| 332 | 372 | // if we have roles: nearest folder. |
| 333 | 373 | $iRoleSourceFolder = null; |
| 334 | - if (is_a($oFolderOrDocument, 'KTDocumentCore') || is_a($oFolderOrDocument, 'Document')) { $iRoleSourceFolder = $oFolderOrDocument->getFolderID(); } | |
| 335 | - else { $iRoleSourceFolder = $oFolderOrDocument->getId(); } | |
| 374 | + if ($is_a_document) { | |
| 375 | + $iRoleSourceFolder = $oFolderOrDocument->getFolderID(); | |
| 376 | + }else { | |
| 377 | + $iRoleSourceFolder = $oFolderOrDocument->getId(); | |
| 378 | + } | |
| 336 | 379 | |
| 337 | 380 | // very minor perf win: map role_id (in context) to PD. |
| 338 | 381 | $_roleCache = array(); |
| ... | ... | @@ -350,7 +393,7 @@ class KTPermissionUtil { |
| 350 | 393 | } |
| 351 | 394 | if (!array_key_exists($iRoleId, $_roleCache)) { |
| 352 | 395 | $oRoleAllocation = null; |
| 353 | - if (is_a($oFolderOrDocument, 'KTDocumentCore') || is_a($oFolderOrDocument, 'Document')) { | |
| 396 | + if ($is_a_document) { | |
| 354 | 397 | $oRoleAllocation =& DocumentRoleAllocation::getAllocationsForDocumentAndRole($oFolderOrDocument->getId(), $iRoleId); |
| 355 | 398 | if (PEAR::isError($oRoleAllocation)) { $oRoleAllocation = null; } |
| 356 | 399 | } |
| ... | ... | @@ -387,14 +430,17 @@ class KTPermissionUtil { |
| 387 | 430 | */ |
| 388 | 431 | |
| 389 | 432 | |
| 390 | - $aMapPermDesc = array(); | |
| 391 | - foreach ($aMapPermAllowed as $iPermissionId => $aAllowed) { | |
| 392 | - $oLookupPD = KTPermissionUtil::getOrCreateDescriptor($aAllowed); | |
| 393 | - $aMapPermDesc[$iPermissionId] = $oLookupPD->getID(); | |
| 433 | + if (is_null($oPermLookup)) { | |
| 434 | + $aMapPermDesc = array(); | |
| 435 | + foreach ($aMapPermAllowed as $iPermissionId => $aAllowed) { | |
| 436 | + $oLookupPD = KTPermissionUtil::getOrCreateDescriptor($aAllowed); | |
| 437 | + $aMapPermDesc[$iPermissionId] = $oLookupPD->getID(); | |
| 438 | + } | |
| 439 | + | |
| 440 | + $oPermLookup = KTPermissionLookupAssignment::findOrCreateLookupByPermissionDescriptorMap($aMapPermDesc); | |
| 394 | 441 | } |
| 395 | 442 | |
| 396 | - $oPL = KTPermissionLookupAssignment::findOrCreateLookupByPermissionDescriptorMap($aMapPermDesc); | |
| 397 | - $oFolderOrDocument->setPermissionLookupID($oPL->getID()); | |
| 443 | + $oFolderOrDocument->setPermissionLookupID($oPermLookup->getID()); | |
| 398 | 444 | $oFolderOrDocument->update(); |
| 399 | 445 | } |
| 400 | 446 | // }}} | ... | ... |
lib/plugins/plugin.inc.php
| ... | ... | @@ -395,6 +395,9 @@ class KTPlugin { |
| 395 | 395 | $query = "SELECT * FROM plugin_helper h WHERE plugin = '{$this->sNamespace}'"; |
| 396 | 396 | $aPluginHelpers = DBUtil::getResultArray($query); |
| 397 | 397 | |
| 398 | + // Include any required resources, javascript files, etc | |
| 399 | + $this->run_setup(); | |
| 400 | + | |
| 398 | 401 | if(!empty($aPluginHelpers)){ |
| 399 | 402 | foreach ($aPluginHelpers as $plugin) { |
| 400 | 403 | $sName = $plugin['namespace']; |
| ... | ... | @@ -632,6 +635,10 @@ class KTPlugin { |
| 632 | 635 | return; |
| 633 | 636 | } |
| 634 | 637 | |
| 638 | + function run_setup() { | |
| 639 | + return; | |
| 640 | + } | |
| 641 | + | |
| 635 | 642 | function stripKtDir($sFilename) { |
| 636 | 643 | if (strpos($sFilename, KT_DIR) === 0 ||strpos($sFilename, realpath(KT_DIR)) === 0) { |
| 637 | 644 | return substr($sFilename, strlen(KT_DIR) + 1); | ... | ... |
lib/storage/ondiskhashedstoragemanager.inc.php
| ... | ... | @@ -44,7 +44,14 @@ require_once(KT_LIB_DIR . '/documentmanagement/documentcontentversion.inc.php'); |
| 44 | 44 | require_once(KT_LIB_DIR . '/filelike/fsfilelike.inc.php'); |
| 45 | 45 | |
| 46 | 46 | class KTOnDiskHashedStorageManager extends KTStorageManager { |
| 47 | - function upload(&$oDocument, $sTmpFilePath) { | |
| 47 | + function upload(&$oDocument, $sTmpFilePath, $aOptions = null) { | |
| 48 | + | |
| 49 | + if (!file_exists($sTmpFilePath)) { | |
| 50 | + | |
| 51 | + return new PEAR_Error("$sTmpFilePath does not exist so we can't copy it into the repository! Options: " . print_r($aOptions,true) ); | |
| 52 | + } | |
| 53 | + | |
| 54 | + | |
| 48 | 55 | $oConfig =& KTConfig::getSingleton(); |
| 49 | 56 | $sStoragePath = $this->generateStoragePath($oDocument); |
| 50 | 57 | if (PEAR::isError($sStoragePath)) { |
| ... | ... | @@ -60,7 +67,7 @@ class KTOnDiskHashedStorageManager extends KTStorageManager { |
| 60 | 67 | if (OS_WINDOWS) { |
| 61 | 68 | $sDocumentFileSystemPath = str_replace('\\','/',$sDocumentFileSystemPath); |
| 62 | 69 | } |
| 63 | - if ($this->writeToFile($sTmpFilePath, $sDocumentFileSystemPath)) { | |
| 70 | + if ($this->writeToFile($sTmpFilePath, $sDocumentFileSystemPath, $aOptions)) { | |
| 64 | 71 | $end_time = KTUtil::getBenchmarkTime(); |
| 65 | 72 | global $default; |
| 66 | 73 | $default->log->info(sprintf("Uploaded %d byte file in %.3f seconds", $file_size, $end_time - $start_time)); |
| ... | ... | @@ -70,10 +77,10 @@ class KTOnDiskHashedStorageManager extends KTStorageManager { |
| 70 | 77 | if (file_exists($sDocumentFileSystemPath)) { |
| 71 | 78 | return true; |
| 72 | 79 | } else { |
| 73 | - return false; | |
| 80 | + return new PEAR_Error("$sDocumentFileSystemPath does not exist after write to storage path. Options: " . print_r($aOptions,true)); | |
| 74 | 81 | } |
| 75 | 82 | } else { |
| 76 | - return false; | |
| 83 | + return new PEAR_Error("Could not write $sTmpFilePath to $sDocumentFileSystemPath with options: " . print_r($aOptions,true)); | |
| 77 | 84 | } |
| 78 | 85 | } |
| 79 | 86 | |
| ... | ... | @@ -100,8 +107,11 @@ class KTOnDiskHashedStorageManager extends KTStorageManager { |
| 100 | 107 | return false; |
| 101 | 108 | } |
| 102 | 109 | |
| 103 | - function writeToFile($sTmpFilePath, $sDocumentFileSystemPath) { | |
| 110 | + function writeToFile($sTmpFilePath, $sDocumentFileSystemPath, $aOptions = null) { | |
| 104 | 111 | // Make it easy to write compressed/encrypted storage |
| 112 | + if(isset($aOptions['copy_upload']) && ($aOptions['copy_upload'] == 'true')) { | |
| 113 | + return copy($sTmpFilePath, $sDocumentFileSystemPath); | |
| 114 | + } | |
| 105 | 115 | |
| 106 | 116 | if (is_uploaded_file($sTmpFilePath)) |
| 107 | 117 | return move_uploaded_file($sTmpFilePath, $sDocumentFileSystemPath); | ... | ... |
lib/templating/kt3template.inc.php
| ... | ... | @@ -130,7 +130,7 @@ class KTPage { |
| 130 | 130 | $aJS[] = 'thirdpartyjs/MochiKit/MochiKitPacked.js'; |
| 131 | 131 | $aJS[] = 'resources/js/kt-utility.js'; |
| 132 | 132 | $aJS[] = 'presentation/i18nJavascript.php'; |
| 133 | - $aJS[] = 'thirdpartyjs/curvycorners/rounded_corners_lite.inc.js'; | |
| 133 | + $aJS[] = 'thirdpartyjs/curvycorners/rounded_corners.inc.js'; | |
| 134 | 134 | $aJS[] = 'resources/js/loader.js'; |
| 135 | 135 | $aJS[] = 'thirdpartyjs/yui/tools/tools.js'; |
| 136 | 136 | $aJS[] = 'thirdpartyjs/yui/connection/connection.js'; | ... | ... |
lib/triggers/triggerregistry.inc.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | * |
| 36 | 36 | */ |
| ... | ... | @@ -78,7 +78,7 @@ class KTTriggerRegistry { |
| 78 | 78 | if (!class_exists($trigger[0])) |
| 79 | 79 | { |
| 80 | 80 | global $default; |
| 81 | - $defailt->log->error(sprintf(_kt('Cannot locate trigger class %s for action %s slot %s.'), $trigger[0], $action, $slot)); | |
| 81 | + $default->log->error(sprintf(_kt('Cannot locate trigger class %s for action %s slot %s.'), $trigger[0], $action, $slot)); | |
| 82 | 82 | } |
| 83 | 83 | } |
| 84 | 84 | } | ... | ... |
lib/upgrades/UpgradeFunctions.inc.php
| ... | ... | @@ -1011,6 +1011,7 @@ class UpgradeFunctions { |
| 1011 | 1011 | $ini->addItem('clientToolPolicies', 'captureReasonsCancelCheckout', 'true'); |
| 1012 | 1012 | $ini->addItem('clientToolPolicies', 'captureReasonsCopyInKT', 'true'); |
| 1013 | 1013 | $ini->addItem('clientToolPolicies', 'captureReasonsMoveInKT', 'true'); |
| 1014 | + $ini->addItem('clientToolPolicies', 'allowRememberPassword', 'true'); | |
| 1014 | 1015 | |
| 1015 | 1016 | // DiskUsage Section |
| 1016 | 1017 | $ini->addItem('DiskUsage', 'warningThreshold', '10', "When free space in a mount point is less than this percentage,\r\n; the disk usage dashlet will highlight the mount in ORANGE", "settings for the Disk Usage dashlet"); | ... | ... |
lib/users/User.inc
| ... | ... | @@ -7,32 +7,32 @@ |
| 7 | 7 | * KnowledgeTree Open Source Edition |
| 8 | 8 | * Document Management Made Simple |
| 9 | 9 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 10 | - * | |
| 10 | + * | |
| 11 | 11 | * This program is free software; you can redistribute it and/or modify it under |
| 12 | 12 | * the terms of the GNU General Public License version 3 as published by the |
| 13 | 13 | * Free Software Foundation. |
| 14 | - * | |
| 14 | + * | |
| 15 | 15 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 16 | 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 17 | 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 18 | 18 | * details. |
| 19 | - * | |
| 19 | + * | |
| 20 | 20 | * You should have received a copy of the GNU General Public License |
| 21 | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 22 | - * | |
| 22 | + * | |
| 23 | 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 24 | 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 25 | - * | |
| 25 | + * | |
| 26 | 26 | * The interactive user interfaces in modified source and object code versions |
| 27 | 27 | * of this program must display Appropriate Legal Notices, as required under |
| 28 | 28 | * Section 5 of the GNU General Public License version 3. |
| 29 | - * | |
| 29 | + * | |
| 30 | 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 31 | 31 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 32 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 33 | 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 34 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | - * copyright notice. | |
| 34 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | + * copyright notice. | |
| 36 | 36 | * Contributor( s): ______________________________________ |
| 37 | 37 | */ |
| 38 | 38 | |
| ... | ... | @@ -455,4 +455,26 @@ class User extends KTEntity { |
| 455 | 455 | return; |
| 456 | 456 | |
| 457 | 457 | } |
| 458 | + | |
| 459 | + function hasPermission(&$oPermissionDescriptor) { | |
| 460 | + $pdgTable = KTUtil::getTableName('permission_descriptor_groups'); | |
| 461 | + global $default; | |
| 462 | + $uglTable = $default->users_groups_table; | |
| 463 | + | |
| 464 | + $sQuery = "SELECT COUNT(*) AS num FROM $pdgTable INNER JOIN " . | |
| 465 | + "$uglTable ON $uglTable.group_id=$pdgTable.group_id" . | |
| 466 | + "WHERE $pdgTable.descriptor_id = ? AND " . | |
| 467 | + "$uglTable.user_id=?"; | |
| 468 | + $aParams = array($oPermissionDescriptor->getID()); | |
| 469 | + $aParams[] = $this->$iId; | |
| 470 | + $res = DBUtil::getOneResultKey(array($sQuery, $aParams), 'num'); | |
| 471 | + if (PEAR::isError($res)) { | |
| 472 | + return $res; | |
| 473 | + } | |
| 474 | + if ((int)$res === 0) { | |
| 475 | + return false; | |
| 476 | + } | |
| 477 | + return true; | |
| 478 | + } | |
| 458 | 479 | } |
| 480 | +?> | |
| 459 | 481 | \ No newline at end of file | ... | ... |
lib/util/ktutil.inc
| ... | ... | @@ -44,8 +44,10 @@ class KTUtil { |
| 44 | 44 | const HOUR_IN_SECS = 3600; |
| 45 | 45 | const DAY_IN_SECS = 86400; |
| 46 | 46 | const KB = 1024; |
| 47 | - const MB = 1048576; | |
| 48 | - const GB = 1073741824; | |
| 47 | + const MB = 1048576; | |
| 48 | + const GB = 1073741824; | |
| 49 | + const TB = 1099511627776; | |
| 50 | + const PB = 1125899906842624; | |
| 49 | 51 | |
| 50 | 52 | static function computePeriod($diff, $suffix = null, $returnArray=false) |
| 51 | 53 | { |
| ... | ... | @@ -89,21 +91,29 @@ class KTUtil { |
| 89 | 91 | { |
| 90 | 92 | $filesize = (int) $filesize; |
| 91 | 93 | |
| 92 | - if ($filesize >= KTutil::GB) | |
| 94 | + if ($filesize >= KTUtil::PB) | |
| 93 | 95 | { |
| 94 | - return number_format($filesize / KTutil::GB, 2, '.',',') . _kt('GB'); | |
| 96 | + return number_format($filesize / KTUtil::PB, 2, '.',',') . _kt('PB'); | |
| 95 | 97 | } |
| 96 | - elseif ($filesize >= KTutil::MB) | |
| 98 | + elseif ($filesize >= KTUtil::TB) | |
| 97 | 99 | { |
| 98 | - return number_format($filesize / KTutil::MB, 2, '.',',') . _kt('MB'); | |
| 100 | + return number_format($filesize / KTUtil::TB, 2, '.',',') . _kt('TB'); | |
| 99 | 101 | } |
| 100 | - elseif ($filesize >= KTutil::KB) | |
| 102 | + elseif ($filesize >= KTUtil::GB) | |
| 101 | 103 | { |
| 102 | - return number_format($filesize / KTutil::KB, 2, '.',',') . _kt('KB'); | |
| 104 | + return number_format($filesize / KTUtil::GB, 2, '.',',') . _kt('GB'); | |
| 105 | + } | |
| 106 | + elseif ($filesize >= KTUtil::MB) | |
| 107 | + { | |
| 108 | + return number_format($filesize / KTUtil::MB, 2, '.',',') . _kt('MB'); | |
| 109 | + } | |
| 110 | + elseif ($filesize >= KTUtil::KB) | |
| 111 | + { | |
| 112 | + return number_format($filesize / KTUtil::KB, 2, '.',',') . _kt('KB'); | |
| 103 | 113 | } |
| 104 | 114 | else |
| 105 | 115 | { |
| 106 | - return $filesize . _kt('b'); | |
| 116 | + return $filesize . _kt('B'); | |
| 107 | 117 | } |
| 108 | 118 | } |
| 109 | 119 | ... | ... |
lib/util/sanitize.inc
| ... | ... | @@ -7,32 +7,32 @@ |
| 7 | 7 | * KnowledgeTree Open Source Edition |
| 8 | 8 | * Document Management Made Simple |
| 9 | 9 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 10 | - * | |
| 10 | + * | |
| 11 | 11 | * This program is free software; you can redistribute it and/or modify it under |
| 12 | 12 | * the terms of the GNU General Public License version 3 as published by the |
| 13 | 13 | * Free Software Foundation. |
| 14 | - * | |
| 14 | + * | |
| 15 | 15 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 16 | 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 17 | 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 18 | 18 | * details. |
| 19 | - * | |
| 19 | + * | |
| 20 | 20 | * You should have received a copy of the GNU General Public License |
| 21 | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 22 | - * | |
| 22 | + * | |
| 23 | 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 24 | 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 25 | - * | |
| 25 | + * | |
| 26 | 26 | * The interactive user interfaces in modified source and object code versions |
| 27 | 27 | * of this program must display Appropriate Legal Notices, as required under |
| 28 | 28 | * Section 5 of the GNU General Public License version 3. |
| 29 | - * | |
| 29 | + * | |
| 30 | 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 31 | 31 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 32 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 33 | 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 34 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | - * copyright notice. | |
| 34 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 35 | + * copyright notice. | |
| 36 | 36 | * Contributor( s): ______________________________________ |
| 37 | 37 | */ |
| 38 | 38 | |
| ... | ... | @@ -57,13 +57,13 @@ function sanitize($string) { |
| 57 | 57 | } |
| 58 | 58 | |
| 59 | 59 | function sanitizeForSQL($string, $min='', $max='') { |
| 60 | - | |
| 60 | + | |
| 61 | 61 | $string = trim($string); |
| 62 | 62 | if(get_magic_quotes_gpc()) $string = stripslashes($string); |
| 63 | - | |
| 63 | + | |
| 64 | 64 | $len = strlen($string); |
| 65 | 65 | if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max))) return false; |
| 66 | - | |
| 66 | + | |
| 67 | 67 | if(function_exists("mysql_real_escape_string")) { |
| 68 | 68 | return mysql_real_escape_string($string); |
| 69 | 69 | } else { |
| ... | ... | @@ -71,12 +71,10 @@ function sanitizeForSQL($string, $min='', $max='') { |
| 71 | 71 | } |
| 72 | 72 | } |
| 73 | 73 | |
| 74 | -function sanitizeForSQLtoHTML($string, $min='', $max='') { | |
| 75 | - | |
| 76 | - $string = str_ireplace("\r", '', $string); | |
| 77 | - $string = str_ireplace("\n", '', $string); | |
| 78 | - return stripslashes(trim($string)); | |
| 79 | - | |
| 74 | +function sanitizeForSQLtoHTML($string, $min='', $max='') | |
| 75 | +{ | |
| 76 | + $string = str_replace(array("\r","\n"), array('',''), $string); | |
| 77 | + return $string; | |
| 80 | 78 | } |
| 81 | 79 | |
| 82 | 80 | function sanitizeForHTML($string, $min='', $max='') |
| ... | ... | @@ -86,7 +84,7 @@ function sanitizeForHTML($string, $min='', $max='') |
| 86 | 84 | |
| 87 | 85 | $len = strlen($string); |
| 88 | 86 | if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max))) return false; |
| 89 | - | |
| 87 | + | |
| 90 | 88 | if(function_exists("htmlspecialchars")) { |
| 91 | 89 | return htmlspecialchars($string); |
| 92 | 90 | } else { |
| ... | ... | @@ -123,8 +121,8 @@ function sanitizeForSYSTEM($string, $min='', $max='') |
| 123 | 121 | |
| 124 | 122 | $len = strlen($string); |
| 125 | 123 | if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max))) return false; |
| 126 | - | |
| 127 | - $pattern = '/( ;|\||`|>|<|&|^|"|'."\n|\r|'".'|{|}|[|]|\)|\( )/i'; | |
| 124 | + | |
| 125 | + $pattern = '/( ;|\||`|>|<|&|^|"|'."\n|\r|'".'|{|}|[|]|\)|\( )/i'; | |
| 128 | 126 | $string = preg_replace( $pattern, '', $string); |
| 129 | 127 | return '"'.preg_replace( '/\$/', '\\\$', $string).'"'; |
| 130 | 128 | } | ... | ... |
lib/validation/customerrorhandler.php
0 โ 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * | |
| 4 | + * The contents of this file are subject to the KnowledgeTree Public | |
| 5 | + * License Version 1.1.2 ("License"); You may not use this file except in | |
| 6 | + * compliance with the License. You may obtain a copy of the License at | |
| 7 | + * http://www.knowledgetree.com/KPL | |
| 8 | + * | |
| 9 | + * Software distributed under the License is distributed on an "AS IS" | |
| 10 | + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. | |
| 11 | + * See the License for the specific language governing rights and | |
| 12 | + * limitations under the License. | |
| 13 | + * | |
| 14 | + * All copies of the Covered Code must include on each user interface screen: | |
| 15 | + * (i) the "Powered by KnowledgeTree" logo and | |
| 16 | + * (ii) the KnowledgeTree copyright notice | |
| 17 | + * in the same form as they appear in the distribution. See the License for | |
| 18 | + * requirements. | |
| 19 | + * | |
| 20 | + * The Original Code is: KnowledgeTree Open Source | |
| 21 | + * | |
| 22 | + * The Initial Developer of the Original Code is The Jam Warehouse Software | |
| 23 | + * (Pty) Ltd, trading as KnowledgeTree. | |
| 24 | + * Portions created by The Jam Warehouse Software (Pty) Ltd are Copyright | |
| 25 | + * (C) 2007 The Jam Warehouse Software (Pty) Ltd; | |
| 26 | + * All Rights Reserved. | |
| 27 | + * Contributor( s): ______________________________________ | |
| 28 | + * | |
| 29 | + */ | |
| 30 | + require_once('config/dmsDefaults.php'); | |
| 31 | + require_once(KT_LIB_DIR.'/Log.inc'); | |
| 32 | + | |
| 33 | + class KTCustomErrorHandler | |
| 34 | + { | |
| 35 | + // {{{ initCustomErrorHandler() | |
| 36 | + function initCustomErrorHandler () | |
| 37 | + { | |
| 38 | + return $oCustomErrorHandler =& new KTCustomErrorHandler; | |
| 39 | + } | |
| 40 | + // }}} | |
| 41 | + | |
| 42 | + // {{{ logError() | |
| 43 | + function logError($oError) | |
| 44 | + | |
| 45 | + { | |
| 46 | + global $default; | |
| 47 | + | |
| 48 | + $sErrorType = ''; | |
| 49 | + if(substr($oError->toString(),1,2) == 'db') | |
| 50 | + { | |
| 51 | + $sErrorType = 'database_error'; | |
| 52 | + } | |
| 53 | + else | |
| 54 | + { | |
| 55 | + $sErrorType = 'unknown_error'; | |
| 56 | + } | |
| 57 | + | |
| 58 | + | |
| 59 | + $default->log->error($oError->toString()); | |
| 60 | + | |
| 61 | + } | |
| 62 | + } | |
| 63 | + ?> | |
| 0 | 64 | \ No newline at end of file | ... | ... |
lib/validation/customerrorviewer.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * | |
| 4 | + * The contents of this file are subject to the KnowledgeTree Public | |
| 5 | + * License Version 1.1.2 ("License"); You may not use this file except in | |
| 6 | + * compliance with the License. You may obtain a copy of the License at | |
| 7 | + * http://www.knowledgetree.com/KPL | |
| 8 | + * | |
| 9 | + * Software distributed under the License is distributed on an "AS IS" | |
| 10 | + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. | |
| 11 | + * See the License for the specific language governing rights and | |
| 12 | + * limitations under the License. | |
| 13 | + * | |
| 14 | + * All copies of the Covered Code must include on each user interface screen: | |
| 15 | + * (i) the "Powered by KnowledgeTree" logo and | |
| 16 | + * (ii) the KnowledgeTree copyright notice | |
| 17 | + * in the same form as they appear in the distribution. See the License for | |
| 18 | + * requirements. | |
| 19 | + * | |
| 20 | + * The Original Code is: KnowledgeTree Open Source | |
| 21 | + * | |
| 22 | + * The Initial Developer of the Original Code is The Jam Warehouse Software | |
| 23 | + * (Pty) Ltd, trading as KnowledgeTree. | |
| 24 | + * Portions created by The Jam Warehouse Software (Pty) Ltd are Copyright | |
| 25 | + * (C) 2007 The Jam Warehouse Software (Pty) Ltd; | |
| 26 | + * All Rights Reserved. | |
| 27 | + * Contributor( s): ______________________________________ | |
| 28 | + * | |
| 29 | + */ | |
| 30 | + require_once(KT_LIB_DIR.'/validation/customerrorhandler.php'); | |
| 31 | + | |
| 32 | + class KTCustomErrorViewer | |
| 33 | + { | |
| 34 | + // {{{ initCustomErrorViewer() | |
| 35 | + function initCustomErrorViewer() | |
| 36 | + { | |
| 37 | + return $oCustomViewer =& new KTCustomErrorViewer; | |
| 38 | + } | |
| 39 | + //}}} | |
| 40 | + | |
| 41 | + //{{{ getCustomErrorConfigSetting() | |
| 42 | + function getCustomErrorConfigSetting() | |
| 43 | + { | |
| 44 | + $oKTConfig =& KTConfig::getSingleton(); | |
| 45 | + $sCustomErrorCheck = $oKTConfig->get('CustomErrorMessages/customerrormessages'); | |
| 46 | + return $sCustomErrorCheck; | |
| 47 | + } | |
| 48 | + //}}} | |
| 49 | + | |
| 50 | + //{{{ getCustomErrorHandlerSetting() | |
| 51 | + function getCustomErrorHandlerSetting() | |
| 52 | + { | |
| 53 | + $oKTConfig =& KTConfig::getSingleton(); | |
| 54 | + $sCustomErrorCheck = $oKTConfig->get('CustomErrorMessages/customerrorhandler'); | |
| 55 | + return $sCustomErrorCheck; | |
| 56 | + } | |
| 57 | + //}}} | |
| 58 | + | |
| 59 | + // {{{ getCustomErrorRedirectPage() | |
| 60 | + function getCustomErrorRedirectPage () | |
| 61 | + { | |
| 62 | + $oKTErrorConfig =& KTConfig::getSingleton(); | |
| 63 | + $sCustomErrorPage = $oKTErrorConfig->get('CustomErrorMessages/customerrorpagepath'); | |
| 64 | + | |
| 65 | + //if a filname is specified in the config.ini file make it into a url | |
| 66 | + if (substr($sCustomErrorPage, 0, 4) != 'http') | |
| 67 | + { | |
| 68 | + | |
| 69 | + $sCustomErrorPage = 'http://'.$_SERVER['HTTP_HOST'].'/'.$sCustomErrorPage; | |
| 70 | + | |
| 71 | + } | |
| 72 | + | |
| 73 | + //checking if file exists | |
| 74 | + //curl options will return the page header, we can then check for an http error | |
| 75 | + $CurlSession = curl_init(); | |
| 76 | + curl_setopt($CurlSession, CURLOPT_URL, $sCustomErrorPage); | |
| 77 | + curl_setopt($CurlSession, CURLOPT_HEADER, true); | |
| 78 | + curl_setopt($CurlSession, CURLOPT_NOBODY, true); | |
| 79 | + curl_setopt($CurlSession, CURLOPT_RETURNTRANSFER, true); | |
| 80 | + $data = curl_exec($CurlSession); | |
| 81 | + curl_close($CurlSession); | |
| 82 | + preg_match("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); | |
| 83 | + | |
| 84 | + //checking for http error - if the retunr code isn't 200 then we have an error | |
| 85 | + //on an error we return 0 | |
| 86 | + if ($matches[1] != '200') | |
| 87 | + { | |
| 88 | + //if file does not exist return error code of 0 | |
| 89 | + return '0'; | |
| 90 | + } | |
| 91 | + else | |
| 92 | + { | |
| 93 | + //if file exists return error page address | |
| 94 | + return $sCustomErrorPage; | |
| 95 | + | |
| 96 | + } | |
| 97 | + } | |
| 98 | + // }}} | |
| 99 | + | |
| 100 | + // {{{ customErrorPageRedirect() | |
| 101 | + function doCustomErrorPageRedirect($CustomErrorPage, $oError = null) | |
| 102 | + { | |
| 103 | + $sErrorMessage = ''; | |
| 104 | + if($oError != null) | |
| 105 | + { | |
| 106 | + //call error handler | |
| 107 | + | |
| 108 | + $aErrorMessage = array (); | |
| 109 | + $aErrorMessage['Error_MessageOne'] = $oError->getMessage(); | |
| 110 | + $aErrorMessage['Error_MessageTwo'] = $oError->getUserInfo(); | |
| 111 | + //echo '<pre>'; | |
| 112 | + //print_r($aErrorMessage); | |
| 113 | + //echo '</pre>'; | |
| 114 | + //exit; | |
| 115 | + $customErrorHandler = KTCustomErrorHandler::initCustomErrorHandler(); | |
| 116 | + $customErrorHandler->logError($oError); | |
| 117 | + } | |
| 118 | + | |
| 119 | + $ErrorPageCurlSession = curl_init($CustomErrorPage); | |
| 120 | + //curl_setopt($ErrorPageCurlSession, CURLOPT_SSL_VERIFYPEER, false); | |
| 121 | + curl_setopt($ErrorPageCurlSession, CURLOPT_POST, true); | |
| 122 | + curl_setopt($ErrorPageCurlSession, CURLOPT_POSTFIELDS, $aErrorMessage); | |
| 123 | + $ErrorPageSent = curl_exec($ErrorPageCurlSession); | |
| 124 | + curl_close($ErrorPageCurlSession); | |
| 125 | + | |
| 126 | + } | |
| 127 | + // }}} | |
| 128 | + } | |
| 129 | + ?> | ... | ... |
lib/widgets/fieldsetDisplay.inc.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | * |
| 36 | 36 | */ |
| ... | ... | @@ -45,20 +45,20 @@ |
| 45 | 45 | * "document_id" => $iDocumentId |
| 46 | 46 | * |
| 47 | 47 | */ |
| 48 | - | |
| 48 | + | |
| 49 | 49 | // boilerplate |
| 50 | -require_once(KT_LIB_DIR . "/templating/templating.inc.php"); | |
| 51 | -require_once(KT_LIB_DIR . "/database/dbutil.inc"); | |
| 50 | +require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | |
| 51 | +require_once(KT_LIB_DIR . '/database/dbutil.inc'); | |
| 52 | 52 | |
| 53 | -require_once(KT_LIB_DIR . "/documentmanagement/MDTree.inc"); // :( | |
| 53 | +require_once(KT_LIB_DIR . '/documentmanagement/MDTree.inc'); // :( | |
| 54 | 54 | |
| 55 | 55 | |
| 56 | 56 | |
| 57 | 57 | // data acquisition |
| 58 | -require_once(KT_LIB_DIR . "/users/User.inc"); | |
| 58 | +require_once(KT_LIB_DIR . '/users/User.inc'); | |
| 59 | 59 | require_once(KT_LIB_DIR . '/documentmanagement/MetaData.inc'); |
| 60 | -require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php"); | |
| 61 | -require_once(KT_LIB_DIR . "/widgets/fieldWidgets.php"); | |
| 60 | +require_once(KT_LIB_DIR . '/widgets/FieldsetDisplayRegistry.inc.php'); | |
| 61 | +require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php'); | |
| 62 | 62 | |
| 63 | 63 | |
| 64 | 64 | /* it may be useful to move this to a factory, eventually? */ |
| ... | ... | @@ -77,9 +77,9 @@ function getWidgetForMetadataField($field, $current_value, $page, $errors = null |
| 77 | 77 | if ($errors === null) { |
| 78 | 78 | $fieldErrors = array(); |
| 79 | 79 | } else { |
| 80 | - $fieldErrors = $errors; | |
| 80 | + $fieldErrors = $errors; | |
| 81 | 81 | } |
| 82 | - | |
| 82 | + | |
| 83 | 83 | |
| 84 | 84 | // now we need to break, based on a few aspects of the oField (DocumentField) |
| 85 | 85 | if ($field->getHasLookup()) { |
| ... | ... | @@ -90,34 +90,47 @@ function getWidgetForMetadataField($field, $current_value, $page, $errors = null |
| 90 | 90 | // extract the lookup. |
| 91 | 91 | if ($vocab === null) { // allow override |
| 92 | 92 | $lookups = MetaData::getEnabledByDocumentField($field); |
| 93 | - $fieldOptions["vocab"] = array(); // FIXME handle lookups | |
| 94 | - $fieldOptions['vocab'][''] = _kt('Select a value'); | |
| 93 | + $fieldOptions['vocab'] = array(); // FIXME handle lookups | |
| 94 | + $fieldOptions['vocab'][''] = _kt('Select a value'); | |
| 95 | 95 | foreach ($lookups as $md) { |
| 96 | - $fieldOptions["vocab"][$md->getName()] = $md->getName(); | |
| 96 | + $fieldOptions['vocab'][$md->getName()] = $md->getName(); | |
| 97 | 97 | } |
| 98 | 98 | } else { |
| 99 | - $fieldOptions["vocab"] = $vocab; | |
| 99 | + $fieldOptions['vocab'] = $vocab; | |
| 100 | 100 | } |
| 101 | - | |
| 102 | - $oField = new KTLookupWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); | |
| 101 | + | |
| 102 | + $oField = new KTLookupWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); | |
| 103 | 103 | } else { |
| 104 | 104 | // FIXME vocab's are _not_ supported for tree-inputs. this means conditional-tree-widgets are not unsupported. |
| 105 | - | |
| 105 | + | |
| 106 | 106 | // for trees, we are currently brutal. |
| 107 | 107 | $fieldTree = new MDTree(); |
| 108 | 108 | $fieldTree->buildForField($field->getId()); |
| 109 | 109 | $fieldTree->setActiveItem($current_value); |
| 110 | 110 | $fieldOptions['tree'] = $fieldTree->_evilTreeRenderer($fieldTree, $fieldName); |
| 111 | - | |
| 112 | - $oField = new KTTreeWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); | |
| 111 | + | |
| 112 | + $oField = new KTTreeWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); | |
| 113 | 113 | } |
| 114 | 114 | } else { |
| 115 | - $oField = new KTBaseWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); | |
| 115 | + $oField = new KTBaseWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); | |
| 116 | 116 | } |
| 117 | 117 | |
| 118 | 118 | return $oField; |
| 119 | 119 | } |
| 120 | 120 | |
| 121 | +/** | |
| 122 | + * Compare the fields within a fieldset for alphabetising. | |
| 123 | + * | |
| 124 | + * @param object $a | |
| 125 | + * @param object $b | |
| 126 | + * @return integer | |
| 127 | + */ | |
| 128 | +function compareFieldSetField($a, $b) | |
| 129 | +{ | |
| 130 | + if ($a['field']->getName() == $b['field']->getName()) return 0; | |
| 131 | + if ($a['field']->getName() < $b['field']->getName()) return -1; | |
| 132 | + return 1; | |
| 133 | +} | |
| 121 | 134 | |
| 122 | 135 | // FIXME need to establish some kind of api to pass in i18n information. |
| 123 | 136 | class KTFieldsetDisplay { |
| ... | ... | @@ -126,33 +139,33 @@ class KTFieldsetDisplay { |
| 126 | 139 | function KTFieldsetDisplay($oFieldset) { |
| 127 | 140 | $this->fieldset = $oFieldset; |
| 128 | 141 | } |
| 129 | - | |
| 142 | + | |
| 130 | 143 | |
| 131 | 144 | function _dateHelper($dDate) { |
| 132 | 145 | $dColumnDate = strtotime($dDate); |
| 133 | - return date("Y-m-d H:i", $dColumnDate); | |
| 146 | + return date('Y-m-d H:i', $dColumnDate); | |
| 134 | 147 | } |
| 135 | - | |
| 136 | - | |
| 148 | + | |
| 149 | + | |
| 137 | 150 | function _sizeHelper($size) { |
| 138 | 151 | $finalSize = $size; |
| 139 | 152 | $label = 'b'; |
| 140 | - | |
| 153 | + | |
| 141 | 154 | if ($finalSize > 1000) { $label='Kb'; $finalSize = floor($finalSize/1000); } |
| 142 | 155 | if ($finalSize > 1000) { $label='Mb'; $finalSize = floor($finalSize/1000); } |
| 143 | 156 | return $finalSize . $label; |
| 144 | 157 | } |
| 145 | - | |
| 158 | + | |
| 146 | 159 | function _mimeHelper($iMimeTypeId) { |
| 147 | 160 | // FIXME lazy cache this. |
| 148 | 161 | // FIXME extend mime_types to have something useful to say. |
| 149 | 162 | $sQuery = 'SELECT * FROM mime_types WHERE id = ?'; |
| 150 | 163 | $res = DBUtil::getOneResult(array($sQuery, array($iMimeTypeId))); |
| 151 | - | |
| 164 | + | |
| 152 | 165 | if (PEAR::isError($res)) { |
| 153 | 166 | return _kt('unknown type'); |
| 154 | 167 | } |
| 155 | - | |
| 168 | + | |
| 156 | 169 | if (!empty($res['friendly_name'])) { |
| 157 | 170 | return _kt($res['friendly_name']); |
| 158 | 171 | } else { |
| ... | ... | @@ -160,19 +173,19 @@ class KTFieldsetDisplay { |
| 160 | 173 | } |
| 161 | 174 | |
| 162 | 175 | } |
| 163 | - | |
| 164 | - | |
| 176 | + | |
| 177 | + | |
| 165 | 178 | // this should multiplex i18n_title |
| 166 | 179 | function getTitle() { return $this->sTitle; } |
| 167 | - | |
| 180 | + | |
| 168 | 181 | function render($aDocumentData) { |
| 169 | 182 | return '<p class="ktError">Warning: Abstract Fieldset created.</p>'; |
| 170 | 183 | } |
| 171 | - | |
| 184 | + | |
| 172 | 185 | function renderComparison($aDocumentData, $aComparisonData) { |
| 173 | 186 | return '<div class="ktError">Not implemented: comparison rendering</div>'; |
| 174 | 187 | } |
| 175 | - | |
| 188 | + | |
| 176 | 189 | // we need the $main to (potentially) add js, etc. |
| 177 | 190 | function renderEdit($document_data) { |
| 178 | 191 | return '<div class="ktError">Not Implemented: fieldset editing.</div>'; |
| ... | ... | @@ -188,29 +201,29 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { |
| 188 | 201 | |
| 189 | 202 | // DON'T take anything. |
| 190 | 203 | function GenericFieldsetDisplay() { |
| 191 | - | |
| 204 | + | |
| 192 | 205 | } |
| 193 | - | |
| 206 | + | |
| 194 | 207 | function render($aDocumentData) { |
| 195 | 208 | // we do a fair bit of fetching, etc. in here. |
| 196 | - $document = $aDocumentData["document"]; | |
| 209 | + $document = $aDocumentData['document']; | |
| 197 | 210 | |
| 198 | 211 | // creation |
| 199 | 212 | $creator =& User::get($document->getCreatorId()); |
| 200 | 213 | if (PEAR::isError($creator)) { |
| 201 | - $creator_name = "<span class='ktError'>" . _kt("Unable to find the document's creator") . "</span>"; | |
| 214 | + $creator_name = '<span class="ktError">' . _kt("Unable to find the document's creator") . '</span>'; | |
| 202 | 215 | } else { |
| 203 | 216 | $creator_name = $creator->getName(); |
| 204 | 217 | } |
| 205 | 218 | $owner =& User::get($document->getOwnerId()); |
| 206 | 219 | if (PEAR::isError($owner)) { |
| 207 | - $owner_name = "<span class='ktError'>" . _kt("Unable to find the document's owner") . "</span>"; | |
| 220 | + $owner_name = '<span class="ktError">' . _kt("Unable to find the document's owner") . '</span>'; | |
| 208 | 221 | } else { |
| 209 | 222 | $owner_name = $owner->getName(); |
| 210 | 223 | } |
| 211 | 224 | $modified_user =& User::get($document->getModifiedUserId()); |
| 212 | 225 | if (PEAR::isError($modified_user)) { |
| 213 | - $modified_user_name = "<span class='ktError'>" . _kt("Unable to find the document's modifier") . "</span>"; | |
| 226 | + $modified_user_name = '<span class="ktError">' . _kt("Unable to find the document's modifier") . '</span>'; | |
| 214 | 227 | } else { |
| 215 | 228 | $modified_user_name = $modified_user->getName(); |
| 216 | 229 | } |
| ... | ... | @@ -218,48 +231,48 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { |
| 218 | 231 | |
| 219 | 232 | // last mod |
| 220 | 233 | $last_modified_date = $this->_dateHelper($document->getLastModifiedDate()); |
| 221 | - | |
| 234 | + | |
| 222 | 235 | // document type // FIXME move this to view.php |
| 223 | - $document_type = $aDocumentData["document_type"]->getName(); | |
| 236 | + $document_type = $aDocumentData['document_type']->getName(); | |
| 224 | 237 | |
| 225 | 238 | $oWorkflow = KTWorkflowUtil::getWorkflowForDocument($document); |
| 226 | 239 | $oState = KTWorkflowUtil::getWorkflowStateForDocument($document); |
| 227 | - | |
| 228 | - | |
| 229 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 230 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/generic"); | |
| 240 | + | |
| 241 | + | |
| 242 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 243 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/generic'); | |
| 231 | 244 | $aTemplateData = array( |
| 232 | - "context" => $this, | |
| 233 | - "document_data" => $aDocumentData, | |
| 234 | - "document" => $aDocumentData["document"], | |
| 235 | - | |
| 236 | - "filename" => $document->getFileName(), | |
| 237 | - | |
| 238 | - "creator" => $creator_name, | |
| 239 | - "owner" => $owner_name, | |
| 240 | - "creation_date" => $creation_date, | |
| 241 | - | |
| 242 | - "last_modified_by" => $modified_user_name, | |
| 243 | - "last_modified_date" => $last_modified_date, | |
| 244 | - | |
| 245 | - "document_type" => $document_type, | |
| 246 | - | |
| 247 | - "workflow_state" => $oState, | |
| 248 | - "workflow" => $oWorkflow, | |
| 245 | + 'context' => $this, | |
| 246 | + 'document_data' => $aDocumentData, | |
| 247 | + 'document' => $aDocumentData['document'], | |
| 248 | + | |
| 249 | + 'filename' => $document->getFileName(), | |
| 250 | + | |
| 251 | + 'creator' => $creator_name, | |
| 252 | + 'owner' => $owner_name, | |
| 253 | + 'creation_date' => $creation_date, | |
| 254 | + | |
| 255 | + 'last_modified_by' => $modified_user_name, | |
| 256 | + 'last_modified_date' => $last_modified_date, | |
| 257 | + | |
| 258 | + 'document_type' => $document_type, | |
| 259 | + | |
| 260 | + 'workflow_state' => $oState, | |
| 261 | + 'workflow' => $oWorkflow, | |
| 249 | 262 | ); |
| 250 | 263 | |
| 251 | - return $oTemplate->render($aTemplateData); | |
| 264 | + return $oTemplate->render($aTemplateData); | |
| 252 | 265 | } |
| 253 | - | |
| 266 | + | |
| 254 | 267 | function renderComparison($aDocumentData, $aComparisonData) { |
| 255 | 268 | // we do a fair bit of fetching, etc. in here. |
| 256 | - $document = $aDocumentData["document"]; | |
| 257 | - $comparison_document = $aComparisonData["document"]; | |
| 269 | + $document = $aDocumentData['document']; | |
| 270 | + $comparison_document = $aComparisonData['document']; | |
| 258 | 271 | |
| 259 | 272 | // creation |
| 260 | 273 | $creator =& User::get($document->getCreatorId()); |
| 261 | 274 | if (PEAR::isError($creator)) { |
| 262 | - $creator = "<span class='ktError'>" . _kt("Unable to find the document's creator") . "</span>"; | |
| 275 | + $creator = '<span class="ktError">' . _kt("Unable to find the document's creator") . '</span>'; | |
| 263 | 276 | } else { |
| 264 | 277 | $creator = $creator->getName(); |
| 265 | 278 | } |
| ... | ... | @@ -268,30 +281,30 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { |
| 268 | 281 | // last mod |
| 269 | 282 | $last_modified_date = $this->_dateHelper($document->getVersionCreated()); |
| 270 | 283 | $comparison_last_modified_date = $this->_dateHelper($comparison_document->getVersionCreated()); |
| 271 | - | |
| 284 | + | |
| 272 | 285 | // document type // FIXME move this to view.php |
| 273 | - $document_type = $aDocumentData["document_type"]->getName(); | |
| 274 | - $comparison_document_type = $aComparisonData["document_type"]->getName(); | |
| 275 | - | |
| 286 | + $document_type = $aDocumentData['document_type']->getName(); | |
| 287 | + $comparison_document_type = $aComparisonData['document_type']->getName(); | |
| 288 | + | |
| 276 | 289 | $modified_user =& User::get($document->getVersionCreatorId()); |
| 277 | 290 | if (PEAR::isError($modified_user)) { |
| 278 | - $modified_user = "<span class='ktError'>" . _kt("Unable to find the document's modifier") . "</span>"; | |
| 291 | + $modified_user = "<span class='ktError'>" . _kt("Unable to find the document's modifier") . '</span>'; | |
| 279 | 292 | } else { |
| 280 | 293 | $modified_user = $modified_user->getName(); |
| 281 | 294 | } |
| 282 | 295 | |
| 283 | 296 | $owner_user =& User::get($document->getOwnerId()); |
| 284 | 297 | if (PEAR::isError($owner_user)) { |
| 285 | - $owner_user = "<span class='ktError'>" . _kt("Unable to find the document's owner") . "</span>"; | |
| 298 | + $owner_user = "<span class='ktError'>" . _kt("Unable to find the document's owner") . '</span>'; | |
| 286 | 299 | } else { |
| 287 | 300 | $owner_user = $owner_user->getName(); |
| 288 | 301 | } |
| 289 | - | |
| 302 | + | |
| 290 | 303 | |
| 291 | 304 | |
| 292 | 305 | $comparison_modified_user =& User::get($comparison_document->getVersionCreatorId()); |
| 293 | 306 | if (PEAR::isError($comparison_modified_user)) { |
| 294 | - $comparison_modified_user = "<span class='ktError'>" . _kt("Unable to find the document's modifier") . "</span>"; | |
| 307 | + $comparison_modified_user = "<span class='ktError'>" . _kt("Unable to find the document's modifier") . '</span>'; | |
| 295 | 308 | } else { |
| 296 | 309 | $comparison_modified_user = $comparison_modified_user->getName(); |
| 297 | 310 | } |
| ... | ... | @@ -300,59 +313,59 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { |
| 300 | 313 | $oState = KTWorkflowUtil::getWorkflowStateForDocument($document); |
| 301 | 314 | $oComparisonWorkflow = KTWorkflowUtil::getWorkflowForDocument($comparison_document); |
| 302 | 315 | $oComparisonState = KTWorkflowUtil::getWorkflowStateForDocument($comparison_document); |
| 303 | - | |
| 304 | - | |
| 305 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 306 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/generic_versioned"); | |
| 316 | + | |
| 317 | + | |
| 318 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 319 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/generic_versioned'); | |
| 307 | 320 | $aTemplateData = array( |
| 308 | - "context" => $this, | |
| 309 | - "document_data" => $aDocumentData, | |
| 310 | - "document" => $aDocumentData["document"], | |
| 311 | - | |
| 312 | - "title" => $document->getName(), | |
| 313 | - "comparison_title" => $comparison_document->getName(), | |
| 314 | - | |
| 315 | - "filename" => $document->getFileName(), | |
| 316 | - "comparison_filename" => $comparison_document->getFileName(), | |
| 317 | - | |
| 318 | - "creator" => $creator, | |
| 319 | - "creation_date" => $creation_date, | |
| 320 | - "owner" => $owner_user, | |
| 321 | - | |
| 322 | - "last_modified_by" => $modified_user, | |
| 323 | - "last_modified_date" => $last_modified_date, | |
| 324 | - | |
| 325 | - "comparison_last_modified_by" => $comparison_modified_user, | |
| 326 | - "comparison_last_modified_date" => $comparison_last_modified_date, | |
| 327 | - | |
| 328 | - "document_type" => $document_type, | |
| 329 | - "comparison_document_type" => $comparison_document_type, | |
| 330 | - | |
| 331 | - "workflow_state" => $oState, | |
| 332 | - "comparison_workflow_state" => $oComparisonState, | |
| 333 | - "workflow" => $oWorkflow, | |
| 334 | - "comparison_workflow" => $oComparisonWorkflow, | |
| 335 | - | |
| 336 | - "comparison_document" => $aComparisonData["document"], | |
| 321 | + 'context' => $this, | |
| 322 | + 'document_data' => $aDocumentData, | |
| 323 | + 'document' => $aDocumentData['document'], | |
| 324 | + | |
| 325 | + 'title' => $document->getName(), | |
| 326 | + 'comparison_title' => $comparison_document->getName(), | |
| 327 | + | |
| 328 | + 'filename' => $document->getFileName(), | |
| 329 | + 'comparison_filename' => $comparison_document->getFileName(), | |
| 330 | + | |
| 331 | + 'creator' => $creator, | |
| 332 | + 'creation_date' => $creation_date, | |
| 333 | + 'owner' => $owner_user, | |
| 334 | + | |
| 335 | + 'last_modified_by' => $modified_user, | |
| 336 | + 'last_modified_date' => $last_modified_date, | |
| 337 | + | |
| 338 | + 'comparison_last_modified_by' => $comparison_modified_user, | |
| 339 | + 'comparison_last_modified_date' => $comparison_last_modified_date, | |
| 340 | + | |
| 341 | + 'document_type' => $document_type, | |
| 342 | + 'comparison_document_type' => $comparison_document_type, | |
| 343 | + | |
| 344 | + 'workflow_state' => $oState, | |
| 345 | + 'comparison_workflow_state' => $oComparisonState, | |
| 346 | + 'workflow' => $oWorkflow, | |
| 347 | + 'comparison_workflow' => $oComparisonWorkflow, | |
| 348 | + | |
| 349 | + 'comparison_document' => $aComparisonData['document'], | |
| 337 | 350 | ); |
| 338 | - | |
| 339 | - return $oTemplate->render($aTemplateData); | |
| 351 | + | |
| 352 | + return $oTemplate->render($aTemplateData); | |
| 340 | 353 | } |
| 341 | - | |
| 354 | + | |
| 342 | 355 | function renderEdit($document_data) { |
| 343 | 356 | global $main; // FIXME remove direct access to $main |
| 344 | - $oField = new KTBaseWidget(_kt("Document Title"), | |
| 357 | + $oField = new KTBaseWidget(_kt('Document Title'), | |
| 345 | 358 | sprintf(_kt("The document title is used as the main name of a document throughout %s™."), APP_NAME), |
| 346 | - "generic_title", $document_data["document"]->getName(), $main, true, null, array()); | |
| 359 | + 'generic_title', $document_data['document']->getName(), $main, true, null, array()); | |
| 347 | 360 | $aFields = array($oField); // its the only one editable from the basic set (currently). |
| 348 | - | |
| 349 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 350 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple_editable"); | |
| 361 | + | |
| 362 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 363 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple_editable'); | |
| 351 | 364 | $aTemplateData = array( |
| 352 | - "context" => $this, | |
| 353 | - "fields" => $aFields, | |
| 354 | - "title" => _kt("Generic Document Information"), | |
| 355 | - "description" => sprintf(_kt("The information in this section is stored by %s™ for every document."), APP_NAME), | |
| 365 | + 'context' => $this, | |
| 366 | + 'fields' => $aFields, | |
| 367 | + 'title' => _kt('Generic Document Information'), | |
| 368 | + 'description' => sprintf(_kt("The information in this section is stored by %s™ for every document."), APP_NAME), | |
| 356 | 369 | ); |
| 357 | 370 | return $oTemplate->render($aTemplateData); |
| 358 | 371 | } |
| ... | ... | @@ -361,177 +374,184 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { |
| 361 | 374 | |
| 362 | 375 | // The generic object |
| 363 | 376 | class SimpleFieldsetDisplay extends KTFieldsetDisplay { |
| 364 | - | |
| 377 | + | |
| 365 | 378 | function render($aDocumentData) { |
| 366 | 379 | // we do a fair bit of fetching, etc. in here. |
| 367 | - $document = $aDocumentData["document"]; | |
| 368 | - | |
| 380 | + $document = $aDocumentData['document']; | |
| 381 | + | |
| 369 | 382 | // we need to extract the fields. |
| 370 | 383 | $fields =& $this->fieldset->getFields(); |
| 371 | - | |
| 372 | - | |
| 384 | + | |
| 385 | + | |
| 373 | 386 | // we now grab that subset of items which fit in here. |
| 374 | 387 | // FIXME link value -> lookup where appropriate. |
| 375 | 388 | // FIXME probably need to be more careful about the _type_ of field here. |
| 376 | 389 | $fieldset_values = array(); |
| 377 | 390 | foreach ($fields as $oField) { |
| 378 | - $val = KTUtil::arrayGet($aDocumentData["field_values"], $oField->getId(), null); | |
| 379 | - $fieldset_values[] = array("field" => $oField, "value" => $val, ); | |
| 391 | + $val = KTUtil::arrayGet($aDocumentData['field_values'], $oField->getId(), null); | |
| 392 | + $fieldset_values[] = array('field' => $oField, 'value' => $val, ); | |
| 393 | + } | |
| 394 | + | |
| 395 | + // Alphabetise the metadata fields within a fieldset if set in config | |
| 396 | + $oKTConfig =& KTConfig::getSingleton(); | |
| 397 | + $use_sort = $oKTConfig->get('ui/metadata_sort', false); | |
| 398 | + | |
| 399 | + if($use_sort){ | |
| 400 | + usort($fieldset_values, 'compareFieldSetField'); | |
| 380 | 401 | } |
| 381 | - | |
| 382 | - | |
| 383 | - | |
| 384 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 385 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple"); | |
| 402 | + | |
| 403 | + | |
| 404 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 405 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple'); | |
| 386 | 406 | $aTemplateData = array( |
| 387 | - "context" => $this, | |
| 388 | - "document_data" => $aDocumentData, | |
| 389 | - "document" => $aDocumentData["document"], | |
| 390 | - "fieldset" => $this->fieldset, | |
| 391 | - "fieldset_values" => $fieldset_values, | |
| 392 | - "description" => $this->fieldset->getDescription(), | |
| 407 | + 'context' => $this, | |
| 408 | + 'document_data' => $aDocumentData, | |
| 409 | + 'document' => $aDocumentData['document'], | |
| 410 | + 'fieldset' => $this->fieldset, | |
| 411 | + 'fieldset_values' => $fieldset_values, | |
| 412 | + 'description' => $this->fieldset->getDescription(), | |
| 393 | 413 | ); |
| 394 | - return $oTemplate->render($aTemplateData); | |
| 414 | + return $oTemplate->render($aTemplateData); | |
| 395 | 415 | } |
| 396 | - | |
| 416 | + | |
| 397 | 417 | function renderComparison($aDocumentData, $aComparisonData) { |
| 398 | 418 | // we do a fair bit of fetching, etc. in here. |
| 399 | - $document = $aDocumentData["document"]; | |
| 400 | - | |
| 419 | + $document = $aDocumentData['document']; | |
| 420 | + | |
| 401 | 421 | // we need to extract the fields. |
| 402 | 422 | $fields =& $this->fieldset->getFields(); |
| 403 | - | |
| 404 | - | |
| 423 | + | |
| 424 | + | |
| 405 | 425 | // we now grab that subset of items which fit in here. |
| 406 | 426 | // FIXME link value -> lookup where appropriate. |
| 407 | 427 | // FIXME probably need to be more careful about the _type_ of field here. |
| 408 | 428 | $fieldset_values = array(); |
| 409 | 429 | foreach ($fields as $oField) { |
| 410 | - $curr_val = KTUtil::arrayGet($aDocumentData["field_values"], $oField->getId(), null); | |
| 411 | - $old_val = KTUtil::arrayGet($aComparisonData["field_values"], $oField->getId(), null); | |
| 412 | - $fieldset_values[] = array("field" => $oField, "current_value" => $curr_val, "previous_value" => $old_val); | |
| 430 | + $curr_val = KTUtil::arrayGet($aDocumentData['field_values'], $oField->getId(), null); | |
| 431 | + $old_val = KTUtil::arrayGet($aComparisonData['field_values'], $oField->getId(), null); | |
| 432 | + $fieldset_values[] = array('field' => $oField, 'current_value' => $curr_val, 'previous_value' => $old_val); | |
| 413 | 433 | } |
| 414 | - | |
| 415 | - | |
| 416 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 417 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple_versioned"); | |
| 434 | + | |
| 435 | + | |
| 436 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 437 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple_versioned'); | |
| 418 | 438 | $aTemplateData = array( |
| 419 | - "context" => $this, | |
| 420 | - "document_data" => $aDocumentData, | |
| 421 | - "document" => $aDocumentData["document"], | |
| 422 | - "fieldset" => $this->fieldset, | |
| 423 | - "fieldset_values" => $fieldset_values, | |
| 439 | + 'context' => $this, | |
| 440 | + 'document_data' => $aDocumentData, | |
| 441 | + 'document' => $aDocumentData['document'], | |
| 442 | + 'fieldset' => $this->fieldset, | |
| 443 | + 'fieldset_values' => $fieldset_values, | |
| 424 | 444 | ); |
| 425 | - return $oTemplate->render($aTemplateData); | |
| 426 | - } | |
| 427 | - | |
| 445 | + return $oTemplate->render($aTemplateData); | |
| 446 | + } | |
| 447 | + | |
| 428 | 448 | function renderEdit($document_data) { |
| 429 | 449 | global $main; // FIXME remove direct access to $main |
| 430 | - | |
| 450 | + | |
| 431 | 451 | $aFields = array(); |
| 432 | - | |
| 452 | + | |
| 433 | 453 | $fields =& $this->fieldset->getFields(); |
| 434 | - | |
| 454 | + | |
| 435 | 455 | foreach ($fields as $oField) { |
| 436 | - $val = KTUtil::arrayGet($document_data["field_values"], $oField->getId(), null); | |
| 437 | - | |
| 456 | + $val = KTUtil::arrayGet($document_data['field_values'], $oField->getId(), null); | |
| 457 | + | |
| 438 | 458 | $has_errors = KTUtil::arrayGet($document_data['errors'], $oField->getId(),false); |
| 439 | 459 | if ($has_errors !== false) { |
| 440 | 460 | // FIXME when the actual errors (meaningful) are passed out, fix this. |
| 441 | 461 | $errors = array(_kt('The system rejected your value for this field.')); |
| 442 | - } else { | |
| 462 | + } else { | |
| 443 | 463 | $errors = null; |
| 444 | 464 | } |
| 445 | - | |
| 465 | + | |
| 446 | 466 | $aFields[] = getWidgetForMetadataField($oField, $val, $main, $errors); // FIXME handle errors |
| 447 | 467 | } |
| 448 | 468 | $fieldset_name = $this->fieldset->getName(); |
| 449 | 469 | $fieldset_description = $this->fieldset->getDescription(); |
| 450 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 451 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple_editable"); | |
| 470 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 471 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple_editable'); | |
| 452 | 472 | $aTemplateData = array( |
| 453 | - "context" => $this, | |
| 454 | - "fields" => $aFields, | |
| 455 | - "title" => $fieldset_name, | |
| 456 | - "description" => $fieldset_description, | |
| 473 | + 'context' => $this, | |
| 474 | + 'fields' => $aFields, | |
| 475 | + 'title' => $fieldset_name, | |
| 476 | + 'description' => $fieldset_description, | |
| 457 | 477 | ); |
| 458 | - | |
| 459 | - | |
| 478 | + | |
| 479 | + | |
| 460 | 480 | return $oTemplate->render($aTemplateData); |
| 461 | 481 | } |
| 462 | - | |
| 482 | + | |
| 463 | 483 | } |
| 464 | 484 | |
| 465 | 485 | |
| 466 | 486 | // Handle the conditional case. |
| 467 | 487 | class ConditionalFieldsetDisplay extends SimpleFieldsetDisplay { |
| 468 | - | |
| 488 | + | |
| 469 | 489 | function renderEdit($document_data) { |
| 470 | 490 | global $main; // FIXME remove direct access to $main |
| 471 | 491 | $oPage =& $main; |
| 472 | - | |
| 492 | + | |
| 473 | 493 | // FIXME do this from inside the widgetry mojo. |
| 474 | 494 | $oPage->requireCSSResource('resources/css/kt-treewidget.css'); |
| 475 | - | |
| 495 | + | |
| 476 | 496 | // FIXME this currently doesn't work, since we use NBM's half-baked Ajax on add/bulk ;) |
| 477 | 497 | $oPage->requireJSResource('resources/js/taillog.js'); |
| 478 | 498 | $oPage->requireJSResource('resources/js/conditional_usage.js'); |
| 479 | - | |
| 480 | - $aFields = array(); | |
| 499 | + | |
| 500 | + $aFields = array(); | |
| 481 | 501 | $fields =& $this->fieldset->getFields(); |
| 482 | 502 | $values = array(); |
| 483 | 503 | $errors = $document_data['errors']; |
| 484 | 504 | |
| 485 | 505 | $have_values = false; |
| 486 | 506 | foreach ($fields as $oField) { |
| 487 | - $val = KTUtil::arrayGet($document_data["field_values"], $oField->getId(), null); | |
| 507 | + $val = KTUtil::arrayGet($document_data['field_values'], $oField->getId(), null); | |
| 488 | 508 | if ($val !== null) { |
| 489 | 509 | $have_values = true; |
| 490 | - | |
| 491 | - } | |
| 492 | - | |
| 510 | + | |
| 511 | + } | |
| 512 | + | |
| 493 | 513 | $values[$oField->getId()] = $val; |
| 494 | - } | |
| 514 | + } | |
| 515 | + | |
| 495 | 516 | |
| 496 | - | |
| 497 | 517 | // now, we need to do some extra work on conditional widgets. |
| 498 | 518 | // how? |
| 499 | - | |
| 519 | + | |
| 500 | 520 | $fieldset_name = $this->fieldset->getName(); |
| 501 | 521 | $fieldset_description = _kt($this->fieldset->getDescription()); // need a better approach. how do we handle database-resident translations? |
| 502 | - $fieldset_description .= _kt("Note that the options which are available depends on previous choices within this fieldset."); | |
| 503 | - | |
| 522 | + $fieldset_description .= _kt('Note that the options which are available depends on previous choices within this fieldset.'); | |
| 523 | + | |
| 504 | 524 | // FIXME handle the editable case _with_ values. |
| 505 | - | |
| 525 | + | |
| 506 | 526 | if ($have_values) { |
| 507 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 508 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/conditional_editable_values"); | |
| 527 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 528 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/conditional_editable_values'); | |
| 509 | 529 | $aTemplateData = array( |
| 510 | - "context" => $this, | |
| 511 | - "fields" => $fields =& $this->fieldset->getFields(), | |
| 530 | + 'context' => $this, | |
| 531 | + 'fields' => $fields =& $this->fieldset->getFields(), | |
| 512 | 532 | 'fieldset_id' => $this->fieldset->getId(), |
| 513 | - "title" => $fieldset_name, | |
| 514 | - "description" => $fieldset_description, | |
| 533 | + 'title' => $fieldset_name, | |
| 534 | + 'description' => $fieldset_description, | |
| 515 | 535 | 'values' => $values, |
| 516 | 536 | 'errors' => $errors, |
| 517 | 537 | ); |
| 518 | - | |
| 538 | + | |
| 519 | 539 | return $oTemplate->render($aTemplateData); |
| 520 | 540 | } // else { |
| 521 | - | |
| 522 | - $oTemplating =& KTTemplating::getSingleton(); | |
| 523 | - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/conditional_editable"); | |
| 541 | + | |
| 542 | + $oTemplating =& KTTemplating::getSingleton(); | |
| 543 | + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/conditional_editable'); | |
| 524 | 544 | $aTemplateData = array( |
| 525 | - "context" => $this, | |
| 526 | - "field" => $oField, // first field, widget. | |
| 545 | + 'context' => $this, | |
| 546 | + 'field' => $oField, // first field, widget. | |
| 527 | 547 | 'fieldset_id' => $this->fieldset->getId(), |
| 528 | - "title" => $fieldset_name, | |
| 529 | - "description" => $fieldset_description, | |
| 548 | + 'title' => $fieldset_name, | |
| 549 | + 'description' => $fieldset_description, | |
| 530 | 550 | ); |
| 531 | - | |
| 551 | + | |
| 532 | 552 | return $oTemplate->render($aTemplateData); |
| 533 | 553 | } |
| 534 | - | |
| 554 | + | |
| 535 | 555 | } |
| 536 | 556 | |
| 537 | 557 | -?> |
| 558 | +?> | |
| 538 | 559 | \ No newline at end of file | ... | ... |
plugins/housekeeper/DiskUsageDashlet.inc.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | /** |
| 4 | - * $Id | |
| 4 | + * $Id: $ | |
| 5 | 5 | * |
| 6 | 6 | * KnowledgeTree Open Source Edition |
| 7 | 7 | * Document Management Made Simple |
| ... | ... | @@ -106,6 +106,8 @@ class DiskUsageDashlet extends KTBaseDashlet |
| 106 | 106 | preg_match('/(.*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\%\s+(.*)/', $line, $matches); |
| 107 | 107 | list($line, $filesystem, $size, $used, $avail, $usedp, $mount) = $matches; |
| 108 | 108 | |
| 109 | + if ($size === 0) continue; | |
| 110 | + | |
| 109 | 111 | if ($usedp >= 100 - $this->urgentPercent) |
| 110 | 112 | { |
| 111 | 113 | $colour = 'red'; |
| ... | ... | @@ -114,6 +116,10 @@ class DiskUsageDashlet extends KTBaseDashlet |
| 114 | 116 | { |
| 115 | 117 | $colour = 'orange'; |
| 116 | 118 | } |
| 119 | + elseif ( $usedp < 100 - $this->warningPercent) | |
| 120 | + { | |
| 121 | + $colour = 'none'; | |
| 122 | + } | |
| 117 | 123 | |
| 118 | 124 | $usage[] = array( |
| 119 | 125 | 'filesystem'=>$filesystem, | ... | ... |
plugins/housekeeper/FolderUsageDashlet.inc.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | /** |
| 4 | - * $Id | |
| 4 | + * $Id: $ | |
| 5 | 5 | * |
| 6 | 6 | * KnowledgeTree Open Source Edition |
| 7 | 7 | * Document Management Made Simple |
| 8 | 8 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 9 | - * | |
| 9 | + * | |
| 10 | 10 | * This program is free software; you can redistribute it and/or modify it under |
| 11 | 11 | * the terms of the GNU General Public License version 3 as published by the |
| 12 | 12 | * Free Software Foundation. |
| 13 | - * | |
| 13 | + * | |
| 14 | 14 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 15 | 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 16 | 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 17 | 17 | * details. |
| 18 | - * | |
| 18 | + * | |
| 19 | 19 | * You should have received a copy of the GNU General Public License |
| 20 | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 21 | - * | |
| 21 | + * | |
| 22 | 22 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 23 | 23 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 24 | - * | |
| 24 | + * | |
| 25 | 25 | * The interactive user interfaces in modified source and object code versions |
| 26 | 26 | * of this program must display Appropriate Legal Notices, as required under |
| 27 | 27 | * Section 5 of the GNU General Public License version 3. |
| 28 | - * | |
| 28 | + * | |
| 29 | 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 30 | 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 | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | 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. | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | + * copyright notice. | |
| 35 | 35 | * Contributor( s): ______________________________________ |
| 36 | 36 | */ |
| 37 | 37 | |
| ... | ... | @@ -55,7 +55,7 @@ class FolderUsageDashlet extends KTBaseDashlet |
| 55 | 55 | $files=0; |
| 56 | 56 | $filesize=0; |
| 57 | 57 | |
| 58 | - if ($dh = opendir($path)) | |
| 58 | + if (is_dir($path) && ($dh = opendir($path))) | |
| 59 | 59 | { |
| 60 | 60 | while (($file = readdir($dh)) !== false) |
| 61 | 61 | { |
| ... | ... | @@ -131,7 +131,7 @@ class FolderUsageDashlet extends KTBaseDashlet |
| 131 | 131 | 'description'=>$name, |
| 132 | 132 | 'folder'=>$directory, |
| 133 | 133 | 'files'=>number_format($temp['files'],0,'.',','), |
| 134 | - 'filesize'=>KTUtil::filesizeToString($temp['filesize']), | |
| 134 | + 'filesize'=>KTUtil::filesizeToString($temp['filesize']/1024), | |
| 135 | 135 | 'action'=>$i, |
| 136 | 136 | 'canClean'=>$canClean |
| 137 | 137 | ); | ... | ... |
plugins/ktcore/KTBulkActions.php
| ... | ... | @@ -661,6 +661,9 @@ class KTBrowseBulkExportAction extends KTBulkAction { |
| 661 | 661 | parent_folder_ids LIKE '%,{$sFolderId}'"; |
| 662 | 662 | $aFolderList = $this->oFolder->getList($sWhereClause); |
| 663 | 663 | |
| 664 | + $aFolderObjects = array(); | |
| 665 | + $aFolderObjects[$sFolderId] = $oFolder; | |
| 666 | + | |
| 664 | 667 | // Export the folder structure to ensure the export of empty directories |
| 665 | 668 | if(!empty($aFolderList)){ |
| 666 | 669 | foreach($aFolderList as $k => $oFolderItem){ |
| ... | ... | @@ -673,6 +676,7 @@ class KTBrowseBulkExportAction extends KTBulkAction { |
| 673 | 676 | $aDocuments = array_merge($aDocuments, $aFolderDocs); |
| 674 | 677 | } |
| 675 | 678 | $this->oZip->addFolderToZip($oFolderItem); |
| 679 | + $aFolderObjects[$oFolderItem->getId()] = $oFolderItem; | |
| 676 | 680 | } |
| 677 | 681 | } |
| 678 | 682 | |
| ... | ... | @@ -680,6 +684,8 @@ class KTBrowseBulkExportAction extends KTBulkAction { |
| 680 | 684 | if(!empty($aDocuments)){ |
| 681 | 685 | foreach($aDocuments as $sDocumentId){ |
| 682 | 686 | $oDocument = Document::get($sDocumentId); |
| 687 | + $sDocFolderId = $oDocument->getFolderID(); | |
| 688 | + $oFolder = isset($aFolderObjects[$sDocFolderId]) ? $aFolderObjects[$sDocFolderId] : Folder::get($sDocFolderId); | |
| 683 | 689 | |
| 684 | 690 | if ($this->bNoisy) { |
| 685 | 691 | $oDocumentTransaction = new DocumentTransaction($oDocument, "Document part of bulk export", 'ktstandard.transactions.bulk_export', array()); |
| ... | ... | @@ -689,11 +695,10 @@ class KTBrowseBulkExportAction extends KTBulkAction { |
| 689 | 695 | // fire subscription alerts for the downloaded document |
| 690 | 696 | if($this->bNotifications){ |
| 691 | 697 | $oSubscriptionEvent = new SubscriptionEvent(); |
| 692 | - $oFolder = Folder::get($oDocument->getFolderID()); | |
| 693 | 698 | $oSubscriptionEvent->DownloadDocument($oDocument, $oFolder); |
| 694 | 699 | } |
| 695 | 700 | |
| 696 | - $this->oZip->addDocumentToZip($oDocument); | |
| 701 | + $this->oZip->addDocumentToZip($oDocument, $oFolder); | |
| 697 | 702 | } |
| 698 | 703 | } |
| 699 | 704 | } |
| ... | ... | @@ -906,6 +911,9 @@ class KTBrowseBulkCheckoutAction extends KTBulkAction { |
| 906 | 911 | parent_folder_ids LIKE '%,{$sFolderId}'"; |
| 907 | 912 | $aFolderList = $this->oFolder->getList($sWhereClause); |
| 908 | 913 | |
| 914 | + $aFolderObjects = array(); | |
| 915 | + $aFolderObjects[$sFolderId] = $oFolder; | |
| 916 | + | |
| 909 | 917 | // Get the documents within the folder |
| 910 | 918 | if(!empty($aFolderList)){ |
| 911 | 919 | foreach($aFolderList as $k => $oFolderItem){ |
| ... | ... | @@ -921,6 +929,7 @@ class KTBrowseBulkCheckoutAction extends KTBulkAction { |
| 921 | 929 | // Add the folder to the zip file |
| 922 | 930 | if($this->bDownload){ |
| 923 | 931 | $this->oZip->addFolderToZip($oFolderItem); |
| 932 | + $aFolderObjects[$oFolderItem->getId()] = $oFolderItem; | |
| 924 | 933 | } |
| 925 | 934 | } |
| 926 | 935 | } |
| ... | ... | @@ -961,7 +970,9 @@ class KTBrowseBulkCheckoutAction extends KTBulkAction { |
| 961 | 970 | $oDocumentTransaction = new DocumentTransaction($oDocument, "Document part of bulk checkout", 'ktstandard.transactions.check_out', array()); |
| 962 | 971 | $oDocumentTransaction->create(); |
| 963 | 972 | } |
| 964 | - $this->oZip->addDocumentToZip($oDocument); | |
| 973 | + $sDocFolderId = $oDocument->getFolderID(); | |
| 974 | + $oFolder = isset($aFolderObjects[$sDocFolderId]) ? $aFolderObjects[$sDocFolderId] : Folder::get($sDocFolderId); | |
| 975 | + $this->oZip->addDocumentToZip($oDocument, $oFolder); | |
| 965 | 976 | } |
| 966 | 977 | } |
| 967 | 978 | } | ... | ... |
plugins/ktcore/KTCorePlugin.php
| ... | ... | @@ -158,6 +158,11 @@ class KTCorePlugin extends KTPlugin { |
| 158 | 158 | $this->registerTrigger('edit', 'postValidate', 'SavedSearchSubscriptionTrigger', 'ktcore.search2.savedsearch.subscription.edit', KT_DIR . '/plugins/search2/Search2Triggers.php'); |
| 159 | 159 | $this->registerTrigger('add', 'postValidate', 'SavedSearchSubscriptionTrigger', 'ktcore.search2.savedsearch.subscription.add', KT_DIR . '/plugins/search2/Search2Triggers.php'); |
| 160 | 160 | $this->registerTrigger('discussion', 'postValidate', 'SavedSearchSubscriptionTrigger', 'ktcore.search2.savedsearch.subscription.discussion', KT_DIR . '/plugins/search2/Search2Triggers.php'); |
| 161 | + | |
| 162 | + //Tag Cloud Triggers | |
| 163 | + $this->registerTrigger('add', 'postValidate', 'KTAddDocumentTrigger', 'ktcore.triggers.tagcloud.add', KT_DIR.'/plugins/tagcloud/TagCloudTriggers.php'); | |
| 164 | + $this->registerTrigger('edit', 'postValidate', 'KTEditDocumentTrigger', 'ktcore.triggers.tagcloud.edit', KT_DIR.'/plugins/tagcloud/TagCloudTriggers.php'); | |
| 165 | + | |
| 161 | 166 | |
| 162 | 167 | // widgets |
| 163 | 168 | $this->registerWidget('KTCoreHiddenWidget', 'ktcore.widgets.hidden', 'KTWidgets.php'); | ... | ... |
plugins/ktcore/admin/documentFieldsv2.php
| ... | ... | @@ -66,7 +66,7 @@ class KTDocumentFieldDispatcher extends KTAdminDispatcher { |
| 66 | 66 | |
| 67 | 67 | $oTemplate->setData(array( |
| 68 | 68 | 'context' => $this, |
| 69 | - 'fieldsets' => KTFieldset::getList('disabled != true'), | |
| 69 | + 'fieldsets' => KTFieldset::getList("disabled != true AND namespace != 'tagcloud'"), | |
| 70 | 70 | )); |
| 71 | 71 | return $oTemplate; |
| 72 | 72 | } | ... | ... |
plugins/ktcore/admin/plugins.php
| ... | ... | @@ -75,6 +75,33 @@ class KTPluginDispatcher extends KTAdminDispatcher { |
| 75 | 75 | $sTable = KTUtil::getTableName('plugins'); |
| 76 | 76 | $aIds = (array) KTUtil::arrayGet($_REQUEST, 'pluginids'); |
| 77 | 77 | KTPluginEntity::setEnabled($aIds); |
| 78 | + //enabling or disabling Tag fieldset depending on whether tag cloud plugin is enabled or disabled. | |
| 79 | + //Get tag cloud object | |
| 80 | + $oTagClouPlugin = KTPluginEntity::getByNamespace('ktcore.tagcloud.plugin'); | |
| 81 | + if($oTagClouPlugin->getDisabled() == '1') | |
| 82 | + { | |
| 83 | + //disable tag fieldset | |
| 84 | + $aFV = array( | |
| 85 | + 'disabled' => true, | |
| 86 | + ); | |
| 87 | + $aWFV = array( | |
| 88 | + 'namespace' => 'tagcloud' | |
| 89 | + ); | |
| 90 | + $res = DBUtil::whereUpdate('fieldsets', $aFV, $aWFV); | |
| 91 | + } | |
| 92 | + //if Tag Cloud plugin disabled | |
| 93 | + if($oTagClouPlugin->getDisabled() == '0') | |
| 94 | + { | |
| 95 | + //enable tag fieldset | |
| 96 | + $aFV = array( | |
| 97 | + 'disabled' => false, | |
| 98 | + ); | |
| 99 | + $aWFV = array( | |
| 100 | + 'namespace' => 'tagcloud' | |
| 101 | + ); | |
| 102 | + $res = DBUtil::whereUpdate('fieldsets', $aFV, $aWFV); | |
| 103 | + } | |
| 104 | + | |
| 78 | 105 | $this->successRedirectToMain(_kt('Plugins updated')); |
| 79 | 106 | } |
| 80 | 107 | ... | ... |
plugins/ktcore/document/edit.php
| ... | ... | @@ -4,32 +4,32 @@ |
| 4 | 4 | * KnowledgeTree Open Source Edition |
| 5 | 5 | * Document Management Made Simple |
| 6 | 6 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 7 | - * | |
| 7 | + * | |
| 8 | 8 | * This program is free software; you can redistribute it and/or modify it under |
| 9 | 9 | * the terms of the GNU General Public License version 3 as published by the |
| 10 | 10 | * Free Software Foundation. |
| 11 | - * | |
| 11 | + * | |
| 12 | 12 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 13 | 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 14 | 14 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 15 | 15 | * details. |
| 16 | - * | |
| 16 | + * | |
| 17 | 17 | * You should have received a copy of the GNU General Public License |
| 18 | 18 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 19 | - * | |
| 19 | + * | |
| 20 | 20 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 21 | 21 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 22 | - * | |
| 22 | + * | |
| 23 | 23 | * The interactive user interfaces in modified source and object code versions |
| 24 | 24 | * of this program must display Appropriate Legal Notices, as required under |
| 25 | 25 | * Section 5 of the GNU General Public License version 3. |
| 26 | - * | |
| 26 | + * | |
| 27 | 27 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 28 | 28 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 29 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 29 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | 30 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 31 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 32 | - * copyright notice. | |
| 31 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 32 | + * copyright notice. | |
| 33 | 33 | * Contributor( s): ______________________________________ |
| 34 | 34 | * |
| 35 | 35 | */ |
| ... | ... | @@ -198,6 +198,10 @@ class KTDocumentEditAction extends KTDocumentAction { |
| 198 | 198 | $this->oDocument->setDocumentTypeId($doctypeid); |
| 199 | 199 | } |
| 200 | 200 | $this->oDocument->setName(($data['document_title'])); |
| 201 | + $this->oDocument->startNewContentVersion($this->oUser); | |
| 202 | + $this->oDocument->setMinorVersionNumber($this->oDocument->getMinorVersionNumber()+1); | |
| 203 | + $this->oDocument->setLastModifiedDate(getCurrentDateTime()); | |
| 204 | + $this->oDocument->setModifiedUserId($this->oUser->getId()); | |
| 201 | 205 | |
| 202 | 206 | $res = $this->oDocument->update(); |
| 203 | 207 | if (PEAR::isError($res)) { | ... | ... |
plugins/ktcore/folder/BulkImport.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | * |
| 36 | 36 | */ |
| ... | ... | @@ -60,7 +60,7 @@ class KTBulkImportFolderAction extends KTFolderAction { |
| 60 | 60 | function getInfo() { |
| 61 | 61 | if (!Permission::userIsSystemAdministrator($this->oUser->getId())) { |
| 62 | 62 | return null; |
| 63 | - | |
| 63 | + | |
| 64 | 64 | } |
| 65 | 65 | return parent::getInfo(); |
| 66 | 66 | } |
| ... | ... | @@ -122,6 +122,7 @@ class KTBulkImportFolderAction extends KTFolderAction { |
| 122 | 122 | $aOptions = array( |
| 123 | 123 | 'documenttype' => $oDocumentType, |
| 124 | 124 | 'metadata' => $aFields, |
| 125 | + 'copy_upload' => 'true', | |
| 125 | 126 | ); |
| 126 | 127 | |
| 127 | 128 | $po =& new JavascriptObserver($this); | ... | ... |
plugins/ktcore/folder/BulkUpload.php
| ... | ... | @@ -114,7 +114,16 @@ class KTBulkUploadFolderAction extends KTFolderAction { |
| 114 | 114 | |
| 115 | 115 | unset($aErrorOptions['message']); |
| 116 | 116 | $aFile = $this->oValidator->validateFile($_FILES['file'], $aErrorOptions); |
| 117 | - | |
| 117 | + | |
| 118 | + // Ensure file is a zip file | |
| 119 | + $sMime = $aFile['type']; | |
| 120 | + $pos = strpos($sMime, 'x-zip-compressed'); | |
| 121 | + if($pos === false){ | |
| 122 | + $this->addErrorMessage(_kt("Bulk Upload failed: File is not a zip file.")); | |
| 123 | + controllerRedirect("browse", 'fFolderId=' . $this->oFolder->getID()); | |
| 124 | + exit(0); | |
| 125 | + } | |
| 126 | + | |
| 118 | 127 | $matches = array(); |
| 119 | 128 | $aFields = array(); |
| 120 | 129 | foreach ($_REQUEST as $k => $v) { |
| ... | ... | @@ -132,6 +141,7 @@ class KTBulkUploadFolderAction extends KTFolderAction { |
| 132 | 141 | $bm =& new KTBulkImportManager($this->oFolder, $fs, $this->oUser, $aOptions); |
| 133 | 142 | $this->startTransaction(); |
| 134 | 143 | $res = $bm->import(); |
| 144 | + | |
| 135 | 145 | $aErrorOptions['message'] = _kt("Bulk Upload failed"); |
| 136 | 146 | $this->oValidator->notError($res, $aErrorOptions); |
| 137 | 147 | ... | ... |
plugins/ktcore/folder/Permissions.php
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | 3 | * $Id$ |
| 4 | - * | |
| 4 | + * | |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | */ |
| 36 | 36 | |
| ... | ... | @@ -141,22 +141,22 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 141 | 141 | $sInherited = join(' > ', $oInherited->getPathArray()); |
| 142 | 142 | } |
| 143 | 143 | // only allow inheritance if not inherited, -and- folders is editable |
| 144 | - $bInheritable = $bEdit && ($oInherited->getId() !== $this->oFolder->getId()); | |
| 144 | + $bInheritable = $bEdit && ($oInherited->getId() !== $this->oFolder->getId()); | |
| 145 | 145 | // only allow edit if the folder is editable. |
| 146 | 146 | $bEdit = $bEdit && ($oInherited->getId() == $this->oFolder->getId()); |
| 147 | - | |
| 147 | + | |
| 148 | 148 | $aConditions = array(); |
| 149 | 149 | $aDynConditions = KTPermissionDynamicCondition::getByPermissionObject($oPO); |
| 150 | - | |
| 150 | + | |
| 151 | 151 | foreach ($aDynConditions as $oDynCondition) { |
| 152 | 152 | $g = Group::get($oDynCondition->getGroupId()); |
| 153 | 153 | if (is_null($g)) continue; // db integrity catch |
| 154 | - | |
| 154 | + | |
| 155 | 155 | if (PEAR::isError($g)) { continue; } |
| 156 | - $c = KTSavedSearch::get($oDynCondition->getConditionId()); | |
| 157 | - if (is_null($c)) continue; // db integrity catch | |
| 156 | + $c = KTSavedSearch::get($oDynCondition->getConditionId()); | |
| 157 | + if (is_null($c)) continue; // db integrity catch | |
| 158 | 158 | if (PEAR::isError($c)) { continue; } |
| 159 | - | |
| 159 | + | |
| 160 | 160 | $aInfo = array( |
| 161 | 161 | 'group' => $g->getName(), |
| 162 | 162 | 'name' => $c->getName(), |
| ... | ... | @@ -183,7 +183,7 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 183 | 183 | 'edit' => $bEdit, |
| 184 | 184 | 'inheritable' => $bInheritable, |
| 185 | 185 | 'inherited' => $sInherited, |
| 186 | - 'conditions' => $aConditions, | |
| 186 | + 'conditions' => $aConditions, | |
| 187 | 187 | ); |
| 188 | 188 | return $oTemplate->render($aTemplateData); |
| 189 | 189 | } |
| ... | ... | @@ -206,15 +206,20 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 206 | 206 | if (PEAR::isError($oPLA)) { |
| 207 | 207 | continue; |
| 208 | 208 | } |
| 209 | - $oDescriptor = KTPermissionDescriptor::get($oPLA->getPermissionDescriptorID()); | |
| 209 | + $oDescriptor =& KTPermissionDescriptor::get($oPLA->getPermissionDescriptorID()); | |
| 210 | 210 | $iPermissionID = $oPermission->getID(); |
| 211 | 211 | $aMapPermissionGroup[$iPermissionID] = array(); |
| 212 | - foreach ($aUsers as $oUser) { | |
| 213 | - if (KTPermissionUtil::userHasPermissionOnItem($oUser, $oPermission, $this->oFolder)) { | |
| 214 | - $aMapPermissionUser[$iPermissionID][$oUser->getId()] = true; | |
| 215 | - $aActiveUsers[$oUser->getId()] = true; | |
| 216 | - } | |
| 217 | - } | |
| 212 | + | |
| 213 | + $hasPermission = false; | |
| 214 | + $everyone = $oDescriptor->hasRoles(array(-3)); | |
| 215 | + $authenticated = $oDescriptor->hasRoles(array(-4)); | |
| 216 | + // TODO : paginate this page, when there are too many users | |
| 217 | + foreach ($aUsers as $oUser) { | |
| 218 | + if ($everyone || ($authenticated && $oUser->isAnonymous()) || | |
| 219 | + $oUser->hasPermission($oDescriptor)) { | |
| 220 | + $aMapPermissionUser[$iPermissionID][$oUser->getId()] = true; | |
| 221 | + } | |
| 222 | + } | |
| 218 | 223 | } |
| 219 | 224 | |
| 220 | 225 | // now we constitute the actual sets. |
| ... | ... | @@ -222,12 +227,7 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 222 | 227 | $groups = array(); |
| 223 | 228 | $roles = array(); // should _always_ be empty, barring a bug in permissions::updatePermissionLookup |
| 224 | 229 | |
| 225 | - // this should be quite limited - direct role -> user assignment is typically rare. | |
| 226 | - foreach ($aActiveUsers as $id => $marker) { | |
| 227 | - $oUser = User::get($id); | |
| 228 | - if (is_null($oUser)) continue; | |
| 229 | - $users[$oUser->getName()] = $oUser; | |
| 230 | - } | |
| 230 | + $users = $aUsers; | |
| 231 | 231 | asort($users); // ascending, per convention. |
| 232 | 232 | |
| 233 | 233 | $bEdit = false; |
| ... | ... | @@ -245,23 +245,12 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 245 | 245 | 'aMapPermissionUser' => $aMapPermissionUser, |
| 246 | 246 | 'edit' => $bEdit, |
| 247 | 247 | 'inherited' => $sInherited, |
| 248 | - 'foldername' => $this->oFolder->getName(), | |
| 249 | - 'iFolderId' => $this->oFolder->getId(), | |
| 248 | + 'foldername' => $this->oFolder->getName(), | |
| 249 | + 'iFolderId' => $this->oFolder->getId(), | |
| 250 | 250 | ); |
| 251 | 251 | return $oTemplate->render($aTemplateData); |
| 252 | 252 | } |
| 253 | 253 | |
| 254 | - | |
| 255 | - | |
| 256 | - | |
| 257 | - | |
| 258 | - | |
| 259 | - | |
| 260 | - | |
| 261 | - | |
| 262 | - | |
| 263 | - | |
| 264 | - | |
| 265 | 254 | function _copyPermissions() { |
| 266 | 255 | $oTransaction = KTFolderTransaction::createFromArray(array( |
| 267 | 256 | 'folderid' => $this->oFolder->getId(), |
| ... | ... | @@ -295,13 +284,13 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 295 | 284 | $oInherited = KTPermissionUtil::findRootObjectForPermissionObject($oPO); |
| 296 | 285 | if ($oInherited->getId() !== $this->oFolder->getId()) { |
| 297 | 286 | $override = KTUtil::arrayGet($_REQUEST, 'override', false); |
| 298 | - if (empty($override)) { | |
| 287 | + if (empty($override)) { | |
| 299 | 288 | $this->errorRedirectToMain(_kt('This folder does not override its permissions'), sprintf('fFolderId=%d', $this->oFolder->getId())); |
| 300 | 289 | } |
| 301 | 290 | $this->startTransaction(); |
| 302 | 291 | $this->_copyPermissions(); |
| 303 | 292 | $this->commitTransaction(); |
| 304 | - $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId()); | |
| 293 | + $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId()); | |
| 305 | 294 | } |
| 306 | 295 | |
| 307 | 296 | |
| ... | ... | @@ -325,15 +314,15 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 325 | 314 | |
| 326 | 315 | $perms = KTPermission::getList(); |
| 327 | 316 | $docperms = KTPermission::getDocumentRelevantList(); |
| 328 | - | |
| 329 | - $aTemplateData = array( | |
| 317 | + | |
| 318 | + $aTemplateData = array( | |
| 330 | 319 | 'iFolderId' => $this->oFolder->getId(), |
| 331 | 320 | 'roles' => Role::getList(), |
| 332 | 321 | 'groups' => Group::getList(), |
| 333 | 322 | 'conditions' => KTSavedSearch::getConditions(), |
| 334 | 323 | 'dynamic_conditions' => $aDynamicConditions, |
| 335 | 324 | 'context' => &$this, |
| 336 | - 'foldername' => $this->oFolder->getName(), | |
| 325 | + 'foldername' => $this->oFolder->getName(), | |
| 337 | 326 | 'jsonpermissions' => $sJSONPermissions, |
| 338 | 327 | 'edit' => true, |
| 339 | 328 | 'permissions' => $perms, |
| ... | ... | @@ -374,7 +363,7 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 374 | 363 | $aRoleIds = $oDescriptor->getRoles(); |
| 375 | 364 | foreach ($aRoleIds as $iId) { |
| 376 | 365 | $aPermissionsMap['role'][$iId][$iPermissionId] = true; |
| 377 | - } | |
| 366 | + } | |
| 378 | 367 | } |
| 379 | 368 | return $aPermissionsMap; |
| 380 | 369 | } |
| ... | ... | @@ -427,7 +416,7 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 427 | 416 | 'name' => $oGroup->getName(), |
| 428 | 417 | 'permissions' => $aPerm, |
| 429 | 418 | 'id' => $oGroup->getId()); |
| 430 | - } | |
| 419 | + } | |
| 431 | 420 | } |
| 432 | 421 | |
| 433 | 422 | $aRoles = Role::getList(sprintf('name like \'%%%s%%\'', $sFilter)); |
| ... | ... | @@ -436,9 +425,9 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 436 | 425 | if(!is_array($aPerm)) { |
| 437 | 426 | $aPerm = array(); |
| 438 | 427 | } |
| 439 | - | |
| 428 | + | |
| 440 | 429 | if($bSelected) { |
| 441 | - if(count($aPerm)) | |
| 430 | + if(count($aPerm)) | |
| 442 | 431 | $aEntityList['r'.$oRole->getId()] = array('type' => 'role', |
| 443 | 432 | 'display' => _kt('Role') . ': ' . $oRole->getName(), |
| 444 | 433 | 'name' => $oRole->getName(), |
| ... | ... | @@ -453,7 +442,7 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 453 | 442 | 'id' => $oRole->getId()); |
| 454 | 443 | } |
| 455 | 444 | } |
| 456 | - } | |
| 445 | + } | |
| 457 | 446 | return $aEntityList; |
| 458 | 447 | } |
| 459 | 448 | ... | ... |
plugins/ktcore/folder/addDocument.php
| ... | ... | @@ -324,7 +324,7 @@ class KTFolderAddDocumentAction extends KTFolderAction { |
| 324 | 324 | ); |
| 325 | 325 | |
| 326 | 326 | $mpo->start(); |
| 327 | - $this->startTransaction(); | |
| 327 | + //$this->startTransaction(); | |
| 328 | 328 | $oDocument =& KTDocumentUtil::add($this->oFolder, basename($aFile['name']), $this->oUser, $aOptions); |
| 329 | 329 | if (PEAR::isError($oDocument)) { |
| 330 | 330 | $message = $oDocument->getMessage(); |
| ... | ... | @@ -333,7 +333,7 @@ class KTFolderAddDocumentAction extends KTFolderAction { |
| 333 | 333 | } |
| 334 | 334 | $this->addInfoMessage(_kt("Document added")); |
| 335 | 335 | |
| 336 | - $this->commitTransaction(); | |
| 336 | + //$this->commitTransaction(); | |
| 337 | 337 | $mpo->redirectToDocument($oDocument->getId()); |
| 338 | 338 | exit(0); |
| 339 | 339 | ... | ... |
plugins/ktstandard/KTBulkExportPlugin.php
| ... | ... | @@ -5,32 +5,32 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | * |
| 36 | 36 | */ |
| ... | ... | @@ -109,9 +109,24 @@ class KTBulkExportAction extends KTFolderAction { |
| 109 | 109 | $this->oPage->template = "kt3/minimal_page"; |
| 110 | 110 | $this->handleOutput(""); |
| 111 | 111 | |
| 112 | + // Create associative array of folder items for use by the contained documents | |
| 113 | + $aFolderObjects = array(); | |
| 114 | + $aFolderObjects[$sCurrentFolderId] = $this->oFolder; | |
| 115 | + | |
| 116 | + // Export the folder structure to ensure the export of empty directories | |
| 117 | + if(!empty($aFolderList)){ | |
| 118 | + foreach($aFolderList as $k => $oFolderItem){ | |
| 119 | + $this->oZip->addFolderToZip($oFolderItem); | |
| 120 | + $aFolderObjects[$oFolderItem->getId()] = $oFolderItem; | |
| 121 | + } | |
| 122 | + } | |
| 123 | + | |
| 112 | 124 | if(!empty($aDocumentIds)){ |
| 113 | 125 | foreach ($aDocumentIds as $iId) { |
| 114 | 126 | $oDocument = Document::get($iId); |
| 127 | + $sFolderId = $oDocument->getFolderID(); | |
| 128 | + | |
| 129 | + $oFolder = isset($aFolderObjects[$sFolderId]) ? $aFolderObjects[$sFolderId] : Folder::get($sFolderId); | |
| 115 | 130 | |
| 116 | 131 | if ($bNoisy) { |
| 117 | 132 | $oDocumentTransaction = & new DocumentTransaction($oDocument, "Document part of bulk export", 'ktstandard.transactions.bulk_export', array()); |
| ... | ... | @@ -121,19 +136,13 @@ class KTBulkExportAction extends KTFolderAction { |
| 121 | 136 | // fire subscription alerts for the downloaded document |
| 122 | 137 | if($bNotifications){ |
| 123 | 138 | $oSubscriptionEvent = new SubscriptionEvent(); |
| 124 | - $oFolder = Folder::get($oDocument->getFolderID()); | |
| 125 | 139 | $oSubscriptionEvent->DownloadDocument($oDocument, $oFolder); |
| 126 | 140 | } |
| 127 | 141 | |
| 128 | - $this->oZip->addDocumentToZip($oDocument); | |
| 142 | + $this->oZip->addDocumentToZip($oDocument, $oFolder); | |
| 129 | 143 | } |
| 130 | 144 | } |
| 131 | 145 | |
| 132 | - // Export the folder structure to ensure the export of empty directories | |
| 133 | - foreach($aFolderList as $k => $oFolderItem){ | |
| 134 | - $this->oZip->addFolderToZip($oFolderItem); | |
| 135 | - } | |
| 136 | - | |
| 137 | 146 | $sExportCode = $this->oZip->createZipFile(TRUE); |
| 138 | 147 | |
| 139 | 148 | $oTransaction = KTFolderTransaction::createFromArray(array( |
| ... | ... | @@ -168,7 +177,7 @@ class KTBulkExportAction extends KTFolderAction { |
| 168 | 177 | return $res; |
| 169 | 178 | } |
| 170 | 179 | list($sPermissionString, $aPermissionParams, $sPermissionJoin) = $res; |
| 171 | - $aPotentialWhere = array($sPermissionString, 'D.parent_folder_ids = ? OR D.parent_folder_ids LIKE ?', 'D.status_id = 1'); | |
| 180 | + $aPotentialWhere = array($sPermissionString, 'D.folder_id = ? OR D.parent_folder_ids = ? OR D.parent_folder_ids LIKE ?', 'D.status_id = 1'); | |
| 172 | 181 | $aWhere = array(); |
| 173 | 182 | foreach ($aPotentialWhere as $sWhere) { |
| 174 | 183 | if (empty($sWhere)) { |
| ... | ... | @@ -202,6 +211,7 @@ class KTBulkExportAction extends KTFolderAction { |
| 202 | 211 | array_shift($aParentFolderIds); |
| 203 | 212 | } |
| 204 | 213 | $sParentFolderIds = join(',', $aParentFolderIds); |
| 214 | + $aParams[] = $this->oFolder->getId(); | |
| 205 | 215 | $aParams[] = $sParentFolderIds; |
| 206 | 216 | $aParams[] = $sParentFolderIds . ",%"; |
| 207 | 217 | return array($sQuery, $aParams); | ... | ... |
plugins/search2/LuceneStatisticsDashlet.php
| ... | ... | @@ -6,32 +6,32 @@ |
| 6 | 6 | * KnowledgeTree Open Source Edition |
| 7 | 7 | * Document Management Made Simple |
| 8 | 8 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 9 | - * | |
| 9 | + * | |
| 10 | 10 | * This program is free software; you can redistribute it and/or modify it under |
| 11 | 11 | * the terms of the GNU General Public License version 3 as published by the |
| 12 | 12 | * Free Software Foundation. |
| 13 | - * | |
| 13 | + * | |
| 14 | 14 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 15 | 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 16 | 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 17 | 17 | * details. |
| 18 | - * | |
| 18 | + * | |
| 19 | 19 | * You should have received a copy of the GNU General Public License |
| 20 | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 21 | - * | |
| 21 | + * | |
| 22 | 22 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 23 | 23 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 24 | - * | |
| 24 | + * | |
| 25 | 25 | * The interactive user interfaces in modified source and object code versions |
| 26 | 26 | * of this program must display Appropriate Legal Notices, as required under |
| 27 | 27 | * Section 5 of the GNU General Public License version 3. |
| 28 | - * | |
| 28 | + * | |
| 29 | 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 30 | 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 | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | 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. | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | + * copyright notice. | |
| 35 | 35 | * Contributor( s): ______________________________________ |
| 36 | 36 | * |
| 37 | 37 | */ |
| ... | ... | @@ -100,7 +100,8 @@ class LuceneStatisticsDashlet extends KTBaseDashlet |
| 100 | 100 | $index = Indexer::get(); |
| 101 | 101 | $docsInIndex = $index->getDocumentsInIndex(); |
| 102 | 102 | |
| 103 | - $sql = "SELECT count(*) as docsInQueue FROM index_files"; | |
| 103 | + // we are only interested in documents that are active | |
| 104 | + $sql = "SELECT count(*) as docsInQueue FROM index_files q INNER JOIN documents d on q.document_id=d.id WHERE d.status_id=1"; | |
| 104 | 105 | $docsInQueue = DBUtil::getOneResultKey($sql, 'docsInQueue'); |
| 105 | 106 | |
| 106 | 107 | $sql = "SELECT count(*) as docsInRepository FROM documents"; | ... | ... |
plugins/tagcloud/TagCloudDashlet.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | /* |
| 4 | - * $Id:$ | |
| 4 | + * $Id$ | |
| 5 | 5 | * |
| 6 | 6 | * KnowledgeTree Open Source Edition |
| 7 | 7 | * Document Management Made Simple |
| ... | ... | @@ -134,13 +134,12 @@ class TagCloudDashlet extends KTBaseDashlet { |
| 134 | 134 | return false; |
| 135 | 135 | } |
| 136 | 136 | list($where, $params, $joins) = KTSearchUtil::permissionToSQL($this->oUser, null); |
| 137 | - | |
| 138 | 137 | $sql = " |
| 139 | 138 | SELECT |
| 140 | 139 | TW.tag, count(*) as freq |
| 141 | 140 | FROM |
| 142 | 141 | document_tags DT INNER JOIN tag_words TW ON DT.tag_id=TW.id |
| 143 | - WHERE DT.document_id in (SELECT D.id FROM documents D $joins WHERE $where) GROUP BY TW.tag"; | |
| 142 | + WHERE DT.document_id in (SELECT D.id FROM documents D $joins WHERE $where AND D.status_id = '1') GROUP BY TW.tag"; | |
| 144 | 143 | |
| 145 | 144 | $tags = DBUtil::getResultArray( |
| 146 | 145 | array($sql,$params) | ... | ... |
plugins/tagcloud/TagCloudPlugin.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | /* |
| 4 | - * $Id:$ | |
| 4 | + * $Id$ | |
| 5 | 5 | * |
| 6 | 6 | * KnowledgeTree Open Source Edition |
| 7 | 7 | * Document Management Made Simple |
| ... | ... | @@ -70,10 +70,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); |
| 70 | 70 | $this->registerCriterion('TagCloudCriterion', 'ktcore.criteria.tagcloud', KT_LIB_DIR . '/browse/Criteria.inc'); |
| 71 | 71 | $this->registerDashlet('TagCloudDashlet', 'ktcore.tagcloud.feed.dashlet', 'TagCloudDashlet.php'); |
| 72 | 72 | $this->registerPage('TagCloudRedirection', 'TagCloudRedirectPage', __FILE__); |
| 73 | - $this->registerTrigger('add', 'postValidate', 'KTAddDocumentTrigger', | |
| 74 | - 'ktcore.triggers.tagcloud.add'); | |
| 75 | - $this->registerTrigger('edit', 'postValidate', 'KTEditDocumentTrigger', | |
| 76 | - 'ktcore.triggers.tagcloud.edit'); | |
| 73 | + | |
| 77 | 74 | |
| 78 | 75 | // Check if the tagcloud fielset entry exists, if not, create it |
| 79 | 76 | if(!TagCloudPlugin::tagFieldsetExists()){ |
| ... | ... | @@ -192,213 +189,4 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); |
| 192 | 189 | $oPluginRegistry =& KTPluginRegistry::getSingleton(); |
| 193 | 190 | $oPluginRegistry->registerPlugin('TagCloudPlugin', 'ktcore.tagcloud.plugin', __FILE__); |
| 194 | 191 | |
| 195 | -/** | |
| 196 | - * Trigger for document add (postValidate) | |
| 197 | - * | |
| 198 | - */ | |
| 199 | -class KTAddDocumentTrigger { | |
| 200 | - var $aInfo = null; | |
| 201 | - /** | |
| 202 | - * function to set the info for the trigger | |
| 203 | - * | |
| 204 | - * @param array $aInfo | |
| 205 | - */ | |
| 206 | - function setInfo(&$aInfo) { | |
| 207 | - $this->aInfo =& $aInfo; | |
| 208 | - } | |
| 209 | - | |
| 210 | - /** | |
| 211 | - * postValidate method for trigger | |
| 212 | - * | |
| 213 | - * @return unknown | |
| 214 | - */ | |
| 215 | - function postValidate() { | |
| 216 | - global $default; | |
| 217 | - $oDocument =& $this->aInfo['document']; | |
| 218 | - $aMeta = & $this->aInfo['aOptions']; | |
| 219 | - | |
| 220 | - $iDocId = $oDocument->getID(); | |
| 221 | - | |
| 222 | - // get tag id from document_fields table where name = Tag | |
| 223 | - $sQuery = 'SELECT df.id AS id FROM document_fields AS df ' . | |
| 224 | - 'WHERE df.name = \'Tag\''; | |
| 225 | - | |
| 226 | - $sTags = DBUtil::getOneResultKey(array($sQuery), 'id'); | |
| 227 | - if (PEAR::isError($sTags)) { | |
| 228 | - // XXX: log error | |
| 229 | - return false; | |
| 230 | - } | |
| 231 | - $tagString = ''; | |
| 232 | - // add tags | |
| 233 | - if ($sTags) { | |
| 234 | - if (count($aMeta['metadata']) > 0) | |
| 235 | - { | |
| 236 | - foreach($aMeta['metadata'] as $aMetaData) | |
| 237 | - { | |
| 238 | - | |
| 239 | - $oProxy = $aMetaData[0]; | |
| 240 | - if($oProxy->iId == $sTags) | |
| 241 | - { | |
| 242 | - $tagString = $aMetaData[1]; | |
| 243 | - } | |
| 244 | - } | |
| 245 | - } | |
| 246 | - if($tagString != ''){ | |
| 247 | - $words_table = KTUtil::getTableName('tag_words'); | |
| 248 | - $tagString = str_replace(' ', '', $tagString); | |
| 249 | - $tags = explode(',',$tagString); | |
| 250 | - | |
| 251 | - $aTagIds = array(); | |
| 252 | - | |
| 253 | - foreach($tags as $sTag) | |
| 254 | - { | |
| 255 | - $sTag=strtolower(trim($sTag)); | |
| 256 | - | |
| 257 | - $res = DBUtil::getOneResult(array("SELECT id FROM $words_table WHERE tag = ?", array($sTag))); | |
| 258 | - | |
| 259 | - if (PEAR::isError($res)) { | |
| 260 | - return $res; | |
| 261 | - } | |
| 262 | - | |
| 263 | - if (is_null($res)) | |
| 264 | - { | |
| 265 | - $id = & DBUtil::autoInsert($words_table, array('tag'=>$sTag)); | |
| 266 | - $aTagIds[$sTag] = $id; | |
| 267 | - } | |
| 268 | - else | |
| 269 | - { | |
| 270 | - $aTagIds[$sTag] = $res['id']; | |
| 271 | - } | |
| 272 | - } | |
| 273 | - | |
| 274 | - $doc_tags = KTUtil::getTableName('document_tags'); | |
| 275 | - | |
| 276 | - foreach($aTagIds as $sTag=>$tagid) | |
| 277 | - { | |
| 278 | - DBUtil::autoInsert($doc_tags, array( | |
| 279 | - | |
| 280 | - 'document_id'=>$iDocId, | |
| 281 | - 'tag_id'=>$tagid), | |
| 282 | - array('noid'=>true)); | |
| 283 | - } | |
| 284 | - } | |
| 285 | - } | |
| 286 | - } | |
| 287 | -} | |
| 288 | - | |
| 289 | -/** | |
| 290 | - * Trigger for document edit (postValidate) | |
| 291 | - * | |
| 292 | - */ | |
| 293 | -class KTEditDocumentTrigger { | |
| 294 | - var $aInfo = null; | |
| 295 | - /** | |
| 296 | - * function to set the info for the trigger | |
| 297 | - * | |
| 298 | - * @param array $aInfo | |
| 299 | - */ | |
| 300 | - function setInfo(&$aInfo) { | |
| 301 | - $this->aInfo =& $aInfo; | |
| 302 | - } | |
| 303 | - | |
| 304 | - /** | |
| 305 | - * postValidate method for trigger | |
| 306 | - * | |
| 307 | - * @return unknown | |
| 308 | - */ | |
| 309 | - function postValidate() { | |
| 310 | - global $default; | |
| 311 | - $oDocument =& $this->aInfo['document']; | |
| 312 | - $aMeta = & $this->aInfo['aOptions']; | |
| 313 | - // get document id | |
| 314 | - $iDocId = $oDocument->getID(); | |
| 315 | - | |
| 316 | - // get all tags that are linked to the document | |
| 317 | - $sQuery = 'SELECT tw.id FROM tag_words AS tw, document_tags AS dt, documents AS d ' . | |
| 318 | - 'WHERE dt.tag_id = tw.id ' . | |
| 319 | - 'AND dt.document_id = d.id ' . | |
| 320 | - 'AND d.id = ?'; | |
| 321 | - $aParams = array($iDocId); | |
| 322 | - $aTagId = DBUtil::getResultArray(array($sQuery, $aParams)); | |
| 323 | - if (PEAR::isError($aTagId)) { | |
| 324 | - // XXX: log error | |
| 325 | - return false; | |
| 326 | - } | |
| 327 | - // if there are any related tags proceed | |
| 328 | - if ($aTagId) { | |
| 329 | - // delete all entries from document_tags table for the document | |
| 330 | - $sQuery = 'DELETE FROM document_tags ' . | |
| 331 | - 'WHERE document_id = ?'; | |
| 332 | - $aParams = array($iDocId); | |
| 333 | - $removed = DBUtil::runQuery(array($sQuery, $aParams)); | |
| 334 | - if (PEAR::isError($removed)) { | |
| 335 | - // XXX: log error | |
| 336 | - return false; | |
| 337 | - } | |
| 338 | - } | |
| 339 | - // proceed to add the tags as per normaly | |
| 340 | - $sQuery = 'SELECT df.id AS id FROM document_fields AS df ' . | |
| 341 | - 'WHERE df.name = \'Tag\''; | |
| 342 | - | |
| 343 | - $sTags = DBUtil::getOneResultKey(array($sQuery), 'id'); | |
| 344 | - if (PEAR::isError($sTags)) { | |
| 345 | - // XXX: log error | |
| 346 | - return false; | |
| 347 | - } | |
| 348 | - $tagString = ''; | |
| 349 | - if ($sTags) { | |
| 350 | - // it is actually correct using $aMeta. It is different to the add trigger above... | |
| 351 | - if (count($aMeta) > 0) | |
| 352 | - { | |
| 353 | - foreach($aMeta as $aMetaData) | |
| 354 | - { | |
| 355 | - $oProxy = $aMetaData[0]; | |
| 356 | - if($oProxy->iId == $sTags) | |
| 357 | - { | |
| 358 | - $tagString = $aMetaData[1]; | |
| 359 | - break; | |
| 360 | - } | |
| 361 | - } | |
| 362 | - } | |
| 363 | - if($tagString != ''){ | |
| 364 | - $words_table = KTUtil::getTableName('tag_words'); | |
| 365 | - $tagString = str_replace(' ', ' ', $tagString); | |
| 366 | - $tags = explode(',',$tagString); | |
| 367 | - | |
| 368 | - $aTagIds = array(); | |
| 369 | - | |
| 370 | - foreach($tags as $sTag) | |
| 371 | - { | |
| 372 | - $sTag=strtolower(trim($sTag)); | |
| 373 | - | |
| 374 | - $res = DBUtil::getOneResult(array("SELECT id FROM $words_table WHERE tag = ?", array($sTag))); | |
| 375 | - | |
| 376 | - if (PEAR::isError($res)) { | |
| 377 | - return $res; | |
| 378 | - } | |
| 379 | - | |
| 380 | - if (is_null($res)) | |
| 381 | - { | |
| 382 | - $id = & DBUtil::autoInsert($words_table, array('tag'=>$sTag)); | |
| 383 | - $aTagIds[$sTag] = $id; | |
| 384 | - } | |
| 385 | - else | |
| 386 | - { | |
| 387 | - $aTagIds[$sTag] = $res['id']; | |
| 388 | - } | |
| 389 | - } | |
| 390 | - | |
| 391 | - $doc_tags = KTUtil::getTableName('document_tags'); | |
| 392 | - | |
| 393 | - foreach($aTagIds as $sTag=>$tagid) | |
| 394 | - { | |
| 395 | - DBUtil::autoInsert($doc_tags, array( | |
| 396 | - 'document_id'=>$iDocId, | |
| 397 | - 'tag_id'=>$tagid), | |
| 398 | - array('noid'=>true)); | |
| 399 | - } | |
| 400 | - } | |
| 401 | - } | |
| 402 | - } | |
| 403 | -} | |
| 404 | 192 | ?> | ... | ... |
plugins/tagcloud/TagCloudTriggers.php
0 โ 100644
| 1 | +<?php | |
| 2 | +/* | |
| 3 | + * $Id: $ | |
| 4 | + * | |
| 5 | + * KnowledgeTree Open Source Edition | |
| 6 | + * Document Management Made Simple | |
| 7 | + * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited | |
| 8 | + * | |
| 9 | + * This program is free software; you can redistribute it and/or modify it under | |
| 10 | + * the terms of the GNU General Public License version 3 as published by the | |
| 11 | + * Free Software Foundation. | |
| 12 | + * | |
| 13 | + * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 14 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 15 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 16 | + * details. | |
| 17 | + * | |
| 18 | + * You should have received a copy of the GNU General Public License | |
| 19 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 20 | + * | |
| 21 | + * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | |
| 22 | + * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | |
| 23 | + * | |
| 24 | + * The interactive user interfaces in modified source and object code versions | |
| 25 | + * of this program must display Appropriate Legal Notices, as required under | |
| 26 | + * Section 5 of the GNU General Public License version 3. | |
| 27 | + * | |
| 28 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 29 | + * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | + * Contributor( s): ______________________________________ | |
| 35 | + * | |
| 36 | + */ | |
| 37 | +/** | |
| 38 | + * Trigger for document add (postValidate) | |
| 39 | + * | |
| 40 | + */ | |
| 41 | +class KTAddDocumentTrigger { | |
| 42 | + var $aInfo = null; | |
| 43 | + /** | |
| 44 | + * function to set the info for the trigger | |
| 45 | + * | |
| 46 | + * @param array $aInfo | |
| 47 | + */ | |
| 48 | + function setInfo(&$aInfo) { | |
| 49 | + $this->aInfo =& $aInfo; | |
| 50 | + } | |
| 51 | + | |
| 52 | + /** | |
| 53 | + * postValidate method for trigger | |
| 54 | + * | |
| 55 | + * @return unknown | |
| 56 | + */ | |
| 57 | + function postValidate() { | |
| 58 | + global $default; | |
| 59 | + $oDocument =& $this->aInfo['document']; | |
| 60 | + $aMeta = & $this->aInfo['aOptions']; | |
| 61 | + | |
| 62 | + $iDocId = $oDocument->getID(); | |
| 63 | + | |
| 64 | + // get tag id from document_fields table where name = Tag | |
| 65 | + $sQuery = 'SELECT df.id AS id FROM document_fields AS df ' . | |
| 66 | + 'WHERE df.name = \'Tag\''; | |
| 67 | + | |
| 68 | + $sTags = DBUtil::getOneResultKey(array($sQuery), 'id'); | |
| 69 | + if (PEAR::isError($sTags)) { | |
| 70 | + // XXX: log error | |
| 71 | + return false; | |
| 72 | + } | |
| 73 | + $tagString = ''; | |
| 74 | + // add tags | |
| 75 | + if ($sTags) { | |
| 76 | + if (count($aMeta['metadata']) > 0) | |
| 77 | + { | |
| 78 | + foreach($aMeta['metadata'] as $aMetaData) | |
| 79 | + { | |
| 80 | + | |
| 81 | + $oProxy = $aMetaData[0]; | |
| 82 | + if($oProxy->iId == $sTags) | |
| 83 | + { | |
| 84 | + $tagString = $aMetaData[1]; | |
| 85 | + } | |
| 86 | + } | |
| 87 | + } | |
| 88 | + if($tagString != ''){ | |
| 89 | + $words_table = KTUtil::getTableName('tag_words'); | |
| 90 | + $tagString = str_replace(' ', '', $tagString); | |
| 91 | + $tags = explode(',',$tagString); | |
| 92 | + | |
| 93 | + $aTagIds = array(); | |
| 94 | + | |
| 95 | + foreach($tags as $sTag) | |
| 96 | + { | |
| 97 | + $sTag=strtolower(trim($sTag)); | |
| 98 | + | |
| 99 | + $res = DBUtil::getOneResult(array("SELECT id FROM $words_table WHERE tag = ?", array($sTag))); | |
| 100 | + | |
| 101 | + if (PEAR::isError($res)) { | |
| 102 | + return $res; | |
| 103 | + } | |
| 104 | + | |
| 105 | + if (is_null($res)) | |
| 106 | + { | |
| 107 | + $id = & DBUtil::autoInsert($words_table, array('tag'=>$sTag)); | |
| 108 | + $aTagIds[$sTag] = $id; | |
| 109 | + } | |
| 110 | + else | |
| 111 | + { | |
| 112 | + $aTagIds[$sTag] = $res['id']; | |
| 113 | + } | |
| 114 | + } | |
| 115 | + | |
| 116 | + $doc_tags = KTUtil::getTableName('document_tags'); | |
| 117 | + | |
| 118 | + foreach($aTagIds as $sTag=>$tagid) | |
| 119 | + { | |
| 120 | + DBUtil::autoInsert($doc_tags, array( | |
| 121 | + | |
| 122 | + 'document_id'=>$iDocId, | |
| 123 | + 'tag_id'=>$tagid), | |
| 124 | + array('noid'=>true)); | |
| 125 | + } | |
| 126 | + } | |
| 127 | + } | |
| 128 | + } | |
| 129 | +} | |
| 130 | + | |
| 131 | + | |
| 132 | +/** | |
| 133 | + * Trigger for document edit (postValidate) | |
| 134 | + * | |
| 135 | + */ | |
| 136 | +class KTEditDocumentTrigger { | |
| 137 | + var $aInfo = null; | |
| 138 | + /** | |
| 139 | + * function to set the info for the trigger | |
| 140 | + * | |
| 141 | + * @param array $aInfo | |
| 142 | + */ | |
| 143 | + function setInfo(&$aInfo) { | |
| 144 | + $this->aInfo =& $aInfo; | |
| 145 | + } | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * postValidate method for trigger | |
| 149 | + * | |
| 150 | + * @return unknown | |
| 151 | + */ | |
| 152 | + function postValidate() { | |
| 153 | + global $default; | |
| 154 | + $oDocument =& $this->aInfo['document']; | |
| 155 | + $aMeta = & $this->aInfo['aOptions']; | |
| 156 | + // get document id | |
| 157 | + $iDocId = $oDocument->getID(); | |
| 158 | + | |
| 159 | + // get all tags that are linked to the document | |
| 160 | + $sQuery = 'SELECT tw.id FROM tag_words AS tw, document_tags AS dt, documents AS d ' . | |
| 161 | + 'WHERE dt.tag_id = tw.id ' . | |
| 162 | + 'AND dt.document_id = d.id ' . | |
| 163 | + 'AND d.id = ?'; | |
| 164 | + $aParams = array($iDocId); | |
| 165 | + $aTagId = DBUtil::getResultArray(array($sQuery, $aParams)); | |
| 166 | + if (PEAR::isError($aTagId)) { | |
| 167 | + // XXX: log error | |
| 168 | + return false; | |
| 169 | + } | |
| 170 | + // if there are any related tags proceed | |
| 171 | + if ($aTagId) { | |
| 172 | + // delete all entries from document_tags table for the document | |
| 173 | + $sQuery = 'DELETE FROM document_tags ' . | |
| 174 | + 'WHERE document_id = ?'; | |
| 175 | + $aParams = array($iDocId); | |
| 176 | + $removed = DBUtil::runQuery(array($sQuery, $aParams)); | |
| 177 | + if (PEAR::isError($removed)) { | |
| 178 | + // XXX: log error | |
| 179 | + return false; | |
| 180 | + } | |
| 181 | + } | |
| 182 | + // proceed to add the tags as per normaly | |
| 183 | + $sQuery = 'SELECT df.id AS id FROM document_fields AS df ' . | |
| 184 | + 'WHERE df.name = \'Tag\''; | |
| 185 | + | |
| 186 | + $sTags = DBUtil::getOneResultKey(array($sQuery), 'id'); | |
| 187 | + if (PEAR::isError($sTags)) { | |
| 188 | + // XXX: log error | |
| 189 | + return false; | |
| 190 | + } | |
| 191 | + $tagString = ''; | |
| 192 | + if ($sTags) { | |
| 193 | + // it is actually correct using $aMeta. It is different to the add trigger above... | |
| 194 | + if (count($aMeta) > 0) | |
| 195 | + { | |
| 196 | + foreach($aMeta as $aMetaData) | |
| 197 | + { | |
| 198 | + $oProxy = $aMetaData[0]; | |
| 199 | + if($oProxy->iId == $sTags) | |
| 200 | + { | |
| 201 | + $tagString = $aMetaData[1]; | |
| 202 | + break; | |
| 203 | + } | |
| 204 | + } | |
| 205 | + } | |
| 206 | + if($tagString != ''){ | |
| 207 | + $words_table = KTUtil::getTableName('tag_words'); | |
| 208 | + $tagString = str_replace(' ', ' ', $tagString); | |
| 209 | + $tags = explode(',',$tagString); | |
| 210 | + | |
| 211 | + $aTagIds = array(); | |
| 212 | + | |
| 213 | + foreach($tags as $sTag) | |
| 214 | + { | |
| 215 | + $sTag=strtolower(trim($sTag)); | |
| 216 | + | |
| 217 | + $res = DBUtil::getOneResult(array("SELECT id FROM $words_table WHERE tag = ?", array($sTag))); | |
| 218 | + | |
| 219 | + if (PEAR::isError($res)) { | |
| 220 | + return $res; | |
| 221 | + } | |
| 222 | + | |
| 223 | + if (is_null($res)) | |
| 224 | + { | |
| 225 | + $id = & DBUtil::autoInsert($words_table, array('tag'=>$sTag)); | |
| 226 | + $aTagIds[$sTag] = $id; | |
| 227 | + } | |
| 228 | + else | |
| 229 | + { | |
| 230 | + $aTagIds[$sTag] = $res['id']; | |
| 231 | + } | |
| 232 | + } | |
| 233 | + | |
| 234 | + $doc_tags = KTUtil::getTableName('document_tags'); | |
| 235 | + | |
| 236 | + foreach($aTagIds as $sTag=>$tagid) | |
| 237 | + { | |
| 238 | + DBUtil::autoInsert($doc_tags, array( | |
| 239 | + 'document_id'=>$iDocId, | |
| 240 | + 'tag_id'=>$tagid), | |
| 241 | + array('noid'=>true)); | |
| 242 | + } | |
| 243 | + } | |
| 244 | + } | |
| 245 | + } | |
| 246 | +} | |
| 247 | +?> | |
| 0 | 248 | \ No newline at end of file | ... | ... |
resources/css/error_01.gif
0 โ 100644
2.09 KB
resources/css/errors.css
0 โ 100644
| 1 | +div#error-container { | |
| 2 | + width: 500px; | |
| 3 | + color: #555; | |
| 4 | + font-size: 11px; | |
| 5 | + font-family: Verdana, Arial, sans-serif; | |
| 6 | +} | |
| 7 | +div#error-container div { | |
| 8 | + height: 140px; | |
| 9 | +} | |
| 10 | +div#error-container h1 { | |
| 11 | + font-weight: lighter; | |
| 12 | + font-size: 22px; | |
| 13 | + margin-left: 100px; | |
| 14 | +} | |
| 15 | +div#error-container p { | |
| 16 | + margin-left: 100px; | |
| 17 | +} | |
| 18 | + | |
| 19 | + div#acc-error { | |
| 20 | + background: transparent url(error_01.gif) no-repeat top left; | |
| 21 | + } | |
| 22 | + div#acc-suspend { | |
| 23 | + background: transparent url(error_02.gif) no-repeat top left; | |
| 24 | + } | |
| 25 | + div#acc-maint { | |
| 26 | + background: transparent url(error_03.gif) no-repeat top left; | |
| 27 | + } | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 0 | 44 | \ No newline at end of file | ... | ... |
search2/indexing/extractorCore.inc.php
| ... | ... | @@ -349,8 +349,21 @@ abstract class ExternalDocumentExtractor extends DocumentExtractor |
| 349 | 349 | */ |
| 350 | 350 | protected function exec($cmd) |
| 351 | 351 | { |
| 352 | - $aRet = KTUtil::pexec($cmd); | |
| 353 | - return $aRet['ret'] == 0; | |
| 352 | + if (OS_WINDOWS) | |
| 353 | + { | |
| 354 | + | |
| 355 | + | |
| 356 | + $WshShell = new COM("WScript.Shell"); | |
| 357 | + $res = $WshShell->Run($cmd, 0, true); | |
| 358 | + | |
| 359 | + | |
| 360 | + return $res == 0; | |
| 361 | + } | |
| 362 | + else | |
| 363 | + { | |
| 364 | + $aRet = KTUtil::pexec($cmd); | |
| 365 | + return $aRet['ret'] == 0; | |
| 366 | + } | |
| 354 | 367 | } |
| 355 | 368 | |
| 356 | 369 | /** |
| ... | ... | @@ -456,7 +469,8 @@ abstract class ApplicationExtractor extends ExternalDocumentExtractor |
| 456 | 469 | { |
| 457 | 470 | $sources = array('{source}','{target}'); |
| 458 | 471 | $target = array($this->sourcefile, $this->targetfile); |
| 459 | - $cmdline = $this->application . ' ' . str_replace($sources,$target, $this->params); | |
| 472 | + $escape = OS_WINDOWS?'"':'\''; | |
| 473 | + $cmdline = $escape . $this->application . $escape . ' ' . str_replace($sources,$target, $this->params); | |
| 460 | 474 | |
| 461 | 475 | return $cmdline; |
| 462 | 476 | } | ... | ... |
search2/indexing/extractors/OOPresentationExtractor.inc.php
| ... | ... | @@ -56,6 +56,7 @@ class OOPresentationExtractor extends CompositeExtractor |
| 56 | 56 | public function getSupportedMimeTypes() |
| 57 | 57 | { |
| 58 | 58 | return array( |
| 59 | + 'application/vnd.ms-powerpoint', | |
| 59 | 60 | 'application/vnd.oasis.opendocument.presentation', |
| 60 | 61 | 'application/vnd.oasis.opendocument.presentation-template', |
| 61 | 62 | ); | ... | ... |
search2/indexing/extractors/OOTextExtractor.inc.php
| ... | ... | @@ -88,14 +88,16 @@ class OOTextExtractor extends ExternalDocumentExtractor |
| 88 | 88 | |
| 89 | 89 | protected function getCommandLine() |
| 90 | 90 | { |
| 91 | - $sourcefile = escapeshellcmd($this->sourcefile); | |
| 91 | + //$sourcefile = escapeshellcmd($this->sourcefile); | |
| 92 | + $sourcefile = ($this->sourcefile); | |
| 92 | 93 | unlink($this->targetfile); |
| 93 | 94 | $this->targetfile .= '.' . $this->targetExtension; |
| 94 | - $targetfile = escapeshellcmd($this->targetfile); | |
| 95 | + //$targetfile = escapeshellcmd($this->targetfile); | |
| 96 | + $targetfile = ($this->targetfile); | |
| 95 | 97 | |
| 96 | 98 | $escape = OS_WINDOWS?'"':'\''; |
| 97 | 99 | |
| 98 | - $cmdline = "{$this->python} {$escape}{$this->documentConverter}{$escape} {$escape}{$sourcefile}{$escape} {$escape}{$targetfile}{$escape} {$this->ooHost} {$this->ooPort}"; | |
| 100 | + $cmdline = "{$escape}{$this->python}{$escape} {$escape}{$this->documentConverter}{$escape} {$escape}{$sourcefile}{$escape} {$escape}{$targetfile}{$escape} {$this->ooHost} {$this->ooPort}"; | |
| 99 | 101 | return $cmdline; |
| 100 | 102 | } |
| 101 | 103 | ... | ... |
search2/indexing/indexerCore.inc.php
| ... | ... | @@ -67,6 +67,10 @@ class QueryResultItem |
| 67 | 67 | protected $deleted; |
| 68 | 68 | protected $status; |
| 69 | 69 | protected $folderId; |
| 70 | + protected $storagePath; | |
| 71 | + protected $documentType; | |
| 72 | + protected $mimeIconPath; | |
| 73 | + protected $mimeDisplay; | |
| 70 | 74 | |
| 71 | 75 | public function __construct($document_id, $rank=null, $title=null, $text=null) |
| 72 | 76 | { |
| ... | ... | @@ -100,12 +104,14 @@ class QueryResultItem |
| 100 | 104 | d.folder_id, f.full_path, f.name, dcv.size as filesize, dcv.major_version, |
| 101 | 105 | dcv.minor_version, dcv.filename, cou.name as checkoutuser, w.human_name as workflow, ws.human_name as workflowstate, |
| 102 | 106 | mt.mimetypes as mimetype, md.mime_doc as mimedoc, d.checkedout, mbu.name as modifiedbyuser, d.modified, |
| 103 | - cbu.name as createdbyuser, ou.name as owneruser, d.immutable, d.status_id, d.created | |
| 107 | + cbu.name as createdbyuser, ou.name as owneruser, d.immutable, d.status_id, d.created,dcv.storage_path, dtl.name as document_type, | |
| 108 | + mt.icon_path as mime_icon_path, mt.friendly_name as mime_display | |
| 104 | 109 | FROM |
| 105 | 110 | documents d |
| 106 | 111 | INNER JOIN document_metadata_version dmv ON d.metadata_version_id = dmv.id |
| 107 | 112 | INNER JOIN document_content_version dcv ON dmv.content_version_id = dcv.id |
| 108 | 113 | INNER JOIN mime_types mt ON dcv.mime_id=mt.id |
| 114 | + LEFT JOIN document_types_lookup dtl ON dtl.id=dmv.document_type_id | |
| 109 | 115 | LEFT JOIN folders f ON f.id=d.folder_id |
| 110 | 116 | LEFT JOIN users cou ON d.checked_out_user_id=cou.id |
| 111 | 117 | LEFT JOIN workflows w ON dmv.workflow_id=w.id |
| ... | ... | @@ -134,6 +140,31 @@ class QueryResultItem |
| 134 | 140 | throw new Exception(_kt($msg)); |
| 135 | 141 | } |
| 136 | 142 | |
| 143 | + // document_id, relevance, text, title | |
| 144 | + | |
| 145 | + $this->documentType = $result['document_type']; | |
| 146 | + $this->filename=$result['filename']; | |
| 147 | + $this->filesize = KTUtil::filesizeToString($result['filesize']); | |
| 148 | + $this->folderId = $result['folder_id']; | |
| 149 | + | |
| 150 | + $this->createdBy = $result['createdbyuser']; | |
| 151 | + $this->dateCreated = $result['created']; | |
| 152 | + | |
| 153 | + $this->modifiedBy = $result['modifiedbyuser']; | |
| 154 | + $this->dateModified = $result['modified']; | |
| 155 | + | |
| 156 | + $this->checkedOutUser = $result['checkoutuser']; | |
| 157 | + $this->dateCheckedout = $result['checkedout']; | |
| 158 | + | |
| 159 | + $this->owner = $result['owneruser']; | |
| 160 | + | |
| 161 | + $this->version = $result['major_version'] . '.' . $result['minor_version']; | |
| 162 | + | |
| 163 | + $this->immutable = ($result['immutable'] + 0)?_kt('Immutable'):''; | |
| 164 | + | |
| 165 | + $this->workflow = $result['workflow']; | |
| 166 | + $this->workflowState = $result['workflowstate']; | |
| 167 | + | |
| 137 | 168 | if (is_null($result['name'])) |
| 138 | 169 | { |
| 139 | 170 | $this->fullpath = '(orphaned)'; |
| ... | ... | @@ -144,28 +175,12 @@ class QueryResultItem |
| 144 | 175 | if (substr($this->fullpath,0,1) == '/') $this->fullpath = substr($this->fullpath,1); |
| 145 | 176 | } |
| 146 | 177 | |
| 147 | - $this->filesize = KTUtil::filesizeToString($result['filesize']); | |
| 148 | - | |
| 149 | - $this->version = $result['major_version'] . '.' . $result['minor_version']; | |
| 150 | - $this->filename=$result['filename']; | |
| 151 | - $this->checkedOutUser = $result['checkoutuser']; | |
| 152 | - $this->workflow = $result['workflow']; | |
| 153 | - $this->workflowState = $result['workflowstate']; | |
| 154 | - | |
| 155 | - | |
| 156 | 178 | $this->mimeType = $result['mimetype']; |
| 157 | - $this->dateCheckedout = $result['checkedout']; | |
| 158 | - | |
| 159 | - $this->modifiedBy = $result['modifiedbyuser']; | |
| 160 | - $this->dateModified = $result['modified']; | |
| 161 | - $this->createdBy = $result['createdbyuser']; | |
| 162 | - $this->dateCreated = $result['created']; | |
| 179 | + $this->mimeIconPath = $result['mime_icon_path']; | |
| 180 | + $this->mimeDisplay = $result['mime_display']; | |
| 163 | 181 | |
| 164 | - $this->owner = $result['owneruser']; | |
| 165 | - $this->immutable = ($result['immutable'] + 0)?_kt('Immutable'):''; | |
| 182 | + $this->storagePath = $result['storage_path']; | |
| 166 | 183 | $this->status = Document::getStatusString($result['status_id']); |
| 167 | - $this->folderId = $result['folder_id']; | |
| 168 | - | |
| 169 | 184 | } |
| 170 | 185 | |
| 171 | 186 | protected function __get($property) |
| ... | ... | @@ -193,12 +208,15 @@ class QueryResultItem |
| 193 | 208 | case 'IsAvailable': |
| 194 | 209 | return $this->Document->isLive(); |
| 195 | 210 | case 'CheckedOutUser': |
| 211 | + case 'CheckedOutBy': | |
| 196 | 212 | return (string) $this->checkedOutUser; |
| 197 | 213 | case 'WorkflowOnly': |
| 214 | + case 'Workflow': | |
| 198 | 215 | return (string)$this->workflow; |
| 199 | 216 | case 'WorkflowStateOnly': |
| 217 | + case 'WorkflowState': | |
| 200 | 218 | return (string)$this->workflowState; |
| 201 | - case 'Workflow': | |
| 219 | + case 'WorkflowAndState': | |
| 202 | 220 | if (is_null($this->workflow)) |
| 203 | 221 | { |
| 204 | 222 | return ''; |
| ... | ... | @@ -206,6 +224,10 @@ class QueryResultItem |
| 206 | 224 | return "$this->workflow - $this->workflowState"; |
| 207 | 225 | case 'MimeType': |
| 208 | 226 | return (string) $this->mimeType; |
| 227 | + case 'MimeIconPath': | |
| 228 | + return (string) $this->mimeIconPath; | |
| 229 | + case 'MimeDisplay': | |
| 230 | + return (string) $this->mimeDisplay; | |
| 209 | 231 | case 'DateCheckedOut': |
| 210 | 232 | return (string) $this->dateCheckedout; |
| 211 | 233 | case 'ModifiedBy': |
| ... | ... | @@ -217,11 +239,19 @@ class QueryResultItem |
| 217 | 239 | case 'DateCreated': |
| 218 | 240 | return (string) $this->dateCreated; |
| 219 | 241 | case 'Owner': |
| 242 | + case 'OwnedBy': | |
| 220 | 243 | return (string) $this->owner; |
| 244 | + case 'IsImmutable': | |
| 221 | 245 | case 'Immutable': |
| 222 | 246 | return (bool) $this->immutable; |
| 223 | 247 | case 'Status': |
| 224 | 248 | return $this->status; |
| 249 | + case 'StoragePath': | |
| 250 | + return $this->storagePath; | |
| 251 | + case 'DocumentType': | |
| 252 | + return $this->documentType; | |
| 253 | + case 'Permissions': | |
| 254 | + return 'not available'; | |
| 225 | 255 | case 'CanBeReadByUser': |
| 226 | 256 | if (!$this->live) |
| 227 | 257 | return false; |
| ... | ... | @@ -231,7 +261,7 @@ class QueryResultItem |
| 231 | 261 | return true; |
| 232 | 262 | return false; |
| 233 | 263 | default: |
| 234 | - throw new Exception("Unknown property '$property' to get on MatchResult"); | |
| 264 | + throw new Exception("Unknown property '$property' to get on QueryResultItem"); | |
| 235 | 265 | } |
| 236 | 266 | return ''; // Should not be reached |
| 237 | 267 | } |
| ... | ... | @@ -766,6 +796,7 @@ abstract class Indexer |
| 766 | 796 | if ($this->debug) $default->log->debug('indexDocuments: stopping - db error'); |
| 767 | 797 | return; |
| 768 | 798 | } |
| 799 | + KTUtil::setSystemSetting('luceneIndexingDate', time()); | |
| 769 | 800 | |
| 770 | 801 | // bail if no work to do |
| 771 | 802 | if (count($result) == 0) | ... | ... |
search2/search/search.inc.php
| ... | ... | @@ -554,27 +554,48 @@ function processSearchExpression($query) |
| 554 | 554 | { |
| 555 | 555 | $item = array( |
| 556 | 556 | 'document_id' => (int) $hit->DocumentID, |
| 557 | - 'title' => (string) $hit->Title, | |
| 557 | + | |
| 558 | + 'custom_document_no' => 'n/a', | |
| 559 | + 'oem_document_no' => 'n/a', | |
| 560 | + | |
| 558 | 561 | 'relevance' => (float) $hit->Rank, |
| 559 | 562 | 'text' => (string) $noText?'':$hit->Text, |
| 560 | - 'filesize' => (int) $hit->Filesize, | |
| 563 | + | |
| 564 | + 'title' => (string) $hit->Title, | |
| 565 | + 'document_type'=> $hit->DocumentType, | |
| 561 | 566 | 'fullpath' => (string) $hit->FullPath, |
| 562 | - 'version' => (string) $hit->Version, | |
| 563 | 567 | 'filename' => (string) $hit->Filename, |
| 564 | - 'checked_out_by' => (string) $hit->CheckedOutUser, | |
| 568 | + 'filesize' => (int) $hit->Filesize, | |
| 569 | + 'folder_id' => (int) $hit->FolderId, | |
| 570 | + | |
| 571 | + 'created_by' => (string) $hit->CreatedBy, | |
| 572 | + 'created_date' => (string) $hit->DateCreated, | |
| 573 | + | |
| 574 | + 'modified_by' => (string) $hit->ModifiedBy, | |
| 575 | + 'modified_date' => (string) $hit->DateModified, | |
| 576 | + | |
| 577 | + 'checked_out_by' => (string) $hit->CheckedOutUser, | |
| 565 | 578 | 'checked_out_date' => (string) $hit->DateCheckedOut, |
| 566 | - 'is_available' => (bool) $hit->IsAvailable, | |
| 579 | + | |
| 580 | + 'owned_by' => (string) $hit->Owner, | |
| 581 | + | |
| 582 | + 'version' => (float) $hit->Version, | |
| 583 | + 'is_immutable'=> (bool) $hit->Immutable, | |
| 584 | + 'permissions'=> $hit->Permissions, | |
| 585 | + | |
| 567 | 586 | 'workflow' => (string) $hit->WorkflowOnly, |
| 568 | 587 | 'workflow_state' => (string) $hit->WorkflowStateOnly, |
| 569 | - 'folder_id' => (int) $hit->FolderId, | |
| 588 | + | |
| 570 | 589 | 'mime_type' => (string) $hit->MimeType, |
| 571 | - 'modified_by' => (string) $hit->ModifiedBy, | |
| 572 | - 'modified_date' => (string) $hit->DateModified, | |
| 573 | - 'created_by' => (string) $hit->CreatedBy, | |
| 574 | - 'created_date' => (string) $hit->DateCreated, | |
| 575 | - 'owner' => (string) $hit->Owner, | |
| 576 | - 'is_immutable'=> (bool) $hit->Immutable, | |
| 577 | - 'status' => (string) $hit->Status | |
| 590 | + 'mime_icon_path' => (string) $hit->MimeIconPath, | |
| 591 | + 'mime_display' => (string) $hit->MimeDisplay, | |
| 592 | + | |
| 593 | + 'storage_path' => (string) $hit->StoragePath, | |
| 594 | + | |
| 595 | + 'status' => (string) $hit->Status, | |
| 596 | + | |
| 597 | + 'is_available' => (bool) $hit->IsAvailable, | |
| 598 | + | |
| 578 | 599 | ); |
| 579 | 600 | |
| 580 | 601 | $results[] = $item; | ... | ... |
sql/mysql/install/data.sql
No preview for this file type
sql/mysql/install/structure.sql
| ... | ... | @@ -289,7 +289,7 @@ CREATE TABLE `document_fields` ( |
| 289 | 289 | CREATE TABLE `document_fields_link` ( |
| 290 | 290 | `id` int(11) NOT NULL default '0', |
| 291 | 291 | `document_field_id` int(11) NOT NULL default '0', |
| 292 | - `value` char(255) NOT NULL default '', | |
| 292 | + `value` mediumtext NOT NULL default '', | |
| 293 | 293 | `metadata_version_id` int(11) default NULL, |
| 294 | 294 | PRIMARY KEY (`id`), |
| 295 | 295 | KEY `document_field_id` (`document_field_id`), | ... | ... |
sql/mysql/upgrade/3.5.2/csv_mime.sql
0 โ 100644
sql/mysql/upgrade/3.5.2/document_transactions.sql
| 1 | -alter table document_transactions change version version varchar(50); | |
| 2 | -alter table document_transactions change ip ip varchar(15); | |
| 3 | -alter table document_transactions change filename filename varchar(255); | |
| 4 | -alter table document_transactions change comment comment varchar(1024); | |
| 1 | +alter table document_transactions change version version varchar(50); | |
| 2 | +alter table document_transactions change ip ip varchar(15); | |
| 3 | +alter table document_transactions change filename filename mediumtext; | |
| 4 | +alter table document_transactions change comment comment mediumtext; | |
| 5 | 5 | alter table document_transactions change transaction_namespace transaction_namespace varchar(255); |
| 6 | 6 | \ No newline at end of file | ... | ... |
sql/mysql/upgrade/3.5.2/metadata_length.sql
0 โ 100644
sql/mysql/upgrade/3.5.2/scheduler_tasks.sql
| ... | ... | @@ -2,4 +2,10 @@ ALTER TABLE `scheduler_tasks` ADD `status` ENUM( 'enabled', 'disabled', 'sy |
| 2 | 2 | |
| 3 | 3 | UPDATE `scheduler_tasks` SET `status` = 'system' WHERE `task` = 'Indexing' OR `task` = 'Index Migration' OR `task` = 'Index Optimisation'; |
| 4 | 4 | |
| 5 | -INSERT INTO `scheduler_tasks` VALUES (4,'Periodic Document Expunge','bin/expungeall.php','',0,'weekly','2007-10-01',NULL,0,'disabled'); | |
| 6 | 5 | \ No newline at end of file |
| 6 | +select @id:=ifnull(max(id),0)+1 from scheduler_tasks; | |
| 7 | +INSERT INTO `scheduler_tasks` VALUES (@id,'Periodic Document Expunge','bin/expungeall.php','',0,'weekly','2007-10-01',NULL,0,'disabled'); | |
| 8 | + | |
| 9 | +select @id:=max(id)+1 from scheduler_tasks; | |
| 10 | +INSERT INTO `scheduler_tasks` VALUES (@id,'Database Maintenance','bin/dbmaint.php','optimize',0,'monthly','2007-10-01',NULL,0,'disabled'); | |
| 11 | + | |
| 12 | +UPDATE zseq_scheduler_tasks set id=@id; | |
| 7 | 13 | \ No newline at end of file | ... | ... |
templates/ktcore/login.smarty
| ... | ... | @@ -11,7 +11,7 @@ |
| 11 | 11 | |
| 12 | 12 | <link rel="stylesheet" href="{$rootUrl}/resources/css/kt-ie-icons.css" type="text/css" /> |
| 13 | 13 | |
| 14 | - <script type="text/javascript" src="{$rootUrl}/thirdpartyjs/curvycorners/rounded_corners_lite.inc.js"> </script> | |
| 14 | + <script type="text/javascript" src="{$rootUrl}/thirdpartyjs/curvycorners/rounded_corners.inc.js"> </script> | |
| 15 | 15 | <script type="text/javascript" src="{$rootUrl}/resources/js/login_loader.js"> </script> |
| 16 | 16 | </head> |
| 17 | 17 | <body> | ... | ... |
templates/ktcore/search2/lucene_statistics.smarty
| ... | ... | @@ -3,44 +3,26 @@ |
| 3 | 3 | {literal} |
| 4 | 4 | <script type="text/javascript"> |
| 5 | 5 | |
| 6 | -function tog1(){ | |
| 7 | - | |
| 8 | - var toggled = document.getElementById('expand'); | |
| 9 | - var pImage = document.getElementById('id'); | |
| 10 | - var mImage = document.getElementById('ie'); | |
| 11 | - if(pImage.style.display == 'block'){ | |
| 12 | - pImage.style.display = 'none'; | |
| 13 | - mImage.style.display = 'block'; | |
| 14 | - }else{ | |
| 15 | - pImage.style.display = 'block'; | |
| 16 | - mImage.style.display = 'none'; | |
| 17 | - } | |
| 18 | - if(toggled.style.display == 'none'){ | |
| 19 | - toggled.style.display = 'block'; | |
| 20 | - }else{ | |
| 21 | - toggled.style.display = 'none'; | |
| 22 | - } | |
| 23 | - | |
| 6 | +function mouseOver() | |
| 7 | +{ | |
| 8 | +var toggle = document.getElementById('exp'); | |
| 9 | +toggle.style.display = 'block'; | |
| 10 | +} | |
| 11 | +function mouseOut() | |
| 12 | +{ | |
| 13 | +var toggle = document.getElementById('exp'); | |
| 14 | +toggle.style.display = 'none'; | |
| 24 | 15 | } |
| 25 | 16 | |
| 26 | -function tog2(){ | |
| 27 | - | |
| 28 | - var toggle = document.getElementById('exp'); | |
| 29 | - var plusImage = document.getElementById('imgd'); | |
| 30 | - var minusImage = document.getElementById('imge'); | |
| 31 | - if(plusImage.style.display == 'block'){ | |
| 32 | - plusImage.style.display = 'none'; | |
| 33 | - minusImage.style.display = 'block'; | |
| 34 | - }else{ | |
| 35 | - plusImage.style.display = 'block'; | |
| 36 | - minusImage.style.display = 'none'; | |
| 37 | - } | |
| 38 | - if(toggle.style.display == 'none'){ | |
| 39 | - toggle.style.display = 'block'; | |
| 40 | - }else{ | |
| 41 | - toggle.style.display = 'none'; | |
| 42 | - } | |
| 43 | - | |
| 17 | +function mouseOver1() | |
| 18 | +{ | |
| 19 | +var toggle = document.getElementById('show'); | |
| 20 | +toggle.style.display = 'block'; | |
| 21 | +} | |
| 22 | +function mouseOut1() | |
| 23 | +{ | |
| 24 | +var toggle = document.getElementById('show'); | |
| 25 | +toggle.style.display = 'none'; | |
| 44 | 26 | } |
| 45 | 27 | |
| 46 | 28 | </script> |
| ... | ... | @@ -49,44 +31,35 @@ function tog2(){ |
| 49 | 31 | |
| 50 | 32 | <body> |
| 51 | 33 | <table> |
| 52 | -<tr><td width="495px">{i18n}Last Optimization Date:{/i18n}</td><td>{$stats.optimisationDate}</td></tr> | |
| 53 | -<tr></tr> | |
| 54 | -<tr><td>{i18n}Period Since Last Optimization:{/i18n}</td><td>{$stats.optimisationPeriod}</td></tr> | |
| 55 | -<tr><td>{i18n}Last Indexing Date:{/i18n}</td><td>{$stats.indexingDate}</td></tr> | |
| 56 | -<tr><td>{i18n}Period Since Last Indexing:{/i18n}</td><td>{$stats.indexingPeriod}</td></tr> | |
| 57 | -<tr><td>{i18n}Total # Documents in Repository:{/i18n}</td><td>{$stats.docsInRepository}</td></tr> | |
| 58 | -<tr><td>{i18n}Documents Indexed:{/i18n}</td><td>{$stats.docsInIndex}</td></tr> | |
| 59 | -<tr><td>{i18n}Documents in Indexing Queue:{/i18n}</td><td>{$stats.docsInQueue}</td></tr> | |
| 60 | -<tr><td><span onclick="tog1();"> | |
| 61 | -<p id="id"> | |
| 62 | -<img src="{$rootUrl}/resources/graphics/bullet_toggle_plus.png" style="cursor: pointer;"/> | |
| 63 | -Index Coverage: | |
| 64 | -</p> | |
| 65 | -<p id="ie"> | |
| 66 | -<img src="{$rootUrl}/resources/graphics/bullet_toggle_minus.png" style="cursor: pointer;"/> | |
| 67 | -Index Coverage: | |
| 68 | -</p> | |
| 34 | +<tr><td></td><td>{i18n}Last Optimization Date:{/i18n}</td><td>{$stats.optimisationDate}</td></tr> | |
| 35 | +<tr><td></td><td>{i18n}Period Since Last Optimization:{/i18n}</td><td>{$stats.optimisationPeriod}</td></tr> | |
| 36 | +<tr><td></td><td>{i18n}Last Indexing Date:{/i18n}</td><td>{$stats.indexingDate}</td></tr> | |
| 37 | +<tr><td></td><td>{i18n}Period Since Last Indexing:{/i18n}</td><td>{$stats.indexingPeriod}</td></tr> | |
| 38 | +<tr><td></td><td>{i18n}Total # Documents in Repository:{/i18n}</td><td>{$stats.docsInRepository}</td></tr> | |
| 39 | +<tr><td></td><td>{i18n}Documents Indexed:{/i18n}</td><td>{$stats.docsInIndex}</td></tr> | |
| 40 | +<tr><td></td><td>{i18n}Documents in Indexing Queue:{/i18n}</td><td>{$stats.docsInQueue}</td></tr> | |
| 41 | +<tr><td><img src="{$rootUrl}/resources/graphics/info.gif" style="cursor: pointer;" onmouseOver="mouseOver1()" onmouseOut="mouseOut1()"/></td> | |
| 42 | +<td><span> | |
| 43 | +{i18n}Index Coverage:{/i18n} | |
| 69 | 44 | </span> |
| 70 | -<div id="expand" style="display: none;"> | |
| 71 | -<i>{i18n}Indexing coverage percentage may vary from total - not all documents contain text.{/i18n}</i> | |
| 45 | + | |
| 46 | +<div id="show" style="display: none; position: absolute; width: 340px; height: 40px; background-color: #CCCCCC;"><i> | |
| 47 | +{i18n}Indexing coverage percentage may vary from total - not all documents contain text.{/i18n}</i> | |
| 72 | 48 | <br/> |
| 73 | -</div></td><td>{$stats.indexingCoverage}</td></tr> | |
| 49 | +</div> | |
| 50 | +<td>{$stats.indexingCoverage}</td></tr> | |
| 74 | 51 | |
| 75 | 52 | |
| 76 | -<tr><td><span onclick="tog2();"> | |
| 77 | -<p id="imgd"> | |
| 78 | -<img src="{$rootUrl}/resources/graphics/bullet_toggle_plus.png" style="cursor: pointer;"/> | |
| 79 | -Queue Coverage: | |
| 80 | -</p> | |
| 81 | -<p id="imge"> | |
| 82 | -<img src="{$rootUrl}/resources/graphics/bullet_toggle_minus.png" style="cursor: pointer;"/> | |
| 83 | -Queue Coverage: | |
| 84 | -</p> | |
| 53 | +<tr><td><img src="{$rootUrl}/resources/graphics/info.gif" style="cursor: pointer;" onmouseOver="mouseOver()" onmouseOut="mouseOut()"/></td> | |
| 54 | +<td><span> | |
| 55 | +{i18n}Queue Coverage :{/i18n} | |
| 85 | 56 | </span> |
| 86 | -<div id="exp" style="display: none;"> | |
| 87 | -<i>{i18n}Queue coverage indicates percentage of documents currently queued for indexing in relation to total repository size{/i18n}</i> | |
| 57 | + | |
| 58 | +<div id="exp" style="display: none; position: absolute; width: 410px; height: 40px; background-color: #CCCCCC;"><i> | |
| 59 | +{i18n}Queue coverage indicates percentage of documents currently queued for indexing in relation to total repository size.{/i18n}</i> | |
| 88 | 60 | <br/> |
| 89 | 61 | </div> |
| 62 | + | |
| 90 | 63 | </td><td>{$stats.queueCoverage}</td></tr> |
| 91 | 64 | |
| 92 | 65 | </table> |
| ... | ... | @@ -101,17 +74,6 @@ Queue Coverage: |
| 101 | 74 | <tr><td colspan=2 align=right><a href="/search2.php?action=refreshLuceneStats" align=right>{i18n}Refresh{/i18n}</a></tr> |
| 102 | 75 | </table> |
| 103 | 76 | |
| 104 | -<script type="text/javascript"> | |
| 105 | -var plusImage = document.getElementById('imgd'); | |
| 106 | -var minusImage = document.getElementById('imge'); | |
| 107 | -plusImage.style.display = 'block'; | |
| 108 | -minusImage.style.display = 'none'; | |
| 109 | - | |
| 110 | -var pImage = document.getElementById('id'); | |
| 111 | -var mImage = document.getElementById('ie'); | |
| 112 | -pImage.style.display = 'block'; | |
| 113 | -mImage.style.display = 'none'; | |
| 114 | -</script> | |
| 115 | 77 | |
| 116 | 78 | </body> |
| 117 | 79 | </html> |
| 118 | 80 | \ No newline at end of file | ... | ... |
thirdparty/Smarty/plugins/modifier.sanitize_input.php
| ... | ... | @@ -6,6 +6,7 @@ function smarty_modifier_sanitize_input($string, $esc_type = 'html', $charset='U |
| 6 | 6 | $string = mb_ereg_replace('"',""", $string); |
| 7 | 7 | $string = mb_ereg_replace('<',"<", $string); |
| 8 | 8 | $string = mb_ereg_replace('>',">", $string); |
| 9 | + $string = mb_ereg_replace('<br/>',"<br>", $string); | |
| 9 | 10 | return $string; |
| 10 | 11 | } |
| 11 | 12 | ... | ... |
view.php
| ... | ... | @@ -5,64 +5,64 @@ |
| 5 | 5 | * KnowledgeTree Open Source Edition |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | |
| 8 | + * | |
| 9 | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | 11 | * Free Software Foundation. |
| 12 | - * | |
| 12 | + * | |
| 13 | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | 16 | * details. |
| 17 | - * | |
| 17 | + * | |
| 18 | 18 | * You should have received a copy of the GNU General Public License |
| 19 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | |
| 20 | + * | |
| 21 | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | |
| 23 | + * | |
| 24 | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | - * copyright notice. | |
| 32 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * copyright notice. | |
| 34 | 34 | * Contributor( s): ______________________________________ |
| 35 | 35 | */ |
| 36 | 36 | |
| 37 | 37 | // boilerplate. |
| 38 | -require_once("config/dmsDefaults.php"); | |
| 39 | -require_once(KT_LIB_DIR . "/templating/templating.inc.php"); | |
| 40 | -require_once(KT_LIB_DIR . "/templating/kt3template.inc.php"); | |
| 41 | -require_once(KT_LIB_DIR . "/dispatcher.inc.php"); | |
| 42 | -require_once(KT_LIB_DIR . "/util/ktutil.inc"); | |
| 43 | -require_once(KT_LIB_DIR . "/database/dbutil.inc"); | |
| 44 | -require_once(KT_LIB_DIR . "/util/sanitize.inc"); | |
| 38 | +require_once('config/dmsDefaults.php'); | |
| 39 | +require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | |
| 40 | +require_once(KT_LIB_DIR . '/templating/kt3template.inc.php'); | |
| 41 | +require_once(KT_LIB_DIR . '/dispatcher.inc.php'); | |
| 42 | +require_once(KT_LIB_DIR . '/util/ktutil.inc'); | |
| 43 | +require_once(KT_LIB_DIR . '/database/dbutil.inc'); | |
| 44 | +require_once(KT_LIB_DIR . '/util/sanitize.inc'); | |
| 45 | 45 | |
| 46 | 46 | // document related includes |
| 47 | -require_once(KT_LIB_DIR . "/documentmanagement/Document.inc"); | |
| 48 | -require_once(KT_LIB_DIR . "/documentmanagement/DocumentType.inc"); | |
| 49 | -require_once(KT_LIB_DIR . "/documentmanagement/DocumentFieldLink.inc"); | |
| 50 | -require_once(KT_LIB_DIR . "/documentmanagement/documentmetadataversion.inc.php"); | |
| 51 | -require_once(KT_LIB_DIR . "/documentmanagement/documentcontentversion.inc.php"); | |
| 52 | -require_once(KT_LIB_DIR . "/metadata/fieldset.inc.php"); | |
| 53 | -require_once(KT_LIB_DIR . "/security/Permission.inc"); | |
| 47 | +require_once(KT_LIB_DIR . '/documentmanagement/Document.inc'); | |
| 48 | +require_once(KT_LIB_DIR . '/documentmanagement/DocumentType.inc'); | |
| 49 | +require_once(KT_LIB_DIR . '/documentmanagement/DocumentFieldLink.inc'); | |
| 50 | +require_once(KT_LIB_DIR . '/documentmanagement/documentmetadataversion.inc.php'); | |
| 51 | +require_once(KT_LIB_DIR . '/documentmanagement/documentcontentversion.inc.php'); | |
| 52 | +require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php'); | |
| 53 | +require_once(KT_LIB_DIR . '/security/Permission.inc'); | |
| 54 | 54 | |
| 55 | 55 | // widget includes. |
| 56 | -require_once(KT_LIB_DIR . "/widgets/portlet.inc.php"); | |
| 57 | -require_once(KT_LIB_DIR . "/widgets/fieldsetDisplay.inc.php"); | |
| 58 | -require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php"); | |
| 59 | -require_once(KT_LIB_DIR . "/actions/documentaction.inc.php"); | |
| 60 | -require_once(KT_LIB_DIR . "/browse/browseutil.inc.php"); | |
| 56 | +require_once(KT_LIB_DIR . '/widgets/portlet.inc.php'); | |
| 57 | +require_once(KT_LIB_DIR . '/widgets/fieldsetDisplay.inc.php'); | |
| 58 | +require_once(KT_LIB_DIR . '/widgets/FieldsetDisplayRegistry.inc.php'); | |
| 59 | +require_once(KT_LIB_DIR . '/actions/documentaction.inc.php'); | |
| 60 | +require_once(KT_LIB_DIR . '/browse/browseutil.inc.php'); | |
| 61 | 61 | |
| 62 | 62 | |
| 63 | 63 | class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 64 | 64 | var $sName = 'ktcore.actions.document.displaydetails'; |
| 65 | - var $sSection = "view_details"; | |
| 65 | + var $sSection = 'view_details'; | |
| 66 | 66 | var $sHelpPage = 'ktcore/browse.html'; |
| 67 | 67 | |
| 68 | 68 | var $actions; |
| ... | ... | @@ -77,21 +77,21 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 77 | 77 | |
| 78 | 78 | function check() { |
| 79 | 79 | if (!parent::check()) { return false; } |
| 80 | - | |
| 80 | + | |
| 81 | 81 | $this->persistParams(array('fDocumentId')); |
| 82 | - | |
| 82 | + | |
| 83 | 83 | return true; |
| 84 | 84 | } |
| 85 | 85 | |
| 86 | 86 | // FIXME identify the current location somehow. |
| 87 | 87 | function addPortlets($currentaction = null) { |
| 88 | 88 | $currentaction = $this->sName; |
| 89 | - | |
| 89 | + | |
| 90 | 90 | $actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser, 'documentinfo'); |
| 91 | 91 | $oPortlet = new KTActionPortlet(sprintf(_kt('Document info'))); |
| 92 | 92 | $oPortlet->setActions($actions, $currentaction); |
| 93 | - $this->oPage->addPortlet($oPortlet); | |
| 94 | - | |
| 93 | + $this->oPage->addPortlet($oPortlet); | |
| 94 | + | |
| 95 | 95 | $this->actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser); |
| 96 | 96 | $oPortlet = new KTActionPortlet(sprintf(_kt('Document actions'), $this->oDocument->getName())); |
| 97 | 97 | $oPortlet->setActions($this->actions, $currentaction); |
| ... | ... | @@ -100,9 +100,9 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 100 | 100 | |
| 101 | 101 | function do_main() { |
| 102 | 102 | // fix legacy, broken items. |
| 103 | - if (KTUtil::arrayGet($_REQUEST, "fDocumentID", true) !== true) { | |
| 104 | - $_REQUEST["fDocumentId"] = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, "fDocumentID")); | |
| 105 | - unset($_REQUEST["fDocumentID"]); | |
| 103 | + if (KTUtil::arrayGet($_REQUEST, 'fDocumentID', true) !== true) { | |
| 104 | + $_REQUEST['fDocumentId'] = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fDocumentID')); | |
| 105 | + unset($_REQUEST['fDocumentID']); | |
| 106 | 106 | } |
| 107 | 107 | |
| 108 | 108 | $document_data = array(); |
| ... | ... | @@ -118,7 +118,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 118 | 118 | return $this->do_error(); |
| 119 | 119 | } |
| 120 | 120 | $document_id = $oDocument->getId(); |
| 121 | - $document_data["document_id"] = $oDocument->getId(); | |
| 121 | + $document_data['document_id'] = $oDocument->getId(); | |
| 122 | 122 | |
| 123 | 123 | |
| 124 | 124 | if (!KTBrowseUtil::inAdminMode($this->oUser, $oDocument->getFolderId())) { |
| ... | ... | @@ -143,20 +143,20 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 143 | 143 | $this->oPage->setSecondaryTitle($oDocument->getName()); |
| 144 | 144 | |
| 145 | 145 | $aOptions = array( |
| 146 | - "documentaction" => "viewDocument", | |
| 147 | - "folderaction" => "browse", | |
| 146 | + 'documentaction' => 'viewDocument', | |
| 147 | + 'folderaction' => 'browse', | |
| 148 | 148 | ); |
| 149 | 149 | |
| 150 | 150 | $this->oDocument =& $oDocument; |
| 151 | 151 | $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForDocument($oDocument, $aOptions)); |
| 152 | - $this->oPage->setBreadcrumbDetails(_kt("document details")); | |
| 153 | - $this->addPortlets("Document Details"); | |
| 152 | + $this->oPage->setBreadcrumbDetails(_kt('document details')); | |
| 153 | + $this->addPortlets('Document Details'); | |
| 154 | 154 | |
| 155 | - $document_data["document"] = $oDocument; | |
| 156 | - $document_data["document_type"] =& DocumentType::get($oDocument->getDocumentTypeID()); | |
| 155 | + $document_data['document'] = $oDocument; | |
| 156 | + $document_data['document_type'] =& DocumentType::get($oDocument->getDocumentTypeID()); | |
| 157 | 157 | $is_valid_doctype = true; |
| 158 | 158 | |
| 159 | - if (PEAR::isError($document_data["document_type"])) { | |
| 159 | + if (PEAR::isError($document_data['document_type'])) { | |
| 160 | 160 | $this->oPage->addError(_kt('The document you requested has an invalid <strong>document type</strong>. Unfortunately, this means that we cannot effectively display it.')); |
| 161 | 161 | $is_valid_doctype = false; |
| 162 | 162 | } |
| ... | ... | @@ -171,7 +171,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 171 | 171 | |
| 172 | 172 | //var_dump($field_values); |
| 173 | 173 | |
| 174 | - $document_data["field_values"] = $field_values; | |
| 174 | + $document_data['field_values'] = $field_values; | |
| 175 | 175 | |
| 176 | 176 | // Fieldset generation. |
| 177 | 177 | // |
| ... | ... | @@ -186,7 +186,9 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 186 | 186 | |
| 187 | 187 | $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); |
| 188 | 188 | |
| 189 | - foreach (KTMetadataUtil::fieldsetsForDocument($oDocument) as $oFieldset) { | |
| 189 | + $aDocFieldsets = KTMetadataUtil::fieldsetsForDocument($oDocument); | |
| 190 | + | |
| 191 | + foreach ($aDocFieldsets as $oFieldset) { | |
| 190 | 192 | $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); |
| 191 | 193 | array_push($fieldsets, new $displayClass($oFieldset)); |
| 192 | 194 | } |
| ... | ... | @@ -216,35 +218,35 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 216 | 218 | $aViewletActions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser, 'documentviewlet'); |
| 217 | 219 | foreach ($aViewletActions as $oAction) { |
| 218 | 220 | $aInfo = $oAction->getInfo(); |
| 219 | - | |
| 221 | + | |
| 220 | 222 | if ($aInfo !== null) { |
| 221 | - $aViewlets[] = $oAction->display_viewlet(); // use the action, since we display_viewlet() later. | |
| 223 | + $aViewlets[] = $oAction->display_viewlet(); // use the action, since we display_viewlet() later. | |
| 222 | 224 | } |
| 223 | - } | |
| 224 | - | |
| 225 | - $viewlet_data = implode(" ", $aViewlets); | |
| 225 | + } | |
| 226 | + | |
| 227 | + $viewlet_data = implode(' ', $aViewlets); | |
| 226 | 228 | $viewlet_data = trim($viewlet_data); |
| 227 | - | |
| 229 | + | |
| 228 | 230 | $content_class = 'view'; |
| 229 | 231 | if (!empty($viewlet_data)) { |
| 230 | 232 | $content_class = 'view withviewlets'; |
| 231 | - } | |
| 233 | + } | |
| 232 | 234 | $this->oPage->setContentClass($content_class); |
| 233 | - | |
| 234 | 235 | |
| 235 | - | |
| 236 | + | |
| 237 | + | |
| 236 | 238 | $oTemplating =& KTTemplating::getSingleton(); |
| 237 | - $oTemplate = $oTemplating->loadTemplate("ktcore/document/view"); | |
| 239 | + $oTemplate = $oTemplating->loadTemplate('ktcore/document/view'); | |
| 238 | 240 | $aTemplateData = array( |
| 239 | - "context" => $this, | |
| 240 | - "sCheckoutUser" => $checkout_user, | |
| 241 | - "isCheckoutUser" => ($this->oUser->getId() == $oDocument->getCheckedOutUserId()), | |
| 242 | - "canCheckin" => $bCanCheckin, | |
| 243 | - "document_id" => $document_id, | |
| 244 | - "document" => $oDocument, | |
| 245 | - "documentName" => $oDocument->getName(), | |
| 246 | - "document_data" => $document_data, | |
| 247 | - "fieldsets" => $fieldsets, | |
| 241 | + 'context' => $this, | |
| 242 | + 'sCheckoutUser' => $checkout_user, | |
| 243 | + 'isCheckoutUser' => ($this->oUser->getId() == $oDocument->getCheckedOutUserId()), | |
| 244 | + 'canCheckin' => $bCanCheckin, | |
| 245 | + 'document_id' => $document_id, | |
| 246 | + 'document' => $oDocument, | |
| 247 | + 'documentName' => $oDocument->getName(), | |
| 248 | + 'document_data' => $document_data, | |
| 249 | + 'fieldsets' => $fieldsets, | |
| 248 | 250 | 'viewlet_data' => $viewlet_data, |
| 249 | 251 | ); |
| 250 | 252 | //return '<pre>' . print_r($aTemplateData, true) . '</pre>'; |
| ... | ... | @@ -256,86 +258,86 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 256 | 258 | // fDocumentId (document to compare against) |
| 257 | 259 | // fComparisonVersion (the metadata_version of the appropriate document) |
| 258 | 260 | function do_viewComparison() { |
| 259 | - | |
| 261 | + | |
| 260 | 262 | $document_data = array(); |
| 261 | 263 | $document_id = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fDocumentId')); |
| 262 | 264 | if ($document_id === null) { |
| 263 | 265 | $this->oPage->addError(sprintf(_kt("No document was requested. Please <a href=\"%s\">browse</a> for one."), KTBrowseUtil::getBrowseBaseUrl())); |
| 264 | 266 | return $this->do_error(); |
| 265 | 267 | } |
| 266 | - | |
| 267 | - $document_data["document_id"] = $document_id; | |
| 268 | - | |
| 268 | + | |
| 269 | + $document_data['document_id'] = $document_id; | |
| 270 | + | |
| 269 | 271 | $base_version = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fBaseVersion')); |
| 270 | - | |
| 272 | + | |
| 271 | 273 | // try get the document. |
| 272 | 274 | $oDocument =& Document::get($document_id, $base_version); |
| 273 | 275 | if (PEAR::isError($oDocument)) { |
| 274 | 276 | $this->oPage->addError(sprintf(_kt("The base document you attempted to retrieve is invalid. Please <a href=\"%s\">browse</a> for one."), KTBrowseUtil::getBrowseBaseUrl())); |
| 275 | 277 | return $this->do_error(); |
| 276 | 278 | } |
| 277 | - | |
| 279 | + | |
| 278 | 280 | if (!Permission::userHasDocumentReadPermission($oDocument)) { |
| 279 | 281 | // FIXME inconsistent. |
| 280 | 282 | $this->oPage->addError(_kt('You are not allowed to view this document')); |
| 281 | 283 | return $this->permissionDenied(); |
| 282 | 284 | } |
| 283 | - | |
| 285 | + | |
| 284 | 286 | $this->oDocument =& $oDocument; |
| 285 | 287 | $this->oPage->setSecondaryTitle($oDocument->getName()); |
| 286 | 288 | $aOptions = array( |
| 287 | - "documentaction" => "viewDocument", | |
| 288 | - "folderaction" => "browse", | |
| 289 | + 'documentaction' => 'viewDocument', | |
| 290 | + 'folderaction' => 'browse', | |
| 289 | 291 | ); |
| 290 | - | |
| 292 | + | |
| 291 | 293 | $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForDocument($oDocument, $aOptions)); |
| 292 | - $this->oPage->setBreadcrumbDetails(_kt("compare versions")); | |
| 293 | - | |
| 294 | + $this->oPage->setBreadcrumbDetails(_kt('compare versions')); | |
| 295 | + | |
| 294 | 296 | $comparison_version = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fComparisonVersion')); |
| 295 | 297 | if ($comparison_version=== null) { |
| 296 | 298 | $this->oPage->addError(sprintf(_kt("No comparison version was requested. Please <a href=\"%s\">select a version</a>."), KTUtil::addQueryStringSelf('action=history&fDocumentId=' . $document_id))); |
| 297 | 299 | return $this->do_error(); |
| 298 | 300 | } |
| 299 | - | |
| 301 | + | |
| 300 | 302 | $oComparison =& Document::get($oDocument->getId(), $comparison_version); |
| 301 | 303 | if (PEAR::isError($oComparison)) { |
| 302 | 304 | $this->errorRedirectToMain(_kt('Invalid document to compare against.')); |
| 303 | 305 | } |
| 304 | 306 | $comparison_data = array(); |
| 305 | 307 | $comparison_data['document_id'] = $oComparison->getId(); |
| 306 | - | |
| 307 | - $document_data["document"] = $oDocument; | |
| 308 | + | |
| 309 | + $document_data['document'] = $oDocument; | |
| 308 | 310 | $comparison_data['document'] = $oComparison; |
| 309 | - | |
| 310 | - $document_data["document_type"] =& DocumentType::get($oDocument->getDocumentTypeID()); | |
| 311 | - $comparison_data["document_type"] =& DocumentType::get($oComparison->getDocumentTypeID()); | |
| 312 | - | |
| 311 | + | |
| 312 | + $document_data['document_type'] =& DocumentType::get($oDocument->getDocumentTypeID()); | |
| 313 | + $comparison_data['document_type'] =& DocumentType::get($oComparison->getDocumentTypeID()); | |
| 314 | + | |
| 313 | 315 | // follow twice: once for normal, once for comparison. |
| 314 | 316 | $is_valid_doctype = true; |
| 315 | - | |
| 316 | - if (PEAR::isError($document_data["document_type"])) { | |
| 317 | + | |
| 318 | + if (PEAR::isError($document_data['document_type'])) { | |
| 317 | 319 | $this->oPage->addError(_kt('The document you requested has an invalid <strong>document type</strong>. Unfortunately, this means that we cannot effectively display it.')); |
| 318 | 320 | $is_valid_doctype = false; |
| 319 | 321 | } |
| 320 | - | |
| 322 | + | |
| 321 | 323 | // we want to grab all the md for this doc, since its faster that way. |
| 322 | 324 | $mdlist =& DocumentFieldLink::getList(array('metadata_version_id = ?', array($oDocument->getMetadataVersionId()))); |
| 323 | - | |
| 325 | + | |
| 324 | 326 | $field_values = array(); |
| 325 | 327 | foreach ($mdlist as $oFieldLink) { |
| 326 | 328 | $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue(); |
| 327 | 329 | } |
| 328 | - | |
| 329 | - $document_data["field_values"] = $field_values; | |
| 330 | + | |
| 331 | + $document_data['field_values'] = $field_values; | |
| 330 | 332 | $mdlist =& DocumentFieldLink::getList(array('metadata_version_id = ?', array($comparison_version))); |
| 331 | - | |
| 333 | + | |
| 332 | 334 | $field_values = array(); |
| 333 | 335 | foreach ($mdlist as $oFieldLink) { |
| 334 | 336 | $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue(); |
| 335 | 337 | } |
| 336 | - | |
| 337 | - $comparison_data["field_values"] = $field_values; | |
| 338 | - | |
| 338 | + | |
| 339 | + $comparison_data['field_values'] = $field_values; | |
| 340 | + | |
| 339 | 341 | // Fieldset generation. |
| 340 | 342 | // |
| 341 | 343 | // we need to create a set of FieldsetDisplay objects |
| ... | ... | @@ -343,47 +345,47 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 343 | 345 | // to the view (i.e. ZX3). Unfortunately, we don't have |
| 344 | 346 | // any of the plumbing to do it, so we handle this here. |
| 345 | 347 | $fieldsets = array(); |
| 346 | - | |
| 348 | + | |
| 347 | 349 | // we always have a generic. |
| 348 | 350 | array_push($fieldsets, new GenericFieldsetDisplay()); |
| 349 | - | |
| 351 | + | |
| 350 | 352 | // FIXME can we key this on fieldset namespace? or can we have duplicates? |
| 351 | 353 | // now we get the other fieldsets, IF there is a valid doctype. |
| 352 | - | |
| 354 | + | |
| 353 | 355 | if ($is_valid_doctype) { |
| 354 | 356 | // these are the _actual_ fieldsets. |
| 355 | 357 | $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); |
| 356 | - | |
| 358 | + | |
| 357 | 359 | // and the generics |
| 358 | 360 | $activesets = KTFieldset::getGenericFieldsets(); |
| 359 | 361 | foreach ($activesets as $oFieldset) { |
| 360 | 362 | $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); |
| 361 | 363 | array_push($fieldsets, new $displayClass($oFieldset)); |
| 362 | 364 | } |
| 363 | - | |
| 365 | + | |
| 364 | 366 | $activesets = KTFieldset::getForDocumentType($oDocument->getDocumentTypeID()); |
| 365 | 367 | foreach ($activesets as $oFieldset) { |
| 366 | 368 | $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); |
| 367 | 369 | array_push($fieldsets, new $displayClass($oFieldset)); |
| 368 | 370 | } |
| 369 | 371 | } |
| 370 | - | |
| 372 | + | |
| 371 | 373 | // FIXME handle ad-hoc fieldsets. |
| 372 | 374 | $this->addPortlets(); |
| 373 | - $oTemplate = $this->oValidator->validateTemplate("ktcore/document/compare"); | |
| 375 | + $oTemplate = $this->oValidator->validateTemplate('ktcore/document/compare'); | |
| 374 | 376 | $aTemplateData = array( |
| 375 | - "context" => $this, | |
| 376 | - "document_id" => $document_id, | |
| 377 | - "document" => $oDocument, | |
| 378 | - "document_data" => $document_data, | |
| 379 | - "comparison_data" => $comparison_data, | |
| 380 | - "comparison_document" => $oComparison, | |
| 381 | - "fieldsets" => $fieldsets, | |
| 377 | + 'context' => $this, | |
| 378 | + 'document_id' => $document_id, | |
| 379 | + 'document' => $oDocument, | |
| 380 | + 'document_data' => $document_data, | |
| 381 | + 'comparison_data' => $comparison_data, | |
| 382 | + 'comparison_document' => $oComparison, | |
| 383 | + 'fieldsets' => $fieldsets, | |
| 382 | 384 | ); |
| 383 | - //var_dump($aTemplateData["comparison_data"]); | |
| 385 | + //var_dump($aTemplateData['comparison_data']); | |
| 384 | 386 | return $oTemplate->render($aTemplateData); |
| 385 | 387 | } |
| 386 | - | |
| 388 | + | |
| 387 | 389 | function do_error() { |
| 388 | 390 | return ' '; // don't actually do anything. |
| 389 | 391 | } |
| ... | ... | @@ -399,4 +401,4 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { |
| 399 | 401 | $oDispatcher = new ViewDocumentDispatcher; |
| 400 | 402 | $oDispatcher->dispatch(); |
| 401 | 403 | |
| 402 | 404 | -?> |
| 405 | +?> | |
| 403 | 406 | \ No newline at end of file | ... | ... |