Browse Source

Code adjustments and improvemts for #151

Tobias Reich 10 years ago
parent
commit
0167507604
1 changed files with 56 additions and 64 deletions
  1. 56 64
      php/modules/Import.php

+ 56 - 64
php/modules/Import.php

@@ -60,97 +60,79 @@ class Import extends Module {
 
 	static function server($albumID = 0, $path) {
 
+		global $database, $plugins, $settings;
+
 		if (!isset($path)) $path = LYCHEE_UPLOADS_IMPORT;
 
-		//determine OS type and set move cmd (Windows untested!)
-		$myos = strtoupper( substr(PHP_OS,0,3) );
+		# Determine OS type and set move cmd (Windows untested!)
+		$myos = substr(PHP_OS,0,3);
+		$myos = strtoupper($myos);
 
-		if ( $myos  === "WIN" ) { $osmv = 'MOVE'; } else { $osmv = 'mv'; }
+		if ($myos==='WIN') $osmv = 'MOVE';
+		else $osmv = 'mv';
 
-		//generate tmp dir name by hashing epoch time & random number
+		# Generate tmp dir name by hashing epoch time & random number
 		$tmpdirname = md5(time() . rand());
 
-		global $database;
-
-		if ( isset($tmpdirname) ){
-
-			//make temporary directory
-	  		if (@mkdir(LYCHEE_DATA . "$tmpdirname")!==false) { 
-
-				//get list of folders and move them to tmpdir
-				$folders = glob($path . '*', GLOB_ONLYDIR);
-
-				if ( isset($folders) ) {
-
-					foreach ($folders as $folder) {
-
-						$out = ''; 
-						$ret = ''; 
-
-						@exec("$osmv " . $folder . ' ' . LYCHEE_DATA . $tmpdirname, $out, $ret); 	
-						
-						if ( isset($ret) && ($ret > 0) ) Log::error($database, __METHOD__, __LINE__, "Failed to move directory or file ($ret):" . $folder);
-					
-					} 
-
-				}
-
-				//get list of files and move them to tmpdir
-			 	$files = glob($path . '*');	
-			
-				if ( isset($files) ) {
-
-					foreach ($files as $file) {
-
-						//prevent logging second error for directories that could not be moved.
-						if ( is_dir($file) ) continue; 
-
-						$out = ''; 
-						$ret = ''; 
-
-						@exec("$osmv " . $file . ' ' . LYCHEE_DATA . $tmpdirname, $out, $ret); 	
-						if ( isset($ret) && ($ret > 0) ) Log::error($database, __METHOD__, __LINE__, "Failed to move directory or file ($ret):" . $file);
+		# Make temporary directory
+	  	if (@mkdir(LYCHEE_DATA . $tmpdirname)===false) {
+			Log::error($database, __METHOD__, __LINE__, 'Failed to create temporary directory');
+			return false;
+		}
 
-					}
+		# Get list of files and move them to tmpdir
+		$files = glob($path . '*');
+		if (isset($files)) {
 
-				}
+			foreach ($files as $file) {
 
-				//If no files could be copied to the temp dir, remove.
-				if ( count( glob(LYCHEE_DATA . "$tmpdirname/*") ) == 0 ) { rmdir(LYCHEE_DATA . "$tmpdirname"); return false; }
+				# Prevent index.html from being moved
+				if (basename($file)==='index.html') continue;
 
-			} else {
+				$out = '';
+				$ret = '';
 
-				Log::error($database, __METHOD__, __LINE__, 'Failed to create temporary directory');
-				return false;
+				@exec($osmv . ' ' . $file . ' ' . LYCHEE_DATA . $tmpdirname, $out, $ret);
+				if (isset($ret)&&($ret>0)) Log::error($database, __METHOD__, __LINE__, "Failed to move directory or file ($ret):" . $file);
 
 			}
 
-		} else {
+		}
 
-			Log::error($database, __METHOD__, __LINE__, 'Failed to generate temporary directory name');	
+		# If no files could be copied to the temp dir, remove
+		$files = glob(LYCHEE_DATA . $tmpdirname . '/*');
+		if (count($files)===0) {
+			rmdir(LYCHEE_DATA . $tmpdirname);
+			Log::error($database, __METHOD__, __LINE__, 'Import failed, because files could not be temporary moved to ' . LYCHEE_DATA);
 			return false;
-
 		}
 
-		global $plugins, $settings;
-
+		$error				= false;
 		$contains['photos']	= false;
 		$contains['albums']	= false;
-			
-		$path = LYCHEE_DATA . "$tmpdirname"; 
-		$files = glob($path . '/*');	
+
+		$path = LYCHEE_DATA . $tmpdirname;
+		$files = glob($path . '/*');
 
 		foreach ($files as $file) {
 
-			//It's possible to move a file because of directory permissions but
-			//the file may still be unreadable by the user
-			if (!is_readable($file) ) { Log::error($database, __METHOD__, __LINE__, 'Could not read file or directory: ' . $file); continue; }
+			# It is possible to move a file because of directory permissions but
+			# the file may still be unreadable by the user
+			if (!is_readable($file)) {
+				$error = true;
+				Log::error($database, __METHOD__, __LINE__, 'Could not read file or directory: ' . $file);
+				continue;
+			}
 
 			if (@exif_imagetype($file)!==false) {
 
 				# Photo
 
-				if (!Import::photo($database, $plugins, $settings, $file, $albumID)) return false;
+				if (!Import::photo($database, $plugins, $settings, $file, $albumID)) {
+					$error = true;
+					Log::error($database, __METHOD__, __LINE__, 'Could not import file: ' . $file);
+					continue;
+				}
 				$contains['photos'] = true;
 
 			} else if (is_dir($file)) {
@@ -161,13 +143,23 @@ class Import extends Module {
 				$album		= new Album($database, null, null, null);
 				$newAlbumID	= $album->add('[Import] ' . $name);
 
-				if ($newAlbumID!==false) Import::server($newAlbumID, $file . '/');
+				if ($newAlbumID===false) {
+					$error = true;
+					Log::error($database, __METHOD__, __LINE__, 'Could not create album in Lychee (' . $newAlbumID . ')');
+					continue;
+				}
+
+				Import::server($newAlbumID, $file . '/');
+
 				$contains['albums'] = true;
 
 			}
 
 		}
 
+		# Delete tmpdir if import was successful
+		if ($error===false) rmdir(LYCHEE_DATA . $tmpdirname);
+
 		if ($contains['photos']===false&&$contains['albums']===false)	return 'Warning: Folder empty or no readable files to process!';
 		if ($contains['photos']===false&&$contains['albums']===true)	return 'Notice: Import only contains albums!';
 		return true;