diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/console.php | 2 | ||||
-rw-r--r-- | scripts/createsim.php | 15 | ||||
-rwxr-xr-x | scripts/deleteuser.php | 2 | ||||
-rwxr-xr-x | scripts/enjitqueuehandler.php | 121 | ||||
-rwxr-xr-x | scripts/getvaliddaemons.php | 11 | ||||
-rwxr-xr-x | scripts/handlequeued.php (renamed from scripts/pluginqueuehandler.php) | 54 | ||||
-rwxr-xr-x | scripts/inbox_users.php | 107 | ||||
-rw-r--r-- | scripts/initializeinbox.php | 94 | ||||
-rwxr-xr-x | scripts/jabberqueuehandler.php | 78 | ||||
-rwxr-xr-x | scripts/maildaemon.php | 263 | ||||
-rwxr-xr-x | scripts/ombqueuehandler.php | 87 | ||||
-rwxr-xr-x | scripts/pingqueuehandler.php | 69 | ||||
-rwxr-xr-x | scripts/publicqueuehandler.php | 76 | ||||
-rwxr-xr-x | scripts/queuedaemon.php | 265 | ||||
-rwxr-xr-x | scripts/smsqueuehandler.php | 73 | ||||
-rwxr-xr-x | scripts/stopdaemons.sh | 2 | ||||
-rw-r--r-- | scripts/triminboxes.php | 76 | ||||
-rwxr-xr-x | scripts/update_po_templates.php | 12 | ||||
-rwxr-xr-x | scripts/xmppconfirmhandler.php | 161 | ||||
-rwxr-xr-x | scripts/xmppdaemon.php | 2 |
20 files changed, 409 insertions, 1161 deletions
diff --git a/scripts/console.php b/scripts/console.php index 329caf472..8b62a3a96 100755 --- a/scripts/console.php +++ b/scripts/console.php @@ -128,6 +128,8 @@ function console_help() if (CONSOLE_INTERACTIVE) { print "StatusNet interactive PHP console... type ctrl+D or enter 'exit' to exit.\n"; $prompt = common_config('site', 'name') . '> '; +} else { + $prompt = ''; } while (!feof(STDIN)) { $line = read_input_line($prompt); diff --git a/scripts/createsim.php b/scripts/createsim.php index 1266a9700..882d74456 100644 --- a/scripts/createsim.php +++ b/scripts/createsim.php @@ -41,9 +41,12 @@ require_once INSTALLDIR.'/scripts/commandline.inc'; function newUser($i) { global $userprefix; - User::register(array('nickname' => sprintf('%s%d', $userprefix, $i), - 'password' => sprintf('password%d', $i), - 'fullname' => sprintf('Test User %d', $i))); + $user = User::register(array('nickname' => sprintf('%s%d', $userprefix, $i), + 'password' => sprintf('password%d', $i), + 'fullname' => sprintf('Test User %d', $i))); + if (!empty($user)) { + $user->free(); + } } function newNotice($i, $tagmax) @@ -73,6 +76,9 @@ function newNotice($i, $tagmax) } $notice = Notice::saveNew($user->id, $content, 'system'); + + $user->free(); + $notice->free(); } function newSub($i) @@ -106,6 +112,9 @@ function newSub($i) } subs_subscribe_to($from, $to); + + $from->free(); + $to->free(); } function main($usercount, $noticeavg, $subsavg, $tagmax) diff --git a/scripts/deleteuser.php b/scripts/deleteuser.php index 52389123c..5373c73ce 100755 --- a/scripts/deleteuser.php +++ b/scripts/deleteuser.php @@ -21,7 +21,7 @@ define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); $shortoptions = 'i::n::y'; -$longoptions = array('id::nickname::yes'); +$longoptions = array('id=', 'nickname=', 'yes'); $helptext = <<<END_OF_DELETEUSER_HELP deleteuser.php [options] diff --git a/scripts/enjitqueuehandler.php b/scripts/enjitqueuehandler.php deleted file mode 100755 index afcac539a..000000000 --- a/scripts/enjitqueuehandler.php +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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__) . '/..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_ENJIT_HELP -Daemon script for watching new notices and posting to enjit. - - -i --id Identity (default none) - -END_OF_ENJIT_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -require_once INSTALLDIR . '/lib/mail.php'; -require_once INSTALLDIR . '/lib/queuehandler.php'; - -set_error_handler('common_error_handler'); - -class EnjitQueueHandler extends QueueHandler -{ - function transport() - { - return 'enjit'; - } - - function start() - { - $this->log(LOG_INFO, "Starting EnjitQueueHandler"); - $this->log(LOG_INFO, "Broadcasting to ".common_config('enjit', 'apiurl')); - return true; - } - - function handle_notice($notice) - { - - $profile = Profile::staticGet($notice->profile_id); - - $this->log(LOG_INFO, "Posting Notice ".$notice->id." from ".$profile->nickname); - - if ( ! $notice->is_local ) { - $this->log(LOG_INFO, "Skipping remote notice"); - return "skipped"; - } - - # - # Build an Atom message from the notice - # - $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); - $msg = $profile->nickname . ': ' . $notice->content; - - $atom = "<entry xmlns='http://www.w3.org/2005/Atom'>\n"; - $atom .= "<apisource>".common_config('enjit','source')."</apisource>\n"; - $atom .= "<source>\n"; - $atom .= "<title>" . $profile->nickname . " - " . common_config('site', 'name') . "</title>\n"; - $atom .= "<link href='" . $profile->profileurl . "'/>\n"; - $atom .= "<link rel='self' type='application/rss+xml' href='" . common_local_url('userrss', array('nickname' => $profile->nickname)) . "'/>\n"; - $atom .= "<author><name>" . $profile->nickname . "</name></author>\n"; - $atom .= "<icon>" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "</icon>\n"; - $atom .= "</source>\n"; - $atom .= "<title>" . htmlspecialchars($msg) . "</title>\n"; - $atom .= "<summary>" . htmlspecialchars($msg) . "</summary>\n"; - $atom .= "<link rel='alternate' href='" . $noticeurl . "' />\n"; - $atom .= "<id>". $notice->uri . "</id>\n"; - $atom .= "<published>".common_date_w3dtf($notice->created)."</published>\n"; - $atom .= "<updated>".common_date_w3dtf($notice->modified)."</updated>\n"; - $atom .= "</entry>\n"; - - $url = common_config('enjit', 'apiurl') . "/submit/". common_config('enjit','apikey'); - $data = array( - 'msg' => $atom, - ); - - # - # POST the message to $config['enjit']['apiurl'] - # - $request = HTTPClient::start(); - $response = $request->post($url, null, $data); - - return $response->isOk(); - } - -} - -if (have_option('-i')) { - $id = get_option_value('-i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; -} - -$handler = new EnjitQueueHandler($id); - -if ($handler->start()) { - $handler->handle_queue(); -} - -$handler->finish(); diff --git a/scripts/getvaliddaemons.php b/scripts/getvaliddaemons.php index 99ad41b37..a332e06b5 100755 --- a/scripts/getvaliddaemons.php +++ b/scripts/getvaliddaemons.php @@ -37,19 +37,10 @@ require_once INSTALLDIR.'/scripts/commandline.inc'; $daemons = array(); -$daemons[] = INSTALLDIR.'/scripts/pluginqueuehandler.php'; -$daemons[] = INSTALLDIR.'/scripts/ombqueuehandler.php'; -$daemons[] = INSTALLDIR.'/scripts/pingqueuehandler.php'; +$daemons[] = INSTALLDIR.'/scripts/queuedaemon.php'; if(common_config('xmpp','enabled')) { $daemons[] = INSTALLDIR.'/scripts/xmppdaemon.php'; - $daemons[] = INSTALLDIR.'/scripts/jabberqueuehandler.php'; - $daemons[] = INSTALLDIR.'/scripts/publicqueuehandler.php'; - $daemons[] = INSTALLDIR.'/scripts/xmppconfirmhandler.php'; -} - -if (common_config('sms', 'enabled')) { - $daemons[] = INSTALLDIR.'/scripts/smsqueuehandler.php'; } if (Event::handle('GetValidDaemons', array(&$daemons))) { diff --git a/scripts/pluginqueuehandler.php b/scripts/handlequeued.php index fa39bdda6..9031437aa 100755 --- a/scripts/pluginqueuehandler.php +++ b/scripts/handlequeued.php @@ -20,45 +20,37 @@ define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); -$shortoptions = 'i::'; -$longoptions = array('id::'); +$helptext = <<<END_OF_QUEUE_HELP +USAGE: handlequeued.php <queue> <notice id> +Run a single queued notice through background processing +as if it were being run through the queue. -$helptext = <<<END_OF_OMB_HELP -Daemon script for letting plugins handle stuff at queue time - -i --id Identity (default none) - -END_OF_OMB_HELP; +END_OF_QUEUE_HELP; require_once INSTALLDIR.'/scripts/commandline.inc'; -require_once INSTALLDIR . '/lib/queuehandler.php'; - -class PluginQueueHandler extends QueueHandler -{ - function transport() - { - return 'plugin'; - } +if (count($args) != 2) { + show_help(); +} - function start() - { - $this->log(LOG_INFO, "INITIALIZE"); - return true; - } +$queue = trim($args[0]); +$noticeId = intval($args[1]); - function handle_notice($notice) - { - Event::handle('HandleQueuedNotice', array(&$notice)); - return true; - } +$qm = QueueManager::get(); +$handler = $qm->getHandler($queue); +if (!$handler) { + print "No handler for queue '$queue'.\n"; + exit(1); } -if (have_option('i', 'id')) { - $id = get_option_value('i', 'id'); -} else { - $id = null; +$notice = Notice::staticGet('id', $noticeId); +if (empty($notice)) { + print "Invalid notice id $noticeId\n"; + exit(1); } -$handler = new PluginQueueHandler($id); -$handler->runOnce(); +if (!$handler->handle_notice($notice)) { + print "Failed to handle notice id $noticeId on queue '$queue'.\n"; + exit(1); +} diff --git a/scripts/inbox_users.php b/scripts/inbox_users.php deleted file mode 100755 index 32adcea21..000000000 --- a/scripts/inbox_users.php +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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/>. - */ - -# Abort if called from a web server - -define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); - -$helptext = <<<ENDOFHELP -inbox_users.php <idfile> - -Update users to use inbox table. Listed in an ID file, default 'ids.txt'. - -ENDOFHELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -$id_file = (count($args) > 1) ? $args[0] : 'ids.txt'; - -common_log(LOG_INFO, 'Updating user inboxes.'); - -$ids = file($id_file); - -foreach ($ids as $id) { - - $user = User::staticGet('id', $id); - - if (!$user) { - common_log(LOG_WARNING, 'No such user: ' . $id); - continue; - } - - if ($user->inboxed) { - common_log(LOG_WARNING, 'Already inboxed: ' . $id); - continue; - } - - common_log(LOG_INFO, 'Updating inbox for user ' . $user->id); - - $user->query('BEGIN'); - - $old_inbox = new Notice_inbox(); - $old_inbox->user_id = $user->id; - - $result = $old_inbox->delete(); - - if (is_null($result) || $result === false) { - common_log_db_error($old_inbox, 'DELETE', __FILE__); - continue; - } - - $old_inbox->free(); - - $inbox = new Notice_inbox(); - - $result = $inbox->query('INSERT INTO notice_inbox (user_id, notice_id, created) ' . - 'SELECT ' . $user->id . ', notice.id, notice.created ' . - 'FROM subscription JOIN notice ON subscription.subscribed = notice.profile_id ' . - 'WHERE subscription.subscriber = ' . $user->id . ' ' . - 'AND notice.created >= subscription.created ' . - 'AND NOT EXISTS (SELECT user_id, notice_id ' . - 'FROM notice_inbox ' . - 'WHERE user_id = ' . $user->id . ' ' . - 'AND notice_id = notice.id) ' . - 'ORDER BY notice.created DESC ' . - 'LIMIT 0, 1000'); - - if (is_null($result) || $result === false) { - common_log_db_error($inbox, 'INSERT', __FILE__); - continue; - } - - $orig = clone($user); - $user->inboxed = 1; - $result = $user->update($orig); - - if (!$result) { - common_log_db_error($user, 'UPDATE', __FILE__); - continue; - } - - $user->query('COMMIT'); - - $inbox->free(); - unset($inbox); - - if ($cache) { - $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id)); - $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id . ';last')); - } -} diff --git a/scripts/initializeinbox.php b/scripts/initializeinbox.php new file mode 100644 index 000000000..43afc48eb --- /dev/null +++ b/scripts/initializeinbox.php @@ -0,0 +1,94 @@ +#!/usr/bin/env php +<?php +/* + * StatusNet - a distributed open-source microblogging tool + * Copyright (C) 2009, 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__) . '/..')); + +$shortoptions = 'i:n:af'; +$longoptions = array('id=', 'nickname=', 'all', 'force'); + +$helptext = <<<END_OF_INITIALIZEINBOX_HELP +initializeinbox.php [options] +initialize the inbox for a user + + -i --id ID of user to update + -n --nickname nickname of the user to update + -f --force force update even if user already has a location + -a --all update all + +END_OF_INITIALIZEINBOX_HELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; + +try { + $user = null; + + if (have_option('i', 'id')) { + $id = get_option_value('i', 'id'); + $user = User::staticGet('id', $id); + if (empty($user)) { + throw new Exception("Can't find user with id '$id'."); + } + initializeInbox($user); + } else if (have_option('n', 'nickname')) { + $nickname = get_option_value('n', 'nickname'); + $user = User::staticGet('nickname', $nickname); + if (empty($user)) { + throw new Exception("Can't find user with nickname '$nickname'"); + } + initializeInbox($user); + } else if (have_option('a', 'all')) { + $user = new User(); + if ($user->find()) { + while ($user->fetch()) { + initializeInbox($user); + } + } + } else { + show_help(); + exit(1); + } +} catch (Exception $e) { + print $e->getMessage()."\n"; + exit(1); +} + +function initializeInbox($user) +{ + if (!have_option('q', 'quiet')) { + print "Initializing inbox for $user->nickname..."; + } + + $inbox = Inbox::staticGet('user_id', $user_id); + + if (!empty($inbox)) { + if (!have_option('q', 'quiet')) { + print "SKIP\n"; + } + } else { + $inbox = Inbox::initialize($user_id); + if (!have_option('q', 'quiet')) { + if (empty($inbox)) { + print "ERR\n"; + } else { + print "DONE\n"; + } + } + } +} diff --git a/scripts/jabberqueuehandler.php b/scripts/jabberqueuehandler.php deleted file mode 100755 index 8f3a56944..000000000 --- a/scripts/jabberqueuehandler.php +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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__) . '/..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_JABBER_HELP -Daemon script for pushing new notices to Jabber users. - - -i --id Identity (default none) - -END_OF_JABBER_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -require_once INSTALLDIR . '/lib/common.php'; -require_once INSTALLDIR . '/lib/jabber.php'; -require_once INSTALLDIR . '/lib/xmppqueuehandler.php'; - -class JabberQueueHandler extends XmppQueueHandler -{ - var $conn = null; - - function transport() - { - return 'jabber'; - } - - function handle_notice($notice) - { - try { - return jabber_broadcast_notice($notice); - } catch (XMPPHP_Exception $e) { - $this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage()); - exit(1); - } - } -} - -// Abort immediately if xmpp is not enabled, otherwise the daemon chews up -// lots of CPU trying to connect to unconfigured servers -if (common_config('xmpp','enabled')==false) { - print "Aborting daemon - xmpp is disabled\n"; - exit(); -} - -if (have_option('i')) { - $id = get_option_value('i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; -} - -$handler = new JabberQueueHandler($id); - -$handler->runOnce(); diff --git a/scripts/maildaemon.php b/scripts/maildaemon.php index b4e4d9f08..3b1ef96a1 100755 --- a/scripts/maildaemon.php +++ b/scripts/maildaemon.php @@ -27,266 +27,9 @@ as STDIN. END_OF_HELP; require_once INSTALLDIR.'/scripts/commandline.inc'; - -require_once(INSTALLDIR . '/lib/mail.php'); -require_once(INSTALLDIR . '/lib/mediafile.php'); -require_once('Mail/mimeDecode.php'); - -# FIXME: we use both Mail_mimeDecode and mailparse -# Need to move everything to mailparse - -class MailerDaemon -{ - function __construct() - { - } - - function handle_message($fname='php://stdin') - { - list($from, $to, $msg, $attachments) = $this->parse_message($fname); - if (!$from || !$to || !$msg) { - $this->error(null, _('Could not parse message.')); - } - common_log(LOG_INFO, "Mail from $from to $to with ".count($attachments) .' attachment(s): ' .substr($msg, 0, 20)); - $user = $this->user_from($from); - if (!$user) { - $this->error($from, _('Not a registered user.')); - return false; - } - if (!$this->user_match_to($user, $to)) { - $this->error($from, _('Sorry, that is not your incoming email address.')); - return false; - } - if (!$user->emailpost) { - $this->error($from, _('Sorry, no incoming email allowed.')); - return false; - } - $response = $this->handle_command($user, $from, $msg); - if ($response) { - return true; - } - $msg = $this->cleanup_msg($msg); - $msg = common_shorten_links($msg); - if (Notice::contentTooLong($msg)) { - $this->error($from, sprintf(_('That\'s too long. '. - 'Max notice size is %d chars.'), - Notice::maxContent())); - } - - $mediafiles = array(); - - foreach($attachments as $attachment){ - - $mf = null; - - try { - $mf = MediaFile::fromFileHandle($attachment, $user); - } catch(ClientException $ce) { - $this->error($from, $ce->getMessage()); - } - - $msg .= ' ' . $mf->shortUrl(); - - array_push($mediafiles, $mf); - fclose($attachment); - } - - $err = $this->add_notice($user, $msg, $mediafiles); - - if (is_string($err)) { - $this->error($from, $err); - return false; - } else { - return true; - } - } - - function error($from, $msg) - { - file_put_contents("php://stderr", $msg . "\n"); - exit(1); - } - - function user_from($from_hdr) - { - $froms = mailparse_rfc822_parse_addresses($from_hdr); - if (!$froms) { - return null; - } - $from = $froms[0]; - $addr = common_canonical_email($from['address']); - $user = User::staticGet('email', $addr); - if (!$user) { - $user = User::staticGet('smsemail', $addr); - } - return $user; - } - - function user_match_to($user, $to_hdr) - { - $incoming = $user->incomingemail; - $tos = mailparse_rfc822_parse_addresses($to_hdr); - foreach ($tos as $to) { - if (strcasecmp($incoming, $to['address']) == 0) { - return true; - } - } - return false; - } - - function handle_command($user, $from, $msg) - { - $inter = new CommandInterpreter(); - $cmd = $inter->handle_command($user, $msg); - if ($cmd) { - $cmd->execute(new MailChannel($from)); - return true; - } - return false; - } - - function respond($from, $to, $response) - { - - $headers['From'] = $to; - $headers['To'] = $from; - $headers['Subject'] = "Command complete"; - - return mail_send(array($from), $headers, $response); - } - - function log($level, $msg) - { - common_log($level, 'MailDaemon: '.$msg); - } - - function add_notice($user, $msg, $mediafiles) - { - try { - $notice = Notice::saveNew($user->id, $msg, 'mail'); - } catch (Exception $e) { - $this->log(LOG_ERR, $e->getMessage()); - return $e->getMessage(); - } - foreach($mediafiles as $mf){ - $mf->attachToNotice($notice); - } - common_broadcast_notice($notice); - $this->log(LOG_INFO, - 'Added notice ' . $notice->id . ' from user ' . $user->nickname); - return true; - } - - function parse_message($fname) - { - $contents = file_get_contents($fname); - $parsed = Mail_mimeDecode::decode(array('input' => $contents, - 'include_bodies' => true, - 'decode_headers' => true, - 'decode_bodies' => true)); - if (!$parsed) { - return null; - } - - $from = $parsed->headers['from']; - - $to = $parsed->headers['to']; - - $type = $parsed->ctype_primary . '/' . $parsed->ctype_secondary; - - $attachments = array(); - - $this->extract_part($parsed,$msg,$attachments); - - return array($from, $to, $msg, $attachments); - } - - function extract_part($parsed,&$msg,&$attachments){ - if ($parsed->ctype_primary == 'multipart') { - if($parsed->ctype_secondary == 'alternative'){ - $altmsg = $this->extract_msg_from_multipart_alternative_part($parsed); - if(!empty($altmsg)) $msg = $altmsg; - }else{ - foreach($parsed->parts as $part){ - $this->extract_part($part,$msg,$attachments); - } - } - } else if ($parsed->ctype_primary == 'text' - && $parsed->ctype_secondary=='plain') { - $msg = $parsed->body; - if(strtolower($parsed->ctype_parameters['charset']) != "utf-8"){ - $msg = utf8_encode($msg); - } - }else if(!empty($parsed->body)){ - if(common_config('attachments', 'uploads')){ - //only save attachments if uploads are enabled - $attachment = tmpfile(); - fwrite($attachment, $parsed->body); - $attachments[] = $attachment; - } - } - } - - function extract_msg_from_multipart_alternative_part($parsed){ - foreach ($parsed->parts as $part) { - $this->extract_part($part,$msg,$attachments); - } - //we don't want any attachments that are a result of this parsing - return $msg; - } - - function unsupported_type($type) - { - $this->error(null, "Unsupported message type: " . $type); - } - - function cleanup_msg($msg) - { - $lines = explode("\n", $msg); - - $output = ''; - - foreach ($lines as $line) { - // skip quotes - if (preg_match('/^\s*>.*$/', $line)) { - continue; - } - // skip start of quote - if (preg_match('/^\s*On.*wrote:\s*$/', $line)) { - continue; - } - // probably interesting to someone, not us - if (preg_match('/^\s*Sent via/', $line)) { - continue; - } - if (preg_match('/^\s*Sent from my/', $line)) { - continue; - } - - // skip everything after a sig - if (preg_match('/^\s*--+\s*$/', $line) || - preg_match('/^\s*__+\s*$/', $line)) - { - break; - } - // skip everything after Outlook quote - if (preg_match('/^\s*-+\s*Original Message\s*-+\s*$/', $line)) { - break; - } - // skip everything after weird forward - if (preg_match('/^\s*Begin\s+forward/', $line)) { - break; - } - - $output .= ' ' . $line; - } - - preg_replace('/\s+/', ' ', $output); - return trim($output); - } -} +require_once INSTALLDIR.'/lib/mailhandler.php'; if (common_config('emailpost', 'enabled')) { - $md = new MailerDaemon(); - $md->handle_message('php://stdin'); + $mh = new MailHandler(); + $mh->handle_message(file_get_contents('php://stdin')); } diff --git a/scripts/ombqueuehandler.php b/scripts/ombqueuehandler.php deleted file mode 100755 index be33b9821..000000000 --- a/scripts/ombqueuehandler.php +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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__) . '/..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_OMB_HELP -Daemon script for pushing new notices to OpenMicroBlogging subscribers. - - -i --id Identity (default none) - -END_OF_OMB_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -require_once INSTALLDIR . '/lib/omb.php'; -require_once INSTALLDIR . '/lib/queuehandler.php'; - -set_error_handler('common_error_handler'); - -class OmbQueueHandler extends QueueHandler -{ - - function transport() - { - return 'omb'; - } - - function start() - { - $this->log(LOG_INFO, "INITIALIZE"); - return true; - } - - function handle_notice($notice) - { - if ($this->is_remote($notice)) { - $this->log(LOG_DEBUG, 'Ignoring remote notice ' . $notice->id); - return true; - } else { - return omb_broadcast_notice($notice); - } - } - - function finish() - { - } - - function is_remote($notice) - { - $user = User::staticGet($notice->profile_id); - return is_null($user); - } -} - -if (have_option('i')) { - $id = get_option_value('i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; -} - -$handler = new OmbQueueHandler($id); - -$handler->runOnce(); diff --git a/scripts/pingqueuehandler.php b/scripts/pingqueuehandler.php deleted file mode 100755 index c92337e36..000000000 --- a/scripts/pingqueuehandler.php +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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__) . '/..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_PING_HELP -Daemon script for pushing new notices to ping servers. - - -i --id Identity (default none) - -END_OF_PING_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -require_once INSTALLDIR . '/lib/ping.php'; -require_once INSTALLDIR . '/lib/queuehandler.php'; - -class PingQueueHandler extends QueueHandler { - - function transport() { - return 'ping'; - } - - function start() { - $this->log(LOG_INFO, "INITIALIZE"); - return true; - } - - function handle_notice($notice) { - return ping_broadcast_notice($notice); - } - - function finish() { - } -} - -if (have_option('i')) { - $id = get_option_value('i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; -} - -$handler = new PingQueueHandler($id); - -$handler->runOnce(); diff --git a/scripts/publicqueuehandler.php b/scripts/publicqueuehandler.php deleted file mode 100755 index 50a11bcba..000000000 --- a/scripts/publicqueuehandler.php +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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__) . '/..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_PUBLIC_HELP -Daemon script for pushing new notices to public XMPP subscribers. - - -i --id Identity (default none) - -END_OF_PUBLIC_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -require_once INSTALLDIR . '/lib/jabber.php'; -require_once INSTALLDIR . '/lib/xmppqueuehandler.php'; - -class PublicQueueHandler extends XmppQueueHandler -{ - - function transport() - { - return 'public'; - } - - function handle_notice($notice) - { - try { - return jabber_public_notice($notice); - } catch (XMPPHP_Exception $e) { - $this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage()); - die($e->getMessage()); - } - } -} - -// Abort immediately if xmpp is not enabled, otherwise the daemon chews up -// lots of CPU trying to connect to unconfigured servers -if (common_config('xmpp','enabled')==false) { - print "Aborting daemon - xmpp is disabled\n"; - exit(); -} - -if (have_option('i')) { - $id = get_option_value('i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; -} - -$handler = new PublicQueueHandler($id); - -$handler->runOnce(); diff --git a/scripts/queuedaemon.php b/scripts/queuedaemon.php new file mode 100755 index 000000000..8ef364fe7 --- /dev/null +++ b/scripts/queuedaemon.php @@ -0,0 +1,265 @@ +#!/usr/bin/env php +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2008, 2009, 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__) . '/..')); + +$shortoptions = 'fi:at:'; +$longoptions = array('id=', 'foreground', 'all', 'threads='); + +/** + * Attempts to get a count of the processors available on the current system + * to fan out multiple threads. + * + * Recognizes Linux and Mac OS X; others will return default of 1. + * + * @return intval + */ +function getProcessorCount() +{ + $cpus = 0; + switch (PHP_OS) { + case 'Linux': + $cpuinfo = file('/proc/cpuinfo'); + foreach (file('/proc/cpuinfo') as $line) { + if (preg_match('/^processor\s+:\s+(\d+)\s?$/', $line)) { + $cpus++; + } + } + break; + case 'Darwin': + $cpus = intval(shell_exec("/usr/sbin/sysctl -n hw.ncpu 2>/dev/null")); + break; + } + if ($cpus) { + return $cpus; + } + return 1; +} + +$threads = getProcessorCount(); +$helptext = <<<END_OF_QUEUE_HELP +Daemon script for running queued items. + + -i --id Identity (default none) + -f --foreground Stay in the foreground (default background) + -a --all Handle queues for all local sites + (requires Stomp queue handler, status_network setup) + -t --threads=<n> Spawn <n> processing threads (default $threads) + + +END_OF_QUEUE_HELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; + +require_once(INSTALLDIR.'/lib/daemon.php'); +require_once(INSTALLDIR.'/classes/Queue_item.php'); +require_once(INSTALLDIR.'/classes/Notice.php'); + +define('CLAIM_TIMEOUT', 1200); + +/** + * Queue handling daemon... + * + * The queue daemon by default launches in the background, at which point + * it'll pass control to the configured QueueManager class to poll for updates. + * + * We can then pass individual items through the QueueHandler subclasses + * they belong to. + */ +class QueueDaemon extends Daemon +{ + protected $allsites; + protected $threads=1; + + function __construct($id=null, $daemonize=true, $threads=1, $allsites=false) + { + parent::__construct($daemonize); + + if ($id) { + $this->set_id($id); + } + $this->all = $allsites; + $this->threads = $threads; + } + + /** + * How many seconds a polling-based queue manager should wait between + * checks for new items to handle. + * + * Defaults to 60 seconds; override to speed up or slow down. + * + * @return int timeout in seconds + */ + function timeout() + { + return 60; + } + + function name() + { + return strtolower(get_class($this).'.'.$this->get_id()); + } + + function run() + { + if ($this->threads > 1) { + return $this->runThreads(); + } else { + return $this->runLoop(); + } + } + + function runThreads() + { + $children = array(); + for ($i = 1; $i <= $this->threads; $i++) { + $pid = pcntl_fork(); + if ($pid < 0) { + print "Couldn't fork for thread $i; aborting\n"; + exit(1); + } else if ($pid == 0) { + $this->runChild($i); + exit(0); + } else { + $this->log(LOG_INFO, "Spawned thread $i as pid $pid"); + $children[$i] = $pid; + } + } + + $this->log(LOG_INFO, "Waiting for children to complete."); + while (count($children) > 0) { + $status = null; + $pid = pcntl_wait($status); + if ($pid > 0) { + $i = array_search($pid, $children); + if ($i === false) { + $this->log(LOG_ERR, "Unrecognized child pid $pid exited!"); + continue; + } + unset($children[$i]); + $this->log(LOG_INFO, "Thread $i pid $pid exited."); + + $pid = pcntl_fork(); + if ($pid < 0) { + print "Couldn't fork to respawn thread $i; aborting thread.\n"; + } else if ($pid == 0) { + $this->runChild($i); + exit(0); + } else { + $this->log(LOG_INFO, "Respawned thread $i as pid $pid"); + $children[$i] = $pid; + } + } + } + $this->log(LOG_INFO, "All child processes complete."); + return true; + } + + function runChild($thread) + { + $this->set_id($this->get_id() . "." . $thread); + $this->resetDb(); + $this->runLoop(); + } + + /** + * Reconnect to the database for each child process, + * or they'll get very confused trying to use the + * same socket. + */ + function resetDb() + { + // @fixme do we need to explicitly open the db too + // or is this implied? + global $_DB_DATAOBJECT; + unset($_DB_DATAOBJECT['CONNECTIONS']); + + // Reconnect main memcached, or threads will stomp on + // each other and corrupt their requests. + $cache = common_memcache(); + if ($cache) { + $cache->reconnect(); + } + + // Also reconnect memcached for status_network table. + if (!empty(Status_network::$cache)) { + Status_network::$cache->close(); + Status_network::$cache = null; + } + } + + /** + * Setup and start of run loop for this queue handler as a daemon. + * Most of the heavy lifting is passed on to the QueueManager's service() + * method, which passes control on to the QueueHandler's handle_notice() + * method for each notice that comes in on the queue. + * + * Most of the time this won't need to be overridden in a subclass. + * + * @return boolean true on success, false on failure + */ + function runLoop() + { + $this->log(LOG_INFO, 'checking for queued notices'); + + $master = new IoMaster($this->get_id()); + $master->init($this->all); + $master->service(); + + $this->log(LOG_INFO, 'finished servicing the queue'); + + $this->log(LOG_INFO, 'terminating normally'); + + return true; + } + + function log($level, $msg) + { + common_log($level, get_class($this) . ' ('. $this->get_id() .'): '.$msg); + } +} + +if (have_option('i')) { + $id = get_option_value('i'); +} else if (have_option('--id')) { + $id = get_option_value('--id'); +} else if (count($args) > 0) { + $id = $args[0]; +} else { + $id = null; +} + +if (have_option('t')) { + $threads = intval(get_option_value('t')); +} else if (have_option('--threads')) { + $threads = intval(get_option_value('--threads')); +} else { + $threads = 0; +} +if (!$threads) { + $threads = getProcessorCount(); +} + +$daemonize = !(have_option('f') || have_option('--foreground')); +$all = have_option('a') || have_option('--all'); + +$daemon = new QueueDaemon($id, $daemonize, $threads, $all); +$daemon->runOnce(); + diff --git a/scripts/smsqueuehandler.php b/scripts/smsqueuehandler.php deleted file mode 100755 index 6583a77da..000000000 --- a/scripts/smsqueuehandler.php +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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__) . '/..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_SMS_HELP -Daemon script for pushing new notices to local subscribers using SMS. - - -i --id Identity (default none) - -END_OF_SMS_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -require_once INSTALLDIR . '/lib/mail.php'; -require_once INSTALLDIR . '/lib/queuehandler.php'; - -class SmsQueueHandler extends QueueHandler -{ - function transport() - { - return 'sms'; - } - - function start() - { - $this->log(LOG_INFO, "INITIALIZE"); - return true; - } - - function handle_notice($notice) - { - return mail_broadcast_notice_sms($notice); - } - - function finish() - { - } -} - -if (have_option('i')) { - $id = get_option_value('i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; -} - -$handler = new SmsQueueHandler($id); - -$handler->runOnce(); diff --git a/scripts/stopdaemons.sh b/scripts/stopdaemons.sh index 90e7331ca..c790f1f34 100755 --- a/scripts/stopdaemons.sh +++ b/scripts/stopdaemons.sh @@ -25,7 +25,7 @@ DIR=`php $SDIR/getpiddir.php` for f in jabberhandler ombhandler publichandler smshandler pinghandler \ xmppconfirmhandler xmppdaemon twitterhandler facebookhandler \ - twitterstatusfetcher synctwitterfriends pluginhandler; do + twitterstatusfetcher synctwitterfriends pluginhandler rsscloudhandler; do FILES="$DIR/$f.*.pid" for ff in "$FILES" ; do diff --git a/scripts/triminboxes.php b/scripts/triminboxes.php deleted file mode 100644 index ea4751305..000000000 --- a/scripts/triminboxes.php +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2009, 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__) . '/..')); - -$shortoptions = 'u::'; -$longoptions = array('start-user-id=', 'sleep-time='); - -$helptext = <<<END_OF_TRIM_HELP -Batch script for trimming notice inboxes to a reasonable size. - - -u <id> - --start-user-id=<id> User ID to start after. Default is all. - --sleep-time=<integer> Amount of time to wait (in seconds) between trims. Default is zero. - -END_OF_TRIM_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; - -$id = null; -$sleep_time = 0; - -if (have_option('u')) { - $id = get_option_value('u'); -} else if (have_option('--start-user-id')) { - $id = get_option_value('--start-user-id'); -} else { - $id = null; -} - -if (have_option('--sleep-time')) { - $sleep_time = intval(get_option_value('--sleep-time')); -} - -$quiet = have_option('q') || have_option('--quiet'); - -$user = new User(); - -if (!empty($id)) { - $user->whereAdd('id > ' . $id); -} - -$cnt = $user->find(); - -while ($user->fetch()) { - if (!$quiet) { - print "Trimming inbox for user $user->id"; - } - $count = Notice_inbox::gc($user->id); - if ($count) { - if (!$quiet) { - print ": $count trimmed..."; - } - sleep($sleep_time); - } - if (!$quiet) { - print "\n"; - } -} diff --git a/scripts/update_po_templates.php b/scripts/update_po_templates.php index 83bff6d80..f882f673a 100755 --- a/scripts/update_po_templates.php +++ b/scripts/update_po_templates.php @@ -80,20 +80,21 @@ function do_translatewiki_plugin($basedir, $plugin) mkdir($yamldir); } $outfile = "$yamldir/StatusNet-{$plugin}.yml"; + $pluginlc = strtolower( $plugin ); $data = <<<END --- BASIC: - id: out-statusnet-{$plugin} + id: out-statusnet-{$pluginlc} label: StatusNet - {$plugin} - description: "{{int:bw-desc-statusnet-plugin-{$plugin}}}" + description: "{{int:bw-desc-statusnet-plugin-{$pluginlc}}}" namespace: NS_STATUSNET - display: out/statusnet/{$plugin} + display: out/statusnet/{$pluginlc} class: GettextMessageGroup FILES: class: GettextFFS sourcePattern: %GROUPROOT%/plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po - targetPattern: {$plugin}.po + targetPattern: plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po codeMap: en-gb: en_GB no: nb @@ -103,7 +104,7 @@ FILES: MANGLER class: StringMatcher - prefix: {$plugin}- + prefix: {$pluginlc}- patterns: - "*" @@ -208,4 +209,3 @@ if ($plugins) { } } } - diff --git a/scripts/xmppconfirmhandler.php b/scripts/xmppconfirmhandler.php deleted file mode 100755 index 2e3974136..000000000 --- a/scripts/xmppconfirmhandler.php +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env php -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, 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__) . '/..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_JABBER_HELP -Daemon script for pushing new confirmations to Jabber users. - - -i --id Identity (default none) - -END_OF_JABBER_HELP; - -require_once INSTALLDIR.'/scripts/commandline.inc'; -require_once INSTALLDIR . '/lib/jabber.php'; -require_once INSTALLDIR . '/lib/xmppqueuehandler.php'; - -class XmppConfirmHandler extends XmppQueueHandler -{ - var $_id = 'confirm'; - - function class_name() - { - return 'XmppConfirmHandler'; - } - - function run() - { - if (!$this->start()) { - return false; - } - $this->log(LOG_INFO, 'checking for queued confirmations'); - do { - $confirm = $this->next_confirm(); - if ($confirm) { - $this->log(LOG_INFO, 'Sending confirmation for ' . $confirm->address); - $user = User::staticGet($confirm->user_id); - if (!$user) { - $this->log(LOG_WARNING, 'Confirmation for unknown user ' . $confirm->user_id); - continue; - } - $success = jabber_confirm_address($confirm->code, - $user->nickname, - $confirm->address); - if (!$success) { - $this->log(LOG_ERR, 'Confirmation failed for ' . $confirm->address); - # Just let the claim age out; hopefully things work then - continue; - } else { - $this->log(LOG_INFO, 'Confirmation sent for ' . $confirm->address); - # Mark confirmation sent; need a dupe so we don't have the WHERE clause - $dupe = Confirm_address::staticGet('code', $confirm->code); - if (!$dupe) { - common_log(LOG_WARNING, 'Could not refetch confirm', __FILE__); - continue; - } - $orig = clone($dupe); - $dupe->sent = $dupe->claimed; - $result = $dupe->update($orig); - if (!$result) { - common_log_db_error($dupe, 'UPDATE', __FILE__); - # Just let the claim age out; hopefully things work then - continue; - } - $dupe->free(); - unset($dupe); - } - $user->free(); - unset($user); - $confirm->free(); - unset($confirm); - $this->idle(0); - } else { -# $this->clear_old_confirm_claims(); - $this->idle(10); - } - } while (true); - if (!$this->finish()) { - return false; - } - return true; - } - - function next_confirm() - { - $confirm = new Confirm_address(); - $confirm->whereAdd('claimed IS null'); - $confirm->whereAdd('sent IS null'); - # XXX: eventually we could do other confirmations in the queue, too - $confirm->address_type = 'jabber'; - $confirm->orderBy('modified DESC'); - $confirm->limit(1); - if ($confirm->find(true)) { - $this->log(LOG_INFO, 'Claiming confirmation for ' . $confirm->address); - # working around some weird DB_DataObject behaviour - $confirm->whereAdd(''); # clears where stuff - $original = clone($confirm); - $confirm->claimed = common_sql_now(); - $result = $confirm->update($original); - if ($result) { - $this->log(LOG_INFO, 'Succeeded in claim! '. $result); - return $confirm; - } else { - $this->log(LOG_INFO, 'Failed in claim!'); - return false; - } - } - return null; - } - - function clear_old_confirm_claims() - { - $confirm = new Confirm(); - $confirm->claimed = null; - $confirm->whereAdd('now() - claimed > '.CLAIM_TIMEOUT); - $confirm->update(DB_DATAOBJECT_WHEREADD_ONLY); - $confirm->free(); - unset($confirm); - } -} - -// Abort immediately if xmpp is not enabled, otherwise the daemon chews up -// lots of CPU trying to connect to unconfigured servers -if (common_config('xmpp','enabled')==false) { - print "Aborting daemon - xmpp is disabled\n"; - exit(); -} - -if (have_option('i')) { - $id = get_option_value('i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; -} - -$handler = new XmppConfirmHandler($id); - -$handler->runOnce(); - diff --git a/scripts/xmppdaemon.php b/scripts/xmppdaemon.php index 20105b602..cef9c4bd0 100755 --- a/scripts/xmppdaemon.php +++ b/scripts/xmppdaemon.php @@ -298,7 +298,7 @@ class XMPPDaemon extends Daemon $content_shortened = common_shorten_links($body); if (Notice::contentTooLong($content_shortened)) { $from = jabber_normalize_jid($pl['from']); - $this->from_site($from, sprintf(_("Message too long - maximum is %d characters, you sent %d"), + $this->from_site($from, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d.'), Notice::maxContent(), mb_strlen($content_shortened))); return; |