Commit c159e7926904c214c8c21cd5e29e19337a1e4714
1 parent
38203192
Merged in from DEV trunk...
KTS-2402 "Display the search expression tree" Implemented. Committed By: Conrad Vermeulen Reviewed By: Megan Watson KTS-3178 "Checking for write permission doesn't check if document is immutable. if immutable, user cannot have write access." Fixed. Committed By: Conrad Vermeulen Reviewed By: Martin Kirsten KTS-3177 "Unit admin permissions" Fixed. Changed logic which checks whether the Manage Security permission is being disabled. Committed By: Jonathan Byrne Reviewed By: Megan Watson KTS-3187 "Problem with opendir() in windows under indexerCore" Fixed. Committed By: Conrad Vermeulen Reviewed By: Martin Kirsten KTS-3187 "Problem with opendir() in windows under indexerCore" Fixed. Committed By: Conrad Vermeulen Reviewed By: Martin Kirsten KTS-3188 "Indexing Diagnostics page provides an invalid link to documents" Fixed. Committed By: Conrad Vermeulen Reviewed By: Monique KTS-3182 "documentutil->add function should at least throw a warning if 'contents' is there and 'temp_file' isn't" Fixed. Added an error message if the temp file is not there. Committed by: Megan Watson Reviewed by: Jonathan Byrne git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/STABLE/trunk@8295 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
10 changed files
with
196 additions
and
29 deletions
lib/documentmanagement/documentutil.inc.php
| ... | ... | @@ -254,15 +254,15 @@ class KTDocumentUtil { |
| 254 | 254 | 'folderid' => $oFolder->getID(), |
| 255 | 255 | 'creatorid' => $oUser->getID(), |
| 256 | 256 | 'documenttypeid' => $iDocumentTypeId, |
| 257 | - )); | |
| 257 | + )); | |
| 258 | 258 | |
| 259 | 259 | $oUploadChannel->sendMessage(new KTUploadGenericMessage(_kt('Storing contents'))); |
| 260 | 260 | $res = KTDocumentUtil::storeContents($oDocument, '', $aOptions); |
| 261 | 261 | if (PEAR::isError($res)) { |
| 262 | 262 | if (!PEAR::isError($oDocument)) { |
| 263 | - $oDocument->delete(); | |
| 263 | + $oDocument->delete(); | |
| 264 | 264 | } |
| 265 | - return $res; | |
| 265 | + return $res; | |
| 266 | 266 | } |
| 267 | 267 | |
| 268 | 268 | if (is_null($aMetadata)) { |
| ... | ... | @@ -707,7 +707,7 @@ class KTDocumentUtil { |
| 707 | 707 | $oKTConfig =& KTConfig::getSingleton(); |
| 708 | 708 | $sBasedir = $oKTConfig->get('urls/tmpDirectory'); |
| 709 | 709 | |
| 710 | - $sFilename = (isset($aOptions['temp_file'])) ? $aOptions['temp_file'] : tempnam($sBasedir, 'kt_storecontents'); | |
| 710 | + $sFilename = (isset($aOptions['temp_file'])) ? $aOptions['temp_file'] : ''; | |
| 711 | 711 | |
| 712 | 712 | // $oOutputFile = new KTFSFileLike($sFilename); |
| 713 | 713 | // $res = KTFileLikeUtil::copy_contents($oContents, $oOutputFile); |
| ... | ... | @@ -717,6 +717,10 @@ class KTDocumentUtil { |
| 717 | 717 | // return PEAR::raiseError(sprintf(_kt("Couldn't store contents: %s"), $res->getMessage())); |
| 718 | 718 | // } |
| 719 | 719 | |
| 720 | + if(empty($sFilename)){ | |
| 721 | + return PEAR::raiseError(sprintf(_kt("Couldn't store contents: %s"), _kt('The uploaded file does not exist.'))); | |
| 722 | + } | |
| 723 | + | |
| 720 | 724 | $sType = KTMime::getMimeTypeFromFile($sFilename); |
| 721 | 725 | $iMimeTypeId = KTMime::getMimeTypeID($sType, $oDocument->getFileName()); |
| 722 | 726 | $oDocument->setMimeTypeId($iMimeTypeId); | ... | ... |
lib/groups/GroupUtil.php
| ... | ... | @@ -309,7 +309,7 @@ class GroupUtil { |
| 309 | 309 | |
| 310 | 310 | global $default; |
| 311 | 311 | $sTable = $default->users_groups_table; |
| 312 | - $sQuery = "SELECT count(*) AS cnt FROM $sTable WHERE user_id = ? AND group_id IN (?)"; | |
| 312 | + $sQuery = "SELECT COUNT(group_id) AS cnt FROM $sTable WHERE user_id = ? AND group_id IN (?)"; | |
| 313 | 313 | $aParams = array($iUserId, $sGroupIds); |
| 314 | 314 | |
| 315 | 315 | $res = DBUtil::getOneResult(array($sQuery, $aParams)); | ... | ... |
lib/security/Permission.inc
| ... | ... | @@ -59,6 +59,14 @@ class Permission { |
| 59 | 59 | return false; |
| 60 | 60 | } |
| 61 | 61 | |
| 62 | + if ($oDocument->getIsCheckedOut()) | |
| 63 | + { | |
| 64 | + if ($oDocument->getCheckedOutUserID() != $_SESSION["userID"]) | |
| 65 | + { | |
| 66 | + return false; | |
| 67 | + } | |
| 68 | + } | |
| 69 | + | |
| 62 | 70 | $oUser = User::get($_SESSION["userID"]); |
| 63 | 71 | $oPermission = KTPermission::getByName('ktcore.permissions.write'); |
| 64 | 72 | ... | ... |
plugins/ktcore/folder/Permissions.php
| ... | ... | @@ -456,29 +456,55 @@ class KTFolderPermissionsAction extends KTFolderAction { |
| 456 | 456 | |
| 457 | 457 | $aFoo = $_REQUEST['foo']; |
| 458 | 458 | $aPermissions = KTPermission::getList(); |
| 459 | - | |
| 459 | + | |
| 460 | + //------------------- | |
| 461 | + //This section is used to make sure that a user doesn't disable the admin groups | |
| 462 | + //Manage security permission or the Manage Security permission of a group they | |
| 463 | + //are currently a member of. | |
| 464 | + | |
| 460 | 465 | // Check which groups have permission to manage security |
| 461 | - $aNewGroups = $aFoo[4]['group']; | |
| 466 | + $aNewGroups = (isset($aFoo[4]['group']) ? $aFoo[4]['group'] : array()); | |
| 462 | 467 | $aNewRoles = (isset($aFoo[4]['role']) ? $aFoo[4]['role'] : array()); |
| 463 | - | |
| 464 | - // Ensure the user is not removing his/her own permission to update the folder permissions (manage security) | |
| 465 | - if(!in_array(-3, $aNewRoles)){ | |
| 466 | - $iUserId = $this->oUser->getId(); | |
| 467 | - if(!GroupUtil::checkUserInGroups($iUserId, $aNewGroups)){ | |
| 468 | - // If user no longer has permission, return an error. | |
| 469 | - $this->addErrorMessage(_kt('The selected permissions cannot be updated. You will no longer have permission to manage security on this folder.')); | |
| 470 | - $this->redirectTo('edit', 'fFolderId=' . $this->oFolder->getId()); | |
| 471 | - exit(0); | |
| 472 | - } | |
| 468 | + | |
| 469 | + $iUserId = $this->oUser->getId(); | |
| 470 | + | |
| 471 | + //Check that they aren't removing the sys admin Manage Security permission | |
| 472 | + //1 in this case is the admin group. | |
| 473 | + if(!in_array('1', $aNewGroups)) | |
| 474 | + { | |
| 475 | + $this->addErrorMessage(_kt('You cannot remove the Manage Security permission from the System Administrators Group')); | |
| 476 | + $this->redirectTo('edit', 'fFolderId=' . $this->oFolder->getId()); | |
| 477 | + exit(0); | |
| 473 | 478 | } |
| 474 | - | |
| 475 | - | |
| 479 | + | |
| 480 | + | |
| 481 | + //Check that they aren't removing the Manage Security permission from a group | |
| 482 | + //They are a member of. | |
| 483 | + if(!GroupUtil::checkUserInGroups($iUserId, array(1))) | |
| 484 | + { | |
| 485 | + //Ensure the user is not removing his/her own permission to update the folder permissions (manage security) | |
| 486 | + if(!in_array(-3, $aNewRoles)) | |
| 487 | + { | |
| 488 | + | |
| 489 | + if(!GroupUtil::checkUserInGroups($iUserId, $aNewGroups)) | |
| 490 | + { | |
| 491 | + // If user no longer has permission, return an error. | |
| 492 | + $this->addErrorMessage(_kt('You cannot remove the Manage Security permission from a group you belong to.')); | |
| 493 | + $this->redirectTo('edit', 'fFolderId=' . $this->oFolder->getId()); | |
| 494 | + exit(0); | |
| 495 | + } | |
| 496 | + | |
| 497 | + } | |
| 498 | + } | |
| 499 | + //----------------- | |
| 500 | + | |
| 501 | + | |
| 476 | 502 | require_once(KT_LIB_DIR . '/documentmanagement/observers.inc.php'); |
| 477 | 503 | $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId()); |
| 478 | 504 | |
| 479 | 505 | foreach ($aPermissions as $oPermission) { |
| 480 | 506 | $iPermId = $oPermission->getId(); |
| 481 | - | |
| 507 | + | |
| 482 | 508 | $aAllowed = KTUtil::arrayGet($aFoo, $iPermId, array()); |
| 483 | 509 | KTPermissionUtil::setPermissionForId($oPermission, $oPO, $aAllowed); |
| 484 | 510 | } | ... | ... |
plugins/search2/reporting/templates/indexerrors.smarty
| ... | ... | @@ -34,7 +34,7 @@ |
| 34 | 34 | {foreach key=key from=$index_errors item=indexError} |
| 35 | 35 | <tr> |
| 36 | 36 | <td class="centered"><input type="checkbox" name="index_error[{$indexError.document_id}]" value="1"/></td> |
| 37 | - <td><a href="/view.php?fDocumentId={$pendingDocs.document_id}">{$indexError.filename|truncate:40:'...'}</a></td> | |
| 37 | + <td><a href="/view.php?fDocumentId={$indexError.document_id}">{$indexError.filename|truncate:40:'...'}</a></td> | |
| 38 | 38 | <td>{if $indexError.extractor}{$indexError.extractor}{else}<p><font color="#FF9933">{i18n}n/a{/i18n}</font></p>{/if}</td> |
| 39 | 39 | <td>{$indexError.indexdate}</td> |
| 40 | 40 | ... | ... |
search2/indexing/indexerCore.inc.php
| ... | ... | @@ -475,10 +475,21 @@ abstract class Indexer |
| 475 | 475 | * @param string $document |
| 476 | 476 | * @param string $what |
| 477 | 477 | */ |
| 478 | - public static function index($document, $what='C') | |
| 478 | + public static function index($document, $what='A') | |
| 479 | 479 | { |
| 480 | 480 | global $default; |
| 481 | 481 | |
| 482 | + if (is_numeric($document)) | |
| 483 | + { | |
| 484 | + $document = Document::get($document+0); | |
| 485 | + } | |
| 486 | + | |
| 487 | + if (PEAR::isError($document)) | |
| 488 | + { | |
| 489 | + $default->log->error("index: Could not index document: " .$document->getMessage()); | |
| 490 | + return; | |
| 491 | + } | |
| 492 | + | |
| 482 | 493 | $document_id = $document->getId(); |
| 483 | 494 | $userid=$_SESSION['userID']; |
| 484 | 495 | if (empty($userid)) $userid=1; |
| ... | ... | @@ -601,7 +612,8 @@ abstract class Indexer |
| 601 | 612 | $this->generalHookCache = array(); |
| 602 | 613 | $this->mimeHookCache = array(); |
| 603 | 614 | |
| 604 | - $dir = opendir($this->hookPath); | |
| 615 | + | |
| 616 | + $dir = opendir(SearchHelper::correctPath($this->hookPath)); | |
| 605 | 617 | while (($file = readdir($dir)) !== false) |
| 606 | 618 | { |
| 607 | 619 | if (substr($file,-12) == 'Hook.inc.php') |
| ... | ... | @@ -1361,7 +1373,8 @@ abstract class Indexer |
| 1361 | 1373 | global $default; |
| 1362 | 1374 | |
| 1363 | 1375 | $diagnoses = array(); |
| 1364 | - $dir = opendir($path); | |
| 1376 | + | |
| 1377 | + $dir = opendir(SearchHelper::correctPath($path)); | |
| 1365 | 1378 | $extlen = - strlen($extension); |
| 1366 | 1379 | |
| 1367 | 1380 | while (($file = readdir($dir)) !== false) |
| ... | ... | @@ -1433,7 +1446,7 @@ abstract class Indexer |
| 1433 | 1446 | { |
| 1434 | 1447 | $this->clearExtractors(); |
| 1435 | 1448 | } |
| 1436 | - $dir = opendir($this->extractorPath); | |
| 1449 | + $dir = opendir(SearchHelper::correctPath($this->extractorPath)); | |
| 1437 | 1450 | while (($file = readdir($dir)) !== false) |
| 1438 | 1451 | { |
| 1439 | 1452 | if (substr($file,-17) == 'Extractor.inc.php') | ... | ... |
search2/search/bin/search2graphviz.php
0 โ 100644
| 1 | +<?php | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * $Id:$ | |
| 5 | + * | |
| 6 | + * KnowledgeTree Open Source Edition | |
| 7 | + * Document Management Made Simple | |
| 8 | + * Copyright (C) 2004 - 2008 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 | + | |
| 39 | +$curdir = getcwd(); | |
| 40 | +chdir(dirname(__FILE__)); | |
| 41 | +require_once(realpath('../../../config/dmsDefaults.php')); | |
| 42 | + | |
| 43 | +$expr = ''; | |
| 44 | + | |
| 45 | +$filename = 'search2graphviz.jpg'; | |
| 46 | +$verbose = false; | |
| 47 | +if ($argc > 0) | |
| 48 | +{ | |
| 49 | + foreach($argv as $arg) | |
| 50 | + { | |
| 51 | + if (strpos($arg, '=') === false) | |
| 52 | + { | |
| 53 | + $expr = $arg; | |
| 54 | + continue; | |
| 55 | + } | |
| 56 | + list($param, $value) = explode('=', $arg); | |
| 57 | + | |
| 58 | + switch (strtolower($param)) | |
| 59 | + { | |
| 60 | + case 'verbose': | |
| 61 | + $verbose=true; | |
| 62 | + break; | |
| 63 | + case 'output': | |
| 64 | + $filename = $value; | |
| 65 | + if ($verbose) print "* output = $value\n"; | |
| 66 | + break; | |
| 67 | + case 'user': | |
| 68 | + $username = $value; | |
| 69 | + if ($verbose) print "* User = $value\n"; | |
| 70 | + break; | |
| 71 | + case 'pass': | |
| 72 | + $password = $value; | |
| 73 | + if ($verbose) print "* User = $value\n"; | |
| 74 | + break; | |
| 75 | + case 'help': | |
| 76 | + print "Usage: search2graphviz.php [verbose] output=filename 'search criteria'\n"; | |
| 77 | + exit; | |
| 78 | + } | |
| 79 | + } | |
| 80 | +} | |
| 81 | + | |
| 82 | +if ($verbose) print _kt('Visgraph search expression') . "...\n"; | |
| 83 | + | |
| 84 | +try | |
| 85 | +{ | |
| 86 | + $expr = parseExpression($expr); | |
| 87 | + | |
| 88 | + $expr->toVizGraph(array('tofile'=>$filename)); | |
| 89 | + | |
| 90 | + if ($verbose) | |
| 91 | + { | |
| 92 | + print _kt("Done.") . "\n"; | |
| 93 | + } | |
| 94 | + | |
| 95 | +} | |
| 96 | +catch(Exception $e) | |
| 97 | +{ | |
| 98 | + print $e->getMessage(); | |
| 99 | +} | |
| 100 | + | |
| 101 | +?> | |
| 0 | 102 | \ No newline at end of file | ... | ... |
search2/search/expr.inc.php
| ... | ... | @@ -273,18 +273,21 @@ class Expr |
| 273 | 273 | $ext = pathinfo($filename, PATHINFO_EXTENSION); |
| 274 | 274 | $base = substr($filename, 0, -strlen($ext)-1); |
| 275 | 275 | |
| 276 | - $dotfile="$path/$base.$ext"; | |
| 277 | - $jpgfile="$path/$base.jpg"; | |
| 276 | + $curdir = getcwd(); | |
| 277 | + chdir($_ENV['PWD']); | |
| 278 | + $dotfile="$base.$ext"; | |
| 279 | + $jpgfile="$base.jpg"; | |
| 278 | 280 | $fp = fopen($dotfile,'wt'); |
| 279 | 281 | fwrite($fp, $str); |
| 280 | 282 | fclose($fp); |
| 281 | 283 | |
| 282 | - system("dot -Tjpg -o$jpgfile $dotfile"); | |
| 284 | + system("dot -Tjpg -o$jpgfile $dotfile 2>1 >/dev/null "); | |
| 283 | 285 | |
| 284 | 286 | if (isset($options['view']) && $options['view']) |
| 285 | 287 | { |
| 286 | 288 | system("eog $jpgfile"); |
| 287 | 289 | } |
| 290 | + chdir($curdir); | |
| 288 | 291 | } |
| 289 | 292 | |
| 290 | 293 | return $str; | ... | ... |
search2/search/fieldRegistry.inc.php
| ... | ... | @@ -223,7 +223,7 @@ class ExprFieldRegistry |
| 223 | 223 | { |
| 224 | 224 | $this->fields = array(); |
| 225 | 225 | |
| 226 | - $dir = opendir($this->path); | |
| 226 | + $dir = opendir(SearchHelper::correctPath($this->path)); | |
| 227 | 227 | while (($file = readdir($dir)) !== false) |
| 228 | 228 | { |
| 229 | 229 | if (substr($file,-13) == 'Field.inc.php') | ... | ... |
search2/search/search.inc.php
| ... | ... | @@ -62,6 +62,18 @@ function search_alias_compare($a, $b) |
| 62 | 62 | |
| 63 | 63 | class SearchHelper |
| 64 | 64 | { |
| 65 | + public static function correctPath($path) | |
| 66 | + { | |
| 67 | + if (OS_WINDOWS) | |
| 68 | + { | |
| 69 | + return str_replace('/','\\', $path); | |
| 70 | + } | |
| 71 | + else | |
| 72 | + { | |
| 73 | + return str_replace('\\','/', $path); | |
| 74 | + } | |
| 75 | + } | |
| 76 | + | |
| 65 | 77 | public static function checkOpenOfficeAvailablity() |
| 66 | 78 | { |
| 67 | 79 | $config =& KTConfig::getSingleton(); | ... | ... |