Current Directory: /home/astoriaah/www/old15/administrator/components/com_sh404sef/lib/extplugins/acesef
Viewing File: /home/astoriaah/www/old15/administrator/components/com_sh404sef/lib/extplugins/acesef/utility.php
<?php
/**
* sh404SEF - SEO extension for Joomla!
*
* @author Yannick Gaultier
* @copyright (c) Yannick Gaultier 2014
* @package sh404SEF
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @version 4.4.4.1791
* @date 2014-07-01
*/
// No Permission
defined('_JEXEC') or die('Restricted Access');
// Imports
jimport('joomla.filesystem.file');
// Utility class
class AcesefUtility {
static $props = array();
function __construct() {
// Get config object
$this->AcesefConfig = AcesefFactory::getConfig();
}
function import($path) {
require_once(JPATH_ADMINISTRATOR . '/' . 'components' . '/' . 'com_acesef' . '/' . str_replace('.', '/', $path).'.php');
}
function render($path) {
ob_start();
require_once($path);
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
function get($name, $default = null) {
if (!is_array(self::$props) || !isset(self::$props[$name])) {
return $default;
}
return self::$props[$name];
}
function set($name, $value) {
if (!is_array(self::$props)) {
self::$props = array();
}
$previous = self::get($name);
self::$props[$name] = $value;
return $previous;
}
function getConfigState($params, $cfg_name, $prm = "") {
if (!is_object($params)) {
return false;
}
$prm_name = $cfg_name;
if ($prm != "") {
$prm_name = $prm;
}
$param = $params->get($prm_name, 'global');
if (($param == 'no') || ($param == 'global' && $this->AcesefConfig->$cfg_name == '0')) {
return false;
}
return true;
}
function &getMenu() {
jimport('joomla.application.menu');
$options = array();
$menu =& JMenu::getInstance('site', $options);
if (empty($menu)) {
$null = null;
return $null;
}
return $menu;
}
function getComponents() {
static $components;
if(!isset($components)) {
$filter = "'com_sef', 'com_sh404sef', 'com_joomfish', 'com_config', 'com_media', 'com_installer', 'com_templates', 'com_plugins', 'com_modules', 'com_cpanel', 'com_cache', 'com_messages', 'com_menus', 'com_massmail', 'com_languages', 'com_users'";
$rows = AceDatabase::loadObjectList("SELECT `name`, `option` FROM `#__components` WHERE `parent` = '0' AND `option` != '' AND `option` NOT IN ({$filter}) ORDER BY `name`");
foreach($rows as $row) {
$components[] = JHTML::_('select.option', $row->option, $row->name);
}
}
return $components;
}
function getExtensionFromRequest() {
static $extension;
if (!isset($extension)) {
$cid = JRequest::getVar('cid', array(0), 'method', 'array');
$extension = AceDatabase::loadResult("SELECT extension FROM #__acesef_extensions WHERE id = ".$cid[0]);
}
return $extension;
}
function getOptionFromRealURL($url) {
$url = str_replace('&', '&', $url);
$url = str_replace('index.php?', '', $url);
parse_str($url, $vars);
if (isset($vars['option'])) {
return $vars['option'];
} else {
return '';
}
}
// Get the list of languages
function getLanguages() {
static $languages;
if(!isset($languages)) {
$db =ShlDbHelper::getDb();
$tables = $db->getTableList();
$prefix = $db->getPrefix();
$langs = $prefix."languages";
if (in_array($langs, $tables)){
// Get installed languages and add them to list
$langs = AceDatabase::loadObjectList("SELECT `id`, `shortcode`, `name` FROM `#__languages` WHERE `active` = '1' ORDER BY `ordering`");
if( @count(@$langs) ) {
foreach($langs as $lang) {
$l = new stdClass();
$l->code = $lang->shortcode;
$l->name = $lang->name;
// Load languages
$languages[] = JHTML::_('select.option', $l->code, $l->name);
}
}
}
}
return $languages;
}
function replaceLoop($search, $replace, $text) {
$count = 0;
if (!is_string($text)) {
return $text;
}
while ((strpos($text, $search) !== false) && ($count < 10)) {
$text = str_replace($search, $replace, $text);
$count++;
}
return $text;
}
function getSefStatus() {
static $status;
if (!isset($status)) {
$JoomlaConfig =JFactory::getConfig();
$status = array();
$status['version_checker'] = (bool)$this->AcesefConfig->version_checker;
$status['php'] = (bool)version_compare(PHP_VERSION, '5.2.0', '>');
$status['s_mod_rewrite'] = '';
if (function_exists('apache_get_modules')) {
$modules = apache_get_modules();
$status['s_mod_rewrite'] = (bool)in_array('mod_rewrite', $modules);
}
$status['sef'] = (bool)$JoomlaConfig->get('sef');
$status['mod_rewrite'] = (bool)$JoomlaConfig->get('sef_rewrite');
$status['htaccess'] = false;
if (file_exists(JPATH_ROOT. '/' .'.htaccess')) {
$filesize = filesize(JPATH_ROOT. '/' .'.htaccess');
$status['htaccess'] = (bool)($filesize > 2060);
}
$status['live_site'] = $JoomlaConfig->get('live_site');
if (AcesefUtility::JoomFishInstalled()) {
$status['jfrouter'] = JPluginHelper::isEnabled('system', 'jfrouter');
}
$status['acesef'] = (bool)$this->AcesefConfig->mode;
$status['plugin'] = JPluginHelper::isEnabled('system', 'acesef');
$status['generate_sef'] = (bool)$this->AcesefConfig->generate_sef;
}
return $status;
}
function JoomFishInstalled() {
static $installed;
if (!isset($installed)) {
$installed = JFile::exists(JPATH_ROOT. '/' .'administrator'. '/' .'components'. '/' .'com_joomfish'. '/' .'joomfish.php');
}
return $installed;
}
function getParam($text, $param) {
$params = new JParameter($text);
return $params->get($param);
}
function storeParams($table, $id, $db_field, $new_params) {
$row = AcesefFactory::getTable($table);
if (!$row->load($id)) {
return false;
}
$params = new JParameter($row->$db_field);
foreach ($new_params as $name => $value) {
$params->set($name, $value);
}
$row->$db_field = $params->toString();
if (!$row->check()) {
return false;
}
if (!$row->store()) {
return false;
}
}
// Clear texts from unwanted chars
function cleanText($text) {
$text = strip_tags($text);
$text = preg_replace(array('/&quot;/', '/&nbsp;/', '/&lt;/', '/&gt;/', '/&copy;/', '/&amp;/', '/&euro;/', '/&hellip;/'), ' ', $text);
$text = preg_replace(array('/"/', '/ /', '/</', '/>/', '/©/', '/&/', '/€/', '/…/'), ' ', $text);
$text = preg_replace("'<script[^>]*>.*?</script>'si", ' ', $text);
$text = preg_replace('/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is', '\2 (\1)', $text);
$text = preg_replace('/<!--.+?-->/', ' ', $text);
$text = preg_replace('/{.+?}/', ' ', $text);
$text = preg_replace('(\{.*?\})', ' ', $text);
$text = preg_replace('/\s\s+/', ' ', $text);
$text = preg_replace('/\n\n+/s', ' ', $text);
$text = preg_replace('/<[^<|^>]*>/u', ' ', $text);
$text = preg_replace('/{[^}]*}[\s\S]*{[^}]*}/u', ' ', $text);
$text = preg_replace('/{[^}]*}/u', ' ', $text);
$text = trim($text);
$text = str_replace(array('\r\n', '\r', '\n', '\t', '\n\n', '<', '>', ':', '#', '`', '”', '“', '¿', '\0', '\x0B', '"', '"', '"'), ' ', $text);
$text = preg_replace('/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/', ' ', $text);
while(strpos($text, ' ')) {
$text = str_replace(' ', ' ', $text);
}
// Space
$text = preg_replace('/\s/u', ' ', $text);
// Special chars
$text = self::replaceSpecialChars($text);
$text = rtrim($text, "'");
$text = rtrim($text, "\\");
return $text;
}
// Replace some special chars
function replaceSpecialChars($text, $reverse = false) {
if (is_string($text)) {
if (!$reverse) {
$text = str_replace("\'", "'", $text);
$text = addslashes($text);
} else {
$text = stripslashes($text);
}
}
return $text;
}
// Get text from XML
function getXmlText($file, $variable) {
// Try to find variable
$value = null;
if (JFile::exists($file)) {
$xml =JFactory::getXMLParser('Simple');
if ($xml->loadFile($file)) {
$root =& $xml->document;
$element =& $root->getElementByPath($variable);
$value = $element ? $element->data() : '';
}
}
return $value;
}
// Get Menu title
function getMenuTitle($Itemid, $start_level = 0, $length_level = 0) {
if (empty($Itemid)) {
return array();
}
static $menus = array();
$id = $Itemid;
if (!isset($menus[$id])) {
$joomfish = $this->AcesefConfig->joomfish_trans_url ? ', id' : '';
// Title or Alias
$part = 'name';
if ($this->AcesefConfig->menu_url_part == 'alias') {
$part = 'alias';
}
$menus[$id] = array();
while ($Itemid > 0) {
$row = AceDatabase::loadObject("SELECT $part AS name, parent$joomfish FROM #__menu WHERE id = '$Itemid' AND published > 0");
if (is_null($row)) {
break;
}
array_unshift($menus[$id], $row->name);
$Itemid = $row->parent;
if ($this->AcesefConfig->parent_menus == '0') {
break; // Only last one
}
}
}
if ($this->AcesefConfig->parent_menus == '1' && ($start_level != 0 || $length_level != 0) && !empty($menus[$id])) {
if ($length_level != 0) {
return array_slice($menus[$id], $start_level, $length_level);
}
else {
return array_slice($menus[$id], $start_level);
}
}
return $menus[$id];
}
}