function onContentSearch($text, $phrase = '', $ordering = '', $areas = null) { // Need to look up all the menu items that are linked to blogs $results = array(); $text = trim($text); if (empty($text)) { return $results; } if (is_array($areas)) { if (count(array_intersect($areas, array_keys($this->onContentSearchAreas()))) == 0) { return array(); } } // We want to keep an eye on any blogs we've seen before, as // they may be linked in as multiple menus $seenBlogs = array(); $menuIDs = WordbridgeHelper::getWordbridgeMenuIDs(); $app = JFactory::getApplication(); $menu = $app->getMenu(); foreach ($menuIDs as $itemid) { $params = $menu->getParams($itemid); $blog_name = $params->get('wordbridge_blog_name'); if (!$params || $params->get('wordbridge_searchable') == 'no' || empty($blog_name)) { continue; } if (array_key_exists($blog_name, $seenBlogs)) { continue; } $seenBlogs[$blog_name] = 1; // Create a curl request for the search $blogInfo = WordbridgeHelper::getBlogInfo($blog_name, true); if (!$blogInfo) { continue; } $url = sprintf('http://%s/?s=%s&feed=rss2', WordbridgeHelper::fqdnBlogName($blog_name), urlencode($text)); $entries = WordbridgeHelper::getEntriesFromUrl($url); WordbridgeHelper::storeBlogEntries($entries, $blogInfo['uuid']); foreach ($entries as $entry) { $results[] = (object) array('href' => sprintf('index.php?option=com_wordbridge&Itemid=%d&view=entry&p=%d&slug=%s', $itemid, $entry['postid'], urlencode($entry['slug'])), 'title' => $entry['title'], 'section' => JText::_('PLG_SEARCH_WORDBRIDGE_AREA'), 'created' => $entry['date'], 'text' => strip_tags($entry['content'])); } } // Results really should be sorted switch ($ordering) { case 'oldest': usort($results, array('plgSearchWordbridge', '_sortByOldest')); break; case 'alpha': usort($results, array('plgSearchWordbridge', '_sortByName')); break; case 'newest': default: usort($results, array('plgSearchWordbridge', '_sortByNewest')); break; } return $results; }
/** * Return an array of stats about a blog */ function getBlogStats($blog_name = null) { // Lookup the menus that we're using $menuIDs = WordbridgeHelper::getWordbridgeMenuIDs(); $menuToBlogMap = array(); $app = JFactory::getApplication(); $menu = $app->getMenu('site'); foreach ($menuIDs as $itemid) { $params = $menu->getParams($itemid); $menu_blog_name = $params->get('wordbridge_blog_name'); if (empty($menu_blog_name)) { continue; } if (!array_key_exists($menu_blog_name, $menuToBlogMap)) { $menuToBlogMap[$menu_blog_name] = array(); } $menuToBlogMap[$menu_blog_name][] = $menu->getItem($itemid); } $db = JFactory::getDBO(); foreach (array_keys($menuToBlogMap) as $blog) { $item = (object) array('blog_id' => '', 'blog_uuid' => '', 'blog_name' => $blog, 'description' => '', 'last_post' => '', 'updated' => null); $query = 'SELECT blog_id, blog_uuid, blog_name, description, last_post, UNIX_TIMESTAMP(updated) FROM #__com_wordbridge_blogs WHERE blog_name = ' . $db->quote($blog, true); $db->setQuery($query); $row = $db->loadRow(); if ($row) { $item->blog_id = $row[0]; $item->blog_uuid = $row[1]; $item->blog_name = $row[2]; $item->description = $row[3]; $item->last_post = $row[4]; $item->updated = $row[5]; } // Look up the number of posts that are cached for this // blog $post_query = sprintf('SELECT COUNT(*) FROM #__com_wordbridge_posts WHERE blog_uuid = %s', $db->quote($item->blog_uuid, true)); $db->setQuery($post_query); $item->post_count = $db->loadResult(); // Look up the number of pages cached for this blog $page_query = sprintf('SELECT COUNT(*) FROM #__com_wordbridge_cache WHERE blog_uuid = %s', $db->quote($item->blog_uuid, true)); $db->setQuery($page_query); $item->page_count = $db->loadResult(); $item->menus = array(); if (array_key_exists($item->blog_name, $menuToBlogMap)) { $item->menus = $menuToBlogMap[$item->blog_name]; } $result[] = $item; } return $result; }