]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Add support (and upgrade path) for group profiles
authorMikael Nordfeldth <mmn@hethane.se>
Tue, 15 Oct 2013 09:12:50 +0000 (11:12 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Tue, 15 Oct 2013 09:12:50 +0000 (11:12 +0200)
classes/User_group.php
scripts/upgrade.php

index 3842826865e99c1cb9db4f2b961c3b5dd1eab483..1d15b78841d804034fb413d4e3e9772c03e215e2 100644 (file)
@@ -38,6 +38,7 @@ class User_group extends Managed_DataObject
         return array(
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'),
+                'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'),
 
                 'nickname' => array('type' => 'varchar', 'length' => 64, 'description' => 'nickname for addressing'),
                 'fullname' => array('type' => 'varchar', 'length' => 255, 'description' => 'display name'),
@@ -62,8 +63,12 @@ class User_group extends Managed_DataObject
             'unique keys' => array(
                 'user_group_uri_key' => array('uri'),
             ),
+            'foreign keys' => array(
+                'user_group_id_fkey' => array('profile', array('profile_id' => 'id')),
+            ),
             'indexes' => array(
                 'user_group_nickname_idx' => array('nickname'),
+                'user_group_profile_id_idx' => array('profile_id'), //make this unique in future
             ),
         );
     }
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...");