/** * On decrement items pre * * @param Event $event * @return mixed */ public function onDecrementItemsPre(Event $event) { $event->stopPropagation(true); $cache = $event->getTarget(); $params = $event->getParams(); $keyValuePairs = $cache->getItems(array_keys($params['keyValuePairs']), $params['options']); foreach ($params['keyValuePairs'] as $key => &$value) { if (isset($keyValuePairs[$key])) { $keyValuePairs[$key] -= $value; } else { $keyValuePairs[$key] = -$value; } } return $cache->setItems($keyValuePairs, $params['options']); }
/** * Reset ignore_user_abort if it's activated and if it's the same target * who activated it. * * If exit_on_abort is enabled and the connection has been aborted * exit the script. * * @param Event $event * @return void */ public function onAfter(Event $event) { if ($this->activatedTarget === $event->getTarget()) { // exit if connection aborted if ($this->getOptions()->getExitOnAbort() && connection_aborted()) { exit; } // reset ignore_user_abort ignore_user_abort(false); // remove activated target $this->activatedTarget = null; } }
/** * On decrement items pre * * @param Event $event * @return mixed */ public function onDecrementItemsPre(Event $event) { $storage = $event->getTarget(); $params = $event->getParams(); $keyValuePairs = $storage->getItems(array_keys($params['keyValuePairs'])); foreach ($params['keyValuePairs'] as $key => &$value) { if (isset($keyValuePairs[$key])) { $keyValuePairs[$key] -= $value; } else { $keyValuePairs[$key] = -$value; } } $failedKeys = $storage->setItems($keyValuePairs); foreach ($failedKeys as $failedKey) { unset($keyValuePairs[$failedKey]); } $event->stopPropagation(true); return $keyValuePairs; }