]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - scripts/upgrade.php
Add support (and upgrade path) for group profiles
[quix0rs-gnu-social.git] / scripts / upgrade.php
index 1a87b148b3354482c5b9abefd382bd92ec4e79c4..a6c7ec40ff4b3015d26557a13a9d6243b83d8294 100644 (file)
@@ -45,6 +45,7 @@ function main()
         initInbox();
         fixupGroupURI();
 
+        initGroupProfileId();
         initLocalGroup();
         initNoticeReshare();
     
@@ -241,6 +242,45 @@ function initInbox()
     printfnq("DONE.\n");
 }
 
+function initGroupProfileId()
+{
+    printfnq("Ensuring all User_group entries have a Profile and profile_id...");
+
+    $group = new User_group();
+    $group->whereAdd('NOT EXISTS (SELECT id FROM profile WHERE id = user_group.profile_id)');
+    $group->find();
+
+    while ($group->fetch()) {
+        try {
+            // We must create a new, incrementally assigned profile_id
+            $profile = new Profile();
+            $profile->nickname   = $group->nickname;
+            $profile->fullname   = $group->fullname;
+            $profile->profileurl = $group->mainpage;
+            $profile->homepage   = $group->homepage;
+            $profile->bio        = $group->description;
+            $profile->location   = $group->location;
+            $profile->created    = $group->created;
+            $profile->modified   = $group->modified;
+
+            $profile->query('BEGIN');
+            $id = $profile->insert();
+            if (empty($id)) {
+                $profile->query('ROLLBACK');
+                throw new Exception('Profile insertion failed, profileurl: '.$profile->profileurl);
+            }
+            $group->query("UPDATE user_group SET profile_id={$id} WHERE id={$group->id}");
+            $profile->query('COMMIT');
+
+            $profile->free();
+        } catch (Exception $e) {
+            printfv("Error initializing Profile for group {$group->nickname}:" . $e->getMessage());
+        }
+    }
+
+    printfnq("DONE.\n");
+}
+
 function initLocalGroup()
 {
     printfnq("Ensuring all local user groups have a local_group...");