Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/wpforms-.../vendor_p.../stripe/stripe-p.../lib
File: StripeObject.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace WPForms\Vendor\Stripe;
[2] Fix | Delete
[3] Fix | Delete
/**
[4] Fix | Delete
* Class StripeObject.
[5] Fix | Delete
*
[6] Fix | Delete
* @property null|string $id
[7] Fix | Delete
*/
[8] Fix | Delete
class StripeObject implements \ArrayAccess, \Countable, \JsonSerializable
[9] Fix | Delete
{
[10] Fix | Delete
/** @var Util\RequestOptions */
[11] Fix | Delete
protected $_opts;
[12] Fix | Delete
/** @var array */
[13] Fix | Delete
protected $_originalValues;
[14] Fix | Delete
/** @var array */
[15] Fix | Delete
protected $_values;
[16] Fix | Delete
/** @var Util\Set */
[17] Fix | Delete
protected $_unsavedValues;
[18] Fix | Delete
/** @var Util\Set */
[19] Fix | Delete
protected $_transientValues;
[20] Fix | Delete
/** @var null|array */
[21] Fix | Delete
protected $_retrieveOptions;
[22] Fix | Delete
/** @var null|ApiResponse */
[23] Fix | Delete
protected $_lastResponse;
[24] Fix | Delete
/**
[25] Fix | Delete
* @return Util\Set Attributes that should not be sent to the API because
[26] Fix | Delete
* they're not updatable (e.g. ID).
[27] Fix | Delete
*/
[28] Fix | Delete
public static function getPermanentAttributes()
[29] Fix | Delete
{
[30] Fix | Delete
static $permanentAttributes = null;
[31] Fix | Delete
if (null === $permanentAttributes) {
[32] Fix | Delete
$permanentAttributes = new Util\Set(['id']);
[33] Fix | Delete
}
[34] Fix | Delete
return $permanentAttributes;
[35] Fix | Delete
}
[36] Fix | Delete
/**
[37] Fix | Delete
* Additive objects are subobjects in the API that don't have the same
[38] Fix | Delete
* semantics as most subobjects, which are fully replaced when they're set.
[39] Fix | Delete
*
[40] Fix | Delete
* This is best illustrated by example. The `source` parameter sent when
[41] Fix | Delete
* updating a subscription is *not* additive; if we set it:
[42] Fix | Delete
*
[43] Fix | Delete
* source[object]=card&source[number]=123
[44] Fix | Delete
*
[45] Fix | Delete
* We expect the old `source` object to have been overwritten completely. If
[46] Fix | Delete
* the previous source had an `address_state` key associated with it and we
[47] Fix | Delete
* didn't send one this time, that value of `address_state` is gone.
[48] Fix | Delete
*
[49] Fix | Delete
* By contrast, additive objects are those that will have new data added to
[50] Fix | Delete
* them while keeping any existing data in place. The only known case of its
[51] Fix | Delete
* use is for `metadata`, but it could in theory be more general. As an
[52] Fix | Delete
* example, say we have a `metadata` object that looks like this on the
[53] Fix | Delete
* server side:
[54] Fix | Delete
*
[55] Fix | Delete
* metadata = ["old" => "old_value"]
[56] Fix | Delete
*
[57] Fix | Delete
* If we update the object with `metadata[new]=new_value`, the server side
[58] Fix | Delete
* object now has *both* fields:
[59] Fix | Delete
*
[60] Fix | Delete
* metadata = ["old" => "old_value", "new" => "new_value"]
[61] Fix | Delete
*
[62] Fix | Delete
* This is okay in itself because usually users will want to treat it as
[63] Fix | Delete
* additive:
[64] Fix | Delete
*
[65] Fix | Delete
* $obj->metadata["new"] = "new_value";
[66] Fix | Delete
* $obj->save();
[67] Fix | Delete
*
[68] Fix | Delete
* However, in other cases, they may want to replace the entire existing
[69] Fix | Delete
* contents:
[70] Fix | Delete
*
[71] Fix | Delete
* $obj->metadata = ["new" => "new_value"];
[72] Fix | Delete
* $obj->save();
[73] Fix | Delete
*
[74] Fix | Delete
* This is where things get a little bit tricky because in order to clear
[75] Fix | Delete
* any old keys that may have existed, we actually have to send an explicit
[76] Fix | Delete
* empty string to the server. So the operation above would have to send
[77] Fix | Delete
* this form to get the intended behavior:
[78] Fix | Delete
*
[79] Fix | Delete
* metadata[old]=&metadata[new]=new_value
[80] Fix | Delete
*
[81] Fix | Delete
* This method allows us to track which parameters are considered additive,
[82] Fix | Delete
* and lets us behave correctly where appropriate when serializing
[83] Fix | Delete
* parameters to be sent.
[84] Fix | Delete
*
[85] Fix | Delete
* @return Util\Set Set of additive parameters
[86] Fix | Delete
*/
[87] Fix | Delete
public static function getAdditiveParams()
[88] Fix | Delete
{
[89] Fix | Delete
static $additiveParams = null;
[90] Fix | Delete
if (null === $additiveParams) {
[91] Fix | Delete
// Set `metadata` as additive so that when it's set directly we remember
[92] Fix | Delete
// to clear keys that may have been previously set by sending empty
[93] Fix | Delete
// values for them.
[94] Fix | Delete
//
[95] Fix | Delete
// It's possible that not every object has `metadata`, but having this
[96] Fix | Delete
// option set when there is no `metadata` field is not harmful.
[97] Fix | Delete
$additiveParams = new Util\Set(['metadata']);
[98] Fix | Delete
}
[99] Fix | Delete
return $additiveParams;
[100] Fix | Delete
}
[101] Fix | Delete
public function __construct($id = null, $opts = null)
[102] Fix | Delete
{
[103] Fix | Delete
list($id, $this->_retrieveOptions) = Util\Util::normalizeId($id);
[104] Fix | Delete
$this->_opts = Util\RequestOptions::parse($opts);
[105] Fix | Delete
$this->_originalValues = [];
[106] Fix | Delete
$this->_values = [];
[107] Fix | Delete
$this->_unsavedValues = new Util\Set();
[108] Fix | Delete
$this->_transientValues = new Util\Set();
[109] Fix | Delete
if (null !== $id) {
[110] Fix | Delete
$this->_values['id'] = $id;
[111] Fix | Delete
}
[112] Fix | Delete
}
[113] Fix | Delete
// Standard accessor magic methods
[114] Fix | Delete
public function __set($k, $v)
[115] Fix | Delete
{
[116] Fix | Delete
if (static::getPermanentAttributes()->includes($k)) {
[117] Fix | Delete
throw new Exception\InvalidArgumentException("Cannot set {$k} on this object. HINT: you can't set: " . \implode(', ', static::getPermanentAttributes()->toArray()));
[118] Fix | Delete
}
[119] Fix | Delete
if ('' === $v) {
[120] Fix | Delete
throw new Exception\InvalidArgumentException('You cannot set \'' . $k . '\'to an empty string. ' . 'We interpret empty strings as NULL in requests. ' . 'You may set obj->' . $k . ' = NULL to delete the property');
[121] Fix | Delete
}
[122] Fix | Delete
$this->_values[$k] = Util\Util::convertToStripeObject($v, $this->_opts);
[123] Fix | Delete
$this->dirtyValue($this->_values[$k]);
[124] Fix | Delete
$this->_unsavedValues->add($k);
[125] Fix | Delete
}
[126] Fix | Delete
/**
[127] Fix | Delete
* @param mixed $k
[128] Fix | Delete
*
[129] Fix | Delete
* @return bool
[130] Fix | Delete
*/
[131] Fix | Delete
public function __isset($k)
[132] Fix | Delete
{
[133] Fix | Delete
return isset($this->_values[$k]);
[134] Fix | Delete
}
[135] Fix | Delete
public function __unset($k)
[136] Fix | Delete
{
[137] Fix | Delete
unset($this->_values[$k]);
[138] Fix | Delete
$this->_transientValues->add($k);
[139] Fix | Delete
$this->_unsavedValues->discard($k);
[140] Fix | Delete
}
[141] Fix | Delete
public function &__get($k)
[142] Fix | Delete
{
[143] Fix | Delete
// function should return a reference, using $nullval to return a reference to null
[144] Fix | Delete
$nullval = null;
[145] Fix | Delete
if (!empty($this->_values) && \array_key_exists($k, $this->_values)) {
[146] Fix | Delete
return $this->_values[$k];
[147] Fix | Delete
}
[148] Fix | Delete
if (!empty($this->_transientValues) && $this->_transientValues->includes($k)) {
[149] Fix | Delete
$class = static::class;
[150] Fix | Delete
$attrs = \implode(', ', \array_keys($this->_values));
[151] Fix | Delete
$message = "Stripe Notice: Undefined property of {$class} instance: {$k}. " . "HINT: The {$k} attribute was set in the past, however. " . 'It was then wiped when refreshing the object ' . "with the result returned by Stripe's API, " . 'probably as a result of a save(). The attributes currently ' . "available on this object are: {$attrs}";
[152] Fix | Delete
Stripe::getLogger()->error($message);
[153] Fix | Delete
return $nullval;
[154] Fix | Delete
}
[155] Fix | Delete
$class = static::class;
[156] Fix | Delete
Stripe::getLogger()->error("Stripe Notice: Undefined property of {$class} instance: {$k}");
[157] Fix | Delete
return $nullval;
[158] Fix | Delete
}
[159] Fix | Delete
/**
[160] Fix | Delete
* Magic method for var_dump output. Only works with PHP >= 5.6.
[161] Fix | Delete
*
[162] Fix | Delete
* @return array
[163] Fix | Delete
*/
[164] Fix | Delete
public function __debugInfo()
[165] Fix | Delete
{
[166] Fix | Delete
return $this->_values;
[167] Fix | Delete
}
[168] Fix | Delete
// ArrayAccess methods
[169] Fix | Delete
/**
[170] Fix | Delete
* @return void
[171] Fix | Delete
*/
[172] Fix | Delete
#[\ReturnTypeWillChange]
[173] Fix | Delete
public function offsetSet($k, $v)
[174] Fix | Delete
{
[175] Fix | Delete
$this->{$k} = $v;
[176] Fix | Delete
}
[177] Fix | Delete
/**
[178] Fix | Delete
* @return bool
[179] Fix | Delete
*/
[180] Fix | Delete
#[\ReturnTypeWillChange]
[181] Fix | Delete
public function offsetExists($k)
[182] Fix | Delete
{
[183] Fix | Delete
return \array_key_exists($k, $this->_values);
[184] Fix | Delete
}
[185] Fix | Delete
/**
[186] Fix | Delete
* @return void
[187] Fix | Delete
*/
[188] Fix | Delete
#[\ReturnTypeWillChange]
[189] Fix | Delete
public function offsetUnset($k)
[190] Fix | Delete
{
[191] Fix | Delete
unset($this->{$k});
[192] Fix | Delete
}
[193] Fix | Delete
/**
[194] Fix | Delete
* @return mixed
[195] Fix | Delete
*/
[196] Fix | Delete
#[\ReturnTypeWillChange]
[197] Fix | Delete
public function offsetGet($k)
[198] Fix | Delete
{
[199] Fix | Delete
return \array_key_exists($k, $this->_values) ? $this->_values[$k] : null;
[200] Fix | Delete
}
[201] Fix | Delete
/**
[202] Fix | Delete
* @return int
[203] Fix | Delete
*/
[204] Fix | Delete
#[\ReturnTypeWillChange]
[205] Fix | Delete
public function count()
[206] Fix | Delete
{
[207] Fix | Delete
return \count($this->_values);
[208] Fix | Delete
}
[209] Fix | Delete
public function keys()
[210] Fix | Delete
{
[211] Fix | Delete
return \array_keys($this->_values);
[212] Fix | Delete
}
[213] Fix | Delete
public function values()
[214] Fix | Delete
{
[215] Fix | Delete
return \array_values($this->_values);
[216] Fix | Delete
}
[217] Fix | Delete
/**
[218] Fix | Delete
* This unfortunately needs to be public to be used in Util\Util.
[219] Fix | Delete
*
[220] Fix | Delete
* @param array $values
[221] Fix | Delete
* @param null|array|string|Util\RequestOptions $opts
[222] Fix | Delete
*
[223] Fix | Delete
* @return static the object constructed from the given values
[224] Fix | Delete
*/
[225] Fix | Delete
public static function constructFrom($values, $opts = null)
[226] Fix | Delete
{
[227] Fix | Delete
$obj = new static(isset($values['id']) ? $values['id'] : null);
[228] Fix | Delete
$obj->refreshFrom($values, $opts);
[229] Fix | Delete
return $obj;
[230] Fix | Delete
}
[231] Fix | Delete
/**
[232] Fix | Delete
* Refreshes this object using the provided values.
[233] Fix | Delete
*
[234] Fix | Delete
* @param array $values
[235] Fix | Delete
* @param null|array|string|Util\RequestOptions $opts
[236] Fix | Delete
* @param bool $partial defaults to false
[237] Fix | Delete
*/
[238] Fix | Delete
public function refreshFrom($values, $opts, $partial = \false)
[239] Fix | Delete
{
[240] Fix | Delete
$this->_opts = Util\RequestOptions::parse($opts);
[241] Fix | Delete
$this->_originalValues = self::deepCopy($values);
[242] Fix | Delete
if ($values instanceof StripeObject) {
[243] Fix | Delete
$values = $values->toArray();
[244] Fix | Delete
}
[245] Fix | Delete
// Wipe old state before setting new. This is useful for e.g. updating a
[246] Fix | Delete
// customer, where there is no persistent card parameter. Mark those values
[247] Fix | Delete
// which don't persist as transient
[248] Fix | Delete
if ($partial) {
[249] Fix | Delete
$removed = new Util\Set();
[250] Fix | Delete
} else {
[251] Fix | Delete
$removed = new Util\Set(\array_diff(\array_keys($this->_values), \array_keys($values)));
[252] Fix | Delete
}
[253] Fix | Delete
foreach ($removed->toArray() as $k) {
[254] Fix | Delete
unset($this->{$k});
[255] Fix | Delete
}
[256] Fix | Delete
$this->updateAttributes($values, $opts, \false);
[257] Fix | Delete
foreach ($values as $k => $v) {
[258] Fix | Delete
$this->_transientValues->discard($k);
[259] Fix | Delete
$this->_unsavedValues->discard($k);
[260] Fix | Delete
}
[261] Fix | Delete
}
[262] Fix | Delete
/**
[263] Fix | Delete
* Mass assigns attributes on the model.
[264] Fix | Delete
*
[265] Fix | Delete
* @param array $values
[266] Fix | Delete
* @param null|array|string|Util\RequestOptions $opts
[267] Fix | Delete
* @param bool $dirty defaults to true
[268] Fix | Delete
*/
[269] Fix | Delete
public function updateAttributes($values, $opts = null, $dirty = \true)
[270] Fix | Delete
{
[271] Fix | Delete
foreach ($values as $k => $v) {
[272] Fix | Delete
// Special-case metadata to always be cast as a StripeObject
[273] Fix | Delete
// This is necessary in case metadata is empty, as PHP arrays do
[274] Fix | Delete
// not differentiate between lists and hashes, and we consider
[275] Fix | Delete
// empty arrays to be lists.
[276] Fix | Delete
if ('metadata' === $k && \is_array($v)) {
[277] Fix | Delete
$this->_values[$k] = StripeObject::constructFrom($v, $opts);
[278] Fix | Delete
} else {
[279] Fix | Delete
$this->_values[$k] = Util\Util::convertToStripeObject($v, $opts);
[280] Fix | Delete
}
[281] Fix | Delete
if ($dirty) {
[282] Fix | Delete
$this->dirtyValue($this->_values[$k]);
[283] Fix | Delete
}
[284] Fix | Delete
$this->_unsavedValues->add($k);
[285] Fix | Delete
}
[286] Fix | Delete
}
[287] Fix | Delete
/**
[288] Fix | Delete
* @param bool $force defaults to false
[289] Fix | Delete
*
[290] Fix | Delete
* @return array a recursive mapping of attributes to values for this object,
[291] Fix | Delete
* including the proper value for deleted attributes
[292] Fix | Delete
*/
[293] Fix | Delete
public function serializeParameters($force = \false)
[294] Fix | Delete
{
[295] Fix | Delete
$updateParams = [];
[296] Fix | Delete
foreach ($this->_values as $k => $v) {
[297] Fix | Delete
// There are a few reasons that we may want to add in a parameter for
[298] Fix | Delete
// update:
[299] Fix | Delete
//
[300] Fix | Delete
// 1. The `$force` option has been set.
[301] Fix | Delete
// 2. We know that it was modified.
[302] Fix | Delete
// 3. Its value is a StripeObject. A StripeObject may contain modified
[303] Fix | Delete
// values within in that its parent StripeObject doesn't know about.
[304] Fix | Delete
//
[305] Fix | Delete
$original = \array_key_exists($k, $this->_originalValues) ? $this->_originalValues[$k] : null;
[306] Fix | Delete
$unsaved = $this->_unsavedValues->includes($k);
[307] Fix | Delete
if ($force || $unsaved || $v instanceof StripeObject) {
[308] Fix | Delete
$updateParams[$k] = $this->serializeParamsValue($this->_values[$k], $original, $unsaved, $force, $k);
[309] Fix | Delete
}
[310] Fix | Delete
}
[311] Fix | Delete
// a `null` that makes it out of `serializeParamsValue` signals an empty
[312] Fix | Delete
// value that we shouldn't appear in the serialized form of the object
[313] Fix | Delete
return \array_filter($updateParams, function ($v) {
[314] Fix | Delete
return null !== $v;
[315] Fix | Delete
});
[316] Fix | Delete
}
[317] Fix | Delete
public function serializeParamsValue($value, $original, $unsaved, $force, $key = null)
[318] Fix | Delete
{
[319] Fix | Delete
// The logic here is that essentially any object embedded in another
[320] Fix | Delete
// object that had a `type` is actually an API resource of a different
[321] Fix | Delete
// type that's been included in the response. These other resources must
[322] Fix | Delete
// be updated from their proper endpoints, and therefore they are not
[323] Fix | Delete
// included when serializing even if they've been modified.
[324] Fix | Delete
//
[325] Fix | Delete
// There are _some_ known exceptions though.
[326] Fix | Delete
//
[327] Fix | Delete
// For example, if the value is unsaved (meaning the user has set it), and
[328] Fix | Delete
// it looks like the API resource is persisted with an ID, then we include
[329] Fix | Delete
// the object so that parameters are serialized with a reference to its
[330] Fix | Delete
// ID.
[331] Fix | Delete
//
[332] Fix | Delete
// Another example is that on save API calls it's sometimes desirable to
[333] Fix | Delete
// update a customer's default source by setting a new card (or other)
[334] Fix | Delete
// object with `->source=` and then saving the customer. The
[335] Fix | Delete
// `saveWithParent` flag to override the default behavior allows us to
[336] Fix | Delete
// handle these exceptions.
[337] Fix | Delete
//
[338] Fix | Delete
// We throw an error if a property was set explicitly but we can't do
[339] Fix | Delete
// anything with it because the integration is probably not working as the
[340] Fix | Delete
// user intended it to.
[341] Fix | Delete
if (null === $value) {
[342] Fix | Delete
return '';
[343] Fix | Delete
}
[344] Fix | Delete
if ($value instanceof ApiResource && !$value->saveWithParent) {
[345] Fix | Delete
if (!$unsaved) {
[346] Fix | Delete
return null;
[347] Fix | Delete
}
[348] Fix | Delete
if (isset($value->id)) {
[349] Fix | Delete
return $value;
[350] Fix | Delete
}
[351] Fix | Delete
throw new Exception\InvalidArgumentException("Cannot save property `{$key}` containing an API resource of type " . \get_class($value) . ". It doesn't appear to be persisted and is " . 'not marked as `saveWithParent`.');
[352] Fix | Delete
}
[353] Fix | Delete
if (\is_array($value)) {
[354] Fix | Delete
if (Util\Util::isList($value)) {
[355] Fix | Delete
// Sequential array, i.e. a list
[356] Fix | Delete
$update = [];
[357] Fix | Delete
foreach ($value as $v) {
[358] Fix | Delete
$update[] = $this->serializeParamsValue($v, null, \true, $force);
[359] Fix | Delete
}
[360] Fix | Delete
// This prevents an array that's unchanged from being resent.
[361] Fix | Delete
if ($update !== $this->serializeParamsValue($original, null, \true, $force, $key)) {
[362] Fix | Delete
return $update;
[363] Fix | Delete
}
[364] Fix | Delete
} else {
[365] Fix | Delete
// Associative array, i.e. a map
[366] Fix | Delete
return Util\Util::convertToStripeObject($value, $this->_opts)->serializeParameters();
[367] Fix | Delete
}
[368] Fix | Delete
} elseif ($value instanceof StripeObject) {
[369] Fix | Delete
$update = $value->serializeParameters($force);
[370] Fix | Delete
if ($original && $unsaved && $key && static::getAdditiveParams()->includes($key)) {
[371] Fix | Delete
$update = \array_merge(self::emptyValues($original), $update);
[372] Fix | Delete
}
[373] Fix | Delete
return $update;
[374] Fix | Delete
} else {
[375] Fix | Delete
return $value;
[376] Fix | Delete
}
[377] Fix | Delete
}
[378] Fix | Delete
/**
[379] Fix | Delete
* @return mixed
[380] Fix | Delete
*/
[381] Fix | Delete
#[\ReturnTypeWillChange]
[382] Fix | Delete
public function jsonSerialize()
[383] Fix | Delete
{
[384] Fix | Delete
return $this->toArray();
[385] Fix | Delete
}
[386] Fix | Delete
/**
[387] Fix | Delete
* Returns an associative array with the key and values composing the
[388] Fix | Delete
* Stripe object.
[389] Fix | Delete
*
[390] Fix | Delete
* @return array the associative array
[391] Fix | Delete
*/
[392] Fix | Delete
public function toArray()
[393] Fix | Delete
{
[394] Fix | Delete
$maybeToArray = function ($value) {
[395] Fix | Delete
if (null === $value) {
[396] Fix | Delete
return null;
[397] Fix | Delete
}
[398] Fix | Delete
return \is_object($value) && \method_exists($value, 'toArray') ? $value->toArray() : $value;
[399] Fix | Delete
};
[400] Fix | Delete
return \array_reduce(\array_keys($this->_values), function ($acc, $k) use($maybeToArray) {
[401] Fix | Delete
if ('_' === \substr((string) $k, 0, 1)) {
[402] Fix | Delete
return $acc;
[403] Fix | Delete
}
[404] Fix | Delete
$v = $this->_values[$k];
[405] Fix | Delete
if (Util\Util::isList($v)) {
[406] Fix | Delete
$acc[$k] = \array_map($maybeToArray, $v);
[407] Fix | Delete
} else {
[408] Fix | Delete
$acc[$k] = $maybeToArray($v);
[409] Fix | Delete
}
[410] Fix | Delete
return $acc;
[411] Fix | Delete
}, []);
[412] Fix | Delete
}
[413] Fix | Delete
/**
[414] Fix | Delete
* Returns a pretty JSON representation of the Stripe object.
[415] Fix | Delete
*
[416] Fix | Delete
* @return string the JSON representation of the Stripe object
[417] Fix | Delete
*/
[418] Fix | Delete
public function toJSON()
[419] Fix | Delete
{
[420] Fix | Delete
return \json_encode($this->toArray(), \JSON_PRETTY_PRINT);
[421] Fix | Delete
}
[422] Fix | Delete
public function __toString()
[423] Fix | Delete
{
[424] Fix | Delete
$class = static::class;
[425] Fix | Delete
return $class . ' JSON: ' . $this->toJSON();
[426] Fix | Delete
}
[427] Fix | Delete
/**
[428] Fix | Delete
* Sets all keys within the StripeObject as unsaved so that they will be
[429] Fix | Delete
* included with an update when `serializeParameters` is called. This
[430] Fix | Delete
* method is also recursive, so any StripeObjects contained as values or
[431] Fix | Delete
* which are values in a tenant array are also marked as dirty.
[432] Fix | Delete
*/
[433] Fix | Delete
public function dirty()
[434] Fix | Delete
{
[435] Fix | Delete
$this->_unsavedValues = new Util\Set(\array_keys($this->_values));
[436] Fix | Delete
foreach ($this->_values as $k => $v) {
[437] Fix | Delete
$this->dirtyValue($v);
[438] Fix | Delete
}
[439] Fix | Delete
}
[440] Fix | Delete
protected function dirtyValue($value)
[441] Fix | Delete
{
[442] Fix | Delete
if (\is_array($value)) {
[443] Fix | Delete
foreach ($value as $v) {
[444] Fix | Delete
$this->dirtyValue($v);
[445] Fix | Delete
}
[446] Fix | Delete
} elseif ($value instanceof StripeObject) {
[447] Fix | Delete
$value->dirty();
[448] Fix | Delete
}
[449] Fix | Delete
}
[450] Fix | Delete
/**
[451] Fix | Delete
* Produces a deep copy of the given object including support for arrays
[452] Fix | Delete
* and StripeObjects.
[453] Fix | Delete
*
[454] Fix | Delete
* @param mixed $obj
[455] Fix | Delete
*/
[456] Fix | Delete
protected static function deepCopy($obj)
[457] Fix | Delete
{
[458] Fix | Delete
if (\is_array($obj)) {
[459] Fix | Delete
$copy = [];
[460] Fix | Delete
foreach ($obj as $k => $v) {
[461] Fix | Delete
$copy[$k] = self::deepCopy($v);
[462] Fix | Delete
}
[463] Fix | Delete
return $copy;
[464] Fix | Delete
}
[465] Fix | Delete
if ($obj instanceof StripeObject) {
[466] Fix | Delete
return $obj::constructFrom(self::deepCopy($obj->_values), clone $obj->_opts);
[467] Fix | Delete
}
[468] Fix | Delete
return $obj;
[469] Fix | Delete
}
[470] Fix | Delete
/**
[471] Fix | Delete
* Returns a hash of empty values for all the values that are in the given
[472] Fix | Delete
* StripeObject.
[473] Fix | Delete
*
[474] Fix | Delete
* @param mixed $obj
[475] Fix | Delete
*/
[476] Fix | Delete
public static function emptyValues($obj)
[477] Fix | Delete
{
[478] Fix | Delete
if (\is_array($obj)) {
[479] Fix | Delete
$values = $obj;
[480] Fix | Delete
} elseif ($obj instanceof StripeObject) {
[481] Fix | Delete
$values = $obj->_values;
[482] Fix | Delete
} else {
[483] Fix | Delete
throw new Exception\InvalidArgumentException('empty_values got unexpected object type: ' . \get_class($obj));
[484] Fix | Delete
}
[485] Fix | Delete
return \array_fill_keys(\array_keys($values), '');
[486] Fix | Delete
}
[487] Fix | Delete
/**
[488] Fix | Delete
* @return null|ApiResponse The last response from the Stripe API
[489] Fix | Delete
*/
[490] Fix | Delete
public function getLastResponse()
[491] Fix | Delete
{
[492] Fix | Delete
return $this->_lastResponse;
[493] Fix | Delete
}
[494] Fix | Delete
/**
[495] Fix | Delete
* Sets the last response from the Stripe API.
[496] Fix | Delete
*
[497] Fix | Delete
* @param ApiResponse $resp
[498] Fix | Delete
*/
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function