<?php
    /*
    || #################################################################### ||
    || #                             ArrowChat                            # ||
    || # ---------------------------------------------------------------- # ||
    || #    Copyright ©2010-2012 ArrowSuites LLC. All Rights Reserved.    # ||
    || # This file may not be redistributed in whole or significant part. # ||
    || # ---------------- ARROWCHAT IS NOT FREE SOFTWARE ---------------- # ||
    || #   http://www.arrowchat.com | http://www.arrowchat.com/license/   # ||
    || #################################################################### ||
    */
    
    /**
     * This function returns the user ID of the logged in user on your site.  Technical support will not
     * help you with this for stand-alone installations.  You must purchase the professional installation
     * if you are having trouble.
     *
     * Suggestion: Check out the other integration files in the functions/integrations directory for
     * many examples of how this can be done.  The easiest way is to get the user ID through a cookie.
     *
     * @return the user ID of the logged in user or NULL if not logged in
     */
    function get_user_id()
    {
        global $db;
        
        $userid = NULL;
        
        $m = new Memcached();
        $m->addServer('127.0.0.1', 11211);
        if (!empty($_COOKIE['xf_session']))
        {   
            $session = $m->get('xf_session_' . $_COOKIE['xf_session']);
            
            if (!empty($session))
            {
                $data = unserialize($session[0]);
                $data = unserialize($data);
                $userid = $data['user_id'];
                
                if (!empty($userid))
                {
                    $result = $db->execute("
                        SELECT is_banned, user_state
                        FROM " . TABLE_PREFIX . DB_USERTABLE . "
                        WHERE " . DB_USERTABLE_USERID . " = '" . $userid . "'
                    ");
                    
                    if ($row = $db->fetch_array($result))
                    {
                        if ($row['is_banned'] == 1 OR $row['user_state'] == 'email_confirm' OR $row['user_state'] == 'moderated' OR $data['isIpBanned']['result'] == true)
                        {
                            $userid = NULL;
                        }
                    }
                }
            }
        }
        return $userid;
    }
    /**
     * This function returns the SQL statement for the buddylist of the user.  You should retrieve
     * all ONLINE friends that the user is friends with.  Do not retrieve offline users.  You can use
     * global $online_timeout to get the online timeout.
     * ex: AND (arrowchat_status.session_time + 60 + " . $online_timeout . ") > " . time() . "
     *
     * @param userid the user ID of the person receiving the buddylist
     * @param the time of the buddylist request
     * @return the SQL statement to retrieve the user's friend list
     */
    function get_friend_list($userid, $time)
    {
        global $db;
        global $online_timeout;
        
        $sql = ("
            SELECT DISTINCT " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " userid, " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . " username, arrowchat_status.session_time lastactivity, " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_AVATAR . " avatar, CONCAT(" . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . ",'.'," . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . ") link, arrowchat_status.is_admin, arrowchat_status.status
            FROM " . TABLE_PREFIX . DB_FRIENDSTABLE . "
            JOIN " . TABLE_PREFIX . DB_USERTABLE . "
                ON  " . TABLE_PREFIX . DB_FRIENDSTABLE . "." . DB_FRIENDSTABLE_FRIENDID . " = " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . "
            LEFT JOIN arrowchat_status
                ON " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " = arrowchat_status.userid
            WHERE " . TABLE_PREFIX . DB_FRIENDSTABLE . "." . DB_FRIENDSTABLE_USERID . " = '" . $db->escape_string($userid) . "'
                AND arrowchat_status.session_time > (" . time() . " - " . $online_timeout . " - 60)
            ORDER BY " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . " ASC
        ");
        
        return $sql;
    }
    /**
     * This function returns the SQL statement for all online users.  You should retrieve
     * all ONLINE users regardless of friend status.  Do not retrieve offline users.  You can use
     * global $online_timeout to get the online timeout.
     * ex: AND (arrowchat_status.session_time + 60 + " . $online_timeout . ") > " . time() . "
     *
     * @param userid the user ID of the person receiving the buddylist
     * @param the time of the buddylist request
     * @return the SQL statement to retrieve all online users
     */
    function get_online_list($userid, $time)
    {
        global $db;
        global $online_timeout;
        
        $sql = ("
            SELECT DISTINCT " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " userid, " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . " username, arrowchat_status.session_time lastactivity, " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_AVATAR . " avatar, CONCAT(" . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . ",'.'," . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . ") link, arrowchat_status.is_admin, arrowchat_status.status
            FROM " . TABLE_PREFIX . DB_USERTABLE . "
            JOIN arrowchat_status
                ON " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " = arrowchat_status.userid 
            WHERE arrowchat_status.session_time > (" . time() . " - " . $online_timeout . " - 60)
                AND " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " != '" . $db->escape_string($userid) . "'
            ORDER BY " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . " ASC
        ");
        
        return $sql;
    }
    /**
     * This function returns the SQL statement to get the user details of a specific user.  You should
     * get the user's ID, username, last activity time in unix, link to their profile, avatar, and status.
     *
     * @param userid the user ID to get the details of
     * @return the SQL statement to retrieve the user's defaults
     */
    function get_user_details($userid)
    {
        global $db;
        
        $sql = ("
            SELECT " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " userid, " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . " username, arrowchat_status.session_time lastactivity,  CONCAT(" . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . ",'.'," . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . ") link,  " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_AVATAR . " avatar, arrowchat_status.is_admin, arrowchat_status.status
            FROM " . TABLE_PREFIX . DB_USERTABLE . "
            LEFT JOIN arrowchat_status
                ON " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " = arrowchat_status.userid
            WHERE " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " = '" . $db->escape_string($userid) . "'
        ");
        
        return $sql;
    }
    /**
     * This function returns the profile link of the specified user ID.
     *
     * @param userid the user ID to get the profile link of
     * @return the link of the user ID's profile
     */
    function get_link($link, $user_id)
    {
        global $base_url;
        
        return $base_url . '../index.php?members/' . $link;
    }
    /**
     * This function returns the URL of the avatar of the specified user ID.
     *
     * @param userid the user ID of the user
     * @param image if the image includes more than just a user ID, this param is passed
     * in from the avatar row in the buddylist and get user details functions.
     * @return the link of the user ID's avatar
     */
    function get_avatar($image, $user_id)
    {
        global $base_url;
        
        $group = floor($user_id / 1000);
        
        if (!empty($image))
        {
            $md5 = md5(strtolower(trim($image)));
            return 'https://secure.gravatar.com/avatar/' . $md5 . '?s=50';
        }
        else if (is_file(dirname(dirname(dirname(__FILE__))) . '/data/avatars/s/' . $group . '/' . $user_id . '.jpg'))
        {
            return $base_url . '../data/avatars/s/' . $group . '/' . $user_id . '.jpg';
        }
        else
        {
            return $base_url . AC_FOLDER_ADMIN . "/images/img-no-avatar.png";
        }
    }
    
    /**
     * This function returns the group ID of the user into an array.
     *
     * @param userid the user ID of the user
     * @return an array of groups the user is in or NULL if no groups
     */
    function get_group_id($userid)
    {
        global $db;
        
        $group_ids = array();
      
        $result = $db->execute("
            SELECT user_group_id, secondary_group_ids
            FROM " . TABLE_PREFIX . DB_USERTABLE . "
            WHERE " . DB_USERTABLE_USERID . " = '" . $db->escape_string($userid) . "'
        ");
      
        if ($result AND $db->count_select() > 0)
        {     
            if ($row = $db->fetch_array($result))
            {
                $group_ids[] = $row['user_group_id'];
                
                $tmp = explode(",", $row['secondary_group_ids']);
                
                foreach ($tmp as $val)
                {
                    if (!empty($val))
                        $group_ids[] = $val;
                }
            }
            
            return $group_ids;
        }
        else
        {
            return NULL;
        }
    }
    
    /**
     * This function returns an array of all the groups and their names so that
     * the ArrowChat admin panel can manage them.
     *
     * @return nested arrays of the group IDs and names. The nested array must follow:
               array(group id, group name)
     */
    function get_all_groups()
    {
        global $db;
        
        $groups = array();
        
        $result = $db->execute("
            SELECT user_group_id, title
            FROM " . TABLE_PREFIX . "user_group
        ");
        
        if ($result AND $db->count_select() > 0)
        {     
            while ($row = $db->fetch_array($result))
            {
                $groups[] = array($row['user_group_id'], $row['title']);
            }
            
            return $groups;
        }
        else
        {
            return NULL;
        }
    }
    /**
     * This function returns the name of the logged in user.  You should not need to
     * change this function.
     *
     * @param userid the user ID of the user
     * @return the name of the user
     */
    function get_username($userid)
    {
        global $db;
        global $language;
        global $show_full_username;
        
        $users_name = $language[83];
        $result = $db->execute("
            SELECT " . DB_USERTABLE_NAME . " name
            FROM " . TABLE_PREFIX . DB_USERTABLE . "
            WHERE " . DB_USERTABLE_USERID . " = '" . $db->escape_string($userid) . "'
        "); 
        if ($result AND $db->count_select() > 0) 
        {
            $row = $db->fetch_array($result);
            $users_name = $row['name'];
        }
        $pieces = explode(" ", $users_name);
        
        if ($show_full_username == 1)
        {
            return $users_name;
        }
        else
        {
            return $pieces[0];
        }
    }
?>