124 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Sabre\Xml;
 | |
| 
 | |
| /**
 | |
|  * Context Stack
 | |
|  *
 | |
|  * The Context maintains information about a document during either reading or
 | |
|  * writing.
 | |
|  *
 | |
|  * During this process, it may be neccesary to override this context
 | |
|  * information.
 | |
|  *
 | |
|  * This trait allows easy access to the context, and allows the end-user to
 | |
|  * override its settings for document fragments, and easily restore it again
 | |
|  * later.
 | |
|  *
 | |
|  * @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/).
 | |
|  * @author Evert Pot (http://evertpot.com/)
 | |
|  * @license http://sabre.io/license/ Modified BSD License
 | |
|  */
 | |
| trait ContextStackTrait {
 | |
| 
 | |
|     /**
 | |
|      * This is the element map. It contains a list of XML elements (in clark
 | |
|      * notation) as keys and PHP class names as values.
 | |
|      *
 | |
|      * The PHP class names must implement Sabre\Xml\Element.
 | |
|      *
 | |
|      * Values may also be a callable. In that case the function will be called
 | |
|      * directly.
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     public $elementMap = [];
 | |
| 
 | |
|     /**
 | |
|      * A contextUri pointing to the document being parsed / written.
 | |
|      * This uri may be used to resolve relative urls that may appear in the
 | |
|      * document.
 | |
|      *
 | |
|      * The reader and writer don't use this property, but as it's an extremely
 | |
|      * common use-case for parsing XML documents, it's added here as a
 | |
|      * convenience.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     public $contextUri;
 | |
| 
 | |
|     /**
 | |
|      * This is a list of namespaces that you want to give default prefixes.
 | |
|      *
 | |
|      * You must make sure you create this entire list before starting to write.
 | |
|      * They should be registered on the root element.
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     public $namespaceMap = [];
 | |
| 
 | |
|     /**
 | |
|      * This is a list of custom serializers for specific classes.
 | |
|      *
 | |
|      * The writer may use this if you attempt to serialize an object with a
 | |
|      * class that does not implement XmlSerializable.
 | |
|      *
 | |
|      * Instead it will look at this classmap to see if there is a custom
 | |
|      * serializer here. This is useful if you don't want your value objects
 | |
|      * to be responsible for serializing themselves.
 | |
|      *
 | |
|      * The keys in this classmap need to be fully qualified PHP class names,
 | |
|      * the values must be callbacks. The callbacks take two arguments. The
 | |
|      * writer class, and the value that must be written.
 | |
|      *
 | |
|      * function (Writer $writer, object $value)
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     public $classMap = [];
 | |
| 
 | |
|     /**
 | |
|      * Backups of previous contexts.
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $contextStack = [];
 | |
| 
 | |
|     /**
 | |
|      * Create a new "context".
 | |
|      *
 | |
|      * This allows you to safely modify the elementMap, contextUri or
 | |
|      * namespaceMap. After you're done, you can restore the old data again
 | |
|      * with popContext.
 | |
|      *
 | |
|      * @return null
 | |
|      */
 | |
|     function pushContext() {
 | |
| 
 | |
|         $this->contextStack[] = [
 | |
|             $this->elementMap,
 | |
|             $this->contextUri,
 | |
|             $this->namespaceMap,
 | |
|             $this->classMap
 | |
|         ];
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Restore the previous "context".
 | |
|      *
 | |
|      * @return null
 | |
|      */
 | |
|     function popContext() {
 | |
| 
 | |
|         list(
 | |
|             $this->elementMap,
 | |
|             $this->contextUri,
 | |
|             $this->namespaceMap,
 | |
|             $this->classMap
 | |
|         ) = array_pop($this->contextStack);
 | |
| 
 | |
|     }
 | |
| 
 | |
| }
 |