2012-12-14 07:53:13 +00:00
< ? php
/**
* Implementation of ViewDocument view
*
* @ category DMS
2013-02-14 11:10:53 +00:00
* @ package SeedDMS
2012-12-14 07:53:13 +00:00
* @ 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
*/
2021-04-18 05:08:00 +00:00
//require_once("class.Bootstrap.php");
2012-12-14 07:53:13 +00:00
2016-04-26 10:16:29 +00:00
/**
* Include class to preview documents
*/
require_once ( " SeedDMS/Preview.php " );
2012-12-14 07:53:13 +00:00
/**
* Class which outputs the html page for ViewDocument view
*
* @ category DMS
2013-02-14 11:10:53 +00:00
* @ package SeedDMS
2012-12-14 07:53:13 +00:00
* @ 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 @
*/
2021-04-18 05:08:00 +00:00
class SeedDMS_View_ViewDocument extends SeedDMS_Theme_Style {
2012-12-14 07:53:13 +00:00
2015-04-14 17:38:50 +00:00
protected function getAccessModeText ( $defMode ) { /* {{{ */
2013-02-06 13:58:15 +00:00
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 ;
}
} /* }}} */
2015-04-14 17:38:50 +00:00
protected function printAccessList ( $obj ) { /* {{{ */
2013-02-06 13:58:15 +00:00
$accessList = $obj -> getAccessList ();
if ( count ( $accessList [ " users " ]) == 0 && count ( $accessList [ " groups " ]) == 0 )
return ;
2017-01-26 13:44:07 +00:00
$content = '' ;
2013-02-06 13:58:15 +00:00
for ( $i = 0 ; $i < count ( $accessList [ " groups " ]); $i ++ )
{
$group = $accessList [ " groups " ][ $i ] -> getGroup ();
$accesstext = $this -> getAccessModeText ( $accessList [ " groups " ][ $i ] -> getMode ());
2017-01-26 13:44:07 +00:00
$content .= $accesstext . " : " . htmlspecialchars ( $group -> getName ());
2013-02-06 13:58:15 +00:00
if ( $i + 1 < count ( $accessList [ " groups " ]) || count ( $accessList [ " users " ]) > 0 )
2017-01-26 13:44:07 +00:00
$content .= " <br /> " ;
2013-02-06 13:58:15 +00:00
}
for ( $i = 0 ; $i < count ( $accessList [ " users " ]); $i ++ )
{
$user = $accessList [ " users " ][ $i ] -> getUser ();
$accesstext = $this -> getAccessModeText ( $accessList [ " users " ][ $i ] -> getMode ());
2017-01-26 13:44:07 +00:00
$content .= $accesstext . " : " . htmlspecialchars ( $user -> getFullName ());
2013-02-06 13:58:15 +00:00
if ( $i + 1 < count ( $accessList [ " users " ]))
2017-01-26 13:44:07 +00:00
$content .= " <br /> " ;
}
if ( count ( $accessList [ " groups " ]) + count ( $accessList [ " users " ]) > 3 ) {
$this -> printPopupBox ( getMLText ( 'list_access_rights' ), $content );
} else {
echo $content ;
2013-02-06 13:58:15 +00:00
}
} /* }}} */
2015-04-14 17:38:50 +00:00
/**
* 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>
2020-08-28 09:53:34 +00:00
< td >< ? php echo $this -> getAttributeValue ( $attribute ); ?> </td>
2015-04-14 17:38:50 +00:00
</ tr >
< ? php
2015-06-23 07:18:36 +00:00
} /* }}} */
2020-09-23 06:37:51 +00:00
protected function printVersionAttributes ( $folder , $version ) { /* {{{ */
$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 ()) . " : " ;
$this -> printAttributeValue ( $attribute );
echo " </li> \n " ;
}
}
}
2022-05-06 10:54:11 +00:00
$arrarr = $this -> callHook ( 'additionalDocumentContentInfo' , $version );
if ( is_array ( $arrarr )) {
foreach ( $arrarr as $arr ) {
print " <li> " . $arr [ 0 ] . " : " . $arr [ 1 ] . " </li> \n " ;
}
} elseif ( is_string ( $arrarr )) {
echo $arrarr ;
}
2020-09-23 06:37:51 +00:00
} /* }}} */
2017-03-10 19:08:01 +00:00
function documentListItem () { /* {{{ */
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
$previewwidth = $this -> params [ 'previewWidthList' ];
$cachedir = $this -> params [ 'cachedir' ];
2021-10-06 13:03:03 +00:00
$conversionmgr = $this -> params [ 'conversionmgr' ];
$previewconverters = $this -> params [ 'previewConverters' ];
2022-09-07 15:09:57 +00:00
$previewwidthlist = $this -> params [ 'previewWidthList' ];
$previewwidthdetail = $this -> params [ 'previewWidthDetail' ];
2021-10-06 13:03:03 +00:00
$timeout = $this -> params [ 'timeout' ];
$xsendfile = $this -> params [ 'xsendfile' ];
2017-03-10 19:08:01 +00:00
$document = $this -> params [ 'document' ];
2021-10-06 13:03:03 +00:00
2017-03-10 19:08:01 +00:00
if ( $document ) {
if ( $document -> getAccessMode ( $user ) >= M_READ ) {
2021-10-06 13:03:03 +00:00
$previewer = new SeedDMS_Preview_Previewer ( $cachedir , $previewwidth , $timeout , $xsendfile );
if ( $conversionmgr )
$previewer -> setConversionMgr ( $conversionmgr );
else
$previewer -> setConverters ( $previewconverters );
2018-08-08 04:55:56 +00:00
$txt = $this -> callHook ( 'documentListItem' , $document , $previewer , false , 'viewitem' );
2017-03-10 19:08:01 +00:00
if ( is_string ( $txt ))
$content = $txt ;
else
$content = $this -> documentListRow ( $document , $previewer , true );
echo $content ;
}
}
} /* }}} */
2015-10-19 11:15:20 +00:00
function timelinedata () { /* {{{ */
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
$document = $this -> params [ 'document' ];
$jsondata = array ();
if ( $user -> isAdmin ()) {
$data = $document -> getTimeline ();
2015-10-20 16:36:24 +00:00
foreach ( $data as $i => $item ) {
2015-10-19 11:15:20 +00:00
switch ( $item [ 'type' ]) {
case 'add_version' :
$msg = getMLText ( 'timeline_' . $item [ 'type' ], array ( 'document' => htmlspecialchars ( $item [ 'document' ] -> getName ()), 'version' => $item [ 'version' ]));
break ;
case 'add_file' :
$msg = getMLText ( 'timeline_' . $item [ 'type' ], array ( 'document' => htmlspecialchars ( $item [ 'document' ] -> getName ())));
break ;
case 'status_change' :
$msg = getMLText ( 'timeline_' . $item [ 'type' ], array ( 'document' => htmlspecialchars ( $item [ 'document' ] -> getName ()), 'version' => $item [ 'version' ], 'status' => getOverallStatusText ( $item [ 'status' ])));
break ;
default :
$msg = '???' ;
}
2015-10-20 16:36:24 +00:00
$data [ $i ][ 'msg' ] = $msg ;
2015-10-19 11:15:20 +00:00
}
foreach ( $data as $item ) {
if ( $item [ 'type' ] == 'status_change' )
$classname = $item [ 'type' ] . " _ " . $item [ 'status' ];
else
$classname = $item [ 'type' ];
$d = makeTsFromLongDate ( $item [ 'date' ]);
$jsondata [] = array ( 'start' => date ( 'c' , $d ) /*$item['date']*/ , 'content' => $item [ 'msg' ], 'className' => $classname );
}
}
header ( 'Content-Type: application/json' );
echo json_encode ( $jsondata );
} /* }}} */
2015-12-11 19:29:52 +00:00
function js () { /* {{{ */
2016-03-21 07:33:41 +00:00
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
2015-12-11 19:29:52 +00:00
$document = $this -> params [ 'document' ];
2021-07-16 14:03:34 +00:00
$enableDropUpload = $this -> params [ 'enableDropUpload' ];
$maxuploadsize = $this -> params [ 'maxuploadsize' ];
2015-12-11 19:29:52 +00:00
2021-03-10 14:58:22 +00:00
header ( 'Content-Type: application/javascript; charset=UTF-8' );
2021-05-27 19:53:49 +00:00
parent :: jsTranslations ( array ( 'js_form_error' , 'js_form_errors' , 'cancel' , 'splash_move_document' , 'confirm_move_document' , 'move_document' , 'confirm_transfer_link_document' , 'transfer_content' , 'link_document' , 'splash_move_folder' , 'confirm_move_folder' , 'move_folder' ));
2016-03-21 07:33:41 +00:00
if ( $user -> isAdmin ()) {
2019-02-06 12:22:52 +00:00
$latestContent = $this -> callHook ( 'documentLatestContent' , $document );
if ( $latestContent === null )
$latestContent = $document -> getLatestContent ();
$this -> printTimelineJs ( 'out.ViewDocument.php?action=timelinedata&documentid=' . $latestContent -> getDocument () -> getID (), 300 , '' , date ( 'Y-m-d' ));
2016-03-21 07:33:41 +00:00
}
2018-01-26 17:51:59 +00:00
$this -> printDeleteDocumentButtonJs ();
2020-02-28 08:48:43 +00:00
/* Add js for catching click on document in one page mode */
$this -> printClickDocumentJs ();
2021-07-16 14:03:34 +00:00
if ( $enableDropUpload && $document -> getAccessMode ( $user ) >= M_READWRITE ) {
echo " SeedDMSUpload.setUrl(' " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Ajax.php'); " ;
echo " SeedDMSUpload.setAbortBtnLabel(' " . getMLText ( " cancel " ) . " '); " ;
echo " SeedDMSUpload.setEditBtnLabel(''); " ;
2022-04-29 16:30:46 +00:00
echo " SeedDMSUpload.setMaxFileSize( $maxuploadsize ); \n " ;
2021-07-16 14:03:34 +00:00
echo " SeedDMSUpload.setMaxFileSizeMsg(' " . getMLText ( " uploading_maxsize " ) . " '); " ;
}
2021-05-27 19:53:49 +00:00
?>
$ ( document ) . ready ( function () {
$ ( " #form1 " ) . validate ({
ignore : [],
rules : {
docid : {
required : true
},
},
messages : {
docid : " <?php printMLText( " js_no_document " );?> " ,
},
});
});
< ? php
2015-12-11 19:29:52 +00:00
} /* }}} */
2021-07-16 14:03:34 +00:00
function documentFiles () { /* {{{ */
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
$document = $this -> params [ 'document' ];
$accessobject = $this -> params [ 'accessobject' ];
$viewonlinefiletypes = $this -> params [ 'viewonlinefiletypes' ];
$cachedir = $this -> params [ 'cachedir' ];
2021-10-06 13:03:03 +00:00
$conversionmgr = $this -> params [ 'conversionmgr' ];
2021-07-16 14:03:34 +00:00
$previewwidthdetail = $this -> params [ 'previewWidthDetail' ];
$previewconverters = $this -> params [ 'previewConverters' ];
$timeout = $this -> params [ 'timeout' ];
$xsendfile = $this -> params [ 'xsendfile' ];
$documentid = $document -> getId ();
$previewer = new SeedDMS_Preview_Previewer ( $cachedir , $previewwidthdetail , $timeout , $xsendfile );
2021-10-06 13:03:03 +00:00
if ( $conversionmgr )
$previewer -> setConversionMgr ( $conversionmgr );
else
$previewer -> setConverters ( $previewconverters );
2021-07-16 14:03:34 +00:00
$latestContent = $this -> callHook ( 'documentLatestContent' , $document );
if ( $latestContent === null )
$latestContent = $document -> getLatestContent ();
$files = $document -> getDocumentFiles ( $latestContent -> getVersion ());
$files = SeedDMS_Core_DMS :: filterDocumentFiles ( $user , $files );
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 ) || in_array ( strtolower ( $file -> getMimeType ()), $viewonlinefiletypes ))) {
if ( $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'run' ))) {
print " <a target= \" _blank \" href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.ViewOnline.php?documentid= " . $documentid . " &file= " . $file -> getID () . " \" > " ;
}
} else {
if ( $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'file' ))) {
print " <a href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Download.php?documentid= " . $documentid . " &file= " . $file -> getID () . " \" > " ;
}
}
}
if ( $previewer -> hasPreview ( $file )) {
print ( " <img class= \" mimeicon \" width= \" " . $previewwidthdetail . " \" src= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Preview.php?documentid= " . $document -> getID () . " &file= " . $file -> getID () . " &width= " . $previewwidthdetail . " \" title= \" " . htmlspecialchars ( $file -> getMimeType ()) . " \" > " );
} else {
print " <img class= \" mimeicon \" width= \" " . $previewwidthdetail . " \" src= \" " . $this -> getMimeIcon ( $file -> getFileType ()) . " \" title= \" " . htmlspecialchars ( $file -> getMimeType ()) . " \" > " ;
}
if ( $file_exists ) {
if ( $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'run' )) || $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'run' )))
print " </a> " ;
}
print " </td> " ;
print " <td><ul class= \" actions unstyled \" > \n " ;
print " <li> " . htmlspecialchars ( $file -> getName ()) . " </li> \n " ;
if ( $file -> getName () != $file -> getOriginalFileName ())
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: " . htmlspecialchars ( $responsibleUser -> getEmail ()) . " \" > " . htmlspecialchars ( $responsibleUser -> getFullName ()) . " </a></li> " ;
print " <li> " . getLongReadableDate ( $file -> getDate ()) . " </li> " ;
if ( $file -> getVersion ())
print " <li> " . getMLText ( 'linked_to_current_version' ) . " </li> " ;
else
print " <li> " . getMLText ( 'linked_to_document' ) . " </li> " ;
print " </ul></td> " ;
print " <td> " . htmlspecialchars ( $file -> getComment ()) . " </td> " ;
print " <td><ul class= \" unstyled actions \" > " ;
if ( $file_exists ) {
if ( $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'file' ))) {
print " <li><a href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Download.php?documentid= " . $documentid . " &file= " . $file -> getID () . " \" ><i class= \" fa fa-download \" ></i> " . getMLText ( 'download' ) . " </a></li> " ;
}
if ( $viewonlinefiletypes && ( in_array ( strtolower ( $file -> getFileType ()), $viewonlinefiletypes ) || in_array ( strtolower ( $file -> getMimeType ()), $viewonlinefiletypes ))) {
if ( $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'run' ))) {
print " <li><a target= \" _blank \" href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.ViewOnline.php?documentid= " . $documentid . " &file= " . $file -> getID () . " \" ><i class= \" fa fa-star \" ></i> " . getMLText ( " view_online " ) . " </a></li> " ;
}
}
}
echo " </ul><ul class= \" unstyled actions \" > " ;
if (( $document -> getAccessMode ( $user ) == M_ALL ) || ( $file -> getUserID () == $user -> getID ())) {
print $this -> html_link ( 'RemoveDocumentFile' , array ( 'documentid' => $document -> getID (), 'fileid' => $file -> getID ()), array (), '<i class="fa fa-remove"></i>' . getMLText ( " delete " ), false , true , array ( '<li>' , '</li>' ));
print $this -> html_link ( 'EditDocumentFile' , array ( 'documentid' => $document -> getID (), 'fileid' => $file -> getID ()), array (), '<i class="fa fa-edit"></i>' . getMLText ( " edit " ), false , true , array ( '<li>' , '</li>' ));
}
print " </ul></td> " ;
print " </tr> " ;
}
print " </tbody> \n </table> \n " ;
}
else $this -> infoMsg ( getMLText ( " no_attached_files " ));
} /* }}} */
2016-12-22 08:31:46 +00:00
function documentInfos () { /* {{{ */
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
$document = $this -> params [ 'document' ];
2020-11-13 10:23:04 +00:00
$txt = $this -> callHook ( 'documentInfos' , $document );
if ( is_string ( $txt ))
echo $txt ;
else {
2016-12-22 08:31:46 +00:00
$this -> contentHeading ( getMLText ( " document_infos " ));
2016-12-22 08:36:15 +00:00
$txt = $this -> callHook ( 'preDocumentInfos' , $document );
if ( is_string ( $txt ))
echo $txt ;
2016-12-22 08:31:46 +00:00
?>
2021-04-18 05:08:00 +00:00
< table class = " table table-condensed table-sm " >
2016-12-22 08:31:46 +00:00
< ? 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>
2020-09-07 14:20:37 +00:00
< td >< ? php $this -> printInlineEdit ( htmlspecialchars ( $document -> getName ()), $document ); ?> </td>
2016-12-22 08:31:46 +00:00
</ tr >
< tr >
< td >< ? php printMLText ( " owner " ); ?> :</td>
< td >
< ? php
$owner = $document -> getOwner ();
2021-01-11 06:59:32 +00:00
print " <a class= \" infos \" href= \" mailto: " . htmlspecialchars ( $owner -> getEmail ()) . " \" > " . htmlspecialchars ( $owner -> getFullName ()) . " </a> " ;
2016-12-22 08:31:46 +00:00
?>
</ td >
</ tr >
< ? php
if ( $document -> getComment ()) {
?>
< tr >
< td >< ? php printMLText ( " comment " ); ?> :</td>
< td >< ? php print htmlspecialchars ( $document -> getComment ()); ?> </td>
</ tr >
< ? php
}
2020-05-19 15:57:34 +00:00
if ( $user -> isAdmin () || $document -> getAccessMode ( $user ) > M_READ ) {
2016-12-22 08:31:46 +00:00
echo " <tr> " ;
echo " <td> " . getMLText ( 'default_access' ) . " :</td> " ;
echo " <td> " . $this -> getAccessModeText ( $document -> getDefaultAccess ()) . " </td> " ;
echo " </tr> " ;
if ( $document -> inheritsAccess ()) {
echo " <tr> " ;
echo " <td> " . getMLText ( " access_mode " ) . " :</td> \n " ;
echo " <td> " ;
echo getMLText ( " inherited " ) . " <br /> " ;
$this -> printAccessList ( $document );
echo " </tr> " ;
} else {
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 ()) {
2020-08-12 05:26:28 +00:00
$arr = $this -> callHook ( 'showDocumentKeywords' , $document );
if ( is_array ( $arr )) {
echo " <tr> " ;
echo " <td> " . $arr [ 0 ] . " :</td> " ;
echo " <td> " . $arr [ 1 ] . " </td> " ;
echo " </tr> " ;
} elseif ( is_string ( $arr )) {
echo $arr ;
} else {
2016-12-22 08:31:46 +00:00
?>
< tr >
< td >< ? php printMLText ( " keywords " ); ?> :</td>
< td >< ? php print htmlspecialchars ( $document -> getKeywords ()); ?> </td>
</ tr >
< ? php
2020-08-12 05:26:28 +00:00
}
2016-12-22 08:31:46 +00:00
}
if ( $cats = $document -> getCategories ()) {
2020-08-12 05:26:28 +00:00
$arr = $this -> callHook ( 'showDocumentCategories' , $document );
if ( is_array ( $arr )) {
echo " <tr> " ;
echo " <td> " . $arr [ 0 ] . " :</td> " ;
echo " <td> " . $arr [ 1 ] . " </td> " ;
echo " </tr> " ;
} elseif ( is_string ( $arr )) {
echo $arr ;
} else {
2016-12-22 08:31:46 +00:00
?>
< tr >
< td >< ? php printMLText ( " categories " ); ?> :</td>
< td >
2020-08-12 05:26:28 +00:00
< ? php
$ct = array ();
foreach ( $cats as $cat )
$ct [] = htmlspecialchars ( $cat -> getName ());
echo implode ( ', ' , $ct );
?>
2016-12-22 08:31:46 +00:00
</ td >
</ tr >
< ? php
2020-08-12 05:26:28 +00:00
}
2016-12-22 08:31:46 +00:00
}
$attributes = $document -> getAttributes ();
if ( $attributes ) {
foreach ( $attributes as $attribute ) {
2016-12-22 08:36:15 +00:00
$arr = $this -> callHook ( 'showDocumentAttribute' , $document , $attribute );
if ( is_array ( $arr )) {
echo " <tr> " ;
echo " <td> " . $arr [ 0 ] . " :</td> " ;
echo " <td> " . $arr [ 1 ] . " </td> " ;
echo " </tr> " ;
2019-10-19 07:17:49 +00:00
} elseif ( is_string ( $arr )) {
echo $arr ;
2016-12-22 08:36:15 +00:00
} else {
$this -> printAttribute ( $attribute );
}
2016-12-22 08:31:46 +00:00
}
}
2020-11-13 10:23:04 +00:00
$arrarr = $this -> callHook ( 'additionalDocumentInfos' , $document );
if ( is_array ( $arrarr )) {
foreach ( $arrarr as $arr ) {
echo " <tr> " ;
echo " <td> " . $arr [ 0 ] . " :</td> " ;
echo " <td> " . $arr [ 1 ] . " </td> " ;
echo " </tr> " ;
}
} elseif ( is_string ( $arrarr )) {
echo $arrarr ;
}
2016-12-22 08:31:46 +00:00
?>
</ table >
< ? php
2016-12-22 08:36:15 +00:00
$txt = $this -> callHook ( 'postDocumentInfos' , $document );
if ( is_string ( $txt ))
echo $txt ;
2021-04-18 05:08:00 +00:00
// $this->contentContainerEnd();
2020-11-13 10:23:04 +00:00
}
2016-12-22 08:31:46 +00:00
} /* }}} */
2016-05-09 06:21:21 +00:00
function preview () { /* {{{ */
2016-12-22 06:54:07 +00:00
$dms = $this -> params [ 'dms' ];
2021-07-05 14:30:26 +00:00
$settings = $this -> params [ 'settings' ];
2016-05-09 06:21:21 +00:00
$document = $this -> params [ 'document' ];
2016-11-07 08:25:55 +00:00
$timeout = $this -> params [ 'timeout' ];
2019-01-18 12:07:39 +00:00
$xsendfile = $this -> params [ 'xsendfile' ];
2016-11-07 08:25:55 +00:00
$showfullpreview = $this -> params [ 'showFullPreview' ];
$converttopdf = $this -> params [ 'convertToPdf' ];
2017-11-22 12:53:30 +00:00
$pdfconverters = $this -> params [ 'pdfConverters' ];
2016-11-07 08:25:55 +00:00
$cachedir = $this -> params [ 'cachedir' ];
2021-10-06 13:03:03 +00:00
$conversionmgr = $this -> params [ 'conversionmgr' ];
2016-11-07 08:25:55 +00:00
if ( ! $showfullpreview )
return ;
2021-07-06 07:32:02 +00:00
$accessobject = $this -> params [ 'accessobject' ];
if ( $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'version' ))) {
$latestContent = $this -> callHook ( 'documentLatestContent' , $document );
if ( $latestContent === null )
$latestContent = $document -> getLatestContent ();
$txt = $this -> callHook ( 'preDocumentPreview' , $latestContent );
if ( is_string ( $txt ))
echo $txt ;
$txt = $this -> callHook ( 'documentPreview' , $latestContent );
if ( is_string ( $txt ))
echo $txt ;
else {
switch ( $latestContent -> getMimeType ()) {
case 'audio/mpeg' :
case 'audio/mp3' :
case 'audio/ogg' :
case 'audio/wav' :
$this -> contentHeading ( getMLText ( " preview " ));
?>
< audio controls style = " width: 100%; " preload = " false " >
< source src = " <?= $settings->_httpRoot ?>op/op.ViewOnline.php?documentid=<?php echo $latestContent->getDocument ()->getID(); ?>&version=<?php echo $latestContent->getVersion (); ?> " type = " audio/mpeg " >
</ audio >
< ? php
break ;
case 'video/webm' :
case 'video/mp4' :
case 'video/avi' :
case 'video/msvideo' :
case 'video/x-msvideo' :
case 'video/x-matroska' :
$this -> contentHeading ( getMLText ( " preview " ));
?>
2017-11-22 14:28:09 +00:00
< video controls style = " width: 100%; " >
2021-07-05 14:30:26 +00:00
< source src = " <?= $settings->_httpRoot ?>op/op.ViewOnline.php?documentid=<?php echo $latestContent->getDocument ()->getID(); ?>&version=<?php echo $latestContent->getVersion (); ?> " type = " video/mp4 " >
2017-11-22 14:28:09 +00:00
</ video >
2021-07-06 07:32:02 +00:00
< ? php
break ;
case 'application/pdf' :
$this -> contentHeading ( getMLText ( " preview " ));
?>
2022-05-01 13:08:35 +00:00
< div style = " width:100%; height: 0; position:relative; padding-top: 141%; " >
< iframe src = " <?= $settings->_httpRoot ?>pdfviewer/web/viewer.html?file=<?php echo urlencode( $settings->_httpRoot .'op/op.ViewOnline.php?documentid='. $latestContent->getDocument ()->getID().'&version='. $latestContent->getVersion ()); ?> " _width = " 100% " _height = " 100% " style = " position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100% " ></ iframe >
</ div >
2021-07-06 07:32:02 +00:00
< ? php
break ;
case 'image/svg+xml' :
case 'image/jpg' :
case 'image/jpeg' :
case 'image/png' :
case 'image/gif' :
$this -> contentHeading ( getMLText ( " preview " ));
?>
< img src = " <?= $settings->_httpRoot ?>op/op.ViewOnline.php?documentid=<?php echo $latestContent->getDocument ()->getID(); ?>&version=<?php echo $latestContent->getVersion (); ?> " width = " 100% " >
< ? php
break ;
default :
$txt = $this -> callHook ( 'additionalDocumentPreview' , $latestContent );
2021-12-17 20:46:28 +00:00
if ( is_string ( $txt )) {
$this -> contentHeading ( getMLText ( " preview " ));
2021-07-06 07:32:02 +00:00
echo $txt ;
2021-12-17 20:46:28 +00:00
}
2021-07-06 07:32:02 +00:00
break ;
}
2016-12-22 08:11:40 +00:00
}
2021-07-06 07:32:02 +00:00
$txt = $this -> callHook ( 'postDocumentPreview' , $latestContent );
if ( is_string ( $txt ))
echo $txt ;
2016-12-22 08:11:40 +00:00
2021-07-06 07:32:02 +00:00
if ( $converttopdf ) {
$pdfpreviewer = new SeedDMS_Preview_PdfPreviewer ( $cachedir , $timeout , $xsendfile );
2021-10-06 13:03:03 +00:00
if ( $conversionmgr )
$pdfpreviewer -> setConversionMgr ( $conversionmgr );
else
$pdfpreviewer -> setConverters ( $pdfconverters );
2021-07-06 07:32:02 +00:00
if ( $pdfpreviewer -> hasConverter ( $latestContent -> getMimeType ())) {
$this -> contentHeading ( getMLText ( " preview_pdf " ));
2016-11-07 08:25:55 +00:00
?>
2022-05-01 13:08:35 +00:00
< div style = " width:100%; height: 0; position:relative; padding-top: 141%; " >
< iframe src = " <?= $settings->_httpRoot ?>pdfviewer/web/viewer.html?file=<?php echo urlencode( $settings->_httpRoot .'op/op.PdfPreview.php?documentid='. $latestContent->getDocument ()->getID().'&version='. $latestContent->getVersion ()); ?> " _width = " 100% " _height = " 700px " style = " position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100% " ></ iframe >
</ div >
2016-11-07 08:25:55 +00:00
< ? php
2021-07-06 07:32:02 +00:00
}
2016-11-07 08:25:55 +00:00
}
2016-05-09 06:21:21 +00:00
}
} /* }}} */
2021-05-06 09:02:20 +00:00
protected function showActions ( $items ) { /* {{{ */
2021-05-12 13:32:25 +00:00
print " <ul class= \" action-list nav nav-pills mb-4 \" > " ;
2021-05-06 09:02:20 +00:00
foreach ( $items as $item ) {
if ( is_string ( $item ))
echo " <li class= \" nav-item \" > " . $item . " </li> " ;
elseif ( is_array ( $item )) {
2021-05-06 10:52:24 +00:00
echo " <li class= \" nav-item m-1 \" ><a class= \" _nav-link btn btn-mini btn-outline-primary btn-sm " . ( ! empty ( $item [ 'class' ]) ? ' ' . $item [ 'class' ] : '' ) . " \" " . ( isset ( $item [ 'link' ]) ? " href= \" " . $item [ 'link' ] . " \" " : '' ) . ( ! empty ( $item [ 'target' ]) ? ' target="' . $item [ 'target' ] . '"' : '' );
2021-05-06 09:02:20 +00:00
if ( ! empty ( $item [ 'attributes' ])) {
foreach ( $item [ 'attributes' ] as $attr ) {
echo ' ' . $attr [ 0 ] . '="' . $attr [ 1 ] . '"' ;
}
}
2021-05-06 10:17:32 +00:00
echo " > " . ( ! empty ( $item [ 'icon' ]) ? " <i class= \" fa fa- " . $item [ 'icon' ] . " \" ></i> " : " " ) . '<span class="d-none d-lg-inline">' . getMLText ( $item [ 'label' ]) . " </span></a></li> " ;
2021-05-06 09:02:20 +00:00
}
}
print " </ul> " ;
return ;
print " <ul class= \" unstyled actions \" > " ;
foreach ( $items as $item ) {
if ( is_string ( $item ))
echo " <li> " . $item . " </li> " ;
elseif ( is_array ( $item )) {
echo " <li><a href= \" " . $item [ 'link' ] . " \" " . ( ! empty ( $item [ 'target' ]) ? ' target="' . $item [ 'target' ] . '"' : '' );
if ( ! empty ( $item [ 'attributes' ])) {
foreach ( $item [ 'attributes' ] as $attr ) {
echo ' ' . $attr [ 0 ] . '="' . $attr [ 1 ] . '"' ;
}
}
echo " > " . ( ! empty ( $item [ 'icon' ]) ? " <i class= \" fa fa- " . $item [ 'icon' ] . " \" ></i> " : " " ) . getMLText ( $item [ 'label' ]) . " </a></li> " ;
}
}
print " </ul> " ;
} /* }}} */
2021-05-06 11:42:18 +00:00
protected function showVersionDetails ( $latestContent , $previewer , $islatest = false ) { /* {{{ */
2021-05-06 10:17:32 +00:00
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
$folder = $this -> params [ 'folder' ];
2021-07-06 07:32:02 +00:00
$accessobject = $this -> params [ 'accessobject' ];
2021-05-06 10:17:32 +00:00
$viewonlinefiletypes = $this -> params [ 'viewonlinefiletypes' ];
$enableownerrevapp = $this -> params [ 'enableownerrevapp' ];
$workflowmode = $this -> params [ 'workflowmode' ];
2021-05-06 11:13:12 +00:00
$previewwidthdetail = $this -> params [ 'previewWidthDetail' ];
2021-05-06 10:17:32 +00:00
// verify if file exists
$file_exists = file_exists ( $dms -> contentDir . $latestContent -> getPath ());
$status = $latestContent -> getStatus ();
// print "<table class=\"table\">";
// print "<thead>\n<tr>\n";
// print "<th colspan=\"2\">".htmlspecialchars($latestContent->getOriginalFileName())."</th>\n";
// print "</tr></thead><tbody>\n";
// print "<tr>\n";
// print "<td style=\"width:".$previewwidthdetail."px; text-align: center;\">";
$this -> contentHeading ( htmlspecialchars ( $latestContent -> getOriginalFileName ()));
$this -> rowStart ();
$this -> columnStart ( 4 );
if ( $file_exists ) {
if ( $viewonlinefiletypes && ( in_array ( strtolower ( $latestContent -> getFileType ()), $viewonlinefiletypes ) || in_array ( strtolower ( $latestContent -> getMimeType ()), $viewonlinefiletypes ))) {
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'run' )))
2021-07-05 14:30:26 +00:00
print " <a target= \" _blank \" href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.ViewOnline.php?documentid= " . $latestContent -> getDocument () -> getId () . " &version= " . $latestContent -> getVersion () . " \" > " ;
2021-05-06 10:17:32 +00:00
} else {
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'version' )))
2021-07-05 14:30:26 +00:00
print " <a href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Download.php?documentid= " . $latestContent -> getDocument () -> getId () . " &version= " . $latestContent -> getVersion () . " \" > " ;
2021-05-06 10:17:32 +00:00
}
}
2021-05-06 10:52:24 +00:00
$previewer -> createPreview ( $latestContent );
2021-05-06 10:17:32 +00:00
if ( $previewer -> hasPreview ( $latestContent )) {
2021-07-05 14:30:26 +00:00
print ( " <img class= \" mimeicon \" width= \" " . $previewwidthdetail . " \" src= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Preview.php?documentid= " . $latestContent -> getDocument () -> getID () . " &version= " . $latestContent -> getVersion () . " &width= " . $previewwidthdetail . " \" title= \" " . htmlspecialchars ( $latestContent -> getMimeType ()) . " \" > " );
2021-05-06 10:17:32 +00:00
} else {
print " <img class= \" mimeicon \" width= \" " . $previewwidthdetail . " \" src= \" " . $this -> getMimeIcon ( $latestContent -> getFileType ()) . " \" title= \" " . htmlspecialchars ( $latestContent -> getMimeType ()) . " \" > " ;
}
2021-07-06 07:32:02 +00:00
if ( $file_exists && ( $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'run' )) || $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'version' )))) {
2021-05-06 10:17:32 +00:00
print " </a> " ;
}
// print "</td>\n";
// print "<td>";
$this -> columnEnd ();
$this -> columnStart ( 4 );
print " <ul class= \" actions unstyled \" > \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: " . htmlspecialchars ( $updatingUser -> getEmail ()) . " \" > " . htmlspecialchars ( $updatingUser -> getFullName ()) . " </a></li> " ;
print " <li> " . getLongReadableDate ( $latestContent -> getDate ()) . " </li> " ;
print " <li> " . getMLText ( 'status' ) . " : " . 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 " . ( $latestContent -> getDocument () -> hasExpired () ? " class= \" warning \" " : " " ) . " > " . ( ! $latestContent -> getDocument () -> getExpires () ? getMLText ( " does_not_expire " ) : getMLText ( " expires " ) . " : " . getReadableDate ( $latestContent -> getDocument () -> getExpires ())) . " </span> " ;
}
print " </li> " ;
print " </ul> \n " ;
$txt = $this -> callHook ( 'showVersionComment' , $latestContent );
if ( $txt ) {
echo $txt ;
} else {
if ( $latestContent -> getComment ())
print " <p style= \" font-style: italic; \" > " . htmlspecialchars ( $latestContent -> getComment ()) . " </p> " ;
}
print " <ul class= \" actions unstyled \" > \n " ;
$this -> printVersionAttributes ( $folder , $latestContent );
print " </ul> " ;
// print "</td>\n";
// print "<td>";
$this -> columnEnd ();
$this -> columnStart ( 4 );
if ( $file_exists ){
$items = array ();
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'version' )))
2021-07-05 14:30:26 +00:00
$items [] = array ( 'link' => $this -> params [ 'settings' ] -> _httpRoot . " op/op.Download.php?documentid= " . $latestContent -> getDocument () -> getId () . " &version= " . $latestContent -> getVersion (), 'icon' => 'download' , 'label' => 'download' );
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'run' )))
2021-05-31 17:32:39 +00:00
if ( $viewonlinefiletypes && ( in_array ( strtolower ( $latestContent -> getFileType ()), $viewonlinefiletypes ) || in_array ( strtolower ( $latestContent -> getMimeType ()), $viewonlinefiletypes )))
2021-07-05 14:30:26 +00:00
$items [] = array ( 'link' => $this -> params [ 'settings' ] -> _httpRoot . " op/op.ViewOnline.php?documentid= " . $latestContent -> getDocument () -> getId () . " &version= " . $latestContent -> getVersion (), 'icon' => 'eye' , 'label' => 'view_online' , 'target' => '_blank' );
2021-05-06 10:17:32 +00:00
if ( $newitems = $this -> callHook ( 'extraVersionViews' , $latestContent ))
$items = array_merge ( $items , $newitems );
2021-10-02 05:35:02 +00:00
if ( $items ) {
2021-05-06 10:17:32 +00:00
$this -> showActions ( $items );
}
}
$items = array ();
if ( $file_exists ){
2021-07-06 07:32:02 +00:00
if ( $islatest && $accessobject -> mayEditVersion ()) {
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'EditOnline' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'edit' , 'label' => 'edit_version' );
2021-05-06 10:17:32 +00:00
}
}
/* Only admin has the right to remove version in any case or a regular
* user if enableVersionDeletion is on
*/
2021-07-06 07:32:02 +00:00
if ( $accessobject -> mayRemoveVersion ()) {
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'RemoveVersion' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'remove' , 'label' => 'rm_version' );
2021-05-06 10:17:32 +00:00
}
2021-07-06 07:32:02 +00:00
if ( $islatest && $accessobject -> mayOverwriteStatus ()) {
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'OverrideContentStatus' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'align-justify' , 'label' => 'change_status' );
2021-05-06 10:17:32 +00:00
}
if ( $workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval' ) {
// Allow changing reviewers/approvals only if not reviewed
2021-07-06 07:32:02 +00:00
if ( $accessobject -> maySetReviewersApprovers ()) {
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'SetReviewersApprovers' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'edit' , 'label' => 'change_assignments' );
2021-05-06 10:17:32 +00:00
}
} elseif ( $workflowmode == 'advanced' ) {
2021-07-06 07:32:02 +00:00
if ( $accessobject -> maySetWorkflow ()) {
2021-05-31 19:54:16 +00:00
$workflow = $latestContent -> getWorkflow ();
2021-05-06 10:17:32 +00:00
if ( ! $workflow ) {
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'SetWorkflow' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'random' , 'label' => 'set_workflow' );
2021-05-06 10:17:32 +00:00
}
}
}
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_view_access ( 'EditComment' ))
if ( $accessobject -> mayEditComment ()) {
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'EditComment' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'comment' , 'label' => 'edit_comment' );
2021-07-06 07:32:02 +00:00
}
if ( $accessobject -> check_view_access ( 'EditAttributes' ))
if ( $accessobject -> mayEditAttributes ()) {
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'EditAttributes' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'edit' , 'label' => 'edit_attributes' );
2021-07-06 07:32:02 +00:00
}
2021-05-06 11:42:18 +00:00
if ( ! $islatest )
2021-07-07 06:26:13 +00:00
$items [] = array ( 'link' => $this -> html_url ( 'DocumentVersionDetail' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion ())), 'icon' => 'info' , 'label' => 'details' );
2021-05-06 10:17:32 +00:00
if ( $newitems = $this -> callHook ( 'extraVersionActions' , $latestContent ))
$items = array_merge ( $items , $newitems );
if ( $items ) {
$this -> showActions ( $items );
}
// echo "</td>";
// print "</tr></tbody>\n</table>\n";
$this -> columnEnd ();
$this -> rowEnd ();
} /* }}} */
2012-12-14 07:53:13 +00:00
function show () { /* {{{ */
2013-04-18 20:20:28 +00:00
parent :: show ();
2019-03-14 06:48:20 +00:00
$this -> callHook ( 'preViewDocument' );
2012-12-14 07:53:13 +00:00
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
$folder = $this -> params [ 'folder' ];
$document = $this -> params [ 'document' ];
2021-07-06 07:32:02 +00:00
$accessobject = $this -> params [ 'accessobject' ];
2012-12-14 07:53:13 +00:00
$viewonlinefiletypes = $this -> params [ 'viewonlinefiletypes' ];
2021-07-16 14:03:34 +00:00
$enableDropUpload = $this -> params [ 'enableDropUpload' ];
2013-09-19 12:27:09 +00:00
$enableownerrevapp = $this -> params [ 'enableownerrevapp' ];
2021-07-01 10:17:04 +00:00
$enableremoverevapp = $this -> params [ 'enableremoverevapp' ];
2013-01-24 09:39:14 +00:00
$workflowmode = $this -> params [ 'workflowmode' ];
2012-12-19 10:28:36 +00:00
$cachedir = $this -> params [ 'cachedir' ];
2021-10-06 13:03:03 +00:00
$conversionmgr = $this -> params [ 'conversionmgr' ];
2014-03-18 09:55:24 +00:00
$previewwidthlist = $this -> params [ 'previewWidthList' ];
$previewwidthdetail = $this -> params [ 'previewWidthDetail' ];
2017-11-22 12:53:30 +00:00
$previewconverters = $this -> params [ 'previewConverters' ];
$pdfconverters = $this -> params [ 'pdfConverters' ];
2012-12-14 07:53:13 +00:00
$documentid = $document -> getId ();
2015-06-09 07:18:29 +00:00
$currenttab = $this -> params [ 'currenttab' ];
2016-02-15 09:57:37 +00:00
$timeout = $this -> params [ 'timeout' ];
2019-01-18 12:07:39 +00:00
$xsendfile = $this -> params [ 'xsendfile' ];
2012-12-14 07:53:13 +00:00
2019-02-06 12:22:52 +00:00
$versions = $this -> callHook ( 'documentVersions' , $document );
if ( $versions === null )
$versions = $document -> getContent ();
2012-12-14 07:53:13 +00:00
2021-07-05 14:30:26 +00:00
$this -> htmlAddHeader ( '<link href="' . $this -> params [ 'settings' ] -> _httpRoot . 'styles/bootstrap/timeline/timeline.css" rel="stylesheet">' . " \n " , 'css' );
$this -> htmlAddHeader ( '<script type="text/javascript" src="' . $this -> params [ 'settings' ] -> _httpRoot . 'styles/bootstrap/timeline/timeline-min.js"></script>' . " \n " , 'js' );
$this -> htmlAddHeader ( '<script type="text/javascript" src="' . $this -> params [ 'settings' ] -> _httpRoot . 'styles/bootstrap/timeline/timeline-locales.js"></script>' . " \n " , 'js' );
$this -> htmlAddHeader ( '<script type="text/javascript" src="' . $this -> params [ 'settings' ] -> _httpRoot . 'views/' . $this -> theme . '/vendors/jquery-validation/jquery.validate.js"></script>' . " \n " , 'js' );
$this -> htmlAddHeader ( '<script type="text/javascript" src="' . $this -> params [ 'settings' ] -> _httpRoot . 'views/' . $this -> theme . '/styles/validation-default.js"></script>' . " \n " , 'js' );
2015-09-16 19:19:46 +00:00
2012-12-14 07:53:13 +00:00
$this -> htmlStartPage ( getMLText ( " document_title " , array ( " documentname " => htmlspecialchars ( $document -> getName ()))));
$this -> globalNavigation ( $folder );
$this -> contentStart ();
2013-03-08 16:55:14 +00:00
$this -> pageNavigation ( $this -> getFolderPathHTML ( $folder , true , $document ), " view_document " , $document );
2012-12-14 07:53:13 +00:00
2019-10-18 09:06:42 +00:00
echo $this -> callHook ( 'preContent' );
2012-12-14 07:53:13 +00:00
if ( $document -> isLocked ()) {
$lockingUser = $document -> getLockingUser ();
2015-04-14 17:38:50 +00:00
$txt = $this -> callHook ( 'documentIsLocked' , $document , $lockingUser );
if ( is_string ( $txt ))
echo $txt ;
else {
2021-07-15 15:43:50 +00:00
$this -> warningMsg ( getMLText ( " lock_message " , array ( " email " => $lockingUser -> getEmail (), " username " => htmlspecialchars ( $lockingUser -> getFullName ()))));
2015-04-14 17:38:50 +00:00
}
2012-12-14 07:53:13 +00:00
}
2013-03-28 09:18:49 +00:00
2017-10-16 07:07:04 +00:00
/* Retrieve latest content and attacheѕ files */
2019-02-06 12:22:52 +00:00
$latestContent = $this -> callHook ( 'documentLatestContent' , $document );
if ( $latestContent === null )
$latestContent = $document -> getLatestContent ();
2016-11-24 10:42:53 +00:00
$files = $document -> getDocumentFiles ( $latestContent -> getVersion ());
$files = SeedDMS_Core_DMS :: filterDocumentFiles ( $user , $files );
2013-03-28 09:18:49 +00:00
/* Retrieve linked documents */
$links = $document -> getDocumentLinks ();
2017-01-16 12:01:09 +00:00
$links = SeedDMS_Core_DMS :: filterDocumentLinks ( $user , $links , 'target' );
2013-03-28 09:18:49 +00:00
2014-03-18 06:07:12 +00:00
/* Retrieve reverse linked documents */
$reverselinks = $document -> getReverseDocumentLinks ();
2017-01-16 12:01:09 +00:00
$reverselinks = SeedDMS_Core_DMS :: filterDocumentLinks ( $user , $reverselinks , 'source' );
2014-03-18 06:07:12 +00:00
2013-04-18 11:38:02 +00:00
$needwkflaction = false ;
2021-06-01 08:54:06 +00:00
$transitions = array ();
2015-03-16 07:58:10 +00:00
if ( $workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval' ) {
2019-12-19 15:08:10 +00:00
} elseif ( $workflowmode == 'advanced' ) {
2013-04-18 11:38:02 +00:00
$workflow = $latestContent -> getWorkflow ();
if ( $workflow ) {
2021-06-01 08:54:06 +00:00
if ( $workflowstate = $latestContent -> getWorkflowState ()) {
$transitions = $workflow -> getNextTransitions ( $workflowstate );
$needwkflaction = $latestContent -> needsWorkflowAction ( $user );
} else {
$this -> warningMsg ( getMLText ( 'workflow_in_unknown_state' ));
}
2013-04-18 11:38:02 +00:00
}
}
if ( $needwkflaction ) {
$this -> infoMsg ( getMLText ( 'needs_workflow_action' ));
}
2013-04-30 16:14:05 +00:00
$reviewStatus = $latestContent -> getReviewStatus ();
2014-05-22 04:46:44 +00:00
$approvalStatus = $latestContent -> getApprovalStatus ();
2012-12-14 07:53:13 +00:00
2020-10-08 05:57:23 +00:00
$this -> rowStart ();
$this -> columnStart ( 4 );
2018-12-13 14:46:25 +00:00
$txt = $this -> callHook ( 'startLeftColumn' , $document );
if ( is_string ( $txt ))
echo $txt ;
2016-12-22 08:31:46 +00:00
$this -> documentInfos ();
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'ViewOnline' , array ( 'action' => 'run' ))) {
$this -> preview ();
}
2020-10-08 05:57:23 +00:00
$this -> columnEnd ();
$this -> columnStart ( 8 );
2020-09-18 17:11:25 +00:00
$txt = $this -> callHook ( 'startRightColumn' , $document );
if ( is_string ( $txt ))
echo $txt ;
?>
2021-05-04 07:57:23 +00:00
< ul class = " nav nav-pills " id = " docinfotab " role = " tablist " >
2022-06-22 14:45:37 +00:00
< li class = " nav-item <?php if(! $currenttab || $currenttab == 'docinfo') echo 'active'; ?> " >< a class = " nav-link <?php if(! $currenttab || $currenttab == 'docinfo') echo 'active'; ?> " data - target = " #docinfo " data - toggle = " tab " role = " button " >< ? php printMLText ( 'current_version' ); ?> </a></li>
2013-04-30 17:26:33 +00:00
< ? php if ( count ( $versions ) > 1 ) { ?>
2022-06-22 14:45:37 +00:00
< li class = " nav-item <?php if( $currenttab == 'previous') echo 'active'; ?> " >< a class = " nav-link <?php if( $currenttab == 'previous') echo 'active'; ?> " data - target = " #previous " data - toggle = " tab " role = " button " >< ? php printMLText ( 'previous_versions' ); ?> </a></li>
2013-04-30 17:26:33 +00:00
< ? php
}
2015-03-16 07:58:10 +00:00
if ( $workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval' ) {
2013-04-30 17:26:33 +00:00
if (( is_array ( $reviewStatus ) && count ( $reviewStatus ) > 0 ) ||
( is_array ( $approvalStatus ) && count ( $approvalStatus ) > 0 )) {
?>
2022-06-22 14:45:37 +00:00
< li class = " nav-item <?php if( $currenttab == 'revapp') echo 'active'; ?> " >< a class = " nav-link <?php if( $currenttab == 'revapp') echo 'active'; ?> " data - target = " #revapp " data - toggle = " tab " role = " button " >< ? php if ( $workflowmode == 'traditional' ) echo getMLText ( 'reviewers' ) . " / " ; echo getMLText ( 'approvers' ); ?> </a></li>
2013-04-30 17:26:33 +00:00
< ? php
}
2019-12-19 15:08:10 +00:00
} elseif ( $workflowmode == 'advanced' ) {
2013-04-30 17:26:33 +00:00
if ( $workflow ) {
?>
2022-06-22 14:45:37 +00:00
< li class = " nav-item <?php if( $currenttab == 'workflow') echo 'active'; ?> " >< a class = " nav-link <?php if( $currenttab == 'workflow') echo 'active'; ?> " data - target = " #workflow " data - toggle = " tab " role = " button " >< ? php echo getMLText ( 'workflow' ); ?> </a></li>
2013-04-30 17:26:33 +00:00
< ? php
}
}
?>
2022-06-22 14:45:37 +00:00
< li class = " nav-item <?php if( $currenttab == 'attachments') echo 'active'; ?> " >< a class = " nav-link <?php if( $currenttab == 'attachments') echo 'active'; ?> " data - target = " #attachments " data - toggle = " tab " role = " button " >< ? php printMLText ( 'linked_files' ); echo ( count ( $files )) ? " ( " . count ( $files ) . " ) " : " " ; ?> </a></li>
< li class = " nav-item <?php if( $currenttab == 'links') echo 'active'; ?> " >< a class = " nav-link <?php if( $currenttab == 'links') echo 'active'; ?> " data - target = " #links " data - toggle = " tab " role = " button " >< ? php printMLText ( 'linked_documents' ); echo ( count ( $links ) || count ( $reverselinks )) ? " ( " . count ( $links ) . " / " . count ( $reverselinks ) . " ) " : " " ; ?> </a></li>
2018-04-13 12:53:06 +00:00
< ? php
$tabs = $this -> callHook ( 'extraTabs' , $document );
if ( $tabs ) {
foreach ( $tabs as $tabid => $tab ) {
2022-06-22 14:45:37 +00:00
echo '<li class="nav-item ' . ( $currenttab == $tabid ? 'active' : '' ) . '"><a class="nav-link ' . ( $currenttab == $tabid ? 'active' : '' ) . '" data-target="#' . $tabid . '" data-toggle="tab" role="button">' . $tab [ 'title' ] . '</a></li>' ;
2018-04-13 12:53:06 +00:00
}
}
?>
2013-04-30 17:26:33 +00:00
</ ul >
< div class = " tab-content " >
2021-05-04 07:57:23 +00:00
< div class = " tab-pane <?php if(! $currenttab || $currenttab == 'docinfo') echo 'active'; ?> " id = " docinfo " role = " tabpanel " >
2012-12-14 07:53:13 +00:00
< ? php
2013-04-18 11:38:02 +00:00
if ( ! $latestContent ) {
2012-12-14 07:53:13 +00:00
$this -> contentContainerStart ();
print getMLText ( 'document_content_missing' );
$this -> contentContainerEnd ();
2016-03-15 07:30:53 +00:00
$this -> contentEnd ();
2012-12-14 07:53:13 +00:00
$this -> htmlEndPage ();
exit ;
}
2021-01-27 15:27:24 +00:00
$checksum = SeedDMS_Core_File :: checksum ( $dms -> contentDir . $latestContent -> getPath ());
2021-01-26 12:30:15 +00:00
if ( $checksum != $latestContent -> getChecksum ()) {
$this -> errorMsg ( getMLText ( 'wrong_checksum' ));
}
2020-09-18 17:24:18 +00:00
$txt = $this -> callHook ( 'preLatestVersionTab' , $latestContent );
if ( is_string ( $txt ))
echo $txt ;
2012-12-14 07:53:13 +00:00
$this -> contentContainerStart ();
2021-05-06 10:52:24 +00:00
$previewer = new SeedDMS_Preview_Previewer ( $cachedir , $previewwidthdetail , $timeout , $xsendfile );
2021-10-06 13:03:03 +00:00
if ( $conversionmgr )
$previewer -> setConversionMgr ( $conversionmgr );
else
$previewer -> setConverters ( $previewconverters );
2021-05-06 11:42:18 +00:00
$this -> showVersionDetails ( $latestContent , $previewer , true );
2013-01-28 10:44:53 +00:00
$this -> contentContainerEnd ();
2013-01-24 09:39:14 +00:00
if ( $user -> isAdmin ()) {
2013-01-28 10:44:53 +00:00
$this -> contentHeading ( getMLText ( " status " ));
$this -> contentContainerStart ();
2013-05-17 07:27:15 +00:00
$statuslog = $latestContent -> getStatusLog ();
2021-04-18 05:08:00 +00:00
echo " <table class= \" table table-condensed table-sm \" ><thead> " ;
2021-05-03 06:04:54 +00:00
echo " <th> " . getMLText ( 'date' ) . " / " . getMLText ( 'user' ) . " </th><th> " . getMLText ( 'status' ) . " </th><th> " . getMLText ( 'comment' ) . " </th></tr> \n " ;
2013-01-24 09:39:14 +00:00
echo " </thead><tbody> " ;
2013-05-17 07:27:15 +00:00
foreach ( $statuslog as $entry ) {
2013-03-26 19:30:39 +00:00
if ( $suser = $dms -> getUser ( $entry [ 'userID' ]))
2019-06-28 09:02:10 +00:00
$fullname = htmlspecialchars ( $suser -> getFullName ());
2013-03-26 19:30:39 +00:00
else
$fullname = " -- " ;
2021-05-03 06:04:54 +00:00
echo " <tr><td> " . getLongReadableDate ( $entry [ 'date' ]) . " <br /> " . $fullname . " </td><td> " . getOverallStatusText ( $entry [ 'status' ]) . " </td><td> " . htmlspecialchars ( $entry [ 'comment' ]) . " </td></tr> \n " ;
2013-01-24 09:39:14 +00:00
}
print " </tbody> \n </table> \n " ;
2013-01-28 10:44:53 +00:00
$this -> contentContainerEnd ();
2013-01-24 09:39:14 +00:00
}
2012-12-14 07:53:13 +00:00
?>
2013-01-28 10:44:53 +00:00
</ div >
2013-01-24 09:39:14 +00:00
< ? php
2015-03-16 07:58:10 +00:00
if ( $workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval' ) {
2013-04-30 16:14:05 +00:00
if (( is_array ( $reviewStatus ) && count ( $reviewStatus ) > 0 ) ||
( is_array ( $approvalStatus ) && count ( $approvalStatus ) > 0 )) {
2013-01-24 09:39:14 +00:00
?>
2021-05-04 07:57:23 +00:00
< div class = " tab-pane <?php if( $currenttab == 'revapp') echo 'active'; ?> " id = " revapp " role = " tabpanel " >
2012-12-14 07:53:13 +00:00
< ? php
2021-05-27 19:53:49 +00:00
if ( $document -> hasExpired ())
$this -> warningMsg ( getMLText ( 'cannot_revapp_expired_docs' ));
2020-10-08 05:57:23 +00:00
$this -> rowStart ();
2015-06-02 08:22:21 +00:00
/* 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 .
*/
2015-06-23 07:18:36 +00:00
if ( /*$workflowmode != 'traditional_only_approval' &&*/ is_array ( $reviewStatus ) && count ( $reviewStatus ) > 0 ) {
2012-12-14 07:53:13 +00:00
2020-10-08 05:57:23 +00:00
$this -> columnStart ( 6 );
2019-09-10 15:42:58 +00:00
// $this->contentContainerStart();
print " <legend> " . getMLText ( 'reviewers' ) . " </legend> " ;
2021-04-18 05:08:00 +00:00
print " <table class= \" table table-condensed table-sm \" > \n " ;
2019-09-10 15:42:58 +00:00
2012-12-14 07:53:13 +00:00
print " <tr> \n " ;
2018-06-27 20:14:34 +00:00
print " <th> " . getMLText ( " name " ) . " </th> \n " ;
print " <th> " . getMLText ( " last_update " ) . " , " . getMLText ( " comment " ) . " </th> \n " ;
2018-06-27 16:55:14 +00:00
// print "<td width='25%'><b>".getMLText("comment")."</b></td>";
2018-06-27 20:14:34 +00:00
print " <th> " . getMLText ( " status " ) . " </th> \n " ;
print " <th></th> \n " ;
2012-12-14 07:53:13 +00:00
print " </tr> \n " ;
foreach ( $reviewStatus as $r ) {
2020-09-23 06:37:51 +00:00
$class = '' ;
switch ( $r [ 'status' ]) {
case '-1' :
$class = 'error' ;
break ;
case '1' :
$class = 'success' ;
break ;
}
2012-12-14 07:53:13 +00:00
$required = null ;
$is_reviewer = false ;
2017-07-21 14:06:03 +00:00
$accesserr = '' ;
2012-12-14 07:53:13 +00:00
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 {
2020-08-27 05:52:52 +00:00
$reqName = " <i class= \" fa fa-user \" ></i> " . htmlspecialchars ( $required -> getFullName () . " ( " . $required -> getLogin () . " ) " );
2017-07-21 14:06:03 +00:00
if ( $user -> isAdmin ()) {
if ( $document -> getAccessMode ( $required ) < M_READ || $latestContent -> getAccessMode ( $required ) < M_READ )
$accesserr = getMLText ( " access_denied " );
elseif ( is_object ( $required ) && $required -> isDisabled ())
$accesserr = getMLText ( " login_disabled_title " );
}
2016-10-27 15:05:12 +00:00
if ( $required -> getId () == $user -> getId () /* && ($user->getId() != $owner->getId() || $enableownerrevapp == 1)*/ )
2016-03-08 15:07:42 +00:00
$is_reviewer = true ;
2012-12-14 07:53:13 +00:00
}
break ;
case 1 : // Reviewer is a group.
$required = $dms -> getGroup ( $r [ " required " ]);
if ( ! is_object ( $required )) {
$reqName = getMLText ( " unknown_group " ) . " ' " . $r [ " required " ] . " ' " ;
}
else {
2020-08-27 05:52:52 +00:00
$reqName = " <i class= \" fa fa-group \" ></i> " . htmlspecialchars ( $required -> getName ());
2017-07-21 14:06:03 +00:00
if ( $user -> isAdmin ()) {
$grpusers = $required -> getUsers ();
if ( ! $grpusers )
$accesserr = getMLText ( " no_group_members " );
}
2016-10-27 15:05:12 +00:00
if ( $required -> isMember ( $user ) /* && ($user->getId() != $owner->getId() || $enableownerrevapp == 1)*/ )
2013-03-28 09:18:49 +00:00
$is_reviewer = true ;
2012-12-14 07:53:13 +00:00
}
break ;
}
2020-09-23 06:53:05 +00:00
if ( $user -> isAdmin () || $r [ " status " ] > - 2 ) {
print " <tr> \n " ;
print " <td> " . $reqName . " </td> \n " ;
2020-12-01 20:43:10 +00:00
print " <td><i style= \" font-size: 80%; \" > " . getLongReadableDate ( $r [ " date " ]) . " - " ;
2020-09-23 06:53:05 +00:00
/* $updateUser is the user who has done the review */
$updateUser = $dms -> getUser ( $r [ " userID " ]);
print ( is_object ( $updateUser ) ? htmlspecialchars ( $updateUser -> getFullName () . " ( " . $updateUser -> getLogin () . " ) " ) : " unknown user id ' " . $r [ " userID " ] . " ' " ) . " </i><br /> " ;
print htmlspecialchars ( $r [ " comment " ]);
if ( $r [ 'file' ]) {
echo " <br /> " ;
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'run' ))) {
echo " <a href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Download.php?documentid= " . $latestContent -> getDocument () -> getId () . " &reviewlogid= " . $r [ 'reviewLogID' ] . " \" class= \" btn btn-secondary btn-mini \" ><i class= \" fa fa-download \" ></i> " . getMLText ( 'download' ) . " </a> " ;
}
2020-09-23 06:53:05 +00:00
}
print " </td> \n " ;
2021-07-06 07:32:02 +00:00
print " <td> " ;
if ( $class )
echo " <i class= \" fa fa-circle text- " . $class . " \" ></i> " ;
print getReviewStatusText ( $r [ " status " ]) . " </td> \n " ;
2021-04-18 05:08:00 +00:00
print " <td><ul class= \" actions unstyled \" > " ;
2020-09-23 06:53:05 +00:00
if ( $accesserr )
2021-07-06 07:32:02 +00:00
echo " <li><span class= \" text-error \" > " . $accesserr . " </span></li> " ;
if ( $accessobject -> mayReview ()) {
2020-09-23 06:53:05 +00:00
if ( $is_reviewer ) {
if ( $r [ " status " ] == 0 ) {
2021-07-06 07:32:02 +00:00
print $this -> html_link ( 'ReviewDocument' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion (), 'reviewid' => $r [ 'reviewID' ]), array ( 'class' => 'btn btn-mini btn-primary' ), getMLText ( " add_review " ), false , true , array ( '<li>' , '</li>' ));
} elseif ( $accessobject -> mayUpdateReview ( $updateUser ) && (( $r [ " status " ] == 1 ) || ( $r [ " status " ] ==- 1 ))){
print $this -> html_link ( 'ReviewDocument' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion (), 'reviewid' => $r [ 'reviewID' ]), array ( 'class' => 'btn btn-mini btn-primary' ), getMLText ( " edit " ), false , true , array ( '<li>' , '</li>' ));
2020-09-23 06:53:05 +00:00
}
2017-01-16 12:02:15 +00:00
}
2012-12-14 07:53:13 +00:00
}
2021-07-02 06:34:06 +00:00
if ( $enableremoverevapp && $user -> isAdmin () && ( $r [ 'status' ] == 1 || $r [ 'status' ] == - 1 ))
2021-07-07 06:26:13 +00:00
echo '<li><a href="' . $this -> html_url ( 'RemoveReviewLog' , array ( 'documentid' => $document -> getID (), 'version' => $latestContent -> getVersion (), 'reviewid' => $r [ 'reviewID' ])) . '" title="' . getMLText ( 'remove_review_log' ) . '"><i class="fa fa-remove"></i></a></li>' ;
2020-09-23 06:53:05 +00:00
print " </ul></td> \n " ;
print " </tr> \n " ;
2012-12-14 07:53:13 +00:00
}
}
2019-09-10 15:42:58 +00:00
print " </table> " ;
2018-06-27 16:55:14 +00:00
// $this->contentContainerEnd();
2012-12-14 07:53:13 +00:00
2020-10-08 05:57:23 +00:00
$this -> columnEnd ();
2019-09-10 15:42:58 +00:00
}
2020-10-08 05:57:23 +00:00
$this -> columnStart ( 6 );
2018-06-27 16:55:14 +00:00
// $this->contentContainerStart();
print " <legend> " . getMLText ( 'approvers' ) . " </legend> " ;
2021-04-18 05:08:00 +00:00
print " <table class= \" table table-condensed table-sm \" > \n " ;
2012-12-14 07:53:13 +00:00
if ( is_array ( $approvalStatus ) && count ( $approvalStatus ) > 0 ) {
print " <tr> \n " ;
2018-06-27 20:14:34 +00:00
print " <th> " . getMLText ( " name " ) . " </th> \n " ;
print " <th> " . getMLText ( " last_update " ) . " , " . getMLText ( " comment " ) . " </th> \n " ;
2018-06-27 16:55:14 +00:00
// print "<td width='25%'><b>".getMLText("comment")."</b></td>";
2018-06-27 20:14:34 +00:00
print " <th> " . getMLText ( " status " ) . " </th> \n " ;
print " <th></th> \n " ;
2012-12-14 07:53:13 +00:00
print " </tr> \n " ;
foreach ( $approvalStatus as $a ) {
2020-09-23 06:37:51 +00:00
$class = '' ;
switch ( $a [ 'status' ]) {
case '-1' :
$class = 'error' ;
break ;
case '1' :
$class = 'success' ;
break ;
}
2012-12-14 07:53:13 +00:00
$required = null ;
$is_approver = false ;
2017-07-21 14:06:03 +00:00
$accesserr = '' ;
2012-12-14 07:53:13 +00:00
switch ( $a [ " type " ]) {
case 0 : // Approver is an individual.
$required = $dms -> getUser ( $a [ " required " ]);
if ( ! is_object ( $required )) {
2013-04-08 07:12:56 +00:00
$reqName = getMLText ( " unknown_user " ) . " ' " . $a [ " required " ] . " ' " ;
2012-12-14 07:53:13 +00:00
}
else {
2020-08-27 05:52:52 +00:00
$reqName = " <i class= \" fa fa-user \" ></i> " . htmlspecialchars ( $required -> getFullName () . " ( " . $required -> getLogin () . " ) " );
2017-07-21 14:06:03 +00:00
if ( $user -> isAdmin ()) {
if ( $document -> getAccessMode ( $required ) < M_READ || $latestContent -> getAccessMode ( $required ) < M_READ )
$accesserr = getMLText ( " access_denied " );
elseif ( is_object ( $required ) && $required -> isDisabled ())
$accesserr = getMLText ( " login_disabled_title " );
}
2016-03-08 15:07:42 +00:00
if ( $required -> getId () == $user -> getId ())
$is_approver = true ;
2012-12-14 07:53:13 +00:00
}
break ;
case 1 : // Approver is a group.
$required = $dms -> getGroup ( $a [ " required " ]);
if ( ! is_object ( $required )) {
2013-04-08 07:12:56 +00:00
$reqName = getMLText ( " unknown_group " ) . " ' " . $a [ " required " ] . " ' " ;
2012-12-14 07:53:13 +00:00
}
else {
2020-08-27 05:52:52 +00:00
$reqName = " <i class= \" fa fa-group \" ></i> " . htmlspecialchars ( $required -> getName ());
2017-07-21 14:06:03 +00:00
if ( $user -> isAdmin ()) {
$grpusers = $required -> getUsers ();
if ( ! $grpusers )
$accesserr = getMLText ( " no_group_members " );
}
2016-10-27 15:05:12 +00:00
if ( $required -> isMember ( $user ) /* && ($user->getId() != $owner->getId() || $enableownerrevapp == 1)*/ )
2016-03-08 15:07:42 +00:00
$is_approver = true ;
2012-12-14 07:53:13 +00:00
}
break ;
}
2020-09-23 06:53:05 +00:00
if ( $user -> isAdmin () || $a [ " status " ] > - 2 ) {
print " <tr> \n " ;
print " <td> " . $reqName . " </td> \n " ;
2020-12-01 20:43:10 +00:00
print " <td><i style= \" font-size: 80%; \" > " . getLongReadableDate ( $a [ " date " ]) . " - " ;
2020-09-23 06:53:05 +00:00
/* $updateUser is the user who has done the approval */
$updateUser = $dms -> getUser ( $a [ " userID " ]);
print ( is_object ( $updateUser ) ? htmlspecialchars ( $updateUser -> getFullName () . " ( " . $updateUser -> getLogin () . " ) " ) : " unknown user id ' " . $a [ " userID " ] . " ' " ) . " </i><br /> " ;
print htmlspecialchars ( $a [ " comment " ]);
if ( $a [ 'file' ]) {
echo " <br /> " ;
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'Download' , array ( 'action' => 'run' ))) {
echo " <a href= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.Download.php?documentid= " . $latestContent -> getDocument () -> getId () . " &approvelogid= " . $a [ 'approveLogID' ] . " \" class= \" btn btn-secondary btn-mini \" ><i class= \" fa fa-download \" ></i> " . getMLText ( 'download' ) . " </a> " ;
}
2020-09-23 06:53:05 +00:00
}
echo " </td> \n " ;
2021-07-06 07:32:02 +00:00
print " <td> " ;
if ( $class )
echo " <i class= \" fa fa-circle text- " . $class . " \" ></i> " ;
print getApprovalStatusText ( $a [ " status " ]) . " </td> \n " ;
2021-04-18 05:08:00 +00:00
print " <td><ul class= \" actions unstyled \" > " ;
2020-09-23 06:53:05 +00:00
if ( $accesserr )
2021-07-06 07:32:02 +00:00
echo " <li><span class= \" text-error \" > " . $accesserr . " </span></li> " ;
if ( $accessobject -> mayApprove ()) {
2020-09-23 06:53:05 +00:00
if ( $is_approver ) {
if ( $a [ 'status' ] == 0 ) {
2021-07-06 07:32:02 +00:00
print $this -> html_link ( 'ApproveDocument' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion (), 'approveid' => $a [ 'approveID' ]), array ( 'class' => 'btn btn-mini btn-primary' ), getMLText ( " add_approval " ), false , true , array ( '<li>' , '</li>' ));
} elseif ( $accessobject -> mayUpdateApproval ( $updateUser ) && (( $a [ " status " ] == 1 ) || ( $a [ " status " ] ==- 1 ))){
print $this -> html_link ( 'ApproveDocument' , array ( 'documentid' => $latestContent -> getDocument () -> getId (), 'version' => $latestContent -> getVersion (), 'approveid' => $a [ 'approveID' ]), array ( 'class' => 'btn btn-mini btn-primary' ), getMLText ( " edit " ), false , true , array ( '<li>' , '</li>' ));
2020-09-23 06:53:05 +00:00
}
2017-01-16 12:02:15 +00:00
}
2012-12-14 07:53:13 +00:00
}
2021-07-02 06:34:06 +00:00
if ( $enableremoverevapp && $user -> isAdmin () && ( $a [ 'status' ] == 1 || $a [ 'status' ] == - 1 ))
2021-07-07 06:26:13 +00:00
echo '<li><a href="' . $this -> html_url ( 'RemoveApprovalLog' , array ( 'documentid' => $document -> getID (), 'version' => $latestContent -> getVersion (), 'approveid' => $a [ 'approveID' ])) . '" title="' . getMLText ( 'remove_approval_log' ) . '"><i class="fa fa-remove"></i></a></li>' ;
2013-05-17 07:27:15 +00:00
2020-09-23 06:53:05 +00:00
print " </ul> " ;
print " </td> \n " ;
print " </tr> \n " ;
}
2012-12-14 07:53:13 +00:00
}
}
print " </table> \n " ;
2018-06-27 16:55:14 +00:00
// $this->contentContainerEnd();
2020-10-08 05:57:23 +00:00
$this -> columnEnd ();
$this -> rowEnd ();
2015-06-23 07:18:36 +00:00
2020-09-23 06:37:51 +00:00
if ( $user -> isAdmin () || $user -> getId () == $document -> getOwner () -> getId ()) {
2020-10-08 05:57:23 +00:00
$this -> rowStart ();
2015-06-02 08:22:21 +00:00
/* 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'*/ ) {
2020-10-08 05:57:23 +00:00
$this -> columnStart ( 6 );
$this -> printProtocol ( $latestContent , 'review' );
$this -> columnEnd ();
2015-06-23 07:18:36 +00:00
}
2020-10-08 05:57:23 +00:00
$this -> columnStart ( 6 );
$this -> printProtocol ( $latestContent , 'approval' );
$this -> columnEnd ();
$this -> rowEnd ();
2015-06-23 07:18:36 +00:00
}
2012-12-14 07:53:13 +00:00
?>
</ div >
< ? php
2013-04-30 16:14:05 +00:00
}
2019-12-19 15:08:10 +00:00
} elseif ( $workflowmode == 'advanced' ) {
2013-01-24 09:39:14 +00:00
if ( $workflow ) {
2016-09-06 06:21:44 +00:00
/* Check if user is involved in workflow */
$user_is_involved = false ;
foreach ( $transitions as $transition ) {
if ( $latestContent -> triggerWorkflowTransitionIsAllowed ( $user , $transition )) {
$user_is_involved = true ;
}
}
2013-01-24 09:39:14 +00:00
?>
2021-05-04 07:57:23 +00:00
< div class = " tab-pane <?php if( $currenttab == 'workflow') echo 'active'; ?> " id = " workflow " role = " tabpanel " >
2013-01-24 09:39:14 +00:00
< ? php
2020-10-08 05:57:23 +00:00
$this -> rowStart ();
2021-07-06 07:32:02 +00:00
if ( $user_is_involved && $accessobject -> check_view_access ( 'WorkflowGraph' ))
2020-10-08 05:57:23 +00:00
$this -> columnStart ( 6 );
2016-09-06 06:21:44 +00:00
else
2020-10-08 05:57:23 +00:00
$this -> columnStart ( 12 );
2013-01-24 09:39:14 +00:00
$this -> contentContainerStart ();
2013-02-02 16:00:37 +00:00
if ( $user -> isAdmin ()) {
2021-06-01 08:54:06 +00:00
if ( ! $workflowstate || SeedDMS_Core_DMS :: checkIfEqual ( $workflow -> getInitState (), $workflowstate )) {
2021-07-07 06:26:13 +00:00
print " <form action= \" " . $this -> html_url ( " RemoveWorkflowFromDocument " ) . " \" method= \" get \" ><input type= \" hidden \" name= \" documentid \" value= \" " . $latestContent -> getDocument () -> getId () . " \" /><input type= \" hidden \" name= \" version \" value= \" " . $latestContent -> getVersion () . " \" /><button type= \" submit \" class= \" btn btn-danger \" ><i class= \" fa fa-remove \" ></i> " . getMLText ( 'rm_workflow' ) . " </button></form> " ;
2013-02-02 16:00:37 +00:00
} else {
2021-07-07 06:26:13 +00:00
print " <form action= \" " . $this -> html_url ( " RewindWorkflow " ) . " \" method= \" get \" ><input type= \" hidden \" name= \" documentid \" value= \" " . $latestContent -> getDocument () -> getId () . " \" /><input type= \" hidden \" name= \" version \" value= \" " . $latestContent -> getVersion () . " \" /><button type= \" submit \" class= \" btn btn-danger \" ><i class= \" fa fa-refresh \" ></i> " . getMLText ( 'rewind_workflow' ) . " </button></form> " ;
2013-02-02 16:00:37 +00:00
}
2013-01-24 09:39:14 +00:00
}
2020-02-28 17:20:44 +00:00
echo " <h4> " . htmlspecialchars ( $workflow -> getName ()) . " </h4> " ;
2013-01-24 09:39:14 +00:00
if ( $parentworkflow = $latestContent -> getParentWorkflow ()) {
2020-02-28 17:20:44 +00:00
echo " <p>Sub workflow of ' " . htmlspecialchars ( $parentworkflow -> getName ()) . " '</p> " ;
2013-01-24 09:39:14 +00:00
}
2021-06-01 08:54:06 +00:00
echo " <h5> " . getMLText ( 'current_state' ) . " : " . ( $workflowstate ? htmlspecialchars ( $workflowstate -> getName ()) : htmlspecialchars ( getMLText ( 'workflow_in_unknown_state' ))) . " </h5> " ;
2021-04-18 05:08:00 +00:00
echo " <table class= \" table table-condensed table-sm \" > \n " ;
2013-01-24 09:39:14 +00:00
echo " <tr> " ;
2013-09-20 19:05:46 +00:00
echo " <td> " . getMLText ( 'next_state' ) . " :</td> " ;
2013-01-24 09:39:14 +00:00
foreach ( $transitions as $transition ) {
$nextstate = $transition -> getNextState ();
2016-09-05 04:39:20 +00:00
$docstatus = $nextstate -> getDocumentStatus ();
2020-08-27 05:52:52 +00:00
echo " <td><i class= \" fa fa-circle " . ( $docstatus == S_RELEASED ? " released " : ( $docstatus == S_REJECTED ? " rejected " : " in-workflow " )) . " \" ></i> " . htmlspecialchars ( $nextstate -> getName ()) . " </td> " ;
2013-01-24 09:39:14 +00:00
}
echo " </tr> " ;
echo " <tr> " ;
2013-09-20 19:05:46 +00:00
echo " <td> " . getMLText ( 'action' ) . " :</td> " ;
2013-01-24 09:39:14 +00:00
foreach ( $transitions as $transition ) {
$action = $transition -> getAction ();
2020-03-26 07:03:58 +00:00
echo " <td> " . getMLText ( 'action_' . strtolower ( $action -> getName ()), array (), htmlspecialchars ( $action -> getName ())) . " </td> " ;
2013-01-24 09:39:14 +00:00
}
echo " </tr> " ;
echo " <tr> " ;
2013-09-20 18:56:46 +00:00
echo " <td> " . getMLText ( 'users' ) . " :</td> " ;
2013-01-24 09:39:14 +00:00
foreach ( $transitions as $transition ) {
$transusers = $transition -> getUsers ();
echo " <td> " ;
foreach ( $transusers as $transuser ) {
$u = $transuser -> getUser ();
2020-02-28 17:20:44 +00:00
echo htmlspecialchars ( $u -> getFullName ());
2013-01-24 09:39:14 +00:00
if ( $document -> getAccessMode ( $u ) < M_READ ) {
echo " (no access) " ;
}
echo " <br /> " ;
}
echo " </td> " ;
}
echo " </tr> " ;
echo " <tr> " ;
2013-09-20 18:56:46 +00:00
echo " <td> " . getMLText ( 'groups' ) . " :</td> " ;
2013-01-24 09:39:14 +00:00
foreach ( $transitions as $transition ) {
$transgroups = $transition -> getGroups ();
echo " <td> " ;
foreach ( $transgroups as $transgroup ) {
$g = $transgroup -> getGroup ();
2013-09-20 18:56:46 +00:00
echo getMLText ( 'at_least_n_users_of_group' ,
array ( " number_of_users " => $transgroup -> getNumOfUsers (),
2020-02-28 17:20:44 +00:00
" group " => htmlspecialchars ( $g -> getName ())));
2013-01-24 09:39:14 +00:00
if ( $document -> getGroupAccessMode ( $g ) < M_READ ) {
echo " (no access) " ;
}
echo " <br /> " ;
}
echo " </td> " ;
}
echo " </tr> " ;
echo " <tr class= \" success \" > " ;
2013-09-20 19:05:46 +00:00
echo " <td> " . getMLText ( 'users_done_work' ) . " :</td> " ;
2013-01-24 09:39:14 +00:00
foreach ( $transitions as $transition ) {
echo " <td> " ;
if ( $latestContent -> executeWorkflowTransitionIsAllowed ( $transition )) {
2016-11-18 07:42:56 +00:00
/* If this is reached , then the transition should have been executed
* but for some reason the next state hasn ' t been reached . This can
2021-12-03 09:49:59 +00:00
* be caused , if a transition which was previously already executed
2016-11-18 07:42:56 +00:00
* is about to be executed again . E . g . there was already a transition
* T1 from state S1 to S2 triggered by user U1 .
* Then there was a second transition T2 from
* S2 back to S1 . If the state S1 has been reached again , then
* executeWorkflowTransitionIsAllowed () will think that T1 could be
* executed because there is already a log entry saying , that U1
* has triggered the workflow .
*/
echo " Done " ;
2013-01-24 09:39:14 +00:00
}
$wkflogs = $latestContent -> getWorkflowLog ( $transition );
foreach ( $wkflogs as $wkflog ) {
$loguser = $wkflog -> getUser ();
2021-12-03 09:49:59 +00:00
echo htmlspecialchars ( $loguser -> getFullName ());
2013-01-24 09:39:14 +00:00
$names = array ();
foreach ( $loguser -> getGroups () as $loggroup ) {
2020-02-28 17:20:44 +00:00
$names [] = htmlspecialchars ( $loggroup -> getName ());
2013-01-24 09:39:14 +00:00
}
2021-12-03 09:49:59 +00:00
if ( $names )
echo " ( " . implode ( " , " , $names ) . " ) " ;
echo " - " ;
echo getLongReadableDate ( $wkflog -> getDate ());
2016-01-27 05:49:19 +00:00
echo " <br /> " ;
2013-01-24 09:39:14 +00:00
}
echo " </td> " ;
}
echo " </tr> " ;
echo " <tr> " ;
echo " <td></td> " ;
2016-09-05 04:39:20 +00:00
$allowedtransitions = array ();
2013-01-24 09:39:14 +00:00
foreach ( $transitions as $transition ) {
echo " <td> " ;
if ( $latestContent -> triggerWorkflowTransitionIsAllowed ( $user , $transition )) {
$action = $transition -> getAction ();
2021-07-07 06:26:13 +00:00
print " <form action= \" " . $this -> html_url ( " TriggerWorkflow " ) . " \" method= \" get \" ><input type= \" hidden \" name= \" documentid \" value= \" " . $latestContent -> getDocument () -> getId () . " \" /><input type= \" hidden \" name= \" version \" value= \" " . $latestContent -> getVersion () . " \" /><input type= \" hidden \" name= \" transition \" value= \" " . $transition -> getID () . " \" /><input type= \" submit \" class= \" btn btn-primary \" value= \" " . getMLText ( 'action_' . strtolower ( $action -> getName ()), array (), htmlspecialchars ( $action -> getName ())) . " \" /></form> " ;
2016-09-05 04:39:20 +00:00
$allowedtransitions [] = $transition ;
2013-01-24 09:39:14 +00:00
}
echo " </td> " ;
}
echo " </tr> " ;
echo " </table> " ;
$workflows = $dms -> getAllWorkflows ();
if ( $workflows ) {
$subworkflows = array ();
foreach ( $workflows as $wkf ) {
2021-06-01 08:54:06 +00:00
if ( $workflowstate && ( $wkf -> getInitState () -> getID () == $workflowstate -> getID ())) {
2013-01-24 09:39:14 +00:00
if ( $workflow -> getID () != $wkf -> getID ()) {
$subworkflows [] = $wkf ;
}
}
}
if ( $subworkflows ) {
2021-07-07 06:26:13 +00:00
echo " <form class= \" form-inline \" action= \" " . $this -> html_url ( " RunSubWorkflow " ) . " \" method= \" get \" ><input type= \" hidden \" name= \" documentid \" value= \" " . $latestContent -> getDocument () -> getId () . " \" /><input type= \" hidden \" name= \" version \" value= \" " . $latestContent -> getVersion () . " \" /> " ;
2021-04-18 05:08:00 +00:00
echo " <select name= \" subworkflow \" class= \" form-control \" > " ;
2013-01-24 09:39:14 +00:00
foreach ( $subworkflows as $subworkflow ) {
2021-04-30 07:27:59 +00:00
echo " <option value= \" " . $subworkflow -> getID () . " \" > " . htmlspecialchars ( $subworkflow -> getName ()) . " </option> " ;
2013-01-24 09:39:14 +00:00
}
echo " </select> " ;
echo " <label class= \" inline \" > " ;
2020-10-08 20:25:51 +00:00
echo " <input type= \" submit \" class= \" btn btn-primary \" value= \" " . getMLText ( 'run_subworkflow' ) . " \" /> " ;
2021-04-18 05:08:00 +00:00
echo " </label> " ;
2013-01-24 09:39:14 +00:00
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 ()) {
2021-04-30 07:27:59 +00:00
echo " Switching from sub workflow ' " . htmlspecialchars ( $workflow -> getName ()) . " ' into state " . $state -> getName () . " of parent workflow ' " . htmlspecialchars ( $parentworkflow -> getName ()) . " ' is possible<br /> " ;
2013-01-24 09:39:14 +00:00
/* 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 /> " ;
2021-07-07 06:26:13 +00:00
echo " <form action= \" " . $this -> html_url ( " ReturnFromSubWorkflow " ) . " \" method= \" get \" ><input type= \" hidden \" name= \" documentid \" value= \" " . $latestContent -> getDocument () -> getId () . " \" /><input type= \" hidden \" name= \" version \" value= \" " . $latestContent -> getVersion () . " \" /> " ;
2020-10-08 20:25:51 +00:00
echo " <input type= \" submit \" class= \" btn btn-primary \" value= \" " . getMLText ( 'return_from_subworkflow' ) . " \" /> " ;
2013-01-24 09:39:14 +00:00
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 /> " ;
2021-07-07 06:26:13 +00:00
echo " <form action= \" " . $this -> html_url ( " ReturnFromSubWorkflow " ) . " \" method= \" get \" ><input type= \" hidden \" name= \" documentid \" value= \" " . $latestContent -> getDocument () -> getId () . " \" /><input type= \" hidden \" name= \" version \" value= \" " . $latestContent -> getVersion () . " \" /><input type= \" hidden \" name= \" transition \" value= \" " . $transition -> getID () . " \" /> " ;
2020-10-08 20:25:51 +00:00
echo " <input type= \" submit \" class= \" btn btn-primary \" value= \" " . getMLText ( 'return_from_subworkflow' ) . " \" /> " ;
2013-01-24 09:39:14 +00:00
echo " </form> " ;
}
}
}
}
}
}
}
2016-09-05 04:39:20 +00:00
$this -> contentContainerEnd ();
2020-10-08 05:57:23 +00:00
$this -> columnEnd ();
2021-07-06 07:32:02 +00:00
if ( $user_is_involved && $accessobject -> check_view_access ( 'WorkflowGraph' )) {
2020-10-08 05:57:23 +00:00
$this -> columnStart ( 6 );
2016-09-05 04:39:20 +00:00
?>
< iframe src = " out.WorkflowGraph.php?workflow=<?php echo $workflow->getID (); ?><?php if( $allowedtransitions ) foreach( $allowedtransitions as $tr ) { echo " & transitions [] = " . $tr->getID ();} ?> " width = " 99% " height = " 661 " style = " border: 1px solid #AAA; " ></ iframe >
< ? php
2020-10-08 05:57:23 +00:00
$this -> columnEnd ();
2016-09-06 06:21:44 +00:00
}
2020-10-08 05:57:23 +00:00
$this -> rowEnd ();
2022-04-02 09:07:31 +00:00
$wkflogs = $latestContent -> getWorkflowLog ();
if ( $wkflogs ) {
$this -> rowStart ();
$this -> columnStart ( 12 );
$this -> contentHeading ( getMLText ( " workflow_log " ));
$this -> contentContainerStart ();
echo " <table class= \" table table-condensed table-sm \" ><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> " . getLongReadableDate ( $wkflog -> getDate ()) . " </td> " ;
echo " <td> " . htmlspecialchars ( getMLText ( 'action_' . strtolower ( $wkflog -> getTransition () -> getAction () -> getName ()), array (), $wkflog -> getTransition () -> getAction () -> getName ())) . " </td> " ;
$loguser = $wkflog -> getUser ();
echo " <td> " . htmlspecialchars ( $loguser -> getFullName ()) . " </td> " ;
echo " <td> " . htmlspecialchars ( $wkflog -> getComment ()) . " </td> " ;
echo " </tr> " ;
}
print " </tbody> \n </table> \n " ;
$this -> contentContainerEnd ();
$this -> columnEnd ();
$this -> rowEnd ();
}
2013-01-24 09:39:14 +00:00
?>
</ div >
< ? php
}
}
2012-12-14 07:53:13 +00:00
if ( count ( $versions ) > 1 ) {
?>
2021-05-04 07:57:23 +00:00
< div class = " tab-pane <?php if( $currenttab == 'previous') echo 'active'; ?> " id = " previous " role = " tabpanel " >
2012-12-14 07:53:13 +00:00
< ? php
2020-09-18 17:24:18 +00:00
$txt = $this -> callHook ( 'prePreviousVersionsTab' , $versions );
if ( is_string ( $txt ))
echo $txt ;
2012-12-14 07:53:13 +00:00
for ( $i = count ( $versions ) - 2 ; $i >= 0 ; $i -- ) {
$version = $versions [ $i ];
2021-05-06 11:42:18 +00:00
$this -> contentContainerStart ();
$this -> showVersionDetails ( $version , $previewer , false );
$this -> contentContainerEnd ();
2012-12-14 07:53:13 +00:00
}
?>
</ div >
< ? php
}
?>
2021-07-16 14:03:34 +00:00
< div class = " tab-pane <?php if( $currenttab == 'attachments') echo 'active'; ?> " id = " attachments " role = " tabpanel " >
2012-12-14 07:53:13 +00:00
< ? php
2021-07-16 14:03:34 +00:00
$this -> rowStart ();
$this -> columnStart ( 9 );
?>
< div class = " ajax " data - view = " ViewDocument " data - action = " documentFiles " data - no - spinner = " true " < ? php echo ( $document ? " data-query= \" documentid= " . $document -> getID () . " \" " : " " ) ?> ></div>
< ? php
$this -> columnEnd ();
$this -> columnStart ( 3 );
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_controller_access ( 'AddFile' )) {
if ( $document -> getAccessMode ( $user ) >= M_READWRITE ){
2021-07-16 14:03:34 +00:00
if ( $enableDropUpload ){
2021-03-03 14:38:04 +00:00
?>
2021-07-16 14:03:34 +00:00
< div id = " draganddrophandler " class = " well alert alert-warning " data - droptarget = " attachment_<?= $document->getID (); ?> " data - target = " <?= $document->getID (); ?> " data - uploadformtoken = " <?= createFormKey('addfile'); ?> " >< ? php echo $this -> html_link ( 'AddFile' , array ( 'documentid' => $documentid ), array ( 'class' => 'alert alert-warning' ), getMLText ( 'drop_files_here_or_click' ), false , true ); ?> </div>
2021-03-03 14:38:04 +00:00
< ? php
2021-07-16 14:03:34 +00:00
} else {
print $this -> html_link ( 'AddFile' , array ( 'documentid' => $documentid ), array ( 'class' => 'btn btn-primary' ), getMLText ( " add " ), false , true ) . " \n " ;
2021-07-06 07:32:02 +00:00
}
2021-03-03 14:38:04 +00:00
}
2012-12-14 07:53:13 +00:00
}
2021-07-16 14:03:34 +00:00
$this -> columnEnd ();
$this -> rowEnd ();
2012-12-14 07:53:13 +00:00
?>
</ div >
2021-05-04 07:57:23 +00:00
< div class = " tab-pane <?php if( $currenttab == 'links') echo 'active'; ?> " id = " links " role = " tabpanel " >
2012-12-14 07:53:13 +00:00
< ? php
if ( count ( $links ) > 0 ) {
2021-04-18 05:08:00 +00:00
print " <table id= \" viewfolder-table \" class= \" table table-condensed table-sm table-hover \" > " ;
2012-12-14 07:53:13 +00:00
print " <thead> \n <tr> \n " ;
2018-01-26 17:51:59 +00:00
print " <th></th> \n " ;
print " <th> " . getMLText ( " name " ) . " </th> \n " ;
print " <th> " . getMLText ( " status " ) . " </th> \n " ;
print " <th> " . getMLText ( " action " ) . " </th> \n " ;
2013-01-24 09:39:14 +00:00
print " <th></th> \n " ;
2012-12-14 07:53:13 +00:00
print " </tr> \n </thead> \n <tbody> \n " ;
foreach ( $links as $link ) {
$responsibleUser = $link -> getUser ();
$targetDoc = $link -> getTarget ();
2020-05-13 07:28:39 +00:00
echo $this -> documentListRowStart ( $targetDoc );
2018-01-26 17:51:59 +00:00
$targetDoc -> verifyLastestContentExpriry ();
2018-08-08 04:55:56 +00:00
$txt = $this -> callHook ( 'documentListItem' , $targetDoc , $previewer , false , 'reverselinks' );
2018-01-26 17:51:59 +00:00
if ( is_string ( $txt ))
echo $txt ;
else {
echo $this -> documentListRow ( $targetDoc , $previewer , true );
2013-01-24 09:39:14 +00:00
}
2018-01-26 17:51:59 +00:00
print " <td><span class= \" actions \" > " ;
print getMLText ( " document_link_by " ) . " " . htmlspecialchars ( $responsibleUser -> getFullName ());
2021-07-11 18:08:13 +00:00
if (( $user -> getID () == $responsibleUser -> getID ()) || ( $document -> getAccessMode ( $user ) == M_ALL )) {
2013-04-23 17:03:56 +00:00
print " <br /> " . getMLText ( " document_link_public " ) . " : " . (( $link -> isPublic ()) ? getMLText ( " yes " ) : getMLText ( " no " ));
2021-07-05 14:30:26 +00:00
print " <form action= \" " . $this -> params [ 'settings' ] -> _httpRoot . " 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-danger btn-mini btn-sm \" ><i class= \" fa fa-remove \" ></i> " . getMLText ( " delete " ) . " </button></form> " ;
2021-07-11 18:08:13 +00:00
}
2012-12-14 07:53:13 +00:00
print " </span></td> " ;
2020-05-13 07:28:39 +00:00
echo $this -> documentListRowEnd ( $targetDoc );
2012-12-14 07:53:13 +00:00
}
print " </tbody> \n </table> \n " ;
}
2020-04-14 18:00:53 +00:00
else $this -> infoMsg ( getMLText ( " no_linked_files " ));
2012-12-14 07:53:13 +00:00
2021-07-06 07:32:02 +00:00
if ( $accessobject -> check_view_access ( 'AddDocumentLink' )){
2012-12-14 07:53:13 +00:00
?>
< br >
2021-07-05 14:30:26 +00:00
< form action = " <?= $this->params ['settings']->_httpRoot ?>op/op.AddDocumentLink.php " id = " form1 " name = " form1 " class = " form-horizontal " >
2012-12-14 07:53:13 +00:00
< input type = " hidden " name = " documentid " value = " <?php print $documentid ;?> " >
2021-01-25 09:04:45 +00:00
< ? php echo createHiddenFieldWithKey ( 'adddocumentlink' ); ?>
2021-04-18 05:08:00 +00:00
< ? php $this -> contentContainerStart (); ?>
2018-06-21 09:56:05 +00:00
< ? php $this -> formField ( getMLText ( " add_document_link " ), $this -> getDocumentChooserHtml ( " form1 " )); ?>
2012-12-14 07:53:13 +00:00
< ? php
if ( $document -> getAccessMode ( $user ) >= M_READWRITE ) {
2018-06-21 09:56:05 +00:00
$this -> formField (
getMLText ( " document_link_public " ),
array (
'element' => 'input' ,
'type' => 'checkbox' ,
'name' => 'public' ,
'value' => 'true' ,
'checked' => true
)
);
2012-12-14 07:53:13 +00:00
}
2021-04-18 05:08:00 +00:00
$this -> contentContainerEnd ();
2020-08-27 05:52:52 +00:00
$this -> formSubmit ( " <i class= \" fa fa-save \" ></i> " . getMLText ( 'save' ));
2012-12-14 07:53:13 +00:00
?>
</ form >
< ? php
}
2014-03-18 06:07:12 +00:00
if ( count ( $reverselinks ) > 0 ) {
$this -> contentHeading ( getMLText ( " reverse_links " ));
2018-01-26 17:51:59 +00:00
// $this->contentContainerStart();
2014-03-18 06:07:12 +00:00
2021-04-18 05:08:00 +00:00
print " <table id= \" viewfolder-table \" class= \" table table-condensed table-sm table-hover \" > " ;
2014-03-18 06:07:12 +00:00
print " <thead> \n <tr> \n " ;
2018-01-26 17:51:59 +00:00
print " <th></th> \n " ;
print " <th> " . getMLText ( " name " ) . " </th> \n " ;
print " <th> " . getMLText ( " status " ) . " </th> \n " ;
print " <th> " . getMLText ( " action " ) . " </th> \n " ;
2014-03-18 06:07:12 +00:00
print " <th></th> \n " ;
print " </tr> \n </thead> \n <tbody> \n " ;
foreach ( $reverselinks as $link ) {
$responsibleUser = $link -> getUser ();
$sourceDoc = $link -> getDocument ();
2020-05-13 07:28:39 +00:00
echo $this -> documentListRowStart ( $sourceDoc );
2018-01-26 17:51:59 +00:00
$sourceDoc -> verifyLastestContentExpriry ();
2018-08-08 04:55:56 +00:00
$txt = $this -> callHook ( 'documentListItem' , $sourceDoc , $previewer , false , 'reverselinks' );
2018-01-26 17:51:59 +00:00
if ( is_string ( $txt ))
echo $txt ;
else {
echo $this -> documentListRow ( $sourceDoc , $previewer , true );
2014-03-18 06:07:12 +00:00
}
print " <td><span class= \" actions \" > " ;
if (( $user -> getID () == $responsibleUser -> getID ()) || ( $document -> getAccessMode ( $user ) == M_ALL ))
2018-01-26 17:51:59 +00:00
print getMLText ( " document_link_by " ) . " " . htmlspecialchars ( $responsibleUser -> getFullName ());
2021-07-11 18:08:13 +00:00
if (( $user -> getID () == $responsibleUser -> getID ()) || ( $document -> getAccessMode ( $user ) == M_ALL )) {
2018-01-26 17:51:59 +00:00
print " <br /> " . getMLText ( " document_link_public " ) . " : " . (( $link -> isPublic ()) ? getMLText ( " yes " ) : getMLText ( " no " ));
2022-05-01 13:08:58 +00:00
print " <form action= \" " . $this -> params [ 'settings' ] -> _httpRoot . " op/op.RemoveDocumentLink.php \" method= \" post \" > " . createHiddenFieldWithKey ( 'removedocumentlink' ) . " <input type= \" hidden \" name= \" documentid \" value= \" " . $sourceDoc -> getId () . " \" /><input type= \" hidden \" name= \" linkid \" value= \" " . $link -> getID () . " \" /><button type= \" submit \" class= \" btn btn-danger btn-mini btn-sm \" ><i class= \" fa fa-remove \" ></i> " . getMLText ( " delete " ) . " </button></form> " ;
2021-07-11 18:08:13 +00:00
}
2014-03-18 06:07:12 +00:00
print " </span></td> " ;
2020-05-13 07:28:39 +00:00
echo $this -> documentListRowEnd ( $sourceDoc );
2014-03-18 06:07:12 +00:00
}
print " </tbody> \n </table> \n " ;
2018-01-26 17:51:59 +00:00
// $this->contentContainerEnd();
2014-03-18 06:07:12 +00:00
}
2012-12-14 07:53:13 +00:00
?>
2016-11-07 08:25:55 +00:00
</ div >
2018-04-13 12:53:06 +00:00
< ? php
if ( $tabs ) {
foreach ( $tabs as $tabid => $tab ) {
2021-05-04 07:57:23 +00:00
echo '<div class="tab-pane ' . ( $currenttab == $tabid ? 'active' : '' ) . '" id="' . $tabid . '" role="tabpanel">' ;
2018-04-13 12:53:06 +00:00
echo $tab [ 'content' ];
echo " </div> \n " ;
}
}
?>
2012-12-14 07:53:13 +00:00
</ div >
2015-09-18 05:55:24 +00:00
< ? php
if ( $user -> isAdmin ()) {
2020-09-23 06:44:47 +00:00
$this -> contentHeading ( getMLText ( " timeline " ));
$this -> printTimelineHtml ( 300 );
2015-09-18 05:55:24 +00:00
}
2020-10-08 05:57:23 +00:00
$this -> columnEnd ();
$this -> rowEnd ();
2019-10-18 09:06:42 +00:00
echo $this -> callHook ( 'postContent' );
2016-03-15 07:30:53 +00:00
$this -> contentEnd ();
2012-12-14 07:53:13 +00:00
$this -> htmlEndPage ();
} /* }}} */
}
?>