30require
'../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/lib/ecm.lib.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/lib/treeview.lib.php';
42require_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmdirectory.class.php';
45$langs->loadLangs(array(
"ecm",
"companies",
"other",
"users",
"orders",
"propal",
"bills",
"contracts"));
49$action =
GETPOST(
'action',
'aZ09');
51$module =
GETPOST(
'module',
'aZ09arobase');
55$section_dir =
GETPOST(
'section_dir',
'alpha');
57$search_doc_ref =
GETPOST(
'search_doc_ref',
'alpha');
60$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
61$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
63if (empty($page) || $page == -1) {
66$offset = $limit * $page;
73 $sortfield =
"fullname";
75if ($module ==
'invoice_supplier' && $sortfield ==
"fullname") {
76 $sortfield =
"level1name";
81 $result = $ecmdir->fetch($section);
96 $socid = $user->socid;
100$hookmanager->initHooks(array(
'ecmautocard',
'globalcard'));
110if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
111 $search_doc_ref =
'';
115if ($action ==
'add' && $user->hasRight(
'ecm',
'setup')) {
116 $ecmdir->ref =
'NOTUSEDYET';
117 $ecmdir->label =
GETPOST(
"label");
118 $ecmdir->description =
GETPOST(
"desc");
120 $id = $ecmdir->create($user);
122 header(
"Location: ".$_SERVER[
"PHP_SELF"]);
133if ($action ==
'confirm_deletefile' && $user->hasRight(
'ecm',
'upload')) {
134 if (
GETPOST(
'confirm') ==
'yes') {
135 $langs->load(
"other");
137 $result = $ecmdir->fetch($section);
138 if (!($result > 0)) {
142 $relativepath = $ecmdir->getRelativePath();
146 $upload_dir =
$conf->ecm->dir_output.($relativepath ?
'/'.$relativepath :
'');
147 $file = $upload_dir.
"/".
GETPOST(
'urlfile');
156 $result = $ecmdir->changeNbOfFiles(
'-');
160 $action =
'file_manager';
164if ($action ==
'confirm_deletesection' &&
GETPOST(
'confirm') ==
'yes' && $user->hasRight(
'ecm',
'setup')) {
165 $result = $ecmdir->delete($user);
166 setEventMessages($langs->trans(
"ECMSectionWasRemoved", $ecmdir->label),
null,
'mesgs');
174if ($action ==
'refreshmanual' && $user->hasRight(
'ecm',
'read')) {
180 $diroutputslash = str_replace(
'\\',
'/',
$conf->ecm->dir_output);
181 $diroutputslash .=
'/';
184 $disktree =
dol_dir_list(
$conf->ecm->dir_output,
'directories', 1,
'',
'^temp$',
'', 0, 0);
187 $treesqldir = $ecmdirstatic->get_full_arbo(0);
194 foreach ($disktree as $dirdesc) {
195 $dirisindatabase = 0;
196 foreach ($treesqldir as $dirsqldesc) {
197 if (
$conf->ecm->dir_output.
'/'.$dirsqldesc[
'fullrelativename'] == $dirdesc[
'fullname']) {
198 $dirisindatabase = 1;
203 if (!$dirisindatabase) {
204 $txt =
"Directory found on disk ".$dirdesc[
'fullname'].
", not found into database so we add it";
210 $relativepathmissing = str_replace($diroutputslash,
'', $dirdesc[
'fullname']);
211 $relativepathtosearchparent = $relativepathmissing;
213 if (preg_match(
'/\//', $relativepathtosearchparent)) {
215 $relativepathtosearchparent = preg_replace(
'/\/[^\/]*$/',
'', $relativepathtosearchparent);
216 $txt =
"Is relative parent path ".$relativepathtosearchparent.
" for ".$relativepathmissing.
" found in sql tree ?";
219 $parentdirisindatabase = 0;
220 foreach ($treesqldir as $dirsqldesc) {
221 if ($dirsqldesc[
'fullrelativename'] == $relativepathtosearchparent) {
222 $parentdirisindatabase = $dirsqldesc[
'id'];
226 if ($parentdirisindatabase > 0) {
227 dol_syslog(
"Yes with id ".$parentdirisindatabase);
229 $fk_parent = $parentdirisindatabase;
240 if ($fk_parent >= 0) {
241 $ecmdirtmp->ref =
'NOTUSEDYET';
243 $ecmdirtmp->description =
'';
244 $ecmdirtmp->fk_parent = $fk_parent;
246 $txt =
"We create directory ".$ecmdirtmp->label.
" with parent ".$fk_parent;
249 $id = $ecmdirtmp->create($user);
251 $newsqldir = array(
'id' =>
$id,
252 'id_mere' => $ecmdirtmp->fk_parent,
253 'label' => $ecmdirtmp->label,
254 'description' => $ecmdirtmp->description,
255 'fullrelativename' => $relativepathmissing);
256 $treesqldir[] = $newsqldir;
260 dol_syslog(
"Failed to create directory ".$ecmdirtmp->label, LOG_ERR);
263 $txt =
"Parent of ".$dirdesc[
'fullname'].
" not found";
271 foreach ($treesqldir as $dirdesc) {
272 $dirtotest =
$conf->ecm->dir_output.
'/'.$dirdesc[
'fullrelativename'];
274 $ecmdirtmp->id = $dirdesc[
'id'];
275 $ecmdirtmp->delete($user,
'databaseonly');
280 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"ecm_directories set cachenbofdoc = -1 WHERE cachenbofdoc < 0";
286 if ($adirwascreated) {
299$maxheightwin = (isset($_SESSION[
"dol_screenheight"]) && $_SESSION[
"dol_screenheight"] > 466) ? ($_SESSION[
"dol_screenheight"] - 136) : 660;
306 $morejs[] =
"public/includes/jquery/plugins/jqueryFileTree/jqueryFileTree.js";
309llxHeader($moreheadcss.$moreheadjs, $langs->trans(
"ECMArea"),
'',
'', 0, 0, $morejs,
'',
'',
'mod-ecm page-index_auto');
314$sectionauto = array();
317 $langs->load(
"products");
319 $sectionauto[] = array(
'position' => 10,
'level' => 1,
'module' =>
'product',
'test' => $user->hasRight(
'produit',
'lire'),
'label' => $langs->trans(
"ProductsAndServices"),
'desc' => $langs->trans(
"ECMDocsByProducts"));
323 $sectionauto[] = array(
'position' => 20,
'level' => 1,
'module' =>
'company',
'test' => $user->hasRight(
'societe',
'lire'),
'label' => $langs->trans(
"ThirdParties"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"ThirdParties")));
327 $sectionauto[] = array(
'position' => 30,
'level' => 1,
'module' =>
'propal',
'test' => $user->hasRight(
'propale',
'lire'),
'label' => $langs->trans(
"Proposals"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Proposals")));
331 $sectionauto[] = array(
'position' => 40,
'level' => 1,
'module' =>
'contract',
'test' => $user->hasRight(
'contrat',
'lire'),
'label' => $langs->trans(
"Contracts"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Contracts")));
335 $sectionauto[] = array(
'position' => 50,
'level' => 1,
'module' =>
'order',
'test' => $user->hasRight(
'commande',
'lire'),
'label' => $langs->trans(
"CustomersOrders"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Orders")));
339 $sectionauto[] = array(
'position' => 60,
'level' => 1,
'module' =>
'invoice',
'test' => $user->hasRight(
'facture',
'lire'),
'label' => $langs->trans(
"CustomersInvoices"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Invoices")));
342 $langs->load(
"supplier_proposal");
344 $sectionauto[] = array(
'position' => 70,
'level' => 1,
'module' =>
'supplier_proposal',
'test' => $user->hasRight(
'supplier_proposal',
'lire'),
'label' => $langs->trans(
"SupplierProposals"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"SupplierProposals")));
348 $sectionauto[] = array(
'position' => 80,
'level' => 1,
'module' =>
'order_supplier',
'test' => $user->hasRight(
'fournisseur',
'commande',
'lire'),
'label' => $langs->trans(
"SuppliersOrders"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"SuppliersOrders")));
352 $sectionauto[] = array(
'position' => 90,
'level' => 1,
'module' =>
'invoice_supplier',
'test' => $user->hasRight(
'fournisseur',
'facture',
'lire'),
'label' => $langs->trans(
"SuppliersInvoices"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"SupplierInvoices")));
355 $langs->load(
"compta");
357 $sectionauto[] = array(
'position' => 100,
'level' => 1,
'module' =>
'tax',
'test' => $user->hasRight(
'tax',
'charges',
'lire'),
'label' => $langs->trans(
"SocialContributions"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"SocialContributions")));
359 $sectionauto[] = array(
'position' => 110,
'level' => 1,
'module' =>
'tax-vat',
'test' => $user->hasRight(
'tax',
'charges',
'lire'),
'label' => $langs->trans(
"VAT"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"VAT")));
362 $langs->load(
"compta");
364 $sectionauto[] = array(
'position' => 120,
'level' => 1,
'module' =>
'salaries',
'test' => $user->hasRight(
'salaries',
'read'),
'label' => $langs->trans(
"Salaries"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Salaries")));
368 $sectionauto[] = array(
'position' => 130,
'level' => 1,
'module' =>
'project',
'test' => 1,
'label' => $langs->trans(
"Projects"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Projects")));
370 $sectionauto[] = array(
'position' => 140,
'level' => 1,
'module' =>
'project_task',
'test' => 1,
'label' => $langs->trans(
"Tasks"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Tasks")));
373 $langs->load(
"interventions");
375 $sectionauto[] = array(
'position' => 150,
'level' => 1,
'module' =>
'fichinter',
'test' => $user->hasRight(
'ficheinter',
'lire'),
'label' => $langs->trans(
"Interventions"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Interventions")));
378 $langs->load(
"trips");
380 $sectionauto[] = array(
'position' => 160,
'level' => 1,
'module' =>
'expensereport',
'test' => $user->hasRight(
'expensereport',
'lire'),
'label' => $langs->trans(
"ExpenseReports"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"ExpenseReports")));
383 $langs->load(
"holiday");
385 $sectionauto[] = array(
'position' => 170,
'level' => 1,
'module' =>
'holiday',
'test' => $user->hasRight(
'holiday',
'read'),
'label' => $langs->trans(
"Holidays"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Holidays")));
388 $langs->load(
"banks");
390 $sectionauto[] = array(
'position' => 180,
'level' => 1,
'module' =>
'banque',
'test' => $user->hasRight(
'banque',
'lire'),
'label' => $langs->trans(
"BankAccount"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"BankAccount")));
395 $sectionauto[] = array(
'position' => 190,
'level' => 1,
'module' =>
'chequereceipt',
'test' => $user->hasRight(
'banque',
'lire'),
'label' => $langs->trans(
"CheckReceipt"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"CheckReceipt")));
400 $sectionauto[] = array(
'position' => 200,
'level' => 1,
'module' =>
'mrp-mo',
'test' => $user->hasRight(
'mrp',
'read'),
'label' => $langs->trans(
"MOs"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"ManufacturingOrders")));
403 $langs->load(
"recruitment");
405 $sectionauto[] = array(
'position' => 210,
'level' => 1,
'module' =>
'recruitment-recruitmentcandidature',
'test' => $user->hasRight(
'recruitment',
'read'),
'label' => $langs->trans(
"Candidatures"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"JobApplications")));
408 $sectionauto[] = array(
'position' => 220,
'level' => 1,
'module' =>
'user',
'test' => 1,
'label' => $langs->trans(
"Users"),
'desc' => $langs->trans(
"ECMDocsBy", $langs->transnoentitiesnoconv(
"Users")));
410 $parameters = array();
411 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
412 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
413 $res = $hookmanager->resArray[0];
414 if (is_array($hookmanager->resArray[0])) {
415 $sectionauto = array_merge($sectionauto, $hookmanager->resArray);
416 $rowspan += count($hookmanager->resArray);
418 $sectionauto[] = $hookmanager->resArray;
430if ($action ==
'deletefile' && empty(
$conf->use_javascript_ajax)) {
431 print $form->formconfirm($_SERVER[
"PHP_SELF"].
'?section='.$section.
'&urlfile='.urlencode(
GETPOST(
"urlfile")), $langs->trans(
'DeleteFile'), $langs->trans(
'ConfirmDeleteFile'),
'confirm_deletefile',
'',
'', 1);
436<!-- Begin div
id=
"containerlayout" -->
437<div
id=
"containerlayout">
438<div
id=
"ecm-layout-north" class=
"toolbar largebutton">
442print
'<div class="inline-block toolbarbutton centpercent">';
445$url = ((!empty(
$conf->use_javascript_ajax) && !
getDolGlobalString(
'MAIN_ECM_DISABLE_JS')) ?
'#' : ($_SERVER[
"PHP_SELF"].
'?action=refreshmanual'.($module ?
'&module='.$module :
'').($section ?
'&section='.$section :
'')));
446print
'<a href="'.$url.
'" class="inline-block valignmiddle toolbarbutton paddingtop" title="'.
dol_escape_htmltag($langs->trans(
'Refresh')).
'">';
447print
img_picto(
'',
'refresh',
'id="refreshbutton"', 0, 0, 0,
'',
'size15x marginrightonly');
455<div
id=
"ecm-layout-west" class=
"inline-block">
461if ($action ==
'delete_section') {
462 print $form->formconfirm($_SERVER[
"PHP_SELF"].
'?section='.$section, $langs->trans(
'DeleteSection'), $langs->trans(
'ConfirmDeleteSection', $ecmdir->label),
'confirm_deletesection',
'',
'', 1);
467if (empty($action) || $action ==
'file_manager' || preg_match(
'/refresh/i', $action) || $action ==
'deletefile') {
468 print
'<table class="liste centpercent noborder">'.
"\n";
470 print
'<!-- Title for auto directories -->'.
"\n";
471 print
'<tr class="liste_titre">'.
"\n";
472 print
'<th class="liste_titre" align="left" colspan="6">';
473 print
' '.$langs->trans(
"ECMSections");
476 $showonrightsize =
'';
479 if (count($sectionauto)) {
480 $htmltooltip = $langs->trans(
"ECMAreaDesc2");
481 $htmltooltip .=
'<br>'.$langs->trans(
"ECMAreaDesc2b");
483 $sectionauto =
dol_sort_array($sectionauto,
'label',
'ASC', 1, 0);
486 print
'<td colspan="6">';
487 print
'<div id="filetreeauto" class="ecmfiletree"><ul class="ecmjqft">';
489 $arrayofmodulesforexternalusers = explode(
',',
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL'));
493 foreach ($sectionauto as $key => $val) {
494 if (empty($val[
'test'])) {
499 if ($user->socid > 0) {
502 if (! in_array($val[
'module'], $arrayofmodulesforexternalusers)) {
508 print
'<li class="directory collapsed">';
509 print
'<a class="fmdirlia jqft ecmjqft" href="'.$_SERVER[
"PHP_SELF"].
'?module='.urlencode($val[
'module']).
'">';
513 print
'<div class="ecmjqft">';
515 $htmltooltip =
'<b>'.$langs->trans(
"ECMSection").
'</b>: '.$val[
'label'].
'<br>';
516 $htmltooltip .=
'<b>'.$langs->trans(
"Type").
'</b>: '.$langs->trans(
"ECMSectionAuto").
'<br>';
517 $htmltooltip .=
'<b>'.$langs->trans(
"ECMCreationUser").
'</b>: '.$langs->trans(
"ECMTypeAuto").
'<br>';
518 $htmltooltip .=
'<b>'.$langs->trans(
"Description").
'</b>: '.$val[
'desc'];
519 print $form->textwithpicto(
'', $htmltooltip, 1,
'info');
527 print
'</ul></div></td></tr>';
537<div
id=
"ecm-layout-center" class=
"inline-block">
538<div
class=
"pane-in ecm-in-layout-center">
539<div
id=
"ecmfileview" class=
"ecmfileview">
544$url = DOL_URL_ROOT.
'/ecm/index_auto.php';
545include_once DOL_DOCUMENT_ROOT.
'/core/ajax/ajaxdirpreview.php';
554</div> <!-- End div
id=
"containerlayout" -->
559 include DOL_DOCUMENT_ROOT.
'/ecm/tpl/enablefiletreeajax.tpl.php';
$id
Support class for third parties, contacts, members, users or resources.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage ECM directories.
Class to manage Dolibarr users.
ecm_prepare_dasboard_head()
Prepare array with list of different ecm main dashboard.
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($utf8_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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
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 the value of a given key, which produces ascending (default) or descending out...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
dolPrintLabel($s, $escapeonlyhtmltags=0)
Return a string label (so on 1 line only and that should not contains any HTML) ready to be output on...
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
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...
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.