Jump to content

Image Hosting Script Help ! Plz


desicube

Recommended Posts

Hi I am running an Image Hosting Script at [a href=\"http://www.imagefilez.com\" target=\"_blank\"]http://www.imagefilez.com[/a]

I am using Php Image Host Script v1.0

I have more than 750 members & 7000 images on my server. Everything is working fine.

The Only thing is that I want to customise my Script so that if give a code for the thumbnail & whenever user clicks on the thumbnail on the forums. He is able to view image on my custom page, which will have header and footer so that I can display google ads on them.

The Output of the Script should be like this... eg xs.to gives the code like this.

[a href=\"http://xs.to/xs.php?h=xs76&d=06151&f=karishma.jpg\" target=\"_blank\"]http://xs.to/xs.php?h=xs76&d=06151&f=karishma.jpg[/a]
& not like this which ImageFilez.com gives

[a href=\"http://imagefilez.com/images/amit/leech1.jpg\" target=\"_blank\"]http://imagefilez.com/images/amit/leech1.jpg[/a]

I am attaching some of the files and database.. plz suggest me what changes should I make or pm me.

The Sql database of Script can be downloaded at

[a href=\"http://fasterupload.com/1772532850\" target=\"_blank\"]http://fasterupload.com/1772532850[/a]

Here is my images.php Page.

[code]<?php
/*

*/

// include general site config / initialization stuff

require_once(dirname(__FILE__).'/includes/config.inc.php');

// include and initialize an instance of the images utility class

require_once(dirname(__FILE__).'/classes/images.class.php');
$images =& new images($ace);
$images->setuser($user);
$message = '';

// include the site header

require_once(dirname(__FILE__).'/header.php');

if( $banned ){
    $pagecontent->display('IP Banned');
    require_once(dirname(__FILE__).'/footer.php');
    exit();
}elseif( !$loggedin ){

    // the user must be logged in to access this page.
    // if not logged in, tell them so, display the login form and exit.

    $pagecontent->display('Images - Not Logged In');
    require(dirname(__FILE__).'/includes/notloggedin.inc.php');
}

// check if a gallery has been selected...

$gallery = 0;
$g = $ace->getint('g', $_REQUEST, -1);
if( !isset($user->galleries[$g]) ){
    if( $g > 0 ) $g = 0;
}else{
    $gallery = $user->galleries[$g];
}

// display the intro text for the managing your images page

$pagecontent->display('Images');

// initialize variables used to determine which images to list / order to list them in, which page of images to display, etc.

$orderby = $ace->getstr('o', $_REQUEST, 'date');
$orderdir = $ace->getstr('od', $_REQUEST, 'desc');

if( !in_array($orderby, array('name', 'uploaded') ) ) $orderby = 'uploaded';
if( !in_array($orderdir, array('asc', 'desc') ) ) $orderdir = 'desc';


$ids = array();
$msg = '';
$emails = array();
for( $i = 0; $i < $user->email_friends; $i++) $emails[$i] = '';

$modified = false;

if( $ace->getstr('delete', $_POST) != '' ){

    // user wants to delete some of their images

    $ids = isset($_POST['ids']) ? $_POST['ids'] : array();
    $deleted = $images->deleteimages($ids, $userid);
    if( $deleted ){
        $message = $deleted.' image(s) deleted.';
        $user->images -= $deleted;
        $modified = true;
        if( $user->images < 0 ) $user->images = 0;
    }
}elseif( $ace->getstr('send', $_POST) != '' ){

    // user wants to email links to their images to their friends..

    $ids = isset($_POST['ids']) ? $_POST['ids'] : array();
    $imgs = $images->getimages(array('ids'=>$ids, 'user_id'=>$userid));
    if( count($imgs) ){
        $emails = array();
        $sentto = array();
        for( $i = 0; $i < $user->email_friends; $i++){
//            $emails[] = $i;
            if( isset($_POST['to'][$i]) ){
                $email = trim(get_magic_quotes_gpc() == 1 ? stripslashes($_POST['to'][$i]) : $_POST['to'][$i]);
                $emails[$i] = $email;
                if( $email != '' ){
                    if( $ace->validateemail($email) ){
                        $sentto[] = $email;
                    }else{
                        $images->errors[] = 'The address "'.htmlspecialchars($email).'" is not a valid email address.';
                    }
                }
            }
        }
        if( count($sentto) > 0 ){
            $msg = $ace->getstr('message', $_POST);
            if( strlen($msg) > 255 ){
                $images->errors[] = 'Your message can only contain a maximum of 255 characters. It currently contains '.strlen($msg).'. Please reduce your message length.';
            }elseif( strlen($msg) == 0 ){
                $images->errors[] = 'You must enter a message to send.';
            }else{
                $headers = "From: {$user->email}\r\nReply-To: {$user->email}\r\nErrors-To: {$config->admin_email}\r\nReturn-Path: {$config->admin_email}";
                $tpl = $config->email_images_template;
                $imagelinks = array();
                foreach( $imgs as $i ){
                    $imagelinks[] = $i->image_url;
                }
                $s = array('{sitename}', '{siteurl}','{message}', '{imagelinks}');
                $r = array($config->sitename, $config->siteurl, $msg,join("\n\n", $imagelinks));
                $tpl = str_replace($s, $r, $tpl);
                foreach($sentto as $email ){
                    @mail($email, $config->email_images_subject, $tpl, $headers);
                }
                $msg = '';
                for( $i = 0; $i < $user->email_friends; $i++) $emails[$i] = '';
                $message = 'An email containing your message and links to your images has been sent to '.join(" and ", $sentto).'.';
            }
        }else{
            $images->errors[] = 'You must enter an email address to send the images to.';
        }
    }else{
        $images->errors[] = 'You need to check the checkboxes next to the images you want to send.';
    }
    if( count($images->errors) > 0 ) $images->errors[] = '<br />Please correct these errors and resubmit the <a href="#email">email form</a>.';
}elseif( $ace->getstr('addtogallery', $_POST) != '' ){
    $ids = isset($_POST['ids']) ? $_POST['ids'] : array();
    $added = $images->addtogallery($ids, $ace->getint('gallery_id', $_POST));
    if( count($images->errors) > 0 ){
        $errors= $images->errors;
    }else{
        $message = "$added image(s) have had their gallery changed.";
    }
}

if( $modified ) $user = $users->getuser(array('id'=>$user->user_id));

$criteria = array('user_id'=>$userid);
if( $gallery != 0 ){
    $criteria['galleryid'] = $gallery->gallery_id;
    $criteria['count'] = true;
    $user->images = $images->getimages($criteria);
    $criteria['count'] = false;
}
$page = $ace->getint('p', $_REQUEST, 1);
if( $page < 1 ) $page = 1;
$perpage = $user->images_per_page;
$totalpages = ceil($user->images / $perpage);
if( $page > $totalpages ) $page = $totalpages;
$first = ($page -1 ) * $perpage;
$last = min($first+$perpage,$user->images);
$imgs = $images->getimages($criteria, $orderby, $orderdir, $first, $perpage);

$purl = $_SERVER['SCRIPT_NAME'].'?o='.$orderby.'&od='.$orderdir.'&p={page}&g='.$g;

if( $message != '' ){
?>
<div class="message"><?php echo $message;?></div>
<?php
}

// any error messages? display them

if( count($images->errors) > 0 ){
?>
<div class="errors">Please correct the following errors:<br /><br />
<?php echo join("<br />\n", $images->errors);?></div>
<?php
}

if( count($imgs) > 0 ){

?>
<form action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="post">
<div class="imagelist">
<?php

    // if the user has uploaded more images than their account allows (only possible if they previously
    // had a paid account which expired, or the admin has reduced the number of images allowed), then display a message

    if( $user->images > $user->max_images && $user->max_images > 0 ){
?>
<div class="errors">You are currently exceeding the uploaded image allowance for your account.
<br />Your <?php echo htmlspecialchars($user->type_name);?> account allows you to have
<?php echo $user->max_images;?> images at a time.
<br />Please delete at least <?php echo ($user->images-$user->max_images);?> of your images or
<a href="upgrade.php">upgrade your account</a>.
</div>
<?php
    }

    // now list all their images, x to a page, with options to order by name or date uploaded.
    // images are displayed with a thumbnail (click for full size), and urls to use to link to the image.

?>
<table class="imagetable" cellspacing="1" cellpadding="0" border="0" align="center">
<tr>
    <td class="imagetitle" colspan="3" style="text-align: center;">
    Images in order of
    <a href="<?php echo $_SERVER['SCRIPT_NAME'];?>?o=name&od=asc&g=<?php echo $g;?>">Name (a-z)</a>
    | <a href="<?php echo $_SERVER['SCRIPT_NAME'];?>?o=name&od=desc&g=<?php echo $g;?>">Name (z-a)</a>
    | <a href="<?php echo $_SERVER['SCRIPT_NAME'];?>?o=uploaded&od=desc&g=<?php echo $g;?>">Newest first</a>
    | <a href="<?php echo $_SERVER['SCRIPT_NAME'];?>?o=uploaded&od=asc&g=<?php echo $g;?>">Oldest first</a>
<?php
    if( count($user->galleries) > 0 ){
?>
<br />
Galleries:
<?php
        $ng = 0;
        foreach( $user->galleries as $id=>$gal ){
//            if(  $ng < count($user->galleries)) echo ', ';
            $ng++;
?><a href="<?php echo $_SERVER['SCRIPT_NAME'];?>?g=<?php echo $id;?>"><?php echo $gal->gallery_name;?></a><?php
            echo ', ';
        }
?><a href="<?php echo $_SERVER['SCRIPT_NAME'];?>">All Images</a><?php
    }
?>
    </td>
</tr>
<tr>
    <td class="imagetitle">
    <script language="JavaScript" type="text/javascript">
<!--
document.writeln('<input type="checkbox" onClick="check(this.form, this.checked);" />');
//-->
</script>
<noscript> </noscript>
    </td>
    <td class="imagetitle" colspan="2" style="text-align: center;">
        Images <?php echo $first+1;?> to <?php echo $last;?> of <?php echo $user->images;?><?php if( $gallery ) echo ' in gallery "'.$gallery->gallery_name.'"';?>.
        Page <?php echo $page;?>
        of <?php echo $totalpages;?>
        <br />
<?php
    if( $page > 1 ){
?>
        <div style="float: left;">
            <a style="text-decoration: none;"  href="<?php echo str_replace('{page}', ($page-1), $purl);?>">< Previous</a>
        </div>
<?php
    }
    if( $page < $totalpages ){
?>
        <div style="float: right;">
            <a style="text-decoration: none;" href="<?php echo str_replace('{page}',($page+1), $purl);?>">Next ></a>
        </div>
<?php
    }
?>
    </td>
</tr>
<?php
$tr = 1;
foreach( $imgs as $i ){
?>
<tr class="tr<?php echo ($tr+1);?>">
    <td class="tdcheck"><input type="checkbox" name="ids[]" value="<?php echo $i->image_id;?>" <?php if( in_array($i->image_id, $ids) ) echo ' CHECKED ';?>/></td>
    <td class="tdthumb">
    <a onClick="return si('<?php echo $i->image_url;?>', <?php echo $i->width;?>, <?php echo $i->height;?>);"  target="_blank" href="<?php echo $i->image_url;?>"><img border="0" class="thumb" src="<?php echo $i->thumb_url;?>" alt="" /></a>
    <br />
    (<?php echo $i->width.'x'.$i->height;?>)
    <?php echo number_format($i->filesize/1024, 1).'k';?>
    <br />
    Bandwidth:
<?php
    if( $i->bandwidthr > (1024*1024) ){
        echo $i->bandwidth.'mb';
    }elseif( $i->bandwidthk > (1024*1024) ){
        echo number_format($i->bandwidthr/(1024*1024*1024),2).'gb';
    }else{
        echo $i->bandwidthk.'k';
    }
?>
<?php if( $user->resize_images || $user->rename_images ){ ?>
        <div class="infolabel" style="text-align: center;">
<?php if( $user->rename_images ){ ?>
            [<a href="rename.php?i=<?php echo $i->image_id;?>">Rename</a>]
<?php } ?>
<?php if( $user->resize_images ){ ?>
            [<a href="resize.php?i=<?php echo $i->image_id;?>">Resize</a>]
<?php } ?>
        </div>
<?php } ?>
    </td>
    <td class="tdinfo">
    <b><a onClick="return si('<?php echo $i->image_url;?>', <?php echo $i->width;?>, <?php echo $i->height;?>);" target="_blank" href="<?php echo $i->image_url;?>"><?php echo $i->name.'.'.$i->type;?></a></b>
    <br />
        <div class="infolabel">URL</div>
        <div class="infotext"><input onFocus="this.select();" class="urlinput" type="text" value="<?php echo $i->image_url;?>" /></div>
        <div class="infolabel">HTML <img></div>
        <div class="infotext"><input onFocus="this.select();" class="urlinput" type="text" value="<?php echo htmlentities('<img src="'.$i->image_url.'" alt="image hosting by '.$ace->config->siteurl.'" />');?>" /></div>
        <div class="infolabel">BB Code</div>
        <div class="infotext"><input onFocus="this.select();" class="urlinput" type="text" value="[img]<?php echo $i->image_url;?>[/img]" /></div>
        <div class="infolabel">Uploaded on the <?php echo date('jS F Y', strtotime($i->uploaded));?></div>
<?php if( $i->gallery_id != 0 ){?>
    <b>In Gallery: <a href="<?php echo $_SERVER['SCRIPT_NAME'].'?g='.$i->gallery_id;?>"><?php echo $i->gallery_name;?></a></b>
    [<a target="_blank" href="<?php echo $ace->config->siteurl.'gallery.php?g='.$i->gallery_name.'&u='.$user->username;?>">View</a>]
<?php } ?>
    </td>
</tr>
<?php
    $tr = 1 - $tr;
}
?>
<tr>
    <td class="imagetitle">
    <script language="JavaScript" type="text/javascript">
<!--
document.writeln('<input type="checkbox" onClick="check(this.form, this.checked);" />');
//-->
</script>
<noscript> </noscript>
    </td>
    <td class="imagetitle" colspan="2" style="text-align: center;">
<?php
    if( $page > 1 ){
?>
        <div style="float: left;">
            <a style="text-decoration: none;"  href="<?php echo str_replace('{page}', ($page-1), $purl);?>">< Previous</a>
        </div>
<?php
    }
    if( $page < $totalpages ){
?>
        <div style="float: right;">
            <a style="text-decoration: none;" href="<?php echo str_replace('{page}',($page+1), $purl);?>">Next ></a>
        </div>
<?php
    }
?>

    <br />
        Images <?php echo $first+1;?> to <?php echo $last;?> of <?php echo $user->images;?><?php if( $gallery ) echo ' in gallery "'.$gallery->gallery_name.'"';?>.
        Page <?php echo $page;?>
        of <?php echo $totalpages;?>
    </td>
</tr>
<?php if( $user->email_friends > 0 ){ ?>
<tr>
    <td colspan="3" class="imagetitle"><a name="email"></a> </td>
</tr>
<tr>
    <td class="imagetitle"> </td>
    <td class="imagetitle" colspan="2">
        <b>Email The Selected Images To Your Friends!</b>
    </td>
</tr>
<tr class="tr1">
    <td class="tdcheck"> </td>
    <td class="tdinfo" style="text-align: right;">Friend's Email:</td>
    <td class="tdinfo">
<?php
    for( $i = 0; $i < $user->email_friends; $i++){
?>
        <input type="text" name="to[]" value="<?php echo htmlspecialchars($emails[$i]);?>" class="urlinput" /><br />
<?php
    }
?>
    <br />
<?php if( $user->email_friends > 1 ){ ?>
Enter the email address of each friend you want to send these images to in one of the boxes above.
You can send the images to up to <?php echo $user->email_friends;?> email addresses at once.
<?php }else{ ?>
Enter the email address of the friend you want to send these images to.
<?php } ?>
<br />We respect your privacy. We do not store the email addresses submitted via this form.
    </td>
</tr>
<tr class="tr1">
    <td class="tdcheck"> </td>
    <td class="tdthumb" style="text-align: right;">Short Message<br />(max 255 characters)</td>
    <td class="tdinfo"><textarea name="message" class="urlinput" style="height: 60px;"><?php echo htmlspecialchars($msg);?></textarea></td>
</tr>
<tr class="tr1">
    <td class="tdcheck"> </td>
    <td class="tdthumb"> </td>
    <td class="tdinfo"><input type="submit" name="send" value="Email The Selected Images" /></td>
</tr>
<?php
}

if( count($user->galleries) > 0 ){
?>
<tr>
    <td class="imagetitle" colspan="3"> </td>
</tr>
<tr>
    <td class="imagetitle" colspan="3">Add The Selected Images To One Of Your Galleries</td>
</tr>
<tr class="tr1">
    <td class="tdcheck"> </td>
    <td class="tdthumb"> </td>
    <td class="tdinfo">
        <select name="gallery_id">
            <option value="0">No Gallery</option>
<?php
    foreach( $user->galleries as $id=>$g ){
        echo "<option value=\"$id\">{$g->gallery_name}</option>\n";
    }
?>
        </select>
        [<a href="galleries.php">Manage Galleries</a>]<br />
        <input type="submit" name="addtogallery" value="Add Selected Images To This Gallery" onClick="return confirm('Are you sure you want to add the selected images to the selected gallery?');" />
    </td>
</tr>
<?php
}
?>
<tr>
    <td class="imagetitle" colspan="3"> </td>
</tr>
<tr>
    <td class="imagetitle" colspan="3">Remove The Selected Images From Your Account</td>
</tr>
<tr class="tr1">
    <td class="tdcheck"> </td>
    <td class="tdthumb"> </td>
    <td class="tdinfo">
        <input type="submit" name="delete" value="Delete The Selected Images" onClick="return confirm('Are you sure you want to delete the selected images?');" />
    </td>
</tr>
</table>
</div>
</form>
<?php

}else{

    // if the user hasn't uploaded any images ,display a message telling them this.

    $pagecontent->display('No Images');

}

// include the site footer.

require_once(dirname(__FILE__).'/footer.php');

?>

[/code]

and this is my classes/images.class.php page.


[code]<?php
/*

*/
class images{

var $errors = array();
var $orderbys = array('name'=>'Name', 'uploaded'=>'Uploaded', 'size'=>'File Size', 'format'=>'Format', 'bandwidth'=>'Bandwidth');
var $imagetypes = array(IMAGETYPE_JPEG=>'jpg', IMAGETYPE_PNG=>'png', IMAGETYPE_GIF=>'gif');
var $user = 0;

function images(&$ace){
$this->ace =& $ace;
}

function setuser(&$user){
$this->user =& $user;
}

function resizeimage($src, $mwidth, $mheight, $destroy = false){
$w = imagesx($src);
$h = imagesy($src);
if( $w > $mwidth || $h > $mheight ){
$dx = (double)$w / (double)$mwidth;
$dy = (double)$h / (double)$mheight;
$d = $dx > $dy ? $dx : $dy;
$nw = (int)((double)$w / $d);
$nh = (int)((double)$h / $d);
$dest = imagecreatetruecolor($nw, $nh);
imagecopyresampled($dest, $src, 0, 0, 0, 0, $nw, $nh, $w, $h);
if( $destroy ) imagedestroy($src);
return $dest;
}
return $src;
}

function deleteimages($ids, $userid = 0){
$ids = $this->ace->getids($ids);
if( count($ids) > 0 ){
$criteria = array('ids'=>$ids);
if( $userid != 0 ) $criteria['userid'] = $userid;
$imgs = $this->getimages($criteria);
$iids = array();
if( count($imgs) > 0 ){
$userbandwidths = array();
foreach( $imgs as $i){
if( !isset($userbandwidths[$i->user_id]) ) $userbandwidths[$i->user_id] = 0;
$userbandwidths[$i->user_id] += $i->bandwidthr;
$iids[] = $i->image_id;
$fname = $this->ace->config->image_folder.$i->username.'/'.$i->name.'.'.$i->type;
$tname = $this->ace->config->thumb_folder.$i->username.'/'.$i->name.'.jpg';
if( @file_exists($fname) ){
unlink($fname);
}
if( @file_exists($tname) ){
unlink($tname);
}
}
$sql = "DELETE FROM images WHERE image_id IN (".join(",",$iids).") ";
$this->ace->query($sql, 'Delete Images');
$deleted = mysql_affected_rows();
$cnt = 0;
foreach( $userbandwidths as $id=>$bw ){
if( $bw > 0 ){
$sql = "UPDATE {pa_dbprefix}users SET deleted_images_bandwidth=deleted_images_bandwidth+ $bw WHERE user_id=$id ";
$this->ace->query($sql, 'Update Bandwidth Used');
if( $cnt % 5 ) sleep(1);
}
}
return $deleted;
}
}
return 0;
}

function getimages($criteria = array(), $orderby = 'name', $orderdir = 'asc', $first = 0, $limit = 0){
$justcount = isset($criteria['count']) && $criteria['count'] == true ? true : false;
if( $justcount ){
$sql = "SELECT COUNT(*) ";
}else{
$ipath = addslashes($this->ace->config->image_url);
$tpath = addslashes($this->ace->config->thumb_url);
$sql = "SELECT i.*, u.username, u.email, g.gallery_name, ";
$sql .="CONCAT('$ipath',u.username,'/', i.name, '.', type) AS image_url, ";
$sql .="CONCAT('$tpath',u.username,'/', i.name, '.jpg') AS thumb_url ";
}
$sql .="FROM {pa_dbprefix}images i LEFT OUTER JOIN {pa_dbprefix}galleries g ON i.gallery_id=g.gallery_id, ";
$sql .="{pa_dbprefix}users u ";
$wheres = array("i.user_id=u.user_id ");
foreach( $criteria as $c=>$v){
switch( $c ){
case 'ids': $ids = $this->ace->getids($v);$ids[] = 0; $wheres[] = " i.image_id IN (".join(",",$ids).") "; break;
case 'name': $wheres[] = " i.name LIKE '".str_replace("*", "%", addslashes($v))."' "; break;
case 'uploaded': $wheres[] = " TO_DAYS(i.uploaded)+$v>=TO_DAYS(NOW()) "; break;
case 'height': settype($v, 'integer'); $wheres[] = " i.height=$v "; break;
case 'width': settype($v, 'integer'); $wheres[] = " i.width=$v "; break;
case 'username': $wheres[] = " u.username LIKE '".str_replace("*", "%",addslashes($v))."' "; break;
case 'userid': case 'user_id': settype($v, 'integer'); $wheres[] = " i.user_id=$v "; break;
case 'format': $wheres[] = "i.type='".addslashes($v)."' "; break;
case 'minsize': settype($v, 'integer'); $wheres[] = "i.filesize>=".($v*1024)." "; break;
case 'maxsize': settype($v, 'integer'); $wheres[] = "i.filesize<=".($v*1024)." "; break;
case 'uploadedbefore': $wheres[] = "date_format(i.uploaded, '%Y-%m-%d')<='".addslashes($v)."' "; break;
case 'uploadedafter': $wheres[] = "date_format(i.uploaded, '%Y-%m-%d')>='".addslashes($v)."' "; break;
case 'ip': $wheres[] = "i.ip LIKE '".addslashes(str_replace('*', '%', $v))."' "; break;
case 'checked': settype($v, 'integer'); $wheres[] = "i.checked=$v "; break;
case 'public': settype($v, 'integer'); $wheres[] = "i.public=$v "; break;
case 'galleryid': settype($v, 'integer'); $wheres[] = "i.gallery_id=$v "; break;
case 'galleryname': $wheres[] = "g.gallery_name LIKE '".addslashes(str_replace('*', '%', $v))."' "; break;
case 'bandwidth': settype($v, 'integer'); $wheres[] = "i.bandwidth/(1024*1024)>=$v "; break;
}
}
if( count($wheres) > 0 ) $sql .= "WHERE ".join(" AND ", $wheres)." ";
if( !$justcount ){
$ob = 'i.name';
switch( $orderby ){
case 'bandwidth': $ob = 'i.bandwidth'; break;
case 'name': $ob = 'i.name'; break;
case 'uploaded': $ob = 'i.uploaded'; break;
case 'format': $ob = 'i.type'; break;
case 'size': $ob = 'i.filesize'; break;
case 'username': $ob = 'u.username'; break;
case 'random': $ob = 'RAND() '; $orderdir = ''; break;
}
if( $orderdir != 'desc' ) $orderdir = '';
$sql .= "ORDER BY $ob $orderdir ";
if($limit > 0 ) $sql .= "LIMIT $first,$limit ";
}
$res = $this->ace->query($sql, 'Get Images');
if( $justcount ){
return mysql_result($res,0,0);
}else{
$imgs = array();
while( $i = mysql_fetch_object($res) ){
$i->bandwidthk = number_format($i->bandwidth/1024,2);
$i->bandwidthr = $i->bandwidth;
$i->bandwidth = number_format($i->bandwidth/(1024*1024),2);
// $i->storage = number_format($i->storage/(1024*1024),2);
$imgs[] = $i;
}
return $imgs;
}
return 0;
}

function brand_image($img){
$font = '';//dirname(__FILE__).'/ARIAL.TTF';
if( $img == 0 || $this->user == 0 || $this->user->add_branding == 0 ) return false;
$fg = $this->hextorgb($this->ace->config->branding_color);
$bg = $this->hextorgb($this->ace->config->branding_bgcolor);
$bgcol = imagecolorallocatealpha($img,$bg['red'], $bg['green'], $bg['blue'],($this->ace->config->branding_transparency)*1.27);
$col = imagecolorallocate($img,$fg['red'], $fg['green'], $fg['blue']);
if( function_exists('imagettfbbox') && $font != '' && @file_exists($font) ){
$bbox = imagettfbbox ( $this->ace->config->branding_size, 0, $font, $this->ace->config->branding_text);
$width = $bbox[2] - $bbox[0];
$height = $bbox[1] - $bbox[7];
$xoff = $bbox[0];
$yoff = $bbox[1];
$x = imagesx($img)-$xoff-$width-5;
$y = imagesy($img)-$yoff;
imagefilledrectangle($img,0,imagesy($img)-$height, imagesx($img), imagesy($img), $bgcol);
imagettftext($img, $this->ace->config->branding_size, 0, $x, $y, $col, $font, $this->ace->config->branding_text);
}else{
$width = imagefontwidth(2)*strlen($this->ace->config->branding_text);
$height = imagefontheight(2)+4;
imagefilledrectangle($img,0,imagesy($img)-$height, imagesx($img), imagesy($img), $bgcol);
imagestring($img, 2, imagesx($img)-$width-4, imagesy($img)-$height,$this->ace->config->branding_text, $col);
}
return true;
}

function addimage($fname, $userid, $file, $gallery = 0, $checked = 0){
if( $this->user == 0 ){
$this->errors[] = 'You must specify a valid user account.';
return 0;
}elseif( $this->user->images >= $this->user->max_images && $this->user->max_images > 0 ){
$this->errors[] = 'You are already using all of your image storage allowance ('.$this->user->max_images.' images uploaded.)';
return 0;
}
settype($gallery, 'integer');
if( !isset($this->user->galleries[$gallery]) ) $gallery = 0;
settype($checked, 'integer');
$ip = isset($_SERVER['X_FORWARDED_FOR']) ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
$ip = addslashes($ip);
$userid = $this->user->user_id;
if( @is_uploaded_file($file) ){
if( $fname == '' ) $fname = $file;
$fname = strtolower($fname);
$fname = preg_replace('/^.*[\/\\\]/i','',$fname);
$fname = preg_replace('/\..*$/i', '', $fname);
$fname = preg_replace('/[^a-z0-9]/i', '', $fname);
if( $fname != '' ){
if( @filesize($file) <= $this->user->max_upload_size * 1024 ){
if( $this->user->storage == 0 || $this->user->storage_used < $this->user->storage ){

$image = $this->getimage(array('path'=>$this->user->username.'/'.$fname));

if( $image != 0 ){
$sql = "SELECT COUNT(*) FROM images WHERE user_id={$this->user->user_id} AND name LIKE '".$fname."_%' ";
$res = $this->ace->query($sql, 'Count Same Name Images');
$num = mysql_result($res,0,0);
$fname .= "_".($num+1);
}
$fname = strtolower($fname);
$name = $fname;
$info = @getimagesize($file);
if( $info ){
if( isset($this->imagetypes[$info[2]]) ){
$width = $info[0];
$height = $info[1];
$type = $this->imagetypes[$info[2]];
$size = @filesize($file);
$imgfuncs = array(IMAGETYPE_JPEG=>'imagecreatefromjpeg', IMAGETYPE_PNG=>'imagecreatefrompng',
IMAGETYPE_GIF=>'imagecreatefromgif');
$img = 0;
$modified = false;
// check dimensions... resize if neccessary
$func = $imgfuncs[$info[2]];
$img = @$func($file);
if( $img != 0 ){
if( $width > $this->user->max_image_width || $height > $this->user->max_image_height ){
if( $this->user->auto_resize == 1 ){
$img = $this->resizeimage($img, $this->user->max_image_width, $this->user->max_image_height, true);
$modified = true;
$width = imagesx($img);
$height = imagesy($img);
}else{
$this->errors[] = 'Image "'.htmlspecialchars($fname).'" is too large ('.$width.'x'.$height.'). Max size allowed is '.$this->user->max_image_width.'x'.$this->user->max_image_height.'.';
imagedestroy($img);
return false;
}
}
// create thumbnail
$thumb = $this->resizeimage($img, $this->ace->config->thumbnail_width, $this->ace->config->thumbnail_height, false);
}else{
$this->errors[] = 'Error reading image "'.htmlspecialchars($fname).'". ';
return 0;
}
if( $this->user->add_branding == 1 && $this->ace->config->min_branding_width < imagesx($img)
&& $this->ace->config->min_branding_height < imagesy($img)){
if( !imageistruecolor($img) ){
$tmp = imagecreatetruecolor(imagesx($img), imagesy($img));
imagecopy($tmp, $img, 0, 0, 0,0,imagesx($img), imagesy($img));
imagedestroy($img);
$img = $tmp;
}

$this->brand_image($img);
$modified = true;
}

if( $this->user->auto_jpeg ){
$type = 'jpg';
}elseif($type == 'gif' && $modified ){
$type = 'png';
}
$sql = "INSERT INTO images (name, user_id, type, width, height, ";
$sql .="uploaded, filesize, ip, checked, gallery_id) ";
$sql .="VALUES ('$fname', $userid,'$type', ";
$sql .="$width, $height, now(),$size, '$ip', $checked, $gallery) ";
$res = $this->ace->query($sql, 'Add Image');
$id = mysql_insert_id();
if( $id ){
if( $this->user->auto_jpeg == 1 ){
@imagejpeg($img, $this->ace->config->image_folder.$this->user->username.'/'.$fname.'.jpg', $this->user->jpeg_quality);
}else{
if( !$modified ){
@move_uploaded_file($file, $this->ace->config->image_folder.$this->user->username.'/'.$fname.'.'.$type);
}else{
if( $type == 'jpg' ){
@imagejpeg($img, $this->ace->config->image_folder.$this->user->username.'/'.$fname.'.jpg', $this->user->jpeg_quality);
}else{
@imagepng($img, $this->ace->config->image_folder.$this->user->username.'/'.$fname.'.png');
}
}
}
$iname = $this->ace->config->image_folder.$this->user->username.'/'.$fname.'.'.$type;
chmod($iname, 0666);
$fsize = @filesize($iname);
$sql = "UPDATE images SET filesize=$fsize WHERE image_id=$id ";
$this->ace->query($sql, 'Set Image File Size');
$tname = $this->ace->config->thumb_folder.$this->user->username.'/'.$fname.'.jpg';
@imagejpeg($thumb, $tname, $this->user->jpeg_quality);
chmod($tname, 0777);
return $id;
}else{
$this->errors[] = 'A database error occurred whilst attempting to add the image "'.htmlspecialchars($name).'". Please try again later.';
}
}else{
$this->errors[] = 'The file "'.htmlspecialchars($fname).'" is not a supported image format.';
}
}else{
$this->errors[] = 'The file "'.htmlspecialchars($fname).'" is not a supported image format.';
}
}else{
$this->errors[] = 'You do not have enough free storage space to upload this image. Please delete some existing images or upgrade your account.';
}

}else{
$this->errors[] = 'The size of the file you uploaded exceeds the maximum file size allowed ('.($this->user->max_upload_size*1024).' bytes). Please try resizing your image or saving as a compressed jpeg before uploading again.';
}
}else{
$this->errors[] = 'You must enter a name for your image. The name must only contain the characters a-z and 0-9.';
}
}else{

}
return 0;
}

function hextorgb($hex){
$hex = preg_replace('/[^0-9a-f]/i', '', $hex);
$hex = str_pad($hex,6,'0');
$ret = array( 'red' => hexdec(substr($hex, 0, 2)),
'green' => hexdec(substr($hex, 2, 2)),
'blue' => hexdec(substr($hex, 4, 2))
);
return $ret;
}

function getimage($criteria = array()){
$ipath = addslashes($this->ace->config->image_url);
$tpath = addslashes($this->ace->config->thumb_url);
$sql = "SELECT i.*, u.username, ";
$sql .="CONCAT('$ipath', u.username, '/',i.name, '.', type) AS image_url, ";
$sql .="CONCAT('$tpath', u.username, '/',i.name, '.jpg') AS thumb_url ";
$sql .="FROM images i, users u ";
$wheres = array('i.user_id=u.user_id');
foreach( $criteria as $c=>$v ){
switch( $c ){
case 'type': $wheres[] = "i.type='".addslashes($v)."' "; break;
case 'id': settype($v, 'integer'); $wheres[]=" i.image_id=$v "; break;
case 'name': $wheres[] = " i.name='".addslashes($v)."' "; break;
case 'userid': settype($v, 'integer'); $wheres[] = " i.user_id=$v "; break;
case 'path': $wheres[] = "CONCAT(u.username, '/', i.name)='".addslashes($v)."' "; break;
}
}
if( count($wheres) > 0 ) $sql .= "WHERE ".join(" AND ", $wheres)." ";
$res = $this->ace->query($sql, 'Get Image');
$img = mysql_fetch_object($res);
if( $img ){
$img->bandwidth = number_format($img->bandwidth/(1024*1024),2);
}
return $img;
}

function updateimages($ids, $vars){
$ids = $this->ace->getids($ids);
if( !is_array($vars) ) $vars = array($vars);
$ups = array();
foreach( $vars as $n=>$v ){
switch( $n ){
case 'status': $ups[] = "status=".(int)$v." "; break;
case 'checked': settype($v, 'integer'); $ups[] = "checked=$v "; break;
}
}
if( count($ids) && count($ups) ){
$sql = "UPDATE {pa_dbprefix}images SET ".join(",",$ups)." WHERE image_id IN (".join(",",$ids).") ";
$this->ace->query($sql, 'Update Images');
return mysql_affected_rows();
}else{
return 0;
}
}

function setchecked($ids, $checked = 1 ){
$ids = $this->ace->getids($ids);
settype($checked, 'integer');
if( count($ids) ){
$sql = "UPDATE {pa_dbprefix}images SET checked=$checked WHERE image_id IN (".join(",",$ids).") ";
$this->ace->query($sql, 'Set Image Status');
return mysql_affected_rows();
}else{
return 0;
}

}

function setpublic($ids, $public = 0){
$ids = $this->ace->getids($ids);
settype($public, 'integer');
if( count($ids) ){
$sql = "UPDATE {pa_dbprefix}images SET public=$public WHERE image_id IN (".join(",",$ids).") ";
if( $this->user != 0 ) $sql .= "AND user_id={$this->user->user_id} ";
$this->ace->query($sql, 'Set Image Public');
return mysql_affected_rows();
}else{
return 0;
}
}

function suspendusers($ids){
$ids = $this->ace->getids($ids);
if( count($ids) > 0 ){
$sql = "UPDATE {pa_dbprefix}users SET status=2 WHERE user_id IN (".join(",",$ids).") ";
$this->ace->query($sql, 'Suspend Users');
return mysql_affected_rows();
}
return 0;
}

function resizeexistingimage(&$image, $newwidth, $newheight, $copy = false){
if( $newwidth == $image->width && $newheight == $image->height || ($newwidth == 0 && $newheight == 0)){
$this->errors[] = 'You must enter a new width and / or height for this image.';
return false;
}
if( $newwidth > $this->user->max_image_width || $newheight > $this->user->max_image_height ){
$this->errors[] = 'The maximum width and height you are allowed is '.$this->user->max_image_width.'x'.$this->user->max_image_height.'.';
return false;
}
$imgfuncs = array(IMAGETYPE_JPEG=>'imagecreatefromjpeg', IMAGETYPE_PNG=>'imagecreatefrompng',
IMAGETYPE_GIF=>'imagecreatefromgif');
$iname= $this->ace->config->image_folder.$this->user->username.'/'.$image->name.'.'.$image->type;
$info = @getimagesize($iname);
if( $info != 0 ){
$width = $info[0];
$height = $info[1];

// get new width and height...
// and check new width and height are ok...

if( $newwidth == 0 ){
$d = (double)((double)$height / (double)$newheight);
$newwidth = (int)((double)$width / $d);
if( $newwidth > $this->user->max_image_width ){
$this->errors[] = 'The new height you entered results in a new width larger than your maximum allowed image width.';
return false;
}elseif( $newwidth < 1 ){
$newwidth = 1;
}
}elseif( $newheight == 0 ){
$d = (double)((double)$width / (double)$newwidth);
$newheight = (int)((double)$height / $d);
if( $newheight > $this->user->max_image_height ){
$this->errors[] = 'The new width you entered results in a new height larger than your maximum allowed image height.';
return false;
}elseif( $newheight < 1 ){
$newheight = 1;
}
}

$lfunc = $imgfuncs[$info[2]];
$img = @$lfunc($iname);
$dest = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dest, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagedestroy($img);
$savetype = $image->type;
if( $image->type == 'gif' ){
$savetype = 'jpg';
}
$name = $image->name;
if( $copy == true ){
$name.= '_'.$newwidth.'x'.$newheight;
}
// check that the name is ok (and change it if it isn't )

$ex = $this->getimage(array('userid'=>$this->user->user_id, 'name'=>$name, 'type'=>$savetype));

if( $ex != 0 && $ex->image_id != $image->image_id ){
$sql = "SELECT COUNT(*) FROM images WHERE user_id={$this->user->user_id} AND name LIKE '".$name."_%' AND type='$savetype' ";
$res = $this->ace->query($sql, 'Count Same Name Images');
$num = mysql_result($res,0,0);
$name .= "_".($num+1);
}

$tpath = $this->ace->config->thumb_folder.$this->user->username.'/';
$ipath = $this->ace->config->image_folder.$this->user->username.'/';

// if j
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.