-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Send and receive notices using the AIM network
- *
- * PHP version 5
- *
- * 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/>.
- *
- * @category IM
- * @package StatusNet
- * @author Craig Andrews <candrews@integralblue.com>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET')) {
- // This check helps protect against security problems;
- // your code file can't be executed directly from the web.
- exit(1);
-}
-// We bundle the phptoclib library...
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/phptoclib');
-
-/**
- * Plugin for AIM
- *
- * @category Plugin
- * @package StatusNet
- * @author Craig Andrews <candrews@integralblue.com>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link http://status.net/
- */
-
-class MsnPlugin extends ImPlugin
-{
- public $user = null;
- public $password = null;
- public $publicFeed = array();
-
- public $transport = 'msnim';
-
- function getDisplayName()
- {
- return _m('MSN');
- }
-
- function normalize($screenname)
- {
- $screenname = str_replace(" ","", $screenname);
- return strtolower($screenname);
- }
-
- function daemon_screenname()
- {
- return $this->user;
- }
-
- function validate($screenname)
- {
- if(preg_match('/^[a-z]\w{2,15}$/i', $screenname)) {
- return true;
- }else{
- return false;
- }
- }
-
- /**
- * Load related modules when needed
- *
- * @param string $cls Name of the class to be loaded
- *
- * @return boolean hook value; true means continue processing, false means stop.
- */
- function onAutoload($cls)
- {
- $dir = dirname(__FILE__);
-
- switch ($cls)
- {
- case 'Msn':
- require_once(INSTALLDIR.'/plugins/Msn/extlib/phpmsnclass/msn.class.php');
- return false;
- case 'MsnManager':
- include_once $dir . '/'.strtolower($cls).'.php';
- return false;
- case 'Fake_Msn':
- include_once $dir . '/'. $cls .'.php';
- return false;
- default:
- return true;
- }
- }
-
- function onStartImDaemonIoManagers(&$classes)
- {
- parent::onStartImDaemonIoManagers(&$classes);
- $classes[] = new MsnManager($this); // handles sending/receiving
- return true;
- }
-
- function microiduri($screenname)
- {
- return 'msnim:' . $screenname;
- }
-
- function send_message($screenname, $body)
- {
- //$this->fake_aim->sendIm($screenname, $body);
- //$this->enqueue_outgoing_raw($this->fake_aim->would_be_sent);
- $this->enqueue_outgoing_raw(array($screenname, $body));
- return true;
- }
-
- /**
- * Accept a queued input message.
- *
- * @return true if processing completed, false if message should be reprocessed
- */
- function receive_raw_message($message)
- {
- $info=Aim::getMessageInfo($message);
- $from = $info['from'];
- $user = $this->get_user($from);
- $notice_text = $info['message'];
-
- $this->handle_incoming($from, $notice_text);
-
- return true;
- }
-
- function initialize(){
- if(!isset($this->user)){
- throw new Exception("must specify a user");
- }
- if(!isset($this->password)){
- throw new Exception("must specify a password");
- }
- if(!isset($this->nickname)) {
- throw new Exception("must specify a nickname");
- }
-
- $this->fake_msn = new Fake_Msn($this->user,$this->password,4);
- return true;
- }
-
- function onPluginVersion(&$versions)
- {
- $versions[] = array('name' => 'MSN',
- 'version' => STATUSNET_VERSION,
- 'author' => 'Luke Fitzgerald',
- 'homepage' => 'http://status.net/wiki/Plugin:MSN',
- 'rawdescription' =>
- _m('The MSN plugin allows users to send and receive notices over the MSN network.'));
- return true;
- }
-}
+<?php\r
+/**\r
+ * StatusNet - the distributed open-source microblogging tool\r
+ * Copyright (C) 2009, StatusNet, Inc.\r
+ *\r
+ * Send and receive notices using the MSN network\r
+ *\r
+ * PHP version 5\r
+ *\r
+ * This program is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU Affero General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU Affero General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Affero General Public License\r
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
+ *\r
+ * @category IM\r
+ * @package StatusNet\r
+ * @author Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
+ * @copyright 2010 StatusNet, Inc.\r
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
+ * @link http://status.net/\r
+ */\r
+\r
+if (!defined('STATUSNET')) {\r
+ // This check helps protect against security problems;\r
+ // your code file can't be executed directly from the web.\r
+ exit(1);\r
+}\r
+// We bundle the phpmsnclass library...\r
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/phpmsnclass');\r
+\r
+/**\r
+ * Plugin for MSN\r
+ *\r
+ * @category Plugin\r
+ * @package StatusNet\r
+ * @author Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
+ * @copyright 2010 StatusNet, Inc.\r
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
+ * @link http://status.net/\r
+ */\r
+\r
+class MsnPlugin extends ImPlugin {\r
+ public $user = null;\r
+ public $password = null;\r
+ public $nickname = null;\r
+ public $transport = 'msn';\r
+\r
+ /**\r
+ * Get the internationalized/translated display name of this IM service\r
+ *\r
+ * @return string Name of service\r
+ */\r
+ public function getDisplayName() {\r
+ return _m('MSN');\r
+ }\r
+\r
+ /**\r
+ * Normalize a screenname for comparison\r
+ *\r
+ * @param string $screenname screenname to normalize\r
+ * @return string an equivalent screenname in normalized form\r
+ */\r
+ public function normalize($screenname) {\r
+ $screenname = str_replace(" ","", $screenname);\r
+ return strtolower($screenname);\r
+ }\r
+\r
+ /**\r
+ * Get the screenname of the daemon that sends and receives messages\r
+ *\r
+ * @return string Screenname\r
+ */\r
+ public function daemonScreenname() {\r
+ return $this->user;\r
+ }\r
+\r
+ /**\r
+ * Validate (ensure the validity of) a screenname\r
+ *\r
+ * @param string $screenname screenname to validate\r
+ * @return boolean\r
+ */\r
+ public function validate($screenname) {\r
+ return Validate::email($screenname, common_config('email', 'check_domain'));\r
+ }\r
+\r
+ /**\r
+ * Load related modules when needed\r
+ *\r
+ * @param string $cls Name of the class to be loaded\r
+ * @return boolean hook value; true means continue processing, false means stop.\r
+ */\r
+ public function onAutoload($cls) {\r
+ $dir = dirname(__FILE__);\r
+\r
+ switch ($cls) {\r
+ case 'MSN':\r
+ require_once(INSTALLDIR.'/plugins/Msn/extlib/phpmsnclass/msn.class.php');\r
+ return false;\r
+ case 'MsnManager':\r
+ case 'Msn_waiting_message':\r
+ include_once $dir . '/'.strtolower($cls).'.php';\r
+ return false;\r
+ default:\r
+ return true;\r
+ }\r
+ }\r
+\r
+ /*\r
+ * Start manager on daemon start\r
+ *\r
+ * @return boolean\r
+ */\r
+ public function onStartImDaemonIoManagers(&$classes) {\r
+ parent::onStartImDaemonIoManagers(&$classes);\r
+ $classes[] = new MsnManager($this); // handles sending/receiving\r
+ return true;\r
+ }\r
+\r
+ /**\r
+ * Ensure the database table is present\r
+ *\r
+ */\r
+ public function onCheckSchema() {\r
+ $schema = Schema::get();\r
+\r
+ // For storing messages while sessions become ready\r
+ $schema->ensureTable('msn_waiting_message',\r
+ array(new ColumnDef('id', 'integer', null,\r
+ false, 'PRI', null, null, true),\r
+ new ColumnDef('screenname', 'varchar', 255, false),\r
+ new ColumnDef('message', 'text', null, false),\r
+ new ColumnDef('created', 'datetime', null, false),\r
+ new ColumnDef('claimed', 'datetime')));\r
+\r
+ return true;\r
+ }\r
+\r
+ /**\r
+ * Get a microid URI for the given screenname\r
+ *\r
+ * @param string $screenname\r
+ * @return string microid URI\r
+ */\r
+ public function microiduri($screenname) {\r
+ return 'msnim:' . $screenname;\r
+ }\r
+\r
+ /**\r
+ * Send a message to a given screenname\r
+ *\r
+ * @param string $screenname Screenname to send to\r
+ * @param string $body Text to send\r
+ * @return boolean success value\r
+ */\r
+ public function sendMessage($screenname, $body) {\r
+ $this->enqueueOutgoingRaw(array('to' => $screenname, 'message' => $body));\r
+ return true;\r
+ }\r
+\r
+ /**\r
+ * Accept a queued input message.\r
+ *\r
+ * @param array $data Data\r
+ * @return true if processing completed, false if message should be reprocessed\r
+ */\r
+ public function receiveRawMessage($data) {\r
+ $this->handleIncoming($data['sender'], $data['message']);\r
+ return true;\r
+ }\r
+\r
+ /**\r
+ * Initialize plugin\r
+ *\r
+ * @return boolean\r
+ */\r
+ public function initialize() {\r
+ if (!isset($this->user)) {\r
+ throw new Exception("Must specify a user");\r
+ }\r
+ if (!isset($this->password)) {\r
+ throw new Exception("Must specify a password");\r
+ }\r
+ if (!isset($this->nickname)) {\r
+ throw new Exception("Must specify a nickname");\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ /**\r
+ * Get plugin information\r
+ *\r
+ * @param array $versions array to insert information into\r
+ * @return void\r
+ */\r
+ public function onPluginVersion(&$versions) {\r
+ $versions[] = array(\r
+ 'name' => 'MSN',\r
+ 'version' => STATUSNET_VERSION,\r
+ 'author' => 'Luke Fitzgerald',\r
+ 'homepage' => 'http://status.net/wiki/Plugin:MSN',\r
+ 'rawdescription' =>\r
+ _m('The MSN plugin allows users to send and receive notices over the MSN network.')\r
+ );\r
+ return true;\r
+ }\r
+}\r