<?php 
/** 
 * Private message module 
 * 
 * You may not change or alter any portion of this comment or credits 
 * of supporting developers from this source code or any supporting source code 
 * which is considered copyrighted (c) material of the original comment or credit authors. 
 * 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. 
 * 
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org) 
 * @license             GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html) 
 * @package             pm 
 * @since               2.3.0 
 * @author              Jan Pedersen 
 * @author              Taiwen Jiang <[email protected]> 
 */ 
 
include_once dirname(dirname(__DIR__)) . '/mainfile.php'; 
 
if (!is_object($GLOBALS['xoopsUser'])) { 
    redirect_header(XOOPS_URL, 3, _NOPERM); 
} 
$valid_op_requests = array('out', 'save', 'in'); 
$_REQUEST['op']    = !empty($_REQUEST['op']) && in_array($_REQUEST['op'], $valid_op_requests) ? $_REQUEST['op'] : 'in'; 
$msg_id            = empty($_REQUEST['msg_id']) ? 0 : (int)$_REQUEST['msg_id']; 
$pm_handler        = xoops_getModuleHandler('message'); 
$pm                = null; 
if ($msg_id > 0) { 
    $pm = $pm_handler->get($msg_id); 
} 
 
if (is_object($pm) && ($pm->getVar('from_userid') != $GLOBALS['xoopsUser']->getVar('uid')) && ($pm->getVar('to_userid') != $GLOBALS['xoopsUser']->getVar('uid'))) { 
    redirect_header(XOOPS_URL . '/modules/' . $GLOBALS['xoopsModule']->getVar('dirname', 'n') . '/index.php', 2, _NOPERM); 
} 
 
if (is_object($pm) && !empty($_POST['action'])) { 
    if (!$GLOBALS['xoopsSecurity']->check()) { 
        echo implode('<br>', $GLOBALS['xoopsSecurity']->getErrors()); 
        exit(); 
    } 
    $res = false; 
    if (!empty($_REQUEST['email_message'])) { 
        $res = $pm_handler->sendEmail($pm, $GLOBALS['xoopsUser']); 
    } elseif (!empty($_REQUEST['move_message']) && $_REQUEST['op'] !== 'save' && !$GLOBALS['xoopsUser']->isAdmin() && $pm_handler->getSavecount() >= $GLOBALS['xoopsModuleConfig']['max_save']) { 
        $res_message = sprintf(_PM_SAVED_PART, $GLOBALS['xoopsModuleConfig']['max_save'], 0); 
    } else { 
        switch ($_REQUEST['op']) { 
            case 'out': 
                if ($pm->getVar('from_userid') != $GLOBALS['xoopsUser']->getVar('uid')) { 
                    break; 
                } 
                if (!empty($_REQUEST['delete_message'])) { 
                    $res = $pm_handler->setFromdelete($pm); 
                } elseif (!empty($_REQUEST['move_message'])) { 
                    $res = $pm_handler->setFromsave($pm); 
                } 
                break; 
            case 'save': 
                if ($pm->getVar('to_userid') == $GLOBALS['xoopsUser']->getVar('uid')) { 
                    if (!empty($_REQUEST['delete_message'])) { 
                        $res1 = $pm_handler->setTodelete($pm); 
                        $res1 = $res1 ? $pm_handler->setTosave($pm, 0) : false; 
                    } elseif (!empty($_REQUEST['move_message'])) { 
                        $res1 = $pm_handler->setTosave($pm, 0); 
                    } 
                } 
                if ($pm->getVar('from_userid') == $GLOBALS['xoopsUser']->getVar('uid')) { 
                    if (!empty($_REQUEST['delete_message'])) { 
                        $res2 = $pm_handler->setFromDelete($pm); 
                        $res2 = $res2 ? $pm_handler->setFromsave($pm, 0) : false; 
                    } elseif (!empty($_REQUEST['move_message'])) { 
                        $res2 = $pm_handler->setFromsave($pm, 0); 
                    } 
                } 
                $res = $res1 && $res2; 
                break; 
 
            case 'in': 
            default: 
                if ($pm->getVar('to_userid') != $GLOBALS['xoopsUser']->getVar('uid')) { 
                    break; 
                } 
                if (!empty($_REQUEST['delete_message'])) { 
                    $res = $pm_handler->setTodelete($pm); 
                } elseif (!empty($_REQUEST['move_message'])) { 
                    $res = $pm_handler->setTosave($pm); 
                } 
                break; 
        } 
    } 
    $res_message = isset($res_message) ? $res_message : ($res ? _PM_ACTION_DONE : _PM_ACTION_ERROR); 
    redirect_header('viewpmsg.php?op=' . htmlspecialchars($_REQUEST['op']), 2, $res_message); 
} 
$start                        = !empty($_GET['start']) ? (int)$_GET['start'] : 0; 
$total_messages               = !empty($_GET['total_messages']) ? (int)$_GET['total_messages'] : 0; 
$GLOBALS['xoopsOption']['template_main'] = 'pm_readpmsg.tpl'; 
include $GLOBALS['xoops']->path('header.php'); 
 
if (!is_object($pm)) { 
    if ($_REQUEST['op'] === 'out') { 
        $criteria = new CriteriaCompo(new Criteria('from_delete', 0)); 
        $criteria->add(new Criteria('from_userid', $GLOBALS['xoopsUser']->getVar('uid'))); 
        $criteria->add(new Criteria('from_save', 0)); 
    } elseif ($_REQUEST['op'] === 'save') { 
        $crit_to = new CriteriaCompo(new Criteria('to_delete', 0)); 
        $crit_to->add(new Criteria('to_save', 1)); 
        $crit_to->add(new Criteria('to_userid', $GLOBALS['xoopsUser']->getVar('uid'))); 
        $crit_from = new CriteriaCompo(new Criteria('from_delete', 0)); 
        $crit_from->add(new Criteria('from_save', 1)); 
        $crit_from->add(new Criteria('from_userid', $GLOBALS['xoopsUser']->getVar('uid'))); 
        $criteria = new CriteriaCompo($crit_to); 
        $criteria->add($crit_from, 'OR'); 
    } else { 
        $criteria = new CriteriaCompo(new Criteria('to_delete', 0)); 
        $criteria->add(new Criteria('to_userid', $GLOBALS['xoopsUser']->getVar('uid'))); 
        $criteria->add(new Criteria('to_save', 0)); 
    } 
 
    $criteria->setLimit(1); 
    $criteria->setStart($start); 
    $criteria->setSort('msg_time'); 
    $criteria->setOrder('DESC'); 
    list($pm) = $pm_handler->getObjects($criteria); 
} 
 
include_once $GLOBALS['xoops']->path('class/xoopsformloader.php'); 
 
$pmform = new XoopsForm('', 'pmform', 'readpmsg.php', 'post', true); 
if (is_object($pm) && !empty($pm)) { 
    if ($pm->getVar('from_userid') != $GLOBALS['xoopsUser']->getVar('uid')) { 
        $reply_button = new XoopsFormButton('', 'send', _PM_REPLY); 
        $reply_button->setExtra("onclick='javascript:openWithSelfMain(\"" . XOOPS_URL . '/modules/pm/pmlite.php?reply=1&msg_id=' . $pm->getVar('msg_id') . "\", \"pmlite\", 565,500);'"); 
        $pmform->addElement($reply_button); 
    } 
    $pmform->addElement(new XoopsFormButton('', 'delete_message', _PM_DELETE, 'submit')); 
    $pmform->addElement(new XoopsFormButton('', 'move_message', ($_REQUEST['op'] === 'save') ? _PM_UNSAVE : _PM_TOSAVE, 'submit')); 
    $pmform->addElement(new XoopsFormButton('', 'email_message', _PM_EMAIL, 'submit')); 
    $pmform->addElement(new XoopsFormHidden('msg_id', $pm->getVar('msg_id'))); 
    $pmform->addElement(new XoopsFormHidden('op', $_REQUEST['op'])); 
    $pmform->addElement(new XoopsFormHidden('action', 1)); 
    $pmform->assign($GLOBALS['xoopsTpl']); 
 
    if ($pm->getVar('from_userid') == $GLOBALS['xoopsUser']->getVar('uid')) { 
        $poster = new XoopsUser($pm->getVar('to_userid')); 
    } else { 
        $poster = new XoopsUser($pm->getVar('from_userid')); 
    } 
    if (!is_object($poster)) { 
        $GLOBALS['xoopsTpl']->assign('poster', false); 
        $GLOBALS['xoopsTpl']->assign('anonymous', $xoopsConfig['anonymous']); 
    } else { 
        $GLOBALS['xoopsTpl']->assign('poster', $poster); 
    } 
 
    if ($pm->getVar('to_userid') == $GLOBALS['xoopsUser']->getVar('uid') && $pm->getVar('read_msg') == 0) { 
        $pm_handler->setRead($pm); 
    } 
 
    $message              = $pm->getValues(); 
    $message['msg_time']  = formatTimestamp($pm->getVar('msg_time')); 
    $message['msg_image'] = htmlspecialchars($message['msg_image'], ENT_QUOTES); 
} 
$GLOBALS['xoopsTpl']->assign('message', $message); 
$GLOBALS['xoopsTpl']->assign('op', $_REQUEST['op']); 
$GLOBALS['xoopsTpl']->assign('previous', $start - 1); 
$GLOBALS['xoopsTpl']->assign('next', $start + 1); 
$GLOBALS['xoopsTpl']->assign('total_messages', $total_messages); 
 
include $GLOBALS['xoops']->path('footer.php'); 
 
 |