You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pixelfed/app/Console/Commands/FixLikes.php

76 lines
1.8 KiB
PHTML

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\{Like, Status};
use DB;
class FixLikes extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'fix:likes';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Fix Like counts';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$chunk = 100;
Staging (#6264) * StatusPipeline defensive checks * HomeFeedPipeline defensive checks * DeletePipeline defensive checks * InboxPipeline defensive checks * MediaPipeline defensive checks * PushNotificationPipeline defensive checks * LikePipeline defensive checks * FollowPipeline defensive checks * ImageOptimizePipeline defensive checks * Misc pipelines defensive checks * Update CommentPipeline.php * Update FollowPushNotifyPipeline.php * Update LikePushNotifyPipeline.php * Update FollowPushNotifyPipeline.php * Update MentionPushNotifyPipeline.php * Update MoveSendUndoFollowPipeline.php * Update RemoteFollowPipeline.php * Update FollowPushNotifyPipeline.php * Update LikePushNotifyPipeline.php * Update MentionPushNotifyPipeline.php * Update Site/Config.php - config_cache only has 1 arg. No fallback. * Update Bouncer.php - Called 'count' on Laravel collection, but could have been retrieved as a query. 🪪 larastan.noUnnecessaryCollectionCall * Update Status.php - Missing use App\Models\Conversation; * Larastan: Update UndoSharePipeline.php (Undefined variable: $status) * Update ResilientMediaStorageService.php * Update ImageS3UploadPipeline.php * Larastan: Update Profile.php missing "use App\Avatar;" * Larastan: Update MediaStorageService.php * Larastan: Update MediaPathService.php * Update MediaPathService.php * Update MediaStorageService.php * Update ImageS3UploadPipeline.php * Larastan: Update AddUserDomainBlock.php ``` ------ ------------------------------------------------------------- Line Console/Commands/AddUserDomainBlock.php ------ ------------------------------------------------------------- 37 Variable $domain in empty() always exists and is not falsy. 🪪 empty.variable ------ ------------------------------------------------------------- ``` * Larastan: Update CatchUnoptimizedMedia.php ``` ------ ------------------------------------------------------------------------------------------------- Line Console/Commands/CatchUnoptimizedMedia.php ------ ------------------------------------------------------------------------------------------------- 31 Constructor of class App\Console\Commands\CatchUnoptimizedMedia has an unused parameter $media. 🪪 constructor.unusedParameter ------ ------------------------------------------------------------------------------------------------- ``` * Update DeleteUserDomainBlock.php * Update StatusHashtag.php * Update FixLikes.php * Update User.php * Update Installer.php * Update SeedFollows.php * Update DiscoverCategory.php * Update FollowRequest.php * Update Follower.php * Update AccountController.php * Update CustomFilterKeyword.php * Update FederationController.php * Update Inbox.php * Update HttpSignature.php --------- Co-authored-by: Your Name <you@example.com> Co-authored-by: Shlee <github@shl.ee>
11 months ago
$limit = Like::select('status_id')->groupBy('status_id')->count();
if($limit > 1000) {
if($this->confirm('We have found more than 1000 records to update, this may take a few moments. Are you sure you want to continue?') == false) {
$this->error('Cancelling command...');
return;
}
}
$bar = $this->output->createProgressBar($limit);
$this->line(' ');
$this->info(' Starting like count fix ...');
$this->line(' ');
$bar->start();
Like::selectRaw('count(id) as count, status_id')
->groupBy(['status_id','id'])
->chunk($chunk, function($likes) use($bar) {
foreach($likes as $like) {
$s = Status::find($like['status_id']);
if($s && $s->likes_count == 0) {
$s->likes_count = $like['count'];
$s->save();
}
$bar->advance();
}
});
$bar->finish();
$this->line(' ');
$this->line(' ');
}
}