X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fimplugin.php;h=2811e7d644770b0a3589465e652e083059029a2b;hb=1d29ba83150bdd7a23e497ca9a743ac2b6158b6f;hp=018b0ecee08e51c7b9c7c57571d8249dac2d91d4;hpb=e89908f26140c217e01b2f8f755712f38f3935f3;p=quix0rs-gnu-social.git diff --git a/lib/implugin.php b/lib/implugin.php index 018b0ecee0..2811e7d644 100644 --- a/lib/implugin.php +++ b/lib/implugin.php @@ -59,7 +59,6 @@ abstract class ImPlugin extends Plugin */ abstract function normalize($screenname); - /** * validate (ensure the validity of) a screenname * @@ -79,47 +78,52 @@ abstract class ImPlugin extends Plugin /** * send a single notice to a given screenname * The implementation should put raw data, ready to send, into the outgoing - * queue using enqueue_outgoing_raw() + * queue using enqueueOutgoingRaw() * * @param string $screenname screenname to send to * @param Notice $notice notice to send * * @return boolean success value */ - function send_notice($screenname, $notice) + function sendNotice($screenname, $notice) { - return $this->send_message($screenname, $this->format_notice($notice)); + return $this->sendMessage($screenname, $this->formatNotice($notice)); } /** * send a message (text) to a given screenname * The implementation should put raw data, ready to send, into the outgoing - * queue using enqueue_outgoing_raw() + * queue using enqueueOutgoingRaw() * * @param string $screenname screenname to send to * @param Notice $body text to send * * @return boolean success value */ - abstract function send_message($screenname, $body); + abstract function sendMessage($screenname, $body); /** * 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 + * completed. * * @param object $data raw IM data * - * @return boolean success value + * @return boolean true if processing completed, false for temporary failures */ - abstract function receive_raw_message($data); + abstract function receiveRawMessage($data); /** * get the screenname of the daemon that sends and receives message for this service * * @return string screenname of this plugin */ - abstract function daemon_screenname(); + abstract function daemonScreenname(); /** * get the microid uri of a given screenname @@ -130,7 +134,7 @@ abstract class ImPlugin extends Plugin */ function microiduri($screenname) { - return $this->transport . ':' . $screenname; + return $this->transport . ':' . $screenname; } //========================UTILITY FUNCTIONS USEFUL TO IMPLEMENTATIONS - MISC ========================\ @@ -139,7 +143,7 @@ abstract class ImPlugin extends Plugin * * @param object $data */ - function enqueue_outgoing_raw($data) + function enqueueOutgoingRaw($data) { $qm = QueueManager::get(); $qm->enqueue($data, $this->transport . '-out'); @@ -150,7 +154,7 @@ abstract class ImPlugin extends Plugin * * @param object $data */ - function enqueue_incoming_raw($data) + function enqueueIncomingRaw($data) { $qm = QueueManager::get(); $qm->enqueue($data, $this->transport . '-in'); @@ -163,9 +167,9 @@ abstract class ImPlugin extends Plugin * * @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_im_prefs->free(); @@ -175,7 +179,6 @@ abstract class ImPlugin extends Plugin } } - /** * given a screenname, get the User_im_prefs object for this transport * @@ -183,16 +186,18 @@ abstract class ImPlugin extends Plugin * * @return User_im_prefs user_im_prefs */ - function get_user_im_prefs_from_screenname($screenname) + function getUserImPrefsFromScreenname($screenname) { - if($user_im_prefs = User_im_prefs::pkeyGet( array('transport' => $this->transport, 'screenname' => $screenname) )){ + $user_im_prefs = User_im_prefs::pkeyGet( + array('transport' => $this->transport, + 'screenname' => $this->normalize($screenname))); + if ($user_im_prefs) { return $user_im_prefs; - }else{ + } else { return false; } } - /** * given a User, get their screenname * @@ -200,17 +205,16 @@ abstract class ImPlugin extends Plugin * * @return string screenname of that user */ - function get_screenname($user) + function getScreenname($user) { - $user_im_prefs = $this->get_user_im_prefs_from_user($user); - if($user_im_prefs){ + $user_im_prefs = $this->getUserImPrefsFromUser($user); + if ($user_im_prefs) { return $user_im_prefs->screenname; - }else{ + } else { return false; } } - /** * given a User, get their User_im_prefs * @@ -218,11 +222,14 @@ abstract class ImPlugin extends Plugin * * @return User_im_prefs user_im_prefs of that user */ - function get_user_im_prefs_from_user($user) + function getUserImPrefsFromUser($user) { - if($user_im_prefs = User_im_prefs::pkeyGet( array('transport' => $this->transport, 'user_id' => $user->id) )){ + $user_im_prefs = User_im_prefs::pkeyGet( + array('transport' => $this->transport, + 'user_id' => $user->id)); + if ($user_im_prefs){ return $user_im_prefs; - }else{ + } else { return false; } } @@ -235,10 +242,10 @@ abstract class ImPlugin extends Plugin * * @param boolean success */ - protected function send_from_site($screenname, $msg) + protected function sendFromSite($screenname, $msg) { $text = '['.common_config('site', 'name') . '] ' . $msg; - $this->send_message($screenname, $text); + $this->sendMessage($screenname, $text); } /** @@ -250,7 +257,7 @@ abstract class ImPlugin extends Plugin * * @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: ' . @@ -260,7 +267,7 @@ abstract class ImPlugin extends Plugin '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))); - return $this->send_message($screenname, $body); + return $this->sendMessage($screenname, $body); } /** @@ -274,7 +281,7 @@ abstract class ImPlugin extends Plugin * @return boolean success flag */ - function public_notice($notice) + function publicNotice($notice) { // Now, users who want everything @@ -287,7 +294,7 @@ abstract class ImPlugin extends Plugin 'Sending notice ' . $notice->id . ' to public listener ' . $screenname, __FILE__); - $this->send_notice($screenname, $notice); + $this->sendNotice($screenname, $notice); } return true; @@ -307,7 +314,7 @@ abstract class ImPlugin extends Plugin * @return boolean success flag */ - function broadcast_notice($notice) + function broadcastNotice($notice) { $ni = $notice->whoGets(); @@ -318,7 +325,7 @@ abstract class ImPlugin extends Plugin // 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; } @@ -345,7 +352,7 @@ abstract class ImPlugin extends Plugin common_log(LOG_INFO, 'Sending notice ' . $notice->id . ' to ' . $user_im_prefs->screenname, __FILE__); - $this->send_notice($user_im_prefs->screenname, $notice); + $this->sendNotice($user_im_prefs->screenname, $notice); $user_im_prefs->free(); } @@ -360,7 +367,7 @@ abstract class ImPlugin extends Plugin * @return string plain-text version of the notice, with user nickname prefixed */ - function format_notice($notice) + function formatNotice($notice) { $profile = $notice->getProfile(); return $profile->nickname . ': ' . $notice->content . ' [' . $notice->id . ']'; @@ -373,7 +380,7 @@ abstract class ImPlugin extends Plugin * @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); @@ -391,7 +398,7 @@ abstract class ImPlugin extends Plugin * @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; @@ -407,7 +414,7 @@ abstract class ImPlugin extends Plugin * @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; @@ -425,34 +432,34 @@ abstract class ImPlugin extends Plugin * * @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(); @@ -470,12 +477,12 @@ abstract class ImPlugin extends Plugin * * @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.'), + $this->sendFromSite($screenname, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d.'), Notice::maxContent(), mb_strlen($content_shortened))); return; @@ -485,11 +492,10 @@ abstract class ImPlugin extends Plugin $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(); @@ -497,7 +503,7 @@ abstract class ImPlugin extends Plugin } //========================EVENT HANDLERS========================\ - + /** * Register notice queue handler * @@ -586,14 +592,16 @@ abstract class ImPlugin extends Plugin function onGetImTransports(&$transports) { - $transports[$this->transport] = array('display' => $this->getDisplayName()); + $transports[$this->transport] = array( + 'display' => $this->getDisplayName(), + 'daemonScreenname' => $this->daemonScreenname()); } function onSendImConfirmationCode($transport, $screenname, $code, $user) { if($transport == $this->transport) { - $this->send_confirmation_code($screenname, $code, $user); + $this->sendConfirmationCode($screenname, $code, $user); return false; } } @@ -606,8 +614,13 @@ abstract class ImPlugin extends Plugin function initialize() { + if( ! common_config('queue', 'enabled')) + { + throw new ServerException("Queueing must be enabled to use IM plugins"); + } + if(is_null($this->transport)){ - throw new Exception('transport cannot be null'); + throw new ServerException('transport cannot be null'); } } }