]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/imchannel.php
Create IM plugin, Pluginize XMPP, Create AIM plugin
[quix0rs-gnu-social.git] / lib / imchannel.php
diff --git a/lib/imchannel.php b/lib/imchannel.php
new file mode 100644 (file)
index 0000000..12354ce
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * 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/>.
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class IMChannel extends Channel
+{
+
+    var $imPlugin;
+
+    function source()
+    {
+        return $imPlugin->transport;
+    }
+
+    function __construct($imPlugin)
+    {
+        $this->imPlugin = $imPlugin;
+    }
+
+    function on($user)
+    {
+        return $this->set_notify($user, 1);
+    }
+
+    function off($user)
+    {
+        return $this->set_notify($user, 0);
+    }
+
+    function output($user, $text)
+    {
+        $text = '['.common_config('site', 'name') . '] ' . $text;
+        $this->imPlugin->send_message($this->imPlugin->get_screenname($user), $text);
+    }
+
+    function error($user, $text)
+    {
+        $text = '['.common_config('site', 'name') . '] ' . $text;
+
+        $screenname = $this->imPlugin->get_screenname($user);
+        if($screenname){
+            $this->imPlugin->send_message($screenname, $text);
+            return true;
+        }else{
+            common_log(LOG_ERR,
+                'Could not send error message to user ' . common_log_objstring($user) .
+                ' on transport ' . $this->imPlugin->transport .' : user preference does not exist');
+            return false;
+        }
+    }
+
+    function set_notify($user, $notify)
+    {
+        $user_im_prefs = new User_im_prefs();
+        $user_im_prefs->transport = $this->imPlugin->transport;
+        $user_im_prefs->user_id = $user->id;
+        if($user_im_prefs->find() && $user_im_prefs->fetch()){
+            if($user_im_prefs->notify == $notify){
+                //notify is already set the way they want
+                return true;
+            }else{
+                $original = clone($user_im_prefs);
+                $user_im_prefs->notify = $notify;
+                $result = $user_im_prefs->update($original);
+
+                if (!$result) {
+                    $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
+                    common_log(LOG_ERR,
+                               'Could not set notify flag to ' . $notify .
+                               ' for user ' . common_log_objstring($user) .
+                               ' on transport ' . $this->imPlugin->transport .' : ' . $last_error->message);
+                    return false;
+                } else {
+                    common_log(LOG_INFO,
+                               'User ' . $user->nickname . ' set notify flag to ' . $notify);
+                    return true;
+                }
+            }
+        }else{
+                common_log(LOG_ERR,
+                           'Could not set notify flag to ' . $notify .
+                           ' for user ' . common_log_objstring($user) .
+                           ' on transport ' . $this->imPlugin->transport .' : user preference does not exist');
+                return false;
+        }
+    }
+}