There's probably 500 tutorials on this but people keep asking me.
Add 'findretros.php' and 'findretros_config.php' to your skins folder, add the 'client.php' code to the top of your client, or anywhere on your CMS where you want them to vote. Make sure to edit 'Example' in the findretros_config.php to your FindRetro's server username.
Add 'findretros.php' and 'findretros_config.php' to your skins folder, add the 'client.php' code to the top of your client, or anywhere on your CMS where you want them to vote. Make sure to edit 'Example' in the findretros_config.php to your FindRetro's server username.
PHP:
<?php
class FindRetros {
private $pageName, $callTimeout, $usingCloudFlare, $apiPath;
function __construct() {
global $_CONFIG;
$this->pageName = $_CONFIG['pagename'];
$this->requestTimeout = $_CONFIG['timeout'];
$this->usingCloudFlare = $_CONFIG['cloudflare'];
$this->apiPath = $_CONFIG['api'];
if($this->usingCloudFlare) {
if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
}
}
public function hasClientVoted() {
if(!$this->_isVoteCookieSet()) {
$urlRequest = $this->apiPath . 'validate.php?user=' . $this->pageName . '&ip=' . $_SERVER['REMOTE_ADDR'];
$dataRequest = $this->_makeCurlRequest($urlRequest);
if(in_array($dataRequest, array(1, 2))) {
$this->_setVoteCookie();
return true;
}else if($dataRequest == 3) {
return false;
}else{
/* There's something wrong with FindRetros, so we will mark the user as voted and have them proceed as if they voted. */
$this->_setVoteCookie();
return true;
}
}
return true;
}
public function redirectClientToVote() {
header('Location: ' . $this->apiPath . 'rankings/vote/' . $this->pageName);
exit;
}
private function _makeCurlRequest($url) {
if(function_exists('curl_version')) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, $this->requestTimeout);
curl_setopt($curl, CURLOPT_USERAGENT, 'FindRetros Vote Validator');
$requestData = curl_exec($curl);
curl_close($curl);
}else{
$requestData = stream_context_create(array('http' => array('timeout' => $this->requestTimeout)));
return @file_get_contents($url, 0, $requestData);
}
return $requestData;
}
private function _setVoteCookie() {
$rankingsResetTime = $this->_getRankingsResetTime();
setcookie('voting_stamp', $rankingsResetTime, $rankingsResetTime);
}
private function _isVoteCookieSet() {
if(isset($_COOKIE['voting_stamp'])) {
if($_COOKIE['voting_stamp'] == $this->_getRankingsResetTime()) {
return true;
}else{
setcookie('voting_stamp', '');
return false;
}
}
return false;
}
private function _getRankingsResetTime() {
$serverDefaultTime = date_default_timezone_get();
date_default_timezone_set('America/Chicago');
$rankingsResetTime = mktime(0, 0, 0, date('n'), date('j') + 1);
date_default_timezone_set($serverDefaultTime);
return $rankingsResetTime;
}
}
PHP:
<?php
$_CONFIG = array(
/* What is "username" of your page on FindRetros? */
'pagename' => 'Example',
/* How many seconds should it take to try and reach FindRetros if it's down? */
'timeout' => 2,
/* Are you using CloudFlare? If so, set this to true. */
'cloudflare' => false,
/* Incase FindRetros.com has a new domain, change it below. */
'api' => 'https://findretros.com/'
);
PHP:
<?php
require_once 'findretros_config.php';
require_once 'findretros.php';
$FindRetros = new FindRetros();
if($FindRetros->hasClientVoted()) {
echo 'You have voted!';
}else{
// echo 'You have yet to vote!';
$FindRetros->redirectClientToVote();
}
Last edited: