e107inc/e107

View on GitHub
e107_plugins/pm/pm_func.php

Summary

Maintainability
A
0 mins
Test Coverage
F
52%
<?php
/*
 * e107 website system
 *
 * Copyright (C) 2008-2014 e107 Inc (e107.org)
 * Released under the terms and conditions of the
 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
 *
 *    Private messenger plugin - utility functions
 *
 */

if (!defined('e107_INIT')) { exit; }

class pmbox_manager
{
    protected    $pmPrefs = array();
    protected     $pmDB;

    public function __construct($prefs='')
    {
        $this->pmDB = e107::getDb();
        // $this->pmPrefs = $prefs;
        
        $this->pmPrefs = e107::pref('pm');
    }


    public function prefs()
    {
        return $this->pmPrefs;

    }


    /**
     *    Get the box-related information for inbox or outbox - limits, message count etc
     *    The information read from the DB is cached internally for efficiency
     *
     *    @param    string $which = inbox|outbox|clear
     *
     *    @return    array
     *    
     */
    function pm_getInfo($which = 'inbox')
    {
        static $pm_info;

        if('clear' == $which)
        {
            unset($pm_info['inbox']);
            unset($pm_info['outbox']);
            return;
        }

        if('inbox' == $which)
        {
            $qry = "SELECT count(pm.pm_id) AS total, SUM(pm.pm_size)/1024 size, SUM(pm.pm_read = 0) as unread FROM `#private_msg` as pm WHERE pm.pm_to = ".USERID." AND pm.pm_read_del = 0";
        }
        else
        {
            $qry = "SELECT count(pm.pm_from) AS total, SUM(pm.pm_size)/1024 size, SUM(pm.pm_read = 0) as unread FROM `#private_msg` as pm WHERE pm.pm_from = ".USERID." AND pm.pm_sent_del = 0";
        }

        if(!isset($pm_info[$which]['total']))
        {
            $this->pmDB->gen($qry);
            $pm_info[$which] = $this->pmDB->fetch();
            if ($which == 'inbox' && (!empty($this->pmPrefs['animate']) || !empty($this->pmPrefs['popup'])))
            {
                if($new = $this->pmDB->count('private_msg', '(*)', "WHERE pm_sent > '".USERLV."' AND pm_read = 0 AND pm_to = '".USERID."' AND pm_read_del != 1"))
                {
                    $pm_info['inbox']['new'] = $new;
                }
                else
                {
                    $pm_info['inbox']['new'] = 0;
                }
            }
        }

        if(!isset($pm_info[$which]['limit']))
        {
            if(varset($this->pmPrefs['pm_limits'],0) > 0)
            {
                if($this->pmPrefs['pm_limits'] == 1)
                {
                    $qry = "SELECT MAX(gen_user_id) AS inbox_limit, MAX(gen_ip) as outbox_limit FROM `#generic` WHERE gen_type='pm_limit' AND gen_datestamp IN (".USERCLASS_LIST.")";
                }
                else
                {
                    $qry = "SELECT MAX(gen_intdata) AS inbox_limit, MAX(gen_chardata) as outbox_limit FROM `#generic` WHERE gen_type='pm_limit' AND gen_datestamp IN (".USERCLASS_LIST.")";
                }
                if($this->pmDB->gen($qry))
                {
                    $row = $this->pmDB->fetch();
                    $pm_info['inbox']['limit'] =  $row['inbox_limit'];
                    $pm_info['outbox']['limit'] =  $row['outbox_limit'];
                }
                $pm_info['inbox']['limit_val'] = ($this->pmPrefs['pm_limits'] == 1 ? varset($pm_info['inbox']['total'],'') : varset($pm_info['inbox']['size'],''));
                if(!$pm_info['inbox']['limit'] || !$pm_info['inbox']['limit_val'])
                {
                    $pm_info['inbox']['filled'] = 0;
                }
                else
                {
                    $pm_info['inbox']['filled'] = number_format($pm_info['inbox']['limit_val']/$pm_info['inbox']['limit'] * 100, 2);
                }
                $pm_info['outbox']['limit_val'] = ($this->pmPrefs['pm_limits'] == 1 ? varset($pm_info['outbox']['total'],'') : varset($pm_info['outbox']['size'],''));
                if(!$pm_info['outbox']['limit'] || !$pm_info['outbox']['limit_val'])
                {
                    $pm_info['outbox']['filled'] = 0;
                }
                else
                {
                    $pm_info['outbox']['filled'] = number_format($pm_info['outbox']['limit_val']/$pm_info['outbox']['limit'] * 100, 2);
                }
            }
            else
            {
                if (!isset($pm_info['inbox']) || !is_array($pm_info['inbox'])) $pm_info['inbox'] = [];
                if (!isset($pm_info['outbox']) || !is_array($pm_info['outbox'])) $pm_info['outbox'] = [];

                $pm_info['inbox']['limit'] = '';
                $pm_info['outbox']['limit'] = '';
                $pm_info['inbox']['filled'] = '';
                $pm_info['outbox']['filled'] = '';
            }
        }
        return $pm_info;
    }

}

// Backward compat. fix.
function pm_getInfo($which = 'inbox')
{
    $pm = new pmbox_manager;

    return $pm->pm_getInfo($which);

}