From eb356a5e6e44713dd2851a5bd313bdb3bd4ddc0e Mon Sep 17 00:00:00 2001 From: Jean-Christian Denis Date: Tue, 13 Dec 2022 00:44:10 +0100 Subject: [PATCH] add upgrade process --- _prepend.php | 1 + inc/class.epcupgrade.php | 138 ++++++++++++++++++++++++++++++--------- 2 files changed, 107 insertions(+), 32 deletions(-) diff --git a/_prepend.php b/_prepend.php index 34ac926..e6cfca4 100644 --- a/_prepend.php +++ b/_prepend.php @@ -33,6 +33,7 @@ Clearbricks::lib()->autoload([ 'enhancePostContent' => $d . 'class.enhancepostcontent.php', 'epcFilter' => $d . 'class.epcfilter.php', 'epcRecords' => $d . 'class.epcrecords.php', + 'epcUpgrade' => $d . 'class.epcupgrade.php', 'adminEpcList' => $d . 'class.adminepclist.php', ]); diff --git a/inc/class.epcupgrade.php b/inc/class.epcupgrade.php index d1da930..8afda8c 100644 --- a/inc/class.epcupgrade.php +++ b/inc/class.epcupgrade.php @@ -10,45 +10,119 @@ * @copyright Jean-Christian Denis * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html */ -if (!isset($old_version)) { +if (!defined('DC_CONTEXT_ADMIN')) { return null; } -# Move old filters lists from settings to database -if ($old_version && version_compare('0.6.6', $old_version, '>=')) { - $f = dcCore::app()->con->select('SELECT * FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . " WHERE setting_ns='enhancePostContent' AND blog_id IS NOT NULL "); - - while ($f->fetch()) { - if (preg_match('#enhancePostContent_(.*?)List#', $f->setting_id, $m)) { - $curlist = @unserialize($f->setting_value); - if (is_array($curlist)) { - foreach ($curlist as $k => $v) { - $cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); - dcCore::app()->con->writeLock(dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); - - $cur->epc_id = dcCore::app()->con->select('SELECT MAX(epc_id) FROM ' . dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME . ' ')->f(0) + 1; - $cur->blog_id = $f->blog_id; - $cur->epc_filter = strtolower($m[1]); - $cur->epc_key = $k; - $cur->epc_value = $v; - - $cur->insert(); - dcCore::app()->con->unlock(); - } - } - dcCore::app()->con->execute('DELETE FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . " WHERE setting_id='" . $f->setting_id . "' AND setting_ns='enhancePostContent' AND blog_id='" . $f->blog_id . "' "); +class epcUpgrade +{ + public static function preUpgrade() + { + $current = dcCore::app()->getVersion(basename(dirname('../' . __DIR__))); + if ($current && version_compare($current, '2022.12.10', '<')) { + self::preUpgrade20221210(); } } -# Move old filter name to filter id -} elseif ($old_version && version_compare('2021.10.05', $old_version, '>=')) { - $rs = dcCore::app()->con->select('SELECT epc_id, epc_filter FROM ' . dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); - while ($rs->fetch()) { - $cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); + public static function postUpgrade() + { + $current = dcCore::app()->getVersion(basename(dirname('../' . __DIR__))); + if ($current && version_compare($current, '0.6.6', '<')) { + self::postUpgrade00060607(); + } - $cur->epc_filter = strtolower($rs->epc_filter); + if ($current && version_compare($current, '2021.10.06', '<')) { + self::postUpgrade20211006(); + } + } - $cur->update('WHERE epc_id = ' . $rs->epc_id . ' '); - dcCore::app()->blog->triggerBlog(); + private static function preUpgrade20221210() + { + // Rename settings + $setting_ids = [ + 'enhancePostContent_active' => 'active', + 'enhancePostContent_list_sortby' => 'list_sortby', + 'enhancePostContent_list_order' => 'list_order', + 'enhancePostContent_list_nb' => 'list_nb', + 'enhancePostContent_allowedtplvalues' => 'allowedtplvalues', + 'enhancePostContent_allowedpubpages' => 'allowedpubpages', + ]; + + foreach ($setting_ids as $old => $new) { + $cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME); + $cur->setting_id = $new; + $cur->setting_ns = basename(dirname('../' . __DIR__)); + $cur->update("WHERE setting_id = '" . $old . "' and setting_ns = 'enhancePostContent' "); + } + + // use json rather than serialise for settings array + $setting_values = [ + 'allowedtplvalues' => json_encode(enhancePostContent::defaultAllowedTplValues()), + 'allowedpubpages' =>json_encode(enhancePostContent::defaultAllowedPubPages()), + ]; + + $record = dcCore::app()->con->select( + 'SELECT * FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . ' ' . + "WHERE setting_ns = '" . dcCore::app()->con->escape(basename(dirname('../' . __DIR__))) . "' " + ); + + while ($record->fetch()) { + foreach ($setting_values as $key => $default) { + try { + $value = @unserialize($record->__get($key)); + } catch(Exception) { + $value = $default; + } + + $cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME); + $cur->setting_value = json_encode(!is_array($value) ? $default : $value); + $cur->update( + "WHERE setting_id = '" . $key . "' and setting_ns = '" . dcCore::app()->con->escape($record->setting_ns) . "' " . + 'AND blog_id ' . (null === $record->blog_id ? 'IS NULL ' : ("= '" . dcCore::app()->con->escape($record->blog_id) . "' ")) + ); + } + } + } + + private static function postUpgrade00060607() + { + # Move old filters lists from settings to database + $f = dcCore::app()->con->select('SELECT * FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . " WHERE setting_ns='enhancePostContent' AND blog_id IS NOT NULL "); + + while ($f->fetch()) { + if (preg_match('#enhancePostContent_(.*?)List#', $f->setting_id, $m)) { + $curlist = @unserialize($f->setting_value); + if (is_array($curlist)) { + foreach ($curlist as $k => $v) { + $cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); + dcCore::app()->con->writeLock(dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); + + $cur->epc_id = dcCore::app()->con->select('SELECT MAX(epc_id) FROM ' . dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME . ' ')->f(0) + 1; + $cur->blog_id = $f->blog_id; + $cur->epc_filter = strtolower($m[1]); + $cur->epc_key = $k; + $cur->epc_value = $v; + + $cur->insert(); + dcCore::app()->con->unlock(); + } + } + dcCore::app()->con->execute('DELETE FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . " WHERE setting_id='" . $f->setting_id . "' AND setting_ns='enhancePostContent' AND blog_id='" . $f->blog_id . "' "); + } + } + } + + private static function postUpgrade20211006() + { + # Move old filter name to filter id + $rs = dcCore::app()->con->select('SELECT epc_id, epc_filter FROM ' . dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); + while ($rs->fetch()) { + $cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . initEnhancePostContent::TABLE_NAME); + + $cur->epc_filter = strtolower($rs->epc_filter); + + $cur->update('WHERE epc_id = ' . $rs->epc_id . ' '); + dcCore::app()->blog->triggerBlog(); + } } }