File "Tables.php"
Full Path: /home2/sdektunc/cepali.edu.mx/wp-content/plugins/smart-slider-3/Nextend/SmartSlider3/Install/Tables.php
File size: 10.59 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Nextend\SmartSlider3\Install;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Notification\Notification;
class Tables {
protected $tables = array(
'nextend2_image_storage' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`hash` VARCHAR(32) NOT NULL,
`image` TEXT NOT NULL,
`value` MEDIUMTEXT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `hash` (`hash`)
)",
'nextend2_section_storage' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`application` VARCHAR(20) NOT NULL,
`section` VARCHAR(128) NOT NULL,
`referencekey` VARCHAR(128) DEFAULT '',
`value` MEDIUMTEXT NOT NULL,
`system` INT(11) NOT NULL DEFAULT '0',
`editable` INT(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `application` (`application`, `section`(50), `referencekey`(50)),
KEY `application_2` (`application`, `section`(50)),
INDEX (`system`),
INDEX (`editable`)
)
AUTO_INCREMENT = 10000",
'nextend2_smartslider3_generators' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`group` VARCHAR(254) NOT NULL,
`type` VARCHAR(254) NOT NULL,
`params` TEXT NOT NULL,
PRIMARY KEY (`id`)
)",
'nextend2_smartslider3_sliders' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`alias` VARCHAR(255) NULL DEFAULT NULL,
`title` VARCHAR(200) NOT NULL,
`type` VARCHAR(30) NOT NULL,
`params` MEDIUMTEXT NOT NULL,
`status` VARCHAR(50) NOT NULL DEFAULT 'published',
`time` DATETIME NOT NULL,
`thumbnail` VARCHAR( 255 ) NOT NULL,
`ordering` INT NOT NULL DEFAULT '0',
INDEX (`status`),
INDEX (`time`),
PRIMARY KEY (`id`)
)",
'nextend2_smartslider3_sliders_xref' => "(
`group_id` int(11) NOT NULL,
`slider_id` int(11) NOT NULL,
`ordering` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`group_id`,`slider_id`),
INDEX (`ordering`)
)",
'nextend2_smartslider3_slides' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(200) NOT NULL,
`slider` INT(11) NOT NULL,
`publish_up` DATETIME NOT NULL default '1970-01-01 00:00:00',
`publish_down` DATETIME NOT NULL default '1970-01-01 00:00:00',
`published` TINYINT(1) NOT NULL,
`first` INT(11) NOT NULL,
`slide` LONGTEXT,
`description` TEXT NOT NULL,
`thumbnail` VARCHAR(255) NOT NULL,
`params` TEXT NOT NULL,
`ordering` INT(11) NOT NULL,
`generator_id` INT(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX (`published`),
INDEX (`publish_up`),
INDEX (`publish_down`),
INDEX (`generator_id`),
KEY `thumbnail` (`thumbnail`(100)),
INDEX (`ordering`),
INDEX (`slider`)
)"
);
public function install() {
foreach ($this->tables as $tableName => $structure) {
$this->installTable($tableName, $structure);
}
$hasIndex = Database::queryRow(Database::parsePrefix("SHOW INDEXES FROM `#__nextend2_section_storage` WHERE Key_name = 'application'"));
if ($hasIndex) {
$this->query("ALTER TABLE `#__nextend2_section_storage` DROP INDEX `application`");
}
$hasIndex = Database::queryRow(Database::parsePrefix("SHOW INDEXES FROM `#__nextend2_section_storage` WHERE Key_name = 'application_2'"));
if ($hasIndex) {
$this->query("ALTER TABLE `#__nextend2_section_storage` DROP INDEX `application_2`");
}
$this->query("ALTER TABLE `#__nextend2_section_storage` CHANGE `section` `section` VARCHAR( 128 ) NOT NULL");
$this->query("ALTER TABLE `#__nextend2_section_storage` CHANGE `referencekey` `referencekey` VARCHAR( 128 ) NOT NULL");
$this->query("ALTER TABLE `#__nextend2_section_storage` ADD INDEX `application` (`application`, `section`(50), `referencekey`(50))");
$this->query("ALTER TABLE `#__nextend2_section_storage` ADD INDEX `application_2` (`application`, `section`(50))");
self::fixIndex('#__nextend2_section_storage', 'system');
self::fixIndex('#__nextend2_section_storage', 'editable');
if (!$this->hasColumn('#__nextend2_smartslider3_sliders', 'thumbnail')) {
$this->query("ALTER TABLE `#__nextend2_smartslider3_sliders` ADD `thumbnail` VARCHAR( 255 ) NOT NULL");
}
if (!$this->hasColumn('#__nextend2_smartslider3_sliders', 'ordering')) {
$this->query("ALTER TABLE `#__nextend2_smartslider3_sliders` ADD `ordering` INT NOT NULL DEFAULT '0'");
}
if (!$this->hasColumn('#__nextend2_smartslider3_sliders', 'alias')) {
$this->query("ALTER TABLE `#__nextend2_smartslider3_sliders` ADD `alias` VARCHAR( 255 ) NULL DEFAULT NULL");
}
if (!$this->hasColumn('#__nextend2_smartslider3_sliders', 'status')) {
$this->query("ALTER TABLE `#__nextend2_smartslider3_sliders` ADD `status` VARCHAR(50) NOT NULL DEFAULT 'published', ADD INDEX `status` (`status`)");
}
$this->query("ALTER TABLE `#__nextend2_smartslider3_sliders` CHANGE `title` `title` VARCHAR( 200 ) NOT NULL");
self::fixIndex('#__nextend2_smartslider3_sliders', 'status');
self::fixIndex('#__nextend2_smartslider3_sliders', 'time');
self::fixIndex('#__nextend2_smartslider3_sliders_xref', 'ordering');
$this->query("ALTER TABLE `#__nextend2_smartslider3_slides` CHANGE `publish_up` `publish_up` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00'");
$this->query("ALTER TABLE `#__nextend2_smartslider3_slides` CHANGE `publish_down` `publish_down` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00'");
/**
* Fix automated publish down dates
*
* @todo Remove this in 2021
*/
$this->query("UPDATE `#__nextend2_smartslider3_slides` SET `publish_down` = '1970-01-01 00:00:00' WHERE `publish_down` > '2023-04-02 00:00:00'");
$this->query("DELETE FROM `#__nextend2_section_storage` WHERE `application` LIKE 'smartslider' AND `section` LIKE 'sliderChanged'");
self::fixIndex('#__nextend2_smartslider3_slides', 'published');
self::fixIndex('#__nextend2_smartslider3_slides', 'publish_up');
self::fixIndex('#__nextend2_smartslider3_slides', 'publish_down');
self::fixIndex('#__nextend2_smartslider3_slides', 'generator_id');
$hasIndex = Database::queryRow(Database::parsePrefix("SHOW INDEXES FROM `#__nextend2_smartslider3_slides` WHERE Key_name = 'thumbnail'"));
if ($hasIndex) {
$this->query("ALTER TABLE `#__nextend2_smartslider3_slides` DROP INDEX `thumbnail`");
}
$this->query("ALTER TABLE `#__nextend2_smartslider3_slides` ADD INDEX `thumbnail` (`thumbnail`(100))");
self::fixIndex('#__nextend2_smartslider3_slides', 'ordering');
self::fixIndex('#__nextend2_smartslider3_slides', 'slider');
if (Notification::hasErrors()) {
Notification::displayPlainErrors();
exit;
}
}
private function installTable($tableName, $structure) {
$query = 'CREATE TABLE IF NOT EXISTS `' . Database::getPrefix() . $tableName . '` ';
$query .= $structure;
$query .= ' ' . Database::getCharsetCollate();
$this->query($query);
}
private function query($query) {
Database::query(Database::parsePrefix($query));
}
private function hasColumn($table, $col) {
return !!Database::queryRow(Database::parsePrefix("SHOW COLUMNS FROM `" . $table . "` LIKE '" . $col . "'"));
}
public static function repair() {
self::fixPrimaryKey('#__nextend2_section_storage', 'id', true);
self::fixPrimaryKey('#__nextend2_image_storage', 'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_generators', 'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_sliders', 'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_slides', 'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_sliders_xref', array(
'slider_id',
'group_id'
));
}
public function reindexOrders() {
$query = "SELECT
sliders.*
FROM
`#__nextend2_smartslider3_sliders` AS sliders
LEFT JOIN `#__nextend2_smartslider3_sliders_xref` AS xref
ON
xref.slider_id = sliders.id
WHERE
(
xref.group_id IS NULL OR xref.group_id = 0
)
ORDER BY ordering";
$sliders = Database::queryAll(Database::parsePrefix($query));
foreach ($sliders as $idx => $slider) {
$this->query("UPDATE `#__nextend2_smartslider3_sliders` SET `ordering` = '" . $idx . "' WHERE `id` = " . $slider['id'] . " ");
}
}
/**
* @param string $tableName
* @param array|string $colNames
* @param bool $autoIncrement
*/
private static function fixPrimaryKey($tableName, $colNames, $autoIncrement = false) {
if (!is_array($colNames)) {
$colNames = array($colNames);
}
$tableName = Database::parsePrefix($tableName);
Database::query('DELETE FROM ' . $tableName . ' WHERE ' . $colNames[0] . ' = 0;');
$hasIndex = Database::queryRow("SHOW INDEXES FROM " . $tableName . " WHERE Key_name = 'PRIMARY'");
if (!$hasIndex) {
Database::query('ALTER TABLE ' . $tableName . ' ADD PRIMARY KEY(' . implode(', ', $colNames) . ');');
}
if (count($colNames) == 0 && $autoIncrement) {
Database::query('ALTER TABLE ' . $tableName . ' MODIFY `' . $colNames . '` INT NOT NULL AUTO_INCREMENT;');
}
}
private static function fixIndex($tableName, $colName) {
$tableName = Database::parsePrefix($tableName);
$hasIndex = Database::queryRow("SHOW INDEXES FROM " . $tableName . " WHERE Key_name = '" . $colName . "'");
if (!$hasIndex) {
Database::query("ALTER TABLE " . $tableName . " ADD INDEX `" . $colName . "` (`" . $colName . "`)");
}
}
}