joomla_test/administrator/components/com_languages/models/strings.php
2020-01-02 22:20:31 +07:00

164 lines
4.2 KiB
PHP

<?php
/**
* @package Joomla.Administrator
* @subpackage com_languages
*
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Languages Strings Model
*
* @package Joomla.Administrator
* @subpackage com_languages
* @since 2.5
*/
class LanguagesModelStrings extends JModelLegacy
{
/**
* Method for refreshing the cache in the database with the known language strings
*
* @return boolean True on success, Exception object otherwise
*
* @since 2.5
*/
public function refresh()
{
require_once JPATH_COMPONENT.'/helpers/languages.php';
$app = JFactory::getApplication();
$app->setUserState('com_languages.overrides.cachedtime', null);
// Empty the database cache first
try
{
$this->_db->setQuery('TRUNCATE TABLE '.$this->_db->quoteName('#__overrider'));
$this->_db->execute();
}
catch (RuntimeException $e)
{
return $e;
}
// Create the insert query
$query = $this->_db->getQuery(true)
->insert($this->_db->quoteName('#__overrider'))
->columns('constant, string, file');
// Initialize some variables
$client = $app->getUserState('com_languages.overrides.filter.client', 'site') ? 'administrator' : 'site';
$language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB');
$base = constant('JPATH_'.strtoupper($client));
$path = $base . '/language/' . $language;
$files = array();
// Parse common language directory
jimport('joomla.filesystem.folder');
if (is_dir($path))
{
$files = JFolder::files($path, $language.'.*ini$', false, true);
}
// Parse language directories of components
$files = array_merge($files, JFolder::files($base.'/components', $language.'.*ini$', 3, true));
// Parse language directories of modules
$files = array_merge($files, JFolder::files($base.'/modules', $language.'.*ini$', 3, true));
// Parse language directories of templates
$files = array_merge($files, JFolder::files($base.'/templates', $language.'.*ini$', 3, true));
// Parse language directories of plugins
$files = array_merge($files, JFolder::files(JPATH_PLUGINS, $language.'.*ini$', 3, true));
// Parse all found ini files and add the strings to the database cache
foreach ($files as $file)
{
$strings = LanguagesHelper::parseFile($file);
if ($strings && count($strings))
{
$query->clear('values');
foreach ($strings as $key => $string)
{
$query->values($this->_db->quote($key).','.$this->_db->quote($string).','.$this->_db->quote(JPath::clean($file)));
}
try
{
$this->_db->setQuery($query);
$this->_db->execute();
}
catch (RuntimeException $e)
{
return $e;
}
}
}
// Update the cached time
$app->setUserState('com_languages.overrides.cachedtime.'.$client.'.'.$language, time());
return true;
}
/**
* Method for searching language strings
*
* @return array Array of resuls on success, Exception object otherwise
*
* @since 2.5
*/
public function search()
{
$results = array();
$input = JFactory::getApplication()->input;
$limitstart = $input->getInt('more');
try
{
$searchstring = $this->_db->quote('%' . $input->getString('searchstring') . '%');
// Create the search query
$query = $this->_db->getQuery(true)
->select('constant, string, file')
->from($this->_db->quoteName('#__overrider'));
if ($input->get('searchtype') == 'constant')
{
$query->where('constant LIKE '.$searchstring);
}
else
{
$query->where('string LIKE '.$searchstring);
}
// Consider the limitstart according to the 'more' parameter and load the results
$this->_db->setQuery($query, $limitstart, 10);
$results['results'] = $this->_db->loadObjectList();
// Check whether there are more results than already loaded
$query->clear('select')
->select('COUNT(id)');
$this->_db->setQuery($query);
if ($this->_db->loadResult() > $limitstart + 10)
{
// If this is set a 'More Results' link will be displayed in the view
$results['more'] = $limitstart + 10;
}
}
catch (RuntimeException $e)
{
return $e;
}
return $results;
}
}