1<?php 2 3namespace Sabre\VObject\Property; 4 5use 6 LogicException, 7 Sabre\VObject\Property; 8 9/** 10 * BINARY property 11 * 12 * This object represents BINARY values. 13 * 14 * Binary values are most commonly used by the iCalendar ATTACH property, and 15 * the vCard PHOTO property. 16 * 17 * This property will transparently encode and decode to base64. 18 * 19 * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/). 20 * @author Evert Pot (http://evertpot.com/) 21 * @license http://sabre.io/license/ Modified BSD License 22 */ 23class Binary extends Property { 24 25 /** 26 * In case this is a multi-value property. This string will be used as a 27 * delimiter. 28 * 29 * @var string|null 30 */ 31 public $delimiter = null; 32 33 /** 34 * Updates the current value. 35 * 36 * This may be either a single, or multiple strings in an array. 37 * 38 * @param string|array $value 39 * @return void 40 */ 41 public function setValue($value) { 42 43 if(is_array($value)) { 44 45 if(count($value) === 1) { 46 $this->value = $value[0]; 47 } else { 48 throw new \InvalidArgumentException('The argument must either be a string or an array with only one child'); 49 } 50 51 } else { 52 53 $this->value = $value; 54 55 } 56 57 } 58 59 /** 60 * Sets a raw value coming from a mimedir (iCalendar/vCard) file. 61 * 62 * This has been 'unfolded', so only 1 line will be passed. Unescaping is 63 * not yet done, but parameters are not included. 64 * 65 * @param string $val 66 * @return void 67 */ 68 public function setRawMimeDirValue($val) { 69 70 $this->value = base64_decode($val); 71 72 } 73 74 /** 75 * Returns a raw mime-dir representation of the value. 76 * 77 * @return string 78 */ 79 public function getRawMimeDirValue() { 80 81 return base64_encode($this->value); 82 83 } 84 85 /** 86 * Returns the type of value. 87 * 88 * This corresponds to the VALUE= parameter. Every property also has a 89 * 'default' valueType. 90 * 91 * @return string 92 */ 93 public function getValueType() { 94 95 return 'BINARY'; 96 97 } 98 99 /** 100 * Returns the value, in the format it should be encoded for json. 101 * 102 * This method must always return an array. 103 * 104 * @return array 105 */ 106 public function getJsonValue() { 107 108 return array(base64_encode($this->getValue())); 109 110 } 111 112 /** 113 * Sets the json value, as it would appear in a jCard or jCal object. 114 * 115 * The value must always be an array. 116 * 117 * @param array $value 118 * @return void 119 */ 120 public function setJsonValue(array $value) { 121 122 $value = array_map('base64_decode', $value); 123 parent::setJsonValue($value); 124 125 } 126 127} 128