27require 
'../main.inc.php';
 
   28require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
 
   29require_once DOL_DOCUMENT_ROOT.
'/core/lib/ecm.lib.php';
 
   30require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
 
   31require_once DOL_DOCUMENT_ROOT.
'/core/lib/treeview.lib.php';
 
   32require_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmdirectory.class.php';
 
   35$langs->loadLangs(array(
"ecm", 
"companies", 
"other", 
"users", 
"orders", 
"propal", 
"bills", 
"contracts"));
 
   38$socid = 
GETPOST(
'socid', 
'int');
 
   39$action = 
GETPOST(
'action', 
'aZ09');
 
   41$module = 
GETPOST(
'module', 
'alpha');
 
   45$section_dir = 
GETPOST(
'section_dir', 
'alpha');
 
   47$search_doc_ref = 
GETPOST(
'search_doc_ref', 
'alpha');
 
   49$limit = 
GETPOST(
'limit', 
'int') ? 
GETPOST(
'limit', 
'int') : $conf->liste_limit;
 
   50$sortfield = 
GETPOST(
'sortfield', 
'aZ09comma');
 
   51$sortorder = 
GETPOST(
'sortorder', 
'aZ09comma');
 
   52$page = GETPOSTISSET(
'pageplusone') ? (
GETPOST(
'pageplusone') - 1) : 
GETPOST(
"page", 
'int');
 
   53if (empty($page) || $page == -1) {
 
   56$offset = $limit * $page;
 
   63  $sortfield = 
"fullname";
 
   65if ($module == 
'invoice_supplier' && $sortfield == 
"fullname") {
 
   66  $sortfield = 
"level1name";
 
   71  $result = $ecmdir->fetch($section);
 
   80$userstatic = 
new User($db);
 
   86  $socid = $user->socid;
 
   96$hookmanager->initHooks(array(
'ecmautocard', 
'globalcard'));
 
   99if (
GETPOST(
'button_removefilter_x', 
'alpha') || 
GETPOST(
'button_removefilter.x', 
'alpha') || 
GETPOST(
'button_removefilter', 
'alpha')) { 
 
  100  $search_doc_ref = 
'';
 
  107if ($action == 
'add' && $user->rights->ecm->setup) {
 
  108  $ecmdir->ref                = 
'NOTUSEDYET';
 
  109  $ecmdir->label              = 
GETPOST(
"label");
 
  110  $ecmdir->description        = 
GETPOST(
"desc");
 
  112  $id = $ecmdir->create($user);
 
  114    header(
"Location: ".$_SERVER[
"PHP_SELF"]);
 
  125if ($action == 
'confirm_deletefile') {
 
  126  if (
GETPOST(
'confirm') == 
'yes') {
 
  127    $langs->load(
"other");
 
  129      $result = $ecmdir->fetch($section);
 
  130      if (!($result > 0)) {
 
  134      $relativepath = $ecmdir->getRelativePath();
 
  138    $upload_dir = $conf->ecm->dir_output.($relativepath ? 
'/'.$relativepath : 
'');
 
  139    $file = $upload_dir.
"/".
GETPOST(
'urlfile'); 
 
  148    $result = $ecmdir->changeNbOfFiles(
'-');
 
  152  $action = 
'file_manager';
 
  156if ($action == 
'confirm_deletesection' && 
GETPOST(
'confirm') == 
'yes') {
 
  157  $result = $ecmdir->delete($user);
 
  158  setEventMessages($langs->trans(
"ECMSectionWasRemoved", $ecmdir->label), 
null, 
'mesgs');
 
  166if ($action == 
'refreshmanual') {
 
  172  $diroutputslash = str_replace(
'\\', 
'/', $conf->ecm->dir_output);
 
  173  $diroutputslash .= 
'/';
 
  176  $disktree = 
dol_dir_list($conf->ecm->dir_output, 
'directories', 1, 
'', 
'^temp$', 
'', 
'', 0);
 
  179  $sqltree = $ecmdirstatic->get_full_arbo(0);
 
  186  foreach ($disktree as $dirdesc) {    
 
  187    $dirisindatabase = 0;
 
  188    foreach ($sqltree as $dirsqldesc) {
 
  189      if ($conf->ecm->dir_output.
'/'.$dirsqldesc[
'fullrelativename'] == $dirdesc[
'fullname']) {
 
  190        $dirisindatabase = 1;
 
  195    if (!$dirisindatabase) {
 
  196      $txt = 
"Directory found on disk ".$dirdesc[
'fullname'].
", not found into database so we add it";
 
  202      $relativepathmissing = str_replace($diroutputslash, 
'', $dirdesc[
'fullname']);
 
  203      $relativepathtosearchparent = $relativepathmissing;
 
  205      if (preg_match(
'/\//', $relativepathtosearchparent)) {
 
  207        $relativepathtosearchparent = preg_replace(
'/\/[^\/]*$/', 
'', $relativepathtosearchparent);
 
  208        $txt = 
"Is relative parent path ".$relativepathtosearchparent.
" for ".$relativepathmissing.
" found in sql tree ?";
 
  211        $parentdirisindatabase = 0;
 
  212        foreach ($sqltree as $dirsqldesc) {
 
  213          if ($dirsqldesc[
'fullrelativename'] == $relativepathtosearchparent) {
 
  214            $parentdirisindatabase = $dirsqldesc[
'id'];
 
  218        if ($parentdirisindatabase > 0) {
 
  219          dol_syslog(
"Yes with id ".$parentdirisindatabase);
 
  221          $fk_parent = $parentdirisindatabase;
 
  232      if ($fk_parent >= 0) {
 
  233        $ecmdirtmp->ref                = 
'NOTUSEDYET';
 
  235        $ecmdirtmp->description        = 
'';
 
  236        $ecmdirtmp->fk_parent          = $fk_parent;
 
  238        $txt = 
"We create directory ".$ecmdirtmp->label.
" with parent ".$fk_parent;
 
  241        $id = $ecmdirtmp->create($user);
 
  243          $newdirsql = array(
'id'=>$id,
 
  244                   'id_mere'=>$ecmdirtmp->fk_parent,
 
  245                   'label'=>$ecmdirtmp->label,
 
  246                   'description'=>$ecmdirtmp->description,
 
  247                   'fullrelativename'=>$relativepathmissing);
 
  248          $sqltree[] = $newdirsql; 
 
  252          dol_syslog(
"Failed to create directory ".$ecmdirtmp->label, LOG_ERR);
 
  255        $txt = 
"Parent of ".$dirdesc[
'fullname'].
" not found";
 
  263  foreach ($sqltree as $dirdesc) {    
 
  264    $dirtotest = $conf->ecm->dir_output.
'/'.$dirdesc[
'fullrelativename'];
 
  266      $ecmdirtmp->id = $dirdesc[
'id'];
 
  267      $ecmdirtmp->delete($user, 
'databaseonly');
 
  272  $sql = 
"UPDATE ".MAIN_DB_PREFIX.
"ecm_directories set cachenbofdoc = -1 WHERE cachenbofdoc < 0"; 
 
  278  if ($adirwascreated) {
 
  291$maxheightwin = (isset($_SESSION[
"dol_screenheight"]) && $_SESSION[
"dol_screenheight"] > 466) ? ($_SESSION[
"dol_screenheight"] - 136) : 660; 
 
  297$morejs = array(
'includes/jquery/plugins/blockUI/jquery.blockUI.js', 
'core/js/blockUI.js'); 
 
  298if (empty($conf->global->MAIN_ECM_DISABLE_JS)) {
 
  299  $morejs[] = 
"includes/jquery/plugins/jqueryFileTree/jqueryFileTree.js";
 
  302$moreheadjs .= 
'<script type="text/javascript">'.
"\n";
 
  303$moreheadjs .= 
'var indicatorBlockUI = \''.DOL_URL_ROOT.
"/theme/".$conf->theme.
"/img/working.gif".
'\';
'."\n"; 
  304$moreheadjs .= '</script>
'."\n"; 
  306llxHeader($moreheadcss.$moreheadjs, $langs->trans("ECMArea"), '', '', '', '', $morejs, '', 0, 0); 
  309// Add sections to manage 
  311$sectionauto = array(); 
  312if (empty($conf->global->ECM_AUTO_TREE_HIDEN)) { 
  313  if (isModEnabled("product") || isModEnabled("service")) { 
  314    $langs->load("products"); 
  315    $rowspan++; $sectionauto[] = array('position'=>10, 'level
'=>1, 'module
'=>'product
', 'test
'=>(isModEnabled("product") || isModEnabled("service")), 'label
'=>$langs->trans("ProductsAndServices"), 'desc
'=>$langs->trans("ECMDocsByProducts")); 
  317  if (isModEnabled("societe")) { 
  318    $rowspan++; $sectionauto[] = array('position'=>20, 'level
'=>1, 'module
'=>'company
', 'test
'=>isModEnabled('societe
'), 'label
'=>$langs->trans("ThirdParties"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("ThirdParties"))); 
  320  if (isModEnabled("propal")) { 
  321    $rowspan++; $sectionauto[] = array('position'=>30, 'level
'=>1, 'module
'=>'propal
', 'test
'=>isModEnabled('propal
'), 'label
'=>$langs->trans("Proposals"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Proposals"))); 
  323  if (isModEnabled('contrat
')) { 
  324    $rowspan++; $sectionauto[] = array('position'=>40, 'level
'=>1, 'module
'=>'contract
', 'test
'=>isModEnabled('contrat
'), 'label
'=>$langs->trans("Contracts"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Contracts"))); 
  326  if (isModEnabled('commande
')) { 
  327    $rowspan++; $sectionauto[] = array('position'=>50, 'level
'=>1, 'module
'=>'order
', 'test
'=>isModEnabled('commande
'), 'label
'=>$langs->trans("CustomersOrders"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Orders"))); 
  329  if (isModEnabled('facture
')) { 
  330    $rowspan++; $sectionauto[] = array('position'=>60, 'level
'=>1, 'module
'=>'invoice
', 'test
'=>isModEnabled('facture
'), 'label
'=>$langs->trans("CustomersInvoices"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Invoices"))); 
  332  if (isModEnabled('supplier_proposal
')) { 
  333    $langs->load("supplier_proposal"); 
  334    $rowspan++; $sectionauto[] = array('position'=>70, 'level
'=>1, 'module
'=>'supplier_proposal
', 'test
'=>isModEnabled('supplier_proposal
'), 'label
'=>$langs->trans("SupplierProposals"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("SupplierProposals"))); 
  336  if (isModEnabled("supplier_order")) { 
  337    $rowspan++; $sectionauto[] = array('position'=>80, 'level
'=>1, 'module
'=>'order_supplier
', 'test
'=>isModEnabled("supplier_order"), 'label
'=>$langs->trans("SuppliersOrders"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("PurchaseOrders"))); 
  339  if (isModEnabled("supplier_invoice")) { 
  340    $rowspan++; $sectionauto[] = array('position'=>90, 'level
'=>1, 'module
'=>'invoice_supplier
', 'test
'=>isModEnabled("supplier_invoice"), 'label
'=>$langs->trans("SuppliersInvoices"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("SupplierInvoices"))); 
  342  if (isModEnabled('tax
')) { 
  343    $langs->load("compta"); 
  344    $rowspan++; $sectionauto[] = array('position'=>100, 'level
'=>1, 'module
'=>'tax
', 'test
'=>isModEnabled('tax
'), 'label
'=>$langs->trans("SocialContributions"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("SocialContributions"))); 
  345    $rowspan++; $sectionauto[] = array('position'=>110, 'level
'=>1, 'module
'=>'tax-vat
', 'test
'=>isModEnabled('tax
'), 'label
'=>$langs->trans("VAT"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("VAT"))); 
  347  if (isModEnabled('salaries
')) { 
  348    $langs->load("compta"); 
  349    $rowspan++; $sectionauto[] = array('position'=>120, 'level
'=>1, 'module
'=>'salaries
', 'test
'=>isModEnabled('salaries
'), 'label
'=>$langs->trans("Salaries"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Salaries"))); 
  351  if (isModEnabled('project
')) { 
  352    $rowspan++; $sectionauto[] = array('position'=>130, 'level
'=>1, 'module
'=>'project
', 'test
'=>isModEnabled('project
'), 'label
'=>$langs->trans("Projects"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Projects"))); 
  353    $rowspan++; $sectionauto[] = array('position'=>140, 'level
'=>1, 'module
'=>'project_task
', 'test
'=>isModEnabled('project
'), 'label
'=>$langs->trans("Tasks"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Tasks"))); 
  355  if (isModEnabled('ficheinter
')) { 
  356    $langs->load("interventions"); 
  357    $rowspan++; $sectionauto[] = array('position'=>150, 'level
'=>1, 'module
'=>'fichinter
', 'test
'=>isModEnabled('ficheinter
'), 'label
'=>$langs->trans("Interventions"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Interventions"))); 
  359  if (isModEnabled('expensereport
')) { 
  360    $langs->load("trips"); 
  361    $rowspan++; $sectionauto[] = array('position'=>160, 'level
'=>1, 'module
'=>'expensereport
', 'test
'=>isModEnabled('expensereport
'), 'label
'=>$langs->trans("ExpenseReports"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("ExpenseReports"))); 
  363  if (isModEnabled('holiday
')) { 
  364    $langs->load("holiday"); 
  365    $rowspan++; $sectionauto[] = array('position'=>170, 'level
'=>1, 'module
'=>'holiday
', 'test
'=>isModEnabled('holiday
'), 'label
'=>$langs->trans("Holidays"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Holidays"))); 
  367  if (isModEnabled("banque")) { 
  368    $langs->load("banks"); 
  369    $rowspan++; $sectionauto[] = array('position'=>180, 'level
'=>1, 'module
'=>'banque
', 'test
'=>isModEnabled('banque
'), 'label
'=>$langs->trans("BankAccount"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("BankAccount"))); 
  370    $rowspan++; $sectionauto[] = array('position'=>190, 'level
'=>1, 'module
'=>'chequereceipt
', 'test
'=>isModEnabled('banque
'), 'label
'=>$langs->trans("CheckReceipt"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("CheckReceipt"))); 
  372  if (isModEnabled('mrp
')) { 
  374    $rowspan++; $sectionauto[] = array('position'=>200, 'level
'=>1, 'module
'=>'mrp-mo
', 'test
'=>isModEnabled('mrp
'), 'label
'=>$langs->trans("MOs"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("ManufacturingOrders"))); 
  376  if (isModEnabled('recruitment
')) { 
  377    $langs->load("recruitment"); 
  378    $rowspan++; $sectionauto[] = array('position'=>210, 'level
'=>1, 'module
'=>'recruitment-recruitmentcandidature
', 'test
'=>isModEnabled('recruitment
'), 'label
'=>$langs->trans("Candidatures"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("JobApplications"))); 
  380  $rowspan++; $sectionauto[] = array('position'=>220, 'level
'=>1, 'module
'=>'user', 'test
'=>1, 'label
'=>$langs->trans("Users"), 'desc
'=>$langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("Users"))); 
  382  $parameters = array(); 
  383  $reshook = $hookmanager->executeHooks('addSectionECMAuto
', $parameters); 
  384  if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) { 
  385    $sectionauto[] = $hookmanager->resArray; 
  386    $rowspan += count($hookmanager->resArray); 
  390$head = ecm_prepare_dasboard_head(null); 
  391print dol_get_fiche_head($head, 'index_auto
', '', -1, ''); 
  395// Confirm remove file (for non javascript users) 
  396if ($action == 'deletefile
' && empty($conf->use_javascript_ajax)) { 
  397  print $form->formconfirm($_SERVER["PHP_SELF"].'?section=
'.$section.'&urlfile=
'.urlencode($_GET["urlfile"]), $langs->trans('DeleteFile
'), $langs->trans('ConfirmDeleteFile
'), 'confirm_deletefile
', '', '', 1); 
  400// Start container of all panels 
  402<!-- Begin div id="containerlayout" --> 
  403<div id="containerlayout"> 
  404<div id="ecm-layout-north" class="toolbar largebutton"> 
  407// Start top panel, toolbar 
  408print '<div 
class=
"inline-block toolbarbutton centpercent">
'; 
  411$url = ((!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS)) ? '#
' : ($_SERVER["PHP_SELF"].'?action=refreshmanual
'.($module ? '&module=
'.$module : '').($section ? '&section=
'.$section : ''))); 
  412print '<a href=
"'.$url.'" class=
"inline-block valignmiddle toolbarbutton paddingtop" title=
"'.dol_escape_htmltag($langs->trans('Refresh')).'">
'; 
  413print img_picto('', 'refresh
', 'id=
"refreshbutton"', false, 0, 0, '', 'size15x marginrightonly
'); 
  417// End top panel, toolbar 
  421<div id="ecm-layout-west" class="inline-block"> 
  426// Confirmation de la suppression d'une ligne categorie
 
  427if ($action == 
'delete_section') {
 
  428  print $form->formconfirm($_SERVER[
"PHP_SELF"].
'?section='.$section, $langs->trans(
'DeleteSection'), $langs->trans(
'ConfirmDeleteSection', $ecmdir->label), 
'confirm_deletesection', 
'', 
'', 1);
 
  433if (empty($action) || $action == 
'file_manager' || preg_match(
'/refresh/i', $action) || $action == 
'deletefile') {
 
  434  print 
'<table class="liste centpercent">'.
"\n";
 
  436  print 
'<!-- Title for auto directories -->'.
"\n";
 
  437  print 
'<tr class="liste_titre">'.
"\n";
 
  438  print 
'<th class="liste_titre" align="left" colspan="6">';
 
  439  print 
' '.$langs->trans(
"ECMSections");
 
  442  $showonrightsize = 
'';
 
  444  if (count($sectionauto)) {
 
  445    $htmltooltip = $langs->trans(
"ECMAreaDesc2");
 
  446    $htmltooltip .= 
'<br>'.$langs->trans(
"ECMAreaDesc2b");
 
  448    $sectionauto = 
dol_sort_array($sectionauto, 
'label', 
'ASC', 
true, 
false);
 
  451    print 
'<td colspan="6">';
 
  452    print 
'<div id="filetreeauto" class="ecmfiletree"><ul class="ecmjqft">';
 
  456    foreach ($sectionauto as $key => $val) {
 
  457      if (empty($val[
'test'])) {
 
  461      print 
'<li class="directory collapsed">';
 
  462      if (!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS)) {
 
  463        print 
'<a class="fmdirlia jqft ecmjqft" href="'.$_SERVER[
"PHP_SELF"].
'?module='.urlencode($val[
'module']).
'">';
 
  467        print 
'<a class="fmdirlia jqft ecmjqft" href="'.$_SERVER[
"PHP_SELF"].
'?module='.urlencode($val[
'module']).
'">';
 
  472      print 
'<div class="ecmjqft">';
 
  474      $htmltooltip = 
'<b>'.$langs->trans(
"ECMSection").
'</b>: '.$val[
'label'].
'<br>';
 
  475      $htmltooltip .= 
'<b>'.$langs->trans(
"Type").
'</b>: '.$langs->trans(
"ECMSectionAuto").
'<br>';
 
  476      $htmltooltip .= 
'<b>'.$langs->trans(
"ECMCreationUser").
'</b>: '.$langs->trans(
"ECMTypeAuto").
'<br>';
 
  477      $htmltooltip .= 
'<b>'.$langs->trans(
"Description").
'</b>: '.$val[
'desc'];
 
  478      print $form->textwithpicto(
'', $htmltooltip, 1, 
'info');
 
  486    print 
'</ul></div></td></tr>';
 
  496<div 
id=
"ecm-layout-center" class=
"inline-block">
 
  497<div 
class=
"pane-in ecm-in-layout-center">
 
  498<div 
id=
"ecmfileview" class=
"ecmfileview">
 
  503$url = DOL_URL_ROOT.
'/ecm/index_auto.php';
 
  504include_once DOL_DOCUMENT_ROOT.
'/core/ajax/ajaxdirpreview.php';
 
  513</div> <!-- End div 
id=
"containerlayout" -->
 
  517if (!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS)) {
 
  518  include DOL_DOCUMENT_ROOT.
'/ecm/tpl/enablefiletreeajax.tpl.php';
 
Class to manage ECM directories.
 
Class to manage Dolibarr users.
 
dol_basename($pathfile)
Make a basename working with all page code (default PHP basenamed fails with cyrillic).
 
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
 
dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
 
dol_is_dir($folder)
Test if filename is a directory.
 
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
 
dol_get_fiche_end($notab=0)
Return tab footer of a card.
 
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by second index function, which produces ascending (default) or descending output...
 
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
 
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
 
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
 
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.