[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/components/com_finder/src/Helper/ -> FinderHelper.php (source)

   1  <?php
   2  
   3  /**
   4   * @package     Joomla.Site
   5   * @subpackage  com_finder
   6   *
   7   * @copyright   (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
   8   * @license     GNU General Public License version 2 or later; see LICENSE.txt
   9   */
  10  
  11  namespace Joomla\Component\Finder\Site\Helper;
  12  
  13  use Joomla\CMS\Component\ComponentHelper;
  14  use Joomla\CMS\Factory;
  15  use Joomla\Component\Finder\Administrator\Indexer\Query;
  16  use Joomla\Database\ParameterType;
  17  
  18  // phpcs:disable PSR1.Files.SideEffects
  19  \defined('JPATH_PLATFORM') or die;
  20  // phpcs:enable PSR1.Files.SideEffects
  21  
  22  /**
  23   * Helper class for Joomla! Finder components
  24   *
  25   * @since  4.0.0
  26   */
  27  class FinderHelper
  28  {
  29      /**
  30       * Method to log searches to the database
  31       *
  32       * @param   Query    $searchquery  The search query
  33       * @param   integer  $resultCount  The number of results for this search
  34       *
  35       * @return  void
  36       *
  37       * @since   4.0.0
  38       */
  39      public static function logSearch(Query $searchquery, $resultCount = 0)
  40      {
  41          if (!ComponentHelper::getParams('com_finder')->get('gather_search_statistics', 0)) {
  42              return;
  43          }
  44  
  45          if (trim($searchquery->input) == '' && !$searchquery->empty) {
  46              return;
  47          }
  48  
  49          // Initialise our variables
  50          $db = Factory::getDbo();
  51          $query = $db->getQuery(true);
  52  
  53          // Sanitise the term for the database
  54          $temp = new \stdClass();
  55          $temp->input = trim(strtolower((string) $searchquery->input));
  56          $entry = new \stdClass();
  57          $entry->searchterm = $temp->input;
  58          $entry->query = serialize($temp);
  59          $entry->md5sum = md5($entry->query);
  60          $entry->hits = 1;
  61          $entry->results = $resultCount;
  62  
  63          // Query the table to determine if the term has been searched previously
  64          $query->select($db->quoteName('hits'))
  65              ->from($db->quoteName('#__finder_logging'))
  66              ->where($db->quoteName('md5sum') . ' = ' . $db->quote($entry->md5sum));
  67          $db->setQuery($query);
  68          $hits = (int) $db->loadResult();
  69  
  70          // Reset the $query object
  71          $query->clear();
  72  
  73          // Update the table based on the results
  74          if ($hits) {
  75              $query->update($db->quoteName('#__finder_logging'))
  76                  ->set('hits = (hits + 1)')
  77                  ->where($db->quoteName('md5sum') . ' = ' . $db->quote($entry->md5sum));
  78              $db->setQuery($query);
  79              $db->execute();
  80          } else {
  81              $query->insert($db->quoteName('#__finder_logging'))
  82                  ->columns(
  83                      [
  84                          $db->quoteName('searchterm'),
  85                          $db->quoteName('query'),
  86                          $db->quoteName('md5sum'),
  87                          $db->quoteName('hits'),
  88                          $db->quoteName('results'),
  89                      ]
  90                  )
  91                  ->values('?, ?, ?, ?, ?')
  92                  ->bind(1, $entry->searchterm)
  93                  ->bind(2, $entry->query, ParameterType::LARGE_OBJECT)
  94                  ->bind(3, $entry->md5sum)
  95                  ->bind(4, $entry->hits, ParameterType::INTEGER)
  96                  ->bind(5, $entry->results, ParameterType::INTEGER);
  97              $db->setQuery($query);
  98              $db->execute();
  99          }
 100      }
 101  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer