示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * 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;
 }