/** * Updates a gateway. * * @param Model_Gateway $gateway The gateway to update. * @param array $data The data to use to update the gateway. * * @return Model_Gateway */ public static function update(Model_Gateway $gateway, array $data = array()) { $gateway->populate($data); if (!empty($data['meta'])) { $meta_names = array_keys($data['meta']); $gateway_metas = $gateway->meta($meta_names); $enc_key = Config::get('security.db_enc_key'); foreach ($meta_names as $name) { $value = Crypt::encode($data['meta'][$name], $enc_key); if (!isset($gateway_metas[$name])) { $name_meta = Model_Gateway_Meta::name($name, $value); $gateway->metas[] = $name_meta; } else { $name_meta = $gateway_metas[$name]; $name_meta->value = $value; try { $name_meta->save(); } catch (FuelException $e) { Log::error($e); return false; } } } } try { $gateway->save(); } catch (FuelException $e) { Log::error($e); return false; } return $gateway; }
/** * Returns meta data for this gateway instance. * * @param string $name The meta name to get. * * @return array|mixed */ public function meta($name = null) { if (!$name) { return Model_Gateway_Meta::query()->where('gateway_id', $this->id)->get(); } elseif (is_array($name)) { $meta_array = array(); $metas = Model_Gateway_Meta::query()->where('gateway_id', $this->id)->where('name', 'in', $name)->get(); foreach ($metas as $meta) { $meta_array[$meta->name] = $meta; } return $meta_array; } return Model_Gateway_Meta::find_by_gateway_id_and_name($this->id, $name); }