X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=scripts%2Fupgrade.php;h=c221a495af1cc04489643ce24bb3ce8a10bc1cd8;hb=d4bdfc2aa27a592427632050807a0d583b595d96;hp=adce2555efabb84c6fcb37f01175089951461c3a;hpb=d59eb5e184591953ace103522b2db4a00ecd7777;p=quix0rs-gnu-social.git diff --git a/scripts/upgrade.php b/scripts/upgrade.php index adce2555ef..c221a495af 100644 --- a/scripts/upgrade.php +++ b/scripts/upgrade.php @@ -34,6 +34,8 @@ require_once INSTALLDIR.'/scripts/commandline.inc'; function main() { if (Event::handle('StartUpgrade')) { + fixupConversationURIs(); + updateSchemaCore(); updateSchemaPlugins(); @@ -44,12 +46,13 @@ function main() initConversation(); fixupGroupURI(); fixupFileGeometry(); + deleteLocalFileThumbnailsWithoutFilename(); + deleteMissingLocalFileThumbnails(); initGroupProfileId(); initLocalGroup(); initNoticeReshare(); - initFaveURI(); initSubscriptionURI(); initGroupMemberURI(); @@ -198,6 +201,29 @@ function initConversation() printfnq("DONE.\n"); } +function fixupConversationURIs() +{ + printfnq("Ensuring all conversations have a URI..."); + + $conv = new Conversation(); + $conv->whereAdd('uri IS NULL'); + + if ($conv->find()) { + $rounds = 0; + while ($conv->fetch()) { + $uri = common_local_url('conversation', array('id' => $conv->id)); + $sql = sprintf('UPDATE conversation SET uri="%1$s" WHERE id="%2$d";', + $conv->escape($uri), $conv->id); + $conv->query($sql); + if (($conv->N-++$rounds) % 500 == 0) { + printfnq(sprintf(' %d items left...', $conv->N-$rounds)); + } + } + } + + printfnq("DONE.\n"); +} + function initGroupProfileId() { printfnq("Ensuring all User_group entries have a Profile and profile_id..."); @@ -290,35 +316,6 @@ function initNoticeReshare() printfnq("DONE.\n"); } -function initFaveURI() -{ - printfnq("Ensuring all faves have a URI..."); - - $fave = new Fave(); - $fave->whereAdd('uri IS NULL'); - - if ($fave->find()) { - while ($fave->fetch()) { - try { - $fave->decache(); - $fave->query(sprintf('update fave '. - 'set uri = "%s", '. - ' modified = "%s" '. - 'where user_id = %d '. - 'and notice_id = %d', - Fave::newURI($fave->user_id, $fave->notice_id, $fave->modified), - common_sql_date(strtotime($fave->modified)), - $fave->user_id, - $fave->notice_id)); - } catch (Exception $e) { - common_log(LOG_ERR, "Error updated fave URI: " . $e->getMessage()); - } - } - } - - printfnq("DONE.\n"); -} - function initSubscriptionURI() { printfnq("Ensuring all subscriptions have a URI..."); @@ -428,16 +425,74 @@ function fixupFileGeometry() if ($file->find()) { while ($file->fetch()) { - // Add support for video sizes too + // Set file geometrical properties if available try { - $image = new ImageFile($file->id, $file->getPath()); - } catch (UnsupportedMediaException $e) { + $image = ImageFile::fromFileObject($file); + } catch (ServerException $e) { + // We couldn't make out an image from the file. continue; } $orig = clone($file); $file->width = $image->width; $file->height = $image->height; $file->update($orig); + + // FIXME: Do this more automagically inside ImageFile or so. + if ($image->getPath() != $file->getPath()) { + $image->unlink(); + } + unset($image); + } + } + + printfnq("DONE.\n"); +} + +/* + * File_thumbnail objects for local Files store their own filenames in the database. + */ +function deleteLocalFileThumbnailsWithoutFilename() +{ + printfnq("Removing all local File_thumbnail entries without filename property..."); + + $file = new File(); + $file->whereAdd('filename IS NOT NULL'); // local files + + if ($file->find()) { + // Looping through local File entries + while ($file->fetch()) { + $thumbs = new File_thumbnail(); + $thumbs->file_id = $file->id; + $thumbs->whereAdd('filename IS NULL'); + // Checking if there were any File_thumbnail entries without filename + if (!$thumbs->find()) { + continue; + } + // deleting incomplete entry to allow regeneration + while ($thumbs->fetch()) { + $thumbs->delete(); + } + } + } + + printfnq("DONE.\n"); +} + +/* + * Delete File_thumbnail entries where the referenced file does not exist. + */ +function deleteMissingLocalFileThumbnails() +{ + printfnq("Removing all local File_thumbnail entries without existing files..."); + + $thumbs = new File_thumbnail(); + $thumbs->whereAdd('filename IS NOT NULL'); // only fill in names where they're missing + // Checking if there were any File_thumbnail entries without filename + if ($thumbs->find()) { + while ($thumbs->fetch()) { + if (!file_exists(File_thumbnail::path($thumbs->filename))) { + $thumbs->delete(); + } } }