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 @@ +