forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | #!/usr/bin/env php
 | ||
|  | <?php | ||
|  | /* | ||
|  |  * StatusNet - a distributed open-source microblogging tool | ||
|  |  * Copyright (C) 2010 StatusNet, Inc. | ||
|  |  * | ||
|  |  * This program is free software: you can redistribute it and/or modify | ||
|  |  * it under the terms of the GNU Affero General Public License as published by | ||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||
|  |  * (at your option) any later version. | ||
|  |  * | ||
|  |  * This program is distributed in the hope that it will be useful, | ||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||
|  |  * GNU Affero General Public License for more details. | ||
|  |  * | ||
|  |  * You should have received a copy of the GNU Affero General Public License | ||
|  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||
|  |  */ | ||
|  | 
 | ||
|  | define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); | ||
|  | 
 | ||
|  | $longoptions = array('dry-run', 'start=', 'end='); | ||
|  | 
 | ||
|  | $helptext = <<<END_OF_HELP | ||
|  | fixup_blocks.php [options] | ||
|  | Finds profile blocks where the unsubscription didn't complete, | ||
|  | and removes the offending subscriptions. | ||
|  | 
 | ||
|  |      --dry-run  look but don't touch | ||
|  | 
 | ||
|  | END_OF_HELP; | ||
|  | 
 | ||
|  | require_once INSTALLDIR.'/scripts/commandline.inc'; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Fetch subscriptions that should be disallowed by a block | ||
|  |  */ | ||
|  | function get_blocked_subs() | ||
|  | { | ||
|  |     $query =     "SELECT subscription.* " . | ||
|  |                    "FROM subscription " . | ||
|  |              "INNER JOIN profile_block " . | ||
|  |                      "ON blocker=subscribed " . | ||
|  |                     "AND blocked=subscriber"; | ||
|  |     $subscription = new Subscription(); | ||
|  |     $subscription->query($query); | ||
|  |     return $subscription; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | $dry = have_option('dry-run'); | ||
|  | $sub = get_blocked_subs(); | ||
|  | $count = $sub->N; | ||
|  | while ($sub->fetch()) { | ||
|  |     $subber = Profile::staticGet('id', $sub->subscriber); | ||
|  |     $subbed = Profile::staticGet('id', $sub->subscribed); | ||
|  |     if (!$subber || !$subbed) { | ||
|  |         print "Bogus entry! $sub->subscriber subbed to $sub->subscribed\n"; | ||
|  |         continue; | ||
|  |     } | ||
|  |     print "$subber->nickname ($subber->id) blocked but subbed to $subbed->nickname ($subbed->id)"; | ||
|  |     if ($dry) { | ||
|  |         print ": skipping; dry run\n"; | ||
|  |     } else { | ||
|  |         Subscription::cancel($subber, $subbed); | ||
|  |         print ": removed\n"; | ||
|  |     } | ||
|  | } | ||
|  | print "\n"; | ||
|  | 
 | ||
|  | if ($dry && $count > 0) { | ||
|  |     print "Be sure to run without --dry-run to remove the bad entries!\n"; | ||
|  | } else { | ||
|  |     print "done.\n"; | ||
|  | } |