]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Msn/MsnPlugin.php
Merge branch '1.0.x' of git://gitorious.org/statusnet/mainline into 1.0.x
[quix0rs-gnu-social.git] / plugins / Msn / MsnPlugin.php
index 5566b543027cf7598c446a39eeaaaebec782aaf3..187486eedcb687aa4e75a429ef09446a8864d9a1 100644 (file)
-<?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