openrat-webdav

git clone http://git.code.weiherhei.de/openrat-webdav.git
Log | Files | Refs | README

PUT.class.php (1769B)


      1 <?php
      2 
      3 class DAV_PUT extends DAV
      4 {
      5 
      6 		
      7 	/**
      8 	 * Anlegen oder �berschreiben Dateien �ber PUT.<br>
      9 	 * Dateien k�nnen neu angelegt und �berschrieben werden.<br>
     10 	 * <br>
     11 	 * Seiten k�nnen nicht �berschrieben werden. Wird versucht,
     12 	 * eine Seite mit PUT zu �berschreiben, wird der Status "405 Not Allowed" gemeldet.<br>
     13 	 */		
     14 	public function execute()
     15 	{
     16 		// TODO: 409 (Conflict) wenn übergeordneter Ordner nicht da.
     17 
     18 		if	( $this->readonly )
     19 		{
     20 			$this->httpMethodNotAllowed();
     21 		}		
     22 		elseif	( strlen($this->data) > $this->maxFileSize*1000 )
     23 		{
     24 			// Maximale Dateigroesse ueberschritten.
     25 			// Der Status 507 "Zuwenig Speicherplatz" passt nicht ganz, aber fast :)
     26 			$this->httpStatus('507 Insufficient Storage' );
     27 		}
     28 		elseif	( ! $this->request->exists() )
     29 		{
     30 			// Neue Datei anlegen
     31 			if	( !$this->create )
     32 			{
     33 				Logger::warn('WEBDAV: Creation of files not allowed by configuration' );
     34 				$this->httpStatus('405 Not Allowed' );
     35 				return;
     36 			}
     37 
     38             $folderid = $this->request->folderid;
     39 			$this->client->fileAdd( $folderid,$this->request->basename,$this->data );
     40 			$this->httpStatus('201 Created');
     41 			return;
     42 		}
     43 		elseif	( $this->request->exists() )
     44 		{
     45 			// Bestehende Datei ueberschreiben.
     46 			$id = $this->request->objectid;
     47             $this->client->fileWrite( $id,$this->data );
     48 
     49 			$this->httpStatus('204 No Content');
     50 			return;
     51 		}
     52 		elseif	( $this->request->type == URIParser::FOLDER )
     53 		{
     54 			Logger::error('PUT on folder is not supported, use PROPFIND. Lame client?' );
     55 			$this->httpMethodNotAllowed();
     56 		}
     57 		else
     58 		{
     59 			// Fuer andere Objekttypen (Links, Seiten) ist kein PUT moeglich.
     60 			Logger::warn('PUT only available for files. Pages and links are ignored' );
     61 			$this->httpMethodNotAllowed();
     62 		}
     63 	}
     64 
     65 	
     66 }