]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/Msn/MsnPlugin.php
Merge remote branch 'statusnet/1.0.x' into msn-plugin
[quix0rs-gnu-social.git] / plugins / Msn / MsnPlugin.php
1 <?php\r
2 /**\r
3  * StatusNet - the distributed open-source microblogging tool\r
4  * Copyright (C) 2009, StatusNet, Inc.\r
5  *\r
6  * Send and receive notices using the MSN network\r
7  *\r
8  * PHP version 5\r
9  *\r
10  * This program is free software: you can redistribute it and/or modify\r
11  * it under the terms of the GNU Affero General Public License as published by\r
12  * the Free Software Foundation, either version 3 of the License, or\r
13  * (at your option) any later version.\r
14  *\r
15  * This program is distributed in the hope that it will be useful,\r
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
18  * GNU Affero General Public License for more details.\r
19  *\r
20  * You should have received a copy of the GNU Affero General Public License\r
21  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
22  *\r
23  * @category  IM\r
24  * @package   StatusNet\r
25  * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
26  * @copyright 2010 StatusNet, Inc.\r
27  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
28  * @link      http://status.net/\r
29  */\r
30 \r
31 if (!defined('STATUSNET')) {\r
32     // This check helps protect against security problems;\r
33     // your code file can't be executed directly from the web.\r
34     exit(1);\r
35 }\r
36 // We bundle the phpmsnclass library...\r
37 set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/phpmsnclass');\r
38 \r
39 /**\r
40  * Plugin for MSN\r
41  *\r
42  * @category  Plugin\r
43  * @package   StatusNet\r
44  * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
45  * @copyright 2010 StatusNet, Inc.\r
46  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
47  * @link      http://status.net/\r
48  */\r
49 \r
50 class MsnPlugin extends ImPlugin {\r
51     public $user = null;\r
52     public $password = null;\r
53     public $nickname = null;\r
54     public $transport = 'msn';\r
55     \r
56     /**\r
57      * Get the internationalized/translated display name of this IM service\r
58      *\r
59      * @return string Name of service\r
60      */\r
61     public function getDisplayName() {\r
62         return _m('MSN');\r
63     }\r
64 \r
65     /**\r
66      * Normalize a screenname for comparison\r
67      *\r
68      * @param string $screenname screenname to normalize\r
69      * @return string an equivalent screenname in normalized form\r
70      */\r
71     public function normalize($screenname) {\r
72                 $screenname = str_replace(" ","", $screenname);\r
73         return strtolower($screenname);\r
74     }\r
75 \r
76     /**\r
77      * Get the screenname of the daemon that sends and receives messages\r
78      *\r
79      * @return string Screenname\r
80      */\r
81     public function daemon_screenname() {\r
82         return $this->user;\r
83     }\r
84 \r
85     /**\r
86      * Validate (ensure the validity of) a screenname\r
87      *\r
88      * @param string $screenname screenname to validate\r
89      * @return boolean\r
90      */\r
91     public function validate($screenname) {\r
92         return Validate::email($screenname, common_config('email', 'check_domain'));\r
93     }\r
94 \r
95     /**\r
96      * Load related modules when needed\r
97      *\r
98      * @param string $cls Name of the class to be loaded\r
99      * @return boolean hook value; true means continue processing, false means stop.\r
100      */\r
101     public function onAutoload($cls) {\r
102         $dir = dirname(__FILE__);\r
103 \r
104         switch ($cls) {\r
105             case 'MSN':\r
106                 require_once(INSTALLDIR.'/plugins/Msn/extlib/phpmsnclass/msn.class.php');\r
107                 return false;\r
108             case 'MsnManager':\r
109                 include_once $dir . '/'.strtolower($cls).'.php';\r
110                 return false;\r
111             default:\r
112                 return true;\r
113         }\r
114     }\r
115 \r
116     /*\r
117      * Start manager on daemon start\r
118      * \r
119      * @return boolean\r
120      */\r
121     public function onStartImDaemonIoManagers(&$classes) {\r
122         parent::onStartImDaemonIoManagers(&$classes);\r
123         $classes[] = new MsnManager($this); // handles sending/receiving\r
124         return true;\r
125     }\r
126 \r
127     /**\r
128     * Get a microid URI for the given screenname\r
129     *\r
130     * @param string $screenname\r
131     * @return string microid URI\r
132     */\r
133     public function microiduri($screenname) {\r
134         return 'msnim:' . $screenname;\r
135     }\r
136 \r
137     /**\r
138      * Send a message to a given screenname\r
139      *\r
140      * @param string $screenname Screenname to send to\r
141      * @param string $body Text to send\r
142      * @return boolean success value\r
143      */\r
144     public function send_message($screenname, $body) {\r
145             $this->enqueue_outgoing_raw(array('to' => $screenname, 'message' => $body));\r
146         return true;\r
147     }\r
148 \r
149     /**\r
150      * Accept a queued input message.\r
151      *\r
152      * @param array $data Data\r
153      * @return true if processing completed, false if message should be reprocessed\r
154      */\r
155     public function receive_raw_message($data) {\r
156         $this->handle_incoming($data['sender'], $data['message']);\r
157         return true;\r
158     }\r
159 \r
160     /**\r
161     * Initialize plugin\r
162     *\r
163     * @return boolean\r
164     */\r
165     public function initialize() {\r
166         if (!isset($this->user)) {\r
167             throw new Exception("Must specify a user");\r
168         }\r
169         if (!isset($this->password)) {\r
170             throw new Exception("Must specify a password");\r
171         }\r
172         if (!isset($this->nickname)) {\r
173             throw new Exception("Must specify a nickname");\r
174         }\r
175 \r
176         return true;\r
177     }\r
178 \r
179     /**\r
180      * Get plugin information\r
181      * \r
182      * @param array $versions array to insert information into\r
183      * @return void\r
184      */\r
185     public function onPluginVersion(&$versions) {\r
186         $versions[] = array(\r
187             'name' => 'MSN',\r
188             'version' => STATUSNET_VERSION,\r
189             'author' => 'Luke Fitzgerald',\r
190             'homepage' => 'http://status.net/wiki/Plugin:MSN',\r
191             'rawdescription' =>\r
192             _m('The MSN plugin allows users to send and receive notices over the MSN network.')\r
193         );\r
194         return true;\r
195     }\r
196 }\r