assignInclude('listings', "./$skindir/listings.tpl"); } else { $tpl->assignInclude('listings', './default_tpls/listings.tpl'); } include 'includes/pagesetup.php'; $searchtype = (isset($_REQUEST['searchtype']) ? $_REQUEST['searchtype'] : 'simple'); $searchterm = (isset($_REQUEST['searchterm']) ? escapestring($_REQUEST['searchterm']) : false); if (isset($_POST['submit']) || isset($_GET['offset'])) { $output .= '
'._RESULTS.'
'; $query = array(); $countquery = array(); $scountquery = array(); if ($searchtype == 'fulltext') { $query = 'SELECT stories.*, '._PENNAMEFIELD.' as penname, UNIX_TIMESTAMP(stories.date) as date, UNIX_TIMESTAMP(stories.updated) as updated FROM '._AUTHORTABLE.', '.TABLEPREFIX.'fanfiction_stories as stories, '.TABLEPREFIX."fanfiction_chapters as chapter WHERE chapter.storytext LIKE '%$searchterm%' AND chapter.sid = stories.sid AND stories.uid = "._UIDFIELD; $countquery = 'SELECT count(stories.sid) FROM '.TABLEPREFIX.'fanfiction_stories as stories, '.TABLEPREFIX."fanfiction_chapters as chapter WHERE chapter.storytext LIKE '%$searchterm%' AND chapter.sid = stories.sid GROUP BY stories.sid"; $query .= ' '._ORDERBY; search($query, $countquery); $tpl->assign('output', $output); $tpl->printToScreen(); dbclose(); exit(); } if ($searchterm && strlen($searchterm) < 3) { errorExit(_SEARCHTERMTOOSHORT); } if ($searchterm) { if ($searchtype == 'title') { $query[] = "stories.title LIKE '%$searchterm%'"; $countquery[] = "stories.title LIKE '%$searchterm%'"; $scountquery[] = "series.title LIKE '%$searchterm%'"; } if ($searchtype == 'summary') { $query[] = "stories.summary LIKE '%$searchterm%'"; $countquery[] = "stories.summary LIKE '%$searchterm%'"; $scountquery[] = "series.summary LIKE '%$searchterm%'"; } if ($searchtype == 'penname') { $authorquery = dbquery(_MEMBERLIST.' WHERE '._PENNAMEFIELD." LIKE '%$searchterm%' GROUP BY "._UIDFIELD); $authorlist = array(); while ($auth = dbassoc($authorquery)) { $authorlist[] = $auth['uid']; } if (count($authorlist) > 0) { $authors = implode(',', $authorlist); $query = 'SELECT stories.*, '._PENNAMEFIELD.' as penname, UNIX_TIMESTAMP(stories.date) as date, UNIX_TIMESTAMP(stories.updated) as updated FROM ('._AUTHORTABLE.', '.TABLEPREFIX.'fanfiction_stories as stories) LEFT JOIN '.TABLEPREFIX.'fanfiction_coauthors as coauth ON coauth.sid = stories.sid WHERE '._UIDFIELD." = stories.uid AND stories.validated > 0 AND (FIND_IN_SET(stories.uid, '$authors') > 0 OR FIND_IN_SET(coauth.uid, '$authors') > 0) "; $countquery = 'SELECT COUNT(stories.sid) FROM '.TABLEPREFIX.'fanfiction_stories as stories LEFT JOIN '.TABLEPREFIX."fanfiction_coauthors as coauth ON coauth.sid = stories.sid WHERE stories.validated > 0 AND (FIND_IN_SET(stories.uid, '$authors') > 0 OR FIND_IN_SET(coauth.uid, '$authors') > 0)"; search($query, $countquery); $tpl->assign('output', $output); $tpl->printToScreen(); dbclose(); exit(); } else { $query[] = '1 = 0'; $countquery[] = '1 = 0'; $scountquery[] = '1 = 0'; } } if ($searchtype == 'advanced') { $query[] = "(stories.summary LIKE '%$searchterm%' OR stories.title LIKE '%$searchterm%') "; $countquery[] = "(stories.summary LIKE '%$searchterm%' OR stories.title LIKE '%$searchterm%') "; $scountquery[] = "(summary LIKE '%$searchterm%' OR title LIKE '%$searchterm%') "; } } if (isset($_REQUEST['authors'])) { $authors = isarray($_REQUEST['authors']) ? $_REQUEST['authors'] : explode(',', $_REQUEST['authors']); $authors = array_filter($authors, 'isNumber'); if ($authors) { $authors = implode(',', $authors); $query[] = "FIND_IN_SET(stories.uid, '$authors') > 0"; $countquery[] = "FIND_IN_SET(stories.uid, '$authors') > 0"; $scountquery[] = "FIND_IN_SET(series.uid, '$authors') > 0"; } else { $query[] = '1 = 0'; $countquery[] = '1 = 0'; $scountquery[] = '1 = 0'; } } if (isset($_REQUEST['catid'])) { $catid = is_array($_REQUEST['catid']) ? $_REQUEST['catid'] : explode(',', $_REQUEST['catid']); $catid = array_filter($catid, 'isNumber'); } if (!isset($catid)) { $catid = array('false'); } $categories = array(); // Get the recursive list. foreach ($catid as $cat) { if ($cat == 'false' || empty($cat)) { continue; } $categories = array_merge($categories, recurseCategories($cat)); } // Now format the SQL foreach ($categories as $cat) { $catstories[] = "FIND_IN_SET($cat, stories.catid) > 0 "; $catseries[] = "FIND_IN_SET($cat, series.catid) > 0 "; } // Now implode the SQL list if (!empty($catstories)) { $query[] = '('.implode(' OR ', $catstories).')'; $countquery[] = '('.implode(' OR ', $catstories).')'; $scountquery[] = '('.implode(' OR ', $catseries).')'; } if (isset($_REQUEST['charid'])) { $charid = is_array($_REQUEST['charid']) ? $_REQUEST['charid'] : explode(',', $_REQUEST['charid']); } else { $charid = array(); } if (isset($_REQUEST['charlist1'])) { $charid[] = $_REQUEST['charlist1']; } if (isset($_REQUEST['charlist2'])) { $charid[] = $_REQUEST['charlist2']; } $charid = array_filter($charid, 'isNumber'); if (count($charid) > 0) { foreach ($charid as $c) { if (!empty($c)) { $charstories[] = "FIND_IN_SET($c, stories.charid) > 0 "; $charseries[] = "FIND_IN_SET($c, series.characters) > 0 "; } } if (count($charstories) > 0) { $query[] = '('.implode(' AND ', $charstories).')'; $countquery[] = '('.implode(' AND ', $charstories).')'; } if (count($charseries) > 0) { $scountquery[] = '('.implode(' AND ', $charseries).')'; } } if (isset($_REQUEST['rid'])) { $rid = is_array($_REQUEST['rid']) ? $_REQUEST['rid'] : explode(',', $_REQUEST['rid']); } else { $rid = array(); } if (count($rid) > 0) { $rid = array_filter($rid, 'isNumber'); $query[] = findclause('rid', $rid); $countquery[] = findclause('rid', $rid); } if (isset($_REQUEST['complete'])) { $query[] = "stories.completed = '1'"; $countquery[] = "stories.completed = '1'"; } $classin = array(); $classex = array(); foreach ($classtypelist as $id => $vars) { $opts = array(); $exopts = array(); if (isset($_POST['class_'.$id])) { $opts = array_filter($_POST['class_'.$id], 'isNumber'); } elseif (isset($_GET['class_'.$id])) { $opts = array_merge($opts, explode(',', $_GET['class_'.$id])); $opts = array_filter($opts, 'isNumber'); } elseif (isset($_REQUEST[$vars['name']])) { $opts[] = array($_REQUEST[$vars['name']]); } $classin = array_merge($classin, $opts); if (isset($_POST['exclass_'.$id])) { $exopts = array_filter($_POST['exclass_'.$id], 'isNumber'); } elseif (isset($_GET['exclass_'.$id])) { $exopts = array_merge($exopts, explode(',', $_GET['exclass_'.$id])); $exopts = array_filter($exopts, 'isNumber'); } $classex = array_merge($classex, $exopts); unset($opts, $exopts); } if ($classin) { foreach ($classin as $class) { $query[] = "FIND_IN_SET($class, stories.classes) > 0"; $countquery[] = "FIND_IN_SET($class, stories.classes) > 0"; $scountquery[] = "FIND_IN_SET($class, series.classes) > 0"; } } if ($classex) { foreach ($classex as $class) { $query[] = "FIND_IN_SET($class, stories.classes) = 0"; $countquery[] = "FIND_IN_SET($class, stories.classes) = 0"; $scountquery[] = "FIND_IN_SET($class, series.classes) = 0"; } } // Begin story length unset($wordcount); $wordlow = isset($_REQUEST['wordlow']) && isNumber($_REQUEST['wordlow']) ? $_REQUEST['wordlow'] : '-500'; $wordhigh = isset($_REQUEST['wordhigh']) && isNumber($_REQUEST['wordhigh']) ? $_REQUEST['wordhigh'] : '1000000'; if ($wordlow != '-500') { $wordcount = 'stories.wordcount > '.$wordlow; } if ($wordhigh != '1000000') { if ($wordcount) { $wordcount .= ' AND stories.wordcount < '.$wordhigh; } else { $wordcount = 'stories.wordcount < '.$wordhigh; } } if ($wordhigh < $wordlow) { $wordcount = 'stories.wordcount < '.$wordlow; } if (!empty($wordcount)) { $query[] = "($wordcount)"; $countquery[] = "($wordcount)"; } // End wordcount $codeblocks = dbquery('SELECT * FROM '.TABLEPREFIX."fanfiction_codeblocks WHERE code_type = 'browseterms'"); while ($code = dbassoc($codeblocks)) { eval($code['code_text']); } $query = (count($query) > 0 ? ' AND '.implode(' AND ', $query) : '').' '._ORDERBY; $countquery = count($countquery) > 0 ? ' AND '.implode(' AND ', $countquery) : ''; if (count($scountquery) > 0) { $scountquery = ' WHERE '.implode(' AND ', $scountquery); } search(_STORYQUERY.$query, _STORYCOUNT.$countquery); $otherresults = array(); $termArray = array_merge($_GET, $_POST); $termsList = array(); foreach ($termArray as $term => $value) { if ($term == 'submit' || $term == 'wordhigh' || $term == 'wordlow' || empty($value) || $term == 'formname' || $term == 'searchtype') { continue; } $termsList[$term] = "$term=".(is_array($value) ? implode(',', $value) : $value); } $terms = implode('&', $termsList); if (!empty($scountquery)) { $seriesresults = dbquery(_SERIESCOUNT.$scountquery); list($scount) = dbrow($seriesresults); if ($scount > 0) { $otherresults[] = "$scount "._SERIES.''; } } $codeblocks = dbquery('SELECT * FROM '.TABLEPREFIX."fanfiction_codeblocks WHERE code_type = 'otherresults'"); while ($code = dbassoc($codeblocks)) { eval($code['code_text']); } if (count($otherresults) > 0) { $tpl->assign('otherresults', "
"._OTHERRESULTS.': '.implode(', ', $otherresults).'
'); } } else { if ($searchtype == 'simple') { $output .= '
'._SIMPLE."
'; $output .= '
'._ADVANCED.'
'; } else { $output .= '
'._ADVANCED.'
'; if ($multiplecats) { include 'includes/categories.php'; $output .= ''; } $output .= "
"; if (count($charlist) > 0) { $output .= '

\n"; $output .= '
'; } $result = dbquery('SELECT rid, rating FROM '.TABLEPREFIX.'fanfiction_ratings ORDER BY rating'); if (dbnumrows($result)) { $output .= '

'; } $output .= '
 
'; $output .= '
'._MULTIPLESELECT.'
'; $result = dbquery('SELECT * FROM '.TABLEPREFIX.'fanfiction_classtypes ORDER BY classtype_name'); while ($type = dbassoc($result)) { $result2 = dbquery('SELECT * FROM '.TABLEPREFIX."fanfiction_classes WHERE class_type = '".$type['classtype_id']."' ORDER BY class_name"); $select = ''; while ($class = dbassoc($result2)) { $select .= ''; } $output .= '


"; } $output .= '
-

'; $codequery = dbquery('SELECT * FROM '.TABLEPREFIX."fanfiction_codeblocks WHERE code_type = 'searchform'"); while ($code = dbassoc($codequery)) { eval($code['code_text']); } $output .= "
'; } } $tpl->assign('output', $output); $tpl->printToScreen(); dbclose();