function rcFilterByCategories(&$rows, $categories, $any) { # Filter categories $cats = array(); foreach ($categories as $cat) { $cat = trim($cat); if ($cat == "") { continue; } $cats[] = $cat; } # Filter articles $articles = array(); $a2r = array(); foreach ($rows as $k => $r) { $nt = Title::newFromText($r->rc_title, $r->rc_namespace); $id = $nt->getArticleID(); if ($id == 0) { continue; } # Page might have been deleted... if (!in_array($id, $articles)) { $articles[] = $id; } if (!isset($a2r[$id])) { $a2r[$id] = array(); } $a2r[$id][] = $k; } # Shortcut? if (count($articles) == 0 or count($cats) == 0) { return; } # Look up $c = new Categoryfinder(); $c->seed($articles, $cats, $any ? "OR" : "AND"); $match = $c->run(); # Filter $newrows = array(); foreach ($match as $id) { foreach ($a2r[$id] as $rev) { $k = $rev; $newrows[$k] = $rows[$k]; } } $rows = $newrows; }
/** * Filter $rows by categories set in $opts * * @param array $rows Database rows * @param FormOptions $opts */ function filterByCategories(&$rows, FormOptions $opts) { $categories = array_map('trim', explode('|', $opts['categories'])); if (!count($categories)) { return; } # Filter categories $cats = array(); foreach ($categories as $cat) { $cat = trim($cat); if ($cat == '') { continue; } $cats[] = $cat; } # Filter articles $articles = array(); $a2r = array(); $rowsarr = array(); foreach ($rows as $k => $r) { $nt = Title::makeTitle($r->rc_namespace, $r->rc_title); $id = $nt->getArticleID(); if ($id == 0) { continue; # Page might have been deleted... } if (!in_array($id, $articles)) { $articles[] = $id; } if (!isset($a2r[$id])) { $a2r[$id] = array(); } $a2r[$id][] = $k; $rowsarr[$k] = $r; } # Shortcut? if (!count($articles) || !count($cats)) { return; } # Look up $c = new Categoryfinder(); $c->seed($articles, $cats, $opts['categories_any'] ? 'OR' : 'AND'); $match = $c->run(); # Filter $newrows = array(); foreach ($match as $id) { foreach ($a2r[$id] as $rev) { $k = $rev; $newrows[$k] = $rowsarr[$k]; } } $rows = $newrows; }