Actions

API15

JInstaller/parseSQLFiles

From Joomla! Documentation

< API15:JInstaller
Revision as of 17:23, 22 March 2010 by Doxiki (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Replacement filing cabinet.png
This Namespace has been archived - Please Do Not Edit or Create Pages in this namespace. Pages contain information for a Joomla! version which is no longer supported. It exists only as a historical reference, will not be improved and its content may be incomplete.

Contents

Description

Method to extract the name of a discreet installation sql file from the installation manifest file.

[Edit Descripton]

Description:JInstaller/parseSQLFiles

Syntax

parseSQLFiles($element)
Parameter Name Default Value Description
$element $element The xml node to process

Returns

mixed Number of queries processed or False on error

Defined in

libraries/joomla/installer/installer.php

Importing

jimport( 'joomla.installer.installer' );

Source Body

function parseSQLFiles($element)
{
        // Initialize variables
        $queries = array();
        $db = & $this->_db;
        $dbDriver = strtolower($db->get('name'));
        if ($dbDriver == 'mysqli') {
                $dbDriver = 'mysql';
        }
        $dbCharset = ($db->hasUTF()) ? 'utf8' : '';
 
        if (!is_a($element, 'JSimpleXMLElement')) {
                // The tag does not exist.
                return 0;
        }
 
        // Get the array of file nodes to process
        $files = $element->children();
        if (count($files) == 0) {
                // No files to process
                return 0;
        }
 
        // Get the name of the sql file to process
        $sqlfile = '';
        foreach ($files as $file)
        {
                $fCharset = (strtolower($file->attributes('charset')) == 'utf8') ? 'utf8' : '';
                $fDriver  = strtolower($file->attributes('driver'));
                if ($fDriver == 'mysqli') {
                        $fDriver = 'mysql';
                }
 
                if( $fCharset == $dbCharset && $fDriver == $dbDriver) {
                        $sqlfile = $file->data();
                        // Check that sql files exists before reading. Otherwise raise error for rollback
                        if ( !file_exists( $this->getPath('extension_administrator').DS.$sqlfile ) ) {
                                return false;
                        }
                        $buffer = file_get_contents($this->getPath('extension_administrator').DS.$sqlfile);
 
                        // Graceful exit and rollback if read not successful
                        if ( $buffer === false ) {
                                return false;
                        }
 
                        // Create an array of queries from the sql file
                        jimport('joomla.installer.helper');
                        $queries = JInstallerHelper::splitSql($buffer);
 
                        if (count($queries) == 0) {
                                // No queries to process
                                return 0;
                        }
 
                        // Process each query in the $queries array (split out of sql file).
                        foreach ($queries as $query)
                        {
                                $query = trim($query);
                                if ($query != '' && $query{0} != '#') {
                                        $db->setQuery($query);
                                        if (!$db->query()) {
                                                JError::raiseWarning(1, 'JInstaller::install: '.JText::_('SQL Error')." ".$db->stderr(true));
                                                return false;
                                        }
                                }
                        }
                }
        }
 
        return (int) count($queries);
}

[Edit See Also] SeeAlso:JInstaller/parseSQLFiles

Examples

<CodeExamplesForm />