2012-12-14 07:53:13 +00:00
< ? php
/**
* Implementation of UpdateDocument 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
*/
require_once ( " class.Bootstrap.php " );
/**
* Class which outputs the html page for UpdateDocument 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 @
*/
2013-02-14 11:10:53 +00:00
class SeedDMS_View_UpdateDocument extends SeedDMS_Bootstrap_Style {
2012-12-14 07:53:13 +00:00
2015-12-14 14:16:32 +00:00
function js () { /* {{{ */
2012-12-14 07:53:13 +00:00
$strictformcheck = $this -> params [ 'strictformcheck' ];
$dropfolderdir = $this -> params [ 'dropfolderdir' ];
2017-01-31 16:27:53 +00:00
$enablelargefileupload = $this -> params [ 'enablelargefileupload' ];
$partitionsize = $this -> params [ 'partitionsize' ];
2017-03-15 15:40:41 +00:00
$maxuploadsize = $this -> params [ 'maxuploadsize' ];
2016-02-17 10:43:19 +00:00
header ( 'Content-Type: application/javascript' );
2015-12-14 14:16:32 +00:00
$this -> printDropFolderChooserJs ( " form1 " );
2016-03-21 06:40:17 +00:00
$this -> printSelectPresetButtonJs ();
2016-10-20 16:28:25 +00:00
$this -> printInputPresetButtonJs ();
$this -> printCheckboxPresetButtonJs ();
2017-01-31 16:27:53 +00:00
if ( $enablelargefileupload )
2017-03-15 15:40:41 +00:00
$this -> printFineUploaderJs ( '../op/op.UploadChunks.php' , $partitionsize , $maxuploadsize , false );
2018-09-05 11:35:44 +00:00
$this -> printFileChooserJs ();
2012-12-14 07:53:13 +00:00
?>
2015-12-14 14:16:32 +00:00
$ ( document ) . ready ( function () {
2016-08-30 05:59:03 +00:00
jQuery . validator . addMethod ( " alternatives " , function ( value , element , params ) {
if ( value == '' && params . val () == '' )
return false ;
return true ;
}, " <?php printMLText( " js_no_file " );?> " );
2017-01-31 16:27:53 +00:00
/* The fineuploader validation is actually checking all fields that can contain
* a file to be uploaded . First checks if an alternative input field is set ,
* second loops through the list of scheduled uploads , checking if at least one
* file will be submitted .
*/
jQuery . validator . addMethod ( " fineuploader " , function ( value , element , params ) {
if ( params [ 1 ] . val () != '' )
return true ;
uploader = params [ 0 ];
arr = uploader . getUploads ();
for ( var i in arr ) {
if ( arr [ i ] . status == 'submitted' )
return true ;
}
return false ;
}, " <?php printMLText( " js_no_file " );?> " );
2016-09-06 13:34:05 +00:00
$ ( " #form1 " ) . validate ({
2017-05-04 11:49:45 +00:00
debug : false ,
ignore : " :hidden:not(.do_validate) " ,
2016-09-06 13:34:05 +00:00
invalidHandler : function ( e , validator ) {
noty ({
text : ( validator . numberOfInvalids () == 1 ) ? " <?php printMLText( " js_form_error " );?> " . replace ( '#' , validator . numberOfInvalids ()) : " <?php printMLText( " js_form_errors " );?> " . replace ( '#' , validator . numberOfInvalids ()),
type : 'error' ,
dismissQueue : true ,
layout : 'topRight' ,
theme : 'defaultTheme' ,
timeout : 1500 ,
});
},
2017-01-31 16:27:53 +00:00
< ? php
if ( $enablelargefileupload ) {
?>
submitHandler : function ( form ) {
2017-05-04 11:49:45 +00:00
/* fileuploader may not have any files if drop folder is used */
if ( userfileuploader . getUploads () . length )
userfileuploader . uploadStoredFiles ();
else
form . submit ();
2017-01-31 16:27:53 +00:00
},
< ? php
}
?>
2016-08-30 05:59:03 +00:00
rules : {
2017-01-31 16:27:53 +00:00
< ? php
if ( $enablelargefileupload ) {
?>
2017-05-04 11:49:45 +00:00
'userfile-fine-uploader-uuids' : {
fineuploader : [ userfileuploader , $ ( '#dropfolderfileform1' ) ]
2017-01-31 16:27:53 +00:00
}
< ? php
} else {
?>
2016-08-30 05:59:03 +00:00
userfile : {
alternatives : $ ( '#dropfolderfileform1' )
},
dropfolderfileform1 : {
alternatives : $ ( '#userfile' )
}
2017-01-31 16:27:53 +00:00
< ? php
}
?>
2016-08-30 05:59:03 +00:00
},
2016-08-29 07:44:49 +00:00
messages : {
comment : " <?php printMLText( " js_no_comment " );?> " ,
2016-08-30 05:59:03 +00:00
},
errorPlacement : function ( error , element ) {
if ( element . is ( " :file " ) ) {
error . appendTo ( element . parent () . parent () . parent ());
console . log ( element );
} else {
error . appendTo ( element . parent ());
}
2016-08-29 07:44:49 +00:00
}
});
2017-04-05 20:00:54 +00:00
$ ( '#presetexpdate' ) . on ( 'change' , function ( ev ){
if ( $ ( this ) . val () == 'date' )
$ ( '#control_expdate' ) . show ();
else
$ ( '#control_expdate' ) . hide ();
});
2015-12-14 14:16:32 +00:00
});
2012-12-14 07:53:13 +00:00
< ? php
2015-12-14 14:16:32 +00:00
} /* }}} */
function show () { /* {{{ */
$dms = $this -> params [ 'dms' ];
$user = $this -> params [ 'user' ];
$folder = $this -> params [ 'folder' ];
$document = $this -> params [ 'document' ];
$strictformcheck = $this -> params [ 'strictformcheck' ];
2019-12-19 15:08:10 +00:00
$nodocumentformfields = $this -> params [ 'nodocumentformfields' ];
2015-12-14 14:16:32 +00:00
$enablelargefileupload = $this -> params [ 'enablelargefileupload' ];
2017-03-15 15:40:41 +00:00
$maxuploadsize = $this -> params [ 'maxuploadsize' ];
2015-12-14 14:16:32 +00:00
$enableadminrevapp = $this -> params [ 'enableadminrevapp' ];
$enableownerrevapp = $this -> params [ 'enableownerrevapp' ];
$enableselfrevapp = $this -> params [ 'enableselfrevapp' ];
$dropfolderdir = $this -> params [ 'dropfolderdir' ];
$workflowmode = $this -> params [ 'workflowmode' ];
$presetexpiration = $this -> params [ 'presetexpiration' ];
$documentid = $document -> getId ();
2016-08-29 07:44:49 +00:00
$this -> htmlAddHeader ( '<script type="text/javascript" src="../styles/' . $this -> theme . '/validate/jquery.validate.js"></script>' . " \n " , 'js' );
2017-03-15 15:40:41 +00:00
if ( $enablelargefileupload ) {
2017-01-31 16:27:53 +00:00
$this -> htmlAddHeader ( '<script type="text/javascript" src="../styles/' . $this -> theme . '/fine-uploader/jquery.fine-uploader.min.js"></script>' . " \n " , 'js' );
2017-03-15 15:40:41 +00:00
$this -> htmlAddHeader ( $this -> getFineUploaderTemplate (), 'js' );
}
2016-08-29 07:44:49 +00:00
2015-12-14 14:16:32 +00:00
$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 );
$this -> contentHeading ( getMLText ( " update_document " ));
2012-12-14 07:53:13 +00:00
if ( $document -> isLocked ()) {
$lockingUser = $document -> getLockingUser ();
print " <div class= \" alert alert-warning \" > " ;
printMLText ( " update_locked_msg " , array ( " username " => htmlspecialchars ( $lockingUser -> getFullName ()), " email " => $lockingUser -> getEmail ()));
if ( $lockingUser -> getID () == $user -> getID ())
printMLText ( " unlock_cause_locking_user " );
else if ( $document -> getAccessMode ( $user ) == M_ALL )
printMLText ( " unlock_cause_access_mode_all " );
else
{
printMLText ( " no_update_cause_locked " );
print " </div> " ;
2016-03-15 07:30:53 +00:00
$this -> contentEnd ();
2012-12-14 07:53:13 +00:00
$this -> htmlEndPage ();
exit ;
}
print " </div> " ;
}
2015-02-13 16:41:50 +00:00
$latestContent = $document -> getLatestContent ();
$reviewStatus = $latestContent -> getReviewStatus ();
$approvalStatus = $latestContent -> getApprovalStatus ();
2015-03-16 07:58:10 +00:00
if ( $workflowmode == 'advanced' ) {
2013-02-06 13:59:10 +00:00
if ( $status = $latestContent -> getStatus ()) {
if ( $status [ " status " ] == S_IN_WORKFLOW ) {
$this -> warningMsg ( " The current version of this document is in a workflow. This will be interrupted and cannot be completed if you upload a new version. " );
}
}
}
2012-12-14 07:53:13 +00:00
2013-02-06 13:59:10 +00:00
if ( $enablelargefileupload ) {
2017-03-15 15:40:41 +00:00
if ( $maxuploadsize ) {
$msg = getMLText ( " max_upload_size " ) . " : " . SeedDMS_Core_File :: format_filesize ( $maxuploadsize );
2017-03-20 11:42:29 +00:00
} else {
$msg = '' ;
2017-03-15 15:40:41 +00:00
}
} else {
$msg = getMLText ( " max_upload_size " ) . " : " . ini_get ( " upload_max_filesize " );
}
2020-05-07 12:03:00 +00:00
$mus2 = SeedDMS_Core_File :: parse_filesize ( ini_get ( " upload_max_filesize " ));
if ( $maxuploadsize && $maxuploadsize < $mus2 )
$msg = getMLText ( " max_upload_size " ) . " : " . SeedDMS_Core_File :: format_filesize ( $maxuploadsize );
else
$msg = getMLText ( " max_upload_size " ) . " : " . SeedDMS_Core_File :: format_filesize ( $mus2 );
2017-03-15 15:40:41 +00:00
if ( 0 && $enablelargefileupload ) {
2013-02-06 13:59:10 +00:00
$msg .= " <p> " . sprintf ( getMLText ( 'link_alt_updatedocument' ), " out.AddMultiDocument.php?folderid= " . $folder -> getID () . " &showtree= " . showtree ()) . " </p> " ;
}
2017-03-20 11:42:29 +00:00
if ( $msg )
$this -> warningMsg ( $msg );
2012-12-14 07:53:13 +00:00
$this -> contentContainerStart ();
?>
2018-06-26 04:52:16 +00:00
< form class = " form-horizontal " action = " ../op/op.UpdateDocument.php " enctype = " multipart/form-data " method = " post " name = " form1 " id = " form1 " >
2017-05-04 11:49:45 +00:00
< ? php echo createHiddenFieldWithKey ( 'updatedocument' ); ?>
2012-12-14 07:53:13 +00:00
< input type = " hidden " name = " documentid " value = " <?php print $document->getID (); ?> " >
2014-05-16 07:19:36 +00:00
< ? php
2018-06-26 04:52:16 +00:00
$this -> formField (
getMLText ( " local_file " ),
2018-09-05 11:35:44 +00:00
$enablelargefileupload ? $this -> getFineUploaderHtml () : $this -> getFileChooserHtml ( 'userfile' , false )
2018-06-26 04:52:16 +00:00
);
if ( $dropfolderdir ) {
$this -> formField (
getMLText ( " dropfolder_file " ),
$this -> getDropFolderChooserHtml ( " form1 " )
);
}
2019-12-19 15:08:10 +00:00
if ( ! $nodocumentformfields || ! in_array ( 'version_comment' , $nodocumentformfields )) {
2018-06-26 04:52:16 +00:00
$this -> formField (
getMLText ( " comment " ),
array (
'element' => 'textarea' ,
'name' => 'comment' ,
'rows' => 4 ,
'cols' => 80
)
);
2019-12-19 15:08:10 +00:00
}
if ( ! $nodocumentformfields || ! in_array ( 'expires' , $nodocumentformfields )) {
2018-06-26 04:52:16 +00:00
if ( $presetexpiration ) {
if ( ! ( $expts = strtotime ( $presetexpiration )))
2017-04-05 20:00:54 +00:00
$expts = false ;
2018-06-26 04:52:16 +00:00
} else {
$expts = false ;
}
$options = array ();
$options [] = array ( 'never' , getMLText ( 'does_not_expire' ));
$options [] = array ( 'date' , getMLText ( 'expire_by_date' ), $expts );
$options [] = array ( '1w' , getMLText ( 'expire_in_1w' ));
$options [] = array ( '1m' , getMLText ( 'expire_in_1m' ));
$options [] = array ( '1y' , getMLText ( 'expire_in_1y' ));
$options [] = array ( '2y' , getMLText ( 'expire_in_2y' ));
$this -> formField (
getMLText ( " preset_expires " ),
array (
'element' => 'select' ,
'id' => 'presetexpdate' ,
'name' => 'presetexpdate' ,
'options' => $options
)
);
$this -> formField (
getMLText ( " expires " ),
$this -> getDateChooser (( $expts ? date ( 'Y-m-d' , $expts ) : '' ), " expdate " , $this -> params [ 'session' ] -> getLanguage ())
);
2019-12-19 15:08:10 +00:00
}
2018-06-26 04:52:16 +00:00
$attrdefs = $dms -> getAllAttributeDefinitions ( array ( SeedDMS_Core_AttributeDefinition :: objtype_documentcontent , SeedDMS_Core_AttributeDefinition :: objtype_all ));
if ( $attrdefs ) {
foreach ( $attrdefs as $attrdef ) {
$arr = $this -> callHook ( 'editDocumentContentAttribute' , $document , $attrdef );
if ( is_array ( $arr )) {
if ( $arr )
$this -> formField ( $arr [ 0 ], $arr [ 1 ]);
} else {
$presetbtnhtml = '' ;
if ( $latestContent -> getAttributeValue ( $attrdef )) {
switch ( $attrdef -> getType ()) {
case SeedDMS_Core_AttributeDefinition :: type_string :
case SeedDMS_Core_AttributeDefinition :: type_date :
case SeedDMS_Core_AttributeDefinition :: type_int :
case SeedDMS_Core_AttributeDefinition :: type_float :
$presetbtnhtml = $this -> getInputPresetButtonHtml ( 'attributes_version_' . $attrdef -> getID (), $latestContent -> getAttributeValue ( $attrdef ), $attrdef -> getValueSetSeparator ());
break ;
case SeedDMS_Core_AttributeDefinition :: type_boolean :
$presetbtnhtml = $this -> gettCheckboxPresetButtonHtml ( 'attributes_version_' . $attrdef -> getID (), $latestContent -> getAttributeValue ( $attrdef ));
break ;
}
}
$this -> formField ( htmlspecialchars ( $attrdef -> getName ()), $this -> getAttributeEditField ( $attrdef , '' , 'attributes_version' ) . " " . $presetbtnhtml );
2016-10-20 16:28:25 +00:00
}
2015-04-27 06:27:19 +00:00
}
2012-12-14 07:53:13 +00:00
}
2018-06-26 04:52:16 +00:00
$arrs = $this -> callHook ( 'addDocumentContentAttributes' , $folder );
if ( is_array ( $arrs )) {
foreach ( $arrs as $arr ) {
$this -> formField ( $arr [ 0 ], $arr [ 1 ]);
}
2020-07-21 05:29:15 +00:00
} elseif ( is_string ( $arrs )) {
echo $arrs ;
2017-05-04 09:04:08 +00:00
}
2018-06-26 04:52:16 +00:00
if ( $workflowmode == 'advanced' ) {
$mandatoryworkflows = $user -> getMandatoryWorkflows ();
if ( $mandatoryworkflows ) {
if ( count ( $mandatoryworkflows ) == 1 ) {
$this -> formField (
getMLText ( " workflow " ),
htmlspecialchars ( $mandatoryworkflows [ 0 ] -> getName ()) . '<input type="hidden" name="workflow" value="' . $mandatoryworkflows [ 0 ] -> getID () . '">'
);
} else {
$options = array ();
$curworkflow = $latestContent -> getWorkflow ();
foreach ( $mandatoryworkflows as $workflow ) {
$options [] = array ( $workflow -> getID (), htmlspecialchars ( $workflow -> getName ()), $curworkflow && $curworkflow -> getID () == $workflow -> getID ());
}
$this -> formField (
getMLText ( " workflow " ),
array (
'element' => 'select' ,
'id' => 'workflow' ,
'name' => 'workflow' ,
'class' => 'chzn-select' ,
'attributes' => array ( array ( 'data-placeholder' , getMLText ( 'select_workflow' ))),
'options' => $options
)
);
}
} else {
$options = array ();
$options [] = array ( '' , '' );
$workflows = $dms -> getAllWorkflows ();
foreach ( $workflows as $workflow ) {
$options [] = array ( $workflow -> getID (), htmlspecialchars ( $workflow -> getName ()));
}
$this -> formField (
getMLText ( " workflow " ),
array (
'element' => 'select' ,
'id' => 'workflow' ,
'name' => 'workflow' ,
'class' => 'chzn-select' ,
'attributes' => array ( array ( 'data-allow-clear' , 'true' ), array ( 'data-placeholder' , getMLText ( 'select_workflow' ))),
'options' => $options
)
);
}
$this -> warningMsg ( getMLText ( " add_doc_workflow_warning " ));
2020-01-16 12:08:22 +00:00
} elseif ( $workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval' ) {
2018-06-26 04:52:16 +00:00
$docAccess = $document -> getReadAccessList ( $enableadminrevapp , $enableownerrevapp );
if ( $workflowmode == 'traditional' ) {
$this -> contentSubHeading ( getMLText ( " assign_reviewers " ));
2012-12-14 07:53:13 +00:00
$res = $user -> getMandatoryReviewers ();
2018-06-26 04:52:16 +00:00
$options = array ();
2012-12-14 07:53:13 +00:00
foreach ( $docAccess [ " users " ] as $usr ) {
2013-02-27 16:18:08 +00:00
if ( ! $enableselfrevapp && $usr -> getID () == $user -> getID ()) continue ;
2012-12-14 07:53:13 +00:00
$mandatory = false ;
foreach ( $res as $r ) if ( $r [ 'reviewerUserID' ] == $usr -> getID ()) $mandatory = true ;
2018-06-26 04:52:16 +00:00
$option = array ( $usr -> getID (), htmlspecialchars ( $usr -> getLogin () . " - " . $usr -> getFullName ()), null );
if ( $mandatory ) $option [] = array ( array ( 'disabled' , 'disabled' ));
$options [] = $option ;
2012-12-14 07:53:13 +00:00
}
2015-02-13 16:41:50 +00:00
$tmp = array ();
foreach ( $reviewStatus as $r ) {
2015-04-23 15:12:08 +00:00
if ( $r [ 'type' ] == 0 ) {
2018-06-26 04:52:16 +00:00
if ( $res ) {
2015-04-23 15:12:08 +00:00
$mandatory = false ;
foreach ( $res as $rr )
if ( $rr [ 'reviewerUserID' ] == $r [ 'required' ]) {
$mandatory = true ;
}
if ( ! $mandatory )
$tmp [] = $r [ 'required' ];
} else {
2015-02-13 16:41:50 +00:00
$tmp [] = $r [ 'required' ];
2015-04-23 15:12:08 +00:00
}
2015-02-13 16:41:50 +00:00
}
}
2018-06-27 20:13:38 +00:00
$fieldwrap = array ();
2015-02-13 16:41:50 +00:00
if ( $tmp ) {
2018-06-26 04:52:16 +00:00
$fieldwrap = array ( '' , $this -> getSelectPresetButtonHtml ( " IndReviewers " , $tmp ));
2015-02-13 16:41:50 +00:00
}
2018-06-27 20:13:38 +00:00
/* List all mandatory reviewers */
if ( $res ) {
$tmp = array ();
foreach ( $res as $r ) {
if ( $r [ 'reviewerUserID' ] > 0 ) {
$u = $dms -> getUser ( $r [ 'reviewerUserID' ]);
$tmp [] = htmlspecialchars ( $u -> getFullName () . ' (' . $u -> getLogin () . ')' );
}
}
if ( $tmp ) {
$fieldwrap [ 1 ] .= '<div class="mandatories"><span>' . getMLText ( 'mandatory_reviewers' ) . ':</span> ' . implode ( ', ' , $tmp ) . " </div> \n " ;
}
}
2018-06-26 04:52:16 +00:00
$this -> formField (
getMLText ( " individuals " ),
array (
'element' => 'select' ,
'name' => 'indReviewers[]' ,
'id' => 'IndReviewers' ,
'class' => 'chzn-select' ,
'attributes' => array ( array ( 'data-placeholder' , getMLText ( 'select_ind_reviewers' ))),
'multiple' => true ,
'options' => $options
),
array ( 'field_wrap' => $fieldwrap )
);
2014-03-03 13:46:16 +00:00
/* Check for mandatory reviewer without access */
foreach ( $res as $r ) {
if ( $r [ 'reviewerUserID' ]) {
$hasAccess = false ;
foreach ( $docAccess [ " users " ] as $usr ) {
if ( $r [ 'reviewerUserID' ] == $usr -> getID ())
$hasAccess = true ;
}
if ( ! $hasAccess ) {
$noAccessUser = $dms -> getUser ( $r [ 'reviewerUserID' ]);
2018-06-26 04:52:16 +00:00
$this -> warningMsg ( getMLText ( " mandatory_reviewer_no_access " , array ( 'user' => htmlspecialchars ( $noAccessUser -> getFullName () . " ( " . $noAccessUser -> getLogin () . " ) " ))));
2014-03-03 13:46:16 +00:00
}
}
}
2018-06-26 04:52:16 +00:00
$options = array ();
2012-12-14 07:53:13 +00:00
foreach ( $docAccess [ " groups " ] as $grp ) {
$mandatory = false ;
foreach ( $res as $r ) if ( $r [ 'reviewerGroupID' ] == $grp -> getID ()) $mandatory = true ;
2018-06-26 04:52:16 +00:00
$option = array ( $grp -> getID (), htmlspecialchars ( $grp -> getName ()), null );
if ( $mandatory || ! $grp -> getUsers ()) $option [] = array ( array ( 'disabled' , 'disabled' ));
$options [] = $option ;
2012-12-14 07:53:13 +00:00
}
2015-04-23 15:12:08 +00:00
$tmp = array ();
foreach ( $reviewStatus as $r ) {
if ( $r [ 'type' ] == 1 ) {
if ( $res ) {
$mandatory = false ;
foreach ( $res as $rr )
if ( $rr [ 'reviewerGroupID' ] == $r [ 'required' ]) {
$mandatory = true ;
}
if ( ! $mandatory )
$tmp [] = $r [ 'required' ];
} else {
$tmp [] = $r [ 'required' ];
}
}
}
2019-06-27 12:18:58 +00:00
$fieldwrap = array ( '' , '' );
2015-04-23 15:12:08 +00:00
if ( $tmp ) {
2018-06-26 04:52:16 +00:00
$fieldwrap = array ( '' , $this -> getSelectPresetButtonHtml ( " GrpReviewers " , $tmp ));
2015-04-23 15:12:08 +00:00
}
2018-06-27 20:13:38 +00:00
/* List all mandatory groups of reviewers */
if ( $res ) {
$tmp = array ();
foreach ( $res as $r ) {
if ( $r [ 'reviewerGroupID' ] > 0 ) {
$u = $dms -> getGroup ( $r [ 'reviewerGroupID' ]);
$tmp [] = htmlspecialchars ( $u -> getName ());
}
}
if ( $tmp ) {
$fieldwrap [ 1 ] .= '<div class="mandatories"><span>' . getMLText ( 'mandatory_reviewergroups' ) . ':</span> ' . implode ( ', ' , $tmp ) . " </div> \n " ;
}
}
2018-06-26 04:52:16 +00:00
$this -> formField (
getMLText ( " groups " ),
array (
'element' => 'select' ,
'name' => 'grpReviewers[]' ,
'id' => 'GrpReviewers' ,
'class' => 'chzn-select' ,
'attributes' => array ( array ( 'data-placeholder' , getMLText ( 'select_grp_reviewers' ))),
'multiple' => true ,
'options' => $options
),
array ( 'field_wrap' => $fieldwrap )
);
2014-03-03 13:46:16 +00:00
/* Check for mandatory reviewer group without access */
foreach ( $res as $r ) {
if ( $r [ 'reviewerGroupID' ]) {
$hasAccess = false ;
foreach ( $docAccess [ " groups " ] as $grp ) {
if ( $r [ 'reviewerGroupID' ] == $grp -> getID ())
$hasAccess = true ;
}
if ( ! $hasAccess ) {
$noAccessGroup = $dms -> getGroup ( $r [ 'reviewerGroupID' ]);
2018-06-26 04:52:16 +00:00
$this -> warningMsg ( getMLText ( " mandatory_reviewergroup_no_access " , array ( 'group' => htmlspecialchars ( $noAccessGroup -> getName ()))));
2014-03-03 13:46:16 +00:00
}
}
}
2018-06-26 04:52:16 +00:00
}
2012-12-14 07:53:13 +00:00
2018-06-26 04:52:16 +00:00
$this -> contentSubHeading ( getMLText ( " assign_approvers " ));
$options = array ();
$res = $user -> getMandatoryApprovers ();
foreach ( $docAccess [ " users " ] as $usr ) {
if ( ! $enableselfrevapp && $usr -> getID () == $user -> getID ()) continue ;
$mandatory = false ;
foreach ( $res as $r ) if ( $r [ 'approverUserID' ] == $usr -> getID ()) $mandatory = true ;
$option = array ( $usr -> getID (), htmlspecialchars ( $usr -> getLogin () . " - " . $usr -> getFullName ()), null );
if ( $mandatory ) $option [] = array ( array ( 'disabled' , 'disabled' ));
$options [] = $option ;
}
$tmp = array ();
foreach ( $approvalStatus as $r ) {
if ( $r [ 'type' ] == 0 ) {
if ( $res ) {
$mandatory = false ;
foreach ( $res as $rr )
if ( $rr [ 'approverUserID' ] == $r [ 'required' ]) {
$mandatory = true ;
}
if ( ! $mandatory )
2015-02-13 16:41:50 +00:00
$tmp [] = $r [ 'required' ];
2018-06-26 04:52:16 +00:00
} else {
$tmp [] = $r [ 'required' ];
2015-02-13 16:41:50 +00:00
}
}
2018-06-26 04:52:16 +00:00
}
2018-06-27 20:13:38 +00:00
$fieldwrap = array ();
2018-06-26 04:52:16 +00:00
if ( $tmp ) {
$fieldwrap = array ( '' , $this -> getSelectPresetButtonHtml ( " IndApprovers " , $tmp ));
}
2018-06-27 20:13:38 +00:00
/* List all mandatory approvers */
if ( $res ) {
$tmp = array ();
foreach ( $res as $r ) {
if ( $r [ 'approverUserID' ] > 0 ) {
$u = $dms -> getUser ( $r [ 'approverUserID' ]);
$tmp [] = htmlspecialchars ( $u -> getFullName () . ' (' . $u -> getLogin () . ')' );
}
}
if ( $tmp ) {
$fieldwrap [ 1 ] .= '<div class="mandatories"><span>' . getMLText ( 'mandatory_approvers' ) . ':</span> ' . implode ( ', ' , $tmp ) . " </div> \n " ;
}
}
2018-06-26 04:52:16 +00:00
$this -> formField (
getMLText ( " individuals " ),
array (
'element' => 'select' ,
'name' => 'indApprovers[]' ,
'id' => 'IndApprovers' ,
'class' => 'chzn-select' ,
'attributes' => array ( array ( 'data-placeholder' , getMLText ( 'select_ind_approvers' ))),
'multiple' => true ,
'options' => $options
),
array ( 'field_wrap' => $fieldwrap )
);
2014-03-03 13:46:16 +00:00
/* Check for mandatory approvers without access */
foreach ( $res as $r ) {
if ( $r [ 'approverUserID' ]) {
$hasAccess = false ;
foreach ( $docAccess [ " users " ] as $usr ) {
if ( $r [ 'approverUserID' ] == $usr -> getID ())
$hasAccess = true ;
}
if ( ! $hasAccess ) {
$noAccessUser = $dms -> getUser ( $r [ 'approverUserID' ]);
2018-06-26 04:52:16 +00:00
$this -> warningMsg ( getMLText ( " mandatory_approver_no_access " , array ( 'user' => htmlspecialchars ( $noAccessUser -> getFullName () . " ( " . $noAccessUser -> getLogin () . " ) " ))));
2014-03-03 13:46:16 +00:00
}
}
}
2018-06-26 04:52:16 +00:00
$options = array ();
2012-12-14 07:53:13 +00:00
foreach ( $docAccess [ " groups " ] as $grp ) {
$mandatory = false ;
foreach ( $res as $r ) if ( $r [ 'approverGroupID' ] == $grp -> getID ()) $mandatory = true ;
2018-06-26 04:52:16 +00:00
$option = array ( $grp -> getID (), htmlspecialchars ( $grp -> getName ()), null );
if ( $mandatory || ! $grp -> getUsers ()) $option [] = array ( array ( 'disabled' , 'disabled' ));
2012-12-14 07:53:13 +00:00
2018-06-26 04:52:16 +00:00
$options [] = $option ;
2012-12-14 07:53:13 +00:00
}
2015-02-13 16:41:50 +00:00
$tmp = array ();
foreach ( $approvalStatus as $r ) {
2015-04-23 15:12:08 +00:00
if ( $r [ 'type' ] == 1 ) {
if ( $res ) {
$mandatory = false ;
foreach ( $res as $rr )
if ( $rr [ 'approverGroupID' ] == $r [ 'required' ]) {
$mandatory = true ;
}
if ( ! $mandatory )
$tmp [] = $r [ 'required' ];
} else {
2015-02-13 16:41:50 +00:00
$tmp [] = $r [ 'required' ];
2015-04-23 15:12:08 +00:00
}
2015-02-13 16:41:50 +00:00
}
}
2019-06-27 12:18:58 +00:00
$fieldwrap = array ( '' , '' );
2015-02-13 16:41:50 +00:00
if ( $tmp ) {
2018-06-26 04:52:16 +00:00
$fieldwrap = array ( '' , $this -> getSelectPresetButtonHtml ( " GrpApprovers " , $tmp ));
2015-02-13 16:41:50 +00:00
}
2018-06-27 20:13:38 +00:00
/* List all mandatory groups of approvers */
if ( $res ) {
$tmp = array ();
foreach ( $res as $r ) {
if ( $r [ 'approverGroupID' ] > 0 ) {
$u = $dms -> getGroup ( $r [ 'approverGroupID' ]);
$tmp [] = htmlspecialchars ( $u -> getName ());
}
}
if ( $tmp ) {
$fieldwrap [ 1 ] .= '<div class="mandatories"><span>' . getMLText ( 'mandatory_approvergroups' ) . ':</span> ' . implode ( ', ' , $tmp ) . " </div> \n " ;
}
}
2018-06-26 04:52:16 +00:00
$this -> formField (
getMLText ( " groups " ),
array (
'element' => 'select' ,
'name' => 'grpApprovers[]' ,
'id' => 'GrpApprovers' ,
'class' => 'chzn-select' ,
'attributes' => array ( array ( 'data-placeholder' , getMLText ( 'select_grp_approvers' ))),
'multiple' => true ,
'options' => $options
),
array ( 'field_wrap' => $fieldwrap )
);
2014-03-03 13:46:16 +00:00
/* Check for mandatory approver groups without access */
foreach ( $res as $r ) {
if ( $r [ 'approverGroupID' ]) {
$hasAccess = false ;
foreach ( $docAccess [ " groups " ] as $grp ) {
if ( $r [ 'approverGroupID' ] == $grp -> getID ())
$hasAccess = true ;
}
if ( ! $hasAccess ) {
$noAccessGroup = $dms -> getGroup ( $r [ 'approverGroupID' ]);
2018-06-26 04:52:16 +00:00
$this -> warningMsg ( getMLText ( " mandatory_approvergroup_no_access " , array ( 'group' => htmlspecialchars ( $noAccessGroup -> getName ()))));
2014-03-03 13:46:16 +00:00
}
}
}
2018-06-26 04:52:16 +00:00
$this -> warningMsg ( getMLText ( " add_doc_reviewer_approver_warning " ));
}
$this -> formSubmit ( getMLText ( 'update_document' ));
2014-03-03 13:46:16 +00:00
?>
2012-12-14 07:53:13 +00:00
</ form >
< ? php
$this -> contentContainerEnd ();
2016-03-15 07:30:53 +00:00
$this -> contentEnd ();
2012-12-14 07:53:13 +00:00
$this -> htmlEndPage ();
} /* }}} */
}
?>