' . 'Usage: <%SearchResultsEX(Template,15,,2,500)%>
' . 'Requered NP_ExtensibleSearch for Extensible searchresults.'; return $desc; } function getEventList() { global $manager; $event_arr = array( 'InitSkinParse' ); if ($manager->pluginInstalled('NP_ExtensibleSearch')) { $event_arr[] = 'PreSearchResults'; } return $event_arr; } // function getPluginDep() // { // return array('NP_ExtensibleSearch'); // } function supportsFeature($what) { switch ($what) { case 'SqlTablePrefix': return 1; default: return 0; } } function install() { $this->createOption("commentsearch", "Comments are included in a search target", // . "(Need 'NP_ExtensibleSearch').", "yesno", "yes"); $this->createOption("trackbacksearch", "TrackBacks are included in a search target", // . "(Need 'NP_ExtensibleSearch').", "yesno", "yes"); $this->createOption("tagsearch", "Tags are included in a search target", // . "(Need 'NP_ExtensibleSearch').", "yesno", "no"); $this->createOption("srex_ads1", "[Ads code 1] " . "Ads code where it's caught between " . "1st and 2nd entry and shown", "textarea", ""); $this->createOption("srex_ads2", "[Ads code 1] " . "Ads code where it's caught between " . "2nd and 3rd entry and shown", "textarea", ""); } function event_PreSearchResults(&$data) { // Orign NP_CommentSearch by Andy global $blog, $manager; $blogs = $data['blogs']; $query = $data['query']; $items =& $data['items']; $searchclass =& new SEARCH($query); $sqlquery = 'SELECT i.inumber as itemid FROM '; $tables = sql_table('item') . ' as i '; $where_str = ''; if ($this->getOption('commentsearch') == 'yes') { $tables .= ' left join ' . sql_table('comment') . ' as cm' . ' on i.inumber = cm.citem '; $where_str .= 'xxx.cm.cbody'; } if ($this->getOption('tagsearch') == 'yes' && $manager->pluginInstalled('NP_TagEX')) { $tables .= ' left join ' . sql_table('plug_tagex') . ' as tag' . ' on i.inumber = tag.inum'; $where_str .= ',xxx.tag.itags'; } if ($this->getOption('trackbacksearch') == 'yes' && $manager->pluginInstalled('NP_TrackBack')) { $tables .= ' left join ' . sql_table('plugin_tb') . ' as t' . ' on i.inumber = t.tb_id'; $where_str .= ',xxx.t.title,xxx.t.excerpt'; } $sqlquery .= $tables; $where = $searchclass->boolean_sql_where($where_str); $where = strtr($where, array('i.xxx.' => '')); $sqlquery .= ' WHERE i.idraft = 0' . ' and i.itime <= ' . mysqldate($blog -> getCorrectTime()) . ' and i.iblog in (' . implode(',', $blogs) . ') ' . ' and ' . $where; $res = sql_query($sqlquery); $array = array(); while ($itemid = mysql_fetch_row($res)) { array_push($array, $itemid[0]); } $data['items'] = array_unique(array_merge($items,$array)); } function doSkinVar($skinType, $template = 'default/index', // display template $p_amount = 10, // amount par page $type = 1, // page switch type $bmode = 'all', // blog mode $maxresults = '') // max results { global $manager, $CONF, $blog, $query, $amount; if (!$template) { $template = 'default/index'; } if (!$p_amount) { $p_amount = 10; } if (!$type) { $type = 1; } if (!$bmode) { $bmode = 'all'; } $this->maxamount = ($maxresults) ? $maxresults : 0; $type = floatval($type); $typeExp = intval(($type - floor($type))*10); //0 or 1 or 9 list($pageamount, $offset) = sscanf($p_amount, '%d(%d)'); if (!$pageamount) $pageamount = 10; if (preg_match("/^(<>)?([0-9\/]+)$/", $bmode, $matches)) { if ($matches[1]) { $hide = explode("/", $matches[2]); $show = array(); } else { $hide = array(); $show = explode("/", $matches[2]); } $bmode = 'all'; } if ($blog) { $b =& $blog; } else { $b =& $manager->getBlog($CONF['DefaultBlog']); } $nowbid = intval($b->getID()); if ($template == 'form') { $q = getVar('query'); $search_form = '
\n" . "\t" . '
' . "\n" . "\t\t\n\t\t
\n" . "\t\t\n" . "\t
\n" . "
\n"; echo $search_form; return; } $s_blogs = ''; if ($bmode != 'all') { $s_blogs .= ' and i.iblog = ' . $nowbid; } elseif ($hide[0] && $bmode=='all') { foreach ($hide as $val) { if (intval($val) < 1) { $val = getBlogIDFromName($val); } $s_blogs .= ' and i.iblog != ' . intval($val); } } elseif ($show[0] && $bmode=='all') { foreach ($show as $val) { if(intval($val) < 1){ $val = getBlogIDFromName($val); } $w[] = intval($val); } $s_blogs .= ' and i.iblog in (' . implode(",", $w) . ')'; } $manager->notify('PreBlogContent',array('blog' => &$b, 'type' => 'searchresults')); // Origin NP_ExtensibleSearch by Andy $highlight = ''; $query = $this->_hsc($query); if ($manager->pluginInstalled('NP_ExtensibleSearch')) { $explugin =& $manager->getPlugin('NP_ExtensibleSearch'); $sqlquery = $explugin->getSqlQuery($query, $amount, $highlight); } else { // $sqlquery = $b->getSqlSearch($query, $amount, $highlight); $sqlquery = $this->getSqlQuery($b, $query, $amount, $highlight); } $que_arr = explode(' ORDER BY', $sqlquery, 2); $sqlquery = implode($s_blogs . ' ORDER BY', $que_arr); if (!$sqlquery) { // no query -> show everything $exQuery = ''; $amfound = $b->readLogAmount($template, $maxresults, $exQuery, $query, 1, 1); } else { $entries = $this->getArray($sqlquery); $allAmount = count($entries); if ($allAmount > 0) { $switchParam = array ( $type, $pageamount, $offset, $entries, $b ); $page_switch = $this->PageSwitch($switchParam); if ($typeExp != 9) { echo $page_switch['buf']; // print_r($page_switch); } $showParams = array ( $template, $sqlquery, $highlight, $page_switch['startpos'], $pageamount, $b ); $this->_showUsingQuery($showParams); if ($type >= 1 && $typeExp != 1) { echo $page_switch['buf']; } } else { $template =& $manager->getTemplate($template); $vars = array( 'query' => $query, 'blogid' => $nowbid ); echo TEMPLATE::fill($template['SEARCH_NOTHINGFOUND'], $vars); } } $manager->notify('PostBlogContent',array('blog' => &$b, 'type' => 'searchresults')); } //* function getSqlQuery($b, $query, $amountMonths = 0, &$highlight, $mode = '') { $searchclass =& new SEARCH($query); $highlight = $searchclass->inclusive; if ($searchclass->inclusive == '') { return ''; } $select = $searchclass->boolean_sql_select('ititle,ibody,imore'); $blogs = $searchclass->blogs; $blogs[] = $b->getID(); $blogs = array_unique($blogs); $sqlquery = $b->getSqlSearch($query, $amount, $highlight); if (preg_match('/^(SELECT COUNT\(\*\) as result)/', $sqlquery)) { $mode = 1; } $items = $this->getArray($sqlquery); $sqldata = array( 'blogs' => &$blogs, 'items' => &$items, 'query' => $query ); $this->event_PreSearchResults($sqldata); if ($mode == '') { $sqlquery = 'SELECT ' . ' i.inumber as itemid, ' . ' i.ititle as title, ' . ' i.ibody as body, ' . ' m.mname as author, ' . ' m.mrealname as authorname, ' . ' i.itime, ' . ' i.imore as more, ' . ' m.mnumber as authorid, ' . ' m.memail as authormail, ' . ' m.murl as authorurl, ' . ' c.cname as category, ' . ' i.icat as catid, ' . ' i.iclosed as closed ' . 'FROM ' . sql_table('item') . ' as i, ' . sql_table('member') . ' as m, ' . sql_table('category') . ' as c ' . 'WHERE ' . ' i.iauthor = m.mnumber ' . ' and i.icat = c.catid'; if ($items) { $sqlquery .= ' and i.inumber in (' . implode(',', $items) . ')'; } else { $sqlquery .= ' and 1=2 '; } if ($select) { $sqlquery .= ' ORDER BY score DESC'; } else { $sqlquery .= ' ORDER BY i.itime DESC '; } } else { $sqlquery = 'SELECT COUNT(*) FROM ' . sql_table('item') . ' as i WHERE '; if ($items) { $sqlquery .= ' and i.inumber in (' . implode(',', $items) . ')'; } else { $sqlquery .= ' and 1=2 '; } } return $sqlquery; } //*/ function getArray($query) { $res = sql_query($query); $array = array(); while ($itemid = mysql_fetch_row($res)) { array_push($array, $itemid[0]); } return $array; } function _showUsingQuery($showParams) { $template = $showParams[0]; $showQuery = $showParams[1]; $highlight = $showParams[2]; $q_startpos = $showParams[3]; $q_amount = $showParams[4]; $b = $showParams[5]; $onlyone_query = $showQuery . ' LIMIT ' . intval($q_startpos) . ', 1'; $b->showUsingQuery($template, $onlyone_query, intval($highlight), 1, 1); echo $this->getOption('srex_ads1'); $q_startpos++; $q_amount--; if ($q_amount <= 0) { return; } $onlyone_query = $showQuery . ' LIMIT ' . intval($q_startpos) . ', 1'; $b->showUsingQuery($template, $onlyone_query, intval($highlight), 1, 1); if (mysql_num_rows(sql_query($onlyone_query))) { echo $this->getOption('srex_ads2'); } $q_startpos++; $q_amount--; if ($q_amount < 0) { return; } $second_query = $showQuery . ' LIMIT ' . intval($q_startpos) . ',' . intval($q_amount); $b->showUsingQuery($template, $second_query, intval($highlight), 1, 1); } function event_InitSkinParse($data) { global $CONF, $manager; $this->skinType = $data['type']; $usePathInfo = ($CONF['URLMode'] == 'pathinfo'); if (serverVar('REQUEST_URI') == '') { $uri = (serverVar('QUERY_STRING')) ? serverVar('SCRIPT_NAME') . serverVar('QUERY_STRING') : serverVar('SCRIPT_NAME'); } else { $uri = serverVar('REQUEST_URI'); } $page_str = ($usePathInfo) ? 'page/' : 'page='; if ( $manager->pluginInstalled('NP_CustomURL') || $manager->pluginInstalled('NP_Magical') || $manager->pluginInstalled('NP_MagicalURL2') ) { $page_str = 'page_'; } if (strpos($uri, 'page/')) { list($org_uri, $currPage) = explode('page/', $uri, 2); } elseif (strpos($uri, 'page_')) { list($org_uri, $currPage) = explode('page_', $uri, 2); } // list($org_uri, $currPage) = explode($page_str, $uri, 2); if (getVar('page')) { $currPage = intGetVar('page'); } $_GET['page'] = intval($currPage); $this->currPage = intval($currPage); $this->pagestr = $page_str; } function PageSwitch($switchParam) { global $CONF, $manager, $query; // initialize extract($switchParam); $type = intval($switchParam[0]); $pageamount = intval($switchParam[1]); $offset = intval($switchParam[2]); $entries = $switchParam[3]; $b = $switchParam[4]; $startpos = 0; $nowblogid = $b->getID(); $usePathInfo = ($CONF['URLMode'] == 'pathinfo'); $page_str = $this->pagestr; $currentpage = $this->currPage; $useCustomURL = ($manager->pluginInstalled('NP_CustomURL')); $useMagicalURL = ($manager->pluginInstalled('NP_Magical') || $manager->pluginInstalled('NP_MagicalURL2')); if ($useCustomURL) { $plugCustomURL =& $manager->getPlugin('NP_CustomURL'); $customFlag = ($plugCustomURL->getBlogOption(intval($nowblogid), 'use_customurl') == 'yes'); $redirectSFlag = ($plugCustomURL->getBlogOption(intval($nowblogid), 'redirect_search') == 'yes'); } // createBaseURL $pagelink = createBlogidLink($nowblogid); if ($useCustomURL && $customFlag && $redirectSFlag) { $que_str = $query; $que_str = $this->_hsc($que_str); $que_str = mb_eregi_replace('/', 'ssslllaaassshhh', $que_str); $que_str = mb_eregi_replace("'", 'qqquuuooottt', $que_str); $que_str = mb_eregi_replace('&', 'aaammmppp', $que_str); $que_str = urlencode($que_str); $search_str = 'search/' . $que_str . '/'; } else { if ($useMagicalURL && substr($pagelink, -5) == '.html') { $pagelink = substr($pagelink, 0, -5) . '_'; } $search_str = '?query=' . $query; if (is_numeric(getVar('amount')) && intGetVar('amount') >= 0) { $search_str .= '&amount=' . intGetVar('amount'); } if (strpos($pagelink, 'blogid=' . $nowblogid) === FALSE) { $search_str .= '&blogid=' . $nowblogid; } } $uri = parse_url($pagelink); if (!$usePathInfo) { if ($pagelink == $CONF['BlogURL']) { // add $pagelink .= '?'; } elseif ($uri['query']) { $pagelink .= '&'; } $pagelink = str_replace('&&', '&', $pagelink); } elseif ($usePathInfo && substr($pagelink, -1) != '/') { if ($uri['query']) { $pagelink .= '&'; $page_str = 'page='; } else { if ($useMagicalURL && substr($pagelink, -1) == '_') { $pagelink = $pagelink; } else { $pagelink .= '/'; } } } if (strstr ($pagelink, '//')) { $pagelink = preg_replace("/([^:])\/\//", "$1/", $pagelink); } if (strpos($pagelink, '?')) { $search_str = str_replace('?', '&', $search_str); } // Process pages if ($currentpage > 0) { $startpos = ($currentpage - 1) * $pageamount; } else { $currentpage = 1; } $totalamount = 0; if (is_array($entries)) { $totalamount = count($entries); } if (!empty($this->maxamount) && $this->maxamount < $totalamount) { $totalamount = intval($this->maxamount); } $totalamount = intval($totalamount); if ($offset) { $startpos += $offset; $totalamount -= $offset; } $totalpages = ceil($totalamount / $pageamount); $totalpages = intval($totalpages); if ($startpos > $totalamount) { $currentpage = $totalpages; $startpos = $totalamount - $pageamount; } // Create pageswitch $prevpage = ($currentpage > 1) ? intval($currentpage) - 1 : 0; $nextpage = intval($currentpage) + 1; if ($useCustomURL && $customFlag && $redirectSFlag) { $lastpagelink = $pagelink . $search_str . $page_str . '1.html'; } elseif (($useMagicalURL && substr($pagelink, -1) == '_') || $useCustomURL) { $lastpagelink = $pagelink . $page_str . '1.html' . $search_str; } else { $lastpagelink = $pagelink . $page_str . '1' . $search_str; } if ($useCustomURL && $customFlag && $redirectSFlag) { $lastpagelink = $pagelink . $search_str . $page_str . $totalpages . '.html'; } elseif (($useMagicalURL && substr($pagelink, -1) == '_') || $useCustomURL) { $lastpagelink = $pagelink . $page_str . $totalpages . '.html' . $search_str; } else { $lastpagelink = $pagelink . $page_str . $totalpages . $search_str; } if ($type >= 1) { $buf .= '
' . "\n"; // $buf .= "<TOP> | \n"; if (!empty($prevpage)) { if ($useCustomURL && $customFlag && $redirectSFlag) { $prevpagelink = $pagelink . $search_str . $page_str . $prevpage . '.html'; } elseif (($useMagicalURL && substr($pagelink, -1) == '_') || $useCustomURL) { $prevpagelink = $pagelink . $page_str . $prevpage . '.html' . $search_str; } else { $prevpagelink = $pagelink . $page_str . $prevpage . $search_str; } $buf .= '«Prev |'; } elseif ($type >= 2) { $buf .= "«Prev |"; } if (intval($type) == 1) { $buf .= "\n"; } if (intval($type) == 2) { $sepstr = '·'; $buf .= "|"; for ($i=1; $i<=$totalpages; $i++) { if ($useCustomURL && $customFlag && $redirectSFlag) { $i_pagelink = $pagelink . $search_str . $page_str . $i . '.html'; } elseif (($useMagicalURL && substr($pagelink, -1) == '_') || $useCustomURL) { $i_pagelink = $pagelink . $page_str . $i . '.html' . $search_str; } else { $i_pagelink = $pagelink . $page_str . $i . $search_str; } if ($i == $currentpage) { $buf .= ' ' . $i . ' |' . "\n"; } elseif ($totalpages<10 || $i<4 || $i>$totalpages-3) { $buf .= ' ' . $i . ' |' . "\n"; } else { if ($i<$currentpage-1 || $i>$currentpage+1) { if (($i == 4 && ($currentpage > 5 || $currentpage == 1)) || $i == $currentpage + 2) { $buf = rtrim($buf); $buf .= "...|\n"; } } else { $buf .= ' ' . $i . ' |' . "\n"; } } } $buf = rtrim($buf); } if (intval($type) == 3) { $buf .= '|'; $sepstr = '·'; for ($i = 1; $i <= $totalpages; $i++) { if ($useCustomURL && $customFlag && $redirectSFlag) { $i_pagelink = $pagelink . $search_str . $page_str . $i . '.html'; } elseif (($useMagicalURL && substr($pagelink, -1) == '_') || $useCustomURL) { $i_pagelink = $pagelink . $page_str . $i . '.html' . $search_str; } else { $i_pagelink = $pagelink . $page_str . $i . $search_str; } $paging = 5; if ($i == $currentpage) { $buf .= ' ' . $i . ' ' . $sepstr . "\n"; } elseif ($totalpages < 10 || ($i < ($currentpage + $paging) && ($currentpage - $paging) < $i)) { $buf .= ' ' . $i . ' ' . $sepstr . "\n"; } elseif ($currentpage - $paging == $i) { $buf = rtrim($buf); $buf .= ' ...'."\n"; } elseif ($currentpage + $paging == $i) { $buf = rtrim($buf); $buf = preg_replace('/$sepstr$/', '', $buf); $buf .= "... |\n"; } } } if ($totalpages >= $nextpage) { if ($useCustomURL && $customFlag && $redirectSFlag) { $nextpagelink = $pagelink . $search_str . $page_str . $nextpage . '.html'; } elseif (($useMagicalURL && substr($pagelink, -1) == '_') || $useCustomURL) { $nextpagelink = $pagelink . $page_str . $nextpage . '.html' . $search_str; } else { $nextpagelink = $pagelink . $page_str . $nextpage . $search_str; } $buf .= '| Next»' . "\n"; } elseif ($type >= 2) { $buf .= "| Next»\n"; } // $buf .= " | <LAST>\n"; $buf .= "
\n"; return array('buf' => $buf, 'startpos' => intval($startpos)); } } function doTemplateVar(&$item, $maxLength = 250, $addHighlight = 1) { // Orign NP_ChoppedDisc.php by nakahara21 global $CONF, $manager, $member, $catid; // Paese setting $item_id = intval($item->itemid); $resultQuery = 'SELECT ' . ' %s as result ' . 'FROM ' . ' %s ' . 'WHERE ' . ' %s = ' . $item_id; // Parse item $results['Item'] = strip_tags($item->body).strip_tags($item->more); // Parse commets if ($this->getOption("commentsearch")) { $cmntQuery = sprintf($resultQuery, cbody, sql_table('comment'), 'citem'); $response = sql_query($cmntQuery); while ($cmnt = mysql_fetch_object($response)) { $results['comment'] .= strip_tags($cmnt->result); } } // Parse trackback if ($this->getOption("trackbacksearch") && $manager->pluginInstalled('NP_TrackBack')) { // $titlQuery = sprintf($resultQuery, title, sql_table('plugin_tb'), 'tb_id'); // $response = quickQuery($titlQuery); // $results['Trackback_title'] = strip_tags($response); $trbkQuery =sprintf($resultQuery, excerpt, sql_table('plugin_tb'), 'tb_id'); $response = sql_query($trbkQuery); while ($tb = mysql_fetch_object($response)) { $results['Trackback'] .= strip_tags($tb->result); } } $queryStrings = $this->getQueryStrings(); foreach($results as $resKey => $resValue) { $strCount = 1; foreach($queryStrings as $queryValue) { if (!(mb_substr_count($resValue, $this->_hsc($queryValue)))) { $strCount++; } } if ($strCount > count($queryStrings)) { $resValue = ''; } if ($resValue) { if ($addHighlight) { $i = 0; foreach($queryStrings as $queryValue) { mb_regex_encoding(_CHARSET); $pattern = "{$queryValue}"; $resValue = mb_eregi_replace($this->_hsc($queryValue), $pattern, $resValue); $i++; if ($i == 10) { $i = 0; } } $str_array = mb_split('', $resValue); $num = count($str_array); $lastKey = $num +(-1); $resWidth = 0; $check = FALSE; foreach($str_array as $key => $value) { $tmpStr = mb_split("', $tmpStr[0]); $tmpStr[0] = mb_eregi_replace('&', '&', $tmpStr[0]); // $tmpStr[0] = mb_eregi_replace(' ', ' ', $tmpStr[0]); $lastp = mb_strwidth($tmpStr[0], _CHARSET); if ($key == 0) { if ($lastp > 20) { $temp_s = '...' . mb_substr($tmpStr[0], -20, 20, _CHARSET); } else { $temp_s = $tmpStr[0]; } $resWidth += 20; } elseif ($key > 0 && $key < $lastKey) { if ($lastp > 30) { $temp_s = mb_substr($tmpStr[0], 0, 10, _CHARSET) . '...' . mb_substr($tmpStr[0], -10, 10, _CHARSET); } else { $temp_s = $tmpStr[0]; } $resWidth += 30; } elseif ($key == $lastKey) { if ($lastp > 20) { $temp_s = mb_substr($tmpStr[0], 0, 20, _CHARSET) . '...'; } else { $temp_s = $tmpStr[0]; } $resWidth += 20; } if ($key != $lastKey) { $str_array[$key] = $this->_hsc($temp_s) . "_hsc($resKey) . '' . '
' . @implode('', $str_array) . '
'; } else { $tmpValue = 'in ' . $this->_hsc($resKey) . '' . '
' . $this->_hsc(shorten($resValue, $maxLength, '...')) . '
'; $resValue = $tmpValue; } echo $resValue; } } } function getQueryStrings() { global $query; // if (requestVar('query')) { $q = 'query'; // $urlq = serverVar("QUERY_STRING"); if(_CHERSET != 'UTF-8') { $query = mb_convert_encoding($query, "UTF-8", _CHARSET); } $urlq = urlencode($query); $urlq = preg_replace('|[^a-zA-Z0-9-~+_.#=&;,:@%]|i', '', $urlq); // $urlq = str_replace('?', '', $urlq); // $urlq = str_replace('or+', '', $urlq); $SQ = str_replace('or+', '', $urlq); /*$urlq = explode('&', $urlq); foreach ($urlq as $v) { $tmpq = explode('=', $v); if ($tmpq[0] == $q) $SQ = $tmpq[1]; }*/ $SQarray = explode('+', $SQ); return array_map(array(&$this, '_rawdecode'), $SQarray); // } } function _rawdecode($str) { $str = rawurldecode($str); if(_CHERSET != 'UTF-8') { $str = mb_convert_encoding($str, _CHARSET, "UTF-8"); } return $str; } function _hsc($str) { return htmlspecialchars($str, ENT_QUOTES, _CHARSET); } }