<commit_before><?php
/*
 * Laconica - a distributed open-source microblogging tool
 * Copyright (C) 2008, Controlez-Vous, 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('LACONICA')) { exit(1); }

class Channel extends Action
{
    
    function on($user)
    {
        return false;
    }

    function off($user)
    {
        return false;
    }

    function output($user, $text)
    {
        return false;
    }
    
    function error($user, $text)
    {
        return false;
    }
    
    function source()
    {
        return null;
    }
}

class XMPPChannel extends Channel
{

    var $conn = null;
    
    function source()
    {
        return 'xmpp';
    }
    
    function __construct($conn)
    {
        $this->conn = $conn;
    }
    
    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;
        jabber_send_message($user->jabber, $text);
    }
    
    function error($user, $text)
    {
        $text = '['.common_config('site', 'name') . '] ' . $text;
        jabber_send_message($user->jabber, $text);
    }
    
    function set_notify(&$user, $notify)
    {
        $orig = clone($user);
        $user->jabbernotify = $notify;
        $result = $user->update($orig);
        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) .
                       ': ' . $last_error->message);
            return false;
        } else {
            common_log(LOG_INFO,
                       'User ' . $user->nickname . ' set notify flag to ' . $notify);
            return true;
        }
    }
}


class WebChannel extends Channel
{

    function source()
    {
        return 'web';
    }
    
    function on($user)
    {
        return false;
    }
    
    function off($user)
    {
        return false;
    }

    function output($user, $text)
    {
        # XXX: buffer all output and send it at the end
        # XXX: even better, redirect to appropriate page
        #      depending on what command was run

        common_show_header(_('Command results'));
        common_element('p', null, $text);
        common_show_footer();
    }
    
    function error($user, $text)
    {
        common_user_error($text);
    }
}


class AjaxWebChannel extends WebChannel
{

    function output($user, $text)
    {
        $this->startHTML('text/xml;charset=utf-8', true);
        $this->elementStart('head');
        $this->element('title', null, _('Command results'));
        $this->elementEnd('head');
        $this->elementStart('body');
        $this->element('p', array('id' => 'command_result'), $text);
        $this->elementEnd('body');
        $this->elementEnd('html');
    }

    function error($user, $text)
    {
        $this->startHTML('text/xml;charset=utf-8', true);
        $this->elementStart('head');
        $this->element('title', null, _('Ajax error'));
        $this->elementEnd('head');
        $this->elementStart('body');
        $this->element('p', array('id' => 'error'), $text);
        $this->elementEnd('body');
        $this->elementEnd('html');<commit_msg>Revert "Fixed direct messaging: AjaxWebChannel is now using Action's methods."<commit_after><?php
/*
 * Laconica - a distributed open-source microblogging tool
 * Copyright (C) 2008, Controlez-Vous, 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('LACONICA')) { exit(1); }

class Channel
{
    
    function on($user)
    {
        return false;
    }

    function off($user)
    {
        return false;
    }

    function output($user, $text)
    {
        return false;
    }
    
    function error($user, $text)
    {
        return false;
    }
    
    function source()
    {
        return null;
    }
}

class XMPPChannel extends Channel
{

    var $conn = null;
    
    function source()
    {
        return 'xmpp';
    }
    
    function __construct($conn)
    {
        $this->conn = $conn;
    }
    
    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;
        jabber_send_message($user->jabber, $text);
    }
    
    function error($user, $text)
    {
        $text = '['.common_config('site', 'name') . '] ' . $text;
        jabber_send_message($user->jabber, $text);
    }
    
    function set_notify(&$user, $notify)
    {
        $orig = clone($user);
        $user->jabbernotify = $notify;
        $result = $user->update($orig);
        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) .
                       ': ' . $last_error->message);
            return false;
        } else {
            common_log(LOG_INFO,
                       'User ' . $user->nickname . ' set notify flag to ' . $notify);
            return true;
        }
    }
}


class WebChannel extends Channel
{

    function source()
    {
        return 'web';
    }
    
    function on($user)
    {
        return false;
    }
    
    function off($user)
    {
        return false;
    }

    function output($user, $text)
    {
        # XXX: buffer all output and send it at the end
        # XXX: even better, redirect to appropriate page
        #      depending on what command was run
        common_show_header(_('Command results'));
        common_element('p', null, $text);
        common_show_footer();
    }
    
    function error($user, $text)
    {
        common_user_error($text);
    }
}


class AjaxWebChannel extends WebChannel
{

    function output($user, $text)
    {
        common_start_html('text/xml;charset=utf-8', true);
        common_element_start('head');
        common_element('title', null, _('Command results'));
        common_element_end('head');
        common_element_start('body');
        common_element('p', array('id' => 'command_result'), $text);
        common_element_end('body');
        common_element_end('html');
    }

    function error($user, $text)
    {
        common_start_html('text/xml;charset=utf-8', true);
        common_element_start('head');
        common_element('title', null, _('Ajax Error'));
        common_element_end('head');
        common_element_start('body');
        common_element('p', array('id' => 'error'), $text);
        common_element_end('body');
        common_element_end('html');
{'fraction_non_alphanumeric': 0.1307832422586521, 'fraction_numerical': 0.0024286581663630845, 'mean_word_length': 2.129179331306991, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 43, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5282053', 'n_tokens_mistral': 2472, 'n_tokens_neox': 2409, 'n_words': 638}