next()) { $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 type available in the database. * @param boolean $withJeunesse add 'Jeunesse' to the list * @return array */ public static function ListOfGenres($withJeunesse = false) { $sql = "SELECT DISTINCT LTRIM(RTRIM(Codes.Code)) as code, LTRIM(RTRIM(Codes.TextFre)) AS text 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)->to_array(); if($withJeunesse) { array_unshift($results, array('code' => 'J', 'text' => '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); } }