Преглед на файлове

FIX delete of a file in file_manager return to same dir

Laurent Destailleur преди 6 години
родител
ревизия
985ab1efda
променени са 3 файла, в които са добавени 45 реда и са изтрити 38 реда
  1. 13 10
      htdocs/core/actions_linkedfiles.inc.php
  2. 31 27
      htdocs/ecm/index.php
  3. 1 1
      htdocs/website/index.php

+ 13 - 10
htdocs/core/actions_linkedfiles.inc.php

@@ -77,20 +77,23 @@ elseif (GETPOST('linkit','none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
 // Delete file/link
 if ($action == 'confirm_deletefile' && $confirm == 'yes')
 {
-        $urlfile = GETPOST('urlfile', 'alpha', 0, null, null, 1);	// Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
-        if (GETPOST('section', 'alpha')) $file = $upload_dir . "/" . $urlfile;	// For a delete of GED module urlfile contains full path from upload_dir
-        else															// For documents pages, upload_dir contains already path to file from module dir, so we clean path into urlfile.
+        $urlfile = GETPOST('urlfile', 'alpha', 0, null, null, 1);				// Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
+        if (GETPOST('section', 'alpha')) 	// For a delete from the ECM module, upload_dir is ECM root dir and urlfile contains relative path from upload_dir
+        {
+        	$file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile;
+        }
+        else								// For a delete from the file manager into another module, or from documents pages, upload_dir contains already path to file from module dir, so we clean path into urlfile.
 		{
        		$urlfile=basename($urlfile);
-			$file = $upload_dir . "/" . $urlfile;
+       		$file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile;
 			if (! empty($upload_dirold)) $fileold = $upload_dirold . "/" . $urlfile;
 		}
-        $linkid = GETPOST('linkid', 'int');	// Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
+        $linkid = GETPOST('linkid', 'int');
 
-        if ($urlfile)
+        if ($urlfile)		// delete of a file
         {
-	        $dir = dirname($file).'/';     // Chemin du dossier contenant l'image d'origine
-	        $dirthumb = $dir.'/thumbs/';   // Chemin du dossier contenant la vignette
+	        $dir = dirname($file).'/';		// Chemin du dossier contenant l'image d'origine
+	        $dirthumb = $dir.'/thumbs/';	// Chemin du dossier contenant la vignette (if file is an image)
 
 	        $ret = dol_delete_file($file, 0, 0, 0, (is_object($object)?$object:null));
             if (! empty($fileold)) dol_delete_file($fileold, 0, 0, 0, (is_object($object)?$object:null));     // Delete file using old path
@@ -114,7 +117,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes')
             if ($ret) setEventMessages($langs->trans("FileWasRemoved", $urlfile), null, 'mesgs');
             else setEventMessages($langs->trans("ErrorFailToDeleteFile", $urlfile), null, 'errors');
         }
-        elseif ($linkid)
+        elseif ($linkid)	// delete of external link
         {
             require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php';
             $link = new Link($db);
@@ -143,7 +146,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes')
         	}
         	else
         	{
-        		header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $object->id.(!empty($withproject)?'&withproject=1':''));
+        		header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id.(GETPOST('section_dir','alpha')?'&section_dir='.urlencode(GETPOST('section_dir','alpha')):'').(!empty($withproject)?'&withproject=1':''));
         		exit;
         	}
         }

+ 31 - 27
htdocs/ecm/index.php

@@ -77,6 +77,10 @@ $error=0;
  *	Actions
  */
 
+// TODO Replace sendit and confirm_deletefile with
+//$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid;	// used after a confirm_deletefile into actions_linkedfiles.inc.php
+//include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';
+
 // Upload file (code similar but different than actions_linkedfiles.inc.php)
 if (GETPOST("sendit",'none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
 {
@@ -113,6 +117,33 @@ if (GETPOST("sendit",'none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
 	}
 }
 
+// Remove file (code similar but different than actions_linkedfiles.inc.php)
+if ($action == 'confirm_deletefile')
+{
+	if (GETPOST('confirm') == 'yes')
+	{
+		// GETPOST('urlfile','alpha') is full relative URL from ecm root dir. Contains path of all sections.
+		//var_dump(GETPOST('urlfile'));exit;
+
+		$upload_dir = $conf->ecm->dir_output.($relativepath?'/'.$relativepath:'');
+		$file = $upload_dir . "/" . GETPOST('urlfile','alpha');
+
+		$ret=dol_delete_file($file);	// This include also the delete from file index in database.
+		if ($ret)
+		{
+			setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile','alpha')), null, 'mesgs');
+			$result=$ecmdir->changeNbOfFiles('-');
+		}
+		else
+		{
+			setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile','alpha')), null, 'errors');
+		}
+
+		clearstatcache();
+	}
+	$action='file_manager';
+}
+
 // Add directory
 if ($action == 'add' && $user->rights->ecm->setup)
 {
@@ -135,33 +166,6 @@ if ($action == 'add' && $user->rights->ecm->setup)
 	clearstatcache();
 }
 
-// Remove file (code similar but different than actions_linkedfiles.inc.php)
-if ($action == 'confirm_deletefile')
-{
-    if (GETPOST('confirm') == 'yes')
-    {
-    	// GETPOST('urlfile','alpha') is full relative URL from ecm root dir. Contains path of all sections.
-		//var_dump(GETPOST('urlfile'));exit;
-
-    	$upload_dir = $conf->ecm->dir_output.($relativepath?'/'.$relativepath:'');
-    	$file = $upload_dir . "/" . GETPOST('urlfile','alpha');	// Do not use urldecode here ($_GET and $_POST are already decoded by PHP).
-
-    	$ret=dol_delete_file($file);	// This include also the delete from file index in database.
-    	if ($ret)
-    	{
-    		setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile','alpha')), null, 'mesgs');
-    		$result=$ecmdir->changeNbOfFiles('-');
-    	}
-    	else
-    	{
-    		setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile','alpha')), null, 'errors');
-    	}
-
-    	clearstatcache();
-    }
-   	$action='file_manager';
-}
-
 // Remove directory
 if ($action == 'confirm_deletesection' && GETPOST('confirm') == 'yes')
 {

+ 1 - 1
htdocs/website/index.php

@@ -207,7 +207,7 @@ $htmlheadercontentdefault.='-->'."\n";
  * Actions
  */
 
-$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid;	// used after a confirm_deletefile into actions_linkedfiles.inc.php
+$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid.(GETPOST('section_dir','alpha')?'&section_dir='.urlencode(GETPOST('section_dir','alpha')):'');	// used after a confirm_deletefile into actions_linkedfiles.inc.php
 include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';
 
 if ($action == 'renamefile') $action='file_manager';		// After actions_linkedfiles, if action were renamefile, we set it to 'file_manager'