30if (!defined(
'NOTOKENRENEWAL')) {
31 define(
'NOTOKENRENEWAL', 1);
33if (!defined(
'NOREQUIREMENU')) {
34 define(
'NOREQUIREMENU',
'1');
36if (!defined(
'NOREQUIREHTML')) {
37 define(
'NOREQUIREHTML',
'1');
39if (!defined(
'NOREQUIREAJAX')) {
40 define(
'NOREQUIREAJAX',
'1');
51if (!isset($mode) || $mode !=
'noajax') {
52 $res = @include
'../../main.inc.php';
53 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
54 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
55 include_once DOL_DOCUMENT_ROOT.
'/core/lib/treeview.lib.php';
56 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
57 include_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmdirectory.class.php';
59 $openeddir =
GETPOST(
'openeddir');
60 $modulepart =
GETPOST(
'modulepart');
63 $preopened =
GETPOST(
'preopened');
65 if ($selecteddir !=
'/') {
66 $selecteddir = preg_replace(
'/\/$/',
'', $selecteddir);
71 $openeddir =
GETPOST(
'openeddir');
72 $modulepart =
GETPOST(
'modulepart');
75 $preopened =
GETPOST(
'preopened');
77 if ($selecteddir !=
'/') {
78 $selecteddir = preg_replace(
'/\/$/',
'', $selecteddir);
81 $url = DOL_URL_ROOT.
'/ecm/index.php';
85$websitekey =
GETPOST(
'websitekey',
'alpha');
92$fullpathselecteddir =
'<none>';
93$fullpathpreopened =
'';
94if ($modulepart ==
'ecm') {
95 $fullpathselecteddir =
$conf->ecm->dir_output.
'/'.($selecteddir !=
'/' ? $selecteddir :
'');
96 $fullpathpreopened =
$conf->ecm->dir_output.
'/'.($preopened !=
'/' ? $preopened :
'');
97} elseif ($modulepart ==
'medias' || $modulepart ==
'website') {
98 $fullpathselecteddir = $dolibarr_main_data_root.
'/medias/'.($selecteddir !=
'/' ? $selecteddir :
'');
99 $fullpathpreopened = $dolibarr_main_data_root.
'/medias/'.($preopened !=
'/' ? $preopened :
'');
105if (preg_match(
'/\.\./', $fullpathselecteddir) || preg_match(
'/[<>|]/', $fullpathselecteddir)) {
106 dol_syslog(
"Refused to deliver file ".$original_file);
112if (empty($modulepart)) {
113 $modulepart = $module;
117if ($modulepart ==
'ecm') {
118 if (!$user->hasRight(
'ecm',
'read')) {
121} elseif ($modulepart ==
'medias' || $modulepart ==
'website') {
139if (!isset($mode) || $mode !=
'noajax') {
144$userstatic =
new User($db);
145$form =
new Form($db);
149if (empty($sqltree)) {
150 $sqltree = $ecmdirstatic->get_full_arbo(0);
154$current_ecmdir_id = -1;
155foreach ($sqltree as $keycursor => $val) {
157 if ($val[
'fullrelativename'] == $selecteddir) {
158 $current_ecmdir_id = $keycursor;
164 treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened);
169 print
"\n<!-- JS CODE TO ENABLE Tooltips on all object with class classfortooltip (reload into ajaxdirtree) -->\n";
170 print
'<script nonce="'.getNonce().
'" type="text/javascript">
171 jQuery(document).ready(function () {
172 jQuery(".classfortooltip").tooltip({
173 show: { collision: "flipfit", effect:\'toggle\', delay:50 },
174 hide: { delay: 50 }, /* If I enable effect:\'toggle\' here, a bug appears: the tooltip is shown when collapsing a new dir if it was shown before */
175 tooltipClass: "mytooltip",
176 content: function () {
177 return $(this).prop(\'title\'); /* To force to get title as is */
191 print
'<ul class="ecmjqft">';
194 if (empty($sqltree)) {
195 $sqltree = $ecmdirstatic->get_full_arbo(0);
203 $fullpathselected =
'';
204 foreach ($sqltree as $key => $val) {
206 if ($val[
'id'] == $section) {
207 $fullpathselected = $val[
'fullpath'];
214 $expandedsectionarray = array();
215 if (isset($_SESSION[
'dol_ecmexpandedsectionarray'])) {
216 $expandedsectionarray = explode(
',', $_SESSION[
'dol_ecmexpandedsectionarray']);
219 if ($section &&
GETPOST(
'sectionexpand') ==
'true') {
221 $pathtosection = explode(
'_', $fullpathselected);
222 foreach ($pathtosection as $idcursor) {
223 if ($idcursor && !in_array($idcursor, $expandedsectionarray)) {
224 $expandedsectionarray[] = $idcursor;
227 $_SESSION[
'dol_ecmexpandedsectionarray'] = implode(
',', $expandedsectionarray);
229 if ($section &&
GETPOST(
'sectionexpand') ==
'false') {
231 $oldexpandedsectionarray = $expandedsectionarray;
232 $expandedsectionarray = array();
234 foreach ($oldexpandedsectionarray as $sectioncursor) {
238 $_SESSION[
'dol_ecmexpandedsectionarray'] = implode(
',', $expandedsectionarray);
244 foreach ($sqltree as $key => $val) {
245 $ecmdirstatic->id = $val[
'id'];
246 $ecmdirstatic->ref = $val[
'label'];
249 if (preg_match(
'/refresh/i', $action)) {
250 $result = $ecmdirstatic->fetch($val[
'id']);
251 $ecmdirstatic->ref = $ecmdirstatic->label;
253 $result = $ecmdirstatic->refreshcachenboffile(0);
254 $val[
'cachenbofdoc'] = $result;
263 if (in_array($val[
'id_mere'], $expandedsectionarray)) {
265 } elseif ($val[
'id'] != $section && $val[
'id_mere'] == $ecmdirstatic->motherof[$section]) {
268 } elseif (preg_match(
'/'.$val[
'fullpath'].
'_/i', $fullpathselected.
'_')) {
271 } elseif ($val[
'level'] < 2) {
277 if (in_array($val[
'id'], $expandedsectionarray)) {
278 $option =
'indexexpanded';
280 $option =
'indexnotexpanded';
284 print
'<li class="directory collapsed">';
288 while ($cpt < $sqltree[$key][
'level']) {
289 print
' ';
294 $nbofsubdir = $resarray[1];
295 $nboffilesinsubdir = $resarray[2];
298 print $ecmdirstatic->getNomUrl(0, $option, 32,
'class="fmdirlia jqft ecmjqft"');
300 print
'<div class="ecmjqft">';
303 print
'<table class="nobordernopadding"><tr>';
305 print
'<!-- nb of docs -->';
307 print $val[
'cachenbofdoc'];
310 print
'<!-- nb in subdir -->';
311 print
'<td class="left">';
312 if ($nbofsubdir && $nboffilesinsubdir) {
313 print
'<span style="color: #AAAAAA">+'.$nboffilesinsubdir.
'</span> ';
318 print
'<!-- info -->';
319 print
'<td class="center">';
320 $userstatic->id = $val[
'fk_user_c'];
321 $userstatic->lastname = $val[
'login_c'];
322 $userstatic->status = $val[
'statut_c'];
323 $htmltooltip =
'<b>'.$langs->trans(
"ECMSection").
'</b>: '.$val[
'label'].
'<br>';
324 $htmltooltip =
'<b>'.$langs->trans(
"Type").
'</b>: '.$langs->trans(
"ECMSectionManual").
'<br>';
325 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationUser").
'</b>: '.$userstatic->getNomUrl(1,
'',
false, 1).
'<br>';
326 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationDate").
'</b>: '.
dol_print_date($val[
'date_c'],
"dayhour").
'<br>';
327 $htmltooltip .=
'<b>'.$langs->trans(
"Description").
'</b>: '.$val[
'description'].
'<br>';
328 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInDir").
'</b>: '.$val[
'cachenbofdoc'].
'<br>';
330 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInSubDir").
'</b>: '.$nboffilesinsubdir;
332 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfSubDir").
'</b>: '.$nbofsubdir.
'<br>';
334 print $form->textwithpicto(
'', $htmltooltip, 1,
'info');
337 print
'</tr></table>';
344 $oldvallevel = $val[
'level'];
349 if ($nbofentries == 0) {
350 print
'<li class="directory collapsed">';
351 print
'<div class="ecmjqft">';
352 print $langs->trans(
"ECMNoDirectoryYet");
362if ((!isset($mode) || $mode !=
'noajax') && is_object($db)) {
382function treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened, $depth = 0)
384 global
$conf, $db, $langs, $form, $user;
385 global $dolibarr_main_data_root;
388 $userstatic =
new User($db);
390 if (file_exists($fullpathselecteddir)) {
391 $files = @scandir($fullpathselecteddir);
393 if (!empty($files)) {
395 if (count($files) > 2) {
396 echo
'<ul class="ecmjqft" style="display: none;">'.
"\n";
400 foreach ($files as $file) {
402 if (in_array($file, array(
'temp',
'.',
'..'))) {
408 if ($user->socid > 0) {
413 $nboffilesinsubdir = 0;
418 foreach ($sqltree as $key => $tmpval) {
420 if ($tmpval[
'fullrelativename'] == (($selecteddir !=
'/' ? $selecteddir.
'/' :
'').$file)) {
425 if (isset($val[
'cachenbofdoc']) && $val[
'cachenbofdoc'] < 0) {
426 $result = $ecmdirstatic->fetch($val[
'id']);
427 $ecmdirstatic->ref = $ecmdirstatic->label;
429 $result = $ecmdirstatic->refreshcachenboffile(0);
430 $val[
'cachenbofdoc'] = $result;
434 $nbofsubdir = $resarray[1];
435 $nboffilesinsubdir = $resarray[2];
441 if ((!empty($val[
'fullrelativename']) && $val[
'id'] >= 0) ||
dol_is_dir($fullpathselecteddir.(preg_match(
'/\/$/', $fullpathselecteddir) ?
'' :
'/').$file)) {
442 if (empty($val[
'fullrelativename'])) {
443 $val[
'fullrelativename'] = (($selecteddir && $selecteddir !=
'/') ? $selecteddir.
'/' :
'').$file;
445 $val[
'label'] = $file;
446 $val[
'description'] =
'';
447 $nboffilesinsubdir = $langs->trans(
"Unknown");
450 $collapsedorexpanded =
'collapsed';
451 if (preg_match(
'/^'.preg_quote($val[
'fullrelativename'].
'/',
'/').
'/', $preopened)) {
452 $collapsedorexpanded =
'expanded';
457 print
'<li class="directory '.$collapsedorexpanded.
' lidirecm">';
460 print
'<a class="fmdirlia jqft ecmjqft" href="';
462 print
"\" rel=\"".dol_escape_htmltag($val[
'fullrelativename'].
'/').
"\" id=\"fmdirlia_id_".$val[
'id'].
"\"";
463 print
" onClick=\"loadandshowpreview('".dol_escape_js($val[
'fullrelativename']).
"',".$val[
'id'].
")";
469 print
'<div class="ecmjqft">';
471 print
'<table class="nobordernopadding"><tr>';
478 print
'<!-- nb of docs -->';
479 print
'<td class="right">';
480 print (isset($val[
'cachenbofdoc']) && $val[
'cachenbofdoc'] >= 0) ? $val[
'cachenbofdoc'] :
' ';
483 print
'<!-- nb of subdirs -->';
484 print
'<td class="left">';
485 if ($nbofsubdir > 0 && $nboffilesinsubdir > 0) {
486 print
'<span class="opacitymedium">+'.$nboffilesinsubdir.
'</span> ';
491 print
'<!-- edit link -->';
492 print
'<td class="right" width="18"><a class="editfielda" href="';
493 print DOL_URL_ROOT.
'/ecm/dir_card.php?module='.urlencode($modulepart).
'§ion='.$val[
'id'].
'&relativedir='.urlencode($val[
'fullrelativename']);
494 print
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?file_manager=1&website='.$websitekey.
'&pageid='.$pageid);
495 print
'">'.img_edit($langs->trans(
"Edit").
' - '.$langs->trans(
"View"), 0,
'class="valignmiddle opacitymedium"').
'</a></td>';
502 if ($modulepart ==
'ecm') {
503 print
'<!-- info -->';
504 print
'<td class="right" width="18">';
505 $userstatic->id = isset($val[
'fk_user_c']) ? $val[
'fk_user_c'] : 0;
506 $userstatic->lastname = isset($val[
'login_c']) ? $val[
'login_c'] : 0;
507 $userstatic->status = isset($val[
'statut_c']) ? $val[
'statut_c'] : 0;
508 $htmltooltip =
'<b>'.$langs->trans(
"ECMSection").
'</b>: '.$val[
'label'].
'<br>';
509 $htmltooltip =
'<b>'.$langs->trans(
"Type").
'</b>: '.$langs->trans(
"ECMSectionManual").
'<br>';
510 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationUser").
'</b>: '.$userstatic->getNomUrl(1,
'',
false, 1).
'<br>';
511 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationDate").
'</b>: '.(isset($val[
'date_c']) ?
dol_print_date($val[
'date_c'],
"dayhour") : $langs->trans(
"NeedRefresh")).
'<br>';
512 $htmltooltip .=
'<b>'.$langs->trans(
"Description").
'</b>: '.$val[
'description'].
'<br>';
513 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInDir").
'</b>: '.((isset($val[
'cachenbofdoc']) && $val[
'cachenbofdoc'] >= 0) ? $val[
'cachenbofdoc'] : $langs->trans(
"NeedRefresh")).
'<br>';
514 if ($nboffilesinsubdir > 0) {
515 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInSubDir").
'</b>: '.$nboffilesinsubdir;
517 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfSubDir").
'</b>: '.($nbofsubdir >= 0 ? $nbofsubdir : $langs->trans(
"NeedRefresh")).
'<br>';
519 print $form->textwithpicto(
'', $htmltooltip, 1,
"info");
523 print
"</tr></table>\n";
527 if (preg_match(
'/^'.preg_quote($val[
'fullrelativename'].
'/',
'/').
'/', $preopened)) {
529 $newselecteddir = $val[
'fullrelativename'];
530 $newfullpathselecteddir =
'';
531 if ($modulepart ==
'ecm') {
532 $newfullpathselecteddir =
$conf->ecm->dir_output.
'/'.($val[
'fullrelativename'] !=
'/' ? $val[
'fullrelativename'] :
'');
533 } elseif ($modulepart ==
'medias') {
534 $newfullpathselecteddir = $dolibarr_main_data_root.
'/medias/'.($val[
'fullrelativename'] !=
'/' ? $val[
'fullrelativename'] :
'');
537 if ($newfullpathselecteddir) {
538 treeOutputForAbsoluteDir($sqltree, $newselecteddir, $newfullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened, $depth + 1);
546 if ($user->socid > 0 && empty($nboflinesshown)) {
548 print
'<li>Not directory allowed to external users.<br>ACL for external users not yet implemented.</li>';
554 print
"PermissionDenied";
foreach($sqltree as $keycursor=> $val) if(!empty( $conf->use_javascript_ajax) &&!getDolGlobalString( 'MAIN_ECM_DISABLE_JS')) if(empty($conf->use_javascript_ajax)||getDolGlobalString('MAIN_ECM_DISABLE_JS')) if((!isset( $mode)||$mode !='noajax') &&is_object( $db)) treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened, $depth=0)
treeOutputForAbsoluteDir
Class to manage ECM directories.
Class to manage Dolibarr users.
dol_is_dir($folder)
Test if filename is a directory.
jsUnEscape($source)
Same function than javascript unescape() function but in PHP.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(!defined( 'NOREQUIREMENU')) if(!empty(GETPOST('seteventmessages', 'alpha'))) if(!function_exists("llxHeader")) top_httphead($contenttype='text/html', $forcenocache=0)
Show HTTP header.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
tree_showpad(&$fulltree, $key, $silent=0)
Show indent and picto of a tree line.