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');
43if (!isset($mode) || $mode !=
'noajax') {
44 $res = @include
'../../main.inc.php';
45 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
46 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
47 include_once DOL_DOCUMENT_ROOT.
'/core/lib/treeview.lib.php';
48 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
49 include_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmdirectory.class.php';
51 $openeddir =
GETPOST(
'openeddir');
52 $modulepart =
GETPOST(
'modulepart');
55 $preopened =
GETPOST(
'preopened');
57 if ($selecteddir !=
'/') {
58 $selecteddir = preg_replace(
'/\/$/',
'', $selecteddir);
63 $openeddir =
GETPOST(
'openeddir');
64 $modulepart =
GETPOST(
'modulepart');
67 $preopened =
GETPOST(
'preopened');
69 if ($selecteddir !=
'/') {
70 $selecteddir = preg_replace(
'/\/$/',
'', $selecteddir);
73 $url = DOL_URL_ROOT.
'/ecm/index.php';
77$websitekey =
GETPOST(
'websitekey',
'alpha');
84$fullpathselecteddir =
'<none>';
85if ($modulepart ==
'ecm') {
86 $fullpathselecteddir = $conf->ecm->dir_output.
'/'.($selecteddir !=
'/' ? $selecteddir :
'');
87 $fullpathpreopened = $conf->ecm->dir_output.
'/'.($preopened !=
'/' ? $preopened :
'');
88} elseif ($modulepart ==
'medias' || $modulepart ==
'website') {
89 $fullpathselecteddir = $dolibarr_main_data_root.
'/medias/'.($selecteddir !=
'/' ? $selecteddir :
'');
90 $fullpathpreopened = $dolibarr_main_data_root.
'/medias/'.($preopened !=
'/' ? $preopened :
'');
96if (preg_match(
'/\.\./', $fullpathselecteddir) || preg_match(
'/[<>|]/', $fullpathselecteddir)) {
97 dol_syslog(
"Refused to deliver file ".$original_file);
103if (empty($modulepart)) {
104 $modulepart = $module;
108if ($modulepart ==
'ecm') {
109 if (!$user->hasRight(
'ecm',
'read')) {
112} elseif ($modulepart ==
'medias' || $modulepart ==
'website') {
129if (!isset($mode) || $mode !=
'noajax') {
134$userstatic =
new User($db);
135$form =
new Form($db);
139if (empty($sqltree)) {
140 $sqltree = $ecmdirstatic->get_full_arbo(0);
144$current_ecmdir_id = -1;
145foreach ($sqltree as $keycursor => $val) {
147 if ($val[
'fullrelativename'] == $selecteddir) {
148 $current_ecmdir_id = $keycursor;
152if (!empty($conf->use_javascript_ajax) && !
getDolGlobalString(
'MAIN_ECM_DISABLE_JS')) {
153 treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened);
158 print
"\n<!-- JS CODE TO ENABLE Tooltips on all object with class classfortooltip (reload into ajaxdirtree) -->\n";
159 print
'<script nonce="'.getNonce().
'" type="text/javascript">
160 jQuery(document).ready(function () {
161 jQuery(".classfortooltip").tooltip({
162 show: { collision: "flipfit", effect:\'toggle\', delay:50 },
163 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 */
164 tooltipClass: "mytooltip",
165 content: function () {
166 return $(this).prop(\'title\'); /* To force to get title as is */
180 print
'<ul class="ecmjqft">';
183 if (empty($sqltree)) {
184 $sqltree = $ecmdirstatic->get_full_arbo(0);
192 $fullpathselected =
'';
193 foreach ($sqltree as $key => $val) {
195 if ($val[
'id'] == $section) {
196 $fullpathselected = $val[
'fullpath'];
203 $expandedsectionarray = array();
204 if (isset($_SESSION[
'dol_ecmexpandedsectionarray'])) {
205 $expandedsectionarray = explode(
',', $_SESSION[
'dol_ecmexpandedsectionarray']);
208 if ($section &&
GETPOST(
'sectionexpand') ==
'true') {
210 $pathtosection = explode(
'_', $fullpathselected);
211 foreach ($pathtosection as $idcursor) {
212 if ($idcursor && !in_array($idcursor, $expandedsectionarray)) {
213 $expandedsectionarray[] = $idcursor;
216 $_SESSION[
'dol_ecmexpandedsectionarray'] = implode(
',', $expandedsectionarray);
218 if ($section &&
GETPOST(
'sectionexpand') ==
'false') {
220 $oldexpandedsectionarray = $expandedsectionarray;
221 $expandedsectionarray = array();
223 foreach ($oldexpandedsectionarray as $sectioncursor) {
227 $_SESSION[
'dol_ecmexpandedsectionarray'] = implode(
',', $expandedsectionarray);
233 foreach ($sqltree as $key => $val) {
234 $ecmdirstatic->id = $val[
'id'];
235 $ecmdirstatic->ref = $val[
'label'];
238 if (preg_match(
'/refresh/i', $action)) {
239 $result = $ecmdirstatic->fetch($val[
'id']);
240 $ecmdirstatic->ref = $ecmdirstatic->label;
242 $result = $ecmdirstatic->refreshcachenboffile(0);
243 $val[
'cachenbofdoc'] = $result;
252 if (in_array($val[
'id_mere'], $expandedsectionarray)) {
254 } elseif ($val[
'id'] != $section && $val[
'id_mere'] == $ecmdirstatic->motherof[$section]) {
257 } elseif (preg_match(
'/'.$val[
'fullpath'].
'_/i', $fullpathselected.
'_')) {
260 } elseif ($val[
'level'] < 2) {
266 if (in_array($val[
'id'], $expandedsectionarray)) {
267 $option =
'indexexpanded';
269 $option =
'indexnotexpanded';
273 print
'<li class="directory collapsed">';
277 while ($cpt < $sqltree[$key][
'level']) {
278 print
' ';
283 $nbofsubdir = $resarray[1];
284 $nboffilesinsubdir = $resarray[2];
287 print $ecmdirstatic->getNomUrl(0, $option, 32,
'class="fmdirlia jqft ecmjqft"');
289 print
'<div class="ecmjqft">';
292 print
'<table class="nobordernopadding"><tr>';
294 print
'<!-- nb of docs -->';
296 print $val[
'cachenbofdoc'];
299 print
'<!-- nb in subdir -->';
300 print
'<td class="left">';
301 if ($nbofsubdir && $nboffilesinsubdir) {
302 print
'<span style="color: #AAAAAA">+'.$nboffilesinsubdir.
'</span> ';
307 print
'<!-- info -->';
308 print
'<td class="center">';
309 $userstatic->id = $val[
'fk_user_c'];
310 $userstatic->lastname = $val[
'login_c'];
311 $userstatic->status = $val[
'statut_c'];
312 $htmltooltip =
'<b>'.$langs->trans(
"ECMSection").
'</b>: '.$val[
'label'].
'<br>';
313 $htmltooltip =
'<b>'.$langs->trans(
"Type").
'</b>: '.$langs->trans(
"ECMSectionManual").
'<br>';
314 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationUser").
'</b>: '.$userstatic->getNomUrl(1,
'',
false, 1).
'<br>';
315 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationDate").
'</b>: '.
dol_print_date($val[
'date_c'],
"dayhour").
'<br>';
316 $htmltooltip .=
'<b>'.$langs->trans(
"Description").
'</b>: '.$val[
'description'].
'<br>';
317 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInDir").
'</b>: '.$val[
'cachenbofdoc'].
'<br>';
319 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInSubDir").
'</b>: '.$nboffilesinsubdir;
321 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfSubDir").
'</b>: '.$nbofsubdir.
'<br>';
323 print $form->textwithpicto(
'', $htmltooltip, 1,
'info');
326 print
'</tr></table>';
333 $oldvallevel = $val[
'level'];
338 if ($nbofentries == 0) {
339 print
'<li class="directory collapsed">';
340 print
'<div class="ecmjqft">';
341 print $langs->trans(
"ECMNoDirectoryYet");
351if ((!isset($mode) || $mode !=
'noajax') && is_object($db)) {
371function treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened, $depth = 0)
373 global $conf, $db, $langs, $form;
374 global $dolibarr_main_data_root;
377 $userstatic =
new User($db);
379 if (file_exists($fullpathselecteddir)) {
380 $files = @scandir($fullpathselecteddir);
382 if (!empty($files)) {
384 if (count($files) > 2) {
385 echo
'<ul class="ecmjqft" style="display: none;">'.
"\n";
388 foreach ($files as $file) {
389 if ($file ==
'temp') {
394 $nboffilesinsubdir = 0;
399 foreach ($sqltree as $key => $tmpval) {
401 if ($tmpval[
'fullrelativename'] == (($selecteddir !=
'/' ? $selecteddir.
'/' :
'').$file)) {
406 if (isset($val[
'cachenbofdoc']) && $val[
'cachenbofdoc'] < 0) {
407 $result = $ecmdirstatic->fetch($val[
'id']);
408 $ecmdirstatic->ref = $ecmdirstatic->label;
410 $result = $ecmdirstatic->refreshcachenboffile(0);
411 $val[
'cachenbofdoc'] = $result;
415 $nbofsubdir = $resarray[1];
416 $nboffilesinsubdir = $resarray[2];
422 if ($file !=
'.' && $file !=
'..' && ((!empty($val[
'fullrelativename']) && $val[
'id'] >= 0) ||
dol_is_dir($fullpathselecteddir.(preg_match(
'/\/$/', $fullpathselecteddir) ?
'' :
'/').$file))) {
423 if (empty($val[
'fullrelativename'])) {
424 $val[
'fullrelativename'] = (($selecteddir && $selecteddir !=
'/') ? $selecteddir.
'/' :
'').$file;
426 $val[
'label'] = $file;
427 $val[
'description'] =
'';
428 $nboffilesinsubdir = $langs->trans(
"Unknown");
431 $collapsedorexpanded =
'collapsed';
432 if (preg_match(
'/^'.preg_quote($val[
'fullrelativename'].
'/',
'/').
'/', $preopened)) {
433 $collapsedorexpanded =
'expanded';
435 print
'<li class="directory '.$collapsedorexpanded.
' lidirecm">';
438 print
'<a class="fmdirlia jqft ecmjqft" href="';
440 print
"\" rel=\"".dol_escape_htmltag($val[
'fullrelativename'].
'/').
"\" id=\"fmdirlia_id_".$val[
'id'].
"\"";
441 print
" onClick=\"loadandshowpreview('".dol_escape_js($val[
'fullrelativename']).
"',".$val[
'id'].
")";
447 print
'<div class="ecmjqft">';
449 print
'<table class="nobordernopadding"><tr>';
456 print
'<!-- nb of docs -->';
457 print
'<td class="right">';
458 print (isset($val[
'cachenbofdoc']) && $val[
'cachenbofdoc'] >= 0) ? $val[
'cachenbofdoc'] :
' ';
461 print
'<!-- nb of subdirs -->';
462 print
'<td class="left">';
463 if ($nbofsubdir > 0 && $nboffilesinsubdir > 0) {
464 print
'<span class="opacitymedium">+'.$nboffilesinsubdir.
'</span> ';
469 print
'<!-- edit link -->';
470 print
'<td class="right" width="18"><a class="editfielda" href="';
471 print DOL_URL_ROOT.
'/ecm/dir_card.php?module='.urlencode($modulepart).
'§ion='.$val[
'id'].
'&relativedir='.urlencode($val[
'fullrelativename']);
472 print
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?file_manager=1&website='.$websitekey.
'&pageid='.$pageid);
473 print
'">'.img_edit($langs->trans(
"Edit").
' - '.$langs->trans(
"View"), 0,
'class="valignmiddle opacitymedium"').
'</a></td>';
480 if ($modulepart ==
'ecm') {
481 print
'<!-- info -->';
482 print
'<td class="right" width="18">';
483 $userstatic->id = isset($val[
'fk_user_c']) ? $val[
'fk_user_c'] : 0;
484 $userstatic->lastname = isset($val[
'login_c']) ? $val[
'login_c'] : 0;
485 $userstatic->status = isset($val[
'statut_c']) ? $val[
'statut_c'] : 0;
486 $htmltooltip =
'<b>'.$langs->trans(
"ECMSection").
'</b>: '.$val[
'label'].
'<br>';
487 $htmltooltip =
'<b>'.$langs->trans(
"Type").
'</b>: '.$langs->trans(
"ECMSectionManual").
'<br>';
488 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationUser").
'</b>: '.$userstatic->getNomUrl(1,
'',
false, 1).
'<br>';
489 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationDate").
'</b>: '.(isset($val[
'date_c']) ?
dol_print_date($val[
'date_c'],
"dayhour") : $langs->trans(
"NeedRefresh")).
'<br>';
490 $htmltooltip .=
'<b>'.$langs->trans(
"Description").
'</b>: '.$val[
'description'].
'<br>';
491 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInDir").
'</b>: '.((isset($val[
'cachenbofdoc']) && $val[
'cachenbofdoc'] >= 0) ? $val[
'cachenbofdoc'] : $langs->trans(
"NeedRefresh")).
'<br>';
492 if ($nboffilesinsubdir > 0) {
493 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfFilesInSubDir").
'</b>: '.$nboffilesinsubdir;
495 $htmltooltip .=
'<b>'.$langs->trans(
"ECMNbOfSubDir").
'</b>: '.($nbofsubdir >= 0 ? $nbofsubdir : $langs->trans(
"NeedRefresh")).
'<br>';
497 print $form->textwithpicto(
'', $htmltooltip, 1,
"info");
501 print
"</tr></table>\n";
505 if (preg_match(
'/^'.preg_quote($val[
'fullrelativename'].
'/',
'/').
'/', $preopened)) {
507 $newselecteddir = $val[
'fullrelativename'];
508 $newfullpathselecteddir =
'';
509 if ($modulepart ==
'ecm') {
510 $newfullpathselecteddir = $conf->ecm->dir_output.
'/'.($val[
'fullrelativename'] !=
'/' ? $val[
'fullrelativename'] :
'');
511 } elseif ($modulepart ==
'medias') {
512 $newfullpathselecteddir = $dolibarr_main_data_root.
'/medias/'.($val[
'fullrelativename'] !=
'/' ? $val[
'fullrelativename'] :
'');
515 if ($newfullpathselecteddir) {
516 treeOutputForAbsoluteDir($sqltree, $newselecteddir, $newfullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened, $depth + 1);
527 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 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.
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.