/**
* 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();
}
}
}
}
}