/** * create a new listing in the dao. * doesn't do any of the sanitization or validation, just * does the raw heavy lifting of assigning all the values to the dao and running the query. */ public function createListing(Souk\Listing $listing) { // grab all the fields passed in that don't map to pre-defined fields. $attributes = array(); foreach (array_diff($listing->keys(), Souk\Util::fields()) as $k) { if ($k == 'id') { continue; } $attributes[$k] = $listing->{$k}; } $shard = Souk\Util::dateshard()->shard(); $table = $this->table($shard); if (\Gaia\Souk\Storage::isAutoSchemaEnabled()) { $this->create($table); } if (!Transaction::atStart()) { Transaction::add($this->db); } $sql = "INSERT INTO {$table}\n (seller, created, expires, closed, buyer, bidder, bidcount, touch, price, pricesort, item_id, bid, step, reserve, quantity) \n VALUES \n (%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)"; $rs = $this->execute($sql, $listing->seller, $listing->created, $listing->expires, $listing->closed, $listing->buyer, $listing->bidder, $listing->bidcount, $listing->touch, $listing->price, Souk\Util::calcPriceSort($listing->price, $listing->quantity), $listing->item_id, $listing->bid, $listing->step, $listing->reserve, $listing->quantity); $row_id = $rs->insertid(); $listing->id = Souk\Util::composeId($shard, $row_id); if ($attributes) { $table_attr = $table . '_attr'; $sql = "INSERT INTO `{$table_attr}` (`row_id`, `attributes`) \n VALUES (%i, %s) \n ON DUPLICATE KEY UPDATE `attributes` = VALUES(`attributes`)"; $this->execute($sql, $row_id, json_encode($attributes)); } }
/** * translate the simple array of data we store in the db in souk back into a Stockpile\Quantity object. */ protected function prepListing(Listing $listing) { $prior = $listing->priorstate(); if ($prior) { $this->prepListing($prior); } if (!isset($listing->stockpile_quantity)) { return $listing; } $listing->quantity = $this->itemAccount($listing->seller)->defaultQuantity($listing->stockpile_quantity); unset($listing->stockpile_quantity); return $listing; }
/** * when a listing changes, extract search vectors from that listing and update those cache keys * so that we can bust any cached search results that now may be invalid. */ protected function updateListingSearchVectors(Listing $listing) { $this->updateSearchVector('seller' . $listing->seller); if ($listing->buyer) { $this->updateSearchVector('buyer' . $listing->buyer); } if ($listing->bidder) { $this->updateSearchVector('bidder' . $listing->bidder); } $prior = $listing->priorstate(); if ($prior && $prior->bidder) { $this->updateSearchVector('bidder' . $prior->bidder); } }