/** * Search for releases by album/artist/musicinfo. Used by API. */ public function searchAudio($artist, $album, $label, $track, $year, $genre = array(-1), $offset = 0, $limit = 100, $cat = array(-1), $maxage = -1) { $s = new Settings(); if ($s->getSetting('sphinxenabled')) { $sphinx = new Sphinx(); $results = $sphinx->searchAudio($artist, $album, $label, $track, $year, $genre, $offset, $limit, $cat, $maxage, array(), true); if (is_array($results)) { return $results; } } $searchsql = ""; if ($artist != "") { $searchsql .= sprintf(" and musicinfo.artist like %s ", $this->pdo->escapeString("%" . $artist . "%")); } if ($album != "") { $searchsql .= sprintf(" and musicinfo.title like %s ", $this->pdo->escapeString("%" . $album . "%")); } if ($label != "") { $searchsql .= sprintf(" and musicinfo.publisher like %s ", $this->pdo->escapeString("%" . $label . "%")); } if ($track != "") { $searchsql .= sprintf(" and musicinfo.tracks like %s ", $this->pdo->escapeString("%" . $track . "%")); } if ($year != "") { $searchsql .= sprintf(" and musicinfo.year = %d ", $year); } $catsrch = ""; $usecatindex = ""; if (count($cat) > 0 && $cat[0] != -1) { $catsrch = " and ("; foreach ($cat as $category) { if ($category != -1) { $categ = new Categorize(); if ($categ->isParent($category)) { $children = $categ->getChildren($category); $chlist = "-99"; foreach ($children as $child) { $chlist .= ", " . $child["id"]; } if ($chlist != "-99") { $catsrch .= " releases.categoryid in (" . $chlist . ") or "; } } else { $catsrch .= sprintf(" releases.categoryid = %d or ", $category); } } } $catsrch .= "1=2 )"; $usecatindex = " use index (ix_releases_categoryID) "; } if ($maxage > 0) { $maxage = sprintf(" and postdate > now() - interval %d day ", $maxage); } else { $maxage = ""; } $genresql = ""; if (count($genre) > 0 && $genre[0] != -1) { $genresql = " and ("; foreach ($genre as $g) { $genresql .= sprintf(" musicinfo.genreID = %d or ", $g); } $genresql .= "1=2 )"; } $sql = sprintf("SELECT releases.*, musicinfo.cover AS mi_cover, musicinfo.review AS mi_review, musicinfo.tracks AS mi_tracks, musicinfo.publisher AS mi_publisher, musicinfo.title AS mi_title, musicinfo.artist AS mi_artist, genres.title AS music_genrename, concat(cp.title, ' > ', c.title) AS category_name, concat(cp.id, ',', c.id) AS category_ids, groups.name AS group_name, rn.id AS nfoid FROM releases %s LEFT OUTER JOIN musicinfo ON musicinfo.id = releases.musicinfoid LEFT JOIN genres ON genres.id = musicinfo.genreID LEFT OUTER JOIN groups ON groups.id = releases.groupid LEFT OUTER JOIN category c ON c.id = releases.categoryid LEFT OUTER JOIN releasenfo rn ON rn.releaseid = releases.id AND rn.nfo IS NOT NULL LEFT OUTER JOIN category cp ON cp.id = c.parentid WHERE releases.passwordstatus <= (SELECT VALUE FROM settings WHERE setting='showpasswordedrelease') %s %s %s %s ORDER BY postdate DESC LIMIT %d, %d ", $usecatindex, $searchsql, $catsrch, $maxage, $genresql, $offset, $limit); $orderpos = strpos($sql, "order by"); $wherepos = strpos($sql, "where"); $sqlcount = "SELECT count(releases.id) AS num FROM releases INNER JOIN musicinfo ON musicinfo.id = releases.musicinfoid " . substr($sql, $wherepos, $orderpos - $wherepos); $countres = $this->pdo->queryOneRow($sqlcount, true); $res = $this->pdo->query($sql, true); if (count($res) > 0) { $res[0]["_totalrows"] = $countres["num"]; } return $res; }
/** * Search for releases by album/artist/musicinfo. Used by API. */ public function searchAudio($artist, $album, $label, $track, $year, $genre = array(-1), $offset = 0, $limit = 100, $cat = array(-1), $maxage = -1) { $s = new Sites(); $site = $s->get(); if ($site->sphinxenabled) { $sphinx = new Sphinx(); $results = $sphinx->searchAudio($artist, $album, $label, $track, $year, $genre, $offset, $limit, $cat, $maxage, array(), true); if (is_array($results)) { return $results; } } $db = new DB(); $searchsql = ""; if ($artist != "") { $searchsql .= sprintf(" and musicinfo.artist like %s ", $db->escapeString("%" . $artist . "%")); } if ($album != "") { $searchsql .= sprintf(" and musicinfo.title like %s ", $db->escapeString("%" . $album . "%")); } if ($label != "") { $searchsql .= sprintf(" and musicinfo.publisher like %s ", $db->escapeString("%" . $label . "%")); } if ($track != "") { $searchsql .= sprintf(" and musicinfo.tracks like %s ", $db->escapeString("%" . $track . "%")); } if ($year != "") { $searchsql .= sprintf(" and musicinfo.year = %d ", $year); } $catsrch = ""; $usecatindex = ""; if (count($cat) > 0 && $cat[0] != -1) { $catsrch = " and ("; foreach ($cat as $category) { if ($category != -1) { $categ = new Category(); if ($categ->isParent($category)) { $children = $categ->getChildren($category); $chlist = "-99"; foreach ($children as $child) { $chlist .= ", " . $child["ID"]; } if ($chlist != "-99") { $catsrch .= " releases.categoryID in (" . $chlist . ") or "; } } else { $catsrch .= sprintf(" releases.categoryID = %d or ", $category); } } } $catsrch .= "1=2 )"; $usecatindex = " use index (ix_releases_categoryID) "; } if ($maxage > 0) { $maxage = sprintf(" and postdate > now() - interval %d day ", $maxage); } else { $maxage = ""; } $genresql = ""; if (count($genre) > 0 && $genre[0] != -1) { $genresql = " and ("; foreach ($genre as $g) { $genresql .= sprintf(" musicinfo.genreID = %d or ", $g); } $genresql .= "1=2 )"; } $sql = sprintf("select releases.*, musicinfo.cover as mi_cover, musicinfo.review as mi_review, musicinfo.tracks as mi_tracks, musicinfo.publisher as mi_publisher, musicinfo.title as mi_title, musicinfo.artist as mi_artist, genres.title as music_genrename, concat(cp.title, ' > ', c.title) as category_name, concat(cp.ID, ',', c.ID) as category_ids, groups.name as group_name, rn.ID as nfoID from releases %s left outer join musicinfo on musicinfo.ID = releases.musicinfoID left join genres on genres.ID = musicinfo.genreID left outer join groups on groups.ID = releases.groupID left outer join category c on c.ID = releases.categoryID left outer join releasenfo rn on rn.releaseID = releases.ID and rn.nfo is not null left outer join category cp on cp.ID = c.parentID where releases.passwordstatus <= (select value from site where setting='showpasswordedrelease') %s %s %s %s order by postdate desc limit %d, %d ", $usecatindex, $searchsql, $catsrch, $maxage, $genresql, $offset, $limit); $orderpos = strpos($sql, "order by"); $wherepos = strpos($sql, "where"); $sqlcount = "select count(releases.ID) as num from releases inner join musicinfo on musicinfo.ID = releases.musicinfoID " . substr($sql, $wherepos, $orderpos - $wherepos); $countres = $db->queryOneRow($sqlcount, true); $res = $db->query($sql, true); if (count($res) > 0) { $res[0]["_totalrows"] = $countres["num"]; } return $res; }