]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - scripts/upgrade.php
Dynamically generate thumbnails (see full text)
[quix0rs-gnu-social.git] / scripts / upgrade.php
index 7d81c1983504f1fd8797a789901b118e5a76e31c..adce2555efabb84c6fcb37f01175089951461c3a 100644 (file)
@@ -42,9 +42,10 @@ function main()
         fixupNoticeRendered();
         fixupNoticeConversation();
         initConversation();
-        initInbox();
         fixupGroupURI();
+        fixupFileGeometry();
 
+        initGroupProfileId();
         initLocalGroup();
         initNoticeReshare();
     
@@ -124,7 +125,7 @@ function fixupNoticeConversation()
             if (empty($notice->reply_to)) {
                 $notice->conversation = $notice->id;
             } else {
-                $reply = Notice::staticGet('id', $notice->reply_to);
+                $reply = Notice::getKV('id', $notice->reply_to);
 
                 if (empty($reply)) {
                     $notice->conversation = $notice->id;
@@ -159,7 +160,7 @@ function fixupGroupURI()
 
     if ($group->find()) {
         while ($group->fetch()) {
-            $orig = User_group::staticGet('id', $group->id);
+            $orig = User_group::getKV('id', $group->id);
             $group->uri = $group->getUri();
             $group->update($orig);
         }
@@ -197,44 +198,39 @@ function initConversation()
     printfnq("DONE.\n");
 }
 
-function initInbox()
+function initGroupProfileId()
 {
-    printfnq("Ensuring all users have an inbox...");
+    printfnq("Ensuring all User_group entries have a Profile and profile_id...");
 
-    $user = new User();
-    $user->whereAdd('not exists (select user_id from inbox where user_id = user.id)');
-    $user->orderBy('id');
-
-    if ($user->find()) {
-
-        while ($user->fetch()) {
-
-            try {
-                $notice = new Notice();
-
-                $notice->selectAdd();
-                $notice->selectAdd('id');
-                $notice->joinAdd(array('profile_id', 'subscription:subscribed'));
-                $notice->whereAdd('subscription.subscriber = ' . $user->id);
-                $notice->whereAdd('notice.created >= subscription.created');
-
-                $ids = array();
-
-                if ($notice->find()) {
-                    while ($notice->fetch()) {
-                        $ids[] = $notice->id;
-                    }
-                }
-
-                $notice = null;
+    $group = new User_group();
+    $group->whereAdd('NOT EXISTS (SELECT id FROM profile WHERE id = user_group.profile_id)');
+    $group->find();
 
-                $inbox = new Inbox();
-                $inbox->user_id = $user->id;
-                $inbox->pack($ids);
-                $inbox->insert();
-            } catch (Exception $e) {
-                printv("Error initializing inbox: " . $e->getMessage());
+    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());
         }
     }
 
@@ -281,7 +277,7 @@ function initNoticeReshare()
     if ($notice->find()) {
         while ($notice->fetch()) {
             try {
-                $orig = Notice::staticGet('id', $notice->id);
+                $orig = Notice::getKV('id', $notice->id);
                 $notice->verb = ActivityVerb::SHARE;
                 $notice->object_type = ActivityObject::ACTIVITY;
                 $notice->update($orig);
@@ -419,4 +415,33 @@ function initProfileLists()
     printfnq("DONE.\n");
 }
 
+/*
+ * Added as we now store interpretd width and height in File table.
+ */
+function fixupFileGeometry()
+{
+    printfnq("Ensuring width and height is set for supported local File objects...");
+
+    $file = new File();
+    $file->whereAdd('filename IS NOT NULL');    // local files
+    $file->whereAdd('width IS NULL OR width = 0');
+
+    if ($file->find()) {
+        while ($file->fetch()) {
+            // Add support for video sizes too
+            try {
+                $image = new ImageFile($file->id, $file->getPath());
+            } catch (UnsupportedMediaException $e) {
+                continue;
+            }
+            $orig = clone($file);
+            $file->width = $image->width;
+            $file->height = $image->height;
+            $file->update($orig);
+        }
+    }
+
+    printfnq("DONE.\n");
+}
+
 main();