diff --git a/administrator/components/com_finder/access.xml b/administrator/components/com_finder/access.xml
deleted file mode 100644
index 7d09d2cbf1294..0000000000000
--- a/administrator/components/com_finder/access.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
diff --git a/administrator/components/com_finder/config.xml b/administrator/components/com_finder/config.xml
deleted file mode 100644
index a821957fbd7b3..0000000000000
--- a/administrator/components/com_finder/config.xml
+++ /dev/null
@@ -1,285 +0,0 @@
-
-
-
-
-
-
diff --git a/administrator/components/com_finder/controller.php b/administrator/components/com_finder/controller.php
deleted file mode 100644
index b8de88f93b705..0000000000000
--- a/administrator/components/com_finder/controller.php
+++ /dev/null
@@ -1,57 +0,0 @@
-input->get('view', 'index', 'word');
- $layout = $this->input->get('layout', 'index', 'word');
- $f_id = $this->input->get('filter_id', null, 'int');
-
- // Check for edit form.
- if ($view == 'filter' && $layout == 'edit' && !$this->checkEditId('com_finder.edit.filter', $f_id))
- {
- // Somehow the person just went to the form - we don't allow that.
- $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $f_id), 'error');
- $this->setRedirect(JRoute::_('index.php?option=com_finder&view=filters', false));
-
- return false;
- }
-
- return parent::display();
- }
-}
diff --git a/administrator/components/com_finder/finder.php b/administrator/components/com_finder/finder.php
deleted file mode 100644
index 49f37bc9b2cac..0000000000000
--- a/administrator/components/com_finder/finder.php
+++ /dev/null
@@ -1,19 +0,0 @@
-authorise('core.manage', 'com_finder'))
-{
- throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403);
-}
-
-$controller = JControllerLegacy::getInstance('Finder');
-$controller->execute(JFactory::getApplication()->input->get('task'));
-$controller->redirect();
diff --git a/administrator/components/com_finder/finder.xml b/administrator/components/com_finder/finder.xml
deleted file mode 100644
index 5967bc0b2ef04..0000000000000
--- a/administrator/components/com_finder/finder.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- com_finder
- Joomla! Project
- (C) 2005 - 2016 Open Source Matters. All rights reserved.
- August 2011
- GNU General Public License version 2 or later; see LICENSE.txt
- admin@joomla.org
- www.joomla.org
- 3.0.0
- COM_FINDER_XML_DESCRIPTION
-
-
- controller.php
- finder.php
- router.php
- controllers
- helpers
- models
- views
-
-
- js
- css
-
-
-
- sql/install.mysql.sql
- sql/install.postgresql.sql
-
-
-
-
- sql/uninstall.mysql.sql
- sql/uninstall.postgresql.sql
-
-
-
- language/en-GB.com_finder.ini
-
-
-
- access.xml
- config.xml
- controller.php
- finder.php
- controllers
- helpers
- models
- sql
- tables
- views
-
-
- language/en-GB.com_finder.ini
- language/en-GB.com_finder.sys.ini
-
-
-
-
diff --git a/administrator/components/com_finder/helpers/finder.php b/administrator/components/com_finder/helpers/finder.php
deleted file mode 100644
index 9a0f44d727ad3..0000000000000
--- a/administrator/components/com_finder/helpers/finder.php
+++ /dev/null
@@ -1,100 +0,0 @@
-getQuery(true)
- ->select($db->quoteName('extension_id'))
- ->from($db->quoteName('#__extensions'))
- ->where($db->quoteName('folder') . ' = ' . $db->quote('content'))
- ->where($db->quoteName('element') . ' = ' . $db->quote('finder'));
- $db->setQuery($query);
-
- try
- {
- $result = (int) $db->loadResult();
- }
- catch (RuntimeException $e)
- {
- JError::raiseWarning(500, $e->getMessage());
- }
-
- return $result;
- }
-
- /**
- * Gets a list of the actions that can be performed.
- *
- * @return JObject A JObject containing the allowed actions.
- *
- * @since 2.5
- * @deprecated 3.2 Use JHelperContent::getActions() instead
- */
- public static function getActions()
- {
- // Log usage of deprecated function
- JLog::add(__METHOD__ . '() is deprecated, use JHelperContent::getActions() with new arguments order instead.', JLog::WARNING, 'deprecated');
-
- // Get list of actions
- return JHelperContent::getActions('com_finder');
- }
-}
diff --git a/administrator/components/com_finder/helpers/indexer/stemmer.php b/administrator/components/com_finder/helpers/indexer/stemmer.php
deleted file mode 100644
index 3061a2de9b2b5..0000000000000
--- a/administrator/components/com_finder/helpers/indexer/stemmer.php
+++ /dev/null
@@ -1,83 +0,0 @@
-clean($adapter, 'cmd');
- $path = __DIR__ . '/stemmer/' . $adapter . '.php';
- $class = 'FinderIndexerStemmer' . ucfirst($adapter);
-
- // Check if a stemmer exists for the adapter.
- if (!file_exists($path))
- {
- // Throw invalid adapter exception.
- throw new Exception(JText::sprintf('COM_FINDER_INDEXER_INVALID_STEMMER', $adapter));
- }
-
- // Instantiate the stemmer.
- JLoader::register($class, $path);
- $instances[$adapter] = new $class;
-
- return $instances[$adapter];
- }
-
- /**
- * Method to stem a token and return the root.
- *
- * @param string $token The token to stem.
- * @param string $lang The language of the token.
- *
- * @return string The root token.
- *
- * @since 2.5
- */
- abstract public function stem($token, $lang);
-}
diff --git a/administrator/components/com_finder/helpers/indexer/stemmer/fr.php b/administrator/components/com_finder/helpers/indexer/stemmer/fr.php
deleted file mode 100644
index 7f40a5ed832ef..0000000000000
--- a/administrator/components/com_finder/helpers/indexer/stemmer/fr.php
+++ /dev/null
@@ -1,265 +0,0 @@
-cache[$lang][$token]))
- {
- // Stem the token.
- $result = self::getStem($token);
-
- // Add the token to the cache.
- $this->cache[$lang][$token] = $result;
- }
-
- return $this->cache[$lang][$token];
- }
-
- /**
- * French stemmer rules variables.
- *
- * @return array The rules
- *
- * @since 3.0
- */
- protected static function getStemRules()
- {
- if (self::$stemRules)
- {
- return self::$stemRules;
- }
-
- $vars = array();
-
- // French accented letters in ISO-8859-1 encoding
- $vars['accents'] = chr(224) . chr(226) . chr(232) . chr(233) . chr(234) . chr(235) . chr(238) . chr(239)
- . chr(244) . chr(251) . chr(249) . chr(231);
-
- // The rule patterns include all accented words for french language
- $vars['rule_pattern'] = "/^([a-z" . $vars['accents'] . "]*)(\*){0,1}(\d)([a-z" . $vars['accents'] . "]*)([.|>])/";
-
- // French vowels (including y) in ISO-8859-1 encoding
- $vars['vowels'] = chr(97) . chr(224) . chr(226) . chr(101) . chr(232) . chr(233) . chr(234) . chr(235)
- . chr(105) . chr(238) . chr(239) . chr(111) . chr(244) . chr(117) . chr(251) . chr(249) . chr(121);
-
- // The French rules in ISO-8859-1 encoding
- $vars['rules'] = array(
- 'esre1>', 'esio1>', 'siol1.', 'siof0.', 'sioe0.', 'sio3>', 'st1>', 'sf1>', 'sle1>', 'slo1>', 's' . chr(233) . '1>', chr(233) . 'tuae5.',
- chr(233) . 'tuae2.', 'tnia0.', 'tniv1.', 'tni3>', 'suor1.', 'suo0.', 'sdrail5.', 'sdrai4.', 'er' . chr(232) . 'i1>', 'sesue3x>',
- 'esuey5i.', 'esue2x>', 'se1>', 'er' . chr(232) . 'g3.', 'eca1>', 'esiah0.', 'esi1>', 'siss2.', 'sir2>', 'sit2>', 'egan' . chr(233) . '1.',
- 'egalli6>', 'egass1.', 'egas0.', 'egat3.', 'ega3>', 'ette4>', 'ett2>', 'etio1.', 'tio' . chr(231) . '4c.', 'tio0.', 'et1>', 'eb1>',
- 'snia1>', 'eniatnau8>', 'eniatn4.', 'enia1>', 'niatnio3.', 'niatg3.', 'e' . chr(233) . '1>', chr(233) . 'hcat1.', chr(233) . 'hca4.',
- chr(233) . 'tila5>', chr(233) . 'tici5.', chr(233) . 'tir1.', chr(233) . 'ti3>', chr(233) . 'gan1.', chr(233) . 'ga3>',
- chr(233) . 'tehc1.', chr(233) . 'te3>', chr(233) . 'it0.', chr(233) . '1>', 'eire4.', 'eirue5.', 'eio1.', 'eia1.', 'ei1>', 'eng1.',
- 'xuaessi7.', 'xuae1>', 'uaes0.', 'uae3.', 'xuave2l.', 'xuav2li>', 'xua3la>', 'ela1>', 'lart2.', 'lani2>', 'la' . chr(233) . '2>',
- 'siay4i.', 'siassia7.', 'siarv1*.', 'sia1>', 'tneiayo6i.', 'tneiay6i.', 'tneiassia9.', 'tneiareio7.', 'tneia5>', 'tneia4>', 'tiario4.',
- 'tiarim3.', 'tiaria3.', 'tiaris3.', 'tiari5.', 'tiarve6>', 'tiare5>', 'iare4>', 'are3>', 'tiay4i.', 'tia3>', 'tnay4i.',
- 'em' . chr(232) . 'iu5>', 'em' . chr(232) . 'i4>', 'tnaun3.', 'tnauqo3.', 'tnau4>', 'tnaf0.', 'tnat' . chr(233) . '2>', 'tna3>', 'tno3>',
- 'zeiy4i.', 'zey3i.', 'zeire5>', 'zeird4.', 'zeirio4.', 'ze2>', 'ssiab0.', 'ssia4.', 'ssi3.', 'tnemma6>', 'tnemesuey9i.', 'tnemesue8>',
- 'tnemevi7.', 'tnemessia5.', 'tnemessi8.', 'tneme5>', 'tnemia4.', 'tnem' . chr(233) . '5>', 'el2l>', 'lle3le>', 'let' . chr(244) . '0.',
- 'lepp0.', 'le2>', 'srei1>', 'reit3.', 'reila2.', 'rei3>', 'ert' . chr(226) . 'e5.', 'ert' . chr(226) . chr(233) . '1.',
- 'ert' . chr(226) . '4.', 'drai4.', 'erdro0.', 'erute5.', 'ruta0.', 'eruta1.', 'erutiov1.', 'erub3.', 'eruh3.', 'erul3.', 'er2r>', 'nn1>',
- 'r' . chr(232) . 'i3.', 'srev0.', 'sr1>', 'rid2>', 're2>', 'xuei4.', 'esuei5.', 'lbati3.', 'lba3>', 'rueis0.', 'ruehcn4.', 'ecirta6.',
- 'ruetai6.', 'rueta5.', 'rueir0.', 'rue3>', 'esseti6.', 'essere6>', 'esserd1.', 'esse4>', 'essiab1.', 'essia5.', 'essio1.', 'essi4.',
- 'essal4.', 'essa1>', 'ssab1.', 'essurp1.', 'essu4.', 'essi1.', 'ssor1.', 'essor2.', 'esso1>', 'ess2>', 'tio3.', 'r' . chr(232) . 's2re.',
- 'r' . chr(232) . '0e.', 'esn1.', 'eu1>', 'sua0.', 'su1>', 'utt1>', 'tu' . chr(231) . '3c.', 'u' . chr(231) . '2c.', 'ur1.', 'ehcn2>',
- 'ehcu1>', 'snorr3.', 'snoru3.', 'snorua3.', 'snorv3.', 'snorio4.', 'snori5.', 'snore5>', 'snortt4>', 'snort' . chr(238) . 'a7.', 'snort3.',
- 'snor4.', 'snossi6.', 'snoire6.', 'snoird5.', 'snoitai7.', 'snoita6.', 'snoits1>', 'noits0.', 'snoi4>', 'noitaci7>', 'noitai6.', 'noita5.',
- 'noitu4.', 'noi3>', 'snoya0.', 'snoy4i.', 'sno' . chr(231) . 'a1.', 'sno' . chr(231) . 'r1.', 'snoe4.', 'snosiar1>', 'snola1.', 'sno3>',
- 'sno1>', 'noll2.', 'tnennei4.', 'ennei2>', 'snei1>', 'sne' . chr(233) . '1>', 'enne' . chr(233) . '5e.', 'ne' . chr(233) . '3e.', 'neic0.',
- 'neiv0.', 'nei3.', 'sc1.', 'sd1.', 'sg1.', 'sni1.', 'tiu0.', 'ti2.', 'sp1>', 'sna1>', 'sue1.', 'enn2>', 'nong2.', 'noss2.', 'rioe4.',
- 'riot0.', 'riorc1.', 'riovec5.', 'rio3.', 'ric2.', 'ril2.', 'tnerim3.', 'tneris3>', 'tneri5.', 't' . chr(238) . 'a3.', 'riss2.',
- 't' . chr(238) . '2.', 't' . chr(226) . '2>', 'ario2.', 'arim1.', 'ara1.', 'aris1.', 'ari3.', 'art1>', 'ardn2.', 'arr1.', 'arua1.',
- 'aro1.', 'arv1.', 'aru1.', 'ar2.', 'rd1.', 'ud1.', 'ul1.', 'ini1.', 'rin2.', 'tnessiab3.', 'tnessia7.', 'tnessi6.', 'tnessni4.', 'sini2.',
- 'sl1.', 'iard3.', 'iario3.', 'ia2>', 'io0.', 'iule2.', 'i1>', 'sid2.', 'sic2.', 'esoi4.', 'ed1.', 'ai2>', 'a1>', 'adr1.',
- 'tner' . chr(232) . '5>', 'evir1.', 'evio4>', 'evi3.', 'fita4.', 'fi2>', 'enie1.', 'sare4>', 'sari4>', 'sard3.', 'sart2>', 'sa2.',
- 'tnessa6>', 'tnessu6>', 'tnegna3.', 'tnegi3.', 'tneg0.', 'tneru5>', 'tnemg0.', 'tnerni4.', 'tneiv1.', 'tne3>', 'une1.', 'en1>', 'nitn2.',
- 'ecnay5i.', 'ecnal1.', 'ecna4.', 'ec1>', 'nn1.', 'rit2>', 'rut2>', 'rud2.', 'ugn1>', 'eg1>', 'tuo0.', 'tul2>', 't' . chr(251) . '2>',
- 'ev1>', 'v' . chr(232) . '2ve>', 'rtt1>', 'emissi6.', 'em1.', 'ehc1.', 'c' . chr(233) . 'i2c' . chr(232) . '.', 'libi2l.', 'llie1.',
- 'liei4i.', 'xuev1.', 'xuey4i.', 'xueni5>', 'xuell4.', 'xuere5.', 'xue3>', 'rb' . chr(233) . '3rb' . chr(232) . '.', 'tur2.',
- 'rir' . chr(233) . '4re.', 'rir2.', 'c' . chr(226) . '2ca.', 'snu1.', 'rt' . chr(238) . 'a4.', 'long2.', 'vec2.', chr(231) . '1c>',
- 'ssilp3.', 'silp2.', 't' . chr(232) . 'hc2te.', 'n' . chr(232) . 'm2ne.', 'llepp1.', 'tan2.', 'rv' . chr(232) . '3rve.',
- 'rv' . chr(233) . '3rve.', 'r' . chr(232) . '2re.', 'r' . chr(233) . '2re.', 't' . chr(232) . '2te.', 't' . chr(233) . '2te.', 'epp1.',
- 'eya2i.', 'ya1i.', 'yo1i.', 'esu1.', 'ugi1.', 'tt1.', 'end0.'
- );
-
- self::$stemRules = $vars;
-
- return self::$stemRules;
- }
-
- /**
- * Returns the number of the first rule from the rule number
- * that can be applied to the given reversed input.
- * returns -1 if no rule can be applied, ie the stem has been found
- *
- * @param string $reversed_input The input to check in reversed order
- * @param integer $rule_number The rule number to check
- *
- * @return integer Number of the first rule
- *
- * @since 3.0
- */
- private static function getFirstRule($reversed_input, $rule_number)
- {
- $vars = static::getStemRules();
-
- $nb_rules = count($vars['rules']);
-
- for ($i = $rule_number; $i < $nb_rules; $i++)
- {
- // Gets the letters from the current rule
- $rule = $vars['rules'][$i];
- $rule = preg_replace($vars['rule_pattern'], "\\1", $rule);
-
- if (strncasecmp(utf8_decode($rule), $reversed_input, strlen(utf8_decode($rule))) == 0)
- {
- return $i;
- }
- }
-
- return -1;
- }
-
- /**
- * Check the acceptability of a stem for French language
- *
- * @param string $reversed_stem The stem to check in reverse form
- *
- * @return boolean True if stem is acceptable
- *
- * @since 3.0
- */
- private static function check($reversed_stem)
- {
- $vars = static::getStemRules();
-
- if (preg_match('/[' . $vars['vowels'] . ']$/', utf8_encode($reversed_stem)))
- {
- // If the form starts with a vowel then at least two letters must remain after stemming (e.g.: "etaient" --> "et")
- return (strlen($reversed_stem) > 2);
- }
- else
- {
- // If the reversed stem starts with a consonant then at least two letters must remain after stemming
- if (strlen($reversed_stem) <= 2)
- {
- return false;
- }
-
- // And at least one of these must be a vowel or "y"
- return (preg_match('/[' . $vars['vowels'] . ']/', utf8_encode($reversed_stem)));
- }
- }
-
- /**
- * Paice/Husk stemmer which returns a stem for the given $input
- *
- * @param string $input The word for which we want the stem in UTF-8
- *
- * @return string The stem
- *
- * @since 3.0
- */
- private static function getStem($input)
- {
- $vars = static::getStemRules();
-
- $intact = true;
- $reversed_input = strrev(utf8_decode($input));
- $rule_number = 0;
-
- // This loop goes through the rules' array until it finds an ending one (ending by '.') or the last one ('end0.')
- while (true)
- {
- $rule_number = self::getFirstRule($reversed_input, $rule_number);
-
- if ($rule_number == -1)
- {
- // No other rule can be applied => the stem has been found
- break;
- }
-
- $rule = $vars['rules'][$rule_number];
- preg_match($vars['rule_pattern'], $rule, $matches);
-
- if (($matches[2] != '*') || ($intact))
- {
- $reversed_stem = utf8_decode($matches[4]) . substr($reversed_input, $matches[3], strlen($reversed_input) - $matches[3]);
-
- if (self::check($reversed_stem))
- {
- $reversed_input = $reversed_stem;
-
- if ($matches[5] == '.')
- {
- break;
- }
- }
- else
- {
- // Go to another rule
- $rule_number++;
- }
- }
- else
- {
- // Go to another rule
- $rule_number++;
- }
- }
-
- return utf8_encode(strrev($reversed_input));
- }
-}
diff --git a/administrator/components/com_finder/helpers/indexer/stemmer/porter_en.php b/administrator/components/com_finder/helpers/indexer/stemmer/porter_en.php
deleted file mode 100644
index 340a82d1e3f07..0000000000000
--- a/administrator/components/com_finder/helpers/indexer/stemmer/porter_en.php
+++ /dev/null
@@ -1,446 +0,0 @@
-cache[$lang][$token]))
- {
- // Stem the token.
- $result = $token;
- $result = self::step1ab($result);
- $result = self::step1c($result);
- $result = self::step2($result);
- $result = self::step3($result);
- $result = self::step4($result);
- $result = self::step5($result);
-
- // Add the token to the cache.
- $this->cache[$lang][$token] = $result;
- }
-
- return $this->cache[$lang][$token];
- }
-
- /**
- * Step 1
- *
- * @param string $word The token to stem.
- *
- * @return string
- *
- * @since 2.5
- */
- private static function step1ab($word)
- {
- // Part a
- if (substr($word, -1) == 's')
- {
- self::replace($word, 'sses', 'ss')
- or self::replace($word, 'ies', 'i')
- or self::replace($word, 'ss', 'ss')
- or self::replace($word, 's', '');
- }
-
- // Part b
- if (substr($word, -2, 1) != 'e' or !self::replace($word, 'eed', 'ee', 0))
- {
- // First rule
- $v = self::$regex_vowel;
-
- // Words ending with ing and ed
- // Note use of && and OR, for precedence reasons
- if (preg_match("#$v+#", substr($word, 0, -3)) && self::replace($word, 'ing', '')
- or preg_match("#$v+#", substr($word, 0, -2)) && self::replace($word, 'ed', ''))
- {
- // If one of above two test successful
- if (!self::replace($word, 'at', 'ate') and !self::replace($word, 'bl', 'ble') and !self::replace($word, 'iz', 'ize'))
- {
- // Double consonant ending
- if (self::doubleConsonant($word) and substr($word, -2) != 'll' and substr($word, -2) != 'ss' and substr($word, -2) != 'zz')
- {
- $word = substr($word, 0, -1);
- }
- elseif (self::m($word) == 1 and self::cvc($word))
- {
- $word .= 'e';
- }
- }
- }
- }
-
- return $word;
- }
-
- /**
- * Step 1c
- *
- * @param string $word The token to stem.
- *
- * @return string
- *
- * @since 2.5
- */
- private static function step1c($word)
- {
- $v = self::$regex_vowel;
-
- if (substr($word, -1) == 'y' && preg_match("#$v+#", substr($word, 0, -1)))
- {
- self::replace($word, 'y', 'i');
- }
-
- return $word;
- }
-
- /**
- * Step 2
- *
- * @param string $word The token to stem.
- *
- * @return string
- *
- * @since 2.5
- */
- private static function step2($word)
- {
- switch (substr($word, -2, 1))
- {
- case 'a':
- self::replace($word, 'ational', 'ate', 0)
- or self::replace($word, 'tional', 'tion', 0);
- break;
- case 'c':
- self::replace($word, 'enci', 'ence', 0)
- or self::replace($word, 'anci', 'ance', 0);
- break;
- case 'e':
- self::replace($word, 'izer', 'ize', 0);
- break;
- case 'g':
- self::replace($word, 'logi', 'log', 0);
- break;
- case 'l':
- self::replace($word, 'entli', 'ent', 0)
- or self::replace($word, 'ousli', 'ous', 0)
- or self::replace($word, 'alli', 'al', 0)
- or self::replace($word, 'bli', 'ble', 0)
- or self::replace($word, 'eli', 'e', 0);
- break;
- case 'o':
- self::replace($word, 'ization', 'ize', 0)
- or self::replace($word, 'ation', 'ate', 0)
- or self::replace($word, 'ator', 'ate', 0);
- break;
- case 's':
- self::replace($word, 'iveness', 'ive', 0)
- or self::replace($word, 'fulness', 'ful', 0)
- or self::replace($word, 'ousness', 'ous', 0)
- or self::replace($word, 'alism', 'al', 0);
- break;
- case 't':
- self::replace($word, 'biliti', 'ble', 0)
- or self::replace($word, 'aliti', 'al', 0)
- or self::replace($word, 'iviti', 'ive', 0);
- break;
- }
-
- return $word;
- }
-
- /**
- * Step 3
- *
- * @param string $word The token to stem.
- *
- * @return string
- *
- * @since 2.5
- */
- private static function step3($word)
- {
- switch (substr($word, -2, 1))
- {
- case 'a':
- self::replace($word, 'ical', 'ic', 0);
- break;
- case 's':
- self::replace($word, 'ness', '', 0);
- break;
- case 't':
- self::replace($word, 'icate', 'ic', 0)
- or self::replace($word, 'iciti', 'ic', 0);
- break;
- case 'u':
- self::replace($word, 'ful', '', 0);
- break;
- case 'v':
- self::replace($word, 'ative', '', 0);
- break;
- case 'z':
- self::replace($word, 'alize', 'al', 0);
- break;
- }
-
- return $word;
- }
-
- /**
- * Step 4
- *
- * @param string $word The token to stem.
- *
- * @return string
- *
- * @since 2.5
- */
- private static function step4($word)
- {
- switch (substr($word, -2, 1))
- {
- case 'a':
- self::replace($word, 'al', '', 1);
- break;
- case 'c':
- self::replace($word, 'ance', '', 1)
- or self::replace($word, 'ence', '', 1);
- break;
- case 'e':
- self::replace($word, 'er', '', 1);
- break;
- case 'i':
- self::replace($word, 'ic', '', 1);
- break;
- case 'l':
- self::replace($word, 'able', '', 1)
- or self::replace($word, 'ible', '', 1);
- break;
- case 'n':
- self::replace($word, 'ant', '', 1)
- or self::replace($word, 'ement', '', 1)
- or self::replace($word, 'ment', '', 1)
- or self::replace($word, 'ent', '', 1);
- break;
- case 'o':
- if (substr($word, -4) == 'tion' or substr($word, -4) == 'sion')
- {
- self::replace($word, 'ion', '', 1);
- }
- else
- {
- self::replace($word, 'ou', '', 1);
- }
- break;
- case 's':
- self::replace($word, 'ism', '', 1);
- break;
- case 't':
- self::replace($word, 'ate', '', 1)
- or self::replace($word, 'iti', '', 1);
- break;
- case 'u':
- self::replace($word, 'ous', '', 1);
- break;
- case 'v':
- self::replace($word, 'ive', '', 1);
- break;
- case 'z':
- self::replace($word, 'ize', '', 1);
- break;
- }
-
- return $word;
- }
-
- /**
- * Step 5
- *
- * @param string $word The token to stem.
- *
- * @return string
- *
- * @since 2.5
- */
- private static function step5($word)
- {
- // Part a
- if (substr($word, -1) == 'e')
- {
- if (self::m(substr($word, 0, -1)) > 1)
- {
- self::replace($word, 'e', '');
- }
- elseif (self::m(substr($word, 0, -1)) == 1)
- {
- if (!self::cvc(substr($word, 0, -1)))
- {
- self::replace($word, 'e', '');
- }
- }
- }
-
- // Part b
- if (self::m($word) > 1 and self::doubleConsonant($word) and substr($word, -1) == 'l')
- {
- $word = substr($word, 0, -1);
- }
-
- return $word;
- }
-
- /**
- * Replaces the first string with the second, at the end of the string. If third
- * arg is given, then the preceding string must match that m count at least.
- *
- * @param string &$str String to check
- * @param string $check Ending to check for
- * @param string $repl Replacement string
- * @param integer $m Optional minimum number of m() to meet
- *
- * @return boolean Whether the $check string was at the end
- * of the $str string. True does not necessarily mean
- * that it was replaced.
- *
- * @since 2.5
- */
- private static function replace(&$str, $check, $repl, $m = null)
- {
- $len = 0 - strlen($check);
-
- if (substr($str, $len) == $check)
- {
- $substr = substr($str, 0, $len);
-
- if (is_null($m) or self::m($substr) > $m)
- {
- $str = $substr . $repl;
- }
-
- return true;
- }
-
- return false;
- }
-
- /**
- * m() measures the number of consonant sequences in $str. if c is
- * a consonant sequence and v a vowel sequence, and <..> indicates arbitrary
- * presence,
- *
- * gives 0
- * vc gives 1
- * vcvc gives 2
- * vcvcvc gives 3
- *
- * @param string $str The string to return the m count for
- *
- * @return integer The m count
- *
- * @since 2.5
- */
- private static function m($str)
- {
- $c = self::$regex_consonant;
- $v = self::$regex_vowel;
-
- $str = preg_replace("#^$c+#", '', $str);
- $str = preg_replace("#$v+$#", '', $str);
-
- preg_match_all("#($v+$c+)#", $str, $matches);
-
- return count($matches[1]);
- }
-
- /**
- * Returns true/false as to whether the given string contains two
- * of the same consonant next to each other at the end of the string.
- *
- * @param string $str String to check
- *
- * @return boolean Result
- *
- * @since 2.5
- */
- private static function doubleConsonant($str)
- {
- $c = self::$regex_consonant;
-
- return preg_match("#$c{2}$#", $str, $matches) and $matches[0]{0} == $matches[0]{1};
- }
-
- /**
- * Checks for ending CVC sequence where second C is not W, X or Y
- *
- * @param string $str String to check
- *
- * @return boolean Result
- *
- * @since 2.5
- */
- private static function cvc($str)
- {
- $c = self::$regex_consonant;
- $v = self::$regex_vowel;
-
- return preg_match("#($c$v$c)$#", $str, $matches) and strlen($matches[1]) == 3 and $matches[1]{2} != 'w' and $matches[1]{2} != 'x'
- and $matches[1]{2} != 'y';
- }
-}
diff --git a/administrator/components/com_finder/helpers/indexer/stemmer/snowball.php b/administrator/components/com_finder/helpers/indexer/stemmer/snowball.php
deleted file mode 100644
index df1f23db4842a..0000000000000
--- a/administrator/components/com_finder/helpers/indexer/stemmer/snowball.php
+++ /dev/null
@@ -1,133 +0,0 @@
-sef) ? $languages[0]->sef : '*';
- $lang = $defaultLang;
- }
-
- // Stem the token if it is not in the cache.
- if (!isset($this->cache[$lang][$token]))
- {
- // Get the stem function from the language string.
- switch ($lang)
- {
- // Danish stemmer.
- case 'da':
- $function = 'stem_danish';
- break;
-
- // German stemmer.
- case 'de':
- $function = 'stem_german';
- break;
-
- // English stemmer.
- default:
- case 'en':
- $function = 'stem_english';
- break;
-
- // Spanish stemmer.
- case 'es':
- $function = 'stem_spanish';
- break;
-
- // Finnish stemmer.
- case 'fi':
- $function = 'stem_finnish';
- break;
-
- // French stemmer.
- case 'fr':
- $function = 'stem_french';
- break;
-
- // Hungarian stemmer.
- case 'hu':
- $function = 'stem_hungarian';
- break;
-
- // Italian stemmer.
- case 'it':
- $function = 'stem_italian';
- break;
-
- // Norwegian stemmer.
- case 'nb':
- $function = 'stem_norwegian';
- break;
-
- // Dutch stemmer.
- case 'nl':
- $function = 'stem_dutch';
- break;
-
- // Portuguese stemmer.
- case 'pt':
- $function = 'stem_portuguese';
- break;
-
- // Romanian stemmer.
- case 'ro':
- $function = 'stem_romanian';
- break;
-
- // Russian stemmer.
- case 'ru':
- $function = 'stem_russian_unicode';
- break;
-
- // Swedish stemmer.
- case 'sv':
- $function = 'stem_swedish';
- break;
-
- // Turkish stemmer.
- case 'tr':
- $function = 'stem_turkish_unicode';
- break;
- }
-
- // Stem the word if the stemmer method exists.
- $this->cache[$lang][$token] = function_exists($function) ? $function($token) : $token;
- }
-
- return $this->cache[$lang][$token];
- }
-}
diff --git a/administrator/components/com_finder/sql/uninstall.mysql.sql b/administrator/components/com_finder/sql/uninstall.mysql.sql
deleted file mode 100644
index 89579b982d43f..0000000000000
--- a/administrator/components/com_finder/sql/uninstall.mysql.sql
+++ /dev/null
@@ -1,25 +0,0 @@
-DROP TABLE IF EXISTS `#__finder_filters`;
-DROP TABLE IF EXISTS `#__finder_links`;
-DROP TABLE IF EXISTS `#__finder_links_terms0`;
-DROP TABLE IF EXISTS `#__finder_links_terms1`;
-DROP TABLE IF EXISTS `#__finder_links_terms2`;
-DROP TABLE IF EXISTS `#__finder_links_terms3`;
-DROP TABLE IF EXISTS `#__finder_links_terms4`;
-DROP TABLE IF EXISTS `#__finder_links_terms5`;
-DROP TABLE IF EXISTS `#__finder_links_terms6`;
-DROP TABLE IF EXISTS `#__finder_links_terms7`;
-DROP TABLE IF EXISTS `#__finder_links_terms8`;
-DROP TABLE IF EXISTS `#__finder_links_terms9`;
-DROP TABLE IF EXISTS `#__finder_links_termsa`;
-DROP TABLE IF EXISTS `#__finder_links_termsb`;
-DROP TABLE IF EXISTS `#__finder_links_termsc`;
-DROP TABLE IF EXISTS `#__finder_links_termsd`;
-DROP TABLE IF EXISTS `#__finder_links_termse`;
-DROP TABLE IF EXISTS `#__finder_links_termsf`;
-DROP TABLE IF EXISTS `#__finder_taxonomy`;
-DROP TABLE IF EXISTS `#__finder_taxonomy_map`;
-DROP TABLE IF EXISTS `#__finder_terms`;
-DROP TABLE IF EXISTS `#__finder_terms_common`;
-DROP TABLE IF EXISTS `#__finder_tokens`;
-DROP TABLE IF EXISTS `#__finder_tokens_aggregate`;
-DROP TABLE IF EXISTS `#__finder_types`;
diff --git a/administrator/components/com_finder/sql/uninstall.postgresql.sql b/administrator/components/com_finder/sql/uninstall.postgresql.sql
deleted file mode 100644
index 76d7981529149..0000000000000
--- a/administrator/components/com_finder/sql/uninstall.postgresql.sql
+++ /dev/null
@@ -1,25 +0,0 @@
-DROP TABLE IF EXISTS "#__finder_filters";
-DROP TABLE IF EXISTS "#__finder_links";
-DROP TABLE IF EXISTS "#__finder_links_terms0";
-DROP TABLE IF EXISTS "#__finder_links_terms1";
-DROP TABLE IF EXISTS "#__finder_links_terms2";
-DROP TABLE IF EXISTS "#__finder_links_terms3";
-DROP TABLE IF EXISTS "#__finder_links_terms4";
-DROP TABLE IF EXISTS "#__finder_links_terms5";
-DROP TABLE IF EXISTS "#__finder_links_terms6";
-DROP TABLE IF EXISTS "#__finder_links_terms7";
-DROP TABLE IF EXISTS "#__finder_links_terms8";
-DROP TABLE IF EXISTS "#__finder_links_terms9";
-DROP TABLE IF EXISTS "#__finder_links_termsa";
-DROP TABLE IF EXISTS "#__finder_links_termsb";
-DROP TABLE IF EXISTS "#__finder_links_termsc";
-DROP TABLE IF EXISTS "#__finder_links_termsd";
-DROP TABLE IF EXISTS "#__finder_links_termse";
-DROP TABLE IF EXISTS "#__finder_links_termsf";
-DROP TABLE IF EXISTS "#__finder_taxonomy";
-DROP TABLE IF EXISTS "#__finder_taxonomy_map";
-DROP TABLE IF EXISTS "#__finder_terms";
-DROP TABLE IF EXISTS "#__finder_terms_common";
-DROP TABLE IF EXISTS "#__finder_tokens";
-DROP TABLE IF EXISTS "#__finder_tokens_aggregate";
-DROP TABLE IF EXISTS "#__finder_types";
diff --git a/administrator/components/com_search/access.xml b/administrator/components/com_search/access.xml
index 9b65a75052466..f19530a348048 100644
--- a/administrator/components/com_search/access.xml
+++ b/administrator/components/com_search/access.xml
@@ -4,6 +4,9 @@
+
+
+
diff --git a/administrator/components/com_search/config.xml b/administrator/components/com_search/config.xml
index 69b5cf4f94602..872d5e843ff2c 100644
--- a/administrator/components/com_search/config.xml
+++ b/administrator/components/com_search/config.xml
@@ -60,7 +60,275 @@
cols="30" rows="2"
/>
-
+
+