Title: Avatar Upload v1.0

Author: John Briggs

Description:
This modification will provide a control to set avatar uploads to off.
This modification will provide a control to set who can upload avatars.
This modification will provide a control to set whether all members or just staff can upload avatars.
This modification will provide a control in member control panel to upload avatars.
This modification will provide a new interface for avatar options in control panel.
This modification will provide a new interface that cosmeticaly alters all avatar related content in admin settings.
This modification will require GD2 Extension for this hack to work!

Copyright:  2009 John Briggs. All rights reserved.

Compatability: XMB 1.9.8 SP3

Updated for 1.9.8 by: WormHole @ XMB Garage

Install Note: Before adding this modification to your forum, you should back up all files related to this modification.

License Note: This modification is released under the GPL License. A copy is provided with this software package.

Author Note:
You downloaded this modification from XMBGarage.com, the #1 source for XMB related downloads.
Please visit http://www.xmbgarage.com/ for support.

=======================================================================================================================================
=======
Step 1:
=======
==============================
Go To Admin Panel -> Insert Raw SQL
==============================

Upload provided file named "SQL.txt" & click the "Submit Changes" button.

=======================================================================================================================================
=======
Step 2:
=======
==============
Edit File: cp.php
==============
==========
Find Code:
==========

        $avchecked[0] = $avchecked[1] = $avchecked[2] = false;
        if (!empty($avatarlist)) {
            $avchecked[1] = true;
        } else if (!empty($avataroff)) {
            $avchecked[2] = true;
        } else {
            $avchecked[0] = true;
        }

===============
Add Code Below:
===============

        // Avatar Upload Mod Begin
        $avuchecked[0] = $avuchecked[1] = $avuchecked[2] = false;
        switch ($SETTINGS['avatar_whocanupload']) {
            case 'off':
                $avuchecked[0] = true;
                break;
            case 'all':
                $avuchecked[1] = true;
                break;
            default:
                $avuchecked[2] = true;
                break;
        }
        // Avatar Upload Mod End

==========
Find Code:
==========

        $lang['spell_checker'] .= $spell_off_reason;

===============
Add Code Below:
===============

        // Avatar Upload Mod Begin
        $SETTINGS['avatar_filesize'] = (int) $SETTINGS['avatar_filesize'];
        $SETTINGS['avatar_max_width'] = (int) $SETTINGS['avatar_max_width'];
        $SETTINGS['avatar_max_height'] = (int) $SETTINGS['avatar_max_height'];
        $SETTINGS['avatar_path'] = stripslashes($SETTINGS['avatar_path']);
        $SETTINGS['avatar_new_width'] = (int) $SETTINGS['avatar_new_width'];
        $SETTINGS['avatar_new_height'] = (int) $SETTINGS['avatar_new_height'];
        // Avatar Upload Mod End

==================
Find Code And Delete:
==================

        printsetting3($lang['textavastatus'], 'avastatusnew', array($lang['texton'], $lang['textlist'], $lang['textoff']), array('on', 'list', 'off'), $avchecked, false);

=====================
Find Code And Delete:
=====================

        printsetting2($lang['max_avatar_size_w'], 'max_avatar_size_w_new', $max_avatar_sizes[0], 4);
        printsetting2($lang['max_avatar_size_h'], 'max_avatar_size_h_new', $max_avatar_sizes[1], 4);

==========
Find Code:
==========

        printsetting4($lang['tickercontents'], 'tickercontentsnew', stripslashes($SETTINGS['tickercontents']), 5, 50);
        ?>

===============
Add Code Below:
===============

        <!-- Avatar Upload Mod Begin -->
        <tr class="tablerow">
        <td bgcolor="<?php echo $THEME['altbg2']?>" colspan="2">&nbsp;</td>
        </tr>
        <tr class="category">
        <td colspan="2"><strong><font color="<?php echo $THEME['cattext']?>">&raquo;&nbsp;<?php echo $lang['avatar_main_settings']?></font></strong></td>
        </tr>
        <?php
        printsetting3($lang['textavastatus'], 'avastatusnew', array($lang['texton'], $lang['textlist'], $lang['textoff']), array('on', 'list', 'off'), $avchecked, false);
        printsetting3($lang['avatarwhoupload'], 'avatar_whocanuploadnew', array($lang['textoff'], $lang['avatarupall'], $lang['avatarupstaff']), array('off', 'all', 'staff'), $avuchecked, false);
        printsetting2($lang['avatarfilesize'], 'avatar_filesizenew', ((int)$SETTINGS['avatar_filesize']), 5);
        printsetting2($lang['avatarwdimensions'], 'avatar_max_widthnew', ((int)$SETTINGS['avatar_max_width']), 4);
        printsetting2($lang['avatarhdimensions'], 'avatar_max_heightnew', ((int)$SETTINGS['avatar_max_height']), 4);
        printsetting2($lang['avatar_newwresize'], 'avatar_new_widthnew', ((int)$SETTINGS['avatar_new_width']), 4);
        printsetting2($lang['avatar_newhresize'], 'avatar_new_heightnew', ((int)$SETTINGS['avatar_new_height']), 4);
        printsetting2($lang['avatar_path'], 'avatar_pathnew', stripslashes($SETTINGS['avatar_path']), 20);
        printsetting2($lang['max_avatar_size_w'], 'max_avatar_size_w_new', $max_avatar_sizes[0], 4);
        printsetting2($lang['max_avatar_size_h'], 'max_avatar_size_h_new', $max_avatar_sizes[1], 4);
        ?>
        <!-- Avatar Upload Mod End -->

==========
Find Code:
==========

        $avastatusnew = formOnOff('avastatusnew');

===============
Add Code Below:
===============

        // Avatar Upload Mod Begin
        $avatar_whocanuploadnew = ($avatar_whocanuploadnew == 'off') ? 'off' : ($avatar_whocanuploadnew == 'all' ? 'all' : 'staff');
        // Avatar Upload Mod End

==========
Find Code:
==========

        $db->query("UPDATE ".X_PREFIX."settings SET

================
Replace Code With:
================

        $db->query("UPDATE ".X_PREFIX."settings SET
            avatar_whocanupload='$avatar_whocanuploadnew',
            avatar_filesize='$avatar_filesizenew',
            avatar_max_width='$avatar_max_widthnew',
            avatar_max_height='$avatar_max_heightnew',
            avatar_path='$avatar_pathnew',
            avatar_new_width='$avatar_new_widthnew',
            avatar_new_height='$avatar_new_heightnew',

=======================================================================================================================================================
=======
Step 3:
=======
=================
Edit File: memcp.php
=================
==========
Find Code:
==========

loadtemplates(

================
Replace Code With:
================

loadtemplates(
'memcp_profile_avatarhidden',
'memcp_profile_useravatar',

==========
Find Code:
==========

        $avatar = '';
        if ($SETTINGS['avastatus'] == 'on') {
            eval('$avatar = "'.template('memcp_profile_avatarurl').'";');
        }

        if ($SETTINGS['avastatus'] == 'list')  {
            $avatars = '<option value="" />'.$lang['textnone'].'</option>';
            $dir1 = opendir(ROOT.'images/avatars');
            while($avatar1 = readdir($dir1)) {
                if (is_file(ROOT.'images/avatars/'.$avatar1)) {
                    $avatars .= '<option value="'.ROOT.'images/avatars/'.$avatar1.'" />'.$avatar1.'</option>';
                }
            }
            $avatars = str_replace('value="'.$member['avatar'].'"', 'value="'.$member['avatar'].'" selected="selected"', $avatars);
            $avatarbox = '<select name="newavatar" onchange="document.images.avatarpic.src=this[this.selectedIndex].value;">'.$avatars.'</select>';
            eval('$avatar = "'.template('memcp_profile_avatarlist').'";');
            closedir($dir1);
        }

================
Replace Code With:
================

        // Avatar Upload Mod Begin
        $avatar = '';
        if ($SETTINGS['avastatus'] == 'on') {
            eval('$avatar = "'.template('memcp_profile_avatarurl').'";');
        }

        if ($SETTINGS['avastatus'] == 'list' && isset($_POST['avatardel']) != 1) {
            $avatars = '<option value="">'.$lang['textnone'].'</option>';
            $dir1 = opendir(ROOT.'images/avatars');
            while ($avatar1 = readdir($dir1)) {
                if (is_file(ROOT.'images/avatars/'.$avatar1)) {
                    $avatars .= '<option value="'.ROOT.'images/avatars/'.$avatar1.'">'.$avatar1.'</option>';
                }
            }
            $avatars = str_replace('value="'.$member['avatar'].'"', 'value="'.$member['avatar'].'" selected="selected"', $avatars);
            $avatarbox = '<select name="newavatar" onchange="document.images.avatarpic.src=this[this.selectedIndex].value;">'.$avatars.'</select>';
            eval('$avatar = "'.template('memcp_profile_avatarlist').'";');
            closedir($dir1);
        }

        $useravatar = $avdeletebutton = $avatarhidden = '';
        if ($SETTINGS['avatar_whocanupload'] != 'off' || $SETTINGS['avastatus'] != 'off') {
            if (!empty($member['avatar'])) {
                eval('$useravatar = "'.template('memcp_profile_useravatar').'";');
                $avdeletebutton = '<br /><input type="checkbox" name="avatardel" value="1" />'.$lang['avatardelete'].'';
            }

            $avatarhidden = '';
            switch ($SETTINGS['avatar_whocanupload']) {
                case 'all':
                    eval('$avatarhidden = "'.template('memcp_profile_avatarhidden').'";');
                    break;
                case 'staff':
                    eval('$avatarhidden = "'.template('memcp_profile_avatarhidden').'";');
                    break;
                default:
                    $avatarhidden = '';
                    break;
            }
        }
        // Avatar Upload Mod End

==========
Find Code:
==========

        $newavatar = formVar('newavatar');
        $avatar = $newavatar ? checkInput($newavatar, 'no', 'yes', 'javascript', false) : '';

================
Replace Code With:
================

        // Avatar Upload Mod Begin
        if (isset($newavatar)) {
            if ('http' == substr($newavatar, 0, 4)) {
                $newavatar = ereg_replace(' ', '%20', $newavatar);
            }
        } else {
            $newavatar = '';
        }
        $avatar = isset($newavatar) ? checkInput($newavatar, 'no', 'yes', 'javascript', false) : '';
        $avatar = addslashes(trim($newavatar));
        // Avatar Upload Mod End

==========
Find Code:
==========

        $max_size = explode('x', $SETTINGS['max_avatar_size']);
        if ($max_size[0] > 0 && $max_size[1] > 0 && ini_get('allow_url_fopen')) {
            $size = @getimagesize($_POST['newavatar']);
            if ($size === false ) {
                $avatar = '';
            } else if (($size[0] > $max_size[0] && $max_size[0] > 0) || ($size[1] > $max_size[1] && $max_size[1] > 0) && !X_SADMIN) {
                error($lang['avatar_too_big'] . $SETTINGS['max_avatar_size'] . 'px', false);
            }
        }

================
Replace Code With:
================

        // Avatar Upload Mod Begin
        $max_size = explode('x', $SETTINGS['max_avatar_size']);
        if ($max_size[0] > 0 && $max_size[1] > 0 && ini_get('allow_url_fopen')) {
            $size = @getimagesize($avatar);
            if ($size === false ) {
                $avatar = '';
            } elseif (($size[0] > $max_size[0] && $max_size[0] > 0) || ($size[1] > $max_size[1] && $max_size[1] > 0) && !X_ADMIN) {
                error($lang['avatar_too_big'] . $SETTINGS['max_avatar_size'] . $lang['avatarpixels'], false);
            }
        }

        if (isset($_COOKIE['avatarfile']) || isset($_POST['avatarfile']) || isset($_GET['avatarfile'])) {
            die('Action Halted Due To Illegal Activity!!');
        }

        if (isset($_FILES['avatarfile']['name']) && $_FILES['avatarfile']['tmp_name'] && !empty($_FILES['avatarfile']['name'])) {
            $avatarext = substr($_FILES['avatarfile']['name'], strlen($_FILES['avatarfile']['name'])-3, 3);
            $newavatarname = $member['uid'].'.'.$onlinetime.'.'.$avatarext;
            $check = $_FILES['avatarfile'];

            if (($check['size'] > $SETTINGS['avatar_filesize']) && !X_SADMIN) {
                error($lang['avatar_too_big'] . $SETTINGS['avatar_filesize'] . $lang['avatarbytes'], false);
            }

            $avatarpath = $SETTINGS['avatar_path'].'/'.$newavatarname;
            $tmppath = $check['tmp_name'];

            if (!eregi('gif|jpeg|png|jpg|bmp', $avatarext)) {
                error($lang['avatar_invalid_ext'], false);
            }

            if (!is_writable($SETTINGS['avatar_path'])) {
                error($lang['avatar_nowrite'], false);
            }

            $size = @getimagesize($tmppath);
            $width = $size[0];
            $height = $size[1];
            $type = $size[2];

            @set_time_limit(30);
            $imginfo = @getimagesize($tmppath);

            switch ($imginfo['2']) {
                case 1:
                    $type = IMG_GIF;
                    break;
                case 2:
                    $type = IMG_JPG;
                    break;
                case 3:
                    $type = IMG_PNG;
                    break;
                case 4:
                    $type = IMG_WBMP;
                    break;
                default:
                    return $tmppath;
                    break;
            }

            switch ($type) {
                case IMG_GIF:
                    if (!@function_exists('imagecreatefromgif')) {
                        return $tmppath;
                    }
                    $srcImage = @imagecreatefromgif($tmppath);
                    break;
                case IMG_JPG:
                    if (!@function_exists('imagecreatefromjpeg')) {
                        return $tmppath;
                    }
                    $srcImage = @imagecreatefromjpeg($tmppath);
                    break;
                case IMG_PNG:
                    if (!@function_exists('imagecreatefrompng')) {
                        return $tmppath;
                    }
                    $srcImage = @imagecreatefrompng($tmppath);
                    break;
                case IMG_WBMP:
                    if (!@function_exists('imagecreatefromwbmp')) {
                        return $tmppath;
                    }
                    $srcImage = @imagecreatefromwbmp($tmppath);
                    break;
                default:
                    return $tmppath;
            }

            if ($width > ((int)$SETTINGS['avatar_max_width'])) {
                $newwidth  = ((int)$SETTINGS['avatar_new_width']);
                $newheight = ((int)($newwidth / $width) * $height);
            } elseif ($height > ((int)$SETTINGS['avatar_max_height'])) {
                $newheight = ((int)$SETTINGS['avatar_new_height']);
                $newwidth  = ((int)($newheight / $height) * $width);
            }

            if (isset($newwidth)) {
                $destImage = @imagecreatetruecolor($newwidth, $newheight);
                @imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

                switch ($type) {
                    case IMG_GIF:
                        @imagegif($destImage, "$tmppath");
                        break;
                    case IMG_JPG:
                        @imagejpeg($destImage, "$tmppath");
                        break;
                    case IMG_PNG:
                        @imagepng($destImage, "$tmppath");
                        break;
                    case IMG_WBMP:
                        @imagewbmp($destImage, "$tmppath");
                        break;
                        @imagedestroy($srcImage);
                        @imagedestroy($destImage);
                }
            }

            @copy($tmppath, $avatarpath);
            $db->query("UPDATE ".X_PREFIX."members SET avatar = '$avatarpath' WHERE username = '$xmbuser'");
        }

        if (isset($_POST['newavatar']) && empty($_FILES['avatarfile']['name'])) {
            $db->query("UPDATE ".X_PREFIX."members SET avatar = '$avatar' WHERE username = '$xmbuser'");
        }

        if (isset($_POST['editsubmit']) && isset($_POST['avatardel']) != 1 && !empty($member['avatar']) && empty($_POST['newavatar']) && empty($_FILES['avatarfile']['name'])) {
            $db->query("UPDATE ".X_PREFIX."members SET avatar = '$member[avatar]' WHERE username = '$xmbuser'");
        }

        if (isset($_POST['avatardel']) && isset($_POST['avatardel']) == 1 && empty($_FILES['avatarfile']['name'])) {
            if (@file_exists($member['avatar'])) {
                @unlink($member['avatar']);
            }
            $db->query("UPDATE ".X_PREFIX."members SET avatar = '' WHERE username = '$xmbuser'");
        }
        // Avatar Upload Mod End

==================
Find Code And Delete:
==================

, avatar='$avatar'

=======================================================================================================================================
=======
Step 4:
=======
=======================
Edit File: lang/English.lang.php
=======================
==========
Find Code:
==========

$lang['max_avatar_size_h'] = "The maximum avatar Height (in pixels):";
$lang['max_avatar_size_w'] = "The maximum avatar Width (in pixels):";

================
Replace Code With:
================

// Avatar Upload Mod Begin
$lang['max_avatar_size_h'] = "The maximum remote url avatar Height (in pixels):";
$lang['max_avatar_size_w'] = "The maximum remote url avatar Width (in pixels):";
// Avatar Upload Mod End

=================================
Add Code At Very Bottom of File Above ?>
=================================

// Avatar Upload Mod Begin
$lang['avataroptions'] = "Avatar - Options:";
$lang['avatarinfo'] = "An avatar displays a small graphic image below your details in posts and profiles. Only one image can be displayed at a time, an uploadable avatar's width can be no greater than <strong>$avatar_max_width</strong> pixels, a height no greater than <strong>$avatar_max_height</strong> pixels and a file size no more than <strong>$avatar_filesize</strong> bytes.";
$lang['avatarcurrent'] = "Current Avatar";
$lang['avatardelete'] = "Delete Avatar?";
$lang['avataruploadfrom'] = "Upload avatar from your computer:";
$lang['avatarwhoupload'] = "Who can upload avatars?";
$lang['avatarupall'] = "All";
$lang['avatarupstaff'] = "Staff";
$lang['avatarfilesize'] = "The maximum avatar upload file size in byte(s):";
$lang['avatarbytes'] = " byte(s)";
$lang['avatarpixels'] = " pixel(s)";
$lang['avatarwdimensions'] = "The maximum avatar upload Width (in px):";
$lang['avatarhdimensions'] = "The maximum avatar upload Height (in px):";
$lang['avatar_path'] = "Avatar upload storage path:<br /><small>Path under your forum root dir, e.g. (./images/uploads)<br /><strong>Note:</strong> You must CHMOD this folder to 777</small>";
$lang['avatar_newwresize'] = "The avatar upload resize Width (in px):";
$lang['avatar_newhresize'] = "The avatar upload resize Height (in px):";
$lang['avatar_main_settings'] = "Avatar Control Settings";
$lang['avatar_urlmsg'] = "The maximum dimensions for remote url avatars is ";
$lang['avatar_invalid_ext'] = "Sorry, you cannot upload avatar files with invalid image extensions. Please go back and try again.";
$lang['avatar_nowrite'] = "The <strong><em>$avatar_path</em></strong> directory is not writeable, make sure to set the permissions (CHMOD) for the folder to 777 on your server.";
// Avatar Upload Mod End

=======================================================================================================================================
=======
Step 5:
=======
==========================
Go To Admin Panel -> Templates
==========================
======================================
Create New Template: memcp_profile_avatarhidden
======================================
=======================
Add Code And Click Submit:
=======================

<tr class="category">
<td colspan="2"><strong><font color="$THEME[cattext]">$lang[avataroptions]</font></strong></td>
</tr>
<tr class="tablerow">
<td bgcolor="$THEME[altbg1]" align="center" width="22%" valign="top">$lang[avatarcurrent]<br />$useravatar$avdeletebutton</td>
<td bgcolor="$THEME[altbg2]" valign="top">$lang[avatarinfo]</td>
</tr>
<tr class="tablerow">
<td bgcolor="$THEME[altbg1]" width="22%">$lang[avataruploadfrom]</td>
<td bgcolor="$THEME[altbg2]"><input type="file" name="avatarfile" size="20" /></td>
</tr>

=======================================================================================================================================
=======
Step 6:
=======
==========================
Go To Admin Panel -> Templates
==========================
====================================
Create New Template: memcp_profile_useravatar
====================================
=======================
Add Code And Click Submit:
=======================

<img src="$member[avatar]" border="0" alt="$lang[altavatar]" />

=======================================================================================================================================
=======
Step 7:
=======
==========================
Go To Admin Panel -> Templates
==========================
=======================
Edit Template: memcp_profile
=======================
==========
Find Code:
==========

<form method="post" action="memcp.php?action=profile" name="reg">

==================
Replace Code With:
==================

<form method="post" action="memcp.php?action=profile" name="reg" enctype="multipart/form-data">

==================
Find Code And Delete:
==================

$avatar

==========
Find Code:
==========

<tr>
<td class="ctrtablerow" bgcolor="$altbg2" colspan="2"><input type="submit" class="submit" name="editsubmit" value="$lang[texteditpro]" /></td>
</tr>

===============
Add Code Above:
===============

$avatarhidden
$avatar

=======================================================================================================================================
=======
Step 8:
=======
==========================
Go To Admin Panel -> Templates
==========================
=============================
Edit Template: memcp_profile_avatarurl
=============================
==============
Replace All With:
==============

<tr class="tablerow">
<td bgcolor="$THEME[altbg1]" width="22%">$lang[textavatarurl]</td>
<td bgcolor="$THEME[altbg2]"><input type="text" name="newavatar" size="25" value="$member[avatar]" /></td>
</tr>

=======================================================================================================================================
=======
Step 9:
=======

Now upload the folder named "uploads" to your forum "images" directory.

Now CHMOD the "uploads" folder to 777, if you do not do this you cannot upload images to your server.

=======================================================================================================================================
Enjoy!