/** * Method to remove a link from the index. * * @param integer $linkId The id of the link. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public function remove($linkId) { $db = JFactory::getDbo(); $query = $db->getQuery(true); // Update the link counts and remove the mapping records. for ($i = 0; $i <= 15; $i++) { // Update the link counts for the terms. $query->update($db->quoteName('#__finder_terms') . ' AS t')->join('INNER', $db->quoteName('#__finder_links_terms' . dechex($i)) . ' AS m ON m.term_id = t.term_id')->set('t.links = t.links - 1')->where('m.link_id = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->execute(); // Remove all records from the mapping tables. $query->clear()->delete($db->quoteName('#__finder_links_terms' . dechex($i)))->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Delete all orphaned terms. $query->clear()->delete($db->quoteName('#__finder_terms'))->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->execute(); // Delete the link from the index. $query->clear()->delete($db->quoteName('#__finder_links'))->where($db->quoteName('link_id') . ' = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->execute(); // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); return true; }
/** * Method to remove a link from the index. * * @param integer $linkId The id of the link. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public static function remove($linkId) { $db = JFactory::getDBO(); $query = $db->getQuery(true); // Get the indexer state. $state = FinderIndexer::getState(); // Update the link counts and remove the mapping records. for ($i = 0; $i <= 15; $i++) { // Update the link counts for the terms. $query->update($db->quoteName('#__finder_terms') . ' AS t'); $query->join('INNER', $db->quoteName('#__finder_links_terms' . dechex($i)) . ' AS m ON m.term_id = t.term_id'); $query->set($db->quoteName('t') . '.' . $db->quoteName('links') . ' =' . $db->quoteName('t') . '.' . $db->quoteName('links') . ' - 1'); $query->where($db->quoteName('m') . '.' . $db->quoteName('link_id') . ' = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Remove all records from the mapping tables. $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_links_terms' . dechex($i))); $query->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Delete all orphaned terms. $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_terms')); $query->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Delete the link from the index. $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_links')); $query->where($db->quoteName('link_id') . ' = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); return true; }