diff options
Diffstat (limited to 'BSF/include/functions_rate.inc.php')
-rw-r--r-- | BSF/include/functions_rate.inc.php | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/BSF/include/functions_rate.inc.php b/BSF/include/functions_rate.inc.php new file mode 100644 index 000000000..ad3de1b2f --- /dev/null +++ b/BSF/include/functions_rate.inc.php @@ -0,0 +1,134 @@ +<?php +// +-----------------------------------------------------------------------+ +// | Piwigo - a PHP based picture gallery | +// +-----------------------------------------------------------------------+ +// | Copyright(C) 2008 Piwigo Team http://piwigo.org | +// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | +// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | +// +-----------------------------------------------------------------------+ +// | This program is free software; you can redistribute it and/or modify | +// | it under the terms of the GNU General Public License as published by | +// | the Free Software Foundation | +// | | +// | This program is distributed in the hope that it will be useful, but | +// | WITHOUT ANY WARRANTY; without even the implied warranty of | +// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | +// | General Public License for more details. | +// | | +// | You should have received a copy of the GNU General Public License | +// | along with this program; if not, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +/** + * rate a picture by a user + * + * @param int image identifier + * @param int rate + * @return void + */ +function rate_picture($image_id, $rate) +{ + global $conf, $user; + + if (!isset($rate) + or !$conf['rate'] + or !in_array($rate, $conf['rate_items'])) + { + return; + } + + $user_anonymous = is_autorize_status(ACCESS_CLASSIC) ? false : true; + + if ($user_anonymous and !$conf['rate_anonymous']) + { + return; + } + + $ip_components = explode('.', $_SERVER["REMOTE_ADDR"]); + if (count($ip_components) > 3) + { + array_pop($ip_components); + } + $anonymous_id = implode ('.', $ip_components); + + if ($user_anonymous) + { + $save_anonymous_id = pwg_get_cookie_var('anonymous_rater', $anonymous_id); + + if ($anonymous_id != $save_anonymous_id) + { // client has changed his IP adress or he's trying to fool us + $query = ' +SELECT element_id + FROM '.RATE_TABLE.' + WHERE user_id = '.$user['id'].' + AND anonymous_id = \''.$anonymous_id.'\' +;'; + $already_there = array_from_query($query, 'element_id'); + + if (count($already_there) > 0) + { + $query = ' +DELETE + FROM '.RATE_TABLE.' + WHERE user_id = '.$user['id'].' + AND anonymous_id = \''.$save_anonymous_id.'\' + AND element_id IN ('.implode(',', $already_there).') +;'; + pwg_query($query); + } + + $query = ' +UPDATE '.RATE_TABLE.' + SET anonymous_id = \'' .$anonymous_id.'\' + WHERE user_id = '.$user['id'].' + AND anonymous_id = \'' . $save_anonymous_id.'\' +;'; + pwg_query($query); + } // end client changed ip + + pwg_set_cookie_var('anonymous_rater', $anonymous_id); + } // end anonymous user + + $query = ' +DELETE + FROM '.RATE_TABLE.' + WHERE element_id = '.$image_id.' + AND user_id = '.$user['id'].' +'; + if (isset($user_anonymous)) + { + $query.= ' AND anonymous_id = \''.$anonymous_id.'\''; + } + pwg_query($query); + $query = ' +INSERT + INTO '.RATE_TABLE.' + (user_id,anonymous_id,element_id,rate,date) + VALUES + (' + .$user['id'].',' + .'\''.$anonymous_id.'\',' + .$image_id.',' + .$rate + .',NOW()) +;'; + pwg_query($query); + + // update of images.average_rate field + $query = ' +SELECT ROUND(AVG(rate),2) AS average_rate + FROM '.RATE_TABLE.' + WHERE element_id = '.$image_id.' +;'; + $row = mysql_fetch_array(pwg_query($query)); + $query = ' +UPDATE '.IMAGES_TABLE.' + SET average_rate = '.$row['average_rate'].' + WHERE id = '.$image_id.' +;'; + pwg_query($query); +} + +?>
\ No newline at end of file |