| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | #!/usr/bin/env php
 | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Laconica - a distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-06-20 16:12:55 -07:00
										 |  |  |  * Copyright (C) 2008, 2009, Control Yourself, Inc. | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |  * along with this program.     If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-07 18:29:10 -07:00
										 |  |  | // Abort if called from a web server
 | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     print "This script must be run from the command line\n"; | 
					
						
							|  |  |  |     exit(); | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); | 
					
						
							|  |  |  | define('LACONICA', true); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-08 04:46:00 +00:00
										 |  |  | // Uncomment this to get useful console output
 | 
					
						
							|  |  |  | //define('SCRIPT_DEBUG', true);
 | 
					
						
							| 
									
										
										
										
											2009-04-07 18:29:10 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | require_once(INSTALLDIR . '/lib/common.php'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 18:22:14 -07:00
										 |  |  | // Make a lockfile
 | 
					
						
							|  |  |  | $lockfilename = lockFilename(); | 
					
						
							|  |  |  | if (!($lockfile = @fopen($lockfilename, "w"))) { | 
					
						
							|  |  |  |     print "Already running... exiting.\n"; | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Obtain an exlcusive lock on file (will fail if script is already going)
 | 
					
						
							|  |  |  | if (!@flock( $lockfile, LOCK_EX | LOCK_NB, &$wouldblock) || $wouldblock) { | 
					
						
							|  |  |  |     // Script already running - abort
 | 
					
						
							|  |  |  |     @fclose($lockfile); | 
					
						
							|  |  |  |     print "Already running... exiting.\n"; | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | $flink = new Foreign_link(); | 
					
						
							|  |  |  | $flink->service = 1; // Twitter
 | 
					
						
							| 
									
										
										
										
											2009-05-07 18:22:14 -07:00
										 |  |  | $flink->orderBy('last_friendsync'); | 
					
						
							|  |  |  | $flink->limit(25);  // sync this many users during this run
 | 
					
						
							| 
									
										
										
										
											2009-04-07 18:29:10 -07:00
										 |  |  | $cnt = $flink->find(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print "Updating Twitter friends subscriptions for $cnt users.\n"; | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | while ($flink->fetch()) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     if (($flink->friendsync & FOREIGN_FRIEND_RECV) == FOREIGN_FRIEND_RECV) { | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $user = User::staticGet($flink->user_id); | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-07 18:29:10 -07:00
										 |  |  |         if (empty($user)) { | 
					
						
							|  |  |  |             common_log(LOG_WARNING, "Unmatched user for ID " . $flink->user_id); | 
					
						
							|  |  |  |             print "Unmatched user for ID $flink->user_id\n"; | 
					
						
							|  |  |  |             continue; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         print "Updating Twitter friends for $user->nickname (Laconica ID: $user->id)... "; | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $fuser = $flink->getForeignUser(); | 
					
						
							| 
									
										
										
										
											2008-11-19 15:45:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-07 18:29:10 -07:00
										 |  |  |         if (empty($fuser)) { | 
					
						
							|  |  |  |             common_log(LOG_WARNING, "Unmatched user for ID " . $flink->user_id); | 
					
						
							|  |  |  |             print "Unmatched user for ID $flink->user_id\n"; | 
					
						
							|  |  |  |             continue; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-11-19 15:45:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 18:22:14 -07:00
										 |  |  |         save_twitter_friends($user, $fuser->id, $fuser->nickname, $flink->credentials); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $flink->last_friendsync = common_sql_now(); | 
					
						
							|  |  |  |         $flink->update(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-08 04:46:00 +00:00
										 |  |  |         if (defined('SCRIPT_DEBUG')) { | 
					
						
							| 
									
										
										
										
											2009-04-07 18:29:10 -07:00
										 |  |  |             print "\nDONE\n"; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             print "DONE\n"; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 18:22:14 -07:00
										 |  |  | function lockFilename() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     $piddir = common_config('daemon', 'piddir'); | 
					
						
							|  |  |  |     if (!$piddir) { | 
					
						
							|  |  |  |         $piddir = '/var/run'; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return $piddir . '/synctwitterfriends.lock'; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Cleanup
 | 
					
						
							|  |  |  | fclose($lockfile); | 
					
						
							|  |  |  | unlink($lockfilename); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-18 20:11:28 -05:00
										 |  |  | exit(0); |