<?php

/*
  [UCenter] (C)2001-2099 Comsenz Inc.
  This is NOT a freeware, use is subject to license terms

  $Id: pm.php 1067 2011-03-08 10:06:51Z svn_project_zhangjie $
 */
!defined('IN_UC') && exit('Access Denied');

define('PRIVATEPMTHREADLIMIT_ERROR', -1);
define('PMFLOODCTRL_ERROR', -2);
define('PMMSGTONOTFRIEND', -3);
define('PMSENDREGDAYS', -4);
define('CHATPMTHREADLIMIT_ERROR', -5);
define('CHATPMMEMBERLIMIT_ERROR', -7);

class pmcontrol extends base
{

    function __construct()
    {
        $this->pmcontrol();
    }

    function pmcontrol()
    {
        parent::__construct();
        $this->load('user');
        $this->load('pm');
    }

    function oncheck_newpm()
    {
        $this->init_input();
        $uid = intval($this->input('uid'));
        $more = intval($this->input('more'));
        if (!$_ENV['pm']->isnewpm($uid) && !$more)
        {
            return 0;
        }
        $newprvpm = $_ENV['pm']->getpmnum($uid, 1, 1);
        $newchatpm = $_ENV['pm']->getpmnum($uid, 2, 1);
        $newpm = $newprvpm + $newchatpm;
        if ($more == 0)
        {
            return $newpm;
        }
        elseif ($more == 1)
        {
            return array('newpm' => $newpm, 'newprivatepm' => $newprvpm);
        }
        elseif ($more == 2 || $more == 3)
        {
            if ($more == 2)
            {
                return array('newpm' => $newpm, 'newprivatepm' => $newprvpm, 'newchatpm' => $newchatpm);
            }
            else
            {
                $lastpm = $_ENV['pm']->lastpm($uid);
                require_once UC_ROOT . 'lib/uccode.class.php';
                $this->uccode = new uccode();
                $lastpm['lastsummary'] = $this->uccode->complie($lastpm['lastsummary']);
                return array('newpm' => $newpm, 'newprivatepm' => $newprvpm, 'newchatpm' => $newchatpm, 'lastdate' => $lastpm['lastdateline'], 'lastmsgfromid' => $lastpm['lastauthorid'], 'lastmsgfrom' => $lastpm['lastauthorusername'], 'lastmsg' => $lastpm['lastsummary']);
            }
        }
        elseif ($more == 4)
        {
            return array('newpm' => $newpm, 'newprivatepm' => $newprvpm, 'newchatpm' => $newchatpm);
        }
        else
        {
            return 0;
        }
    }

    function onsendpm()
    {
        $this->init_input();
        $fromuid = $this->input('fromuid');
        $msgto = $this->input('msgto');
        $subject = $this->input('subject');
        $message = $this->input('message');
        $replypmid = $this->input('replypmid');
        $isusername = $this->input('isusername');
        $type = $this->input('type');

        if (!$fromuid)
        {
            return 0;
        }

        $user = $_ENV['user']->get_user_by_uid($fromuid);
        $user = daddslashes($user, 1);
        if (!$user)
        {
            return 0;
        }
        $this->user['uid'] = $user['uid'];
        $this->user['username'] = $user['username'];

        if ($replypmid)
        {
            $isusername = 0;
            $plid = $_ENV['pm']->getplidbypmid($replypmid);
            $msgto = $_ENV['pm']->getuidbyplid($plid);
            unset($msgto[$this->user['uid']]);
        }
        else
        {
            if (!empty($msgto))
            {
                $msgto = array_unique(explode(',', $msgto));
            }
        }

        if ($isusername)
        {
            $msgto = $_ENV['user']->name2id($msgto);
        }
        $countmsgto = count($msgto);

        if ($this->settings['pmsendregdays'])
        {
            if ($user['regdate'] > $this->time - $this->settings['pmsendregdays'] * 86400)
            {
                return PMSENDREGDAYS;
            }
        }
        if ($this->settings['chatpmmemberlimit'])
        {
            if ($type == 1 && ($countmsgto > ($this->settings['chatpmmemberlimit'] - 1)))
            {
                return CHATPMMEMBERLIMIT_ERROR;
            }
        }
        if ($this->settings['pmfloodctrl'])
        {
            if (!$_ENV['pm']->ispminterval($this->user['uid'], $this->settings['pmfloodctrl']))
            {
                return PMFLOODCTRL_ERROR;
            }
        }
        if ($this->settings['privatepmthreadlimit'])
        {
            if (!$_ENV['pm']->isprivatepmthreadlimit($this->user['uid'], $this->settings['privatepmthreadlimit']))
            {
                return PRIVATEPMTHREADLIMIT_ERROR;
            }
        }
        if ($this->settings['chatpmthreadlimit'])
        {
            if (!$_ENV['pm']->ischatpmthreadlimit($this->user['uid'], $this->settings['chatpmthreadlimit']))
            {
                return CHATPMTHREADLIMIT_ERROR;
            }
        }

        $lastpmid = 0;
        if ($replypmid)
        {
            $lastpmid = $_ENV['pm']->replypm($plid, $this->user['uid'], $this->user['username'], $message);
        }
        else
        {
            $lastpmid = $_ENV['pm']->sendpm($this->user['uid'], $this->user['username'], $msgto, $subject, $message, $type);
        }
        return $lastpmid;
    }

    function ondelete()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $pmids = $this->input('pmids');
        if (empty($pmids))
        {
            return 0;
        }
        if (is_array($pmids))
        {
            $this->apps = $this->cache('apps');
            if ($this->apps[$this->app['appid']]['type'] == 'UCHOME')
            {
                $id = $_ENV['pm']->deletepmbyplids($this->user['uid'], $this->input('pmids'));
            }
            else
            {
                $id = $_ENV['pm']->deletepmbypmids($this->user['uid'], $this->input('pmids'));
            }
        }
        else
        {
            $id = $_ENV['pm']->deletepmbypmid($this->user['uid'], $this->input('pmids'));
        }
        return $id;
    }

    function ondeletechat()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $plids = $this->input('plids');
        $type = intval($this->input('type'));
        if ($type == 1)
        {
            return $_ENV['pm']->deletepmbyplids($this->user['uid'], $plids);
        }
        else
        {
            return $_ENV['pm']->quitchatpm($this->user['uid'], $plids);
        }
    }

    function ondeleteuser()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $id = $_ENV['pm']->deletepmbyplids($this->user['uid'], $this->input('touids'), 1);
        return $id;
    }

    function onreadstatus()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $_ENV['pm']->setpmstatus($this->user['uid'], $this->input('uids'), $this->input('plids'), $this->input('status'));
    }

    function onignore()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        return $_ENV['pm']->set_ignore($this->user['uid']);
    }

    function onls()
    {
        $this->init_input();
        $pagesize = $this->input('pagesize');
        $filter = $this->input('filter');
        $page = $this->input('page');
        $msglen = $this->input('msglen');
        $this->user['uid'] = intval($this->input('uid'));

        $filter = $filter ? (in_array($filter, array('newpm', 'privatepm')) ? $filter : '') : '';
        if ($filter == 'newpm')
        {
            $type = 0;
            $new = 1;
        }
        elseif ($filter == 'privatepm')
        {
            $type = 0;
            $new = 0;
        }
        else
        {
            return array();
        }
        $pmnum = $_ENV['pm']->getpmnum($this->user['uid'], $type, $new);
        $start = $this->page_get_start($page, $pagesize, $pmnum);

        if ($pagesize > 0)
        {
            $pms = $_ENV['pm']->getpmlist($this->user['uid'], $filter, $start, $pagesize);
            if (is_array($pms) && !empty($pms))
            {
                foreach ($pms as $key => $pm)
                {
                    if ($msglen)
                    {
                        $pms[$key]['lastsummary'] = $_ENV['pm']->removecode($pms[$key]['lastsummary'], $msglen);
                    }
                    else
                    {
                        unset($pms[$key]['lastsummary']);
                    }
                }
            }
            $result['data'] = $pms;
        }
        $result['count'] = $pmnum;
        return $result;
    }

    function onview()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $pmid = $this->input('pmid');
        $touid = $this->input('touid');
        $daterange = $this->input('daterange');
        $page = $this->input('page');
        $pagesize = $this->input('pagesize');
        $isplid = $this->input('isplid');
        $type = $this->input('type');

        $daterange = empty($daterange) ? 1 : $daterange;
        $today = $this->time - ($this->time + $this->settings['timeoffset']) % 86400;
        if ($daterange == 1)
        {
            $starttime = $today;
        }
        elseif ($daterange == 2)
        {
            $starttime = $today - 86400;
        }
        elseif ($daterange == 3)
        {
            $starttime = $today - 172800;
        }
        elseif ($daterange == 4)
        {
            $starttime = $today - 604800;
        }
        elseif ($daterange == 5)
        {
            $starttime = 0;
        }
        $endtime = $this->time;

        if (!$isplid)
        {
            $plid = $_ENV['pm']->getplidbytouid($this->user['uid'], $touid);
        }
        else
        {
            $plid = $touid;
        }
        if ($page)
        {
            $pmnum = $_ENV['pm']->getpmnumbyplid($this->user['uid'], $plid);
            $start = $this->page_get_start($page, $pagesize, $pmnum);
            $ppp = $pagesize;
        }
        else
        {
            $pmnum = 0;
            $start = 0;
            $ppp = 0;
        }

        if ($pmid)
        {
            $pms = $_ENV['pm']->getpmbypmid($this->user['uid'], $pmid);
        }
        else
        {
            $pms = $_ENV['pm']->getpmbyplid($this->user['uid'], $plid, $starttime, $endtime, $start, $ppp, $type);
        }

        require_once UC_ROOT . 'lib/uccode.class.php';
        $this->uccode = new uccode();
        if ($pms)
        {
            foreach ($pms as $key => $pm)
            {
                $pms[$key]['message'] = $this->uccode->complie($pms[$key]['message']);
            }
        }
        return $pms;
    }

    function onviewnum()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $touid = $this->input('touid');
        $isplid = $this->input('isplid');
        if (!$isplid)
        {
            $plid = $_ENV['pm']->getplidbytouid($this->user['uid'], $touid);
        }
        else
        {
            $plid = $touid;
        }
        $pmnum = $_ENV['pm']->getpmnumbyplid($this->user['uid'], $plid);
        return $pmnum;
    }

    function onviewnode()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $type = $this->input('type');
        $pmid = $this->input('pmid');
        $type = 0;
        $pms = $_ENV['pm']->getpmbypmid($this->user['uid'], $pmid);

        require_once UC_ROOT . 'lib/uccode.class.php';
        $this->uccode = new uccode();
        if ($pms)
        {
            foreach ($pms as $key => $pm)
            {
                $pms[$key]['message'] = $this->uccode->complie($pms[$key]['message']);
            }
        }
        $pms = $pms[0];
        return $pms;
    }

    function onchatpmmemberlist()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $plid = intval($this->input('plid'));
        return $_ENV['pm']->chatpmmemberlist($this->user['uid'], $plid);
    }

    function onkickchatpm()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $plid = intval($this->input('plid'));
        $touid = intval($this->input('touid'));
        return $_ENV['pm']->kickchatpm($plid, $this->user['uid'], $touid);
    }

    function onappendchatpm()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $plid = intval($this->input('plid'));
        $touid = intval($this->input('touid'));
        return $_ENV['pm']->appendchatpm($plid, $this->user['uid'], $touid);
    }

    function onblackls_get()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        return $_ENV['pm']->get_blackls($this->user['uid']);
    }

    function onblackls_set()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $blackls = $this->input('blackls');
        return $_ENV['pm']->set_blackls($this->user['uid'], $blackls);
    }

    function onblackls_add()
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $username = $this->input('username');
        return $_ENV['pm']->update_blackls($this->user['uid'], $username, 1);
    }

    function onblackls_delete($arr)
    {
        $this->init_input();
        $this->user['uid'] = intval($this->input('uid'));
        $username = $this->input('username');
        return $_ENV['pm']->update_blackls($this->user['uid'], $username, 2);
    }

}
