From a4713135f3a3ce21c6f458f5db2d1b3a0c13cedc Mon Sep 17 00:00:00 2001 From: Gilles Crettenand Date: Wed, 20 May 2015 15:40:25 +0200 Subject: [PATCH] use improved method for get(Old)Circulations --- lib/AudioBook.php | 2 +- lib/User.php | 84 +++++++++++++++-------------------------------- 2 files changed, 28 insertions(+), 58 deletions(-) diff --git a/lib/AudioBook.php b/lib/AudioBook.php index 6bb5b26..a099f4e 100644 --- a/lib/AudioBook.php +++ b/lib/AudioBook.php @@ -157,7 +157,7 @@ class AudioBook extends DbMapping $row['cover'] = 'http://ecx.images-amazon.com/images/I/'.$row['cover'].'._SL320_.jpg'; } - $books[] = $raw ? $row : new AudioBook($row); + $books[$row['id']] = $raw ? $row : new AudioBook($row); } return $multiple ? $books : reset($books); diff --git a/lib/User.php b/lib/User.php index 21f0194..cba2969 100644 --- a/lib/User.php +++ b/lib/User.php @@ -121,74 +121,44 @@ class User extends DbMapping } } - public function reload() { $this->setAttributes(User::find($this->login)->toArray()); } - public function getCirculations() - { - if (!$this->circulations) { - $strSQL = "SELECT NoticeId, CheckOutDate, ItemNr FROM Circulations, Items " . - "WHERE Circulations.UseraccountId = $this->id and Items.ItemId=Circulations.ItemId " . - "ORDER BY ItemNr asc"; - - $result = Connection::execute($strSQL); - - $ids = array(); - $checkOutDates = array(); - $itemNrs = array(); - - while ($row = $result->next()) { - $ids[] = $row['NoticeId']; - $checkOutDates[] = $row['CheckOutDate']; - $itemNrs[] = $row['ItemNr']; - } - $this->circulations = AudioBook::find($ids); - - // ici je remplace le champs date du livre par la date du prĂȘt - $counter = 0; - foreach ($this->circulations as &$circulation) { + private function _getCirculations($table, $sort = "ItemNr ASC") { + $sql = sprintf("SELECT + NoticeID, + CheckOutDate, + ItemNr + FROM %s AS c, Items + WHERE + c.UseraccountId = %s + AND Items.ItemId=c.ItemId + ORDER BY %s", $table, $this->id, $sort); + + $result = Connection::execute($sql); + + $circulations = $result->to_array(); + $books = array_map(function($c) { return $c['NoticeID']; }, $circulations); + $books = AudioBook::findBy('NoticeID', $books, true); + + foreach($circulations as $c) { + $books[$c['NoticeID']]['date'] = $c['CheckOutDate']; + $books[$c['NoticeID']]['itemNr'] = $c['ItemNr']; + } - $circulation->date = substr($checkOutDates[$counter], 0, 10); - $circulation->itemNr = $itemNrs[$counter]; + return $books; + } - $counter++; - } - } - return $this->circulations; + public function getCirculations() + { + return $this->_getCirculations('Circulations'); } public function getOldCirculations() { - - //if(!$this->oldCirculations){ - $strSQL = "SELECT NoticeId, CheckOutDate FROM OldCirculations, Items " . - "WHERE OldCirculations.UseraccountId = $this->id and Items.ItemId=OldCirculations.ItemId " . - "ORDER BY CheckOutDate desc"; - - - $result = Connection::execute($strSQL); - $ids = array(); - $checkOutDates = array(); - while ($row = $result->next()) { - $ids[] = $row['NoticeId']; - $checkOutDates[] = $row['CheckOutDate']; - } - $this->oldCirculations = AudioBook::find($ids); - - // ici je remplace le champs date du livre par la date du prĂȘt - $counter = 0; - foreach ($this->oldCirculations as &$circulation) { - - $circulation->date = substr($checkOutDates[$counter], 0, 10); - $counter++; - } - - //} - - return $this->oldCirculations; + return $this->_getCirculations('OldCirculations', 'CheckOutDate DESC'); } /**