|  | @@ -60,97 +60,79 @@ class Import extends Module {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	static function server($albumID = 0, $path) {
 |  |  	static function server($albumID = 0, $path) {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +		global $database, $plugins, $settings;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  		if (!isset($path)) $path = LYCHEE_UPLOADS_IMPORT;
 |  |  		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());
 |  |  		$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;
 |  |  			return false;
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -		global $plugins, $settings;
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +		$error				= false;
 | 
											
												
													
														|  |  		$contains['photos']	= false;
 |  |  		$contains['photos']	= false;
 | 
											
												
													
														|  |  		$contains['albums']	= false;
 |  |  		$contains['albums']	= false;
 | 
											
												
													
														|  | -			
 |  | 
 | 
											
												
													
														|  | -		$path = LYCHEE_DATA . "$tmpdirname"; 
 |  | 
 | 
											
												
													
														|  | -		$files = glob($path . '/*');	
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		$path = LYCHEE_DATA . $tmpdirname;
 | 
											
												
													
														|  | 
 |  | +		$files = glob($path . '/*');
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  		foreach ($files as $file) {
 |  |  		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) {
 |  |  			if (@exif_imagetype($file)!==false) {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  				# Photo
 |  |  				# 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;
 |  |  				$contains['photos'] = true;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  			} else if (is_dir($file)) {
 |  |  			} else if (is_dir($file)) {
 | 
											
										
											
												
													
														|  | @@ -161,13 +143,23 @@ class Import extends Module {
 | 
											
												
													
														|  |  				$album		= new Album($database, null, null, null);
 |  |  				$album		= new Album($database, null, null, null);
 | 
											
												
													
														|  |  				$newAlbumID	= $album->add('[Import] ' . $name);
 |  |  				$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;
 |  |  				$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']===false)	return 'Warning: Folder empty or no readable files to process!';
 | 
											
												
													
														|  |  		if ($contains['photos']===false&&$contains['albums']===true)	return 'Notice: Import only contains albums!';
 |  |  		if ($contains['photos']===false&&$contains['albums']===true)	return 'Notice: Import only contains albums!';
 | 
											
												
													
														|  |  		return true;
 |  |  		return true;
 |