add checking for duplicates

This commit is contained in:
Uwe Steinmann 2015-05-13 17:37:53 +02:00
parent e996ecb2d7
commit 259303fff1
3 changed files with 59 additions and 1 deletions

View File

@ -2111,6 +2111,34 @@ class SeedDMS_Core_DMS {
} /* }}} */
/**
* Returns document content which is duplicated
*
* This method is for finding document content which is available twice
* in the database. The checksum of a document content was introduced
* in version 4.0.0 of SeedDMS for finding duplicates.
*/
function getDuplicateDocumentContent() { /* {{{ */
$queryStr = "SELECT a.*, b.id as dupid FROM tblDocumentContent a LEFT JOIN tblDocumentContent b ON a.checksum=b.checksum where a.id!=b.id ORDER by a.id";
$resArr = $this->db->getResultArray($queryStr);
if (!$resArr)
return false;
$versions = array();
foreach($resArr as $row) {
$document = new $this->classnames['document']($row['document'], '', '', '', '', '', '', '', '', '', '', '');
$document->setDMS($this);
$version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']);
if(!isset($versions[$row['dupid']])) {
$versions[$row['id']]['content'] = $version;
$versions[$row['id']]['duplicates'] = array();
} else
$versions[$row['dupid']]['duplicates'][] = $version;
}
return $versions;
} /* }}} */
/**
* Returns statitical information
*

View File

@ -60,10 +60,11 @@ $unlinkedfolders = $dms->checkFolders();
$unlinkeddocuments = $dms->checkDocuments();
$nofilesizeversions = $dms->getNoFileSizeDocumentContent();
$nochecksumversions = $dms->getNoChecksumDocumentContent();
$duplicateversions = $dms->getDuplicateDocumentContent();
$rootfolder = $dms->getFolder($settings->_rootFolderID);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'folder'=>$folder, 'unlinkedcontent'=>$unlinkedversions, 'unlinkedfolders'=>$unlinkedfolders, 'unlinkeddocuments'=>$unlinkeddocuments, 'nofilesizeversions'=>$nofilesizeversions, 'nochecksumversions'=>$nochecksumversions, 'unlink'=>$unlink, 'setfilesize'=>$setfilesize, 'setchecksum'=>$setchecksum, 'repair'=>$repair, 'rootfolder'=>$rootfolder));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'folder'=>$folder, 'unlinkedcontent'=>$unlinkedversions, 'unlinkedfolders'=>$unlinkedfolders, 'unlinkeddocuments'=>$unlinkeddocuments, 'nofilesizeversions'=>$nofilesizeversions, 'nochecksumversions'=>$nochecksumversions, 'duplicateversions'=>$duplicateversions, 'unlink'=>$unlink, 'setfilesize'=>$setfilesize, 'setchecksum'=>$setchecksum, 'repair'=>$repair, 'rootfolder'=>$rootfolder));
if($view) {
$view->show();
exit;

View File

@ -172,6 +172,7 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style {
$unlinkeddocuments = $this->params['unlinkeddocuments'];
$nofilesizeversions = $this->params['nofilesizeversions'];
$nochecksumversions = $this->params['nochecksumversions'];
$duplicateversions = $this->params['duplicateversions'];
$repair = $this->params['repair'];
$unlink = $this->params['unlink'];
$setfilesize = $this->params['setfilesize'];
@ -340,6 +341,34 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style {
}
}
$this->contentContainerEnd();
$this->contentHeading(getMLText("duplicate_content"));
$this->contentContainerStart();
if($duplicateversions) {
print "<table class=\"table-condensed\">";
print "<thead>\n<tr>\n";
print "<th>".getMLText("document")."</th>\n";
print "<th>".getMLText("version")."</th>\n";
print "<th>".getMLText("original_filename")."</th>\n";
print "<th>".getMLText("mimetype")."</th>\n";
print "</tr>\n</thead>\n<tbody>\n";
foreach($duplicateversions as $rec) {
$version = $rec['content'];
$doc = $version->getDocument();
print "<tr>";
print "<td>".$doc->getId()."</td><td>".$version->getVersion()."</td><td>".$version->getOriginalFileName()."</td><td>".$version->getMimeType()."</td>";
print "<td>";
foreach($rec['duplicates'] as $duplicate) {
print $duplicate->getVersion();
}
print "</td>";
print "</tr>\n";
}
print "</tbody></table>\n";
}
$this->contentContainerEnd();
$this->htmlEndPage();
} /* }}} */