<?php 
 
/** 
 * xoInboxCount lets templates access private message inbox statistics for the current user 
 * 
 * Example: <{xoInboxCount assign='unread_count' total='inbox_total'}> 
 * 
 * Both assign and total parameters are optional. If neither is specified the unread count is displayed. 
 * - assign = variable name to assign with the current unread message count 
 * - total  = variable name to assign with the current inbox total 
 * 
 * @param $params 
 * @param $smarty 
 * @return null 
 */ 
function smarty_function_xoInboxCount($params, &$smarty) 
{ 
    global $xoopsUser; 
 
    if (!isset($xoopsUser) || !is_object($xoopsUser)) { 
        return null; 
    } 
    $time = time(); 
    if (isset($_SESSION['xoops_inbox_count']) && @$_SESSION['xoops_inbox_count_expire'] > $time) { 
        $totals['assign'] = (int)$_SESSION['xoops_inbox_count']; 
        $totals['total'] = (int)$_SESSION['xoops_inbox_total']; 
    } else { 
        $pm_handler = xoops_getHandler('privmessage'); 
 
        $xoopsPreload = XoopsPreload::getInstance(); 
        $xoopsPreload->triggerEvent('core.class.smarty.xoops_plugins.xoinboxcount', array($pm_handler)); 
 
        $criteria = new CriteriaCompo(new Criteria('to_userid', $xoopsUser->getVar('uid'))); 
        $totals['total'] = $pm_handler->getCount($criteria); 
 
        $criteria->add(new Criteria('read_msg', 0)); 
        $totals['assign'] = $pm_handler->getCount($criteria); 
 
        $_SESSION['xoops_inbox_count'] = $totals['assign']; 
        $_SESSION['xoops_inbox_total'] = $totals['total']; 
        $_SESSION['xoops_inbox_count_expire'] = $time + 60; 
    } 
 
    $printCount = true; 
    foreach ($totals as $key => $count) { 
        if (!empty($params[$key])) { 
            $smarty->assign($params[$key], $count); 
            $printCount = false; 
        } 
    } 
    if ($printCount) { 
        echo $totals['assign']; 
    } 
} 
 
 |