diff -ruNb frankie1228/phpAdsNew-2.0/admin/banner-acl.php www/phpAdsNew-2.0/admin/banner-acl.php
--- frankie1228/phpAdsNew-2.0/admin/banner-acl.php 2003-09-29 17:03:04.000000000 -0500
+++ www/phpAdsNew-2.0/admin/banner-acl.php 2004-10-08 01:05:40.000000000 -0500
@@ -27,6 +27,7 @@
require (phpAds_path."/libraries/resources/res-usstates.inc.php");
require (phpAds_path."/libraries/resources/res-useragent.inc.php");
require (phpAds_path."/libraries/resources/res-continent.inc.php");
+require (phpAds_path."/libraries/resources/res-canadaprovinces.inc.php");
// Register input variables
@@ -38,6 +39,11 @@
// Define variable types
+$type_list['dmacode'] = "dma code";
+$type_list['areacode'] = "area code";
+$type_list['canadaprovinces'] = "canada provinces";
+$type_list['intregions'] = "World Regions";
+$type_list['intcities'] = "World Cities";
$type_list['weekday'] = $strWeekDay;
$type_list['time'] = $strTime;
$type_list['date'] = $strDate;
@@ -155,7 +161,7 @@
if ($type == 'time' || $type == 'weekday' || $type == 'browser' || $type == 'os' ||
- $type == 'country' || $type == 'continent' || $type == 'region' || $type == 'language')
+ $type == 'country' || $type == 'continent' || $type == 'region' || $type == 'language' || $type == 'canadaprovinces')
{
$acl[$last]['data'] = array();
}
@@ -193,7 +199,7 @@
{
if ($acl[$key]['type'] == 'time' || $acl[$key]['type'] == 'weekday' ||
$acl[$key]['type'] == 'country' || $acl[$key]['type'] == 'continent' ||
- $acl[$key]['type'] == 'region')
+ $acl[$key]['type'] == 'region' || $acl[$key]['type'] == 'canadaprovinces')
{
$acl[$key]['data'] = implode (',', $acl[$key]['data']);
}
@@ -421,7 +427,7 @@
// Misc lists
if ($row['type'] == 'time' || $row['type'] == 'weekday' ||
$row['type'] == 'country' || $row['type'] == 'continent' ||
- $row['type'] == 'region')
+ $row['type'] == 'region' || $row['type'] == 'canadaprovinces')
{
$acl[$row['executionorder']]['data'] = explode (',', $row['data']);
}
@@ -765,6 +771,22 @@
echo "type='checkbox' id='check_".$key."_".$postalcode."' name='acl[".$key."][data][]' value='$postalcode'".(in_array ($postalcode, $acl[$key]['data']) ? ' checked' : '')." align='middle'>".$fullname;
echo "";
}
+ echo "";
+ }
+ elseif ($acl[$key]['type'] == 'canadaprovinces')
+ {
+ if (!isset($acl[$key]['data']))
+ $acl[$key]['data'] = array();
+
+ echo "
";
+
+ while (list($postalcode,$fullname) = each ($phpAds_CanadaProvinces))
+ {
+ echo "
";
+ echo "".$fullname;
+ echo "
";
+ }
echo "
";
}
diff -ruNb frankie1228/phpAdsNew-2.0/admin/lib-banner.inc.php www/phpAdsNew-2.0/admin/lib-banner.inc.php
--- frankie1228/phpAdsNew-2.0/admin/lib-banner.inc.php 2003-09-29 17:50:46.000000000 -0500
+++ www/phpAdsNew-2.0/admin/lib-banner.inc.php 2004-10-08 01:11:17.000000000 -0500
@@ -538,6 +538,21 @@
switch ($acl[$key]['type'])
{
+ case 'intregions':
+ $expression .= "phpAds_aclCheckInternationalRegions(\'".addslashes($acl[$key]['data'])."\', \'".$acl[$key]['comparison']."\')";
+ break;
+ case 'intcities':
+ $expression .= "phpAds_aclCheckInternationalCities(\'".addslashes($acl[$key]['data'])."\', \'".$acl[$key]['comparison']."\')";
+ break;
+ case 'areacode':
+ $expression .= "phpAds_aclCheckAreaCode(\'".addslashes($acl[$key]['data'])."\', \'".$acl[$key]['comparison']."\')";
+ break;
+ case 'dmacode':
+ $expression .= "phpAds_aclCheckDmaCode(\'".addslashes($acl[$key]['data'])."\', \'".$acl[$key]['comparison']."\')";
+ break;
+ case 'canadaprovinces':
+ $expression .= "phpAds_aclCheckCanadaProvince(\'".addslashes($acl[$key]['data'])."\', \'".$acl[$key]['comparison']."\')";
+ break;
case 'clientip':
$expression .= "phpAds_aclCheckClientIP(\'".addslashes($acl[$key]['data'])."\', \'".$acl[$key]['comparison']."\')";
break;
diff -ruNb frankie1228/phpAdsNew-2.0/libraries/geotargeting/geo-geoipcity.inc.php www/phpAdsNew-2.0/libraries/geotargeting/geo-geoipcity.inc.php
--- frankie1228/phpAdsNew-2.0/libraries/geotargeting/geo-geoipcity.inc.php 1969-12-31 18:00:00.000000000 -0600
+++ www/phpAdsNew-2.0/libraries/geotargeting/geo-geoipcity.inc.php 2004-10-07 20:42:40.000000000 -0500
@@ -0,0 +1,335 @@
+ 'MaxMind GeoIP City Edition',
+ 'db' => true,
+ 'country' => true,
+ 'continent' => true,
+ 'region' => true,
+ 'areacode' => true
+ ));
+}
+
+function phpAds_geoipcity_getGeo($addr, $db)
+{
+ if ($db == '')
+ return false;
+
+
+ $ipnum = ip2long($addr);
+
+ if ($gi = geoip_open($db))
+ {
+ $r = _get_record($gi,$ipnum);
+ if ($r->country_code != '' && $r->country_code != '--')
+ {
+ // Get continent code
+ @include_once (phpAds_path.'/libraries/resources/res-continent.inc.php');
+ $continent = $phpAds_continent[$r->$country];
+ return (array (
+ 'country' => $r->country_code,
+ 'continent' => $continent,
+ 'region' => $r->region,
+ 'city' => $r->city,
+ 'area_code' => $r->area_code,
+ 'dma_code' => $r->dma_code
+ ));
+ }
+ else
+ return false;
+ }
+}
+
+/* PRIVATE FUNCTIONS */
+function geoip_open($filename){
+ $gi = new GeoIP;
+ $gi->filehandle = fopen($filename,"rb");
+ $gi = _setup_segments($gi);
+ return $gi;
+}
+function _setup_segments($gi){
+ $gi->record_length = STANDARD_RECORD_LENGTH;
+ $filepos = ftell($gi->filehandle);
+ fseek($gi->filehandle, -3, SEEK_END);
+ for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++){
+ $delim = fread($gi->filehandle,3);
+ if ($delim == (chr(255).chr(255).chr(255))){
+ $gi->databaseType = ord(fread($gi->filehandle,1));
+ if (($gi->databaseType == GEOIP_CITY_EDITION_REV0) ||
+ ($gi->databaseType == GEOIP_CITY_EDITION_REV1)){
+ $gi->databaseSegments = 0;
+ $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
+ for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
+ $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
+ }
+ }
+ break;
+ } else {
+ fseek($gi->filehandle, -4, SEEK_CUR);
+ }
+ }
+ fseek($gi->filehandle,$filepos,SEEK_SET);
+ return $gi;
+}
+function _get_record($gi,$ipnum){
+ $seek_city = _geoip_seek_country($gi, $ipnum);
+
+ $record_pointer = $seek_city + (2 * $gi->record_length - 1) * $gi->databaseSegments;
+ fseek($gi->filehandle, $record_pointer, SEEK_SET);
+ $record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
+ $record = new geoiprecord;
+ $record_buf_pos = 0;
+ $char = ord(substr($record_buf,$record_buf_pos,1));
+ $record->country_code = $GLOBALS['GEOIP_COUNTRY_CODES'][$char];
+ $record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$char];
+ $record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$char];
+ $record_buf_pos++;
+ $str_length = 0;
+
+ //get region
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+ while ($char != 0){
+ $str_length++;
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+ }
+ if ($str_length > 0){
+ $record->region = substr($record_buf,$record_buf_pos,$str_length);
+ }
+ $record_buf_pos += $str_length + 1;
+ $str_length = 0;
+
+ //get city
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+ while ($char != 0){
+ $str_length++;
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+ }
+ if ($str_length > 0){
+ $record->city = substr($record_buf,$record_buf_pos,$str_length);
+ }
+ $record_buf_pos += $str_length + 1;
+ $str_length = 0;
+
+ //get postal code
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+ while ($char != 0){
+ $str_length++;
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+ }
+ if ($str_length > 0){
+ $record->postal_code = substr($record_buf,$record_buf_pos,$str_length);
+ }
+ $record_buf_pos += $str_length + 1;
+ $str_length = 0;
+ $latitude = 0;
+ $longitude = 0;
+ for ($j = 0;$j < 3; ++$j){
+ $char = ord(substr($record_buf,$record_buf_pos++,1));
+ $latitude += ($char << ($j * 8));
+ }
+ $record->latitude = ($latitude/10000) - 180;
+
+ for ($j = 0;$j < 3; ++$j){
+ $char = ord(substr($record_buf,$record_buf_pos++,1));
+ $longitude += ($char << ($j * 8));
+ }
+ $record->longitude = ($longitude/10000) - 180;
+
+ if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
+ $dmaarea_combo = 0;
+ if ($record->country_code == "US"){
+ for ($j = 0;$j < 3;++$j){
+ $char = ord(substr($record_buf,$record_buf_pos++,1));
+ $dmaarea_combo += ($char << ($j * 8));
+ }
+ $record->dma_code = floor($dmaarea_combo/1000);
+ $record->area_code = $dmaarea_combo%1000;
+ }
+ }
+ return $record;
+}
+
+
+function _geoip_seek_country($gi, $ipnum) {
+ $offset = 0;
+ for ($depth = 31; $depth >= 0; --$depth) {
+ fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
+ or die("fseek failed");
+ $buf = fread($gi->filehandle, 2 * $gi->record_length);
+ $x = array(0,0);
+ for ($i = 0; $i < 2; ++$i) {
+ for ($j = 0; $j < $gi->record_length; ++$j) {
+ $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
+ }
+ }
+ if ($ipnum & (1 << $depth)) {
+ if ($x[1] >= $gi->databaseSegments) {
+ return $x[1];
+ }
+ $offset = $x[1];
+ }
+ else {
+ if ($x[0] >= $gi->databaseSegments) {
+ return $x[0];
+ }
+ $offset = $x[0];
+ }
+ }
+ trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
+ return false;
+}
+
+
+?>
diff -ruNb frankie1228/phpAdsNew-2.0/libraries/geotargeting/geo-geoipregion.inc.php www/phpAdsNew-2.0/libraries/geotargeting/geo-geoipregion.inc.php
--- frankie1228/phpAdsNew-2.0/libraries/geotargeting/geo-geoipregion.inc.php 2003-09-29 17:14:36.000000000 -0500
+++ www/phpAdsNew-2.0/libraries/geotargeting/geo-geoipregion.inc.php 2004-04-14 01:12:12.000000000 -0500
@@ -33,6 +33,14 @@
function phpAds_geoipregion_getGeo($addr, $db)
{
+ $geoip_region_edition_rev0 = 112;
+ $geoip_region_edition_rev1 = 3;
+ $geoip_city_edition_rev0 = 111;
+ $geoip_city_edition_rev1 = 2;
+ $us_offset = 1;
+ $canada_offset = 677;
+ $world_offset = 1353;
+ $fips_range = 360;
if ($db == '')
return false;
@@ -63,6 +71,31 @@
if ($fp = @fopen($db,"rb"))
{
$reg = phpAds_geoipregion_seek_country($fp, $ipnum);
+ $type = $GLOBALS['DATABASETYPE'];
+ if ($type == $geoip_region_edition_rev1){
+
+ if ($reg < $us_offset)
+ {
+ $country = false;
+ $region = false;
+ }
+ elseif ($reg < $canada_offset)
+ {
+ $country = 'US';
+ $region = chr(($reg - $us_offset) / 26 + 65) . chr(($reg - $us_offset) % 26 + 65);
+ }
+ elseif ($reg < $world_offset)
+ {
+ $country = 'CA';
+ $region = chr(($reg - $canada_offset) / 26 + 65) . chr(($reg - $canada_offset) % 26 + 65);
+ }
+ else
+ {
+ $country = $countrycodes[($reg-$world_offset) / $fips_range];
+ $region = false;
+ }
+ }
+ else{
if ($reg < 0)
{
@@ -79,6 +112,7 @@
$country = $countrycodes[$reg];
$region = false;
}
+ }
@fclose($fp);
@@ -112,9 +146,12 @@
$record_length = 3;
$structure_info_max_size = 20;
$geoip_country_edition = 106;
- $geoip_region_edition = 112;
- $geoip_city_edition = 111;
- $geoip_state_begin = 16700000;
+ $geoip_region_edition_rev0 = 112;
+ $geoip_region_edition_rev1 = 3;
+ $geoip_city_edition_rev0 = 111;
+ $geoip_city_edition_rev1 = 2;
+ $geoip_state_begin_rev0 = 16700000;
+ $geoip_state_begin_rev1 = 16000000;
$geoip_country_begin = 16776960;
@@ -131,12 +168,15 @@
if ($delim == (chr(255).chr(255).chr(255)))
{
$type = ord(@fread($fp, 1));
-
- if ($type == $geoip_region_edition)
+ if ($type == $geoip_region_edition_rev0)
{
- $seg = $geoip_state_begin;
+ $seg = $geoip_state_begin_rev0;
}
- elseif ($type == $geoip_city_edition)
+ elseif ($type == $geoip_region_edition_rev1)
+ {
+ $seg = $geoip_state_begin_rev1;
+ }
+ elseif (($type == $geoip_city_edition_rev0)||($type == $geoip_city_edition_rev1))
{
$seg = 0;
$buf = @fread($fp, $record_length);
@@ -153,7 +193,7 @@
if ($type == $geoip_country_edition)
$seg = $geoip_country_begin;
-
+ $GLOBALS['DATABASETYPE'] = $type;
@fseek($fp, $filepos, SEEK_SET);
@@ -176,14 +216,14 @@
if ($ipnum & (1 << $depth))
{
if ($x[1] >= $seg)
- return $x[1] - $geoip_state_begin;
+ return $x[1] - $seg;
$offset = $x[1];
}
else
{
if ($x[0] >= $seg)
- return $x[0] - $geoip_state_begin;
+ return $x[0] - $seg;
$offset = $x[0];
}
diff -ruNb frankie1228/phpAdsNew-2.0/libraries/lib-limitations.inc.php www/phpAdsNew-2.0/libraries/lib-limitations.inc.php
--- frankie1228/phpAdsNew-2.0/libraries/lib-limitations.inc.php 2003-09-29 17:10:15.000000000 -0500
+++ www/phpAdsNew-2.0/libraries/lib-limitations.inc.php 2004-10-08 01:14:02.000000000 -0500
@@ -306,6 +306,62 @@
/*********************************************************/
+/* Check if the Canada Province ACL is valid */
+/*********************************************************/
+
+function phpAds_aclCheckCanadaProvince($data, $ad)
+{
+ global $phpAds_geo;
+
+ if ($phpAds_geo && $phpAds_geo['country'] == 'CA')
+ {
+ if (!$phpAds_geo['region'])
+ return ($ad != '==');
+
+ // Evaluate continent code
+ $expression = ($data == $phpAds_geo['region'] || in_array ($phpAds_geo['region'], explode(',', $data)));
+ $operator = $ad == '==';
+ return ($expression == $operator);
+ }
+ else
+ return ($ad != '==');
+}
+
+
+/*********************************************************/
+/* Check if the Area Code ACL is valid /
+/********************************************************/
+
+function phpAds_aclCheckAreaCode($data,$ad)
+{
+ global $phpAds_geo;
+
+ if ($phpAds_geo && $phpAds_geo['area_code']){
+ $expression = ($data == $phpAds_geo['area_code'] || in_array ($phpAds_geo['area_code'], explode(',', $data)));
+ $operator = $ad == '==';
+ return ($expression == $operator);
+ }
+ else
+ return ($ad != '==');
+}
+
+/*********************************************************/
+/* Check if the DMA Code ACL is valid /
+/********************************************************/
+
+function phpAds_aclCheckDmaCode($data,$ad)
+{
+ global $phpAds_geo;
+
+ if ($phpAds_geo && $phpAds_geo['dma_code']){
+ $expression = ($data == $phpAds_geo['dma_code'] || in_array ($phpAds_geo['dma_code'], explode(',', $data)));
+ $operator = $ad == '==';
+ return ($expression == $operator);
+ }
+ else
+ return ($ad != '==');
+}
+/*********************************************************/
/* Check if the Referer ACL is valid */
/*********************************************************/
@@ -323,4 +379,30 @@
return ($expression == $operator);
}
+function phpAds_aclCheckInternationalRegions($data, $ad) {
+ global $phpAds_geo;
+
+ $fipscode = $phpAds_geo['country'] . $phpAds_geo['region'];
+ if ($phpAds_geo && $fipscode){
+ $expression = ($data == $fipscode || in_array ($fipscode, explode(',', $data)));
+ $operator = $ad == '==';
+ return ($expression == $operator);
+ }
+ else
+ return ($ad != '==');
+}
+function phpAds_aclCheckInternationalCities($data, $ad) {
+ global $phpAds_geo;
+
+ $citycode = $phpAds_geo['city'] . "," . $phpAds_geo['region'] . "," . $phpAds_geo['country'];
+ if ($phpAds_geo && $citycode){
+ $expression = ($data == $citycode || in_array ($citycode, explode(':', $data)));
+ $operator = $ad == '==';
+ return ($expression == $operator);
+ }
+ else
+ return ($ad != '==');
+
+
+}
?>
\ No newline at end of file
diff -ruNb frankie1228/phpAdsNew-2.0/libraries/resources/res-canadaprovinces.inc.php www/phpAdsNew-2.0/libraries/resources/res-canadaprovinces.inc.php
--- frankie1228/phpAdsNew-2.0/libraries/resources/res-canadaprovinces.inc.php 1969-12-31 18:00:00.000000000 -0600
+++ www/phpAdsNew-2.0/libraries/resources/res-canadaprovinces.inc.php 2004-04-08 19:46:57.000000000 -0500
@@ -0,0 +1,16 @@
+