]> git.mxchange.org Git - friendica.git/commitdiff
Ensure that the initial values are set
authorMichael <heluecht@pirati.ca>
Fri, 15 May 2020 17:49:07 +0000 (17:49 +0000)
committerMichael <heluecht@pirati.ca>
Fri, 15 May 2020 17:49:07 +0000 (17:49 +0000)
src/Database/DBA.php
src/Database/DBStructure.php
src/Database/Database.php

index 9825d06c683a7791fee2a9ff95e9d7ff43f0b3e2..f35428718d8fe9c6d9d02e22ad590dd91c89b036 100644 (file)
@@ -741,6 +741,17 @@ class DBA
                return DI::dba()->processlist();
        }
 
+       /**
+        * Test if the given table exists
+        *
+        * @param string $table
+        * @return bool
+        */
+       public static function tableExists(string $table)
+       {
+               return DI::dba()->tableExists($table);
+       }
+
        /**
         * Fetch a database variable
         *
index 7c82b518b8f199df181d830dcab013d4a57ad001..67685de3dc9e736efa55cb7161943c949ce2396f 100644 (file)
@@ -294,6 +294,10 @@ class DBStructure
                        DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: Database update', DateTimeFormat::utcNow() . ' ' . date('e')));
                }
 
+               // ensure that all initial values exist. This test has to be done prior and after the structure check.
+               // Prior is needed if the specific tables already exists - after is needed when they had been created.
+               self::checkInitialValues();
+
                $errors = '';
 
                Logger::log('updating structure', Logger::DEBUG);
@@ -640,6 +644,8 @@ class DBStructure
 
                View::create(false, $action);
 
+               self::checkInitialValues();
+
                if ($action && !$install) {
                        DI::config()->set('system', 'maintenance', 0);
                        DI::config()->set('system', 'maintenance_reason', '');
@@ -976,4 +982,31 @@ class DBStructure
                $stmtColumns = DBA::p("SHOW COLUMNS FROM `" . $table . "`");
                return DBA::toArray($stmtColumns);
        }
+
+       private static function checkInitialValues()
+       {
+               if (DBA::tableExists('contact') && !DBA::exists('contact', ['id' => 0])) {
+                       DBA::insert('contact', ['nurl' => '']);
+                       $lastid = DBA::lastInsertId();
+                       if ($lastid != 0) {
+                               DBA::update('contact', ['id' => 0], ['id' => $lastid]);
+                       }               
+               }
+
+               if (DBA::tableExists('permissionset') && !DBA::exists('permissionset', ['id' => 0])) {
+                       DBA::insert('permissionset', ['allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '']);       
+                       $lastid = DBA::lastInsertId();
+                       if ($lastid != 0) {
+                               DBA::update('permissionset', ['id' => 0], ['id' => $lastid]);
+                       }
+               }
+       
+               if (DBA::tableExists('tag') && !DBA::exists('tag', ['id' => 0])) {
+                       DBA::insert('tag', ['name' => '']);
+                       $lastid = DBA::lastInsertId();
+                       if ($lastid != 0) {
+                               DBA::update('tag', ['id' => 0], ['id' => $lastid]);
+                       }
+               }       
+       }
 }
index 7adb88ffa87aec4c6d1cff7025b9b28ffc0a9596..97840141a246426e063db126f5c5b166ff6bf52d 100644 (file)
@@ -1660,6 +1660,18 @@ class Database
                return (["list" => $statelist, "amount" => $processes]);
        }
 
+       /**
+        * Test if the given table exists
+        *
+        * @param string $table
+        * @return bool
+        */
+       public function tableExists(string $table)
+       {
+               return $this->exists(['information_schema' => 'tables'],
+                       ['table_name' => $table, 'table_schema' => $this->databaseName()]);
+       }
+
        /**
         * Fetch a database variable
         *