next()) { if($row['coverdisplay'] == 2) { $row['cover'] = 'http://fichiers.bibliothequesonore.ch:8089/netbiblio/images/covers/Cover'.$row['id'].'_Original.jpg'; } else if(strlen($row['cover']) > 0) { $row['cover'] = 'http://ecx.images-amazon.com/images/I/'.$row['cover'].'._SL320_.jpg'; } $books[$row['id']] = $raw ? $row : new AudioBook($row); } return $multiple ? $books : reset($books); } /** * Retrieve the list of all readers (volunteers) having read at least 4 books (2 notices per book). * Returns an associative array containing $lastname and $firstname */ public static function listOfReaders() { $sql = "SELECT count(*), ContentShortPart AS name FROM NoticeFields WHERE Tag=901 GROUP BY ContentShortPart HAVING count(*) > 6 ORDER BY SUBSTRING(ContentShortPart, CHARINDEX(' ', ContentShortPart)+1, 15);"; $results = Connection::execute($sql); return array_map(function($row) { $fullname = str_replace("*", "", $row['name']); $parts = explode(" ", $fullname); $firstname = array_shift($parts); $lastname = implode(" ", $parts); return array( 'lastname' => $lastname, 'firstname' => $firstname); }, $results->to_array()); } /** * Retrieve the list of all genres */ public static function ListOfGenres() { $sql = "SELECT LTRIM(RTRIM(Code)) as code, TextFre AS text FROM Codes WHERE type=2 AND Code!='-' ORDER BY TextFre;"; $results = Connection::execute($sql); return array_map(function($row) { return array( 'code' => $row['code'], 'text' => $row['text'], ); }, $results->to_array()); } /** * Retrieve the list of all type available in the database. */ public static function listOfTypes() { $sql = "SELECT DISTINCT Codes.TextFre AS type FROM Codes INNER JOIN Notices ON Codes.Code = Notices.MediaType2Code WHERE Codes.Type = 2 AND Notices.NoticeNr NOT LIKE '%~%' AND Notices.NoticeNr NOT LIKE '%V%' AND Notices.NoticeNr NOT LIKE '%T%' AND Notices.MediaType1Code = 'CDD';"; $results = Connection::execute($sql); $results = array_map(function($r) { return $r['type']; }, $results->to_array()); array_unshift($results, "Jeunesse"); return $results; } /** * Retrieve the list of all books currently lended to readers. */ public static function inReading() { $sql = "SELECT noticenr, title, author, displayName FROM notices, items, circulations, useraccounts WHERE mediatype1code='N' and NoticeNr not like '%~%' AND items.noticeid = notices.noticeid AND items.ItemID=circulations.ItemID AND useraccounts.useraccountid=circulations.useraccountid ORDER BY author, title;"; $results = Connection::execute($sql); return array_map(function($row) { return array( "noticenr" => $row['noticenr'], "auteur" => $row['author'], "titre" => $row['title'], "lecteur" => $row['displayName'] ); }, $results->to_array()); } public function __set($name, $value) { if ($name == 'code' && is_string($value)) { $value = preg_replace('/[~a-zA-Z]/', '', $value); } parent::__set($name, $value); } }