Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
c3b5b27
Finder: Add optimise task and garbage collection
Hackwar Jan 19, 2022
8ff6336
Codestyle
Hackwar Jan 19, 2022
4fcaf1f
Reverting todo change
Hackwar Jan 20, 2022
612b91c
Merge branch '4.1-dev' into 4.2-finder-optimise
Hackwar Jan 20, 2022
cfd105c
Merge branch '4.1-dev' into 4.2-finder-optimise
Hackwar Jan 21, 2022
eeb63bb
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar Jan 24, 2022
5965dab
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar Feb 3, 2022
01879fa
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar Apr 2, 2022
4bcacd2
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar Apr 2, 2022
7a4097b
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar May 16, 2022
2c39ac7
Removing calls to Factory::getApplication and getDbo
Hackwar May 22, 2022
49576c6
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar May 22, 2022
213566d
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar May 24, 2022
99c35c2
Merge branch '4.2-dev' into 4.2-finder-optimise
roland-d May 24, 2022
adc63c8
Merge branch '4.2-dev' into 4.2-finder-optimise
laoneo May 25, 2022
f8edd93
$this->app is not available here
Hackwar May 25, 2022
9f91abb
Merge branch '4.2-finder-optimise' of github.com:Hackwar/joomla-cms i…
Hackwar May 25, 2022
e5468fe
Merge branch '4.2-dev' into 4.2-finder-optimise
Hackwar May 25, 2022
4307049
Merge branch '4.2-dev' into 4.2-finder-optimise
laoneo May 26, 2022
a23099c
Merge branch '4.2-dev' into 4.2-finder-optimise
roland-d May 26, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\AdminController;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Finder\Administrator\Indexer\Indexer;

/**
* Index controller class for Finder.
Expand All @@ -37,6 +40,31 @@ public function getModel($name = 'Index', $prefix = 'Administrator', $config = a
return parent::getModel($name, $prefix, $config);
}

/**
* Method to optimise the index by removing orphaned entries.
*
* @return boolean True on success.
*
* @since __DEPLOY_VERSION__
*/
public function optimise()
{
$this->checkToken();

// Optimise the index by first running the garbage collection
PluginHelper::importPlugin('finder');
$this->app->triggerEvent('onFinderGarbageCollection');

// Now run the optimisation method from the indexer
$indexer = new Indexer;
$indexer->optimize();

$message = Text::_('COM_FINDER_INDEX_OPTIMISE_FINISHED');
$this->setRedirect('index.php?option=com_finder&view=index', $message);

return true;
}

/**
* Method to purge all indexed links from the database.
*
Expand Down
32 changes: 32 additions & 0 deletions administrator/components/com_finder/src/Indexer/Adapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,38 @@ public function onBuildIndex()
return true;
}

/**
* Method to remove outdated index entries
*
* @return integer
*
* @since __DEPLOY_VERSION__
*/
public function onFinderGarbageCollection()
{
$db = $this->db;
$type_id = $this->getTypeId();

$query = $db->getQuery(true);
$subquery = $db->getQuery(true);
$subquery->select('CONCAT(' . $db->quote($this->getUrl('', $this->extension, $this->layout)) . ', id)')
->from($db->quoteName($this->table));
$query->select($db->quoteName('l.link_id'))
->from($db->quoteName('#__finder_links', 'l'))
->where($db->quoteName('l.type_id') . ' = ' . $type_id)
->where($db->quoteName('l.url') . ' LIKE ' . $db->quote($this->getUrl('%', $this->extension, $this->layout)))
->where($db->quoteName('l.url') . ' NOT IN (' . $subquery . ')');
$db->setQuery($query);
$items = $db->loadColumn();

foreach ($items as $item)
{
$this->indexer->remove($item);
}

return count($items);
}

/**
* Method to change the value of a content item's property in the links
* table. This is used to synchronize published and access states that
Expand Down
30 changes: 29 additions & 1 deletion administrator/components/com_finder/src/Indexer/Indexer.php
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,35 @@ public function optimize()
$db->setQuery($query);
$db->execute();

// Remove the orphaned taxonomy nodes.
// Delete all broken links. (Links missing the object)
$query = $db->getQuery(true)
->delete('#__finder_links')
->where($db->quoteName('object') . ' = ' . $db->quote(''));
$db->setQuery($query);
$db->execute();

// Delete all orphaned mappings of terms to links
$query2 = $db->getQuery(true)
->select($db->quoteName('link_id'))
->from($db->quoteName('#__finder_links'));
$query = $db->getQuery(true)
->delete($db->quoteName('#__finder_links_terms'))
->where($db->quoteName('link_id') . ' NOT IN (' . $query2 . ')');
$db->setQuery($query);
$db->execute();

// Delete all orphaned terms
$query2 = $db->getQuery(true)
->select($db->quoteName('term_id'))
->from($db->quoteName('#__finder_links_terms'));
$query = $db->getQuery(true)
->delete($db->quoteName('#__finder_terms'))
->where($db->quoteName('term_id') . ' NOT IN (' . $query2 . ')');
$db->setQuery($query);
$db->execute();

// Delete all orphaned taxonomies
Taxonomy::removeOrphanMaps();
Taxonomy::removeOrphanNodes();

// Optimize the tables.
Expand Down
25 changes: 25 additions & 0 deletions administrator/components/com_finder/src/Indexer/Taxonomy.php
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,31 @@ public static function removeMaps($linkId)
return true;
}

/**
* Method to remove orphaned taxonomy maps
*
* @return integer The number of deleted rows.
*
* @since __DEPLOY_VERSION__
* @throws \RuntimeException on database error.
*/
public static function removeOrphanMaps()
{
// Delete all orphaned maps
$db = Factory::getDbo();
$query2 = $db->getQuery(true)
->select($db->quoteName('link_id'))
->from($db->quoteName('#__finder_links'));
$query = $db->getQuery(true)
->delete($db->quoteName('#__finder_taxonomy_map'))
->where($db->quoteName('link_id') . ' NOT IN (' . $query2 . ')');
$db->setQuery($query);
$db->execute();
$count = $db->getAffectedRows();

return $count;
}

/**
* Method to remove orphaned taxonomy nodes and branches.
*
Expand Down
20 changes: 17 additions & 3 deletions administrator/components/com_finder/src/View/Index/HtmlView.php
Original file line number Diff line number Diff line change
Expand Up @@ -202,13 +202,27 @@ protected function addToolbar()

if ($canDo->get('core.delete'))
{
ToolbarHelper::deleteList('', 'index.delete');
ToolbarHelper::divider();
$toolbar->confirmButton('', 'JTOOLBAR_DELETE', 'index.delete')
->icon('icon-delete')
->message('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT')
->listCheck(true);
$toolbar->divider();
}

if ($canDo->get('core.edit.state'))
{
ToolbarHelper::trash('index.purge', 'COM_FINDER_INDEX_TOOLBAR_PURGE', false);
$dropdown = $toolbar->dropdownButton('maintenance-group');
$dropdown->text('COM_FINDER_INDEX_TOOLBAR_MAINTENANCE')
->toggleSplit(false)
->icon('icon-wrench')
->buttonClass('btn btn-action');

$childBar = $dropdown->getChildToolbar();

$childBar->standardButton('cog', 'COM_FINDER_INDEX_TOOLBAR_OPTIMISE', 'index.optimise', false);
$childBar->confirmButton('index.purge', 'COM_FINDER_INDEX_TOOLBAR_PURGE', 'index.purge')
->icon('icon-trash')
->message('COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT');
}
}

Expand Down
6 changes: 1 addition & 5 deletions administrator/components/com_finder/tmpl/index/default.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,9 @@
$listDirn = $this->escape($this->state->get('list.direction'));
$lang = Factory::getLanguage();

Text::script('COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT');
Text::script('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT');

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_finder.index')
->useScript('multiselect')
$wa->useScript('multiselect')
->useScript('table.columns');

?>
Expand Down
3 changes: 3 additions & 0 deletions administrator/language/en-GB/com_finder.ini
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ COM_FINDER_INDEX_HEADING_LINK_URL_ASC="Raw URL ascending"
COM_FINDER_INDEX_HEADING_LINK_URL_DESC="Raw URL descending"
COM_FINDER_INDEX_NO_CONTENT="No content matches your search criteria."
COM_FINDER_INDEX_NO_DATA="No content has been indexed."
COM_FINDER_INDEX_OPTIMISE_FINISHED="Optimisation finished."
COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED="The Smart Search Content Plugin is disabled. Changes to content will not update the Smart Search index until the Plugin is enabled."
COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED_LINK="The %s is disabled. Changes to content will not update the Smart Search index if you do not enable this plugin."
COM_FINDER_INDEX_PURGE_FAILED="Failed to delete selected items."
Expand All @@ -144,6 +145,8 @@ COM_FINDER_INDEX_SEARCH_DESC="Search in title, URL and last updated date."
COM_FINDER_INDEX_SEARCH_LABEL="Search Indexed Content"
COM_FINDER_INDEX_TABLE_CAPTION="Table of Indexed Content"
COM_FINDER_INDEX_TIP="Start the indexer by pressing the button below, or in the toolbar."
COM_FINDER_INDEX_TOOLBAR_MAINTENANCE="Maintenance"
COM_FINDER_INDEX_TOOLBAR_OPTIMISE="Optimise"
COM_FINDER_INDEX_TOOLBAR_PURGE="Clear Index"
COM_FINDER_INDEX_TOOLBAR_TITLE="Smart Search: Indexed Content"
COM_FINDER_INDEX_TYPE_FILTER="Any Type of Content"
Expand Down
23 changes: 0 additions & 23 deletions build/media_source/com_finder/joomla.asset.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,29 +84,6 @@
"type": "module"
}
},
{
"name": "com_finder.index.es5",
"type": "script",
"uri": "com_finder/index-es5.min.js",
"dependencies": [
"core"
],
"attributes": {
"nomodule": true,
"defer": true
}
},
{
"name": "com_finder.index",
"type": "script",
"uri": "com_finder/index.min.js",
"dependencies": [
"com_finder.index.es5"
],
"attributes": {
"type": "module"
}
},
{
"name": "com_finder.indexer",
"type": "style",
Expand Down
25 changes: 0 additions & 25 deletions build/media_source/com_finder/js/index.es6.js

This file was deleted.