forum.coppermine-gallery.net
Support => cpg1.5.x Support => cpg1.5 miscellaneous => Topic started by: google on January 19, 2012, 06:29:52 am
-
Hi,
Can anyone guide me which code/file to edit such that every refresh of image is counted as an image view.
Regards.
-
Copy this to your theme's theme.php file:
/******************************************************************************
** Section <<<theme_html_picture>>> - START
******************************************************************************/
// Displays a picture
function theme_html_picture()
{
global $CONFIG, $CURRENT_PIC_DATA, $CURRENT_ALBUM_DATA, $USER, $LINEBREAK;
global $album, $lang_date, $template_display_media;
global $lang_display_image_php, $lang_picinfo, $lang_common, $lang_errors;
$superCage = Inspekt::makeSuperCage();
$pid = $CURRENT_PIC_DATA['pid'];
$pic_title = '';
if (!isset($USER['liv']) || !is_array($USER['liv'])) {
$USER['liv'] = array();
}
// Add 1 to hit counter
if ((!USER_IS_ADMIN && $CONFIG['count_admin_hits'] == 0 || $CONFIG['count_admin_hits'] == 1)) {
add_hit($pid);
if (count($USER['liv']) > 4) array_shift($USER['liv']);
array_push($USER['liv'], $pid);
}
if ($CURRENT_PIC_DATA['title'] != '') {
$pic_title .= $CURRENT_PIC_DATA['title'] . $LINEBREAK;
}
if ($CURRENT_PIC_DATA['caption'] != '') {
$pic_title .= $CURRENT_PIC_DATA['caption'] . $LINEBREAK;
}
if ($CURRENT_PIC_DATA['keywords'] != '') {
$pic_title .= $lang_common['keywords'] . ": " . $CURRENT_PIC_DATA['keywords'];
}
if (!$CURRENT_PIC_DATA['title'] && !$CURRENT_PIC_DATA['caption']) {
template_extract_block($template_display_media, 'img_desc');
} else {
if (!$CURRENT_PIC_DATA['title']) {
template_extract_block($template_display_media, 'title');
}
if (!$CURRENT_PIC_DATA['caption']) {
template_extract_block($template_display_media, 'caption');
}
}
$CURRENT_PIC_DATA['menu'] = html_picture_menu(); //((USER_ADMIN_MODE && $CURRENT_ALBUM_DATA['category'] == FIRST_USER_CAT + USER_ID) || ($CONFIG['users_can_edit_pics'] && $CURRENT_PIC_DATA['owner_id'] == USER_ID && USER_ID != 0) || GALLERY_ADMIN_MODE) ? html_picture_menu($pid) : '';
$image_size = array();
// The weird comparision is because only picture_width is stored
$resize_method = $CONFIG['picture_use'] == "thumb" ? ($CONFIG['thumb_use'] == "ex" ? "any" : $CONFIG['thumb_use']) : $CONFIG['picture_use'];
if ($resize_method == 'ht' && $CURRENT_PIC_DATA['pheight'] > $CONFIG['picture_width']) {
$use_intermediate = true;
} elseif ($resize_method == 'wd' && $CURRENT_PIC_DATA['pwidth'] > $CONFIG['picture_width']) {
$use_intermediate = true;
} elseif ($resize_method == 'any' && max($CURRENT_PIC_DATA['pwidth'], $CURRENT_PIC_DATA['pheight']) > $CONFIG['picture_width']) {
$use_intermediate = true;
} else {
$use_intermediate = false;
}
if ($CONFIG['make_intermediate'] && $use_intermediate) {
$picture_url = get_pic_url($CURRENT_PIC_DATA, 'normal');
} else {
$picture_url = get_pic_url($CURRENT_PIC_DATA, 'fullsize');
}
list($image_size['width'], $image_size['height'], , $image_size['geom']) = cpg_getimagesize(urldecode($picture_url));
$pic_title = '';
$mime_content = cpg_get_type($CURRENT_PIC_DATA['filename']);
if ($mime_content['content']=='movie' || $mime_content['content']=='audio') {
if ($CURRENT_PIC_DATA['pwidth']==0 || $CURRENT_PIC_DATA['pheight']==0) {
$resize_method = $CONFIG['picture_use'] == "thumb" ? ($CONFIG['thumb_use'] == "ex" ? "any" : $CONFIG['thumb_use']) : $CONFIG['picture_use'];
if ($resize_method == 'ht') {
$pwidth = $CONFIG['picture_width']*4/3;
$pheight = $CONFIG['picture_width'];
} else {
$pwidth = $CONFIG['picture_width'];
$pheight = $CONFIG['picture_width']*3/4;
}
$CURRENT_PIC_DATA['pwidth'] = $pwidth; // Default width
// Set default height; if file is a movie
if ($mime_content['content']=='movie') {
$CURRENT_PIC_DATA['pheight'] = $pheight; // Default height
}
}
$ctrl_offset['mov']=15;
$ctrl_offset['wmv']=45;
$ctrl_offset['swf']=0;
$ctrl_offset['rm']=0;
$ctrl_offset_default=45;
$ctrl_height = (isset($ctrl_offset[$mime_content['extension']]))?($ctrl_offset[$mime_content['extension']]):$ctrl_offset_default;
$image_size['whole']='width="'.$CURRENT_PIC_DATA['pwidth'].'" height="'.($CURRENT_PIC_DATA['pheight']+$ctrl_height).'"';
}
if ($mime_content['content']=='image') {
if ($CURRENT_PIC_DATA['mode'] != 'fullsize') {
$winsizeX = $CURRENT_PIC_DATA['pwidth'] + $CONFIG['fullsize_padding_x']; //the +'s are the mysterious FF and IE paddings
$winsizeY = $CURRENT_PIC_DATA['pheight'] + $CONFIG['fullsize_padding_y']; //the +'s are the mysterious FF and IE paddings
if ($CONFIG['transparent_overlay'] == 1) {
$pic_html = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr><td background=\"" . $picture_url . "\" width=\"{$image_size['width']}\" height=\"{$image_size['height']}\" class=\"image\">";
$pic_html_href_close = '</a>' . $LINEBREAK;
if (!USER_ID && $CONFIG['allow_unlogged_access'] <= 2) {
if ($CONFIG['allow_user_registration'] == 0) {
$pic_html_href_close = '';
} else {
$pic_html .= '<a href="javascript:;" onclick="alert(\''.sprintf($lang_errors['login_needed'],'','','','').'\');">';
}
} elseif (USER_ID && USER_ACCESS_LEVEL <= 2) {
$pic_html .= '<a href="javascript:;" onclick="alert(\''.sprintf($lang_errors['access_intermediate_only'],'','','','').'\');">';
} else {
$pic_html .= "<a href=\"javascript:;\" onclick=\"MM_openBrWindow('displayimage.php?pid=$pid&fullsize=1','" . uniqid(rand()) . "','scrollbars=yes,toolbar=no,status=no,resizable=yes,width=$winsizeX,height=$winsizeY')\">";
}
$pic_title = $lang_display_image_php['view_fs'] . $LINEBREAK . '==============' . $LINEBREAK . $pic_title;
$pic_html .= "<img src=\"images/image.gif?id=".floor(rand()*1000+rand())."\" width=\"{$image_size['width']}\" height=\"{$image_size['height']}\" border=\"0\" alt=\"{$lang_display_image_php['view_fs']}\" /><br />";
$pic_html .= $pic_html_href_close . '</td></tr></table>';
//PLUGIN FILTER
$pic_html = CPGPluginAPI::filter('html_image_reduced_overlay', $pic_html);
} else {
$pic_html_href_close = '</a>' . $LINEBREAK;
if (!USER_ID && $CONFIG['allow_unlogged_access'] <= 2) {
if ($CONFIG['allow_user_registration'] == 0) {
$pic_html = $pic_html_href_close = '';
} else {
$pic_html = '<a href="javascript:;" onclick="alert(\''.sprintf($lang_errors['login_needed'],'','','','').'\');">';
}
} elseif (USER_ID && USER_ACCESS_LEVEL <= 2) {
$pic_html = '<a href="javascript:;" onclick="alert(\''.sprintf($lang_errors['access_intermediate_only'],'','','','').'\');">';
} else {
$pic_html = "<a href=\"javascript:;\" onclick=\"MM_openBrWindow('displayimage.php?pid=$pid&fullsize=1','" . uniqid(rand()) . "','scrollbars=yes,toolbar=no,status=no,resizable=yes,width=$winsizeX,height=$winsizeY')\">";
}
$pic_title = $lang_display_image_php['view_fs'] . $LINEBREAK . '==============' . $LINEBREAK . $pic_title;
$pic_html .= "<img src=\"" . $picture_url . "\" {$image_size['geom']} class=\"image\" border=\"0\" alt=\"{$lang_display_image_php['view_fs']}\" /><br />";
$pic_html .= $pic_html_href_close;
//PLUGIN FILTER
$pic_html = CPGPluginAPI::filter('html_image_reduced', $pic_html);
}
} else {
if ($CONFIG['transparent_overlay'] == 1) {
$pic_html = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr><td background=\"" . $picture_url . "\" width=\"{$CURRENT_PIC_DATA['pwidth']}\" height=\"{$CURRENT_PIC_DATA['pheight']}\" class=\"image\">";
$pic_html .= "<img src=\"images/image.gif?id=".floor(rand()*1000+rand())."\" width={$CURRENT_PIC_DATA['pwidth']} height={$CURRENT_PIC_DATA['pheight']} border=\"0\" alt=\"{$CURRENT_PIC_DATA['filename']}\" /><br />" . $LINEBREAK;
$pic_html .= "</td></tr></table>";
//PLUGIN FILTER
$pic_html = CPGPluginAPI::filter('html_image_overlay', $pic_html);
} else {
$pic_html = "<img src=\"" . $picture_url . "\" {$image_size['geom']} class=\"image\" border=\"0\" alt=\"{$CURRENT_PIC_DATA['filename']}\" /><br />" . $LINEBREAK;
//PLUGIN FILTER
$pic_html = CPGPluginAPI::filter('html_image', $pic_html);
}
}
} elseif ($mime_content['content']=='document') {
$pic_thumb_url = get_pic_url($CURRENT_PIC_DATA,'thumb');
$pic_html = "<a href=\"{$picture_url}\" target=\"_blank\" class=\"document_link\"><img src=\"".$pic_thumb_url."\" border=\"0\" class=\"image\" /></a><br />" . $LINEBREAK;
//PLUGIN FILTER
$pic_html = CPGPluginAPI::filter('html_document', $pic_html);
} else {
$autostart = ($CONFIG['media_autostart']) ? ('true'):('false');
if ($mime_content['player'] == 'HTMLA') {
$pic_html = '<audio controls="true" src="' . $picture_url . '" autostart="' . $autostart . '"></audio>';
} elseif ($mime_content['player'] == 'HTMLV') {
$pic_html = '<video controls="true" src="' . $picture_url . '" autostart="' . $autostart . '"' . $image_size['whole'] . '></video>';
} else {
$players['WMP'] = array('id' => 'MediaPlayer',
//'clsid' => 'classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" ',
'clsid' => '',
'codebase' => 'codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" ',
'mime' => 'type="application/x-mplayer2" ',
);
$players['DIVX'] = array('id' => 'DivX',
'clsid' => 'classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616"',
'codebase' => 'codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab"',
'mime' => 'type="video/divx"'
);
$players['RMP'] = array('id' => 'RealPlayer',
'clsid' => 'classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ',
'codebase' => '',
'mime' => 'type="audio/x-pn-realaudio-plugin" '
);
$players['QT'] = array('id' => 'QuickTime',
'clsid' => 'classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" ',
'codebase' => 'codebase="http://www.apple.com/qtactivex/qtplugin.cab" ',
'mime' => 'type="video/x-quicktime" '
);
$players['SWF'] = array('id' => 'SWFlash',
//'clsid' => ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ',
'clsid' => '',
'codebase' => '',
'mime' => 'type="application/x-shockwave-flash" ',
'data' => 'data="'.$picture_url.'" '
);
$players['UNK'] = array('id' => 'DefaultPlayer',
'clsid' => '',
'codebase' => '',
'mime' => ''
);
$player = $players[$mime_content['player']];
if (!$player) {
$player = 'UNK';
}
$pic_html = '<object id="'.$player['id'].'" '.$player['data'].$player['clsid'].$player['codebase'].$player['mime'].$image_size['whole'].'>';
$pic_html .= "<param name=\"autostart\" value=\"$autostart\" /><param name=\"src\" value=\"". $picture_url . "\" />";
$pic_html .= '</object><br />' . $LINEBREAK;
}
//PLUGIN FILTER
$pic_html = CPGPluginAPI::filter('html_other_media', $pic_html);
}
$CURRENT_PIC_DATA['html'] = $pic_html;
$CURRENT_PIC_DATA['header'] = '';
$CURRENT_PIC_DATA['footer'] = '';
$CURRENT_PIC_DATA = CPGPluginAPI::filter('file_data',$CURRENT_PIC_DATA);
$params = array('{CELL_HEIGHT}' => '100',
'{IMAGE}' => $CURRENT_PIC_DATA['header'].$CURRENT_PIC_DATA['html'].$CURRENT_PIC_DATA['footer'],
'{ADMIN_MENU}' => $CURRENT_PIC_DATA['menu'],
'{TITLE}' => bb_decode($CURRENT_PIC_DATA['title'])."<br />".$CURRENT_PIC_DATA['user1'],
'{CAPTION}' => bb_decode($CURRENT_PIC_DATA['caption']),
);
return template_eval($template_display_media, $params);
}
/******************************************************************************
** Section <<<theme_html_picture>>> - END
******************************************************************************/
-
Thanks Andre. It works perfectly.
Regards.
-
Please
tag your answer as "solved" by clicking on the "Topic Solved" button on the bar at the left hand side at the bottom of your thread.
-
I'm sorry for reviving such an old thread, but the issue is related to this change.
After adding this bit of code (or removing && $superCage->cookie->keyExists($CONFIG['cookie_name'] . '_data')) there is some (un)expected behavior in the "Most Viewed" page.
Since every hit is counted, the page counts are updated when a user clicks to the previous photo, which means he'll cycle thru the same photos with the same hit counts.
I solved this problem by limiting the hit counter to update only once every 60 seconds.
Change the following code:
if ((!USER_IS_ADMIN && $CONFIG['count_admin_hits'] == 0 || $CONFIG['count_admin_hits'] == 1)) {
add_hit($pid);
if (count($USER['liv']) > 4) array_shift($USER['liv']);
array_push($USER['liv'], $pid);
}
with:
if ((!USER_IS_ADMIN && $CONFIG['count_admin_hits'] == 0 || $CONFIG['count_admin_hits'] == 1) && !in_array($pid, $USER['liv']) && $superCage->cookie->keyExists($CONFIG['cookie_name'] . '_data' <= time() - 60)) {
add_hit($pid);
if (count($USER['liv']) > 4) array_shift($USER['liv']);
array_push($USER['liv'], $pid);
where "60" is the number of seconds between hit counts. You can alter this number to suit your needs.
I hope this makes sense...
-
And just noticed that the above code doesn't work as expected :'(.
I'll come back to this later...
-
just noticed that the above code doesn't work as expected :'(.
Probably because
$superCage->cookie->keyExists($CONFIG['cookie_name'] . '_data' <= time() - 60)
makes no sense, as
$superCage->cookie->keyExists($CONFIG['cookie_name'] . '_data'
never returns a timestamp.
-
Any ideas how to limit the hits per viewer to 1 per x-amount of time?
I thought about using && ($CURRENT_PIC_DATA['mtime'] == 0 || (UNIX_TIMESTAMP($CURRENT_PIC_DATA['mtime']) <= time() - 60)) as a reference, but then if 1,000 different people happen to view the image within one minute it would count as only 1 hit.
-
You'd need to store for each user when he's viewed (or added a valid view count) for each picture. For registered users this could be done in the database, but for guests you need to store it in a cookie, as several people could share the same IP address, which is the only criteria how you could distinguish them. That's why I suggest to use always cookies.
So you store something like
pid | timestamp
---------------
123 | 125673233
456 | 123456358
789 | 123452521
as an array in a cookie and add an appropriate check to the code you already tried to modify.