NexusLeads Webshell
NexusLeads


Server : LiteSpeed
System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64
User : alsaif ( 1057)
PHP Version : 7.4.33
Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/alsaif/public_html/plugins/system/falangdriver/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/alsaif/public_html/plugins/system/falangdriver/falang_database.php
<?php
/**
 * @package     Falang for Joomla!
 * @author      Stéphane Bouey <stephane.bouey@faboba.com> - http://www.faboba.com
 * @license     GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 * @copyright   Copyright (C) 2010-2017. Faboba.com All rights reserved.
 */

// No direct access to this file
defined('_JEXEC') or die;

require_once( JPATH_SITE.'/components/com_falang/helpers/defines.php' );
require_once( JPATH_SITE.'/components/com_falang/helpers/falang.class.php' );
require_once( JPATH_SITE."/administrator/components/com_falang/classes/FalangManager.class.php");

include_once(dirname(__FILE__) . '/drivers/' . strtolower(JFactory::getDBO()->name) . "x.php");

class JFalangDatabase extends JOverrideDatabase {

	/** @var array list of multi lingual tables */
	var $_mlTableList=null;
	/** @var Internal variable to hold array of unique tablenames and mapping data*/
	var $_refTables=null;

	/** @var Internal variable to hold flag about whether setRefTables is needed - JF queries don't need it */
	var $_skipSetRefTables = false;

	var $orig_limit	= 0;
	var $orig_offset	= 0;
    var $_table_prefix = null;

	var $profileData = array();


	public function __construct($options)
    {
            parent::__construct($options);
            $this->_table_prefix = $options['prefix'];
            $pfunc = $this->_profile();

            $query = "select distinct reference_table from #__falang_content";
            $this->setQuery( $query );
            $this->_skipSetRefTables = true;
            $this->_mlTableList = $this->loadColumn(0,false);
            $this->_skipSetRefTables = false;
            if( !$this->_mlTableList ){
                    if ($this->getErrorNum()>0){
                            JError::raiseWarning( 200, JTEXT::_('No valid table list:') .$this->getErrorMsg());
                    }
            }

            $pfunc = $this->_profile($pfunc);
    }

	/**
	 * Description
	 *
	 * @access public
	 * @return int The number of rows returned from the most recent query.
	 */
	function getNumRows( $cur=null, $translate=true, $language=null )
	{
		$count = parent::getNumRows($cur);
		if (!$translate) return $count;

		// setup falang plugins
		$dispatcher	   = JDispatcher::getInstance();
        jimport('joomla.plugin.helper');
		JPluginHelper::importPlugin('falang');

		// must allow fall back for contnent table localisation to work
		$allowfallback = true;
		$refTablePrimaryKey = "";
		$reference_table = "";
		$ids="";
		//$this->setLanguage($language);
		$registry = JFactory::getConfig();
		$defaultLang = $registry->get("config.defaultlang");
		if ($defaultLang == $language){
			$rows = array($count);
			$dispatcher->trigger('onBeforeTranslation', array (&$rows, &$ids, $reference_table, $language, $refTablePrimaryKey, $this->getRefTables(), $this->sql, $allowfallback));
			$count = $rows[0];
			return $count;
		}

		$rows = array($count);

		$dispatcher->trigger('onBeforeTranslation', array (&$rows, &$ids, $reference_table, $language, $refTablePrimaryKey, $this->getRefTables(), $this->sql, $allowfallback));

		$dispatcher->trigger('onAfterTranslation', array (&$rows, &$ids, $reference_table, $language, $refTablePrimaryKey, $this->getRefTables(), $this->sql, $allowfallback));
		$count = $rows[0];
		return $count;
	}

    /**
     * Execute the SQL statement. New query() name since 2.5.5
     *
     * @return  mixed  A database cursor resource on success, boolean false on failure.
     *
     * @since   11.1
     * @throws  DatabaseException
     */
    public function execute()
    {
        $success = parent::execute();

	    if ($success && !$this->_skipSetRefTables){
            $this->setRefTables();
        }
        return $this->cursor;
    }

    /**
     * Execute the SQL statement. query() become execute since 2.5.5
     *
     * @return  mixed  A database cursor resource on success, boolean false on failure.
     *
     * @since   11.1
     * @throws  DatabaseException
     */

    public function query()
	{
		return $this->execute();
	}


	/**
	* Overwritten Database method to loads the first field of the first row returned by the query.
	*
	* @return The value returned in the query or null if the query failed.
	*/
	function loadResult( $translate=true, $language=null ) {
		if (!$translate){
			$this->_skipSetRefTables=true;
			$result = parent::loadResult();
			$this->_skipSetRefTables=false;
			return $result;
		}
		$result=null;
		$ret=null;

		$result = $this->_loadObject( $translate, $language );

		$pfunc = $this->_profile();

		if( $result != null ) {
			$fields = get_object_vars( $result );
			$ret = current($fields);
		}

		$pfunc = $this->_profile($pfunc);

		return $ret;
	}

    function loadResultArray($offset = 0,  $translate=true, $language=null){
        return $this->loadColumn($offset,$translate,$language);
    }

    /**
     * Overwritten Method to get an array of values from the <var>$offset</var> field in each row of the result set from
     * the database query.
     *
     * @param   integer  $offset  The row offset to use to build the result array.
     *
     * @return  mixed    The return value or null if the query failed.
     *
     * @since   11.1
     * @throws  DatabaseException
     */
    function loadColumn($offset = 0,  $translate=true, $language=null){
        if (!$translate){
            return parent::loadColumn($offset);
        }
        $results=array();
        $ret=array();
        $results = $this->loadObjectList( '','stdClass', $translate, $language );

        $pfunc = $this->_profile();

        if( $results != null && count($results)>0) {
            foreach ($results as $row) {
                $fields = get_object_vars( $row );
                $keycount = 0;
                foreach ($fields as $k=>$v) {
                    if ($keycount==$offset){
                        $key = $k;
                        break;
                    }
                }
				if(isset($key)){
					$ret[] = $fields[$key];
				}
            }
        }

        $pfunc = $this->_profile($pfunc);

        return $ret;
    }

    /**
     * Overwritten
     *
     * @access	public
     * @return The first row of the query.
     */
    function loadRow( $translate=true, $language=null)
    {
        if (!$translate){
            return parent::loadRow();
        }
        $result=null;
        $result = $this->_loadObject( $translate, $language );

        $pfunc = $this->_profile();

        $row = array();
        if( $result != null ) {
            $fields = get_object_vars( $result );
            foreach ($fields as $val) {
                $row[] = $val;
            }
            return $row;
        }
        return $row;
    }

    /**
    * Overwritten Load a list of database rows (numeric column indexing)
    *
    * @access public
    * @param string The field name of a primary key
    * @return array If <var>key</var> is empty as sequential list of returned records.
    * If <var>key</var> is not empty then the returned array is indexed by the value
    * the database key.  Returns <var>null</var> if the query fails.
    */
    function loadRowList( $key=null , $translate=true, $language=null)
    {
        if (!$translate){
            return parent::loadRowList($key);
        }
        $results=array();
        if (is_null($key)) $key="";
        $rows = $this->loadObjectList($key,'stdClass', $translate, $language );

        $pfunc = $this->_profile();

        $row = array();
        if( $rows != null ) {
            foreach ($rows as $row) {
                $fields = get_object_vars( $row );
                $result = array();
                foreach ($fields as $val) {
                    $result[] = $val;
                }
                if ($key!="") {
                    $results[$row->$key] = $result;
                }
                else {
                    $results[] = $result;
                }
            }
        }
        $pfunc = $this->_profile($pfunc);
        return $results;
    }


	function loadObjectList( $key='',$class = 'stdClass', $translate=true, $language=null ) {
		//sbou
                //sbou TODO check r�cursive pb
                //$jfManager = FalangManager::getInstance();
		if (!$translate) {
			$this->_skipSetRefTables=true;
			$result = parent::loadObjectList( $key ,empty($class)?'stdClass':$class);
			$this->_skipSetRefTables=false;
			return $result;
		}

		$result = parent::loadObjectList( $key, empty($class)?'stdClass':$class);


//		if( isset($jfManager)) {
//			$this->_setLanguage($language);
//		}

		// TODO check the impact of this on frontend translation
		// It does stop Joomfish plugins from working on missing translations e.g. regional content so disable for now
		// Don't do it for now since translation caching is so effective
		/*
		$registry = JFactory::getConfig();
		$defaultLang = $registry->getValue("config.defaultlang");
		if ($defaultLang == $language){
		$translate = false;
		}
		*/

                //sbou TODO this is not the right solution.
//		if( isset($jfManager)) {
                if (true){
			$doTranslate=false;
			$tables =$this->getRefTables();
			if ($tables == null) return $result; // an unstranslatable query to return result as is
			// if we don't have "fieldTablePairs" then we can't translate
			if (!array_key_exists("fieldTablePairs",$tables)){
				return $result;
			}
			foreach ($tables["fieldTablePairs"] as $i=>$table) {
				if ($this->translatedContentAvailable($table)) {
					$doTranslate=true;
					break;
				}
			}
			if ($doTranslate ) {
				$pfunc = $this->_profile();
                                //sbou TODO cache desactived
//				if ($jfManager->getCfg("transcaching",1)){
                                if (false) {
					// cache the results
					// TODO call based on config
					//$cache = JFactory::getCache('jfquery');
                    $cache = $jfManager->getCache($language);
					$this->orig_limit	= $this->limit;
					$this->orig_offset	= $this->offset;
					$result = $cache->get( array("FaLang", 'translateListCached'), array($result, $language, $this->getRefTables() ));
					$this->orig_limit	= 0;
					$this->orig_offset	= 0;
				}
				else {
					$this->orig_limit	= $this->limit;
					$this->orig_offset	= $this->offset;
					Falang::translateList( $result, $language, $this->getRefTables() );
					$this->orig_limit	= 0;
					$this->orig_offset	= 0;
				}
				$pfunc = $this->_profile($pfunc);
			}
		}
		return $result;
	}

	/**
	 * private function to handle the requirement to call different loadObject version based on class
	 *
	 * @param boolran $translate
	 * @param string $language
	 */
	function _loadObject( $translate=true, $language=null ) {
		return $this->loadObject();
	}




	function _profile($func = "", $forcestart=false){
		if (!$this->debug) return "";
		// start of function
		if ($func==="" || $forcestart){
			if (!$forcestart){
				$backtrace = debug_backtrace();
				if (count($backtrace)>1){
					if (array_key_exists("class",$backtrace[1])){
						$func = $backtrace[1]["class"]."::".$backtrace[1]["function"];
					}
					else {
						$func = $backtrace[1]["function"];
					}
				}
			}
			if (!array_key_exists($func,$this->profileData)){
				$this->profileData[$func]=array("total"=>0, "count"=>0);
			}
			if (!array_key_exists("start",$this->profileData[$func])) {
				$this->profileData[$func]["start"]=array();
			}
			list ($usec,$sec) = explode(" ", microtime());
			$this->profileData[$func]["start"][] = floatval($usec)+floatval($sec);
			$this->profileData[$func]["count"]++;
			return $func;
		}
		else {
			if (!array_key_exists($func,$this->profileData)){
				exit("JFProfile start not found for function $func");
			}
			list ($usec,$sec) = explode(" ", microtime());
			$laststart = array_pop($this->profileData[$func]["start"]);
			$this->profileData[$func]["total"] += (floatval($usec)+floatval($sec)) - $laststart;
		}
	}



	/**
	 * Public function to test if table has translated content available
	 *
	 * @param string $table : tablename to test
	 */
	function translatedContentAvailable($table){
		return in_array( $table, $this->_mlTableList) || $table=="content";
	}

	/** Internal function to return reference table names from an sql query
	 *
	 * @return	string	table name
	 */
	function getRefTables(){
		return $this->_refTables;
	}

	/**
	* This global function loads the first row of a query into an object
	*/
	function loadObject( $class = 'stdClass', $translate=true, $language=null ) {
		$objects = $this->loadObjectList("",$class,$translate,$language);
		if (!is_null($objects) && count($objects)>0){
			return $objects[0];
		}
		return null;
	}

	/**
	* Overwritten Fetch a result row as an associative array
	*
	* @access	public
	* @return array
	*/
	function loadAssoc( $translate=true, $language=null) {
		if (!$translate){
			return parent::loadResult();
		}
		$result=null;
		$result = $this->_loadObject( $translate, $language );

		$pfunc = $this->_profile();

		if( $result != null ) {
			$fields = get_object_vars( $result );
			$pfunc = $this->_profile($pfunc);
			return $fields;
		}
		return $result;
	}

	/**
	* Overwritten Load a assoc list of database rows
	*
	* @access	public
	* @param string The field name of a primary key
	* @return array If <var>key</var> is empty as sequential list of returned records.
	*/
	function loadAssocList( $key = null, $column = null, $translate=true, $language=null )
	{
		if (!$translate){
			return parent::loadAssocList($key, $column = null);
		}
		$result=null;
		$rows = $this->loadObjectList($key,'stdClass', $translate, $language );

		$pfunc = $this->_profile();
		$return = array();
		if( $rows != null ) {
			foreach ($rows as $row) {
                $vars = get_object_vars( $row );
                $value = ($column) ? (isset($vars[$column]) ? $vars[$column] : $vars) : $vars;
                if ($key) {
                    $return[$vars[$key]] = $value;
                }
                else {
                    $return[] = $value;
                }
			}
			$pfunc = $this->_profile($pfunc);
		}
		return $return;
	}


    /**
     * Overwritten insert function to enable storage of material created in non-default language.
     * Note that this creates a translation which is identical to the original - when we update
     * the original in the default language we then keep the translation (although it will appread out of date!).
     *
     * @param	string	table name
     * @param	object	instance with information to store
     * @param	string	primary key name of table
     * @param	boolean	debug info printed or not
     * @param	boolean	passthru without storing information in a translation table
     */
    function updateObject( $table, &$object, $keyName, $updateNulls=true, $passthru=false ) {

        $params = JComponentHelper::getParams('com_falang');
        //1.4.5 if fronEdition is set to off , keep previous system
        if ($params->get('frontEndEdition',0) == 0){
            return parent::updateObject( $table, $object, $keyName, $updateNulls );
        }

        $pfunc = $this->_profile();

        $falangManager = FalangManager::getInstance();

        $current_lang = JFactory::getLanguage()->getTag();

        //default site language
        $default_lang	= JComponentHelper::getParams('com_languages')->get('site');

        //we update if content language is set to all language or if content language is current_langauge
        // check if marked langage of content is the detaul language:
        if ($table=='#__content' && isset($object->id) &&$object->id>0 ){
            $test = JTable::getInstance("Content");
            $test->load($object->id);
            if ( $test->language == '*'){
                if ($current_lang == $default_lang) {
                    return parent::updateObject( $table, $object, $keyName, $updateNulls );
                }
            }
            if ( $test->language == $current_lang) {
                return parent::updateObject( $table, $object, $keyName, $updateNulls );
            }
        }

        if (isset($falangManager) && ($table != "#__falang_content")){
            $tableName = preg_replace( '/^#__/', '', $table);
            $contentElement = $falangManager->getContentElement( $tableName );
            if( isset( $contentElement ) && $contentElement->getFrontEdit() == 1 ) {
                include_once(JPATH_ADMINISTRATOR."/components/com_falang/models/ContentObject.php");
                $actContentObject = new ContentObject( $falangManager->getLanguageID($current_lang), $contentElement );

                $objectLanguague = isset($object->language)? $object->language:null;
                //the object language must be a language tag
                $languageIsoList = array("*");
                foreach ($falangManager->getLanguagesIndexedByCode(false) as $language)
                {
                    $languageIsoList[] =$language->lang_code;
                }
                $validLanguage = in_array($objectLanguague,$languageIsoList);


                // 1 - si object * => objet joomla si langue cournate et langue en cours sont pareil
                // 2 - si object a une langue , alors object joolma si la langue de l'object = language en cours
                $joomlaObject = false;
                if ($objectLanguague == "*"){
                    if ($current_lang == $default_lang) {
                        $joomlaObject = true;
                    }
                }
                if ( $objectLanguague == $current_lang) {
                    $joomlaObject = true;
                }
                //hikashop woraround //
                $lkeyName = method_exists($object,'getKeyName')?$object->getKeyName():null;
                if( !empty( $lkeyName) && $validLanguage && isset($objectLanguague) && !$joomlaObject ) {
                    $actContentObject->loadFromContentID( $object->id );
                    $actContentObject->updateMLContent( $object );
                    if( isset( $object->state ) ) {
                        $actContentObject->published = ($object->state == 1) ? true : false;
                    } else if ( isset( $object->published ) ) {
                        $actContentObject->published = ($object->published == 1) ? true : false;
                    }
                    $actContentObject->setPublished($actContentObject->published);
                    $actContentObject->store();
                    return true;
                } else {
                    //hikashop workaround this update hit.
                    return parent::updateObject( $table, $object, $keyName, $updateNulls );
                }
            } else { //content element not exist
                return parent::updateObject( $table, $object, $keyName, $updateNulls );
            }

        } else {
            return parent::updateObject( $table, $object, $keyName, $updateNulls );
        }
    }

}

NexusLeads