Back to Installer class

Method setSchemaVersion

public void
setSchemaVersion
(\SimpleXMLElement $schema, mixed $eid)
Set the schema version for an extension by looking at its latest update
Parameters
  • \SimpleXMLElement $schema Schema Tag
  • int $eid Extension ID
Returns
  • void
Since
  • 3.1
Class: Installer
Project: Joomla

Method setSchemaVersion - Source code

/**
 * Set the schema version for an extension by looking at its latest update
 *
 * @param   \SimpleXMLElement  $schema  Schema Tag
 * @param   integer            $eid     Extension ID
 *
 * @return  void
 *
 * @since   3.1
 */
public function setSchemaVersion(\SimpleXMLElement $schema, $eid)
{
    if ($eid && $schema) {
        $db = Factory::getDbo();
        $schemapaths = $schema->children();
        if (!$schemapaths) {
            return;
        }
        if (\count($schemapaths)) {
            $dbDriver = $db->getServerType();
            $schemapath = '';
            foreach ($schemapaths as $entry) {
                $attrs = $entry->attributes();
                if ($attrs['type'] == $dbDriver) {
                    $schemapath = $entry;
                    break;
                }
            }
            if ($schemapath !== '') {
                $files = str_replace('.sql', '', Folder::files($this->getPath('extension_root') . '/' . $schemapath, '\\.sql$'));
                usort($files, 'version_compare');
                // Update the database
                $query = $db->getQuery(true)->delete('#__schemas')->where('extension_id = :extension_id')->bind(':extension_id', $eid, ParameterType::INTEGER);
                $db->setQuery($query);
                if ($db->execute()) {
                    $schemaVersion = end($files);
                    $query->clear()->insert($db->quoteName('#__schemas'))->columns(array($db->quoteName('extension_id'), $db->quoteName('version_id')))->values(':extension_id, :version_id')->bind(':extension_id', $eid, ParameterType::INTEGER)->bind(':version_id', $schemaVersion);
                    $db->setQuery($query);
                    $db->execute();
                }
            }
        }
    }
}