get_user_groups(); if ($concours_id !== null) { $this->concours_id = (int)$concours_id; $this->get_concours($concours_id); } // Load general parameters $this->load_config(); } // Load general configuration from config_database function load_config() { $query = ' SELECT value FROM '.CONFIG_TABLE.' WHERE param = \'concoursphoto\' ;'; $result = pwg_query($query); if($result) { $row = mysql_fetch_row($result); if(is_string($row[0])) { $this->my_config = unserialize(($row[0])); } } $this->load_default_config(); } // Initialize default values of params private function load_default_config() { include CONCOURS_INC_PATH.'default_values.inc.php'; foreach ($concours_default_values as $key => $value) { if (!isset($this->my_config[$key])) $this->my_config[$key] = $value; } } // Save general configuration to config_database function save_config() { $query = ' REPLACE INTO '.CONFIG_TABLE.' VALUES( \'concoursphoto\', \''.serialize($this->my_config).'\', \'Configuration Concours Photo\') ;'; $result = pwg_query($query); if($result) return true; else return false; } // Retrieve user groups function get_user_groups() { global $user; if ($this->debug) foreach ($user as $id=>$val) { if (is_array($val)) foreach ($val as $id2=>$val2) echo "user[".$id."][".$id2."]=".$val2."\n"; else echo "user[".$id."]=".$val."\n"; } $query = 'SELECT group_id FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $user['id'] . ';'; if ($this->debug) echo $query."\n"; $result = pwg_query($query); while ($row = mysql_fetch_assoc($result)) { array_push($this->user_groups, $row['group_id']); } if ($this->debug) foreach ($this->user_groups as $gr) echo "Group=".$gr."\n"; } // create a concours and store it to db. // return id for concours. function create_concours() {} // Get informations array for a concours id function get_concours($concours_id = null) { if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT * FROM ' . CONCOURS_TABLE .' WHERE id =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . ' LIMIT 1 '; $result = pwg_query($query); if ($result) $this->concours_infos = mysql_fetch_assoc($result); } } // save informations on database for a concours_id function save_concours($concours_id = null) { if ($concours_id!== null or $this->concours_id !== null) { $query = "INSERT INTO " . CONCOURS_TABLE . " ( `id`, `create_date`, `name`, `descr`, `begin_date`, `end_date`, `category`, `groups`, `method`, `guest` ) VALUES (".($concours_id !== NULL ? $concours_id : $this->concours_id).", now(), \"".$this->concours_infos['name']."\", \"".$this->concours_infos['descr']."\", \"".$this->concours_infos['begin_date']."\", \"".$this->concours_infos['end_date']."\", ".$this->concours_infos['category'].", ".$this->concours_infos['groups'].", ".$this->concours_infos['method'].", ".($this->concours_infos['guest'] ? "TRUE" : "FALSE")." );"; if (pwg_query($query) != null) return true; else return false; } else return false; } // update informations on database for a concours_id function update_concours($concours_id = null) { if ($concours_id!== null or $this->concours_id !== null) { $query = "UPDATE " . CONCOURS_TABLE . " SET create_date = now(), name = \"".$this->concours_infos['name']."\", descr = \"".$this->concours_infos['descr']."\", begin_date = \"".$this->concours_infos['begin_date']."\", end_date = \"".$this->concours_infos['end_date']."\", category = ".$this->concours_infos['category'].", groups = ".$this->concours_infos['groups'].", method = ".$this->concours_infos['method'].", guest = ".($this->concours_infos['guest'] ? "TRUE" : "FALSE")." WHERE id = ".($concours_id !== NULL ? $concours_id : $this->concours_id)." ;"; pwg_query($query); if (pwg_query($query) != null) return true; else return false; } else return false; } // update field on database for a concours_id function update_concoursfield($field_id, $concours_id = null) { if ($concours_id!== null or $this->concours_id !== null) { $query = "UPDATE " . CONCOURS_TABLE . " SET " . $field_id." = ". $this->concours_infos[$field_id] . " WHERE id = ".($concours_id !== NULL ? $concours_id : $this->concours_id)." ;"; pwg_query($query); if (pwg_query($query) != null) return true; else return false; } else return false; } // delete concours from db (and all sub informations such as details, vote and result function delete_concours($concours_id = null) { if ($concours_id!== null or $this->concours_id !== null) { $query = ' DELETE FROM ' . CONCOURS_TABLE .' WHERE id =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' '; pwg_query($query); $query = ' DELETE FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' '; pwg_query($query); $query = ' DELETE FROM ' . CONCOURS_DATA_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' '; pwg_query($query); $query = ' DELETE FROM ' . CONCOURS_RESULT_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' '; pwg_query($query); } else return false; } // today's date is between open and close date of concours? function is_active($concours_id = NULL) { if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT id FROM ' . CONCOURS_TABLE .' WHERE id =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . ' AND time_to_sec(TIMEDIFF(begin_date,now())) < 0 AND time_to_sec(TIMEDIFF(now(), end_date)) < 0 '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; if ($result != NULL) return true; else return false; } else return NULL; } // today's date is not between open and close date of concours? function is_closed($concours_id = NULL) { if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT id FROM ' . CONCOURS_TABLE .' WHERE id =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . ' AND time_to_sec(TIMEDIFF(now(), end_date)) > 0 '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; if ($result != NULL) return true; else return false; } else return NULL; } // Get criterias that are stored on db for default mode (concours_id = 0) function get_default_criterias() { $criterias = $this->get_criterias_list(0); $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id FROM ' . CONCOURS_DETAIL_TABLE . ' ;'; list($next_element_id) = mysql_fetch_array(pwg_query($query)); foreach ($criterias as $criteria) { if ($this->debug) echo "NEXT =".$next_element_id."\n"; $query = 'INSERT INTO '.CONCOURS_DETAIL_TABLE.' (id, id_concours, criteria_id, name, descr, min_value, max_value, ponderation, uppercriteria)' .'VALUES ('.$next_element_id.', '.$this->concours_id.', ' .$criteria['criteria_id'].', "'.$criteria['name'].'", "' .$criteria['descr'].'", '.$criteria['min_value'].', ' .$criteria['max_value'].', '.$criteria['ponderation'].', ' .($criteria['uppercriteria'] ? $criteria['uppercriteria'] : 'NULL').') ;'; $result = pwg_query($query); if ($this->debug) echo $query; $next_element_id = $next_element_id +1; } } // Get criterias from a concours function get_criterias_list($concours_id = NULL) { $criteria_list = array(); if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT * FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' ORDER BY criteria_id '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; while ($row = mysql_fetch_assoc($result)) { array_push($criteria_list, $row); } return $criteria_list; } else return $criteria_list; } // Get list of the fist level criterias function get_firstlevel_criterias($concours_id = NULL) { $criteria_list = array(); if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT * FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' AND uppercriteria IS NULL ORDER BY criteria_id '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; while ($row = mysql_fetch_assoc($result)) { if ($this->debug) echo "criteria_id=".$row['criteria_id']."\n"; array_push($criteria_list, $row); } return $criteria_list; } else return $criteria_list; } // check if a criteria contains subcriterias function is_criterias_contains_sub($criteria_id, $concours_id = NULL) { if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT criteria_id FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' AND uppercriteria = '.$criteria_id.' '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; // mini 1 line if(mysql_fetch_assoc($result)) return true; else return false; } return NULL; } // Get list of subcriterias from a criteria_id function get_subcriterias($criteria_id, $concours_id = NULL) { $criteria_list = array(); if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT * FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' AND uppercriteria = '.$criteria_id.' ORDER BY criteria_id '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; while ($row = mysql_fetch_assoc($result)) { array_push($criteria_list, $row); } return $criteria_list; } else return $criteria_list; } // Get a detail from a criteria function get_criteria($criteria_id, $concours_id = NULL) { $criteria = array(); if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT * FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id_concours = '. ($concours_id !== null ? $concours_id : $this->concours_id ) . ' AND criteria_id =' . $criteria_id . ' '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; $criteria = mysql_fetch_assoc($result); /* while ($row = mysql_fetch_assoc($result)) { array_push($criteria, $row); } */ } return $criteria; } // Get a detail from a criteria function get_criteria_by_id($id) { $criteria = array(); $query = ' SELECT * FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id =' . $id . ' '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; $criteria = mysql_fetch_assoc($result); /* while ($row = mysql_fetch_assoc($result)) { array_push($criteria, $row); } */ return $criteria; } // Add a criteria to a concours // Datas is an array and contains all infos. // Return the criteria id function add_criteria($datas, $concours_id = NULL) { // determines the criteria_id if ($concours_id!== null or $this->concours_id !== null) { $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id FROM ' . CONCOURS_DETAIL_TABLE . ' ;'; list($next_element_id) = mysql_fetch_array(pwg_query($query)); $query = 'SELECT IF(MAX(criteria_id)+1 IS NULL, 1, MAX(criteria_id)+1) AS next_criteria_id FROM ' . CONCOURS_DETAIL_TABLE . ' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ) . ' ;'; list($next_criteria_id) = mysql_fetch_array(pwg_query($query)); $query = ' INSERT INTO ' . CONCOURS_DETAIL_TABLE .' (`id`, `id_concours`, `criteria_id`, `name`, `descr`, `min_value`, `max_value`, `ponderation`, `uppercriteria`) VALUES ( '.$next_element_id.', '.($concours_id !== null ? $concours_id : $this->concours_id ).', '.$next_criteria_id.', "'.$datas['name'].'", "'.$datas['descr'].'", '.$datas['min_value'].' , '.$datas['max_value'].', '.$datas['ponderation'].' , '.($datas['uppercriteria'] ? $datas['uppercriteria'] : 'NULL').' );'; pwg_query($query); if ($this->debug) echo $query."\n"; } } // Update a criteria to a concours // Datas is an array and contains all infos. function update_criteria($datas, $concours_id = NULL) { // determines the criteria_id if ($concours_id!== null or $this->concours_id !== null) { $query = ' UPDATE ' . CONCOURS_DETAIL_TABLE .' SET name = "'.$datas['name'].'", descr = "'.$datas['descr'].'", min_value = '.$datas['min_value'].', max_value = '.$datas['max_value'].', '.($datas['uppercriteria'] == false ? '' : 'uppercriteria = '.($datas['uppercriteria'] ? $datas['uppercriteria'].',' : 'NULL ,')).' ponderation = '.$datas['ponderation'].' WHERE id = '.$datas['id'].';'; pwg_query($query); if ($this->debug) echo $query."\n"; } } // Delete a criteria from a concours function delete_criteria($criteria_id, $concours_id = NULL) { if ($concours_id!== null or $this->concours_id !== null) { $query = ' DELETE FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' AND criteria_id = '.$criteria_id.' '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; if($result) return true; else return false; } else return null; } // Delete a criteria (with id) from a concours function delete_criteria_by_id($id) { $query = ' DELETE FROM ' . CONCOURS_DETAIL_TABLE .' WHERE id =' . $id . ' '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; } // check if a result is already present in the database function is_result_present($concours_id = null) { // recover all img_id from the category $query = 'SELECT DISTINCT(id_concours)' .' FROM ' .CONCOURS_RESULT_TABLE .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ).';'; $result = pwg_query($query); // For each images if (mysql_fetch_assoc($result)) return true; else return false; } // function to return the number of votes for a concours by images function nb_votes_by_img($concours_id = NULL) { // nb of users who vote for each image (for a selected concours $query = 'SELECT img_id, COUNT(DISTINCT user_id) AS NBVOTE FROM ' . CONCOURS_DATA_TABLE .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ) .' AND ipguest IS NULL' .' GROUP BY img_id ' .';'; $result = pwg_query($query); $nbvotes = array(); while ($row = mysql_fetch_assoc($result)) { $nbvotes[$row['img_id']] = $row['NBVOTE']; } // Add guest infos $query = 'SELECT img_id, COUNT(DISTINCT user_id, ipguest) AS NBVOTE FROM ' . CONCOURS_DATA_TABLE .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ) .' AND ipguest IS NOT NULL' .' GROUP BY img_id ' .';'; $result = pwg_query($query); if ($this->debug) echo "NBVOTE = ".$query."\n"; while ($row = mysql_fetch_assoc($result)) if (!isset($nbvotes[$row['img_id']])) $nbvotes[$row['img_id']] = $row['NBVOTE']; else $nbvotes[$row['img_id']] += $row['NBVOTE']; return $nbvotes; } // Get All iaddr for guest who have vote (IP Stores in db) in a concours function get_guest_list($concours_id = NULL) { $ipguest = array(); if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT distinct(ipguest) FROM ' . CONCOURS_DATA_TABLE .' WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . ' AND ipguest IS NOT NULL ORDER BY ipguest '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; while ($row = mysql_fetch_assoc($result)) { array_push($ipguest, $row['ipguest']); } if ($this->debug) { foreach ($ipguest as $ip) echo "IP=".$ip."\n"; } return $ipguest; } else return $ipguest; } // After concours is completed (closed date is passed), generate the result and store it to DB function create_result($concours_id = NULL) { global $conf; // var which contains id=img_id and val =global note $global_note = array(); if ($concours_id!== null or $this->concours_id !== null) { // only for closed concours and not already result generated if ($this->is_closed($concours_id) AND ! $this->is_result_present($concours_id)) { // array with the number of vote by image for the concours. Needed for the moyenne $nbvotes = $this->nb_votes_by_img($concours_id); $user_id = array(); // vars not initialized if ($this->concours_infos == array()) $this->get_concours(); $category = $this->concours_infos['category']; if ($this->debug) echo "CAT=".$category; // Get all user_id from a concours $query = 'SELECT DISTINCT user_id' .' FROM ' .CONCOURS_DATA_TABLE .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ) .' AND user_id <> '.$conf['guest_id'] .';'; $result = pwg_query($query); if ($this->debug) echo $query; while ($row = mysql_fetch_assoc($result)) array_push($user_id, $row['user_id']); // Add guest info is present $ipguest = array(); if ($concours_id!== null) $ipguest = $this->get_guest_list(($concours_id !== null ? $concours_id : $this->concours_id )); if ($this->debug) { foreach ($user_id as $userid) echo "USER = ".$userid; } foreach ($ipguest as $userid) echo "IPGUEST = ".$userid; // recover all img_id from the category $query = 'SELECT DISTINCT(image_id)' .' FROM ' .IMAGE_CATEGORY_TABLE .' WHERE category_id = '.$category.';'; $result = pwg_query($query); // For each images while ($row = mysql_fetch_assoc($result)) { if ($this->debug) echo "IMG_ID=".$row['image_id']."\n"; foreach ($user_id as $i => $userid) { if (!isset($global_note[$row['image_id']])) $global_note[$row['image_id']] = 0; $global_note[$row['image_id']] += $this->get_img_globalnote_user($row['image_id'], null, $userid); } // Add guest scores if present foreach ($ipguest as $i => $ipguestt) { if (!isset($global_note[$row['image_id']])) $global_note[$row['image_id']] = 0; $global_note[$row['image_id']] += $this->get_img_globalnote_user($row['image_id'], null, null, $ipguestt); } } if ($this->debug) { foreach ($global_note as $id => $val) echo "Note img ( ".$id.") = ".$val."\n"; } // update database and store result into RESULT table // note = global note $IMGmoyenne = 0; foreach ($global_note as $id => $val) // id contains the image id { if ($this->debug) echo $nbvotes[$id]; $IMGmoyenne = (isset($nbvotes[$id]) && $nbvotes[$id] != 0 ? $val/$nbvotes[$id] : 0); $query = 'INSERT INTO ' . CONCOURS_RESULT_TABLE .'(`id_concours`, `img_id`, `date` , `note`, `moyenne`, `nbvotant` ) VALUES ('.($concours_id !== null ? $concours_id : $this->concours_id ) .', '.$id .', now() ' .', '.$val .', '.$IMGmoyenne .', '.(isset($nbvotes[$id]) ? $nbvotes[$id] : 0) .');'; $result = pwg_query($query); } } else return false; } else return false; } // Check if an image's author is the same as the actual user function check_img_user($img_id) { global $user; $query = ' SELECT author FROM ' . IMAGES_TABLE .' WHERE id =' . $img_id . ' '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; if ($result) { $row = mysql_fetch_assoc($result); $authorid = get_userid($row['author']); if ($authorid and ($authorid == $user['id'])) return true; else return false; } return false; } // Add tpl to picture.php page to display concours informations and vote function display_concours_to_picture() { // Step0 : if user = guest, check the concours param and store ip address to user name. // Step1 : concours is defined to this category AND concours is open AND user is authorized to access to this category (thru group) // Step1 bis : dont show concours if img_author = user_id // Step 2 : Recover stored informations in db for this user // Step 3 : Complete tpl information // Step 4 : concat tpl global $page, $user, $template, $conf; // Get user group. $this->get_user_groups(); $concours = array(); // STEP 0 if ($this->debug) echo "STEP0\n"; $user['ipguest'] = null; echo "user id=".$user['id']; // Check if the user is a guest only if (is_a_guest()) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; elseif(isset($_SERVER['HTTP_CLIENT_IP'])) $IP = $_SERVER['HTTP_CLIENT_IP']; else $IP = $_SERVER['REMOTE_ADDR']; // store ip $user['ipguest'] = $IP; if ($this->debug) echo "user ip guest=".$user['ipguest']; } // DEBUG if ($this->debug) { foreach ($user as $id=>$val) { if (is_array($val)) foreach ($val as $id2=>$val2) echo "user[".$id."][".$id2."]=".$val2."\n"; else echo "user[".$id."]=".$val."\n"; } } // END DEBUG // DEBUG if ($this->debug) foreach ($page as $id=>$val) { if (is_array($val)) foreach ($val as $id2=>$val2) echo "page[".$id."][".$id2."]=".$val2."\n"; else echo "page[".$id."]=".$val."\n"; } // END DEBUG // disable author name on image which are present in a concours. // check the categories where the current image is present and disable the author name if (isset($this->my_config['mask_author']) && $this->my_config['mask_author'] == true) { // Get all categories where the current image is present $query = ' SELECT category_id,uppercats,commentable,global_rank FROM '.IMAGE_CATEGORY_TABLE.' INNER JOIN '.CATEGORIES_TABLE.' ON category_id = id WHERE image_id = '.$page['image_id'].' ;'; // echo $query; $result = pwg_query($query); $related_categories = array(); while ($row = mysql_fetch_array($result)) { array_push($related_categories, $row['category_id']); } // //echo related_categories; if (count($related_categories)) { // Request for all concours prepared & actived on each categories $query = ' SELECT * FROM ' . CONCOURS_TABLE .' WHERE category IN ('.implode(',', $related_categories).') AND time_to_sec(TIMEDIFF(now(), end_date)) < 0 '; // echo $query; $result = pwg_query($query); // If one or more concours are found, the author name is masked if ($result && mysql_fetch_assoc($result)) { $template->assign('INFO_AUTHOR',l10n('concours_img_author')); } } } // End disable author name if (($page['section']) == 'categories' AND !empty($page['category'])) { if ($this->debug) echo "STEP1\n"; //------------ // Step 1 /* if ($this->my_config['mask_author'] && $this->my_config['mask_author'] == true) { // Request for all concours prepared & actived $query = ' SELECT * FROM ' . CONCOURS_TABLE .' WHERE category =' . $page['category']['id'] . ' AND time_to_sec(TIMEDIFF(now(), end_date)) < 0 '; // echo $query; $result = pwg_query($query); if ($result && mysql_fetch_assoc($result)) $template->assign('INFO_AUTHOR',l10n('concours_img_author')); } */ $query = ' SELECT * FROM ' . CONCOURS_TABLE .' WHERE category =' . $page['category']['id'] . ' AND time_to_sec(TIMEDIFF(begin_date,now())) < 0 AND time_to_sec(TIMEDIFF(now(), end_date)) < 0 '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; while ($row = mysql_fetch_assoc($result)) { if (!empty($row['groups'])) { if ($this->debug) echo "GROUPS=".$row['groups']; $authorized_groups = explode(',', $row['groups']); if (array_intersect($this->user_groups, $authorized_groups) == array()) { if ($this->debug) echo "ERROR GROUPS"; continue; } // If no group is parameter for that concours ==> available for all registered users $concours = $row; } else $concours = $row; } if ($this->debug) echo "STEP1 bis\n"; //------------ // Step 1 bis // Actual user is the author of the picture ==>end if ( !$this->my_config['author_vote_available'] AND $this->check_img_user($page['current_item'])) return; if ($this->debug) echo "STEP2\n"; //------------ // Step 2 if ($concours != array()) { // If user validate the notation if (isset($_POST['concours_submit'])) { $user_note = ""; if ($this->debug) echo "SUBMIT"; // concat all the notes to save on db $firstcriterias = $this->get_firstlevel_criterias($concours['id']); foreach ($firstcriterias as $criteria) { // First without sub criterias if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours['id'] )) { // Check value $value = str_replace(",",".",$_POST[$criteria['criteria_id']]); $value = str_replace(" ","",$value); $value = floatval($value); if ($value < floatval($criteria['min_value'])) $value = floatval($criteria['min_value']); if ($value > floatval($criteria['max_value'])) $value = floatval($criteria['max_value']); $user_note .= (strlen($user_note) != 0 ? ";" : "").$criteria['criteria_id']."=".$value; } else { $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours['id'] ); foreach ($secondcriterias as $subcriteria) { // Check value $value = str_replace(",",".",$_POST[$subcriteria['criteria_id']]); $value = str_replace(" ","",$value); $value = floatval($value); if ($value < floatval($subcriteria['min_value'])) $value = floatval($subcriteria['min_value']); if ($value > floatval($subcriteria['max_value'])) $value = floatval($subcriteria['max_value']); $user_note .= (strlen($user_note) != 0 ? ";" : "").$subcriteria['criteria_id']."=".$value; } } } // $datas = "0=0"; $this->store_img_note_user($page['current_item'], $user_note, $concours['id'], $user['ipguest']); if ($this->debug) echo "COMMENT=".$_POST['CONCOURS_COMMENT']; $this->store_img_comment_user($page['current_item'], $_POST['concours_comment'], $concours['id'], $user['ipguest']); } // If user want to erase notes if (isset($_POST['concours_raz'])) { if ($this->debug) echo "RAZ"; $this->RAZ_img_note_user($page['current_item'], $concours['id'], $user['ipguest']); } else { // Recover previous note in DB (if exists) $user_notes = $this->get_img_note_user($page['current_item'], $concours['id'], $user['id'], $user['ipguest']); } // Comment is not RAZ, always restore $comment = $this->get_img_comment_user($page['current_item'], $concours['id'], $user['id'], $user['ipguest']); if ($this->debug) echo "STEP3\n"; //------------ // Step 3 // Recover all 1st level criterias $firstcriterias = $this->get_firstlevel_criterias($concours['id']); foreach ($firstcriterias as $criteria) { if ($this->debug) echo "criteriaID=".$criteria['criteria_id']."\n"; // First without sub criterias if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours['id'] )) { $template->append( 'concours_criteria', array( 'nosub' => true, 'level' => 1, 'id' => $criteria['criteria_id'], // id du critere 'name' => $criteria['name'], // id du critere 'lib' => $criteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')', // libelle du critrer 'val' => (isset($user_notes[$criteria['criteria_id']])?$user_notes[$criteria['criteria_id']] : $criteria['min_value']), // valeur du critere 'min' => $criteria['min_value'], // min 'max' => $criteria['max_value'] // max )); } else { $template->append( 'concours_criteria', array( 'nosub' => false, 'level' => 1, 'id' => $criteria['criteria_id'], // id du critere 'name' => $criteria['name'], // id du critere 'lib' => $criteria['descr'] )); $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours['id'] ); foreach ($secondcriterias as $subcriteria) { if ($this->debug) echo "subcriteriaID=".$criteria['criteria_id']."\n"; $template->append( 'concours_criteria', array( 'nosub' => true, 'level' => 2, 'id' => $subcriteria['criteria_id'], // id du critere 'name' => $subcriteria['name'], // id du critere 'lib' => $subcriteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')', // libelle du critrer 'val' => (isset($user_notes[$subcriteria['criteria_id']])?$user_notes[$subcriteria['criteria_id']] : $subcriteria['min_value']), 'min' => $subcriteria['min_value'], // min 'max' => $subcriteria['max_value'] // max )); } } } // Add the comment $template->assign( 'CONCOURS_COMMENT', $comment); // if a user has already vote for this photo, check if the score change is allowed if ($this->debug) echo "change=".($this->my_config['concours_change_score'] ? "OK" : "KO"); if ($user_notes == array() OR $this->my_config['concours_change_score']) // Allow user to change his vote after a validation $template->assign( 'CONCOURS_CHANGE_SCORE', true); else $template->assign( 'CONCOURS_CHANGE_SCORE', false); // Add concours informations on template $template->assign( 'concours_infos', array( 'name' => $concours['name'], 'descr' => $concours['descr'], 'note' => $this->get_img_globalnote_user($page['current_item'], $concours['id'], null, $user['ipguest']) )); $template->set_filenames(array('concours' => CONCOURS_ROOT.'/template/concours.tpl')); // $template->concat('PLUGIN_PICTURE_AFTER', $template->parse('concours', true)); $template->concat('COMMENT_IMG', $template->parse('concours', true)); // $template->assign('INFO_AUTHOR',l10n('concours_img_author')); } } } // RAZ notation from user to db // fill criterias notes to 0 in DB // return false if error function RAZ_img_note_user($img_id, $concours_id = NULL, $ipguest = null) { $user_note = ""; if ($concours_id === null) if ($this->concours_id !== null) $concours_id = $this->concours_id; else return false; $firstcriterias = $this->get_firstlevel_criterias($concours_id); foreach ($firstcriterias as $criteria) { if ($this->debug) echo "ID=".$criteria['criteria_id']."\n"; // First without sub criterias if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id )) { $user_note .= (strlen($user_note) != 0 ? ";" : "").$criteria['criteria_id']."=".$criteria['min_value']; } else { $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id ); foreach ($secondcriterias as $subcriteria) { if ($this->debug) echo "ID=".$criteria['criteria_id']."\n"; $user_note .= (strlen($user_note) != 0 ? ";" : "").$subcriteria['criteria_id']."=".$subcriteria['min_value']; } } } if ($this->debug) echo "RAZ=>".$user_note."\n"; if (strlen($user_note) != 0) { $this->store_img_note_user($img_id, $user_note, $concours_id, $ipguest); return true; } else return false; } // Store notation from user to db // save with format "criteria_id=note;criteria_id=note..." for data function store_img_note_user($img_id, $datas, $concours_id = NULL, $ipguest = null) { global $user; if ($this->get_img_note_user( $img_id, $concours_id, $user['id'], $ipguest) == array() ) { $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id FROM ' . CONCOURS_DATA_TABLE . ' ;'; list($next_element_id) = mysql_fetch_array(pwg_query($query)); if ($this->debug) echo "Next_element=".$next_element_id."\n"; $query = ' INSERT INTO ' . CONCOURS_DATA_TABLE .' (`id`, `id_concours` , `user_id` , `create_date` , `img_id` , `datas`'. ($ipguest ? ',`ipguest` ' : '') .') VALUES ( '.$next_element_id.',' .($concours_id !== null ? $concours_id : $this->concours_id ) .' , '. $user['id'] .', now(), '.$img_id.', "'.$datas.'"' .($ipguest ? ',"'.$user['ipguest'].'"' : '') .');'; } else { $query = ' UPDATE ' . CONCOURS_DATA_TABLE .' SET datas = "'.$datas.'", create_date = now() WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ).' AND user_id = '.$user['id'].' AND img_id = '.$img_id. ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '') .';'; } if ($this->debug) echo $query."\n"; pwg_query($query); } // get notation's user from db // Return an array with : // Criteria_id ==> value // Note : criterias with subcriterias are not saved and not restored. They are calculated for global result function get_img_note_user($img_id, $concours_id = NULL, $user_id = null, $ipguest = null) { global $user; $img_note = array(); if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT datas FROM ' . CONCOURS_DATA_TABLE .' WHERE id_concours =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . ' AND user_id = '. ($user_id !== null ? $user_id : $user['id']).' AND img_id = '. $img_id . ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '') .';'; if ($this->debug) echo $query."\n"; $result = pwg_query($query); while ($row = mysql_fetch_assoc($result)) { if ($this->debug) echo "row[data]=".$row['datas']."\n"; $datas = explode(";",$row['datas']); foreach ($datas as $val) { if (strpos($val, '=') !== FALSE) $img_note[substr($val, 0, strpos($val, '='))]=substr($val, strpos($val, '=')+1); } } // DEBUG if ($this->debug) foreach ($img_note as $id=>$val) { if (is_array($val)) foreach ($val as $id2=>$val2) echo "img_note[".$id."][".$id2."]=".$val2."\n"; else echo "img_note[".$id."]=".$val."\n"; } // END DEBUG return $img_note; } else return array(); } // get notation's user from db // Return the global note for a picture id from a user function get_img_globalnote_user($img_id, $concours_id = NULL, $user_id = null, $ipguest = null) { global $user; $img_note = array(); $global_user_note = 0; if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT datas FROM ' . CONCOURS_DATA_TABLE .' WHERE id_concours =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . ' AND user_id = '. ($user_id !== null ? $user_id : $user['id']).' AND img_id = '. $img_id . ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '') .';'; $result = pwg_query($query); while ($row = mysql_fetch_assoc($result)) { $datas = explode(";",$row['datas']); foreach ($datas as $val) { if (strpos($val, '=') !== FALSE) $img_note[substr($val, 0, strpos($val, '='))]=substr($val, strpos($val, '=')+1); } } $firstcriterias = $this->get_firstlevel_criterias($concours_id); foreach ($firstcriterias as $criteria) { if ($this->debug) echo "criteriaID=".$criteria['criteria_id']."\n"; // First without sub criterias if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id )) { if (isset($img_note[$criteria['criteria_id']])) $global_user_note += (int)$criteria['ponderation'] * (float)$img_note[$criteria['criteria_id']]; } else { $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id ); foreach ($secondcriterias as $subcriteria) { if ($this->debug) echo "subcriteriaID=".$subcriteria['criteria_id']."\n"; if (isset($img_note[$subcriteria['criteria_id']])) $global_user_note += (int)$subcriteria['ponderation'] * (float)$img_note[$subcriteria['criteria_id']]; } } } return $global_user_note; } else return array(); } // Store comment from user to db function store_img_comment_user($img_id, $datas, $concours_id = NULL, $ipguest = null) { global $user; if (($comment = $this->get_img_note_user( $img_id, $concours_id, null, $ipguest)) == false) { $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id FROM ' . CONCOURS_DATA_TABLE . ' ;'; list($next_element_id) = mysql_fetch_array(pwg_query($query)); if ($this->debug) echo "Next_element=".$next_element_id."\n"; $query = ' INSERT INTO ' . CONCOURS_DATA_TABLE .' (`id`, `id_concours` , `user_id` , `create_date` , `img_id` , `comment`' .($ipguest ? ' `ipguest`' : ''). ') VALUES ( '.$next_element_id.',' .($concours_id !== null ? $concours_id : $this->concours_id ) .' , '. $user['id'] .', now(), '.$img_id.', "'.$datas.'");'; } else { $query = ' UPDATE ' . CONCOURS_DATA_TABLE .' SET comment = "'.$datas.'", create_date = now() WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ).' AND user_id = '.$user['id'].' AND img_id = '.$img_id. ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '') .';'; } if ($this->debug) echo $query."\n"; pwg_query($query); } // Get comment on an image for a user function get_img_comment_user($img_id, $concours_id = NULL, $user_id = null, $ipguest = null) { global $user; $datas = false; if ($concours_id!== null or $this->concours_id !== null) { $query = ' SELECT comment FROM ' . CONCOURS_DATA_TABLE .' WHERE id_concours =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . ' AND user_id = '. ($user_id !== null ? $user_id : $user['id']).' AND img_id = '. $img_id . ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '') .';'; if ($this->debug) echo $query."\n"; $result = pwg_query($query); while ($row = mysql_fetch_assoc($result)) { if ($this->debug) echo "row[comment]=".$row['comment']."\n"; $datas = $row['comment']; } } return $datas; } // Generate csv file for a closed concours with result generated function generate_csv($concours_id = NULL) { global $conf; $file = "rang, id_concours,method, img_id, img_name, img_file, date, note, moyenne, nbvotant, datas\r\n"; if (!(isset($this->concours_infos['method']))) $this->concours_infos['method'] = 1; // recover all img_id from the category $query = 'SELECT id_concours,method, img_id, IMG.name, IMG.file, date, note, moyenne, nbvotant, datas' .' FROM ' .CONCOURS_RESULT_TABLE .' INNER JOIN ' . CONCOURS_TABLE.' AS CONC on CONC.id = id_concours' .' INNER JOIN ' . IMAGES_TABLE.' AS IMG on IMG.id = img_id' .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ); if ($this->concours_infos['method'] == 1) // total $query .= ' ORDER BY note DESC'; elseif ($this->concours_infos['method'] == 2) // moyenne $query .= ' ORDER BY moyenne DESC'; $query .=';'; $result = pwg_query($query); // For each images $rang = 1; while ($row = mysql_fetch_assoc($result)) { $file .= ($row['nbvotant'] != 0 ? $rang : 'N/A').', ' .$row['id_concours'].', ' .$row['method'].', ' .$row['img_id'].', ' .$row['name'].', ' .$row['file'].', ' .$row['date'].', ' .$row['note'].', ' .$row['moyenne'].', ' .$row['nbvotant'].', ' .($row['datas'] != null ? $row['datas'] : '') ."\r\n"; $rang ++; } return $file; } // Generate csv file for a closed concours with result generated and all users informations function generate_detail_csv($concours_id = NULL) { global $conf; if ($concours_id === null) $concours_id = $this->concours_id; // Prepare the list of criteria $criteria_list = ""; $firstcriterias = $this->get_firstlevel_criterias($concours_id); $ident1 = 1; foreach ($firstcriterias as $criteria) { // format (id:name) $criteria_list .= (strlen($criteria_list) ? "," : "") .$ident1.":".$criteria['name'] ."(id=".$criteria['criteria_id'].")"; // First wit sub criterias if ($this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id )) { $ident2 = 1; $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id ); foreach ($secondcriterias as $subcriteria) { // format (id:name) $criteria_list .= (strlen($criteria_list) ? "," : "") .$ident1.".".$ident2 .":".$subcriteria['name']."(id=".$subcriteria['criteria_id'].")"; $ident2 ++; } } $ident1++; } if ($this->debug) echo "CRITERIA_LIST=".$criteria_list."\n"; $user_list = array(); $users_criteria = ""; // Get all the users who have notes for the concours $query = 'SELECT distinct(user_id), USER.username' .' FROM ' .CONCOURS_DATA_TABLE .' INNER JOIN ' . USERS_TABLE.' AS USER on USER.id = user_id' .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ) // Dont take the guest informations because .' AND user_id <> '.$conf['guest_id'] .' ORDER BY username ASC' .';'; $result = pwg_query($query); // For each user while ($row = mysql_fetch_assoc($result)) { array_push($user_list, $row); $users_criteria .= (strlen($users_criteria) ? "," : "")."user, user_global_note, comment, ".$criteria_list; } $ipguest = array(); // Get guest info (if available) if ($this->concours_infos['guest']) { $ipguest = $this->get_guest_list(); // For each guest foreach ( $ipguest as $i => $userid ) //on parcours le tableau { $users_criteria .= (strlen($users_criteria) ? "," : "")."user, user_global_note, comment, ".$criteria_list; } } if ($this->debug) echo "users_criteria=".$users_criteria."\n"; // All informations in csv format $file = "rang, id_concours, method, nom_concours, date_debut, date_fin, date_export, img_id, img_name, img_file, img_author, note, moyenne, nbvotant, datas," .$users_criteria ."\r\n"; // nb of users who vote for each image // NOT NEEDED, INFO STORE IN DATABASE 'RESULT' $nbvotes = $this->nb_votes_by_img($concours_id); // recover all img_id from the category if (!(isset($this->concours_infos['method']))) $this->concours_infos['method'] = 1; $query = 'SELECT id_concours, method, img_id, IMG.name, IMG.file, IMG.author, date, note, moyenne, nbvotant, datas, comment' .' FROM ' .CONCOURS_RESULT_TABLE .' INNER JOIN ' . CONCOURS_TABLE.' AS CONC on CONC.id = id_concours' .' INNER JOIN ' . IMAGES_TABLE.' AS IMG on IMG.id = img_id' .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ); if ($this->concours_infos['method'] == 1) // total $query .= ' ORDER BY note DESC'; elseif ($this->concours_infos['method'] == 2) // moyenne $query .= ' ORDER BY moyenne DESC'; $query .=';'; if ($this->debug) echo $query; $result = pwg_query($query); // For each images $rang = 1; $previousNote = $previousMoy = 0; while ($row = mysql_fetch_assoc($result)) { // Check and verify for exaequo if ($this->my_config['check_exaequo']) { if ( ($this->concours_infos['method'] == 1 // total AND ($row['note'] == $previousNote)) OR ($this->concours_infos['method'] == 2 // moyenne AND ($row['moyenne'] == $previousMoy))) { $rang --; } } $file .= ($row['nbvotant'] != 0 ? $rang : 'N/A').', ' .$row['id_concours'].', ' .$row['method'].', ' .str_replace(",", "",$this->concours_infos['name']).', ' .$this->concours_infos['begin_date'].', ' .$this->concours_infos['end_date'].', ' .$row['date'].', ' .$row['img_id'].', ' .str_replace(",", "",$row['name']).', ' .$row['file'].', ' .$row['author'].', ' .$row['note'].', ' .$row['moyenne'].', ' .$row['nbvotant'].', ' // .(isset($nbvotes[$row['img_id']]) ? $nbvotes[$row['img_id']] : 0).', ' .($row['datas'] != null ? $row['datas'] : '') ; foreach ($user_list as $uuser) { $comment = $this->get_img_comment_user($row['img_id'], $concours_id, $uuser['user_id']); $user_note = $this->get_img_note_user($row['img_id'], $concours_id, $uuser['user_id']); $file .= ', '.$uuser['username'].', '.$this->get_img_globalnote_user($row['img_id'], $concours_id, $uuser['user_id']) // .', '.($row['comment'] != null ? str_replace(",", "",$row['comment']) : '') .', '.($comment != false ? str_replace(array(",","\r\n", "\n", "\r"), " ",$comment) : '') .', ' ; $user_note_by_crit = ""; foreach ($firstcriterias as $criteria) { // First without sub criterias if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id )) { $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").(isset($user_note[$criteria['criteria_id']]) ? $user_note[$criteria['criteria_id']] : ' '); } else { $user_note_by_subcrit = ""; $subcrit_note = 0; $user_has_vote = false; $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id ); foreach ($secondcriterias as $subcriteria) { if (isset($user_note[$subcriteria['criteria_id']])) $user_has_vote = true; $user_note_by_subcrit .= (strlen($user_note_by_subcrit) ? "," : "").(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : ' '); $subcrit_note += (int)$subcriteria['ponderation'] * (float)(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : 0); } $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").($user_has_vote ? $subcrit_note : ' ').",".$user_note_by_subcrit; } } $file .= $user_note_by_crit; } // Add guest infos (if present) foreach ($ipguest as $ipguestt) { // echo "IP=".$ipguestt."\n"; $comment = $this->get_img_comment_user($row['img_id'], $concours_id, $conf['guest_id'], $ipguestt); $user_note = $this->get_img_note_user($row['img_id'], $concours_id, $conf['guest_id'], $ipguestt); $file .= ', Guest('.$ipguestt.'), '.$this->get_img_globalnote_user($row['img_id'], $concours_id, $conf['guest_id'], $ipguestt) // .', '.($row['comment'] != null ? str_replace(",", "",$row['comment']) : '') .', '.($comment != false ? str_replace(array(",","\r\n", "\n", "\r"), " ",$comment) : '') .', ' ; $user_note_by_crit = ""; foreach ($firstcriterias as $criteria) { // First without sub criterias if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id )) { $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").(isset($user_note[$criteria['criteria_id']]) ? $user_note[$criteria['criteria_id']] : ' '); } else { $user_note_by_subcrit = ""; $subcrit_note = 0; $user_has_vote = false; $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id ); foreach ($secondcriterias as $subcriteria) { if (isset($user_note[$subcriteria['criteria_id']])) $user_has_vote = true; $user_note_by_subcrit .= (strlen($user_note_by_subcrit) ? "," : "").(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : ' '); $subcrit_note += (int)$subcriteria['ponderation'] * (float)(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : 0); } $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").($user_has_vote ? $subcrit_note : ' ').",".$user_note_by_subcrit; } } $file .= $user_note_by_crit; } $file .="\r\n"; $rang ++; $previousNote = $row['note']; $previousMoy = $row['moyenne']; } if ($this->debug) echo $file; return utf8_decode($file); } // Save csv datas to physical file function save_file($file,$concours_id = NULL) { // check if already saved file if ($filename = $this->get_file_name($concours_id)) return $filename; else { $dirpath = CONCOURS_RESULT_FOLDER; $filename = date('Ymd')."_concours".($concours_id !== null ? $concours_id : $this->concours_id ).".csv"; if (!is_dir($dirpath)) @mkdir($dirpath); if (file_exists($dirpath. $filename)) unlink($dirpath. $filename); $fh = fopen($dirpath. $filename, 'w') or die("can't open file"); fwrite($fh, $file); fclose($fh); //update result database with filename $query = "UPDATE " . CONCOURS_RESULT_TABLE . " SET file_name = \"".$filename."\" WHERE id_concours= ".($concours_id !== NULL ? $concours_id : $this->concours_id)." ;"; pwg_query($query); if ($this->debug) echo $query; return $filename; } } // Get result file name from db function get_file_name($concours_id = NULL) { $query = 'SELECT distinct(file_name)' .' FROM ' .CONCOURS_RESULT_TABLE .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ) .';'; if ($this->debug) echo $query; $result = pwg_query($query); if ($result) { $row = mysql_fetch_assoc($result); if ($row) return $row['file_name']; else return false; } } // Get csv datas from a saved file function get_file($concours_id = NULL) { $filename = CONCOURS_RESULT_FOLDER. $size = filesize($filename); header('Content-Type: application/octet-stream'); header('Content-Length: '.$size); header('Content-Disposition: attachment; filename='.$filename); header('Content-Transfer-Encoding: binary'); $file = @fopen($filename, ‘rb’); if ($file) { // stream the file and exit the script when complete fpassthru($file); } } // Activation page administration function concours_admin_menu($menu) { array_push($menu, array( 'NAME' => CONCOURS_NAME, 'URL' => get_admin_plugin_menu_link(CONCOURS_ADMIN_PATH.'admin.php') ) ); return $menu; } // register Concours Menubar public function register_blocks( $menu_ref_arr ) { $menu = & $menu_ref_arr[0]; if ($menu->get_id() != 'menubar' OR $this->my_config['active_menubar'] == false) return; $menu->register_block( new RegisteredBlock( 'CONCOURS_menu', 'concours', 'ConcoursPhoto')); } /* initialise menubar's menu called by menubar object when making menu */ public function blockmanager_apply( $menu_ref_arr ) { global $user, $template; $menu = & $menu_ref_arr[0]; if ($this->user_groups == array()) $this->get_user_groups(); if ( ($block = $menu->get_block( 'CONCOURS_menu' ) ) != null ) { if($user['id']==2) { $vote_id = $_SERVER['REMOTE_ADDR']; } else { $vote_id = $user['id']; } // $polls_list=$this->get_polls_list($vote_id, is_admin(), $user['language']); $menu_list=array(); if(is_admin()) { array_push($menu_list, array( 'nfo' => "", 'text' => l10n('concours_admin_add'), 'link' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadd_concours.php&action=new', 'edit' => "" ) ); } // recover all img_id from the category $query = 'SELECT distinct(id_concours), groups, CONC.name' .' FROM ' .CONCOURS_RESULT_TABLE .' INNER JOIN '.CONCOURS_TABLE. ' AS CONC ON CONC.id = id_concours' .' ORDER BY date DESC' .';'; $result = pwg_query($query); $nb_concours = 1; // For each concours while ($row = mysql_fetch_assoc($result)) { if ($nb_concours > $this->my_config['nbconcours_menubar']) break; if (!empty($row['groups'])) { $authorized_groups = explode(',', $row['groups']); if (array_intersect($this->user_groups, $authorized_groups) == array()) { continue; } $nb_concours ++; array_push($menu_list, array( 'nfo' => "", 'text' => $row['name'], // 'link' => CONCOURS_PATH.'publish.php?id='.$row['id_concours'], 'link' => './index.php?/concours/'.$row['id_concours'], 'edit' => (is_admin()? PHPWG_ROOT_PATH . 'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadd_concours.php&concours=' . $row['id_concours'].'&action=modify':"") ) ); } } if (count($menu_list)) { $block->set_title("Concours Photo"); $block->template = CONCOURS_ROOT.'/template/concours_menu.tpl'; $block->data = $menu_list; } } } function section_init_concours() { global $tokens, $page; if ($tokens[0] == 'concours') $page['section'] = 'concours'; } function index_concours() { global $page; if (isset($page['section']) and $page['section'] == 'concours') { include(CONCOURS_PATH . 'publish.php'); } } // Show the global note under the thumbnail function thumbnail_note($tpl_var) { global $page, $user; $this->get_user_groups(); $user['ipguest'] = null; if (is_a_guest()) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; elseif(isset($_SERVER['HTTP_CLIENT_IP'])) $IP = $_SERVER['HTTP_CLIENT_IP']; else $IP = $_SERVER['REMOTE_ADDR']; // store ip $user['ipguest'] = $IP; } if ($this->my_config['thumb_note'] && $this->my_config['thumb_note'] == true) { $concours = array(); if (($page['section']) == 'categories' AND !empty($page['category'])) { $query = ' SELECT * FROM ' . CONCOURS_TABLE .' WHERE category =' . $page['category']['id'] . ' AND time_to_sec(TIMEDIFF(begin_date,now())) < 0 AND time_to_sec(TIMEDIFF(now(), end_date)) < 0 '; $result = pwg_query($query); if ($this->debug) echo $query."\n"; while ($row = mysql_fetch_assoc($result)) { if (!empty($row['groups'])) { if ($this->debug) echo "GROUPS=".$row['groups']; $authorized_groups = explode(',', $row['groups']); if (array_intersect($this->user_groups, $authorized_groups) == array()) { if ($this->debug) echo "ERROR GROUPS"; continue; } $concours = $row; } // If no group is parameter for that concours ==> available for all registered users else $concours = $row; } if (count($concours)) { // Check if user is guest and if guest is allowed if ((is_a_guest() AND $concours['guest']) OR !is_a_guest()) { foreach($tpl_var as $cle=>$valeur) { // show only if the author is not the active user if ($tpl_var[$cle]['FILE_AUTHOR'] != $user['username'] OR $this->my_config['author_vote_available'] // Allow author to vote (and also show his score) ) { $tpl_var[$cle]['NAME'] = $tpl_var[$cle]['NAME'].'
 '.l10n('thumbnail_global_note').' : '.$this->get_img_globalnote_user($tpl_var[$cle]['ID'], $concours['id'], $user['id'], $user['ipguest']); } } } } } } return $tpl_var; } } ?>