Commit bb7b1350423920aff9a52d68e60d213854beab7b
1 parent
0d3e200c
Add repository cleanup management for visualisation of what the cleanup
script will remove. git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3830 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
3 changed files
with
211 additions
and
0 deletions
config/siteMap.inc
| ... | ... | @@ -143,6 +143,7 @@ $default->siteMap->addPage("manageHelp", "/presentation/lookAndFeel/knowledgeTre |
| 143 | 143 | $default->siteMap->addPage("managePermissions", "/presentation/lookAndFeel/knowledgeTree/administration/permissions/managePermissions.php", "Administration", SysAdmin, _("Permissions Administration"), true, 18); |
| 144 | 144 | $default->siteMap->addPage("manageLookupTrees", "/presentation/lookAndFeel/knowledgeTree/administration/docfieldmanagement/manageLookupTrees.php", "Administration", SysAdmin, _("Lookup Tree Administration"), true, 19); |
| 145 | 145 | $default->siteMap->addPage("manageWorkflows", "/presentation/lookAndFeel/knowledgeTree/administration/workflow/workflows.php", "Administration", SysAdmin, _("Workflow Management"), true, 20); |
| 146 | +$default->siteMap->addPage("manageCleanup", "/presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/manageCleanup.php", "Administration", SysAdmin, _("Repository Cleanup"), true, 21); | |
| 146 | 147 | |
| 147 | 148 | $default->siteMap->addSectionColour("Administration", "th", "056DCE"); |
| 148 | 149 | $default->siteMap->addSectionColour("Administration", "td", "6699FF"); | ... | ... |
presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/manageCleanup.php
0 → 100644
| 1 | +<?php | |
| 2 | + | |
| 3 | +require_once("../../../../../config/dmsDefaults.php"); | |
| 4 | + | |
| 5 | +require_once(KT_DIR . "/presentation/Html.inc"); | |
| 6 | + | |
| 7 | +require_once(KT_LIB_DIR . "/templating/templating.inc.php"); | |
| 8 | +require_once(KT_LIB_DIR . "/help/helpreplacement.inc.php"); | |
| 9 | +require_once(KT_LIB_DIR . "/help/helpentity.inc.php"); | |
| 10 | +require_once(KT_LIB_DIR . "/help/help.inc.php"); | |
| 11 | + | |
| 12 | +require_once(KT_LIB_DIR . "/dispatcher.inc.php"); | |
| 13 | +$sectionName = "Administration"; | |
| 14 | +require_once(KT_DIR . "/presentation/webpageTemplate.inc"); | |
| 15 | + | |
| 16 | +require_once(KT_LIB_DIR . '/browse/browseutil.inc.php'); | |
| 17 | + | |
| 18 | +$oConfig =& KTConfig::getSingleton(); | |
| 19 | +$fsPath = $oConfig->get('urls/documentRoot'); | |
| 20 | + | |
| 21 | +$aIgnore = array( | |
| 22 | + '.', '..', | |
| 23 | + 'CVS', | |
| 24 | + '.empty', | |
| 25 | + '.htaccess', | |
| 26 | + '.cvsignore', | |
| 27 | +); | |
| 28 | + | |
| 29 | +$aFoldersToRemove = array(); | |
| 30 | +$aFilesToRemove = array(); | |
| 31 | +$aRepoDocumentProblems = array(); | |
| 32 | +$aRepoFolderProblems = array(); | |
| 33 | +$aRepoVersionProblems = array(); | |
| 34 | + | |
| 35 | +function checkFileVersion($path, $version) { | |
| 36 | + $fod = KTBrowseUtil::folderOrDocument($path); | |
| 37 | + if ($fod === false) { | |
| 38 | + // No document by that name, so no point checking version | |
| 39 | + // information. | |
| 40 | + return; | |
| 41 | + } | |
| 42 | + return true; | |
| 43 | +} | |
| 44 | + | |
| 45 | +function checkFile($path, $first = true) { | |
| 46 | + $pattern = "/^(.*)-((?:\d+)\.(?:\d+))$/"; | |
| 47 | + if (preg_match($pattern, $path, $matches)) { | |
| 48 | + if (checkFileVersion($matches[1], $matches[2])) { | |
| 49 | + // If it's a version, then don't check for full path | |
| 50 | + // below... | |
| 51 | + return; | |
| 52 | + } | |
| 53 | + } | |
| 54 | + $fod = KTBrowseUtil::folderOrDocument($path); | |
| 55 | + if ($fod === false) { | |
| 56 | + $GLOBALS["aFilesToRemove"][] = $path; | |
| 57 | + return; | |
| 58 | + } | |
| 59 | +} | |
| 60 | + | |
| 61 | +function checkDirectory($path) { | |
| 62 | + global $fsPath, $aIgnore; | |
| 63 | + $fullpath = sprintf("%s/%s", $fsPath, $path); | |
| 64 | + | |
| 65 | + if (!is_dir($fullpath)) { | |
| 66 | + print "Not a directory: $fullpath\n"; | |
| 67 | + } | |
| 68 | + | |
| 69 | + if ($path === '/Deleted') { | |
| 70 | + // Deleted files handled separately. | |
| 71 | + return; | |
| 72 | + } | |
| 73 | + | |
| 74 | + if (!empty($path)) { | |
| 75 | + $fod = KTBrowseUtil::folderOrDocument($path); | |
| 76 | + if ($fod === false) { | |
| 77 | + $GLOBALS["aFoldersToRemove"][] = $path; | |
| 78 | + return; | |
| 79 | + } | |
| 80 | + } | |
| 81 | + | |
| 82 | + $dh = @opendir($fullpath); | |
| 83 | + if ($dh === false) { | |
| 84 | + print "Could not open directory: $fullpath\n"; | |
| 85 | + } | |
| 86 | + while (($filename = readdir($dh)) !== false) { | |
| 87 | + if (in_array($filename, $aIgnore)) { continue; } | |
| 88 | + $subrelpath = sprintf("%s/%s", $path, $filename); | |
| 89 | + $subfullpath = sprintf("%s/%s", $fsPath, $subrelpath); | |
| 90 | + if (is_dir($subfullpath)) { | |
| 91 | + checkDirectory($subrelpath); | |
| 92 | + } | |
| 93 | + if (is_file($subfullpath)) { | |
| 94 | + checkFile($subrelpath); | |
| 95 | + } | |
| 96 | + } | |
| 97 | +} | |
| 98 | + | |
| 99 | +function checkRepoFolder($oFolder) { | |
| 100 | + global $fsPath, $aRepoFolderProblems; | |
| 101 | + $sFolderPath = sprintf("%s/%s", $oFolder->getFullPath(), $oFolder->getName()); | |
| 102 | + $sFullPath = sprintf("%s/%s", $fsPath, $sFolderPath); | |
| 103 | + if (!is_dir($sFullPath)) { | |
| 104 | + $aRepoFolderProblems[] = $sFolderPath; | |
| 105 | + } | |
| 106 | +} | |
| 107 | + | |
| 108 | +function checkRepoDocument($oDocument) { | |
| 109 | + global $fsPath, $aRepoDocumentProblems; | |
| 110 | + $sDocumentPath = $oDocument->getStoragePath(); | |
| 111 | + $sFullPath = sprintf("%s/%s", $fsPath, $sDocumentPath); | |
| 112 | + if (!is_file($sFullPath)) { | |
| 113 | + $aRepoDocumentProblems[] = $sDocumentPath; | |
| 114 | + } | |
| 115 | + checkRepoVersions($oDocument); | |
| 116 | +} | |
| 117 | + | |
| 118 | +function checkRepoVersions($oDocument) { | |
| 119 | + global $fsPath, $aRepoVersionProblems; | |
| 120 | + $table = "document_transactions"; | |
| 121 | + $aVersions = DBUtil::getResultArrayKey(array("SELECT DISTINCT version FROM $table WHERE document_id = ?", array($oDocument->getID())), "version"); foreach($aVersions as $sVersion) { | |
| 122 | + if ($sVersion == $oDocument->getVersion()) { | |
| 123 | + continue; | |
| 124 | + } | |
| 125 | + $sDocumentPath = $oDocument->getStoragePath(); | |
| 126 | + $sFullPath = sprintf("%s/%s-%s", $fsPath, $sDocumentPath, $sVersion); | |
| 127 | + if (!is_file($sFullPath)) { | |
| 128 | + $aRepoVersionProblems[] = array($sDocumentPath, $sVersion); | |
| 129 | + continue; | |
| 130 | + } | |
| 131 | + } | |
| 132 | +} | |
| 133 | + | |
| 134 | +class ManageCleanupDispatcher extends KTAdminDispatcher { | |
| 135 | + function do_main() { | |
| 136 | + global $aFoldersToRemove; | |
| 137 | + global $aFilesToRemove; | |
| 138 | + global $aRepoDocumentProblems; | |
| 139 | + global $aRepoFolderProblems; | |
| 140 | + global $aRepoVersionProblems; | |
| 141 | + | |
| 142 | + checkDirectory(""); | |
| 143 | + $aFolders =& Folder::getList(); | |
| 144 | + foreach ($aFolders as $oFolder) { | |
| 145 | + checkRepoFolder($oFolder); | |
| 146 | + } | |
| 147 | + $aDocuments =& Document::getList(array("status_id = ?", array(LIVE))); | |
| 148 | + foreach ($aDocuments as $oDocument) { | |
| 149 | + checkRepoDocument($oDocument); | |
| 150 | + } | |
| 151 | + $oTemplate =& $this->oValidator->validateTemplate('ktcore/document/cleanup'); | |
| 152 | + $oTemplate->setData(array( | |
| 153 | + 'aFoldersToRemove' => $aFoldersToRemove, | |
| 154 | + 'aFilesToRemove' => $aFilesToRemove, | |
| 155 | + 'aRepoDocumentProblems' => $aRepoDocumentProblems, | |
| 156 | + 'aRepoFolderProblems' => $aRepoFolderProblems, | |
| 157 | + 'aRepoVersionProblems' => $aRepoVersionProblems, | |
| 158 | + )); | |
| 159 | + return $oTemplate->render(); | |
| 160 | + } | |
| 161 | +} | |
| 162 | + | |
| 163 | +$oDispatcher = new ManageCleanupDispatcher(); | |
| 164 | +$oDispatcher->dispatch(); | |
| 165 | + | |
| 166 | +?> | ... | ... |
templates/ktcore/document/cleanup.smarty
0 → 100644
| 1 | +{if $aFoldersToRemove} | |
| 2 | +<p>Would remove these folders (and all their contents):</p> | |
| 3 | +<ul> | |
| 4 | +{foreach from=$aFoldersToRemove item=sFolder} | |
| 5 | +<li>{$sFolder|escape}</li> | |
| 6 | +{/foreach} | |
| 7 | +</ul> | |
| 8 | +{/if} | |
| 9 | + | |
| 10 | +{if $aFilesToRemove} | |
| 11 | +<p>Would remove these files:</p> | |
| 12 | +<ul> | |
| 13 | +{foreach from=$aFoldersToRemove item=sFile} | |
| 14 | +<li>{$sFile|escape}</li> | |
| 15 | +{/foreach} | |
| 16 | +</ul> | |
| 17 | +{/if} | |
| 18 | + | |
| 19 | +{if $aRepoFolderProblems} | |
| 20 | +<p>These folders are not on the filesystem</p> | |
| 21 | +<ul> | |
| 22 | +{foreach from=$aRepoFolderProblems item=sFolder} | |
| 23 | +<li>{$sFolder|escape}</li> | |
| 24 | +{/foreach} | |
| 25 | +</ul> | |
| 26 | +{/if} | |
| 27 | + | |
| 28 | +{if $aRepoDocumentProblems} | |
| 29 | +<p>These documents are not on the filesystem</p> | |
| 30 | +<ul> | |
| 31 | +{foreach from=$aRepoDocumentProblems item=sDocument} | |
| 32 | +<li>{$sDocument|escape}</li> | |
| 33 | +{/foreach} | |
| 34 | +</ul> | |
| 35 | +{/if} | |
| 36 | + | |
| 37 | +{if $aRepoVersionProblems} | |
| 38 | +<p>These documents have versions not on the filesystem</p> | |
| 39 | +<ul> | |
| 40 | +{foreach from=$aRepoVersionProblems item=aSomething} | |
| 41 | +<li>{$aSomething[0]|escape} - version {$aSomething[1]|escape}</li> | |
| 42 | +{/foreach} | |
| 43 | +</ul> | |
| 44 | +{/if} | ... | ... |