2010-05-03 10:43:32 +02:00
< ? php
2014-08-28 15:52:20 +02:00
/* Copyright ( C ) 2008 - 2013 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2010 - 2014 Regis Houssin < regis . houssin @ inodbox . com >
2016-03-23 22:45:04 +01:00
* Copyright ( C ) 2010 - 2016 Juanjo Menent < jmenent @ 2 byte . es >
2014-08-28 15:52:20 +02:00
* Copyright ( C ) 2013 Charles - Fr BENKE < charles . fr @ benke . fr >
* Copyright ( C ) 2013 Cédric Salvador < csalvador @ gpcsolutions . fr >
* Copyright ( C ) 2014 Marcos García < marcosgdf @ gmail . com >
2015-05-12 09:53:09 +02:00
* Copyright ( C ) 2015 Bahfir Abbes < bafbes @ gmail . com >
2017-12-07 18:44:33 +01:00
* Copyright ( C ) 2016 - 2017 Ferran Marcet < fmarcet @ 2 byte . es >
2019-02-23 16:52:26 +01:00
* Copyright ( C ) 2019 Frédéric France < frederic . france @ netlogic . fr >
*
2010-05-03 10:43:32 +02:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2010-05-03 10:43:32 +02:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2010-05-03 10:43:32 +02:00
*/
/**
2010-06-08 01:52:43 +02:00
* \file htdocs / core / class / html . formfile . class . php
2010-11-22 10:18:53 +01:00
* \ingroup core
2010-10-30 12:09:04 +02:00
* \brief File of class to offer components to list and upload files
2010-05-03 10:43:32 +02:00
*/
/**
2012-01-27 15:17:36 +01:00
* Class to offer components to list and upload files
2010-05-03 10:43:32 +02:00
*/
class FormFile
{
2017-10-16 08:47:05 +02:00
private $db ;
2017-06-10 13:44:20 +02:00
2018-08-23 11:34:55 +02:00
/**
* @ var string Error code ( or message )
*/
2017-10-16 08:47:05 +02:00
public $error ;
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
public $numoffiles ;
2019-11-12 09:46:08 +01:00
public $infofiles ; // Used to return informations by function getDocumentsLink
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
/**
2011-09-11 20:35:38 +02:00
* Constructor
*
2011-12-19 23:38:40 +01:00
* @ param DoliDB $db Database handler
2017-10-16 08:47:05 +02:00
*/
2019-02-27 20:45:07 +01:00
public function __construct ( $db )
2017-10-16 08:47:05 +02:00
{
$this -> db = $db ;
2019-11-12 09:46:08 +01:00
$this -> numoffiles = 0 ;
2017-10-16 08:47:05 +02:00
}
2011-08-16 11:36:00 +02:00
2019-02-27 20:45:07 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2017-10-16 08:47:05 +02:00
/**
2017-11-18 15:41:30 +01:00
* Show form to upload a new file .
2011-10-19 22:05:54 +02:00
*
2017-10-16 08:47:05 +02:00
* @ param string $url Url
* @ param string $title Title zone ( Title or '' or 'none' )
2017-11-18 15:41:30 +01:00
* @ param int $addcancel 1 = Add 'Cancel' button
* @ param int $sectionid If upload must be done inside a particular ECM section ( is sectionid defined , sectiondir must not be )
* @ param int $perm Value of permission to allow upload
2019-02-24 08:50:35 +01:00
* @ param int $size Length of input file area . Deprecated .
2017-10-16 08:47:05 +02:00
* @ param Object $object Object to use ( when attachment is done on an element )
* @ param string $options Add an option column
2019-02-27 20:45:07 +01:00
* @ param integer $useajax Use fileupload ajax ( 0 = never , 1 = if enabled , 2 = always whatever is option ) .
2019-02-24 08:50:35 +01:00
* Deprecated 2 should never be used and if 1 is used , option should no be enabled .
* @ param string $savingdocmask Mask to use to define output filename . For example 'XXXXX-__YYYYMMDD__-__file__'
2017-10-16 08:47:05 +02:00
* @ param integer $linkfiles 1 = Also add form to link files , 0 = Do not show form to link files
* @ param string $htmlname Name and id of HTML form ( 'formuserfile' by default , 'formuserfileecm' when used to upload a file in ECM )
* @ param string $accept Specifies the types of files accepted ( This is not a security check but an user interface facility . eg '.pdf,image/*' or '.png,.jpg' or 'video/*' )
2020-04-17 13:10:18 +02:00
* @ param string $sectiondir If upload must be done inside a particular directory ( if sectiondir defined , sectionid must not be )
2019-03-07 20:53:03 +01:00
* @ param int $usewithoutform 0 = Default , 1 = Disable < form > and style to use in existing area
2020-05-10 15:08:01 +02:00
* @ param int $capture 1 = Add tag capture = " capture " to force use of micro or video recording to generate file . When setting this to 1 , you must also provide a value for $accept .
2017-11-18 15:41:30 +01:00
* @ return int < 0 if KO , > 0 if OK
2017-10-16 08:47:05 +02:00
*/
2020-05-10 15:08:01 +02:00
public function form_attach_new_file ( $url , $title = '' , $addcancel = 0 , $sectionid = 0 , $perm = 1 , $size = 50 , $object = '' , $options = '' , $useajax = 1 , $savingdocmask = '' , $linkfiles = 1 , $htmlname = 'formuserfile' , $accept = '' , $sectiondir = '' , $usewithoutform = 0 , $capture = 0 )
2017-10-16 08:47:05 +02:00
{
2018-09-04 22:52:55 +02:00
// phpcs:enable
2019-11-12 09:46:08 +01:00
global $conf , $langs , $hookmanager ;
2017-10-16 08:47:05 +02:00
$hookmanager -> initHooks ( array ( 'formfile' ));
2019-02-24 08:50:35 +01:00
// Deprecation warning
if ( $useajax == 2 ) {
2019-11-12 09:46:08 +01:00
dol_syslog ( __METHOD__ . " : using 2 for useajax is deprecated and should be not used " , LOG_WARNING );
2019-02-24 08:50:35 +01:00
}
2017-10-16 08:47:05 +02:00
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> browser -> layout ) && $conf -> browser -> layout != 'classic' ) $useajax = 0 ;
2013-04-03 18:37:54 +02:00
2019-11-12 09:46:08 +01:00
if (( ! empty ( $conf -> global -> MAIN_USE_JQUERY_FILEUPLOAD ) && $useajax ) || ( $useajax == 2 ))
2017-10-16 08:47:05 +02:00
{
// TODO: Check this works with 2 forms on same page
// TODO: Check this works with GED module, otherwise, force useajax to 0
// TODO: This does not support option savingdocmask
// TODO: This break feature to upload links too
return $this -> _formAjaxFileUpload ( $object );
}
else
{
//If there is no permission and the option to hide unauthorized actions is enabled, then nothing is printed
if ( ! $perm && ! empty ( $conf -> global -> MAIN_BUTTON_HIDE_UNAUTHORIZED )) {
return 1 ;
}
2017-05-10 15:01:27 +02:00
2020-04-13 04:14:28 +02:00
$out = " \n \n " . '<!-- Start form attach new file --><div class="formattachnewfile">' . " \n " ;
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
if ( empty ( $title )) $title = $langs -> trans ( " AttachANewFile " );
if ( $title != 'none' ) $out .= load_fiche_titre ( $title , null , null );
2013-11-01 17:36:22 +01:00
2019-10-10 16:46:50 +02:00
if ( empty ( $usewithoutform )) // Try to avoid this and set instead the form by the caller.
2019-03-07 20:53:03 +01:00
{
$out .= '<form name="' . $htmlname . '" id="' . $htmlname . '" action="' . $url . '" enctype="multipart/form-data" method="POST">' ;
2019-12-01 10:20:11 +01:00
$out .= '<input type="hidden" name="token" value="' . newToken () . '">' ;
2019-03-07 20:53:03 +01:00
$out .= '<input type="hidden" id="' . $htmlname . '_section_dir" name="section_dir" value="' . $sectiondir . '">' ;
$out .= '<input type="hidden" id="' . $htmlname . '_section_id" name="section_id" value="' . $sectionid . '">' ;
2019-10-10 16:41:24 +02:00
$out .= '<input type="hidden" name="sortfield" value="' . GETPOST ( 'sortfield' , 'alpha' ) . '">' ;
$out .= '<input type="hidden" name="sortorder" value="' . GETPOST ( 'sortorder' , 'aZ09' ) . '">' ;
2019-03-07 20:53:03 +01:00
}
2017-10-16 08:47:05 +02:00
2020-03-17 01:31:48 +01:00
$out .= '<table class="nobordernopadding cenpercent">' ;
2017-10-16 08:47:05 +02:00
$out .= '<tr>' ;
2019-11-12 09:46:08 +01:00
if ( ! empty ( $options )) $out .= '<td>' . $options . '</td>' ;
2017-10-16 08:47:05 +02:00
2018-01-02 17:27:05 +01:00
$out .= '<td class="valignmiddle nowrap">' ;
2017-10-16 08:47:05 +02:00
2019-11-12 09:46:08 +01:00
$max = $conf -> global -> MAIN_UPLOAD_DOC ; // In Kb
$maxphp = @ ini_get ( 'upload_max_filesize' ); // In unknown
if ( preg_match ( '/k$/i' , $maxphp )) $maxphp = $maxphp * 1 ;
if ( preg_match ( '/m$/i' , $maxphp )) $maxphp = $maxphp * 1024 ;
if ( preg_match ( '/g$/i' , $maxphp )) $maxphp = $maxphp * 1024 * 1024 ;
if ( preg_match ( '/t$/i' , $maxphp )) $maxphp = $maxphp * 1024 * 1024 * 1024 ;
$maxphp2 = @ ini_get ( 'post_max_size' ); // In unknown
if ( preg_match ( '/k$/i' , $maxphp2 )) $maxphp2 = $maxphp2 * 1 ;
if ( preg_match ( '/m$/i' , $maxphp2 )) $maxphp2 = $maxphp2 * 1024 ;
if ( preg_match ( '/g$/i' , $maxphp2 )) $maxphp2 = $maxphp2 * 1024 * 1024 ;
if ( preg_match ( '/t$/i' , $maxphp2 )) $maxphp2 = $maxphp2 * 1024 * 1024 * 1024 ;
2019-07-20 13:09:25 +02:00
// Now $max and $maxphp and $maxphp2 are in Kb
2018-09-20 16:21:08 +02:00
$maxmin = $max ;
2019-07-20 13:09:25 +02:00
$maxphptoshow = $maxphptoshowparam = '' ;
if ( $maxphp > 0 )
{
2019-11-12 09:46:08 +01:00
$maxmin = min ( $max , $maxphp );
2019-07-20 13:09:25 +02:00
$maxphptoshow = $maxphp ;
$maxphptoshowparam = 'upload_max_filesize' ;
}
if ( $maxphp2 > 0 )
{
2019-11-12 09:46:08 +01:00
$maxmin = min ( $max , $maxphp2 );
2019-07-20 13:09:25 +02:00
if ( $maxphp2 < $maxphp )
{
$maxphptoshow = $maxphp2 ;
$maxphptoshowparam = 'post_max_size' ;
}
}
2017-10-16 08:47:05 +02:00
2018-09-20 16:21:08 +02:00
if ( $maxmin > 0 )
2017-10-16 08:47:05 +02:00
{
2018-11-06 17:40:59 +01:00
// MAX_FILE_SIZE doit précéder le champ input de type file
2019-11-12 09:46:08 +01:00
$out .= '<input type="hidden" name="max_file_size" value="' . ( $maxmin * 1024 ) . '">' ;
2017-10-16 08:47:05 +02:00
}
2020-03-17 01:31:48 +01:00
$out .= '<input class="flat minwidth400 maxwidth200onsmartphone" type="file"' ;
2020-06-05 13:41:33 +02:00
//$out .= ((!empty($conf->global->MAIN_DISABLE_MULTIPLE_FILEUPLOAD) || $conf->browser->layout != 'classic') ? ' name="userfile"' : ' name="userfile[]" multiple');
$out .= (( ! empty ( $conf -> global -> MAIN_DISABLE_MULTIPLE_FILEUPLOAD )) ? ' name="userfile"' : ' name="userfile[]" multiple' );
2019-11-12 09:46:08 +01:00
$out .= ( empty ( $conf -> global -> MAIN_UPLOAD_DOC ) || empty ( $perm ) ? ' disabled' : '' );
$out .= ( ! empty ( $accept ) ? ' accept="' . $accept . '"' : ' accept=""' );
2020-05-10 15:08:01 +02:00
$out .= ( ! empty ( $capture ) ? ' capture="capture"' : '' );
2017-10-16 08:47:05 +02:00
$out .= '>' ;
$out .= ' ' ;
2020-04-17 13:10:18 +02:00
if ( $sectionid ) { // Show overwrite if exists for ECM module only
$langs -> load ( 'link' );
$out .= '<input style="margin-right: 2px;" type="checkbox" id="overwritefile" name="overwritefile" value="1"><label for="overwritefile">' . $langs -> trans ( " OverwriteIfExists " ) . '</label>' ;
}
2019-03-15 15:07:52 +01:00
$out .= '<input type="submit" class="button reposition" name="sendit" value="' . $langs -> trans ( " Upload " ) . '"' ;
2019-11-12 09:46:08 +01:00
$out .= ( empty ( $conf -> global -> MAIN_UPLOAD_DOC ) || empty ( $perm ) ? ' disabled' : '' );
2017-10-16 08:47:05 +02:00
$out .= '>' ;
if ( $addcancel )
{
$out .= ' ' ;
$out .= '<input type="submit" class="button" name="cancel" value="' . $langs -> trans ( " Cancel " ) . '">' ;
}
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> global -> MAIN_UPLOAD_DOC ))
2017-10-16 08:47:05 +02:00
{
if ( $perm )
{
$langs -> load ( 'other' );
$out .= ' ' ;
2019-07-20 13:09:25 +02:00
$out .= info_admin ( $langs -> trans ( " ThisLimitIsDefinedInSetup " , $max , $maxphptoshow ), 1 );
2017-10-16 08:47:05 +02:00
}
}
else
{
$out .= ' (' . $langs -> trans ( " UploadDisabled " ) . ')' ;
}
$out .= " </td></tr> " ;
if ( $savingdocmask )
2019-02-27 11:17:33 +01:00
{
//add a global variable for disable the auto renaming on upload
2019-11-12 09:46:08 +01:00
$rename = ( empty ( $conf -> global -> MAIN_DOC_UPLOAD_NOT_RENAME_BY_DEFAULT ) ? 'checked' : '' );
2019-02-28 23:19:58 +01:00
2019-02-27 11:17:33 +01:00
$out .= '<tr>' ;
2019-11-12 09:46:08 +01:00
if ( ! empty ( $options )) $out .= '<td>' . $options . '</td>' ;
2019-02-27 11:17:33 +01:00
$out .= '<td valign="middle" class="nowrap">' ;
2019-02-28 23:19:58 +01:00
$out .= '<input type="checkbox" ' . $rename . ' class="savingdocmask" name="savingdocmask" value="' . dol_escape_js ( $savingdocmask ) . '"> ' . $langs -> trans ( " SaveUploadedFileWithMask " , preg_replace ( '/__file__/' , $langs -> transnoentitiesnoconv ( " OriginFileName " ), $savingdocmask ), $langs -> transnoentitiesnoconv ( " OriginFileName " ));
2019-02-27 11:17:33 +01:00
$out .= '</td>' ;
$out .= '</tr>' ;
}
2013-11-01 17:36:22 +01:00
2017-10-16 08:47:05 +02:00
$out .= " </table> " ;
2011-08-16 11:36:00 +02:00
2019-03-07 20:53:03 +01:00
if ( empty ( $usewithoutform ))
{
$out .= '</form>' ;
if ( empty ( $sectionid )) $out .= '<br>' ;
}
2011-08-16 11:36:00 +02:00
2020-04-13 04:14:28 +02:00
$out .= " \n </div><!-- End form attach new file --> \n " ;
2013-07-29 14:22:19 +02:00
2017-10-16 08:47:05 +02:00
if ( $linkfiles )
{
2020-04-13 04:14:28 +02:00
$out .= " \n " . '<!-- Start form link new url --><div class="formlinknewurl">' . " \n " ;
2017-10-16 08:47:05 +02:00
$langs -> load ( 'link' );
$title = $langs -> trans ( " LinkANewFile " );
$out .= load_fiche_titre ( $title , null , null );
2019-03-07 20:53:03 +01:00
if ( empty ( $usewithoutform ))
{
2019-10-21 15:49:08 +02:00
$out .= '<form name="' . $htmlname . '_link" id="' . $htmlname . '_link" action="' . $url . '" method="POST">' . " \n " ;
2019-12-01 10:20:11 +01:00
$out .= '<input type="hidden" name="token" value="' . newToken () . '">' . " \n " ;
2019-10-21 15:49:08 +02:00
$out .= '<input type="hidden" id="' . $htmlname . '_link_section_dir" name="link_section_dir" value="">' . " \n " ;
$out .= '<input type="hidden" id="' . $htmlname . '_link_section_id" name="link_section_id" value="' . $sectionid . '">' . " \n " ;
2019-03-07 20:53:03 +01:00
}
$out .= '<div class="valignmiddle">' ;
2017-10-16 08:47:05 +02:00
$out .= '<div class="inline-block" style="padding-right: 10px;">' ;
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> global -> OPTIMIZEFORTEXTBROWSER )) $out .= '<label for="link">' . $langs -> trans ( " URLToLink " ) . ':</label> ' ;
2017-10-16 08:47:05 +02:00
$out .= '<input type="text" name="link" class="flat minwidth400imp" id="link" placeholder="' . dol_escape_htmltag ( $langs -> trans ( " URLToLink " )) . '">' ;
$out .= '</div>' ;
$out .= '<div class="inline-block" style="padding-right: 10px;">' ;
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> global -> OPTIMIZEFORTEXTBROWSER )) $out .= '<label for="label">' . $langs -> trans ( " Label " ) . ':</label> ' ;
2017-10-16 08:47:05 +02:00
$out .= '<input type="text" class="flat" name="label" id="label" placeholder="' . dol_escape_htmltag ( $langs -> trans ( " Label " )) . '">' ;
2019-11-12 09:46:08 +01:00
$out .= '<input type="hidden" name="objecttype" value="' . $object -> element . '">' ;
$out .= '<input type="hidden" name="objectid" value="' . $object -> id . '">' ;
2017-10-16 08:47:05 +02:00
$out .= '</div>' ;
$out .= '<div class="inline-block" style="padding-right: 10px;">' ;
$out .= '<input type="submit" class="button" name="linkit" value="' . $langs -> trans ( " ToLink " ) . '"' ;
2019-11-12 09:46:08 +01:00
$out .= ( empty ( $conf -> global -> MAIN_UPLOAD_DOC ) || empty ( $perm ) ? ' disabled' : '' );
2017-10-16 08:47:05 +02:00
$out .= '>' ;
$out .= '</div>' ;
$out .= '</div>' ;
2019-03-07 20:53:03 +01:00
if ( empty ( $usewithoutform ))
{
$out .= '<div class="clearboth"></div>' ;
$out .= '</form><br>' ;
}
2017-10-16 08:47:05 +02:00
2020-04-13 04:14:28 +02:00
$out .= " \n </div><!-- End form link new url --> \n " ;
2017-10-16 08:47:05 +02:00
}
2013-07-29 14:22:19 +02:00
2019-11-12 09:46:08 +01:00
$parameters = array ( 'socid' => ( isset ( $GLOBALS [ 'socid' ]) ? $GLOBALS [ 'socid' ] : '' ), 'id' => ( isset ( $GLOBALS [ 'id' ]) ? $GLOBALS [ 'id' ] : '' ), 'url' => $url , 'perm' => $perm );
2019-01-27 11:55:16 +01:00
$res = $hookmanager -> executeHooks ( 'formattachOptions' , $parameters , $object );
2017-10-16 08:47:05 +02:00
if ( empty ( $res ))
{
2019-11-12 09:46:08 +01:00
print '<div class="' . ( $usewithoutform ? 'inline-block valignmiddle' : 'attacharea attacharea' . $htmlname ) . '">' ;
2017-10-16 08:47:05 +02:00
print $out ;
print '</div>' ;
}
print $hookmanager -> resPrint ;
2013-11-07 02:56:56 +01:00
2017-10-16 08:47:05 +02:00
return 1 ;
}
}
2019-02-27 20:45:07 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2017-10-16 08:47:05 +02:00
/**
* Show the box with list of available documents for object
*
* @ param string $modulepart propal , facture , facture_fourn , ...
* @ param string $modulesubdir Sub - directory to scan ( Example : '0/1/10' , 'FA/DD/MM/YY/9999' ) . Use '' if file is not into subdir of module .
* @ param string $filedir Directory to scan
* @ param string $urlsource Url of origin page ( for return )
* @ param int $genallowed Generation is allowed ( 1 / 0 or array of formats )
* @ param int $delallowed Remove is allowed ( 1 / 0 )
* @ param string $modelselected Model to preselect by default
* @ param integer $allowgenifempty Show warning if no model activated
* @ param integer $forcenomultilang Do not show language option ( even if MAIN_MULTILANGS defined )
* @ param int $iconPDF Show only PDF icon with link ( 1 / 0 )
* @ param int $notused Not used
* @ param integer $noform Do not output html form tags
* @ param string $param More param on http links
* @ param string $title Title to show on top of form
* @ param string $buttonlabel Label on submit button
* @ param string $codelang Default language code to use on lang combo box if multilang is enabled
* @ return int < 0 if KO , number of shown files if OK
* @ deprecated Use print xxx -> showdocuments () instead .
*/
2019-02-27 20:45:07 +01:00
public function show_documents ( $modulepart , $modulesubdir , $filedir , $urlsource , $genallowed , $delallowed = 0 , $modelselected = '' , $allowgenifempty = 1 , $forcenomultilang = 0 , $iconPDF = 0 , $notused = 0 , $noform = 0 , $param = '' , $title = '' , $buttonlabel = '' , $codelang = '' )
2017-10-16 08:47:05 +02:00
{
2018-09-04 22:52:55 +02:00
// phpcs:enable
2019-11-12 09:46:08 +01:00
$this -> numoffiles = 0 ;
2019-01-27 11:55:16 +01:00
print $this -> showdocuments ( $modulepart , $modulesubdir , $filedir , $urlsource , $genallowed , $delallowed , $modelselected , $allowgenifempty , $forcenomultilang , $iconPDF , $notused , $noform , $param , $title , $buttonlabel , $codelang );
2017-10-16 08:47:05 +02:00
return $this -> numoffiles ;
}
/**
* Return a string to show the box with list of available documents for object .
* This also set the property $this -> numoffiles
*
2019-05-08 17:31:50 +02:00
* @ param string $modulepart Module the files are related to ( 'propal' , 'facture' , 'facture_fourn' , 'mymodule' , 'mymodule:nameofsubmodule' , 'mymodule_temp' , ... )
2017-10-16 08:47:05 +02:00
* @ param string $modulesubdir Existing ( so sanitized ) sub - directory to scan ( Example : '0/1/10' , 'FA/DD/MM/YY/9999' ) . Use '' if file is not into subdir of module .
* @ param string $filedir Directory to scan
* @ param string $urlsource Url of origin page ( for return )
2019-02-23 16:52:26 +01:00
* @ param int | string [] $genallowed Generation is allowed ( 1 / 0 or array list of templates )
2017-10-16 08:47:05 +02:00
* @ param int $delallowed Remove is allowed ( 1 / 0 )
* @ param string $modelselected Model to preselect by default
* @ param integer $allowgenifempty Allow generation even if list of template ( $genallowed ) is empty ( show however a warning )
* @ param integer $forcenomultilang Do not show language option ( even if MAIN_MULTILANGS defined )
* @ param int $iconPDF Deprecated , see getDocumentsLink
* @ param int $notused Not used
* @ param integer $noform Do not output html form tags
* @ param string $param More param on http links
2020-02-11 10:38:09 +01:00
* @ param string $title Title to show on top of form . Example : '' ( Default to " Documents " ) or 'none'
2017-10-16 08:47:05 +02:00
* @ param string $buttonlabel Label on submit button
* @ param string $codelang Default language code to use on lang combo box if multilang is enabled
* @ param string $morepicto Add more HTML content into cell with picto
* @ param Object $object Object when method is called from an object card .
2018-02-21 11:02:45 +01:00
* @ param int $hideifempty Hide section of generated files if there is no file
2020-04-08 10:24:32 +02:00
* @ param string $removeaction ( optional ) The action to remove a file
2017-10-16 08:47:05 +02:00
* @ return string Output string with HTML array of documents ( might be empty string )
*/
2020-04-08 10:24:32 +02:00
public function showdocuments ( $modulepart , $modulesubdir , $filedir , $urlsource , $genallowed , $delallowed = 0 , $modelselected = '' , $allowgenifempty = 1 , $forcenomultilang = 0 , $iconPDF = 0 , $notused = 0 , $noform = 0 , $param = '' , $title = '' , $buttonlabel = '' , $codelang = '' , $morepicto = '' , $object = null , $hideifempty = 0 , $removeaction = 'remove_file' )
2017-10-16 08:47:05 +02:00
{
2015-04-23 23:21:06 +02:00
// Deprecation warning
2019-11-12 09:46:08 +01:00
if ( ! empty ( $iconPDF )) {
dol_syslog ( __METHOD__ . " : passing iconPDF parameter is deprecated " , LOG_WARNING );
2015-04-23 23:21:06 +02:00
}
2017-01-15 12:09:26 +01:00
2017-10-16 08:47:05 +02:00
global $langs , $conf , $user , $hookmanager ;
2018-02-21 11:02:45 +01:00
global $form ;
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
if ( ! is_object ( $form )) $form = new Form ( $this -> db );
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
// For backward compatibility
2019-11-12 09:46:08 +01:00
if ( ! empty ( $iconPDF )) {
2017-10-16 08:47:05 +02:00
return $this -> getDocumentsLink ( $modulepart , $modulesubdir , $filedir );
}
2013-06-16 20:08:45 +02:00
2018-12-21 11:23:44 +01:00
// Add entity in $param if not already exists
if ( ! preg_match ( '/entity\=[0-9]+/' , $param )) {
2020-08-17 19:54:23 +02:00
$param .= ( $param ? '&' : '' ) . 'entity=' . ( ! empty ( $object -> entity ) ? $object -> entity : $conf -> entity );
2018-12-21 11:23:44 +01:00
}
2018-02-25 17:43:19 +01:00
2019-11-12 09:46:08 +01:00
$printer = 0 ;
2019-05-08 17:31:50 +02:00
if ( in_array ( $modulepart , array ( 'facture' , 'supplier_proposal' , 'propal' , 'proposal' , 'order' , 'commande' , 'expedition' , 'commande_fournisseur' , 'expensereport' , 'livraison' , 'ticket' ))) // The direct print feature is implemented only for such elements
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$printer = ( ! empty ( $user -> rights -> printing -> read ) && ! empty ( $conf -> printing -> enabled )) ? true : false ;
2017-10-16 08:47:05 +02:00
}
2017-01-15 12:09:26 +01:00
2017-10-16 08:47:05 +02:00
$hookmanager -> initHooks ( array ( 'formfile' ));
2014-12-07 18:24:45 +01:00
2018-02-21 11:02:45 +01:00
// Get list of files
2019-11-12 09:46:08 +01:00
$file_list = null ;
if ( ! empty ( $filedir ))
2018-02-21 11:02:45 +01:00
{
2019-11-12 09:46:08 +01:00
$file_list = dol_dir_list ( $filedir , 'files' , 0 , '' , '(\.meta|_preview.*.*\.png)$' , 'date' , SORT_DESC );
2018-02-21 11:02:45 +01:00
}
if ( $hideifempty && empty ( $file_list )) return '' ;
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
$out = '' ;
$forname = 'builddoc' ;
$headershown = 0 ;
$showempty = 0 ;
$i = 0 ;
2010-05-03 10:43:32 +02:00
2019-11-12 09:46:08 +01:00
$out .= " \n " . '<!-- Start show_document -->' . " \n " ;
2017-10-16 08:47:05 +02:00
//print 'filedir='.$filedir;
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
if ( preg_match ( '/massfilesarea_/' , $modulepart ))
{
2019-11-12 09:46:08 +01:00
$out .= '<div id="show_files"><br></div>' . " \n " ;
$title = $langs -> trans ( " MassFilesArea " ) . ' <a href="" id="togglemassfilesarea" ref="shown">(' . $langs -> trans ( " Hide " ) . ')</a>' ;
$title .= ' < script >
2016-10-28 12:00:30 +02:00
jQuery ( document ) . ready ( function () {
jQuery ( \ ' #togglemassfilesarea\').click(function() {
if ( jQuery ( \ ' #togglemassfilesarea\').attr(\'ref\') == "shown")
{
jQuery ( \ '#' . $modulepart . ' _table\ ' ) . hide ();
jQuery ( \ ' #togglemassfilesarea\').attr("ref", "hidden");
jQuery ( \ '#togglemassfilesarea\').text("(' . dol_escape_js ( $langs -> trans ( " Show " )) . ' ) " );
}
else
{
jQuery ( \ '#' . $modulepart . ' _table\ ' ) . show ();
jQuery ( \ ' #togglemassfilesarea\').attr("ref","shown");
jQuery ( \ '#togglemassfilesarea\').text("(' . dol_escape_js ( $langs -> trans ( " Hide " )) . ' ) " );
}
return false ;
2017-06-10 13:44:20 +02:00
});
2016-10-28 12:00:30 +02:00
});
</ script > ' ;
2017-10-16 08:47:05 +02:00
}
2017-06-10 13:44:20 +02:00
2019-11-12 09:46:08 +01:00
$titletoshow = $langs -> trans ( " Documents " );
2020-02-11 10:38:09 +01:00
if ( ! empty ( $title )) $titletoshow = ( $title == 'none' ? '' : $title );
2017-04-09 13:12:25 +02:00
2017-10-16 08:47:05 +02:00
// Show table
if ( $genallowed )
{
2019-11-12 09:46:08 +01:00
$modellist = array ();
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
if ( $modulepart == 'company' )
{
2019-11-12 09:46:08 +01:00
$showempty = 1 ;
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/societe/modules_societe.class.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModeleThirdPartyDoc :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'propal' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/propale/modules_propale.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFPropales :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'supplier_proposal' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/supplier_proposal/modules_supplier_proposal.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFSupplierProposal :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'commande' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/commande/modules_commande.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFCommandes :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'expedition' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/expedition/modules_expedition.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFExpedition :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2018-10-05 16:21:50 +02:00
elseif ( $modulepart == 'reception' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2018-10-05 16:21:50 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/reception/modules_reception.php' ;
$modellist = ModelePdfReception :: liste_modeles ( $this -> db );
}
}
2017-10-16 08:47:05 +02:00
elseif ( $modulepart == 'livraison' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/livraison/modules_livraison.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFDeliveryOrder :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'ficheinter' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/fichinter/modules_fichinter.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFFicheinter :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'facture' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/facture/modules_facture.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFFactures :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'contract' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/contract/modules_contract.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFContract :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'project' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/project/modules_project.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFProjects :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'project_task' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/project/task/modules_task.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFTask :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'product' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/product/modules_product.class.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFProduct :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2018-04-12 15:10:37 +02:00
elseif ( $modulepart == 'product_batch' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2018-04-12 15:10:37 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/product_batch/modules_product_batch.class.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFProductBatch :: liste_modeles ( $this -> db );
2018-04-12 15:10:37 +02:00
}
}
2018-05-22 02:09:52 +02:00
elseif ( $modulepart == 'stock' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2018-05-22 02:09:52 +02:00
else
{
2018-05-25 11:19:38 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/modules/stock/modules_stock.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFStock :: liste_modeles ( $this -> db );
2018-05-22 02:09:52 +02:00
}
}
2018-05-25 11:19:38 +02:00
elseif ( $modulepart == 'movement' )
2018-05-22 02:09:52 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2018-05-22 02:09:52 +02:00
else
{
2018-05-25 11:19:38 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/modules/stock/modules_movement.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFMovement :: liste_modeles ( $this -> db );
2018-05-22 02:09:52 +02:00
}
}
2017-10-16 08:47:05 +02:00
elseif ( $modulepart == 'export' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/export/modules_export.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModeleExports :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'commande_fournisseur' || $modulepart == 'supplier_order' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/supplier_order/modules_commandefournisseur.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFSuppliersOrders :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'facture_fournisseur' || $modulepart == 'supplier_invoice' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/supplier_invoice/modules_facturefournisseur.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFSuppliersInvoices :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'supplier_payment' )
2017-02-10 17:28:00 +01:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/supplier_payment/modules_supplier_payment.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFSuppliersPayments :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2017-02-10 17:28:00 +01:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'remisecheque' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
2015-02-21 12:57:17 +01:00
{
2017-10-16 08:47:05 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/modules/cheque/modules_chequereceipts.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModeleChequeReceipts :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'donation' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
2015-02-21 12:57:17 +01:00
{
2017-10-16 08:47:05 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/modules/dons/modules_don.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModeleDon :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'member' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/member/modules_cards.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFCards :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2018-05-18 11:52:48 +02:00
elseif ( $modulepart == 'agenda' || $modulepart == 'actions' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/action/modules_action.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModeleAction :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'expensereport' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/expensereport/modules_expensereport.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModeleExpenseReport :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'unpaid' )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$modellist = '' ;
2017-10-16 08:47:05 +02:00
}
elseif ( $modulepart == 'user' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/user/modules_user.class.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFUser :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
elseif ( $modulepart == 'usergroup' )
{
2019-11-12 09:46:08 +01:00
if ( is_array ( $genallowed )) $modellist = $genallowed ;
2017-10-16 08:47:05 +02:00
else
{
include_once DOL_DOCUMENT_ROOT . '/core/modules/usergroup/modules_usergroup.class.php' ;
2019-11-12 09:46:08 +01:00
$modellist = ModelePDFUserGroup :: liste_modeles ( $this -> db );
2017-10-16 08:47:05 +02:00
}
}
2018-05-18 11:52:48 +02:00
else
2017-10-16 08:47:05 +02:00
{
2019-05-08 17:31:50 +02:00
$submodulepart = $modulepart ;
2019-05-10 19:38:08 +02:00
2020-06-01 16:44:22 +02:00
// modulepart = 'nameofmodule' or 'nameofmodule:NameOfObject'
2019-11-12 09:46:08 +01:00
$tmp = explode ( ':' , $modulepart );
if ( ! empty ( $tmp [ 1 ])) {
$modulepart = $tmp [ 0 ];
$submodulepart = $tmp [ 1 ];
2019-11-04 14:13:36 +01:00
}
// For normalized standard modules
2020-06-01 16:44:22 +02:00
$file = dol_buildpath ( '/core/modules/' . $modulepart . '/modules_' . strtolower ( $submodulepart ) . '.php' , 0 );
2017-10-16 08:47:05 +02:00
if ( file_exists ( $file ))
{
2019-11-12 09:46:08 +01:00
$res = include_once $file ;
2017-10-16 08:47:05 +02:00
}
2019-11-04 14:13:36 +01:00
// For normalized external modules.
2020-06-01 16:44:22 +02:00
else {
$file = dol_buildpath ( '/' . $modulepart . '/core/modules/' . $modulepart . '/modules_' . strtolower ( $submodulepart ) . '.php' , 0 );
2019-11-12 09:46:08 +01:00
$res = include_once $file ;
2017-10-16 08:47:05 +02:00
}
2020-06-01 16:44:22 +02:00
$class = 'ModelePDF' . $submodulepart ;
2019-11-04 14:13:36 +01:00
2017-10-16 08:47:05 +02:00
if ( class_exists ( $class ))
{
2019-11-12 09:46:08 +01:00
$modellist = call_user_func ( $class . '::liste_modeles' , $this -> db );
2017-10-16 08:47:05 +02:00
}
else
2018-05-24 12:16:04 +02:00
{
2019-10-31 02:36:16 +01:00
dol_print_error ( $this -> db , " Bad value for modulepart ' " . $modulepart . " ' in showdocuments " );
2017-10-16 08:47:05 +02:00
return - 1 ;
}
}
2011-08-16 11:36:00 +02:00
2018-02-15 12:57:04 +01:00
// Set headershown to avoid to have table opened a second time later
2019-11-12 09:46:08 +01:00
$headershown = 1 ;
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
if ( empty ( $buttonlabel )) $buttonlabel = $langs -> trans ( 'Generate' );
2017-01-15 12:09:26 +01:00
2019-11-12 09:46:08 +01:00
if ( $conf -> browser -> layout == 'phone' ) $urlsource .= '#' . $forname . '_form' ; // So we switch to form after a generation
if ( empty ( $noform )) $out .= '<form action="' . $urlsource . ( empty ( $conf -> global -> MAIN_JUMP_TAG ) ? '' : '#builddoc' ) . '" id="' . $forname . '_form" method="post">' ;
$out .= '<input type="hidden" name="action" value="builddoc">' ;
2019-12-01 10:20:11 +01:00
$out .= '<input type="hidden" name="token" value="' . newToken () . '">' ;
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
$out .= load_fiche_titre ( $titletoshow , '' , '' );
$out .= '<div class="div-table-responsive-no-min">' ;
$out .= '<table class="liste formdoc noborder centpercent">' ;
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
$out .= '<tr class="liste_titre">' ;
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
$addcolumforpicto = ( $delallowed || $printer || $morepicto );
$colspan = ( 3 + ( $addcolumforpicto ? 1 : 0 )); $colspanmore = 0 ;
2019-05-27 13:28:10 +02:00
2019-11-12 09:46:08 +01:00
$out .= '<th colspan="' . $colspan . '" class="formdoc liste_titre maxwidthonsmartphone center">' ;
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
// Model
2019-11-12 09:46:08 +01:00
if ( ! empty ( $modellist ))
2017-10-16 08:47:05 +02:00
{
2019-03-06 17:21:44 +01:00
asort ( $modellist );
2019-11-12 09:46:08 +01:00
$out .= '<span class="hideonsmartphone">' . $langs -> trans ( 'Model' ) . ' </span>' ;
2017-10-16 08:47:05 +02:00
if ( is_array ( $modellist ) && count ( $modellist ) == 1 ) // If there is only one element
{
2019-11-12 09:46:08 +01:00
$arraykeys = array_keys ( $modellist );
$modelselected = $arraykeys [ 0 ];
2017-10-16 08:47:05 +02:00
}
2020-04-18 11:38:24 +02:00
$morecss = 'maxwidth200' ;
if ( $conf -> browser -> layout == 'phone' ) $morecss = 'maxwidth100' ;
$out .= $form -> selectarray ( 'model' , $modellist , $modelselected , $showempty , 0 , 0 , '' , 0 , 0 , 0 , '' , $morecss );
2017-11-14 17:51:04 +01:00
if ( $conf -> use_javascript_ajax )
{
2019-11-12 09:46:08 +01:00
$out .= ajax_combobox ( 'model' );
2017-11-14 17:51:04 +01:00
}
2017-10-16 08:47:05 +02:00
}
else
{
2019-11-12 09:46:08 +01:00
$out .= '<div class="float">' . $langs -> trans ( " Files " ) . '</div>' ;
2017-10-16 08:47:05 +02:00
}
// Language code (if multilang)
2019-11-12 09:46:08 +01:00
if (( $allowgenifempty || ( is_array ( $modellist ) && count ( $modellist ) > 0 )) && $conf -> global -> MAIN_MULTILANGS && ! $forcenomultilang && ( ! empty ( $modellist ) || $showempty ))
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formadmin.class.php' ;
2019-11-12 09:46:08 +01:00
$formadmin = new FormAdmin ( $this -> db );
$defaultlang = $codelang ? $codelang : $langs -> getDefaultLang ();
$morecss = 'maxwidth150' ;
if ( $conf -> browser -> layout == 'phone' ) $morecss = 'maxwidth100' ;
2019-11-29 11:42:08 +01:00
$out .= $formadmin -> select_language ( $defaultlang , 'lang_id' , 0 , null , 0 , 0 , 0 , $morecss );
2017-10-16 08:47:05 +02:00
}
else
{
2019-11-12 09:46:08 +01:00
$out .= ' ' ;
2017-10-16 08:47:05 +02:00
}
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
// Button
$genbutton = '<input class="button buttongen" id="' . $forname . '_generatebutton" name="' . $forname . '_generatebutton"' ;
2019-11-12 09:46:08 +01:00
$genbutton .= ' type="submit" value="' . $buttonlabel . '"' ;
if ( ! $allowgenifempty && ! is_array ( $modellist ) && empty ( $modellist )) $genbutton .= ' disabled' ;
$genbutton .= '>' ;
if ( $allowgenifempty && ! is_array ( $modellist ) && empty ( $modellist ) && empty ( $conf -> dol_no_mouse_hover ) && $modulepart != 'unpaid' )
2017-10-16 08:47:05 +02:00
{
$langs -> load ( " errors " );
2019-11-12 09:46:08 +01:00
$genbutton .= ' ' . img_warning ( $langs -> transnoentitiesnoconv ( " WarningNoDocumentModelActivated " ));
2017-10-16 08:47:05 +02:00
}
2019-11-12 09:46:08 +01:00
if ( ! $allowgenifempty && ! is_array ( $modellist ) && empty ( $modellist ) && empty ( $conf -> dol_no_mouse_hover ) && $modulepart != 'unpaid' ) $genbutton = '' ;
if ( empty ( $modellist ) && ! $showempty && $modulepart != 'unpaid' ) $genbutton = '' ;
$out .= $genbutton ;
$out .= '</th>' ;
2016-09-12 18:37:40 +02:00
2017-10-16 08:47:05 +02:00
if ( ! empty ( $hookmanager -> hooks [ 'formfile' ]))
{
2019-11-12 09:46:08 +01:00
foreach ( $hookmanager -> hooks [ 'formfile' ] as $module )
2017-10-16 08:47:05 +02:00
{
2019-05-27 13:28:10 +02:00
if ( method_exists ( $module , 'formBuilddocLineOptions' ))
{
$colspanmore ++ ;
$out .= '<th></th>' ;
}
2017-10-16 08:47:05 +02:00
}
}
2019-11-12 09:46:08 +01:00
$out .= '</tr>' ;
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
// Execute hooks
2019-11-12 09:46:08 +01:00
$parameters = array ( 'colspan' => ( $colspan + $colspanmore ), 'socid' => ( isset ( $GLOBALS [ 'socid' ]) ? $GLOBALS [ 'socid' ] : '' ), 'id' => ( isset ( $GLOBALS [ 'id' ]) ? $GLOBALS [ 'id' ] : '' ), 'modulepart' => $modulepart );
2017-10-16 08:47:05 +02:00
if ( is_object ( $hookmanager ))
{
2019-01-27 11:55:16 +01:00
$reshook = $hookmanager -> executeHooks ( 'formBuilddocOptions' , $parameters , $GLOBALS [ 'object' ]);
2019-11-12 09:46:08 +01:00
$out .= $hookmanager -> resPrint ;
2017-10-16 08:47:05 +02:00
}
}
2017-06-10 13:44:20 +02:00
2017-10-16 08:47:05 +02:00
// Get list of files
2019-11-12 09:46:08 +01:00
if ( ! empty ( $filedir ))
2017-10-16 08:47:05 +02:00
{
$link_list = array ();
if ( is_object ( $object ))
{
2019-11-12 09:46:08 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php' ;
2017-10-16 08:47:05 +02:00
$link = new Link ( $this -> db );
$sortfield = $sortorder = null ;
$res = $link -> fetchAll ( $link_list , $object -> element , $object -> id , $sortfield , $sortorder );
}
2011-08-16 11:36:00 +02:00
2019-11-12 09:46:08 +01:00
$out .= '<!-- html.formfile::showdocuments -->' . " \n " ;
2017-10-16 08:47:05 +02:00
// Show title of array if not already shown
2019-11-12 09:46:08 +01:00
if (( ! empty ( $file_list ) || ! empty ( $link_list ) || preg_match ( '/^massfilesarea/' , $modulepart ))
&& ! $headershown )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$headershown = 1 ;
$out .= '<div class="titre">' . $titletoshow . '</div>' . " \n " ;
$out .= '<div class="div-table-responsive-no-min">' ;
$out .= '<table class="noborder centpercent" id="' . $modulepart . '_table">' . " \n " ;
2017-10-16 08:47:05 +02:00
}
// Loop on each file found
2012-09-18 18:00:05 +02:00
if ( is_array ( $file_list ))
{
2019-11-12 09:46:08 +01:00
foreach ( $file_list as $file )
2012-09-18 18:00:05 +02:00
{
// Define relative path for download link (depends on module)
2019-11-12 09:46:08 +01:00
$relativepath = $file [ " name " ]; // Cas general
if ( $modulesubdir ) $relativepath = $modulesubdir . " / " . $file [ " name " ]; // Cas propal, facture...
if ( $modulepart == 'export' ) $relativepath = $file [ " name " ]; // Other case
2013-07-10 15:45:16 +02:00
2019-11-12 09:46:08 +01:00
$out .= '<tr class="oddeven">' ;
2012-09-18 18:00:05 +02:00
2014-06-05 23:30:20 +02:00
$documenturl = DOL_URL_ROOT . '/document.php' ;
2019-11-12 09:46:08 +01:00
if ( isset ( $conf -> global -> DOL_URL_ROOT_DOCUMENT_PHP )) $documenturl = $conf -> global -> DOL_URL_ROOT_DOCUMENT_PHP ; // To use another wrapper
2017-06-10 13:44:20 +02:00
2012-09-18 18:00:05 +02:00
// Show file name with link to download
2019-11-12 09:46:08 +01:00
$out .= '<td class="minwidth200">' ;
$out .= '<a class="documentdownload paddingright" href="' . $documenturl . '?modulepart=' . $modulepart . '&file=' . urlencode ( $relativepath ) . ( $param ? '&' . $param : '' ) . '"' ;
$mime = dol_mimetype ( $relativepath , '' , 0 );
if ( preg_match ( '/text/' , $mime )) $out .= ' target="_blank"' ;
$out .= '>' ;
$out .= img_mime ( $file [ " name " ], $langs -> trans ( " File " ) . ': ' . $file [ " name " ]);
$out .= dol_trunc ( $file [ " name " ], 150 );
$out .= '</a>' . " \n " ;
$out .= $this -> showPreview ( $file , $modulepart , $relativepath , 0 , $param );
$out .= '</td>' ;
2012-09-18 18:00:05 +02:00
// Show file size
2019-11-12 09:46:08 +01:00
$size = ( ! empty ( $file [ 'size' ]) ? $file [ 'size' ] : dol_filesize ( $filedir . " / " . $file [ " name " ]));
$out .= '<td class="nowrap right">' . dol_print_size ( $size , 1 , 1 ) . '</td>' ;
2012-09-18 18:00:05 +02:00
// Show file date
2019-11-12 09:46:08 +01:00
$date = ( ! empty ( $file [ 'date' ]) ? $file [ 'date' ] : dol_filemtime ( $filedir . " / " . $file [ " name " ]));
$out .= '<td class="nowrap right">' . dol_print_date ( $date , 'dayhour' , 'tzuser' ) . '</td>' ;
2012-09-18 18:00:05 +02:00
2013-07-12 15:10:32 +02:00
if ( $delallowed || $printer || $morepicto )
2012-09-18 18:00:05 +02:00
{
2019-11-12 09:46:08 +01:00
$out .= '<td class="right nowraponall">' ;
2013-07-12 15:10:32 +02:00
if ( $delallowed )
{
2018-08-19 03:00:11 +02:00
$tmpurlsource = preg_replace ( '/#[a-zA-Z0-9_]*$/' , '' , $urlsource );
2020-04-08 10:24:32 +02:00
$out .= '<a href="' . $tmpurlsource . (( strpos ( $tmpurlsource , '?' ) === false ) ? '?' : '&' ) . 'action=' . $removeaction . '&file=' . urlencode ( $relativepath );
2019-11-12 09:46:08 +01:00
$out .= ( $param ? '&' . $param : '' );
2013-07-12 15:10:32 +02:00
//$out.= '&modulepart='.$modulepart; // TODO obsolete ?
//$out.= '&urlsource='.urlencode($urlsource); // TODO obsolete ?
2019-11-12 09:46:08 +01:00
$out .= '">' . img_picto ( $langs -> trans ( " Delete " ), 'delete' ) . '</a>' ;
2013-07-12 15:10:32 +02:00
}
if ( $printer )
{
2019-01-20 23:36:39 +01:00
//$out.= '<td class="right">';
2020-04-18 11:40:26 +02:00
$out .= '<a class="marginleftonly" href="' . $urlsource . ( strpos ( $urlsource , '?' ) ? '&' : '?' ) . 'action=print_file&printer=' . $modulepart . '&file=' . urlencode ( $relativepath );
2019-11-12 09:46:08 +01:00
$out .= ( $param ? '&' . $param : '' );
$out .= '">' . img_picto ( $langs -> trans ( " PrintFile " , $relativepath ), 'printer.png' ) . '</a>' ;
2013-07-12 15:10:32 +02:00
}
if ( $morepicto )
{
2019-11-12 09:46:08 +01:00
$morepicto = preg_replace ( '/__FILENAMEURLENCODED__/' , urlencode ( $relativepath ), $morepicto );
$out .= $morepicto ;
2017-10-16 08:47:05 +02:00
}
2019-11-12 09:46:08 +01:00
$out .= '</td>' ;
2017-10-16 08:47:05 +02:00
}
if ( is_object ( $hookmanager ))
{
2019-11-12 09:46:08 +01:00
$parameters = array ( 'colspan' => ( $colspan + $colspanmore ), 'socid' => ( isset ( $GLOBALS [ 'socid' ]) ? $GLOBALS [ 'socid' ] : '' ), 'id' => ( isset ( $GLOBALS [ 'id' ]) ? $GLOBALS [ 'id' ] : '' ), 'modulepart' => $modulepart , 'relativepath' => $relativepath );
2019-01-27 11:55:16 +01:00
$res = $hookmanager -> executeHooks ( 'formBuilddocLineOptions' , $parameters , $file );
2017-10-16 08:47:05 +02:00
if ( empty ( $res ))
{
2019-11-12 09:46:08 +01:00
$out .= $hookmanager -> resPrint ; // Complete line
$out .= '</tr>' ;
2013-07-12 15:10:32 +02:00
}
2019-05-27 13:28:10 +02:00
else
{
2019-11-12 09:46:08 +01:00
$out = $hookmanager -> resPrint ; // Replace all $out
2019-05-27 13:28:10 +02:00
}
2017-10-16 08:47:05 +02:00
}
2012-09-18 18:00:05 +02:00
}
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
$this -> numoffiles ++ ;
}
2018-08-19 03:00:11 +02:00
// Loop on each link found
2017-10-16 08:47:05 +02:00
if ( is_array ( $link_list ))
{
2019-11-12 09:46:08 +01:00
$colspan = 2 ;
2017-06-10 13:44:20 +02:00
2019-11-12 09:46:08 +01:00
foreach ( $link_list as $file )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$out .= '<tr class="oddeven">' ;
$out .= '<td colspan="' . $colspan . '" class="maxwidhtonsmartphone">' ;
$out .= '<a data-ajax="false" href="' . $file -> url . '" target="_blank">' ;
$out .= $file -> label ;
$out .= '</a>' ;
$out .= '</td>' ;
$out .= '<td class="right">' ;
$out .= dol_print_date ( $file -> datea , 'dayhour' );
$out .= '</td>' ;
if ( $delallowed || $printer || $morepicto ) $out .= '<td></td>' ;
$out .= '</tr>' . " \n " ;
2017-10-16 08:47:05 +02:00
}
$this -> numoffiles ++ ;
}
2017-06-10 13:44:20 +02:00
2016-09-12 18:37:40 +02:00
if ( count ( $file_list ) == 0 && count ( $link_list ) == 0 && $headershown )
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$out .= '<tr><td colspan="' . ( 3 + ( $addcolumforpicto ? 1 : 0 )) . '" class="opacitymedium">' . $langs -> trans ( " None " ) . '</td></tr>' . " \n " ;
2017-10-16 08:47:05 +02:00
}
}
2011-08-16 11:36:00 +02:00
2017-10-16 08:47:05 +02:00
if ( $headershown )
{
// Affiche pied du tableau
2019-11-12 09:46:08 +01:00
$out .= " </table> \n " ;
$out .= " </div> \n " ;
2017-10-16 08:47:05 +02:00
if ( $genallowed )
{
2019-11-12 09:46:08 +01:00
if ( empty ( $noform )) $out .= '</form>' . " \n " ;
2017-10-16 08:47:05 +02:00
}
}
2019-11-12 09:46:08 +01:00
$out .= '<!-- End show_document -->' . " \n " ;
2017-10-16 08:47:05 +02:00
//return ($i?$i:$headershown);
return $out ;
}
/**
* Show a Document icon with link ( s )
* You may want to call this into a div like this :
* print '<div class="inline-block valignmiddle">' . $formfile -> getDocumentsLink ( $element_doc , $filename , $filedir ) . '</div>' ;
*
* @ param string $modulepart propal , facture , facture_fourn , ...
* @ param string $modulesubdir Sub - directory to scan ( Example : '0/1/10' , 'FA/DD/MM/YY/9999' ) . Use '' if file is not into subdir of module .
* @ param string $filedir Full path to directory to scan
* @ param string $filter Filter filenames on this regex string ( Example : '\.pdf$' )
* @ return string Output string with HTML link of documents ( might be empty string ) . This also fill the array -> infofiles
*/
2019-02-27 20:45:07 +01:00
public function getDocumentsLink ( $modulepart , $modulesubdir , $filedir , $filter = '' )
2017-10-16 08:47:05 +02:00
{
global $conf , $langs ;
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2019-11-12 09:46:08 +01:00
$out = '' ;
$this -> infofiles = array ( 'nboffiles' => 0 , 'extensions' => array (), 'files' => array ());
2017-10-16 08:47:05 +02:00
2018-10-29 12:30:36 +01:00
$entity = 1 ; // Without multicompany
2018-02-26 11:00:49 +01:00
// Get object entity
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> multicompany -> enabled ))
2018-03-02 17:48:58 +01:00
{
2020-04-23 13:35:40 +02:00
$regs = array ();
2019-01-27 11:55:16 +01:00
preg_match ( '/\/([0-9]+)\/[^\/]+\/' . preg_quote ( $modulesubdir , '/' ) . '$/' , $filedir , $regs );
2019-11-12 09:46:08 +01:00
$entity = (( ! empty ( $regs [ 1 ]) && $regs [ 1 ] > 1 ) ? $regs [ 1 ] : 1 ); // If entity id not found in $filedir this is entity 1 by default
2018-03-02 17:48:58 +01:00
}
2018-03-14 17:12:32 +01:00
2018-04-07 13:04:52 +02:00
// Get list of files starting with name of ref (but not followed by "-" to discard uploaded files and get only generated files)
2019-12-11 19:11:13 +01:00
// @todo Why not showing by default all files by just removing the '[^\-]+' at end of regex ?
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> global -> MAIN_SHOW_ALL_FILES_ON_DOCUMENT_TOOLTIP ))
2018-04-07 13:23:26 +02:00
{
2019-01-27 11:55:16 +01:00
$filterforfilesearch = preg_quote ( basename ( $modulesubdir ), '/' );
2018-04-07 13:23:26 +02:00
}
else
{
2019-01-27 11:55:16 +01:00
$filterforfilesearch = preg_quote ( basename ( $modulesubdir ), '/' ) . '[^\-]+' ;
2018-04-07 13:23:26 +02:00
}
2019-11-12 09:46:08 +01:00
$file_list = dol_dir_list ( $filedir , 'files' , 0 , $filterforfilesearch , '\.meta$|\.png$' ); // We also discard .meta and .png preview
2017-10-16 08:47:05 +02:00
2017-11-10 20:20:59 +01:00
//var_dump($file_list);
2017-10-16 08:47:05 +02:00
// For ajax treatment
2019-11-12 09:46:08 +01:00
$out .= '<!-- html.formfile::getDocumentsLink -->' . " \n " ;
if ( ! empty ( $file_list ))
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$out = ' < dl class = " dropdown inline-block " >
2018-09-19 16:41:33 +02:00
< dt >< a data - ajax = " false " href = " # " onClick = " return false; " > '.img_picto(' ', ' listlight ', ' ', 0, 0, 0, ' ', ' valignmiddle ').' </ a ></ dt >
2020-04-20 02:48:05 +02:00
< dd >< div class = " multichoicedoc " style = " position:absolute;left:100px; " >< ul class = " ulselectedfields " > ' ;
2019-11-12 09:46:08 +01:00
$tmpout = '' ;
2017-10-16 08:47:05 +02:00
// Loop on each file found
2019-11-12 09:46:08 +01:00
$found = 0 ;
foreach ( $file_list as $file )
2017-10-16 08:47:05 +02:00
{
$i ++ ;
2019-11-12 09:46:08 +01:00
if ( $filter && ! preg_match ( '/' . $filter . '/i' , $file [ " name " ])) continue ; // Discard this. It does not match provided filter.
2017-10-16 08:47:05 +02:00
2017-11-10 20:20:59 +01:00
$found ++ ;
2017-10-16 08:47:05 +02:00
// Define relative path for download link (depends on module)
2019-11-12 09:46:08 +01:00
$relativepath = $file [ " name " ]; // Cas general
if ( $modulesubdir ) $relativepath = $modulesubdir . " / " . $file [ " name " ]; // Cas propal, facture...
2017-10-16 08:47:05 +02:00
// Autre cas
2019-11-12 09:46:08 +01:00
if ( $modulepart == 'donation' ) {
2019-01-27 11:55:16 +01:00
$relativepath = get_exdir ( $modulesubdir , 2 , 0 , 0 , null , 'donation' ) . $file [ " name " ];
2017-10-16 08:47:05 +02:00
}
2019-11-12 09:46:08 +01:00
if ( $modulepart == 'export' ) {
2017-10-16 08:47:05 +02:00
$relativepath = $file [ " name " ];
}
$this -> infofiles [ 'nboffiles' ] ++ ;
2019-11-12 09:46:08 +01:00
$this -> infofiles [ 'files' ][] = $file [ 'fullname' ];
$ext = pathinfo ( $file [ " name " ], PATHINFO_EXTENSION );
if ( empty ( $this -> infofiles [ $ext ])) $this -> infofiles [ 'extensions' ][ $ext ] = 1 ;
2017-10-16 08:47:05 +02:00
else $this -> infofiles [ 'extensions' ][ $ext ] ++ ;
// Preview
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> use_javascript_ajax ) && ( $conf -> browser -> layout != 'phone' ))
2017-10-16 08:47:05 +02:00
{
$tmparray = getAdvancedPreviewUrl ( $modulepart , $relativepath , 1 , '&entity=' . $entity );
2017-11-10 20:20:59 +01:00
if ( $tmparray && $tmparray [ 'url' ])
{
2019-11-12 09:46:08 +01:00
$tmpout .= '<li><a href="' . $tmparray [ 'url' ] . '"' . ( $tmparray [ 'css' ] ? ' class="' . $tmparray [ 'css' ] . '"' : '' ) . ( $tmparray [ 'mime' ] ? ' mime="' . $tmparray [ 'mime' ] . '"' : '' ) . ( $tmparray [ 'target' ] ? ' target="' . $tmparray [ 'target' ] . '"' : '' ) . '>' ;
2017-11-10 20:20:59 +01:00
//$tmpout.= img_picto('','detail');
2019-11-12 09:46:08 +01:00
$tmpout .= '<i class="fa fa-search-plus paddingright" style="color: gray"></i>' ;
$tmpout .= $langs -> trans ( " Preview " ) . ' ' . $ext . '</a></li>' ;
2017-11-10 20:20:59 +01:00
}
2017-10-16 08:47:05 +02:00
}
// Download
2019-11-12 09:46:08 +01:00
$tmpout .= '<li class="nowrap"><a class="pictopreview nowrap" href="' . DOL_URL_ROOT . '/document.php?modulepart=' . $modulepart . '&entity=' . $entity . '&file=' . urlencode ( $relativepath ) . '"' ;
$mime = dol_mimetype ( $relativepath , '' , 0 );
if ( preg_match ( '/text/' , $mime )) $tmpout .= ' target="_blank"' ;
$tmpout .= '>' ;
$tmpout .= img_mime ( $relativepath , $file [ " name " ]);
$tmpout .= $langs -> trans ( " Download " ) . ' ' . $ext ;
$tmpout .= '</a></li>' . " \n " ;
}
$out .= $tmpout ;
$out .= ' </ ul ></ div ></ dd >
2016-08-05 12:18:51 +02:00
</ dl > ' ;
2017-11-10 20:20:59 +01:00
2019-11-12 09:46:08 +01:00
if ( ! $found ) $out = '' ;
2017-10-16 08:47:05 +02:00
}
else
{
// TODO Add link to regenerate doc ?
//$out.= '<div id="gen_pdf_'.$modulesubdir.'" class="linkobject hideobject">'.img_picto('', 'refresh').'</div>'."\n";
}
return $out ;
}
2019-02-27 20:45:07 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2017-10-16 08:47:05 +02:00
/**
* Show list of documents in $filearray ( may be they are all in same directory but may not )
* This also sync database if $upload_dir is defined .
*
* @ param array $filearray Array of files loaded by dol_dir_list ( 'files' ) function before calling this .
* @ param Object $object Object on which document is linked to .
* @ param string $modulepart Value for modulepart used by download or viewimage wrapper .
* @ param string $param Parameters on sort links ( param must start with & , example & aaa = bbb & ccc = ddd )
* @ param int $forcedownload Force to open dialog box " Save As " when clicking on file .
* @ param string $relativepath Relative path of docs ( autodefined if not provided ), relative to module dir , not to MAIN_DATA_ROOT .
* @ param int $permonobject Permission on object ( so permission to delete or crop document )
2017-11-10 13:45:38 +01:00
* @ param int $useinecm Change output for use in ecm module :
2019-06-12 19:00:34 +02:00
* 0 or 6 : Add a preview column . Show also a rename button . Show also a crop button for some values of $modulepart ( must be supported into hard coded list in this function + photos_resize . php + restrictedArea + checkUserAccessToObject )
2017-11-10 13:45:38 +01:00
* 1 : Add link to edit ECM entry
2019-06-13 11:07:38 +02:00
* 2 : Add rename and crop link
2019-01-15 15:48:28 +01:00
* 4 : Add a preview column
* 5 : Add link to edit ECM entry and Add a preview column
2017-10-16 08:47:05 +02:00
* @ param string $textifempty Text to show if filearray is empty ( 'NoFileFound' if not defined )
* @ param int $maxlength Maximum length of file name shown .
2017-11-10 13:45:38 +01:00
* @ param string $title Title before list . Use 'none' to disable title .
2017-10-16 08:47:05 +02:00
* @ param string $url Full url to use for click links ( '' = autodetect )
2013-11-01 17:36:22 +01:00
* @ param int $showrelpart 0 = Show only filename ( default ), 1 = Show first level 1 dir
2016-12-13 00:40:12 +01:00
* @ param int $permtoeditline Permission to edit document line ( You must provide a value , - 1 is deprecated and must not be used any more )
2018-02-13 13:55:36 +01:00
* @ param string $upload_dir Full path directory so we can know dir relative to MAIN_DATA_ROOT . Fill this to complete file data with database indexes .
2017-10-16 08:47:05 +02:00
* @ param string $sortfield Sort field ( 'name' , 'size' , 'position' , ... )
* @ param string $sortorder Sort order ( 'ASC' or 'DESC' )
* @ param int $disablemove 1 = Disable move button , 0 = Position move is possible .
* @ param int $addfilterfields Add line with filters
2019-10-23 16:07:09 +02:00
* @ param int $disablecrop Disable crop feature on images ( - 1 = auto , prefer to set it explicitely to 0 or 1 )
2017-10-16 08:47:05 +02:00
* @ return int < 0 if KO , nb of files shown if OK
2019-03-24 12:15:19 +01:00
* @ see list_of_autoecmfiles ()
2017-10-16 08:47:05 +02:00
*/
2019-10-23 16:07:09 +02:00
public function list_of_documents ( $filearray , $object , $modulepart , $param = '' , $forcedownload = 0 , $relativepath = '' , $permonobject = 1 , $useinecm = 0 , $textifempty = '' , $maxlength = 0 , $title = '' , $url = '' , $showrelpart = 0 , $permtoeditline = - 1 , $upload_dir = '' , $sortfield = '' , $sortorder = 'ASC' , $disablemove = 1 , $addfilterfields = 0 , $disablecrop = - 1 )
2012-09-11 17:01:54 +02:00
{
2018-09-04 22:52:55 +02:00
// phpcs:enable
2013-01-25 19:12:54 +01:00
global $user , $conf , $langs , $hookmanager ;
2012-09-11 17:01:54 +02:00
global $sortfield , $sortorder , $maxheightmini ;
2018-02-13 13:55:36 +01:00
global $dolibarr_main_url_root ;
2018-04-15 17:58:13 +02:00
global $form ;
2012-09-11 17:01:54 +02:00
2019-10-23 16:07:09 +02:00
if ( $disablecrop == - 1 )
{
2019-11-12 09:46:08 +01:00
$disablecrop = 1 ;
2020-06-03 11:20:59 +02:00
if ( in_array ( $modulepart , array ( 'bank' , 'bom' , 'expensereport' , 'holiday' , 'medias' , 'member' , 'mrp' , 'project' , 'product' , 'produit' , 'propal' , 'service' , 'societe' , 'tax' , 'tax-vat' , 'ticket' , 'user' ))) $disablecrop = 0 ;
2019-10-23 16:07:09 +02:00
}
2012-09-11 17:01:54 +02:00
2016-12-13 00:15:21 +01:00
// Define relative path used to store the file
if ( empty ( $relativepath ))
{
2019-11-12 09:46:08 +01:00
$relativepath = ( ! empty ( $object -> ref ) ? dol_sanitizeFileName ( $object -> ref ) : '' ) . '/' ;
if ( $object -> element == 'invoice_supplier' ) $relativepath = get_exdir ( $object -> id , 2 , 0 , 0 , $object , 'invoice_supplier' ) . $relativepath ; // TODO Call using a defined value for $relativepath
if ( $object -> element == 'project_task' ) $relativepath = 'Call_not_supported_._Call_function_using_a_defined_relative_path_.' ;
2016-12-13 00:15:21 +01:00
}
2017-12-08 13:13:53 +01:00
// For backward compatiblity, we detect file stored into an old path
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> global -> PRODUCT_USE_OLD_PATH_FOR_PHOTO ) && $filearray [ 0 ][ 'level1name' ] == 'photos' )
2016-12-13 00:15:21 +01:00
{
2019-11-12 09:46:08 +01:00
$relativepath = preg_replace ( '/^.*\/produit\//' , '' , $filearray [ 0 ][ 'path' ]) . '/' ;
2016-12-13 00:15:21 +01:00
}
// Defined relative dir to DOL_DATA_ROOT
2016-12-13 00:40:12 +01:00
$relativedir = '' ;
if ( $upload_dir )
{
2019-01-27 11:55:16 +01:00
$relativedir = preg_replace ( '/^' . preg_quote ( DOL_DATA_ROOT , '/' ) . '/' , '' , $upload_dir );
$relativedir = preg_replace ( '/^[\\/]/' , '' , $relativedir );
2016-12-13 00:40:12 +01:00
}
2020-02-26 20:25:26 +01:00
// For example here $upload_dir = '/pathtodocuments/commande/SO2001-123/'
// For example here $upload_dir = '/pathtodocuments/tax/vat/1'
2016-12-13 00:40:12 +01:00
2012-09-11 17:01:54 +02:00
$hookmanager -> initHooks ( array ( 'formfile' ));
2019-11-12 09:46:08 +01:00
$parameters = array (
2012-09-11 17:01:54 +02:00
'filearray' => $filearray ,
'modulepart' => $modulepart ,
'param' => $param ,
'forcedownload' => $forcedownload ,
2019-11-12 09:46:08 +01:00
'relativepath' => $relativepath , // relative filename to module dir
'relativedir' => $relativedir , // relative dirname to DOL_DATA_ROOT
2016-09-07 01:54:16 +02:00
'permtodelete' => $permonobject ,
2012-09-11 17:01:54 +02:00
'useinecm' => $useinecm ,
'textifempty' => $textifempty ,
'maxlength' => $maxlength ,
'title' => $title ,
'url' => $url
);
2019-11-12 09:46:08 +01:00
$reshook = $hookmanager -> executeHooks ( 'showFilesList' , $parameters , $object );
2012-09-11 17:01:54 +02:00
2012-09-11 17:09:43 +02:00
if ( isset ( $reshook ) && $reshook != '' ) // null or '' for bypass
2012-09-11 17:01:54 +02:00
{
return $reshook ;
}
else
{
2019-11-12 09:46:08 +01:00
if ( ! is_object ( $form ))
2018-04-21 11:24:45 +02:00
{
2019-11-12 09:46:08 +01:00
include_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php' ; // The compoent may be included into ajax page that does not include the Form class
$form = new Form ( $this -> db );
2018-04-21 11:24:45 +02:00
}
2018-04-15 17:58:13 +02:00
2019-11-12 09:46:08 +01:00
if ( ! preg_match ( '/&id=/' , $param ) && isset ( $object -> id )) $param .= '&id=' . $object -> id ;
$relativepathwihtoutslashend = preg_replace ( '/\/$/' , '' , $relativepath );
if ( $relativepathwihtoutslashend ) $param .= '&file=' . urlencode ( $relativepathwihtoutslashend );
2012-09-12 10:46:35 +02:00
2016-09-07 01:54:16 +02:00
if ( $permtoeditline < 0 ) // Old behaviour for backward compatibility. New feature should call method with value 0 or 1
{
2019-11-12 09:46:08 +01:00
$permtoeditline = 0 ;
if ( in_array ( $modulepart , array ( 'product' , 'produit' , 'service' )))
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
if ( $user -> rights -> produit -> creer && $object -> type == Product :: TYPE_PRODUCT ) $permtoeditline = 1 ;
if ( $user -> rights -> service -> creer && $object -> type == Product :: TYPE_SERVICE ) $permtoeditline = 1 ;
2017-10-16 08:47:05 +02:00
}
2016-09-07 01:54:16 +02:00
}
2017-06-10 13:44:20 +02:00
if ( empty ( $conf -> global -> MAIN_UPLOAD_DOC ))
2016-09-07 01:54:16 +02:00
{
2019-11-12 09:46:08 +01:00
$permtoeditline = 0 ;
$permonobject = 0 ;
2016-09-07 01:54:16 +02:00
}
2012-09-11 17:01:54 +02:00
// Show list of existing files
2020-04-13 04:14:28 +02:00
if (( empty ( $useinecm ) || $useinecm == 6 ) && $title != 'none' ) print load_fiche_titre ( $title ? $title : $langs -> trans ( " AttachedFiles " ), '' , 'file-upload' , 0 , '' , 'table-list-of-attached-files' );
2019-11-12 09:46:08 +01:00
if ( empty ( $url )) $url = $_SERVER [ " PHP_SELF " ];
2017-06-10 13:44:20 +02:00
2016-03-04 11:25:54 +01:00
print '<!-- html.formfile::list_of_documents -->' . " \n " ;
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'action' , 'aZ09' ) == 'editfile' && $permtoeditline )
2016-09-07 01:54:16 +02:00
{
2017-10-16 08:47:05 +02:00
print '<form action="' . $_SERVER [ " PHP_SELF " ] . '?' . $param . '" method="POST">' ;
2019-12-01 10:20:11 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
2017-10-16 08:47:05 +02:00
print '<input type="hidden" name="action" value="renamefile">' ;
print '<input type="hidden" name="id" value="' . $object -> id . '">' ;
print '<input type="hidden" name="modulepart" value="' . $modulepart . '">' ;
2016-09-07 01:54:16 +02:00
}
2017-06-20 12:31:08 +02:00
2017-04-14 13:21:02 +02:00
print '<div class="div-table-responsive-no-min">' ;
2019-04-10 11:39:54 +02:00
print '<table width="100%" id="tablelines" class="liste noborder nobottom">' . " \n " ;
2017-06-10 13:44:20 +02:00
2019-11-12 09:46:08 +01:00
if ( ! empty ( $addfilterfields ))
2017-08-04 13:07:15 +02:00
{
print '<tr class="liste_titre nodrag nodrop">' ;
2019-01-27 11:55:16 +01:00
print '<td><input type="search_doc_ref" value="' . dol_escape_htmltag ( GETPOST ( 'search_doc_ref' , 'alpha' )) . '"></td>' ;
2017-08-04 13:07:15 +02:00
print '<td></td>' ;
print '<td></td>' ;
2019-01-15 15:48:28 +01:00
if ( empty ( $useinecm ) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6 ) print '<td></td>' ;
2017-08-04 13:07:15 +02:00
print '<td></td>' ;
2018-02-13 13:55:36 +01:00
print '<td></td>' ;
2019-11-12 09:46:08 +01:00
if ( ! $disablemove ) print '<td></td>' ;
2017-08-04 13:07:15 +02:00
print " </tr> \n " ;
}
2016-12-20 19:42:25 +01:00
print '<tr class="liste_titre nodrag nodrop">' ;
2017-11-10 13:45:38 +01:00
//print $url.' sortfield='.$sortfield.' sortorder='.$sortorder;
2019-04-10 11:39:54 +02:00
print_liste_field_titre ( 'Documents2' , $url , " name " , " " , $param , '' , $sortfield , $sortorder , 'left ' );
print_liste_field_titre ( 'Size' , $url , " size " , " " , $param , '' , $sortfield , $sortorder , 'right ' );
print_liste_field_titre ( 'Date' , $url , " date " , " " , $param , '' , $sortfield , $sortorder , 'center ' );
2019-11-12 09:46:08 +01:00
if ( empty ( $useinecm ) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6 ) print_liste_field_titre ( '' , $url , " " , " " , $param , '' , $sortfield , $sortorder , 'center ' ); // Preview
2018-02-13 13:55:36 +01:00
print_liste_field_titre ( '' );
2015-06-26 06:23:29 +02:00
print_liste_field_titre ( '' );
2019-11-12 09:46:08 +01:00
if ( ! $disablemove ) print_liste_field_titre ( '' );
2015-06-26 06:23:29 +02:00
print " </tr> \n " ;
2012-09-11 17:01:54 +02:00
2016-12-20 19:42:25 +01:00
// Get list of files stored into database for same relative directory
2016-12-13 00:40:12 +01:00
if ( $relativedir )
2016-12-13 00:15:21 +01:00
{
2017-08-18 16:10:21 +02:00
completeFileArrayWithDatabaseInfo ( $filearray , $relativedir );
2017-06-10 13:44:20 +02:00
2017-11-10 18:14:29 +01:00
//var_dump($sortfield.' - '.$sortorder);
if ( $sortfield && $sortorder ) // If $sortfield is for example 'position_name', we will sort on the property 'position_name' (that is concat of position+name)
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$filearray = dol_sort_array ( $filearray , $sortfield , $sortorder );
2017-10-16 08:47:05 +02:00
}
2016-12-13 00:15:21 +01:00
}
2017-06-10 13:44:20 +02:00
2019-11-12 09:46:08 +01:00
$nboffiles = count ( $filearray );
2016-12-13 00:15:21 +01:00
if ( $nboffiles > 0 ) include_once DOL_DOCUMENT_ROOT . '/core/lib/images.lib.php' ;
2017-06-10 13:44:20 +02:00
2019-11-12 09:46:08 +01:00
$i = 0 ; $nboflines = 0 ; $lastrowid = 0 ;
foreach ( $filearray as $key => $file ) // filearray must be only files here
2012-09-11 17:01:54 +02:00
{
if ( $file [ 'name' ] != '.'
&& $file [ 'name' ] != '..'
2019-11-12 09:46:08 +01:00
&& ! preg_match ( '/\.meta$/i' , $file [ 'name' ]))
2012-09-11 17:01:54 +02:00
{
2016-12-20 19:42:25 +01:00
if ( $filearray [ $key ][ 'rowid' ] > 0 ) $lastrowid = $filearray [ $key ][ 'rowid' ];
2019-11-12 09:46:08 +01:00
$filepath = $relativepath . $file [ 'name' ];
2017-06-10 13:44:20 +02:00
2019-11-12 09:46:08 +01:00
$editline = 0 ;
2016-12-20 19:42:25 +01:00
$nboflines ++ ;
2017-10-16 08:47:05 +02:00
print '<!-- Line list_of_documents ' . $key . ' relativepath = ' . $relativepath . ' -->' . " \n " ;
// Do we have entry into database ?
print '<!-- In database: position=' . $filearray [ $key ][ 'position' ] . ' -->' . " \n " ;
2019-11-12 09:46:08 +01:00
print '<tr class="oddeven" id="row-' . ( $filearray [ $key ][ 'rowid' ] > 0 ? $filearray [ $key ][ 'rowid' ] : 'AFTER' . $lastrowid . 'POS' . ( $i + 1 )) . '">' ;
2017-06-10 13:44:20 +02:00
2017-11-18 15:41:30 +01:00
// File name
2018-02-16 12:11:39 +01:00
print '<td class="minwith200">' ;
2017-06-10 13:44:20 +02:00
2017-11-10 20:20:59 +01:00
// Show file name with link to download
2012-09-11 17:01:54 +02:00
//print "XX".$file['name']; //$file['name'] must be utf8
2017-11-10 20:20:59 +01:00
print '<a class="paddingright" href="' . DOL_URL_ROOT . '/document.php?modulepart=' . $modulepart ;
2012-09-11 17:01:54 +02:00
if ( $forcedownload ) print '&attachment=1' ;
2019-11-12 09:46:08 +01:00
if ( ! empty ( $object -> entity )) print '&entity=' . $object -> entity ;
2013-11-17 02:59:01 +01:00
print '&file=' . urlencode ( $filepath );
2013-11-13 20:36:07 +01:00
print '">' ;
2019-01-27 11:55:16 +01:00
print img_mime ( $file [ 'name' ], $file [ 'name' ] . ' (' . dol_print_size ( $file [ 'size' ], 0 , 0 ) . ')' , 'inline-block valignbottom paddingright' );
2013-11-13 20:36:07 +01:00
if ( $showrelpart == 1 ) print $relativepath ;
2016-03-04 11:25:54 +01:00
//print dol_trunc($file['name'],$maxlength,'middle');
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'action' , 'aZ09' ) == 'editfile' && $file [ 'name' ] == basename ( GETPOST ( 'urlfile' , 'alpha' )))
2016-09-07 01:54:16 +02:00
{
2017-10-16 08:47:05 +02:00
print '</a>' ;
2019-11-12 09:46:08 +01:00
$section_dir = dirname ( GETPOST ( 'urlfile' , 'alpha' ));
2020-06-03 12:34:09 +02:00
if ( ! preg_match ( '/\/$/' , $section_dir )) $section_dir .= '/' ;
2017-11-18 15:41:30 +01:00
print '<input type="hidden" name="section_dir" value="' . $section_dir . '">' ;
2017-10-16 08:47:05 +02:00
print '<input type="hidden" name="renamefilefrom" value="' . dol_escape_htmltag ( $file [ 'name' ]) . '">' ;
print '<input type="text" name="renamefileto" class="quatrevingtpercent" value="' . dol_escape_htmltag ( $file [ 'name' ]) . '">' ;
2019-11-12 09:46:08 +01:00
$editline = 1 ;
2016-09-07 01:54:16 +02:00
}
else
{
2020-05-27 13:12:18 +02:00
$filenametoshow = preg_replace ( '/\.noexe$/' , '' , $file [ 'name' ]);
print dol_trunc ( $filenametoshow , 200 );
2017-10-16 08:47:05 +02:00
print '</a>' ;
2016-09-07 01:54:16 +02:00
}
2017-11-18 15:41:30 +01:00
// Preview link
2019-11-12 09:46:08 +01:00
if ( ! $editline ) print $this -> showPreview ( $file , $modulepart , $filepath , 0 , '&entity=' . ( ! empty ( $object -> entity ) ? $object -> entity : $conf -> entity ));
2017-06-10 13:44:20 +02:00
2012-09-11 17:01:54 +02:00
print " </td> \n " ;
2017-06-10 13:44:20 +02:00
2017-11-18 15:41:30 +01:00
// Size
2019-01-27 11:55:16 +01:00
$sizetoshow = dol_print_size ( $file [ 'size' ], 1 , 1 );
$sizetoshowbytes = dol_print_size ( $file [ 'size' ], 0 , 1 );
2018-04-15 17:58:13 +02:00
2020-04-11 16:34:59 +02:00
print '<td class="right nowraponall">' ;
2018-04-15 17:58:13 +02:00
if ( $sizetoshow == $sizetoshowbytes ) print $sizetoshow ;
else {
print $form -> textwithpicto ( $sizetoshow , $sizetoshowbytes , - 1 );
}
print '</td>' ;
2017-06-10 13:44:20 +02:00
2017-11-18 15:41:30 +01:00
// Date
2019-11-12 09:46:08 +01:00
print '<td class="center" style="width: 140px">' . dol_print_date ( $file [ 'date' ], " dayhour " , " tzuser " ) . '</td>' ; // 140px = width for date with PM format
2017-06-10 13:44:20 +02:00
2012-09-11 17:01:54 +02:00
// Preview
2019-11-12 09:46:08 +01:00
if ( empty ( $useinecm ) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6 )
2012-09-11 17:01:54 +02:00
{
2014-07-13 19:51:44 +02:00
$fileinfo = pathinfo ( $file [ 'name' ]);
2019-01-20 23:36:39 +01:00
print '<td class="center">' ;
2020-04-17 12:34:35 +02:00
if ( image_format_supported ( $file [ 'name' ]) >= 0 )
2015-06-19 00:52:58 +02:00
{
2019-01-15 15:48:28 +01:00
if ( $useinecm == 5 || $useinecm == 6 )
{
2020-06-05 13:41:33 +02:00
$smallfile = getImageFileNameForSize ( $file [ 'name' ], '' ); // There is no thumb for ECM module and Media filemanager, so we use true image. TODO Change this it is slow on image dir.
2019-01-15 15:48:28 +01:00
}
else
{
2019-11-12 09:46:08 +01:00
$smallfile = getImageFileNameForSize ( $file [ 'name' ], '_small' ); // For new thumbs using same ext (in lower case however) than original
2019-01-15 15:48:28 +01:00
}
2019-11-12 09:46:08 +01:00
if ( ! dol_is_file ( $file [ 'path' ] . '/' . $smallfile )) $smallfile = getImageFileNameForSize ( $file [ 'name' ], '_small' , '.png' ); // For backward compatibility of old thumbs that were created with filename in lower case and with .png extension
2019-10-05 11:17:09 +02:00
//print $file['path'].'/'.$smallfile.'<br>';
2017-01-16 00:48:37 +01:00
2019-11-12 09:46:08 +01:00
$urlforhref = getAdvancedPreviewUrl ( $modulepart , $relativepath . $fileinfo [ 'filename' ] . '.' . strtolower ( $fileinfo [ 'extension' ]), 1 , '&entity=' . ( ! empty ( $object -> entity ) ? $object -> entity : $conf -> entity ));
2018-11-07 21:51:05 +01:00
if ( empty ( $urlforhref )) {
2019-11-12 09:46:08 +01:00
$urlforhref = DOL_URL_ROOT . '/viewimage.php?modulepart=' . $modulepart . '&entity=' . ( ! empty ( $object -> entity ) ? $object -> entity : $conf -> entity ) . '&file=' . urlencode ( $relativepath . $fileinfo [ 'filename' ] . '.' . strtolower ( $fileinfo [ 'extension' ]));
2018-11-07 21:51:05 +01:00
print '<a href="' . $urlforhref . '" class="aphoto" target="_blank">' ;
} else {
print '<a href="' . $urlforhref [ 'url' ] . '" class="' . $urlforhref [ 'css' ] . '" target="' . $urlforhref [ 'target' ] . '" mime="' . $urlforhref [ 'mime' ] . '">' ;
}
2020-04-11 16:34:59 +02:00
print '<img class="photo maxwidth200" height="' . (( $useinecm == 4 || $useinecm == 5 || $useinecm == 6 ) ? '12' : $maxheightmini ) . '" src="' . DOL_URL_ROOT . '/viewimage.php?modulepart=' . $modulepart . '&entity=' . ( ! empty ( $object -> entity ) ? $object -> entity : $conf -> entity ) . '&file=' . urlencode ( $relativepath . $smallfile ) . '" title="">' ;
2015-06-19 00:52:58 +02:00
print '</a>' ;
}
2012-09-11 17:01:54 +02:00
else print ' ' ;
print '</td>' ;
}
2018-02-13 13:55:36 +01:00
// Hash of file (only if we are in a mode where a scan of dir were done and we have id of file in ECM table)
2019-01-20 23:36:39 +01:00
print '<td class="center">' ;
2018-02-13 13:55:36 +01:00
if ( $relativedir && $filearray [ $key ][ 'rowid' ] > 0 )
{
if ( $editline )
{
print $langs -> trans ( " FileSharedViaALink " ) . ' ' ;
2019-11-12 09:46:08 +01:00
print '<input class="inline-block" type="checkbox" name="shareenabled"' . ( $file [ 'share' ] ? ' checked="checked"' : '' ) . ' /> ' ;
2018-02-13 13:55:36 +01:00
}
else
{
if ( $file [ 'share' ])
{
// Define $urlwithroot
2019-11-12 09:46:08 +01:00
$urlwithouturlroot = preg_replace ( '/' . preg_quote ( DOL_URL_ROOT , '/' ) . '$/i' , '' , trim ( $dolibarr_main_url_root ));
$urlwithroot = $urlwithouturlroot . DOL_URL_ROOT ; // This is to use external domain name found into config file
2018-02-13 13:55:36 +01:00
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
//print '<span class="opacitymedium">'.$langs->trans("Hash").' : '.$file['share'].'</span>';
2019-11-12 09:46:08 +01:00
$forcedownload = 0 ;
$paramlink = '' ;
if ( ! empty ( $file [ 'share' ])) $paramlink .= ( $paramlink ? '&' : '' ) . 'hashp=' . $file [ 'share' ]; // Hash for public share
if ( $forcedownload ) $paramlink .= ( $paramlink ? '&' : '' ) . 'attachment=1' ;
2018-02-13 13:55:36 +01:00
2019-11-12 09:46:08 +01:00
$fulllink = $urlwithroot . '/document.php' . ( $paramlink ? '?' . $paramlink : '' );
2018-02-13 13:55:36 +01:00
2019-10-03 21:32:55 +02:00
print img_picto ( $langs -> trans ( " FileSharedViaALink " ), 'globe' ) . ' ' ;
2019-02-21 22:27:56 +01:00
print '<input type="text" class="quatrevingtpercent minwidth200imp" id="downloadlink" name="downloadexternallink" value="' . dol_escape_htmltag ( $fulllink ) . '">' ;
2018-02-13 13:55:36 +01:00
}
else
{
//print '<span class="opacitymedium">'.$langs->trans("FileNotShared").'</span>';
}
}
}
print '</td>' ;
// Actions buttons
2019-11-12 09:46:08 +01:00
if ( ! $editline )
2015-06-19 00:52:58 +02:00
{
2017-10-16 08:47:05 +02:00
// Delete or view link
// ($param must start with &)
2019-05-10 19:38:08 +02:00
print '<td class="valignmiddle right actionbuttons nowraponall"><!-- action on files -->' ;
2020-06-05 13:41:33 +02:00
if ( $useinecm == 1 || $useinecm == 5 ) // ECM manual tree only
2017-10-16 08:47:05 +02:00
{
2020-06-05 13:41:33 +02:00
// $section is inside $param
$newparam .= preg_replace ( '/&file=.*$/' , '' , $param ); // We don't need param file=
$backtopage = DOL_URL_ROOT . '/ecm/index.php?§ion_dir=' . urlencode ( $relativepath ) . $newparam ;
print '<a class="editfielda" href="' . DOL_URL_ROOT . '/ecm/file_card.php?urlfile=' . urlencode ( $file [ 'name' ]) . $param . '&backtopage=' . urlencode ( $backtopage ) . '" class="editfilelink" rel="' . urlencode ( $file [ 'name' ]) . '">' . img_edit ( 'default' , 0 , 'class="paddingrightonly"' ) . '</a>' ;
2017-10-16 08:47:05 +02:00
}
2020-06-05 13:41:33 +02:00
2020-06-03 11:20:59 +02:00
if ( empty ( $useinecm ) || $useinecm == 2 || $useinecm == 6 ) // 6=Media file manager
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$newmodulepart = $modulepart ;
if ( in_array ( $modulepart , array ( 'product' , 'produit' , 'service' ))) $newmodulepart = 'produit|service' ;
2017-10-16 08:47:05 +02:00
2019-11-12 09:46:08 +01:00
if ( ! $disablecrop && image_format_supported ( $file [ 'name' ]) > 0 )
2017-10-16 08:47:05 +02:00
{
if ( $permtoeditline )
{
// Link to resize
2020-06-03 11:20:59 +02:00
$moreparaminurl = '' ;
if ( $object -> id > 0 ) {
$moreparaminurl = '&id=' . $object -> id ;
} elseif ( GETPOST ( 'website' , 'alpha' )) {
$moreparaminurl = '&website=' . GETPOST ( 'website' , 'alpha' );
}
print '<a class="editfielda" href="' . DOL_URL_ROOT . '/core/photos_resize.php?modulepart=' . urlencode ( $newmodulepart ) . $moreparaminurl . '&file=' . urlencode ( $relativepath . $fileinfo [ 'filename' ] . '.' . strtolower ( $fileinfo [ 'extension' ])) . '" title="' . dol_escape_htmltag ( $langs -> trans ( " ResizeOrCrop " )) . '">' . img_picto ( $langs -> trans ( " ResizeOrCrop " ), 'resize' , 'class="paddingrightonly"' ) . '</a>' ;
2017-10-16 08:47:05 +02:00
}
}
if ( $permtoeditline )
{
2019-11-12 09:46:08 +01:00
$paramsectiondir = ( in_array ( $modulepart , array ( 'medias' , 'ecm' )) ? '§ion_dir=' . urlencode ( $relativepath ) : '' );
2020-05-04 12:43:47 +02:00
print '<a class="editfielda reposition" href="' . (( $useinecm == 1 || $useinecm == 5 ) ? '#' : ( $url . '?action=editfile&urlfile=' . urlencode ( $filepath ) . $paramsectiondir . $param )) . '" class="editfilelink" rel="' . $filepath . '">' . img_edit ( 'default' , 0 , 'class="paddingrightonly"' ) . '</a>' ;
2017-10-16 08:47:05 +02:00
}
}
if ( $permonobject )
{
2019-11-12 09:46:08 +01:00
$useajax = 1 ;
if ( ! empty ( $conf -> dol_use_jmobile )) $useajax = 0 ;
if ( empty ( $conf -> use_javascript_ajax )) $useajax = 0 ;
if ( ! empty ( $conf -> global -> MAIN_ECM_DISABLE_JS )) $useajax = 0 ;
print '<a href="' . ((( $useinecm && $useinecm != 6 ) && $useajax ) ? '#' : ( $url . '?action=delete&urlfile=' . urlencode ( $filepath ) . $param )) . '" class="reposition deletefilelink" rel="' . $filepath . '">' . img_delete () . '</a>' ;
2017-10-16 08:47:05 +02:00
}
print " </td> " ;
if ( empty ( $disablemove ))
{
2018-09-02 16:45:03 +02:00
if ( $nboffiles > 1 && $conf -> browser -> layout != 'phone' ) {
2019-01-20 23:36:39 +01:00
print '<td class="linecolmove tdlineupdown center">' ;
2017-10-16 08:47:05 +02:00
if ( $i > 0 ) {
2019-01-27 11:55:16 +01:00
print '<a class="lineupdown" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $this -> id . '&action=up&rowid=' . $line -> id . '">' . img_up ( 'default' , 0 , 'imgupforline' ) . '</a>' ;
2017-10-16 08:47:05 +02:00
}
2019-11-12 09:46:08 +01:00
if ( $i < $nboffiles - 1 ) {
2019-01-27 11:55:16 +01:00
print '<a class="lineupdown" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $this -> id . '&action=down&rowid=' . $line -> id . '">' . img_down ( 'default' , 0 , 'imgdownforline' ) . '</a>' ;
2017-10-16 08:47:05 +02:00
}
print '</td>' ;
}
else {
2019-11-12 09:46:08 +01:00
print '<td' . (( $conf -> browser -> layout != 'phone' && empty ( $disablemove )) ? ' class="linecolmove tdlineupdown center"' : ' class="linecolmove center"' ) . '>' ;
2017-10-16 08:47:05 +02:00
print '</td>' ;
}
2019-02-03 14:29:45 +01:00
}
2015-06-19 00:52:58 +02:00
}
2016-09-07 01:54:16 +02:00
else
2013-10-20 20:58:38 +02:00
{
2017-10-16 08:47:05 +02:00
print '<td class="right">' ;
2018-02-13 13:55:36 +01:00
print '<input type="hidden" name="ecmfileid" value="' . $filearray [ $key ][ 'rowid' ] . '">' ;
2017-10-16 08:47:05 +02:00
print '<input type="submit" class="button" name="renamefilesave" value="' . dol_escape_htmltag ( $langs -> trans ( " Save " )) . '">' ;
print '<input type="submit" class="button" name="cancel" value="' . dol_escape_htmltag ( $langs -> trans ( " Cancel " )) . '">' ;
print '</td>' ;
if ( empty ( $disablemove )) print '<td class="right"></td>' ;
2013-10-20 20:58:38 +02:00
}
2012-09-11 17:01:54 +02:00
print " </tr> \n " ;
2017-06-10 13:44:20 +02:00
2016-12-20 19:42:25 +01:00
$i ++ ;
2012-09-11 17:01:54 +02:00
}
}
if ( $nboffiles == 0 )
{
2019-11-12 09:46:08 +01:00
$colspan = '6' ;
if ( empty ( $disablemove )) $colspan ++ ; // 6 columns or 7
2018-02-13 13:55:36 +01:00
print '<tr class="oddeven"><td colspan="' . $colspan . '" class="opacitymedium">' ;
2012-09-11 17:01:54 +02:00
if ( empty ( $textifempty )) print $langs -> trans ( " NoFileFound " );
else print $textifempty ;
print '</td></tr>' ;
}
print " </table> " ;
2017-04-14 13:21:02 +02:00
print '</div>' ;
2017-06-10 13:44:20 +02:00
2018-01-12 15:33:21 +01:00
if ( $nboflines > 1 && is_object ( $object )) {
2019-11-12 09:46:08 +01:00
if ( ! empty ( $conf -> use_javascript_ajax ) && $permtoeditline ) {
2017-10-16 08:47:05 +02:00
$table_element_line = 'ecm_files' ;
2019-11-12 09:46:08 +01:00
include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php' ;
2016-12-20 19:42:25 +01:00
}
2017-06-10 13:44:20 +02:00
}
2018-02-13 15:47:17 +01:00
print ajax_autoselect ( 'downloadlink' );
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'action' , 'aZ09' ) == 'editfile' && $permtoeditline )
2016-09-07 01:54:16 +02:00
{
2017-10-16 08:47:05 +02:00
print '</form>' ;
2016-09-07 01:54:16 +02:00
}
2017-06-10 13:44:20 +02:00
2012-09-11 17:01:54 +02:00
return $nboffiles ;
}
}
2010-05-03 10:43:32 +02:00
2011-04-17 20:41:26 +02:00
2019-02-27 20:45:07 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2017-10-16 08:47:05 +02:00
/**
* Show list of documents in a directory
*
* @ param string $upload_dir Directory that was scanned
* @ param array $filearray Array of files loaded by dol_dir_list function before calling this function
* @ param string $modulepart Value for modulepart used by download wrapper
* @ param string $param Parameters on sort links
* @ param int $forcedownload Force to open dialog box " Save As " when clicking on file
* @ param string $relativepath Relative path of docs ( autodefined if not provided )
2019-11-04 15:33:49 +01:00
* @ param int $permissiontodelete Permission to delete
2017-10-16 08:47:05 +02:00
* @ param int $useinecm Change output for use in ecm module
* @ param int $textifempty Text to show if filearray is empty
* @ param int $maxlength Maximum length of file name shown
* @ param string $url Full url to use for click links ( '' = autodetect )
* @ param int $addfilterfields Add line with filters
* @ return int < 0 if KO , nb of files shown if OK
2019-04-04 18:33:12 +02:00
* @ see list_of_documents ()
2017-10-16 08:47:05 +02:00
*/
2019-11-04 15:33:49 +01:00
public function list_of_autoecmfiles ( $upload_dir , $filearray , $modulepart , $param , $forcedownload = 0 , $relativepath = '' , $permissiontodelete = 1 , $useinecm = 0 , $textifempty = '' , $maxlength = 0 , $url = '' , $addfilterfields = 0 )
2017-10-16 08:47:05 +02:00
{
2018-09-04 22:52:55 +02:00
// phpcs:enable
2017-10-16 08:47:05 +02:00
global $user , $conf , $langs , $form ;
global $sortfield , $sortorder ;
2017-08-04 13:07:15 +02:00
global $search_doc_ref ;
2011-04-17 20:41:26 +02:00
2017-10-16 08:47:05 +02:00
dol_syslog ( get_class ( $this ) . '::list_of_autoecmfiles upload_dir=' . $upload_dir . ' modulepart=' . $modulepart );
2012-06-24 17:49:52 +02:00
2017-10-16 08:47:05 +02:00
// Show list of documents
2019-01-15 15:48:28 +01:00
if ( empty ( $useinecm ) || $useinecm == 6 ) print load_fiche_titre ( $langs -> trans ( " AttachedFiles " ));
2019-11-12 09:46:08 +01:00
if ( empty ( $url )) $url = $_SERVER [ " PHP_SELF " ];
2017-08-04 13:07:15 +02:00
2019-11-12 09:46:08 +01:00
if ( ! empty ( $addfilterfields ))
2017-10-16 08:47:05 +02:00
{
print '<form action="' . $_SERVER [ 'PHP_SELF' ] . '">' ;
2019-12-01 10:20:11 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
2017-10-16 08:47:05 +02:00
print '<input type="hidden" name="module" value="' . $modulepart . '">' ;
}
2017-08-04 13:07:15 +02:00
print '<div class="div-table-responsive-no-min">' ;
2017-10-16 08:47:05 +02:00
print '<table width="100%" class="noborder">' . " \n " ;
2019-11-12 09:46:08 +01:00
if ( ! empty ( $addfilterfields ))
2017-10-16 08:47:05 +02:00
{
print '<tr class="liste_titre nodrag nodrop">' ;
2020-04-05 02:39:40 +02:00
print '<td class="liste_titre"></td>' ;
print '<td class="liste_titre"><input type="text" class="maxwidth100onsmartphone" name="search_doc_ref" value="' . dol_escape_htmltag ( $search_doc_ref ) . '"></td>' ;
print '<td class="liste_titre"></td>' ;
print '<td class="liste_titre"></td>' ;
2017-08-04 13:07:15 +02:00
// Action column
2019-04-21 19:54:30 +02:00
print '<td class="liste_titre center">' ;
2019-11-12 09:46:08 +01:00
$searchpicto = $form -> showFilterButtons ();
2017-08-04 13:07:15 +02:00
print $searchpicto ;
print '</td>' ;
2017-10-16 08:47:05 +02:00
print " </tr> \n " ;
}
print '<tr class="liste_titre">' ;
2019-11-12 09:46:08 +01:00
$sortref = " fullname " ;
if ( $modulepart == 'invoice_supplier' ) $sortref = 'level1name' ;
2019-04-21 19:54:30 +02:00
print_liste_field_titre ( " Ref " , $url , $sortref , " " , $param , '' , $sortfield , $sortorder );
print_liste_field_titre ( " Documents2 " , $url , " name " , " " , $param , '' , $sortfield , $sortorder );
print_liste_field_titre ( " Size " , $url , " size " , " " , $param , '' , $sortfield , $sortorder , 'right ' );
print_liste_field_titre ( " Date " , $url , " date " , " " , $param , '' , $sortfield , $sortorder , 'center ' );
2019-01-27 11:55:16 +01:00
print_liste_field_titre ( '' , '' , '' );
2017-10-16 08:47:05 +02:00
print '</tr>' . " \n " ;
// To show ref or specific information according to view to show (defined by $module)
if ( $modulepart == 'company' )
{
include_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Societe ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'invoice' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Facture ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'invoice_supplier' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new FactureFournisseur ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'propal' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Propal ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'supplier_proposal' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/supplier_proposal/class/supplier_proposal.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new SupplierProposal ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'order' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Commande ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'order_supplier' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.commande.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new CommandeFournisseur ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'contract' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Contrat ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'product' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Product ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'tax' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/compta/sociales/class/chargesociales.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new ChargeSociales ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'project' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Project ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'fichinter' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/fichinter/class/fichinter.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Fichinter ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'user' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new User ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'expensereport' )
2017-10-16 08:47:05 +02:00
{
include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new ExpenseReport ( $this -> db );
2017-10-16 08:47:05 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( $modulepart == 'holiday' )
2018-12-01 19:39:00 +01:00
{
include_once DOL_DOCUMENT_ROOT . '/holiday/class/holiday.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Holiday ( $this -> db );
2018-12-01 19:39:00 +01:00
}
2019-04-21 19:54:30 +02:00
elseif ( $modulepart == 'banque' )
{
include_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php' ;
2019-11-12 09:46:08 +01:00
$object_instance = new Account ( $this -> db );
2019-04-21 19:54:30 +02:00
}
2017-10-16 08:47:05 +02:00
2019-11-12 09:46:08 +01:00
foreach ( $filearray as $key => $file )
2017-10-16 08:47:05 +02:00
{
if ( ! is_dir ( $file [ 'name' ])
&& $file [ 'name' ] != '.'
&& $file [ 'name' ] != '..'
&& $file [ 'name' ] != 'CVS'
2019-11-12 09:46:08 +01:00
&& ! preg_match ( '/\.meta$/i' , $file [ 'name' ]))
2017-10-16 08:47:05 +02:00
{
// Define relative path used to store the file
2019-11-12 09:46:08 +01:00
$relativefile = preg_replace ( '/' . preg_quote ( $upload_dir . '/' , '/' ) . '/' , '' , $file [ 'fullname' ]);
2012-02-06 14:34:58 +01:00
2019-11-12 09:46:08 +01:00
$id = 0 ; $ref = '' ; $label = '' ;
2012-02-06 14:34:58 +01:00
2017-10-16 08:47:05 +02:00
// To show ref or specific information according to view to show (defined by $module)
2019-11-12 09:46:08 +01:00
if ( $modulepart == 'company' || $modulepart == 'tax' ) { preg_match ( '/(\d+)\/[^\/]+$/' , $relativefile , $reg ); $id = ( isset ( $reg [ 1 ]) ? $reg [ 1 ] : '' ); }
elseif ( $modulepart == 'invoice_supplier' ) { preg_match ( '/([^\/]+)\/[^\/]+$/' , $relativefile , $reg ); $ref = ( isset ( $reg [ 1 ]) ? $reg [ 1 ] : '' ); if ( is_numeric ( $ref )) { $id = $ref ; $ref = '' ; } } // $ref may be also id with old supplier invoices
elseif ( $modulepart == 'user' || $modulepart == 'holiday' ) { preg_match ( '/(.*)\/[^\/]+$/' , $relativefile , $reg ); $id = ( isset ( $reg [ 1 ]) ? $reg [ 1 ] : '' ); }
2019-04-21 19:54:30 +02:00
elseif ( in_array ( $modulepart , array ( 'invoice' , 'propal' , 'supplier_proposal' , 'order' , 'order_supplier' , 'contract' , 'product' , 'project' , 'fichinter' , 'expensereport' , 'banque' )))
2019-02-27 21:41:55 +01:00
{
2019-11-12 09:46:08 +01:00
preg_match ( '/(.*)\/[^\/]+$/' , $relativefile , $reg ); $ref = ( isset ( $reg [ 1 ]) ? $reg [ 1 ] : '' );
2019-02-27 21:41:55 +01:00
}
2019-04-21 19:54:30 +02:00
else
{
//print 'Error: Value for modulepart = '.$modulepart.' is not yet implemented in function list_of_autoecmfiles'."\n";
}
2019-02-28 23:19:58 +01:00
2019-11-12 09:46:08 +01:00
if ( ! $id && ! $ref ) continue ;
$found = 0 ;
if ( ! empty ( $this -> cache_objects [ $modulepart . '_' . $id . '_' . $ref ]))
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$found = 1 ;
2017-10-16 08:47:05 +02:00
}
else
{
//print 'Fetch '.$id." - ".$ref.'<br>';
if ( $id ) {
$result = $object_instance -> fetch ( $id );
} else {
//fetchOneLike looks for objects with wildcards in its reference.
//It is useful for those masks who get underscores instead of their actual symbols
//fetchOneLike requires some info in the object. If it doesn't have it, then 0 is returned
2019-04-21 19:54:30 +02:00
//that's why we look only into fetchOneLike when fetch returns 0
2017-10-16 08:47:05 +02:00
if ( ! $result = $object_instance -> fetch ( '' , $ref )) {
$result = $object_instance -> fetchOneLike ( $ref );
}
}
2014-12-25 21:47:39 +01:00
2019-04-21 19:54:30 +02:00
if ( $result > 0 ) { // Save object loaded into a cache
2019-11-12 09:46:08 +01:00
$found = 1 ; $this -> cache_objects [ $modulepart . '_' . $id . '_' . $ref ] = clone $object_instance ;
2015-09-24 16:32:48 +02:00
}
2019-11-12 09:46:08 +01:00
if ( $result == 0 ) { $found = 1 ; $this -> cache_objects [ $modulepart . '_' . $id . '_' . $ref ] = 'notfound' ; unset ( $filearray [ $key ]); }
2017-10-16 08:47:05 +02:00
}
2019-11-12 09:46:08 +01:00
if ( ! $found > 0 || ! is_object ( $this -> cache_objects [ $modulepart . '_' . $id . '_' . $ref ])) continue ; // We do not show orphelins files
2017-10-16 08:47:05 +02:00
print '<!-- Line list_of_autoecmfiles ' . $key . ' -->' . " \n " ;
print '<tr class="oddeven">' ;
print '<td>' ;
2019-01-27 11:55:16 +01:00
if ( $found > 0 && is_object ( $this -> cache_objects [ $modulepart . '_' . $id . '_' . $ref ])) print $this -> cache_objects [ $modulepart . '_' . $id . '_' . $ref ] -> getNomUrl ( 1 , 'document' );
2019-11-12 09:46:08 +01:00
else print $langs -> trans ( " ObjectDeleted " , ( $id ? $id : $ref ));
2017-10-16 08:47:05 +02:00
//$modulesubdir=dol_sanitizeFileName($ref);
2019-11-12 09:46:08 +01:00
$modulesubdir = dirname ( $relativefile );
2017-10-16 08:47:05 +02:00
//$filedir=$conf->$modulepart->dir_output . '/' . dol_sanitizeFileName($obj->ref);
2019-11-12 09:46:08 +01:00
$filedir = $file [ 'path' ];
2017-10-16 08:47:05 +02:00
//$urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid;
//print $formfile->getDocumentsLink($modulepart, $filename, $filedir);
print '</td>' ;
// File
print '<td>' ;
//print "XX".$file['name']; //$file['name'] must be utf8
2017-11-10 20:20:59 +01:00
print '<a href="' . DOL_URL_ROOT . '/document.php?modulepart=' . $modulepart ;
2017-10-16 08:47:05 +02:00
if ( $forcedownload ) print '&attachment=1' ;
print '&file=' . urlencode ( $relativefile ) . '">' ;
2019-01-27 11:55:16 +01:00
print img_mime ( $file [ 'name' ], $file [ 'name' ] . ' (' . dol_print_size ( $file [ 'size' ], 0 , 0 ) . ')' );
print dol_trunc ( $file [ 'name' ], $maxlength , 'middle' );
2017-10-16 08:47:05 +02:00
print '</a>' ;
2018-01-12 16:28:10 +01:00
//print $this->getDocumentsLink($modulepart, $modulesubdir, $filedir, '^'.preg_quote($file['name'],'/').'$');
print $this -> showPreview ( $file , $modulepart , $file [ 'relativename' ]);
2017-10-16 08:47:05 +02:00
print " </td> \n " ;
2019-01-27 11:55:16 +01:00
print '<td class="right">' . dol_print_size ( $file [ 'size' ], 1 , 1 ) . '</td>' ;
print '<td class="center">' . dol_print_date ( $file [ 'date' ], " dayhour " ) . '</td>' ;
2019-01-20 23:36:39 +01:00
print '<td class="right">' ;
2019-01-15 15:48:28 +01:00
//if (! empty($useinecm) && $useinecm != 6) print '<a data-ajax="false" href="'.DOL_URL_ROOT.'/document.php?modulepart='.$modulepart;
2017-10-16 08:47:05 +02:00
//if ($forcedownload) print '&attachment=1';
//print '&file='.urlencode($relativefile).'">';
//print img_view().'</a> ';
2019-11-04 15:33:49 +01:00
//if ($permissiontodelete) print '<a href="'.$url.'?id='.$object->id.'§ion='.$_REQUEST["section"].'&action=delete&urlfile='.urlencode($file['name']).'">'.img_delete().'</a>';
2017-10-16 08:47:05 +02:00
//else print ' ';
print " </td></tr> \n " ;
}
}
if ( count ( $filearray ) == 0 )
{
2018-02-21 11:02:45 +01:00
print '<tr class="oddeven"><td colspan="5">' ;
2020-01-24 15:26:18 +01:00
if ( empty ( $textifempty )) print '<span class="opacitymedium">' . $langs -> trans ( " NoFileFound " ) . '</span>' ;
else print '<span class="opacitymedium">' . $textifempty . '</span>' ;
2017-10-16 08:47:05 +02:00
print '</td></tr>' ;
}
print " </table> " ;
print '</div>' ;
2019-11-12 09:46:08 +01:00
if ( ! empty ( $addfilterfields )) print '</form>' ;
2017-10-16 08:47:05 +02:00
// Fin de zone
}
/**
* Show form to upload a new file with jquery fileupload .
* This form use the fileupload . php file .
*
* @ param Object $object Object to use
* @ return void
*/
private function _formAjaxFileUpload ( $object )
{
2018-11-13 14:44:10 +01:00
global $langs , $conf ;
2017-10-16 08:47:05 +02:00
// PHP post_max_size
$post_max_size = ini_get ( 'post_max_size' );
$mul_post_max_size = substr ( $post_max_size , - 1 );
$mul_post_max_size = ( $mul_post_max_size == 'M' ? 1048576 : ( $mul_post_max_size == 'K' ? 1024 : ( $mul_post_max_size == 'G' ? 1073741824 : 1 )));
$post_max_size = $mul_post_max_size * ( int ) $post_max_size ;
// PHP upload_max_filesize
$upload_max_filesize = ini_get ( 'upload_max_filesize' );
$mul_upload_max_filesize = substr ( $upload_max_filesize , - 1 );
$mul_upload_max_filesize = ( $mul_upload_max_filesize == 'M' ? 1048576 : ( $mul_upload_max_filesize == 'K' ? 1024 : ( $mul_upload_max_filesize == 'G' ? 1073741824 : 1 )));
$upload_max_filesize = $mul_upload_max_filesize * ( int ) $upload_max_filesize ;
// Max file size
2019-11-12 09:46:08 +01:00
$max_file_size = (( $post_max_size < $upload_max_filesize ) ? $post_max_size : $upload_max_filesize );
2017-10-16 08:47:05 +02:00
// Include main
include DOL_DOCUMENT_ROOT . '/core/tpl/ajax/fileupload_main.tpl.php' ;
// Include template
include DOL_DOCUMENT_ROOT . '/core/tpl/ajax/fileupload_view.tpl.php' ;
}
/**
* Show array with linked files
*
* @ param Object $object Object
2019-11-04 15:33:49 +01:00
* @ param int $permissiontodelete Deletion is allowed
2017-10-16 08:47:05 +02:00
* @ param string $action Action
* @ param string $selected ? ? ?
* @ param string $param More param to add into URL
* @ return int Number of links
*/
2019-11-04 15:33:49 +01:00
public function listOfLinks ( $object , $permissiontodelete = 1 , $action = null , $selected = null , $param = '' )
2017-10-16 08:47:05 +02:00
{
global $user , $conf , $langs , $user ;
global $sortfield , $sortorder ;
$langs -> load ( " link " );
2019-11-12 09:46:08 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php' ;
2017-10-16 08:47:05 +02:00
$link = new Link ( $this -> db );
$links = array ();
if ( $sortfield == " name " ) {
$sortfield = " label " ;
} elseif ( $sortfield == " date " ) {
$sortfield = " datea " ;
} else {
$sortfield = null ;
}
$res = $link -> fetchAll ( $links , $object -> element , $object -> id , $sortfield , $sortorder );
2019-11-12 09:46:08 +01:00
$param .= ( isset ( $object -> id ) ? '&id=' . $object -> id : '' );
2017-10-16 08:47:05 +02:00
2019-10-21 15:49:08 +02:00
print '<!-- listOfLinks -->' . " \n " ;
2017-10-16 08:47:05 +02:00
// Show list of associated links
2020-04-13 04:14:28 +02:00
print load_fiche_titre ( $langs -> trans ( " LinkedFiles " ), '' , 'external-link-square-alt' , 0 , '' , 'table-list-of-links' );
2017-10-16 08:47:05 +02:00
2019-11-12 09:46:08 +01:00
print '<form action="' . $_SERVER [ 'PHP_SELF' ] . ( $param ? '?' . $param : '' ) . '" method="POST">' ;
2019-12-01 10:20:11 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
2017-10-16 08:47:05 +02:00
2019-04-10 11:39:54 +02:00
print '<table width="100%" class="liste noborder nobottom">' ;
2017-10-16 08:47:05 +02:00
print '<tr class="liste_titre">' ;
2019-02-23 09:33:21 +01:00
print_liste_field_titre (
2017-10-16 08:47:05 +02:00
$langs -> trans ( " Links " ),
$_SERVER [ 'PHP_SELF' ],
" name " ,
" " ,
$param ,
2019-04-10 11:39:54 +02:00
'' ,
2017-10-16 08:47:05 +02:00
$sortfield ,
2019-04-10 11:39:54 +02:00
$sortorder ,
''
2017-10-16 08:47:05 +02:00
);
2019-02-23 09:33:21 +01:00
print_liste_field_titre (
2017-10-16 08:47:05 +02:00
" " ,
" " ,
" " ,
" " ,
" " ,
2019-04-10 11:39:54 +02:00
'' ,
'' ,
'' ,
'right '
2017-10-16 08:47:05 +02:00
);
2019-02-23 09:33:21 +01:00
print_liste_field_titre (
2017-10-16 08:47:05 +02:00
$langs -> trans ( " Date " ),
$_SERVER [ 'PHP_SELF' ],
" date " ,
" " ,
$param ,
2019-04-10 11:39:54 +02:00
'' ,
2017-10-16 08:47:05 +02:00
$sortfield ,
2019-04-10 11:39:54 +02:00
$sortorder ,
'center '
2017-10-16 08:47:05 +02:00
);
2019-02-23 09:33:21 +01:00
print_liste_field_titre (
2017-10-16 08:47:05 +02:00
'' ,
$_SERVER [ 'PHP_SELF' ],
" " ,
" " ,
$param ,
2019-04-10 11:39:54 +02:00
'' ,
'' ,
'' ,
'center '
2017-10-16 08:47:05 +02:00
);
2019-01-27 11:55:16 +01:00
print_liste_field_titre ( '' , '' , '' );
2017-10-16 08:47:05 +02:00
print '</tr>' ;
$nboflinks = count ( $links );
if ( $nboflinks > 0 ) include_once DOL_DOCUMENT_ROOT . '/core/lib/images.lib.php' ;
foreach ( $links as $link )
{
2017-11-19 20:44:57 +01:00
print '<tr class="oddeven">' ;
2017-10-16 08:47:05 +02:00
//edit mode
if ( $action == 'update' && $selected === $link -> id )
2014-03-14 02:07:54 +01:00
{
2017-10-16 08:47:05 +02:00
print '<td>' ;
2019-11-12 09:46:08 +01:00
print '<input type="hidden" name="id" value="' . $object -> id . '">' ;
print '<input type="hidden" name="linkid" value="' . $link -> id . '">' ;
2017-10-16 08:47:05 +02:00
print '<input type="hidden" name="action" value="confirm_updateline">' ;
2019-11-12 09:46:08 +01:00
print $langs -> trans ( 'Link' ) . ': <input type="text" name="link" value="' . $link -> url . '">' ;
2017-10-16 08:47:05 +02:00
print '</td>' ;
print '<td>' ;
2019-11-12 09:46:08 +01:00
print $langs -> trans ( 'Label' ) . ': <input type="text" name="label" value="' . dol_escape_htmltag ( $link -> label ) . '">' ;
2017-10-16 08:47:05 +02:00
print '</td>' ;
2019-11-12 09:46:08 +01:00
print '<td class="center">' . dol_print_date ( dol_now (), " dayhour " , " tzuser " ) . '</td>' ;
2019-01-20 23:36:39 +01:00
print '<td class="right"></td>' ;
print '<td class="right">' ;
2019-11-12 09:46:08 +01:00
print '<input type="submit" name="save" class="button" value="' . dol_escape_htmltag ( $langs -> trans ( 'Save' )) . '">' ;
print '<input type="submit" name="cancel" class="button" value="' . dol_escape_htmltag ( $langs -> trans ( 'Cancel' )) . '">' ;
2017-10-16 08:47:05 +02:00
print '</td>' ;
}
else
{
print '<td>' ;
2019-10-03 21:32:55 +02:00
print img_picto ( '' , 'globe' ) . ' ' ;
2019-11-12 09:46:08 +01:00
print '<a data-ajax="false" href="' . $link -> url . '" target="_blank">' ;
2019-08-16 16:41:53 +02:00
print dol_escape_htmltag ( $link -> label );
2017-10-16 08:47:05 +02:00
print '</a>' ;
print '</td>' . " \n " ;
2019-01-20 23:36:39 +01:00
print '<td class="right"></td>' ;
2019-11-12 09:46:08 +01:00
print '<td class="center">' . dol_print_date ( $link -> datea , " dayhour " , " tzuser " ) . '</td>' ;
2019-01-20 23:36:39 +01:00
print '<td class="center"></td>' ;
print '<td class="right">' ;
2020-03-31 13:52:02 +02:00
print '<a href="' . $_SERVER [ 'PHP_SELF' ] . '?action=update&linkid=' . $link -> id . $param . '" class="editfilelink editfielda reposition" >' . img_edit () . '</a>' ; // id= is included into $param
2019-11-04 15:33:49 +01:00
if ( $permissiontodelete ) {
2020-03-31 13:52:02 +02:00
print ' <a class="deletefilelink" href="' . $_SERVER [ 'PHP_SELF' ] . '?action=delete&linkid=' . $link -> id . $param . '">' . img_delete () . '</a>' ; // id= is included into $param
2017-10-16 08:47:05 +02:00
} else {
print ' ' ;
}
print '</td>' ;
}
print " </tr> \n " ;
}
if ( $nboflinks == 0 )
{
2018-02-21 11:02:45 +01:00
print '<tr class="oddeven"><td colspan="5" class="opacitymedium">' ;
2017-10-16 08:47:05 +02:00
print $langs -> trans ( " NoLinkFound " );
print '</td></tr>' ;
}
print " </table> " ;
2016-08-02 03:35:22 +02:00
2017-10-16 08:47:05 +02:00
print '</form>' ;
return $nboflinks ;
}
/**
* Show detail icon with link for preview
*
2018-01-12 16:28:10 +01:00
* @ param array $file Array with data of file . Example : array ( 'name' =>... )
2017-10-16 08:47:05 +02:00
* @ param string $modulepart propal , facture , facture_fourn , ...
* @ param string $relativepath Relative path of docs
2019-02-23 09:33:21 +01:00
* @ param integer $ruleforpicto Rule for picto : 0 = Use the generic preview picto , 1 = Use the picto of mime type of file )
2017-10-16 08:47:05 +02:00
* @ param string $param More param on http links
* @ return string $out Output string with HTML
*/
2019-01-27 15:20:16 +01:00
public function showPreview ( $file , $modulepart , $relativepath , $ruleforpicto = 0 , $param = '' )
2017-10-16 08:47:05 +02:00
{
global $langs , $conf ;
2010-05-03 10:43:32 +02:00
2019-11-12 09:46:08 +01:00
$out = '' ;
if ( $conf -> browser -> layout != 'phone' && ! empty ( $conf -> use_javascript_ajax ))
2017-10-16 08:47:05 +02:00
{
2019-11-12 09:46:08 +01:00
$urladvancedpreview = getAdvancedPreviewUrl ( $modulepart , $relativepath , 1 , $param ); // Return if a file is qualified for preview.
2017-10-16 08:47:05 +02:00
if ( count ( $urladvancedpreview ))
2014-03-14 02:07:54 +01:00
{
2019-11-12 09:46:08 +01:00
$out .= '<a class="pictopreview ' . $urladvancedpreview [ 'css' ] . '" href="' . $urladvancedpreview [ 'url' ] . '"' . ( empty ( $urladvancedpreview [ 'mime' ]) ? '' : ' mime="' . $urladvancedpreview [ 'mime' ] . '"' ) . ' ' . ( empty ( $urladvancedpreview [ 'target' ]) ? '' : ' target="' . $urladvancedpreview [ 'target' ] . '"' ) . '>' ;
2017-10-16 08:47:05 +02:00
//$out.= '<a class="pictopreview">';
2017-11-10 20:20:59 +01:00
if ( empty ( $ruleforpicto ))
{
//$out.= img_picto($langs->trans('Preview').' '.$file['name'], 'detail');
2019-11-12 09:46:08 +01:00
$out .= '<span class="fa fa-search-plus" style="color: gray"></span>' ;
2017-11-10 20:20:59 +01:00
}
2019-11-12 09:46:08 +01:00
else $out .= img_mime ( $relativepath , $langs -> trans ( 'Preview' ) . ' ' . $file [ 'name' ]);
$out .= '</a>' ;
2017-10-16 08:47:05 +02:00
}
}
return $out ;
}
2010-05-03 10:43:32 +02:00
}