1<?php 2 3namespace Sabre\CalDAV\Xml\Notification; 4 5use Sabre\CalDAV\Plugin; 6use Sabre\Xml\Writer; 7 8/** 9 * SystemStatus notification 10 * 11 * This notification can be used to indicate to the user that the system is 12 * down. 13 * 14 * @copyright Copyright (C) fruux GmbH (https://fruux.com/) 15 * @author Evert Pot (http://evertpot.com/) 16 * @license http://sabre.io/license/ Modified BSD License 17 */ 18class SystemStatus implements NotificationInterface { 19 20 const TYPE_LOW = 1; 21 const TYPE_MEDIUM = 2; 22 const TYPE_HIGH = 3; 23 24 /** 25 * A unique id 26 * 27 * @var string 28 */ 29 protected $id; 30 31 /** 32 * The type of alert. This should be one of the TYPE_ constants. 33 * 34 * @var int 35 */ 36 protected $type; 37 38 /** 39 * A human-readable description of the problem. 40 * 41 * @var string 42 */ 43 protected $description; 44 45 /** 46 * A url to a website with more information for the user. 47 * 48 * @var string 49 */ 50 protected $href; 51 52 /** 53 * Notification Etag 54 * 55 * @var string 56 */ 57 protected $etag; 58 59 /** 60 * Creates the notification. 61 * 62 * Some kind of unique id should be provided. This is used to generate a 63 * url. 64 * 65 * @param string $id 66 * @param string $etag 67 * @param int $type 68 * @param string $description 69 * @param string $href 70 */ 71 function __construct($id, $etag, $type = self::TYPE_HIGH, $description = null, $href = null) { 72 73 $this->id = $id; 74 $this->type = $type; 75 $this->description = $description; 76 $this->href = $href; 77 $this->etag = $etag; 78 79 } 80 81 /** 82 * The serialize method is called during xml writing. 83 * 84 * It should use the $writer argument to encode this object into XML. 85 * 86 * Important note: it is not needed to create the parent element. The 87 * parent element is already created, and we only have to worry about 88 * attributes, child elements and text (if any). 89 * 90 * Important note 2: If you are writing any new elements, you are also 91 * responsible for closing them. 92 * 93 * @param Writer $writer 94 * @return void 95 */ 96 function xmlSerialize(Writer $writer) { 97 98 switch ($this->type) { 99 case self::TYPE_LOW : 100 $type = 'low'; 101 break; 102 case self::TYPE_MEDIUM : 103 $type = 'medium'; 104 break; 105 default : 106 case self::TYPE_HIGH : 107 $type = 'high'; 108 break; 109 } 110 111 $writer->startElement('{' . Plugin::NS_CALENDARSERVER . '}systemstatus'); 112 $writer->writeAttribute('type', $type); 113 $writer->endElement(); 114 115 } 116 117 /** 118 * This method serializes the entire notification, as it is used in the 119 * response body. 120 * 121 * @param Writer $writer 122 * @return void 123 */ 124 function xmlSerializeFull(Writer $writer) { 125 126 $cs = '{' . Plugin::NS_CALENDARSERVER . '}'; 127 switch ($this->type) { 128 case self::TYPE_LOW : 129 $type = 'low'; 130 break; 131 case self::TYPE_MEDIUM : 132 $type = 'medium'; 133 break; 134 default : 135 case self::TYPE_HIGH : 136 $type = 'high'; 137 break; 138 } 139 140 $writer->startElement($cs . 'systemstatus'); 141 $writer->writeAttribute('type', $type); 142 143 144 if ($this->description) { 145 $writer->writeElement($cs . 'description', $this->description); 146 } 147 if ($this->href) { 148 $writer->writeElement('{DAV:}href', $this->href); 149 } 150 151 $writer->endElement(); // systemstatus 152 153 } 154 155 /** 156 * Returns a unique id for this notification 157 * 158 * This is just the base url. This should generally be some kind of unique 159 * id. 160 * 161 * @return string 162 */ 163 function getId() { 164 165 return $this->id; 166 167 } 168 169 /* 170 * Returns the ETag for this notification. 171 * 172 * The ETag must be surrounded by literal double-quotes. 173 * 174 * @return string 175 */ 176 function getETag() { 177 178 return $this->etag; 179 180 } 181 182} 183