* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-
abstract class ImPlugin extends Plugin
{
//name of this IM transport
*/
abstract function normalize($screenname);
-
/**
* validate (ensure the validity of) a screenname
*
*
* @return boolean success value
*/
- function sendNotice($screenname, $notice)
+ function sendNotice($screenname, Notice $notice)
{
- return $this->sendMessage($screenname, $this->format_notice($notice));
+ return $this->sendMessage($screenname, $this->formatNotice($notice));
}
/**
/**
* receive a raw message
* Raw IM data is taken from the incoming queue, and passed to this function.
- * It should parse the raw message and call handle_incoming()
- *
+ * It should parse the raw message and call handleIncoming()
+ *
* Returning false may CAUSE REPROCESSING OF THE QUEUE ITEM, and should
* be used for temporary failures only. For permanent failures such as
* unrecognized addresses, return true to indicate your processing has
*/
function microiduri($screenname)
{
- return $this->transport . ':' . $screenname;
+ return $this->transport . ':' . $screenname;
}
//========================UTILITY FUNCTIONS USEFUL TO IMPLEMENTATIONS - MISC ========================\
*
* @param object $data
*/
- function enqueue_incoming_raw($data)
+ function enqueueIncomingRaw($data)
{
$qm = QueueManager::get();
$qm->enqueue($data, $this->transport . '-in');
*
* @return User user
*/
- function get_user($screenname)
+ function getUser($screenname)
{
- $user_im_prefs = $this->get_user_im_prefs_from_screenname($screenname);
+ $user_im_prefs = $this->getUserImPrefsFromScreenname($screenname);
if($user_im_prefs){
- $user = User::staticGet('id', $user_im_prefs->user_id);
+ $user = User::getKV('id', $user_im_prefs->user_id);
$user_im_prefs->free();
return $user;
}else{
}
}
-
/**
* given a screenname, get the User_im_prefs object for this transport
*
*
* @return User_im_prefs user_im_prefs
*/
- function get_user_im_prefs_from_screenname($screenname)
+ function getUserImPrefsFromScreenname($screenname)
{
$user_im_prefs = User_im_prefs::pkeyGet(
array('transport' => $this->transport,
}
}
-
/**
* given a User, get their screenname
*
*
* @return string screenname of that user
*/
- function get_screenname($user)
+ function getScreenname($user)
{
- $user_im_prefs = $this->get_user_im_prefs_from_user($user);
+ $user_im_prefs = $this->getUserImPrefsFromUser($user);
if ($user_im_prefs) {
return $user_im_prefs->screenname;
} else {
}
}
-
/**
* given a User, get their User_im_prefs
*
*
* @return User_im_prefs user_im_prefs of that user
*/
- function get_user_im_prefs_from_user($user)
+ function getUserImPrefsFromUser($user)
{
$user_im_prefs = User_im_prefs::pkeyGet(
array('transport' => $this->transport,
*
* @param boolean success
*/
- protected function send_from_site($screenname, $msg)
+ protected function sendFromSite($screenname, $msg)
{
$text = '['.common_config('site', 'name') . '] ' . $msg;
$this->sendMessage($screenname, $text);
}
/**
- * send a confirmation code to a user
+ * Send a confirmation code to a user
*
* @param string $screenname screenname sending to
* @param string $code the confirmation code
*
* @return boolean success value
*/
- function send_confirmation_code($screenname, $code, $user)
+ function sendConfirmationCode($screenname, $code, $user)
{
- $body = sprintf(_('User "%s" on %s has said that your %s screenname belongs to them. ' .
- 'If that\'s true, you can confirm by clicking on this URL: ' .
- '%s' .
+ // TRANS: Body text for confirmation code e-mail.
+ // TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
+ // TRANS: %3$s is the display name of an IM plugin.
+ $body = sprintf(_('User "%1$s" on %2$s has said that your %3$s screenname belongs to them. ' .
+ 'If that is true, you can confirm by clicking on this URL: ' .
+ '%4$s' .
' . (If you cannot click it, copy-and-paste it into the ' .
- 'address bar of your browser). If that user isn\'t you, ' .
- 'or if you didn\'t request this confirmation, just ignore this message.'),
- $user->nickname, common_config('site', 'name'), $this->getDisplayName(), common_local_url('confirmaddress', array('code' => $code)));
+ 'address bar of your browser). If that user is not you, ' .
+ 'or if you did not request this confirmation, just ignore this message.'),
+ $user->nickname, common_config('site', 'name'), $this->getDisplayName(), common_local_url('confirmaddress', null, array('code' => $code)));
return $this->sendMessage($screenname, $body);
}
* @return boolean success flag
*/
- function public_notice($notice)
+ function publicNotice($notice)
{
// Now, users who want everything
* @return boolean success flag
*/
- function broadcast_notice($notice)
+ function broadcastNotice($notice)
{
-
$ni = $notice->whoGets();
foreach ($ni as $user_id => $reason) {
- $user = User::staticGet($user_id);
+ $user = User::getKV($user_id);
if (empty($user)) {
// either not a local user, or just not found
continue;
}
- $user_im_prefs = $this->get_user_im_prefs_from_user($user);
+ $user_im_prefs = $this->getUserImPrefsFromUser($user);
if(!$user_im_prefs || !$user_im_prefs->notify){
continue;
}
case NOTICE_INBOX_SOURCE_GROUP:
break;
default:
- throw new Exception(sprintf(_("Unknown inbox source %d."), $reason));
+ // TRANS: Exception thrown when trying to deliver a notice to an unknown inbox.
+ // TRANS: %d is the unknown inbox ID (number).
+ throw new Exception(sprintf(_('Unknown inbox source %d.'), $reason));
}
common_log(LOG_INFO,
* @return string plain-text version of the notice, with user nickname prefixed
*/
- function format_notice($notice)
+ protected function formatNotice(Notice $notice)
{
$profile = $notice->getProfile();
- return $profile->nickname . ': ' . $notice->content . ' [' . $notice->id . ']';
+
+ try {
+ $parent = $notice->getParent();
+ $orig_profile = $parent->getProfile();
+ $nicknames = sprintf('%1$s => %2$s', $profile->nickname, $orig_profile->nickname);
+ } catch (Exception $e) {
+ $nicknames = $profile->nickname;
+ }
+
+ return sprintf('%1$s: %2$s [%3$u]', $nicknames, $notice->content, $notice->id);
}
//========================UTILITY FUNCTIONS USEFUL TO IMPLEMENTATIONS - RECEIVING ========================\
* @param string $body message text
* @return boolean true if the message was a command and was executed, false if it was not a command
*/
- protected function handle_command($user, $body)
+ protected function handleCommand($user, $body)
{
$inter = new CommandInterpreter();
$cmd = $inter->handle_command($user, $body);
* @param string $txt message text
* @return boolean true if autoreply
*/
- protected function is_autoreply($txt)
+ protected function isAutoreply($txt)
{
if (preg_match('/[\[\(]?[Aa]uto[-\s]?[Rr]e(ply|sponse)[\]\)]/', $txt)) {
return true;
* @param string $txt message text
* @return boolean true if OTR
*/
- protected function is_otr($txt)
+ protected function isOtr($txt)
{
if (preg_match('/^\?OTR/', $txt)) {
return true;
*
* @param boolean success
*/
- protected function handle_incoming($from, $notice_text)
+ protected function handleIncoming($from, $notice_text)
{
- $user = $this->get_user($from);
+ $user = $this->getUser($from);
// For common_current_user to work
global $_cur;
$_cur = $user;
if (!$user) {
- $this->send_from_site($from, 'Unknown user; go to ' .
+ $this->sendFromSite($from, 'Unknown user; go to ' .
common_local_url('imsettings') .
' to add your address to your account');
common_log(LOG_WARNING, 'Message from unknown user ' . $from);
return;
}
- if ($this->handle_command($user, $notice_text)) {
+ if ($this->handleCommand($user, $notice_text)) {
common_log(LOG_INFO, "Command message by $from handled.");
return;
- } else if ($this->is_autoreply($notice_text)) {
+ } else if ($this->isAutoreply($notice_text)) {
common_log(LOG_INFO, 'Ignoring auto reply from ' . $from);
return;
- } else if ($this->is_otr($notice_text)) {
+ } else if ($this->isOtr($notice_text)) {
common_log(LOG_INFO, 'Ignoring OTR from ' . $from);
return;
} else {
common_log(LOG_INFO, 'Posting a notice from ' . $user->nickname);
- $this->add_notice($from, $user, $notice_text);
+ $this->addNotice($from, $user, $notice_text);
}
$user->free();
*
* @param boolean success
*/
- protected function add_notice($screenname, $user, $body)
+ protected function addNotice($screenname, $user, $body)
{
$body = trim(strip_tags($body));
$content_shortened = common_shorten_links($body);
if (Notice::contentTooLong($content_shortened)) {
- $this->send_from_site($screenname, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d.'),
- Notice::maxContent(),
- mb_strlen($content_shortened)));
+ $this->sendFromSite($screenname,
+ // TRANS: Message given when a status is too long. %1$s is the maximum number of characters,
+ // TRANS: %2$s is the number of characters sent (used for plural).
+ sprintf(_m('Message too long - maximum is %1$d character, you sent %2$d.',
+ 'Message too long - maximum is %1$d characters, you sent %2$d.',
+ Notice::maxContent()),
+ Notice::maxContent(),
+ mb_strlen($content_shortened)));
return;
}
$notice = Notice::saveNew($user->id, $content_shortened, $this->transport);
} catch (Exception $e) {
common_log(LOG_ERR, $e->getMessage());
- $this->send_from_site($from, $e->getMessage());
+ $this->sendFromSite($from, $e->getMessage());
return;
}
- common_broadcast_notice($notice);
common_log(LOG_INFO,
'Added notice ' . $notice->id . ' from user ' . $user->nickname);
$notice->free();
}
//========================EVENT HANDLERS========================\
-
+
/**
* Register notice queue handler
*
function onStartEnqueueNotice($notice, &$transports)
{
- $profile = Profile::staticGet($notice->profile_id);
+ $profile = Profile::getKV($notice->profile_id);
if (!$profile) {
common_log(LOG_WARNING, 'Refusing to broadcast notice with ' .
{
if($transport == $this->transport)
{
- $this->send_confirmation_code($screenname, $code, $user);
+ $this->sendConfirmationCode($screenname, $code, $user);
return false;
}
}
return true;
}
+ function onHaveImPlugin(&$haveImPlugin) {
+ $haveImPlugin = true; // set flag true (we're loaded, after all!)
+ return false; // stop looking
+ }
+
function initialize()
{
if( ! common_config('queue', 'enabled'))
{
- throw new ServerException("Queueing must be enabled to use IM plugins");
+ // TRANS: Server exception thrown trying to initialise an IM plugin without meeting all prerequisites.
+ throw new ServerException(_('Queueing must be enabled to use IM plugins.'));
}
if(is_null($this->transport)){
- throw new ServerException('transport cannot be null');
+ // TRANS: Server exception thrown trying to initialise an IM plugin without a transport method.
+ throw new ServerException(_('Transport cannot be null.'));
}
}
}