<?php

/********************
     CLASS UPLOAD
*********************/
class upload {
	
	// Zet variablen vast
	var $maxkb = "2000"; // Het maximum aantal kilobytes dat het bestand mag bevatten
	var $directory = "uploads/"; // De map waar bestanden naar worden geupload
	var $extensies = ".jpg|.bmp|.gif|.png|.ico"; // De toegelaten extensies, met punt erbij en gescheiden door een pipe (|), star (*) om alles toe te laten
	
	// functie changename, zal de naam veranderen als de naam van het bestand al bestaat
	function changename($bestand) {
		// De naam veranderen
		if(file_exists($this->directory.$bestand)) { // als het bestand bestaat
			$bestand2=$bestand; // een extra backup maken
			$i=0; // geef dan een teller
			while(file_exists($this->directory.$bestand)) { // zolang er geen goede naam is gevonden
				$bestand=$i." ".$bestand2; // geef het bestand een nieuwe naam 
				$i++; // de teller updaten, anders krijgen we iets on-eind-igs.
			}
			return $bestand; // geef het resultaat door
		}
		else { // als er nog geen bestand met die naam bestaat
			return $bestand; // geef dan de originele naam weer 
		}
	}
	
	// functie upload, load alle bestanden op
	function fileupload($bestand,$locatie) {
		if(is_uploaded_file($bestand['tmp_name'])) { // Is het bestand upgeload ?
			if(move_uploaded_file($bestand['tmp_name'],$this->directory.$locatie."/".$this->changename($bestand['name']))) { // Is het bestand verplaatst ?
				return true; // Geef true weer, het bestand is verplaatst
			}
			else {
				return false; // Geef false weer, het bestand is niet verplaatst
			}
		}
		else {
			return false; // Geef false weer, het bestand is niet upgeload
		}
	}
	
	// functie k(ilo)b(ytes)to( )b(ytes), zet megabytes om in bytes
	function kbtob($waarde) {
		$bytes = $waarde*1024; // zet om in kilobytes
		$bytes = ceil($bytes);
		return $bytes; // geef de afgeronde waarde weer
	}
	
	// functie checksize, controleer de grootte van het bestand
	function checksize($bestand) {
		if($bestand['size'] < $this->kbtob($this->maxkb)) { // Als het bestand kleiner is dan de maximum grootte
			return true; // Geef dan true weer
		}
		else { // en anders
			return false; // Geef false weer
		}
	}
	
	// functie checkext, controleer de extesie van het bestand
	function checkext($bestand) {
		if($this->extensies == "*") { // als alles is toegelaten
			return true; // geef dan true weer
		}
		else { // als niet alles is toegelaten
			if(eregi("((".$this->extensies.")$)",strtolower($bestand['name']))) { // als de extensie overeenkomt met de opgegeven mogelijkheden
				return true; // geef dan true weer
			}
			else { // Komt de opgegeven extensie niet overeen
				return false; // Geef dan false weer
			}
		}
	}
		
	// functie loadup, main functie, laad alles mooi op in de map
	function loadup($bestand,$locatie) {
		if($this->checksize($bestand) == true) { // controleer de grootte van het bestand
			if($this->checkext($bestand) == true) { // controleer de extensie van het bestand
				if($this->fileupload($bestand,$locatie) == true) {
					echo "Het bestand ".$bestand['name']." is succesvol upgeload.<br>";
				}
				else {
					echo "Het bestand ".$bestand['name']." is niet correct upgeload.<br>";
				}
			}
			else { // De extensie is niet correct
				echo "Het type bestand dat je probeerde op te loaden is niet toegelaten. (".$bestand['name'].")<br>"; // Geef een error
			}
		}
		else { // Het bestand is te groot
			echo "Het bestand dat je probeerde op te loaden is te groot.(".$bestand['name'].")<br>"; // Geef error
		}
	}
	
}




/********************
  CLASS dirandfiles
*********************/

class dirandfiles extends upload {
	// function replace - Verplaats bestand (of - rename bestand)
	function replace($oudenaam, $nieuwenaam) {
		if(file_exists($this->directory.$oudenaam)) { // als de oude naam bestaat, ga door
			if(!file_exists($this->directory.$nieuwenaam)) { // als de nieuwe naam nog niet bestaat, ga door
				if(copy($this->directory.$oudenaam,$this->directory.$nieuwenaam)) { // als het succesvol is gecopieerd
					unlink($this->directory.$oudenaam); // verwijder dan de nieuwe naam
				}
				else { // als het niet opnieuw is genaamt
					return false; // geef dan false weer
				}
			}
			else { // als de nieuwe naam al bestaat
				return false; // geef dan false weer
			}
		}
		else { // als de oude map niet bestaat
			return false; // geef dan false weer
		}
	}
	
	// function rename_dir - geef een map een nieuwe naam
	function rename_dir($oudenaam, $nieuwenaam, $locatie) {
		if(is_dir($this->directory.$locatie.$oudenaam)) { // als de oude naam bestaat
			if(!is_dir($this->directory.$locatie.$nieuwenaam)) { // als de nieuwe naam nog niet bestaat
				if(rename($this->directory.$locatie.$oudenaam, $this->directory.$locatie.$nieuwenaam)) { // geef de map een nieuwe naam
					return true; // geef dan true weer
				}
				else { // als de map niet is gerenamed
					return false; // geef dan false weer
				}
			}
			else { // als de nieuwe map al bestaat
				return false; // geef dan false weer
			}
		}
		else { // als de oude naam niet bestaat
			return false; // geef dan false weer.
		}
	}
	
	// create_dir - maak een map aan in een map
	function create_dir($naam,$locatie) {
		if(!is_dir($naam)) { // als de map nog niet bestaat
			if(mkdir($this->directory.$locatie.$naam)) { // Als de map succesvol is gemaakt
				return true; // geef dan true weer
			}
			else { // als de map niet correct is gemaakt
				return false; // geef dan false weer
			}
		}
		else { // als de map al bestaat
			return false; // Geef dan false weer
		}
	}
	
	// functie delete_file - verwijder een file of map
	function delete_file($bestand) {
		if(file_exists($this->directory.$bestand)) { // als het bestand bestaat (je kunt niets verwijderen dat niet bestaat)
			if(unlink($this->directory.$bestand)) {
				return true;
			}
			else {
				return false;
			}
		}
		else {
			return false;
		}
	}
	
	// Functie delete_dir - verwijder een map
	function delete_dir($dir) {
		if(is_dir($this->directory.$dir)) {
			$handle=opendir($this->directory.$dir); 
			while (false!==($file = readdir($handle))) { 
    			if ($file != "." && $file != "..") { 
        			unlink($this->directory.$dir."/".$file);
    			} 
			}			
			closedir($handle); 
			rmdir($this->directory.$dir);
		}
	}
}

?>