$dms, 'user'=>$user)); $accessop = new SeedDMS_AccessOperation($dms, $user, $settings); if (!$accessop->check_view_access($view, $_GET)) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } $listtype = 'listRepair'; if (isset($_GET["list"])) { $listtype = $_GET['list']; } if(isset($_GET['repair']) && $_GET['repair'] == 1) { $repair = 1; } else { $repair = 0; } if(isset($_GET['unlink']) && $_GET['unlink'] == 1) { $unlink = 1; } else { $unlink = 0; } if(isset($_GET['setfilesize']) && $_GET['setfilesize'] == 1) { $setfilesize = 1; } else { $setfilesize = 0; } if(isset($_GET['setchecksum']) && $_GET['setchecksum'] == 1) { $setchecksum = 1; } else { $setchecksum = 0; } if(isset($_GET['setfiletype']) && $_GET['setfiletype'] == 1) { $setfiletype = 1; } else { $setfiletype = 0; } $folder = $dms->getFolder($settings->_rootFolderID); $unlinkedversions = $dms->getUnlinkedDocumentContent(); if(!isset($_GET['action']) || $_GET['action'] == 'listUnlinkedFolders') $unlinkedfolders = $dms->checkFolders(); else $unlinkedfolders = null; if(!isset($_GET['action']) || $_GET['action'] == 'listUnlinkedDocuments') $unlinkeddocuments = $dms->checkDocuments(); else $unlinkeddocuments = null; if(!isset($_GET['action']) || $_GET['action'] == 'listMissingFileSize') $nofilesizeversions = $dms->getNoFileSizeDocumentContent(); else $nofilesizeversions = null; if(!isset($_GET['action']) || $_GET['action'] == 'listMissingChecksum') $nochecksumversions = $dms->getNoChecksumDocumentContent(); else $nochecksumversions = null; if(!isset($_GET['action']) || $_GET['action'] == 'listWrongFiletype') $wrongfiletypeversions = $dms->getWrongFiletypeDocumentContent(); else $wrongfiletypeversions = null; if(!isset($_GET['action']) || $_GET['action'] == 'listDuplicateContent') $duplicateversions = $dms->getDuplicateDocumentContent(); else $duplicateversions = null; $processwithoutusergroup = array(); foreach(array('review', 'approval', 'receipt', 'revision') as $process) { foreach(array('user', 'group') as $ug) { if(!isset($_GET['action']) || $_GET['action'] == 'list'.ucfirst($process).'Without'.ucfirst($ug)) { if($_GET['repair']) $dms->removeProcessWithoutUserGroup($process, $ug, isset($_GET['required']) ? $_GET['required'] : ''); $processwithoutusergroup[$process][$ug] = $dms->getProcessWithoutUserGroup($process, $ug); } } } $docsinrevision = array(); if(!isset($_GET['action']) || $_GET['action'] == 'listDocsInRevisionNoAccess') { $tmprevs = $dms->getDocumentsInRevision(); foreach($tmprevs as $rev) { if($doc = $dms->getDocument($rev['documentID'])) { $isdisabled = false; if($rev['type'] == 0) { $ruser = $dms->getUser($rev['required']); $isdisabled = $ruser->isDisabled(); $mode = $doc->getAccessMode($ruser); $content = $doc->getContentByVersion($rev['version']); $cmode = $content->getAccessMode($ruser); } elseif($rev['type'] == 1) { $rgroup = $dms->getGroup($rev['required']); $mode = $doc->getGroupAccessMode($rgroup); $cmode = M_READ; } /* Caution: $content->getAccessMode($ruser) doesn't work as it uses the role * restrictions of the currently logged in user */ if($mode < M_READ || $cmode < M_READ || $isdisabled) $docsinrevision[] = $doc; } } } $docsinreception = array(); if(!isset($_GET['action']) || $_GET['action'] == 'listDocsInReceptionNoAccess') { $tmprevs = $dms->getDocumentsInReception(); foreach($tmprevs as $rev) { if($doc = $dms->getDocument($rev['documentID'])) { $isdisabled = false; if($rev['type'] == 0) { $ruser = $dms->getUser($rev['required']); $isdisabled = $ruser->isDisabled(); $mode = $doc->getAccessMode($ruser); $content = $doc->getContentByVersion($rev['version']); $cmode = $content->getAccessMode($ruser); } elseif($rev['type'] == 1) { $rgroup = $dms->getGroup($rev['required']); $mode = $doc->getGroupAccessMode($rgroup); $cmode = M_READ; } /* Caution: $content->getAccessMode($ruser) doesn't work as it uses the role * restrictions of the currently logged in user */ if($mode < M_READ || $cmode < M_READ || $isdisabled) $docsinreception[] = $doc; } } } $rootfolder = $dms->getFolder($settings->_rootFolderID); function repair_tree($dms, $user, $folder, $path=':') { /* {{{ */ $objects = array(); /* Don't do folderlist check for root folder */ if($path != ':') { /* If the path contains a folder id twice, the a cyclic relation * exists. */ $tmparr = explode(':', $path); array_shift($tmparr); if(count($tmparr) != count(array_unique($tmparr))) { $objects[] = array('object'=>$folder, 'msg'=>'Folder path contains cyclic relation'); } $folderList = $folder->getFolderList(); /* Check the folder */ if($folderList != $path) { $objects[] = array('object'=>$folder, 'msg'=>"Folderlist is '".$folderList."', should be '".$path); } } $subfolders = $folder->getSubFolders(); foreach($subfolders as $subfolder) { $objects = array_merge($objects, repair_tree($dms, $user, $subfolder, $path.$folder->getId().':')); } $path .= $folder->getId().':'; $documents = $folder->getDocuments(); foreach($documents as $document) { /* Check the folder list of the document */ $folderList = $document->getFolderList(); if($folderList != $path) { $objects[] = array('object'=>$document, 'msg'=>"Folderlist is '".$folderList."', should be '".$path); } /* Check if the content is available */ $versions = $document->getContent(); if($versions) { foreach($versions as $version) { $filepath = $dms->contentDir . $version->getPath(); if(!file_exists($filepath)) { $objects[] = array('object'=>$version, 'msg'=>'Document content is missing'); } } } else { $objects[] = array('object'=>$version, 'msg'=>'Document has no content at all'); } } return $objects; } /* }}} */ if(!isset($_GET['action']) || $_GET['action'] == 'listRepair') $repairobjects = repair_tree($dms, $user, $folder); else $repairobjects = null; if($view) { $view->setParam('folder', $folder); $view->setParam('showtree', showtree()); $view->setParam('listtype', $listtype); $view->setParam('unlinkedcontent', $unlinkedversions); $view->setParam('unlinkedfolders', $unlinkedfolders); $view->setParam('unlinkeddocuments', $unlinkeddocuments); $view->setParam('nofilesizeversions', $nofilesizeversions); $view->setParam('nochecksumversions', $nochecksumversions); $view->setParam('wrongfiletypeversions', $wrongfiletypeversions); $view->setParam('duplicateversions', $duplicateversions); $view->setParam('docsinrevision', $docsinrevision); $view->setParam('docsinreception', $docsinreception); $view->setParam('processwithoutusergroup', $processwithoutusergroup); $view->setParam('unlink', $unlink); $view->setParam('setfilesize', $setfilesize); $view->setParam('setchecksum', $setchecksum); $view->setParam('setfiletype', $setfiletype); $view->setParam('repair', $repair); $view->setParam('showtree', showtree()); $view->setParam('rootfolder', $rootfolder); $view->setParam('repairobjects', $repairobjects); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('xsendfile', $settings->_enableXsendfile); $view($_GET); exit; }