Commit 75eea8450550597e1a6deac32c161f9cd20ebfec
1 parent
cc9e80fb
Save table size by checking public folders at search-time, rather than
table-generation time. Submitted by: Stefano Ciancio (sciancio) SF Tracker: 1199729 git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3279 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
4 changed files
with
9 additions
and
31 deletions
lib/security/Permission.inc
| @@ -531,19 +531,7 @@ class Permission { | @@ -531,19 +531,7 @@ class Permission { | ||
| 531 | } else { | 531 | } else { |
| 532 | $default->log->error("rolePerms failed"); | 532 | $default->log->error("rolePerms failed"); |
| 533 | } | 533 | } |
| 534 | - | ||
| 535 | - // public folders | ||
| 536 | - $sPublicFolderPerms = array("INSERT INTO $default->search_permissions_table (user_id, document_id) " . | ||
| 537 | - "SELECT U.id, D.id " . /*ok*/ | ||
| 538 | - "FROM $default->users_table AS U, $default->documents_table AS D INNER JOIN $default->folders_table AS F ON D.folder_id = F.id " . | ||
| 539 | - "WHERE F.is_public = 1 " . | ||
| 540 | - "AND D.id = ?", $iDocumentID); | ||
| 541 | - $default->log->debug("addDocument publicFolder=$sPublicFolderPerms"); | ||
| 542 | - if ($sql->query($sPublicFolderPerms)) { | ||
| 543 | - $default->log->debug("publicFolder succeeded"); | ||
| 544 | - } else { | ||
| 545 | - $default->log->error("publicFolder failed"); | ||
| 546 | - } | 534 | + |
| 547 | 535 | ||
| 548 | // creator permissions | 536 | // creator permissions |
| 549 | $sCreatorPerms = array("INSERT INTO $default->search_permissions_table (user_id, document_id) " . | 537 | $sCreatorPerms = array("INSERT INTO $default->search_permissions_table (user_id, document_id) " . |
| @@ -593,19 +581,7 @@ class Permission { | @@ -593,19 +581,7 @@ class Permission { | ||
| 593 | } else { | 581 | } else { |
| 594 | $default->log->error("rolePerms failed"); | 582 | $default->log->error("rolePerms failed"); |
| 595 | } | 583 | } |
| 596 | - | ||
| 597 | - // public folders | ||
| 598 | - $sPublicFolderPerms = array("INSERT INTO $default->search_permissions_table (user_id, document_id) " . | ||
| 599 | - "SELECT U.id, D.id " . /*ok*/ | ||
| 600 | - "FROM $default->users_table AS U, $default->documents_table AS D INNER JOIN $default->folders_table AS F ON D.folder_id = F.id " . | ||
| 601 | - "WHERE F.is_public = 1 " . | ||
| 602 | - "AND U.id = ?", $iUserID); | ||
| 603 | - $default->log->debug("addDocument publicFolder=$sPublicFolderPerms"); | ||
| 604 | - if ($sql->query($sPublicFolderPerms)) { | ||
| 605 | - $default->log->debug("publicFolder succeeded"); | ||
| 606 | - } else { | ||
| 607 | - $default->log->error("publicFolder failed"); | ||
| 608 | - } | 584 | + |
| 609 | 585 | ||
| 610 | // creator permissions | 586 | // creator permissions |
| 611 | $sCreatorPerms = array("INSERT INTO $default->search_permissions_table (user_id, document_id) " . | 587 | $sCreatorPerms = array("INSERT INTO $default->search_permissions_table (user_id, document_id) " . |
presentation/lookAndFeel/knowledgeTree/search/advancedSearchBL.php
| @@ -99,7 +99,8 @@ FROM | @@ -99,7 +99,8 @@ FROM | ||
| 99 | INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id | 99 | INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id |
| 100 | INNER JOIN $default->status_table AS SL on D.status_id=SL.id | 100 | INNER JOIN $default->status_table AS SL on D.status_id=SL.id |
| 101 | WHERE | 101 | WHERE |
| 102 | - SDUL.user_id = ? | 102 | + (F.is_public OR |
| 103 | + SDUL.user_id = ?) | ||
| 103 | AND SL.name = ? | 104 | AND SL.name = ? |
| 104 | AND ($sSQLSearchString) | 105 | AND ($sSQLSearchString) |
| 105 | GROUP BY D.id | 106 | GROUP BY D.id |
presentation/lookAndFeel/knowledgeTree/search/advancedSearchUI.inc
| @@ -118,7 +118,8 @@ function getSearchResults($sMetaTagIDs, $sSQLSearchString, $iStartIndex, $sSearc | @@ -118,7 +118,8 @@ function getSearchResults($sMetaTagIDs, $sSQLSearchString, $iStartIndex, $sSearc | ||
| 118 | "INNER JOIN $default->status_table AS SL on D.status_id=SL.id " . | 118 | "INNER JOIN $default->status_table AS SL on D.status_id=SL.id " . |
| 119 | "WHERE DF.ID IN ($sQms) " . | 119 | "WHERE DF.ID IN ($sQms) " . |
| 120 | "AND (" . $sSQLSearchString . ") " . | 120 | "AND (" . $sSQLSearchString . ") " . |
| 121 | - "AND SDUL.user_id = ? " . | 121 | + "AND (F.is_public " . |
| 122 | + "OR SDUL.user_id = ?) " . | ||
| 122 | "AND SL.name = ? " . | 123 | "AND SL.name = ? " . |
| 123 | "GROUP BY D.id " . | 124 | "GROUP BY D.id " . |
| 124 | "ORDER BY doc_count DESC "; | 125 | "ORDER BY doc_count DESC "; |
presentation/lookAndFeel/knowledgeTree/search/standardSearchUI.inc
| @@ -44,7 +44,7 @@ function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCate | @@ -44,7 +44,7 @@ function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCate | ||
| 44 | "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . | 44 | "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . |
| 45 | "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . | 45 | "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . |
| 46 | "WHERE MATCH(DT.document_text) AGAINST (?) " . | 46 | "WHERE MATCH(DT.document_text) AGAINST (?) " . |
| 47 | - "AND SDUL.user_id = ? " . | 47 | + "AND (F.is_public OR SDUL.user_id = ?) " . |
| 48 | "AND SL.name='Live' "; | 48 | "AND SL.name='Live' "; |
| 49 | $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); | 49 | $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); |
| 50 | //only check in the parent_folder_ids if we're not searching from the | 50 | //only check in the parent_folder_ids if we're not searching from the |
| @@ -81,7 +81,7 @@ function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $i | @@ -81,7 +81,7 @@ function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $i | ||
| 81 | "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . | 81 | "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . |
| 82 | "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . | 82 | "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . |
| 83 | "WHERE MATCH(DT.document_text) AGAINST (?) " . | 83 | "WHERE MATCH(DT.document_text) AGAINST (?) " . |
| 84 | - "AND SDUL.user_id = ? "; | 84 | + "AND (F.is_public OR SDUL.user_id = ?) "; |
| 85 | $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); | 85 | $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); |
| 86 | if (isset($iDocTypeID)) { | 86 | if (isset($iDocTypeID)) { |
| 87 | $sQuery .= "AND D.document_type_id = ? "; | 87 | $sQuery .= "AND D.document_type_id = ? "; |
| @@ -118,7 +118,7 @@ function getSeachResultsByFolder($iFolderID, $iStartIndex, $sKeywords) { | @@ -118,7 +118,7 @@ function getSeachResultsByFolder($iFolderID, $iStartIndex, $sKeywords) { | ||
| 118 | "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . | 118 | "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . |
| 119 | "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . | 119 | "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . |
| 120 | "WHERE MATCH(DT.document_text) AGAINST (?) " . | 120 | "WHERE MATCH(DT.document_text) AGAINST (?) " . |
| 121 | - "AND SDUL.user_id = ? " . | 121 | + "AND (F.is_public OR SDUL.user_id = ?) " . |
| 122 | "AND SL.name='Live' "; | 122 | "AND SL.name='Live' "; |
| 123 | $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); | 123 | $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); |
| 124 | //only check in the parent_folder_ids if we're not searching from the | 124 | //only check in the parent_folder_ids if we're not searching from the |