seeddms-code/views/bootstrap/class.ViewDocument.php
2015-06-15 14:15:04 +02:00

1498 lines
60 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Implementation of ViewDocument view
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli,
* 2010-2012 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Include parent class
*/
require_once("class.Bootstrap.php");
/**
* Class which outputs the html page for ViewDocument view
*
* @category DMS
* @package SeedDMS
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli,
* 2010-2012 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
protected function getAccessModeText($defMode) { /* {{{ */
switch($defMode) {
case M_NONE:
return getMLText("access_mode_none");
break;
case M_READ:
return getMLText("access_mode_read");
break;
case M_READWRITE:
return getMLText("access_mode_readwrite");
break;
case M_ALL:
return getMLText("access_mode_all");
break;
}
} /* }}} */
protected function printAccessList($obj) { /* {{{ */
$accessList = $obj->getAccessList();
if (count($accessList["users"]) == 0 && count($accessList["groups"]) == 0)
return;
for ($i = 0; $i < count($accessList["groups"]); $i++)
{
$group = $accessList["groups"][$i]->getGroup();
$accesstext = $this->getAccessModeText($accessList["groups"][$i]->getMode());
print $accesstext.": ".htmlspecialchars($group->getName());
if ($i+1 < count($accessList["groups"]) || count($accessList["users"]) > 0)
print "<br />";
}
for ($i = 0; $i < count($accessList["users"]); $i++)
{
$user = $accessList["users"][$i]->getUser();
$accesstext = $this->getAccessModeText($accessList["users"][$i]->getMode());
print $accesstext.": ".htmlspecialchars($user->getFullName());
if ($i+1 < count($accessList["users"]))
print "<br />";
}
} /* }}} */
/**
* Output a single attribute in the document info section
*
* @param object $attribute attribute
*/
protected function printAttribute($attribute) { /* {{{ */
$attrdef = $attribute->getAttributeDefinition();
?>
<tr>
<td><?php echo htmlspecialchars($attrdef->getName()); ?>:</td>
<td>
<?php
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_url:
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $attr) {
$tmp[] = '<a href="'.htmlspecialchars($attr).'">'.htmlspecialchars($attr).'</a>';
}
echo implode('<br />', $tmp);
break;
case SeedDMS_Core_AttributeDefinition::type_email:
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $attr) {
$tmp[] = '<a mailto="'.htmlspecialchars($attr).'">'.htmlspecialchars($attr).'</a>';
}
echo implode('<br />', $tmp);
break;
default:
echo htmlspecialchars(implode(', ', $attribute->getValueAsArray()));
}
?>
</td>
</tr>
<?php
} /* }}} */
/**
* Output a protocol
*
* @param object $attribute attribute
*/
protected function printProtocol($latestContent, $type="") { /* {{{ */
$dms = $this->params['dms'];
?>
<legend><?php printMLText($type.'_log'); ?></legend>
<table class="table condensed">
<tr><th><?php printMLText('name'); ?></th><th><?php printMLText('last_update'); ?>, <?php printMLText('comment'); ?></th><th><?php printMLText('status'); ?></th></tr>
<?php
switch($type) {
case "review":
$statusList = $latestContent->getReviewStatus(10);
break;
case "approval":
$statusList = $latestContent->getApprovalStatus(10);
break;
case "revision":
$statusList = $latestContent->getRevisionStatus(10);
break;
case "receipt":
$statusList = $latestContent->getReceiptStatus(1);
break;
default:
$statusList = array();
}
foreach($statusList as $rec) {
echo "<tr>";
echo "<td>";
switch ($rec["type"]) {
case 0: // individual.
$required = $dms->getUser($rec["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_user")." '".$rec["required"]."'";
} else {
$reqName = htmlspecialchars($required->getFullName()." (".$required->getLogin().")");
}
break;
case 1: // Approver is a group.
$required = $dms->getGroup($rec["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_group")." '".$rec["required"]."'";
}
else {
$reqName = "<i>".htmlspecialchars($required->getName())."</i>";
}
break;
}
echo $reqName;
echo "</td>";
echo "<td>";
echo "<i style=\"font-size: 80%;\">".$rec['date']." - ";
$updateuser = $dms->getUser($rec["userID"]);
if(!is_object($required))
echo getMLText("unknown_user");
else
echo htmlspecialchars($updateuser->getFullName()." (".$updateuser->getLogin().")");
echo "</i>";
if($rec['comment'])
echo "<br />".htmlspecialchars($rec['comment']);
switch($type) {
case "review":
if($rec['file']) {
echo "<br />";
echo "<a href=\"../op/op.Download.php?documentid=".$documentid."&reviewlogid=".$rec['reviewLogID']."\" class=\"btn btn-mini\"><i class=\"icon-download\"></i> ".getMLText('download')."</a>";
}
break;
case "approval":
if($rec['file']) {
echo "<br />";
echo "<a href=\"../op/op.Download.php?documentid=".$documentid."&approvelogid=".$rec['approveLogID']."\" class=\"btn btn-mini\"><i class=\"icon-download\"></i> ".getMLText('download')."</a>";
}
break;
}
echo "</td>";
echo "<td>";
switch($type) {
case "review":
echo getReviewStatusText($rec["status"]);
break;
case "approval":
echo getApprovalStatusText($rec["status"]);
break;
case "revision":
echo getRevisionStatusText($rec["status"]);
break;
case "receipt":
echo getReceiptStatusText($rec["status"]);
break;
default:
}
echo "</td>";
echo "</tr>";
}
?>
</table>
<?php
} /* }}} */
function show() { /* {{{ */
parent::show();
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$accessop = $this->params['accessobject'];
$viewonlinefiletypes = $this->params['viewonlinefiletypes'];
$enableownerrevapp = $this->params['enableownerrevapp'];
$workflowmode = $this->params['workflowmode'];
$cachedir = $this->params['cachedir'];
$previewwidthlist = $this->params['previewWidthList'];
$previewwidthdetail = $this->params['previewWidthDetail'];
$checkoutdir = $this->params['checkOutDir'];
$documentid = $document->getId();
$currenttab = $this->params['currenttab'];
$versions = $document->getContent();
$this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))));
$this->globalNavigation($folder);
$this->contentStart();
$this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document", $document);
if ($document->isLocked()) {
$lockingUser = $document->getLockingUser();
$txt = $this->callHook('documentIsLocked', $document, $lockingUser);
if(is_string($txt))
echo $txt;
else {
?>
<div class="alert alert-warning">
<?php printMLText("lock_message", array("email" => $lockingUser->getEmail(), "username" => htmlspecialchars($lockingUser->getFullName())));?>
</div>
<?php
}
}
/* Retrieve attacheѕ files */
$files = $document->getDocumentFiles();
/* Retrieve linked documents */
$links = $document->getDocumentLinks();
$links = SeedDMS_Core_DMS::filterDocumentLinks($user, $links);
/* Retrieve reverse linked documents */
$reverselinks = $document->getReverseDocumentLinks();
$reverselinks = SeedDMS_Core_DMS::filterDocumentLinks($user, $reverselinks);
/* Retrieve latest content */
$latestContent = $document->getLatestContent();
$needwkflaction = false;
if($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') {
} else {
$workflow = $latestContent->getWorkflow();
if($workflow) {
$workflowstate = $latestContent->getWorkflowState();
$transitions = $workflow->getNextTransitions($workflowstate);
$needwkflaction = $latestContent->needsWorkflowAction($user);
}
}
if($needwkflaction) {
$this->infoMsg(getMLText('needs_workflow_action'));
}
$status = $latestContent->getStatus();
$reviewStatus = $latestContent->getReviewStatus();
$approvalStatus = $latestContent->getApprovalStatus();
$receiptStatus = $latestContent->getReceiptStatus();
$revisionStatus = $latestContent->getRevisionStatus();
?>
<div class="row-fluid">
<div class="span3">
<?php
$this->contentHeading(getMLText("document_infos"));
if($document->isCheckedOut()) {
echo "<div class=\"alert alert-info\">";
$checkoutpath = sprintf($checkoutdir, preg_replace('/[^A-Za-z0-9_-]/', '', $user->getLogin()));
echo "<a href=\"file://".$checkoutpath.urldecode($latestContent->getOriginalFileName())."\">".getMLText('copied_to_checkout_as', array('filename'=>$latestContent->getOriginalFileName()))."</a>";
echo "</div>";
}
$this->contentContainerStart();
$txt = $this->callHook('documentInfos', $document);
if(is_string($txt))
echo $txt;
else {
?>
<table class="table-condensed">
<?php
if($user->isAdmin()) {
echo "<tr>";
echo "<td>".getMLText("id").":</td>\n";
echo "<td>".htmlspecialchars($document->getID())."</td>\n";
echo "</tr>";
}
?>
<tr>
<td><?php printMLText("name");?>:</td>
<td><?php print htmlspecialchars($document->getName());?></td>
</tr>
<tr>
<td><?php printMLText("owner");?>:</td>
<td>
<?php
$owner = $document->getOwner();
print "<a class=\"infos\" href=\"mailto:".$owner->getEmail()."\">".htmlspecialchars($owner->getFullName())."</a>";
?>
</td>
</tr>
<?php
if($document->getComment()) {
?>
<tr>
<td><?php printMLText("comment");?>:</td>
<td><?php print htmlspecialchars($document->getComment());?></td>
</tr>
<?php
}
if($user->isAdmin()) {
if($document->inheritsAccess()) {
echo "<tr>";
echo "<td>".getMLText("access_mode").":</td>\n";
echo "<td>";
echo getMLText("inherited");
echo "</tr>";
} else {
echo "<tr>";
echo "<td>".getMLText('default_access').":</td>";
echo "<td>".$this->getAccessModeText($document->getDefaultAccess())."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>".getMLText('access_mode').":</td>";
echo "<td>";
$this->printAccessList($document);
echo "</td>";
echo "</tr>";
}
}
?>
<tr>
<td><?php printMLText("used_discspace");?>:</td>
<td><?php print SeedDMS_Core_File::format_filesize($document->getUsedDiskSpace());?></td>
</tr>
<tr>
<td><?php printMLText("creation_date");?>:</td>
<td><?php print getLongReadableDate($document->getDate()); ?></td>
</tr>
<?php
if($document->expires()) {
?>
<tr>
<td><?php printMLText("expires");?>:</td>
<td><?php print getReadableDate($document->getExpires()); ?></td>
</tr>
<?php
}
if($document->getKeywords()) {
?>
<tr>
<td><?php printMLText("keywords");?>:</td>
<td><?php print htmlspecialchars($document->getKeywords());?></td>
</tr>
<?php
}
if($cats = $document->getCategories()) {
?>
<tr>
<td><?php printMLText("categories");?>:</td>
<td>
<?php
$ct = array();
foreach($cats as $cat)
$ct[] = htmlspecialchars($cat->getName());
echo implode(', ', $ct);
?>
</td>
</tr>
<?php
}
?>
<?php
$attributes = $document->getAttributes();
if($attributes) {
foreach($attributes as $attribute) {
$arr = $this->callHook('showDocumentAttribute', $document, $attribute);
if(is_array($arr)) {
echo $txt;
echo "<tr>";
echo "<td>".$arr[0].":</td>";
echo "<td>".$arr[1]."</td>";
echo "</tr>";
} else {
$this->printAttribute($attribute);
}
}
}
?>
</table>
<?php
}
$this->contentContainerEnd();
?>
</div>
<div class="span9">
<ul class="nav nav-tabs" id="docinfotab">
<li class="<?php if(!$currenttab || $currenttab == 'docinfo') echo 'active'; ?>"><a data-target="#docinfo" data-toggle="tab"><?php printMLText('current_version'); ?></a></li>
<?php if (count($versions)>1) { ?>
<li class="<?php if($currenttab == 'previous') echo 'active'; ?>"><a data-target="#previous" data-toggle="tab"><?php printMLText('previous_versions'); ?></a></li>
<?php
}
if($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') {
if((is_array($reviewStatus) && count($reviewStatus)>0) ||
(is_array($approvalStatus) && count($approvalStatus)>0)) {
?>
<li class="<?php if($currenttab == 'revapp') echo 'active'; ?>"><a data-target="#revapp" data-toggle="tab"><?php if($workflowmode == 'traditional') echo getMLText('reviewers')."/"; echo getMLText('approvers'); ?></a></li>
<?php
}
} else {
if($workflow) {
?>
<li class="<?php if($currenttab == 'workflow') echo 'active'; ?>"><a data-target="#workflow" data-toggle="tab"><?php echo getMLText('workflow'); ?></a></li>
<?php
}
}
if(is_array($receiptStatus) && count($receiptStatus)>0) {
?>
<li class="<?php if($currenttab == 'recipients') echo 'active'; ?>"><a data-target="#recipients" data-toggle="tab"><?php echo getMLText('recipients'); ?></a></li>
<?php
}
if(is_array($revisionStatus) && count($revisionStatus)>0) {
?>
<li class="<?php if($currenttab == 'revision') echo 'active'; ?>"><a data-target="#revision" data-toggle="tab"><?php echo getMLText('revise_document'); ?></a></li>
<?php
}
?>
<li class="<?php if($currenttab == 'attachments') echo 'active'; ?>"><a data-target="#attachments" data-toggle="tab"><?php printMLText('linked_files'); echo (count($files)) ? " (".count($files).")" : ""; ?></a></li>
<li class="<?php if($currenttab == 'links') echo 'active'; ?>"><a data-target="#links" data-toggle="tab"><?php printMLText('linked_documents'); echo (count($links)) ? " (".count($links).")" : ""; ?></a></li>
</ul>
<div class="tab-content">
<div class="tab-pane <?php if(!$currenttab || $currenttab == 'docinfo') echo 'active'; ?>" id="docinfo">
<?php
if(!$latestContent) {
$this->contentContainerStart();
print getMLText('document_content_missing');
$this->contentContainerEnd();
$this->htmlEndPage();
exit;
}
// verify if file exists
$file_exists=file_exists($dms->contentDir . $latestContent->getPath());
$this->contentContainerStart();
print "<table class=\"table\">";
print "<thead>\n<tr>\n";
print "<th width='*'></th>\n";
print "<th width='*'>".getMLText("file")."</th>\n";
print "<th width='25%'>".getMLText("comment")."</th>\n";
print "<th width='15%'>".getMLText("status")."</th>\n";
print "<th width='20%'></th>\n";
print "</tr></thead><tbody>\n";
print "<tr>\n";
print "<td>";
/*
print "<ul class=\"actions unstyled\">";
if ($file_exists){
print "<li><a href=\"../op/op.Download.php?documentid=".$documentid."&version=".$latestContent->getVersion()."\" class=\"btn btn-medium\"><i class=\"icon-download\"></i><br />".getMLText("download")."</a></li>";
if ($viewonlinefiletypes && in_array(strtolower($latestContent->getFileType()), $viewonlinefiletypes))
print "<li><a target=\"_blank\" href=\"../op/op.ViewOnline.php?documentid=".$documentid."&version=". $latestContent->getVersion()."\" class=\"btn btn-medium\"><i class=\"icon-star\"></i><br />" . getMLText("view_online") . "</a></li>";
}else print "<li><img class=\"mimeicon\" src=\"".$this->getMimeIcon($latestContent->getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\"></li>";
print "</ul>";
*/
$previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail);
$previewer->createPreview($latestContent);
if ($file_exists) {
if ($viewonlinefiletypes && in_array(strtolower($latestContent->getFileType()), $viewonlinefiletypes)) {
print "<a target=\"_blank\" href=\"../op/op.ViewOnline.php?documentid=".$documentid."&version=". $latestContent->getVersion()."\">";
} else {
print "<a href=\"../op/op.Download.php?documentid=".$documentid."&version=".$latestContent->getVersion()."\">";
}
}
if($previewer->hasPreview($latestContent)) {
print("<img class=\"mimeicon\" width=\"".$previewwidthdetail."\" src=\"../op/op.Preview.php?documentid=".$document->getID()."&version=".$latestContent->getVersion()."&width=".$previewwidthdetail."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">");
} else {
print "<img class=\"mimeicon\" src=\"".$this->getMimeIcon($latestContent->getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">";
}
if ($file_exists) {
print "</a>";
}
print "</td>\n";
print "<td><ul class=\"actions unstyled\">\n";
print "<li>".$latestContent->getOriginalFileName() ."</li>\n";
print "<li>".getMLText('version').": ".$latestContent->getVersion()."</li>\n";
if ($file_exists)
print "<li>". SeedDMS_Core_File::format_filesize($latestContent->getFileSize()) .", ".htmlspecialchars($latestContent->getMimeType())."</li>";
else print "<li><span class=\"warning\">".getMLText("document_deleted")."</span></li>";
$updatingUser = $latestContent->getUser();
print "<li>".getMLText("uploaded_by")." <a href=\"mailto:".$updatingUser->getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."</a></li>";
print "<li>".getLongReadableDate($latestContent->getDate())."</li>";
print "</ul>\n";
print "<ul class=\"actions unstyled\">\n";
$attributes = $latestContent->getAttributes();
if($attributes) {
foreach($attributes as $attribute) {
$arr = $this->callHook('showDocumentContentAttribute', $latestContent, $attribute);
if(is_array($arr)) {
print "<li>".$arr[0].": ".$arr[1]."</li>\n";
} else {
$attrdef = $attribute->getAttributeDefinition();
print "<li>".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars(implode(', ', $attribute->getValueAsArray()))."</li>\n";
}
}
}
print "</ul>\n";
print "<td>".htmlspecialchars($latestContent->getComment())."</td>";
print "<td width='10%'>";
print getOverallStatusText($status["status"]);
if ( $status["status"]==S_DRAFT_REV || $status["status"]==S_DRAFT_APP || $status["status"]==S_IN_WORKFLOW || $status["status"]==S_EXPIRED ){
print "<br><span".($document->hasExpired()?" class=\"warning\" ":"").">".(!$document->getExpires() ? getMLText("does_not_expire") : getMLText("expires").": ".getReadableDate($document->getExpires()))."</span>";
}
print "</td>";
print "<td>";
print "<ul class=\"unstyled actions\">";
if ($file_exists){
print "<li><a href=\"../op/op.Download.php?documentid=".$documentid."&version=".$latestContent->getVersion()."\"><i class=\"icon-download\"></i>".getMLText("download")."</a></li>";
if ($viewonlinefiletypes && in_array(strtolower($latestContent->getFileType()), $viewonlinefiletypes))
print "<li><a target=\"_blank\" href=\"../op/op.ViewOnline.php?documentid=".$documentid."&version=". $latestContent->getVersion()."\"><i class=\"icon-star\"></i>" . getMLText("view_online") . "</a></li>";
}
print "</ul>";
print "<ul class=\"unstyled actions\">";
/* Only admin has the right to remove version in any case or a regular
* user if enableVersionDeletion is on
*/
if($accessop->mayRemoveVersion()) {
print "<li><a href=\"out.RemoveVersion.php?documentid=".$documentid."&version=".$latestContent->getVersion()."\"><i class=\"icon-remove\"></i>".getMLText("rm_version")."</a></li>";
}
if($accessop->mayOverrideStatus()) {
print "<li><a href='../out/out.OverrideContentStatus.php?documentid=".$documentid."&version=".$latestContent->getVersion()."'><i class=\"icon-align-justify\"></i>".getMLText("change_status")."</a></li>";
}
if($accessop->maySetRecipients()) {
print "<li><a href='../out/out.SetRecipients.php?documentid=".$documentid."&version=".$latestContent->getVersion()."'><i class=\"icon-check\"></i>".getMLText("change_recipients")."</a></li>";
}
if($accessop->maySetRevisors()) {
print "<li><a href='../out/out.SetRevisors.php?documentid=".$documentid."&version=".$latestContent->getVersion()."'><i class=\"icon-refresh\"></i>".getMLText("change_revisors")."</a></li>";
}
if($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') {
// Allow changing reviewers/approvals only if not reviewed
if($accessop->maySetReviewersApprovers()) {
print "<li><a href='../out/out.SetReviewersApprovers.php?documentid=".$documentid."&version=".$latestContent->getVersion()."'><i class=\"icon-edit\"></i>".getMLText("change_assignments")."</a></li>";
}
} else {
if($accessop->maySetWorkflow()) {
if(!$workflow) {
print "<li><a href='../out/out.SetWorkflow.php?documentid=".$documentid."&version=".$latestContent->getVersion()."'><i class=\"icon-random\"></i>".getMLText("set_workflow")."</a></li>";
}
}
}
/*
if($accessop->maySetExpires()) {
print "<li><a href='../out/out.SetExpires.php?documentid=".$documentid."'><i class=\"icon-time\"></i>".getMLText("set_expiry")."</a></li>";
}
*/
if($dms->getAllTransmittals($user)) {
print "<li><a href=\"out.AddToTransmittal.php?documentid=".$documentid."&version=".$latestContent->getVersion()."\"><i class=\"icon-list\"></i>".getMLText("add_to_transmittal")."</a></li>";
}
if($accessop->mayEditComment()) {
print "<li><a href=\"out.EditComment.php?documentid=".$documentid."&version=".$latestContent->getVersion()."\"><i class=\"icon-comment\"></i>".getMLText("edit_comment")."</a></li>";
}
if($accessop->mayEditAttributes()) {
print "<li><a href=\"out.EditAttributes.php?documentid=".$documentid."&version=".$latestContent->getVersion()."\"><i class=\"icon-edit\"></i>".getMLText("edit_attributes")."</a></li>";
}
// print "<li><a href=\"../op/op.Download.php?documentid=".$documentid."&vfile=1\"><i class=\"icon-info-sign\"></i>".getMLText("versioning_info")."</a></li>";
print "</ul>";
echo "</td>";
print "</tr></tbody>\n</table>\n";
$this->contentContainerEnd();
if($user->isAdmin()) {
$this->contentHeading(getMLText("status"));
$this->contentContainerStart();
$statuslog = $latestContent->getStatusLog();
echo "<table class=\"table table-condensed\"><thead>";
echo "<th>".getMLText('date')."</th><th>".getMLText('status')."</th><th>".getMLText('user')."</th><th>".getMLText('comment')."</th></tr>\n";
echo "</thead><tbody>";
foreach($statuslog as $entry) {
if($suser = $dms->getUser($entry['userID']))
$fullname = $suser->getFullName();
else
$fullname = "--";
echo "<tr><td>".$entry['date']."</td><td>".getOverallStatusText($entry['status'])."</td><td>".$fullname."</td><td>".$entry['comment']."</td></tr>\n";
}
print "</tbody>\n</table>\n";
$this->contentContainerEnd();
$wkflogs = $latestContent->getWorkflowLog();
if($wkflogs) {
$this->contentHeading(getMLText("workflow_summary"));
$this->contentContainerStart();
echo "<table class=\"table table-condensed\"><thead>";
echo "<th>".getMLText('date')."</th><th>".getMLText('action')."</th><th>".getMLText('user')."</th><th>".getMLText('comment')."</th></tr>\n";
echo "</thead><tbody>";
foreach($wkflogs as $wkflog) {
echo "<tr>";
echo "<td>".$wkflog->getDate()."</td>";
echo "<td>".$wkflog->getTransition()->getAction()->getName()."</td>";
$loguser = $wkflog->getUser();
echo "<td>".$loguser->getFullName()."</td>";
echo "<td>".$wkflog->getComment()."</td>";
echo "</tr>";
}
print "</tbody>\n</table>\n";
$this->contentContainerEnd();
}
}
?>
</div>
<?php
if($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') {
if((is_array($reviewStatus) && count($reviewStatus)>0) ||
(is_array($approvalStatus) && count($approvalStatus)>0)) {
?>
<div class="tab-pane <?php if($currenttab == 'revapp') echo 'active'; ?>" id="revapp">
<?php
$this->contentContainerstart();
print "<table class=\"table-condensed\">\n";
/* Just check fo an exting reviewStatus, even workflow mode is set
* to traditional_only_approval. There may be old documents which
* are still in S_DRAFT_REV.
*/
if (/*$workflowmode != 'traditional_only_approval' &&*/ is_array($reviewStatus) && count($reviewStatus)>0) {
print "<tr><td colspan=5>\n";
$this->contentSubHeading(getMLText("reviewers"));
print "</tr>";
print "<tr>\n";
print "<td width='20%'><b>".getMLText("name")."</b></td>\n";
print "<td width='20%'><b>".getMLText("last_update")."</b></td>\n";
print "<td width='25%'><b>".getMLText("comment")."</b></td>";
print "<td width='15%'><b>".getMLText("status")."</b></td>\n";
print "<td width='20%'></td>\n";
print "</tr>\n";
foreach ($reviewStatus as $r) {
$required = null;
$is_reviewer = false;
switch ($r["type"]) {
case 0: // Reviewer is an individual.
$required = $dms->getUser($r["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_user")." '".$r["required"]."'";
}
else {
$reqName = htmlspecialchars($required->getFullName()." (".$required->getLogin().")");
}
if($r["required"] == $user->getId() && ($user->getId() != $owner->getId() || $enableownerrevapp == 1))
$is_reviewer = true;
break;
case 1: // Reviewer is a group.
$required = $dms->getGroup($r["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_group")." '".$r["required"]."'";
}
else {
$reqName = "<i>".htmlspecialchars($required->getName())."</i>";
if($required->isMember($user) && ($user->getId() != $owner->getId() || $enableownerrevapp == 1))
$is_reviewer = true;
}
break;
}
print "<tr>\n";
print "<td>".$reqName."</td>\n";
print "<td><ul class=\"unstyled\"><li>".$r["date"]."</li>";
/* $updateUser is the user who has done the review */
$updateUser = $dms->getUser($r["userID"]);
print "<li>".(is_object($updateUser) ? htmlspecialchars($updateUser->getFullName()." (".$updateUser->getLogin().")") : "unknown user id '".$r["userID"]."'")."</li></ul></td>";
print "<td>".htmlspecialchars($r["comment"]);
if($r['file']) {
echo "<br />";
echo "<a href=\"../op/op.Download.php?documentid=".$documentid."&reviewlogid=".$r['reviewLogID']."\" class=\"btn btn-mini\"><i class=\"icon-download\"></i> ".getMLText('download')."</a>";
}
print "</td>\n";
print "<td>".getReviewStatusText($r["status"])."</td>\n";
print "<td><ul class=\"unstyled\">";
if($accessop->mayReview()) {
if ($is_reviewer && $r["status"]==0) {
print "<li><a href=\"../out/out.ReviewDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&reviewid=".$r['reviewID']."\" class=\"btn btn-mini\">".getMLText("add_review")."</a></li>";
}else if (($updateUser==$user)&&(($r["status"]==1)||($r["status"]==-1))&&(!$document->hasExpired())){
print "<li><a href=\"../out/out.ReviewDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&reviewid=".$r['reviewID']."\" class=\"btn btn-mini\">".getMLText("edit")."</a></li>";
}
}
print "</ul></td>\n";
print "</td>\n</tr>\n";
}
}
if (is_array($approvalStatus) && count($approvalStatus)>0) {
print "<tr><td colspan=5>\n";
$this->contentSubHeading(getMLText("approvers"));
print "</tr>";
print "<tr>\n";
print "<td width='20%'><b>".getMLText("name")."</b></td>\n";
print "<td width='20%'><b>".getMLText("last_update")."</b></td>\n";
print "<td width='25%'><b>".getMLText("comment")."</b></td>";
print "<td width='15%'><b>".getMLText("status")."</b></td>\n";
print "<td width='20%'></td>\n";
print "</tr>\n";
foreach ($approvalStatus as $a) {
$required = null;
$is_approver = false;
switch ($a["type"]) {
case 0: // Approver is an individual.
$required = $dms->getUser($a["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_user")." '".$a["required"]."'";
}
else {
$reqName = htmlspecialchars($required->getFullName()." (".$required->getLogin().")");
}
if($a["required"] == $user->getId())
$is_approver = true;
break;
case 1: // Approver is a group.
$required = $dms->getGroup($a["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_group")." '".$a["required"]."'";
}
else {
$reqName = "<i>".htmlspecialchars($required->getName())."</i>";
}
if($required->isMember($user) && ($user->getId() != $owner->getId() || $enableownerrevapp == 1))
$is_approver = true;
break;
}
print "<tr>\n";
print "<td>".$reqName."</td>\n";
print "<td><ul class=\"unstyled\"><li>".$a["date"]."</li>";
/* $updateUser is the user who has done the approval */
$updateUser = $dms->getUser($a["userID"]);
print "<li>".(is_object($updateUser) ? htmlspecialchars($updateUser->getFullName()." (".$updateUser->getLogin().")") : "unknown user id '".$a["userID"]."'")."</li></ul></td>";
print "<td>".htmlspecialchars($a["comment"]);
if($a['file']) {
echo "<br />";
echo "<a href=\"../op/op.Download.php?documentid=".$documentid."&approvelogid=".$a['approveLogID']."\" class=\"btn btn-mini\"><i class=\"icon-download\"></i> ".getMLText('download')."</a>";
}
echo "</td>\n";
print "<td>".getApprovalStatusText($a["status"])."</td>\n";
print "<td><ul class=\"unstyled\">";
if($accessop->mayApprove()) {
if ($is_approver && $a['status'] == 0 /*$status["status"]==S_DRAFT_APP*/) {
print "<li><a class=\"btn btn-mini\" href=\"../out/out.ApproveDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&approveid=".$a['approveID']."\">".getMLText("add_approval")."</a></li>";
}else if (($updateUser==$user)&&(($a["status"]==1)||($a["status"]==-1))&&(!$document->hasExpired())){
print "<li><a class=\"btn btn-mini\" href=\"../out/out.ApproveDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&approveid=".$a['approveID']."\">".getMLText("edit")."</a></li>";
}
}
print "</ul>";
print "</td>\n";
print "</td>\n</tr>\n";
}
}
print "</table>\n";
$this->contentContainerEnd();
if($user->isAdmin()) {
?>
<div class="row-fluid">
<?php
/* Check for an existing review log, even if the workflowmode
* is set to traditional_only_approval. There may be old documents
* that still have a review log if the workflow mode has been
* changed afterwards.
*/
if($latestContent->getReviewStatus(10) /*$workflowmode != 'traditional_only_approval'*/) {
?>
<div class="span6">
<?php $this->printProtocol($latestContent, 'review'); ?>
</div>
<?php
}
?>
<div class="span6">
<?php $this->printProtocol($latestContent, 'approval'); ?>
</div>
</div>
<?php
}
?>
</div>
<?php
}
} else {
if($workflow) {
?>
<div class="tab-pane <?php if($currenttab == 'workflow') echo 'active'; ?>" id="workflow">
<?php
$this->contentContainerStart();
if($user->isAdmin()) {
if(SeedDMS_Core_DMS::checkIfEqual($workflow->getInitState(), $latestContent->getWorkflowState())) {
print "<form action=\"../out/out.RemoveWorkflowFromDocument.php\" method=\"post\">".createHiddenFieldWithKey('removeworkflowfromdocument')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><button type=\"submit\" class=\"btn\"><i class=\"icon-remove\"></i> ".getMLText('rm_workflow')."</button></form>";
} else {
print "<form action=\"../out/out.RewindWorkflow.php\" method=\"post\">".createHiddenFieldWithKey('rewindworkflow')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><button type=\"submit\" class=\"btn\"><i class=\"icon-refresh\"></i> ".getMLText('rewind_workflow')."</button></form>";
}
}
echo "<h4>".$workflow->getName()."</h4>";
if($parentworkflow = $latestContent->getParentWorkflow()) {
echo "<p>Sub workflow of '".$parentworkflow->getName()."'</p>";
}
echo "<div class=\"row-fluid\">";
echo "<div class=\"span8\">";
echo "<h5>".getMLText('current_state').": ".$workflowstate->getName()."</h5>";
echo "<table class=\"table table-condensed\">\n";
echo "<tr>";
echo "<td>".getMLText('next_state').":</td>";
foreach($transitions as $transition) {
$nextstate = $transition->getNextState();
echo "<td>".$nextstate->getName()."</td>";
}
echo "</tr>";
echo "<tr>";
echo "<td>".getMLText('action').":</td>";
foreach($transitions as $transition) {
$action = $transition->getAction();
echo "<td>".getMLText('action_'.strtolower($action->getName()), array(), $action->getName())."</td>";
}
echo "</tr>";
echo "<tr>";
echo "<td>".getMLText('users').":</td>";
foreach($transitions as $transition) {
$transusers = $transition->getUsers();
echo "<td>";
foreach($transusers as $transuser) {
$u = $transuser->getUser();
echo $u->getFullName();
if($document->getAccessMode($u) < M_READ) {
echo " (no access)";
}
echo "<br />";
}
echo "</td>";
}
echo "</tr>";
echo "<tr>";
echo "<td>".getMLText('groups').":</td>";
foreach($transitions as $transition) {
$transgroups = $transition->getGroups();
echo "<td>";
foreach($transgroups as $transgroup) {
$g = $transgroup->getGroup();
echo getMLText('at_least_n_users_of_group',
array("number_of_users" => $transgroup->getNumOfUsers(),
"group" => $g->getName()));
if ($document->getGroupAccessMode($g) < M_READ) {
echo " (no access)";
}
echo "<br />";
}
echo "</td>";
}
echo "</tr>";
echo "<tr class=\"success\">";
echo "<td>".getMLText('users_done_work').":</td>";
foreach($transitions as $transition) {
echo "<td>";
if($latestContent->executeWorkflowTransitionIsAllowed($transition)) {
echo "Done";
}
$wkflogs = $latestContent->getWorkflowLog($transition);
foreach($wkflogs as $wkflog) {
$loguser = $wkflog->getUser();
echo $loguser->getFullName()." (";
$names = array();
foreach($loguser->getGroups() as $loggroup) {
$names[] = $loggroup->getName();
}
echo implode(", ", $names);
echo ") - ";
echo $wkflog->getDate();
}
echo "</td>";
}
echo "</tr>";
echo "<tr>";
echo "<td></td>";
foreach($transitions as $transition) {
echo "<td>";
if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) {
$action = $transition->getAction();
print "<form action=\"../out/out.TriggerWorkflow.php\" method=\"post\">".createHiddenFieldWithKey('triggerworkflow')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><input type=\"hidden\" name=\"transition\" value=\"".$transition->getID()."\" /><input type=\"submit\" class=\"btn\" value=\"".getMLText('action_'.strtolower($action->getName()), array(), $action->getName())."\" /></form>";
}
echo "</td>";
}
echo "</tr>";
echo "</table>";
$workflows = $dms->getAllWorkflows();
if($workflows) {
$subworkflows = array();
foreach($workflows as $wkf) {
if($wkf->getInitState()->getID() == $workflowstate->getID()) {
if($workflow->getID() != $wkf->getID()) {
$subworkflows[] = $wkf;
}
}
}
if($subworkflows) {
echo "<form action=\"../out/out.RunSubWorkflow.php\" method=\"post\">".createHiddenFieldWithKey('runsubworkflow')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" />";
echo "<select name=\"subworkflow\">";
foreach($subworkflows as $subworkflow) {
echo "<option value=\"".$subworkflow->getID()."\">".$subworkflow->getName()."</option>";
}
echo "</select>";
echo "<label class=\"inline\">";
echo "<input type=\"submit\" class=\"btn\" value=\"".getMLText('run_subworkflow')."\" />";
echo "</lable>";
echo "</form>";
}
}
/* If in a sub workflow, the check if return the parent workflow
* is possible.
*/
if($parentworkflow = $latestContent->getParentWorkflow()) {
$states = $parentworkflow->getStates();
foreach($states as $state) {
/* Check if the current workflow state is also a state in the
* parent workflow
*/
if($latestContent->getWorkflowState()->getID() == $state->getID()) {
echo "Switching from sub workflow '".$workflow->getName()."' into state ".$state->getName()." of parent workflow '".$parentworkflow->getName()."' is possible<br />";
/* Check if the transition from the state where the sub workflow
* starts into the current state is also allowed in the parent
* workflow. Checking at this point is actually too late, because
* the sub workflow shouldn't be entered in the first place,
* but that is difficult to check.
*/
/* If the init state has not been left, return is always possible */
if($workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()) {
echo "Initial state of sub workflow has not been left. Return to parent workflow is possible<br />";
echo "<form action=\"../out/out.ReturnFromSubWorkflow.php\" method=\"post\">".createHiddenFieldWithKey('returnfromsubworkflow')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" />";
echo "<input type=\"submit\" class=\"btn\" value=\"".getMLText('return_from_subworkflow')."\" />";
echo "</form>";
} else {
/* Get a transition from the last state in the parent workflow
* (which is the initial state of the sub workflow) into
* current state.
*/
echo "Check for transition from ".$workflow->getInitState()->getName()." into ".$latestContent->getWorkflowState()->getName()." is possible in parentworkflow ".$parentworkflow->getID()."<br />";
$transitions = $parentworkflow->getTransitionsByStates($workflow->getInitState(), $latestContent->getWorkflowState());
if($transitions) {
echo "Found transitions in workflow ".$parentworkflow->getID()."<br />";
foreach($transitions as $transition) {
if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) {
echo "Triggering transition is allowed<br />";
echo "<form action=\"../out/out.ReturnFromSubWorkflow.php\" method=\"post\">".createHiddenFieldWithKey('returnfromsubworkflow')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><input type=\"hidden\" name=\"transition\" value=\"".$transition->getID()."\" />";
echo "<input type=\"submit\" class=\"btn\" value=\"".getMLText('return_from_subworkflow')."\" />";
echo "</form>";
}
}
}
}
}
}
}
echo "</div>";
echo "</div>";
$this->contentContainerEnd();
?>
</div>
<?php
}
}
if(is_array($receiptStatus) && count($receiptStatus)>0) {
?>
<div class="tab-pane <?php if($currenttab == 'recipients') echo 'active'; ?>" id="recipients">
<?php
$this->contentContainerStart();
print "<table class=\"table-condensed\">\n";
print "<tr><td colspan=5>\n";
$this->contentSubHeading(getMLText("recipients"));
print "</tr>";
print "<tr>\n";
print "<td width='20%'><b>".getMLText("name")."</b></td>\n";
print "<td width='20%'><b>".getMLText("last_update")."</b></td>\n";
print "<td width='25%'><b>".getMLText("comment")."</b></td>";
print "<td width='15%'><b>".getMLText("status")."</b></td>\n";
print "<td width='20%'></td>\n";
print "</tr>\n";
foreach ($receiptStatus as $r) {
$required = null;
$is_recipient = false;
switch ($r["type"]) {
case 0: // Reviewer is an individual.
$required = $dms->getUser($r["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_user")." '".$r["required"]."'";
}
else {
$reqName = htmlspecialchars($required->getFullName()." (".$required->getLogin().")");
}
if($r["required"] == $user->getId() && ($user->getId() != $owner->getId() || $enableownerrevapp == 1))
$is_recipient = true;
break;
case 1: // Reviewer is a group.
$required = $dms->getGroup($r["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_group")." '".$r["required"]."'";
}
else {
$reqName = "<i>".htmlspecialchars($required->getName())."</i>";
if($required->isMember($user) && ($user->getId() != $owner->getId() || $enableownerrevapp == 1))
$is_recipient = true;
}
break;
}
print "<tr>\n";
print "<td>".$reqName."</td>\n";
print "<td><ul class=\"unstyled\"><li>".$r["date"]."</li>";
/* $updateUser is the user who has done the receipt */
$updateUser = $dms->getUser($r["userID"]);
print "<li>".(is_object($updateUser) ? htmlspecialchars($updateUser->getFullName()." (".$updateUser->getLogin().")") : "unknown user id '".$r["userID"]."'")."</li></ul></td>";
print "<td>".htmlspecialchars($r["comment"])."</td>\n";
print "<td>".getReceiptStatusText($r["status"])."</td>\n";
print "<td><ul class=\"unstyled\">";
if($accessop->mayReceipt()) {
if ($is_recipient && $r["status"]==0) {
print "<li><a href=\"../out/out.ReceiptDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&receiptid=".$r['receiptID']."\" class=\"btn btn-mini\">".getMLText("add_receipt")."</a></li>";
}else if (($updateUser==$user)&&(($r["status"]==1)||($r["status"]==-1))&&(!$document->hasExpired())){
print "<li><a href=\"../out/out.ReceiptDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&receiptid=".$r['receiptID']."\" class=\"btn btn-mini\">".getMLText("edit")."</a></li>";
}
}
print "</ul></td>\n";
print "</td>\n</tr>\n";
}
?>
</table>
<?php
$this->contentContainerEnd();
if($user->isAdmin()) {
?>
<div class="row-fluid">
<div class="span12">
<?php
$this->printProtocol($latestContent, 'receipt');
?>
</div>
</div>
<?php
}
?>
</div>
<?php
}
if(is_array($revisionStatus) && count($revisionStatus)>0) {
?>
<div class="tab-pane <?php if($currenttab == 'revision') echo 'active'; ?>" id="revision">
<?php
if($status['status'] == S_RELEASED) {
if($latestContent->getRevisionDate()) {
?>
<div class="alert alert-warning">
<?php
print getMLText('revise_document_on', array('date' => substr($latestContent->getRevisionDate(), 0, 10)));
?>
</div>
<?php
}
} /*elseif($status['status'] != S_IN_REVISION) {
?>
<div class="alert alert-info"><?= getMLText('no_revision_planed') ?></div>
<?php
} */
$this->contentContainerStart();
print "<table class=\"table-condensed\">\n";
print "<tr><td colspan=5>\n";
$this->contentSubHeading(getMLText("revisors"));
print "</tr>";
print "<tr>\n";
print "<td width='20%'><b>".getMLText("name")."</b></td>\n";
print "<td width='20%'><b>".getMLText("last_update")."</b></td>\n";
print "<td width='25%'><b>".getMLText("comment")."</b></td>";
print "<td width='15%'><b>".getMLText("status")."</b></td>\n";
print "<td width='20%'></td>\n";
print "</tr>\n";
foreach ($revisionStatus as $r) {
$required = null;
$is_recipient = false;
switch ($r["type"]) {
case 0: // Reviewer is an individual.
$required = $dms->getUser($r["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_user")." '".$r["required"]."'";
}
else {
$reqName = htmlspecialchars($required->getFullName()." (".$required->getLogin().")");
}
if($r["required"] == $user->getId() && ($user->getId() != $owner->getId() || $enableownerrevapp == 1))
$is_recipient = true;
break;
case 1: // Reviewer is a group.
$required = $dms->getGroup($r["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_group")." '".$r["required"]."'";
}
else {
$reqName = "<i>".htmlspecialchars($required->getName())."</i>";
if($required->isMember($user) && ($user->getId() != $owner->getId() || $enableownerrevapp == 1))
$is_recipient = true;
}
break;
}
print "<tr>\n";
print "<td>".$reqName."</td>\n";
print "<td><ul class=\"unstyled\"><li>".$r["date"]."</li>";
/* $updateUser is the user who has done the revision */
$updateUser = $dms->getUser($r["userID"]);
print "<li>".(is_object($updateUser) ? htmlspecialchars($updateUser->getFullName()." (".$updateUser->getLogin().")") : "unknown user id '".$r["userID"]."'")."</li></ul></td>";
print "<td>".htmlspecialchars($r["comment"])."</td>\n";
print "<td>".getRevisionStatusText($r["status"])."</td>\n";
print "<td><ul class=\"unstyled\">";
if($accessop->mayRevise()) {
if ($is_recipient && $r["status"]==0) {
print "<li><a href=\"../out/out.ReviseDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&revisionid=".$r['revisionID']."\" class=\"btn btn-mini\">".getMLText("add_revision")."</a></li>";
} elseif (($updateUser==$user)&&(($r["status"]==1)||($r["status"]==-1))&&(!$document->hasExpired())){
print "<li><a href=\"../out/out.ReviseDocument.php?documentid=".$documentid."&version=".$latestContent->getVersion()."&revisionid=".$r['revisionID']."\" class=\"btn btn-mini\">".getMLText("edit")."</a></li>";
}
}
print "</ul></td>\n";
print "</td>\n</tr>\n";
}
?>
</table>
<?php
$this->contentContainerEnd();
if($user->isAdmin()) {
?>
<div class="row-fluid">
<div class="span12">
<?php
$this->printProtocol($latestContent, 'revision');
?>
</div>
</div>
<?php
}
?>
</div>
<?php
}
if (count($versions)>1) {
?>
<div class="tab-pane <?php if($currenttab == 'previous') echo 'active'; ?>" id="previous">
<?php
$this->contentContainerStart();
print "<table class=\"table\">";
print "<thead>\n<tr>\n";
print "<th width='10%'></th>\n";
print "<th width='30%'>".getMLText("file")."</th>\n";
print "<th width='25%'>".getMLText("comment")."</th>\n";
print "<th width='15%'>".getMLText("status")."</th>\n";
print "<th width='20%'></th>\n";
print "</tr>\n</thead>\n<tbody>\n";
for ($i = count($versions)-2; $i >= 0; $i--) {
$version = $versions[$i];
$vstat = $version->getStatus();
$workflow = $version->getWorkflow();
$workflowstate = $version->getWorkflowState();
// verify if file exists
$file_exists=file_exists($dms->contentDir . $version->getPath());
print "<tr>\n";
print "<td nowrap>";
if($file_exists) {
if ($viewonlinefiletypes && in_array(strtolower($version->getFileType()), $viewonlinefiletypes)) {
print "<a target=\"_blank\" href=\"../op/op.ViewOnline.php?documentid=".$documentid."&version=".$version->getVersion()."\">";
} else {
print "<a href=\"../op/op.Download.php?documentid=".$documentid."&version=".$version->getVersion()."\">";
}
}
$previewer->createPreview($version);
if($previewer->hasPreview($version)) {
print("<img class=\"mimeicon\" width=\"".$previewwidthdetail."\" src=\"../op/op.Preview.php?documentid=".$document->getID()."&version=".$version->getVersion()."&width=".$previewwidthdetail."\" title=\"".htmlspecialchars($version->getMimeType())."\">");
} else {
print "<img class=\"mimeicon\" src=\"".$this->getMimeIcon($version->getFileType())."\" title=\"".htmlspecialchars($version->getMimeType())."\">";
}
if($file_exists) {
print "</a>\n";
}
print "</td>\n";
print "<td><ul class=\"unstyled\">\n";
print "<li>".$version->getOriginalFileName()."</li>\n";
print "<li>".getMLText('version').": ".$version->getVersion()."</li>\n";
if ($file_exists) print "<li>". SeedDMS_Core_File::format_filesize($version->getFileSize()) .", ".htmlspecialchars($version->getMimeType())."</li>";
else print "<li><span class=\"warning\">".getMLText("document_deleted")."</span></li>";
$updatingUser = $version->getUser();
print "<li>".getMLText("uploaded_by")." <a href=\"mailto:".$updatingUser->getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."</a></li>";
print "<li>".getLongReadableDate($version->getDate())."</li>";
print "</ul>\n";
print "<ul class=\"documentDetail\">\n";
$attributes = $version->getAttributes();
if($attributes) {
foreach($attributes as $attribute) {
$arr = $this->callHook('showDocumentContentAttribute', $version, $attribute);
if(is_array($arr)) {
print "<li>".$arr[0].": ".$arr[1]."</li>\n";
} else {
$attrdef = $attribute->getAttributeDefinition();
print "<li>".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars(implode(', ', $attribute->getValueAsArray()))."</li>\n";
}
}
}
print "</ul>\n";
print "<td>".htmlspecialchars($version->getComment())."</td>";
print "<td>".getOverallStatusText($vstat["status"])."</td>";
print "<td>";
print "<ul class=\"actions unstyled\">";
if ($file_exists){
print "<li><a href=\"../op/op.Download.php?documentid=".$documentid."&version=".$version->getVersion()."\"><i class=\"icon-download\"></i>".getMLText("download")."</a>";
if ($viewonlinefiletypes && in_array(strtolower($version->getFileType()), $viewonlinefiletypes))
print "<li><a target=\"_blank\" href=\"../op/op.ViewOnline.php?documentid=".$documentid."&version=".$version->getVersion()."\"><i class=\"icon-star\"></i>" . getMLText("view_online") . "</a>";
}
print "</ul>";
print "<ul class=\"actions unstyled\">";
/* Only admin has the right to remove version in any case or a regular
* user if enableVersionDeletion is on
*/
if($accessop->mayRemoveVersion()) {
print "<li><a href=\"out.RemoveVersion.php?documentid=".$documentid."&version=".$version->getVersion()."\"><i class=\"icon-remove\"></i>".getMLText("rm_version")."</a></li>";
}
if($accessop->mayEditComment()) {
print "<li><a href=\"out.EditComment.php?documentid=".$document->getID()."&version=".$version->getVersion()."\"><i class=\"icon-comment\"></i>".getMLText("edit_comment")."</a></li>";
}
if($accessop->mayEditAttributes()) {
print "<li><a href=\"out.EditAttributes.php?documentid=".$document->getID()."&version=".$latestContent->getVersion()."\"><i class=\"icon-edit\"></i>".getMLText("edit_attributes")."</a></li>";
}
//print "<li><a href='../out/out.DocumentVersionDetail.php?documentid=".$documentid."&version=".$version->getVersion()."'><i class=\"icon-info-sign\"></i>".getMLText("details")."</a></li>";
print "</ul>";
print "</td>\n</tr>\n";
}
print "</tbody>\n</table>\n";
$this->contentContainerEnd();
?>
</div>
<?php
}
?>
<div class="tab-pane <?php if($currenttab == 'attachments') echo 'active'; ?>" id="attachments">
<?php
$this->contentContainerStart();
if (count($files) > 0) {
print "<table class=\"table\">";
print "<thead>\n<tr>\n";
print "<th width='20%'></th>\n";
print "<th width='20%'>".getMLText("file")."</th>\n";
print "<th width='40%'>".getMLText("comment")."</th>\n";
print "<th width='20%'></th>\n";
print "</tr>\n</thead>\n<tbody>\n";
foreach($files as $file) {
$file_exists=file_exists($dms->contentDir . $file->getPath());
$responsibleUser = $file->getUser();
print "<tr>";
print "<td>";
$previewer->createPreview($file, $previewwidthdetail);
if($file_exists) {
if ($viewonlinefiletypes && in_array(strtolower($file->getFileType()), $viewonlinefiletypes))
print "<a target=\"_blank\" href=\"../op/op.ViewOnline.php?documentid=".$documentid."&file=". $file->getID()."\">";
else
print "<a href=\"../op/op.Download.php?documentid=".$documentid."&file=".$file->getID()."\">";
}
if($previewer->hasPreview($file)) {
print("<img class=\"mimeicon\" width=\"".$previewwidthdetail."\" src=\"../op/op.Preview.php?documentid=".$document->getID()."&file=".$file->getID()."&width=".$previewwidthdetail."\" title=\"".htmlspecialchars($file->getMimeType())."\">");
} else {
print "<img class=\"mimeicon\" src=\"".$this->getMimeIcon($file->getFileType())."\" title=\"".htmlspecialchars($file->getMimeType())."\">";
}
if($file_exists) {
print "</a>";
}
print "</td>";
print "<td><ul class=\"unstyled\">\n";
print "<li>".htmlspecialchars($file->getName())."</li>\n";
print "<li>".htmlspecialchars($file->getOriginalFileName())."</li>\n";
if ($file_exists)
print "<li>".SeedDMS_Core_File::format_filesize(filesize($dms->contentDir . $file->getPath())) ." bytes, ".htmlspecialchars($file->getMimeType())."</li>";
else print "<li>".htmlspecialchars($file->getMimeType())." - <span class=\"warning\">".getMLText("document_deleted")."</span></li>";
print "<li>".getMLText("uploaded_by")." <a href=\"mailto:".$responsibleUser->getEmail()."\">".htmlspecialchars($responsibleUser->getFullName())."</a></li>";
print "<li>".getLongReadableDate($file->getDate())."</li>";
print "<td>".htmlspecialchars($file->getComment())."</td>";
print "<td><ul class=\"unstyled actions\">";
if ($file_exists) {
print "<li><a href=\"../op/op.Download.php?documentid=".$documentid."&file=".$file->getID()."\"><i class=\"icon-download\"></i>".getMLText('download')."</a>";
if ($viewonlinefiletypes && in_array(strtolower($file->getFileType()), $viewonlinefiletypes))
print "<li><a target=\"_blank\" href=\"../op/op.ViewOnline.php?documentid=".$documentid."&file=". $file->getID()."\"><i class=\"icon-star\"></i>" . getMLText("view_online") . "</a></li>";
} else print "<li><img class=\"mimeicon\" src=\"images/icons/".$this->getMimeIcon($file->getFileType())."\" title=\"".htmlspecialchars($file->getMimeType())."\">";
echo "</ul><ul class=\"unstyled actions\">";
if (($document->getAccessMode($user) == M_ALL)||($file->getUserID()==$user->getID()))
print "<li><a href=\"out.RemoveDocumentFile.php?documentid=".$documentid."&fileid=".$file->getID()."\"><i class=\"icon-remove\"></i>".getMLText("delete")."</a></li>";
print "</ul></td>";
print "</tr>";
}
print "</tbody>\n</table>\n";
}
else printMLText("no_attached_files");
if ($document->getAccessMode($user) >= M_READWRITE){
print "<ul class=\"unstyled\"><li><a href=\"../out/out.AddFile.php?documentid=".$documentid."\" class=\"btn\">".getMLText("add")."</a></ul>\n";
}
$this->contentContainerEnd();
?>
</div>
<div class="tab-pane <?php if($currenttab == 'links') echo 'active'; ?>" id="links">
<?php
$this->contentContainerStart();
if (count($links) > 0) {
print "<table class=\"table table-condensed\">";
print "<thead>\n<tr>\n";
print "<th></th>\n";
print "<th></th>\n";
print "<th>".getMLText("comment")."</th>\n";
print "<th></th>\n";
print "<th></th>\n";
print "</tr>\n</thead>\n<tbody>\n";
foreach($links as $link) {
$responsibleUser = $link->getUser();
$targetDoc = $link->getTarget();
$targetlc = $targetDoc->getLatestContent();
$previewer->createPreview($targetlc, $previewwidthlist);
print "<tr>";
print "<td><a href=\"../op/op.Download.php?documentid=".$targetDoc->getID()."&version=".$targetlc->getVersion()."\">";
if($previewer->hasPreview($targetlc)) {
print "<img class=\"mimeicon\" width=\"".$previewwidthlist."\"src=\"../op/op.Preview.php?documentid=".$targetDoc->getID()."&version=".$targetlc->getVersion()."&width=".$previewwidthlist."\" title=\"".htmlspecialchars($targetlc->getMimeType())."\">";
} else {
print "<img class=\"mimeicon\" src=\"".$this->getMimeIcon($targetlc->getFileType())."\" title=\"".htmlspecialchars($targetlc->getMimeType())."\">";
}
print "</td>";
print "<td><a href=\"out.ViewDocument.php?documentid=".$targetDoc->getID()."\" class=\"linklist\">".htmlspecialchars($targetDoc->getName())."</a></td>";
print "<td>".htmlspecialchars($targetDoc->getComment())."</td>";
print "<td>".getMLText("document_link_by")." ".htmlspecialchars($responsibleUser->getFullName());
if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL ))
print "<br />".getMLText("document_link_public").": ".(($link->isPublic()) ? getMLText("yes") : getMLText("no"));
print "</td>";
print "<td><span class=\"actions\">";
if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL ))
print "<form action=\"../op/op.RemoveDocumentLink.php\" method=\"post\">".createHiddenFieldWithKey('removedocumentlink')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"linkid\" value=\"".$link->getID()."\" /><button type=\"submit\" class=\"btn btn-mini\"><i class=\"icon-remove\"></i> ".getMLText("delete")."</button></form>";
print "</span></td>";
print "</tr>";
}
print "</tbody>\n</table>\n";
}
else printMLText("no_linked_files");
if (!$user->isGuest()){
?>
<br>
<form action="../op/op.AddDocumentLink.php" name="form1">
<input type="hidden" name="documentid" value="<?php print $documentid;?>">
<table class="table-condensed">
<tr>
<td><?php printMLText("add_document_link");?>:</td>
<td><?php $this->printDocumentChooser("form1");?></td>
</tr>
<?php
if ($document->getAccessMode($user) >= M_READWRITE) {
print "<tr><td>".getMLText("document_link_public")."</td>";
print "<td>";
print "<input type=\"checkbox\" name=\"public\" value=\"true\" checked />";
print "</td></tr>";
}
?>
<tr>
<td></td>
<td><button type="submit" class="btn"><i class="icon-save"></i> <?php printMLText("save")?></button></td>
</tr>
</table>
</form>
<?php
}
$this->contentContainerEnd();
if (count($reverselinks) > 0) {
$this->contentHeading(getMLText("reverse_links"));
$this->contentContainerStart();
print "<table class=\"table table-condensed\">";
print "<thead>\n<tr>\n";
print "<th></th>\n";
print "<th></th>\n";
print "<th>".getMLText("comment")."</th>\n";
print "<th></th>\n";
print "<th></th>\n";
print "</tr>\n</thead>\n<tbody>\n";
foreach($reverselinks as $link) {
$responsibleUser = $link->getUser();
$sourceDoc = $link->getDocument();
$sourcelc = $sourceDoc->getLatestContent();
$previewer->createPreview($sourcelc, $previewwidthlist);
print "<tr>";
print "<td><a href=\"../op/op.Download.php?documentid=".$sourceDoc->getID()."&version=".$sourcelc->getVersion()."\">";
if($previewer->hasPreview($sourcelc)) {
print "<img class=\"mimeicon\" width=\"".$previewwidthlist."\"src=\"../op/op.Preview.php?documentid=".$sourceDoc->getID()."&version=".$sourcelc->getVersion()."&width=".$previewwidthlist."\" title=\"".htmlspecialchars($sourcelc->getMimeType())."\">";
} else {
print "<img class=\"mimeicon\" src=\"".$this->getMimeIcon($sourcelc->getFileType())."\" title=\"".htmlspecialchars($sourcelc->getMimeType())."\">";
}
print "</td>";
print "<td><a href=\"out.ViewDocument.php?documentid=".$sourceDoc->getID()."\" class=\"linklist\">".htmlspecialchars($sourceDoc->getName())."</a></td>";
print "<td>".htmlspecialchars($sourceDoc->getComment())."</td>";
print "<td>".getMLText("document_link_by")." ".htmlspecialchars($responsibleUser->getFullName());
if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL ))
print "<br />".getMLText("document_link_public").": ".(($link->isPublic()) ? getMLText("yes") : getMLText("no"));
print "</td>";
print "<td><span class=\"actions\">";
if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL ))
print "<form action=\"../op/op.RemoveDocumentLink.php\" method=\"post\">".createHiddenFieldWithKey('removedocumentlink')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"linkid\" value=\"".$link->getID()."\" /><button type=\"submit\" class=\"btn btn-mini\"><i class=\"icon-remove\"></i> ".getMLText("delete")."</button></form>";
print "</span></td>";
print "</tr>";
}
print "</tbody>\n</table>\n";
$this->contentContainerEnd();
}
?>
</div>
</div>
</div>
</div>
<?php
$this->htmlEndPage();
} /* }}} */
}
?>