getRedis(); $cacheData = $redis->hGet($cacheKey, $hashKey); if ($cacheData) { $cacheData = unserialize($cacheData); if (isset($cacheData['deadline']) && $cacheData['deadline'] > time()) { do_log("rss get from cache"); header ("Content-type: text/xml"); die($cacheData['data']); } } dbconn(); function hex_esc($matches) { return sprintf("%02x", ord($matches[0])); } $dllink = false; $passkey = $_GET['passkey'] ?? $CURUSER['passkey'] ?? ''; if (!$passkey) { die("require passkey"); } $where = ""; if ($passkey){ $res = sql_query("SELECT id, enabled, parked, passkey FROM users WHERE passkey=". sqlesc($passkey)." LIMIT 1"); $user = mysql_fetch_array($res); if (!$user) die("invalid passkey"); elseif ($user['enabled'] == 'no' || $user['parked'] == 'yes') die("account disabed or parked"); elseif (isset($_GET['linktype']) && $_GET['linktype'] == 'dl') $dllink = true; $inclbookmarked=intval($_GET['inclbookmarked'] ?? 0); if($inclbookmarked == 1) { $bookmarkarray = return_torrent_bookmark_array($user['id']); if ($bookmarkarray){ $whereidin = implode(",", $bookmarkarray); $where .= ($where ? " AND " : "") . "torrents.id IN(" . $whereidin . ")"; } } } $searchstr = mysql_real_escape_string(trim($_GET["search"] ?? '')); if (empty($searchstr)) unset($searchstr); if (isset($searchstr)){ $search_mode = intval($_GET["search_mode"] ?? 0); if (!in_array($search_mode,array(0,1,2))) { $search_mode = 0; } switch ($search_mode) { case 0: // AND, OR case 1 : $searchstr = str_replace(".", " ", $searchstr); $searchstr_exploded = explode(" ", $searchstr); $searchstr_exploded_count= 0; foreach ($searchstr_exploded as $searchstr_element) { $searchstr_element = trim($searchstr_element); // furthur trim to ensure that multi space seperated words still work $searchstr_exploded_count++; if ($searchstr_exploded_count > 10) // maximum 10 keywords break; $like_expression_array[] = " LIKE '%" . $searchstr_element. "%'"; } break; case 2 : // exact { $like_expression_array[] = " LIKE '%" . $searchstr. "%'"; break; } } $ANDOR = ($search_mode == 0 ? " AND " : " OR "); // only affects mode 0 and mode 1 foreach ($like_expression_array as &$like_expression_array_element) $like_expression_array_element = "(torrents.name" . $like_expression_array_element.($_GET['ismalldescr'] ? " OR torrents.small_descr". $like_expression_array_element : "").")"; $wherea[] = implode($ANDOR, $like_expression_array); $where .= ($where ? " AND " : "") . implode(" AND ", $wherea); } $limit = ""; $startindex = intval($_GET['startindex'] ?? 0); if ($startindex) $limit .= $startindex.", "; $showrows = intval($_GET['rows'] ?? 0); if($showrows < 1 || $showrows > 50) $showrows = 10; $limit .= $showrows; //approval status $approvalStatusNoneVisible = get_setting('torrent.approval_status_none_visible'); if ($approvalStatusNoneVisible == 'no' && get_user_class() < $staffmem_class) { $where .= ($where ? " AND " : "") . "torrents.approval_status = " . \App\Models\Torrent::APPROVAL_STATUS_ALLOW; } function get_where($tablename = "sources", $itemname = "source", $getname = "sou") { global $where; $items = searchbox_item_list($tablename); $whereitemina = array(); foreach ($items as $item) { if (!empty($_GET[$getname.$item['id']])) { $whereitemina[] = $item['id']; } } if (count($whereitemina) >= 1){ $whereitemin = implode(",",$whereitemina); $where .= ($where ? " AND " : "") . $itemname." IN(" . $whereitemin . ")"; } } get_where("categories", "category", "cat"); get_where("sources", "source", "sou"); get_where("media", "medium", "med"); get_where("codecs", "codec", "cod"); get_where("standards", "standard", "sta"); get_where("processings", "processing", "pro"); get_where("teams", "team", "tea"); get_where("audiocodecs", "audiocodec", "aud"); if ($where) $where = "WHERE ".$where; $query = "SELECT torrents.id, torrents.category, torrents.name, torrents.small_descr, torrents.descr, torrents.info_hash, torrents.size, torrents.added, torrents.anonymous, users.username AS username, categories.id AS cat_id, categories.name AS cat_name FROM torrents LEFT JOIN categories ON category = categories.id LEFT JOIN users ON torrents.owner = users.id $where ORDER BY torrents.added DESC LIMIT $limit"; $list = \Nexus\Database\NexusDB::select($query); $torrentRep = new \App\Repositories\TorrentRepository(); $url = get_protocol_prefix().$BASEURL; $year = substr($datefounded, 0, 4); $yearfounded = ($year ? $year : 2007); $copyright = "Copyright (c) ".$SITENAME." ".(date("Y") != $yearfounded ? $yearfounded."-" : "").date("Y").", all rights reserved"; $xml = ""; //The commented version passed feed validator at http://www.feedvalidator.org /*print(' ');*/ $xml .= ''; $xml .= ' ' . addslashes($SITENAME.' Torrents'). ' zh-cn '.$copyright.' '.$SITEEMAIL.' ('.$SITENAME.' Admin) '.$SITEEMAIL.' ('.$SITENAME.' Webmaster) '.date('r').' '.PROJECTNAME.' RSS Generator 60 ' . addslashes($SITENAME.' Torrents') . ' 100 100 ' . addslashes($SITENAME.' Torrents') . ' '; /*print(' ');*/ //print(' //'); foreach ($list as $row) { $title = ""; if ($row['anonymous'] == 'yes') $author = 'anonymous'; else $author = $row['username']; $itemurl = $url."/details.php?id=".$row['id']; if ($dllink) $itemdlurl = $url."/download.php?id=".$row['id']."&downhash=" . rawurlencode( $user['id'] . '|'. $torrentRep->encryptDownHash($row['id'], $user)); else $itemdlurl = $url."/download.php?id=".$row['id']; if (!empty($_GET['icat'])) $title .= "[".$row['cat_name']."]"; $title .= $row['name']; if (!empty($_GET['ismalldescr']) && !empty($row['small_descr'])) $title .= "[".$row['small_descr']."]"; if (!empty($_GET['isize'])) $title .= "[".mksize($row['size'])."]"; if (!empty($_GET['iuplder'])) $title .= "[".$author."]"; $content = format_comment($row['descr'], true, false, false, false); $xml .= ' <![CDATA['.$title.']]> '.$itemurl.' '; //print(' '.$author.''); $xml .= ''.$author.'@'.$_SERVER['HTTP_HOST'].' ('.$author.')'; $xml .= ''.$row['cat_name'].' '.preg_replace_callback('/./s', 'hex_esc', hash_pad($row['info_hash'])).' '.date('r',strtotime($row['added'])).' '; } $xml .= ' '; do_log("rss cache generated"); $redis->hSet($cacheKey, $hashKey, serialize(['data' => $xml, 'deadline' => time() + 300])); header ("Content-type: text/xml"); echo $xml; ?>