mirror_id; } function getOrganization() { return $this->organization; } function getCCode() { return $this->ccode; } function getR30() { return $this->r30; } function getUpdateIPAllow() { return $this->update_ip_allow; } function getEMail() { return $this->email; } function getIsInternal() { return $this->is_internal; } function getIsAdvertise() { return $this->is_advertise; } function getDateEnabled() { return $this->date_enabled; } function getCreateStatus() { return $this->CreateStatus; } function getContact() { return $this->Contact; } function getInternalHostPattern() { return $this->internal_host_pattern; } function getLastVerified() { return $this->last_verified; } function setMirrorID($_mirror_id) { $this->mirror_id = $_mirror_id; } function setOrganization($_organization) { $this->organization = $_organization; } function setCCode($_ccode) { $this->ccode = $_ccode; } function setR30($_r30) { $this->r30 = $_r30; } function setUpdateIPAllow($_update_ip_allow) { $this->update_ip_allow = $_update_ip_allow; } function setEMail($_email) { $this->email = $_email; } function setIsInternal($_is_internal) { $this->is_internal = $_is_internal; } function setIsAdvertise($_is_advertise) { $this->is_advertise = $_is_advertise; } function setDateEnabled($_date_enabled) { $this->date_enabled = $_date_enabled; } function setCreateStatus($_create_status) { $this->CreateStatus = $_create_status; } function setContact($_contact) { $this->Contact = $_contact; } function setInternalHostPattern($_internal_host_pattern) { $this->internal_host_pattern = $_internal_host_pattern; } function setLastVerified($_last_verified) { $this->last_verified = $_last_verified; } function selectCountryCodeByIP($_IP) { $App = new App(); $rValue = "xx"; # no ccode info for this IP if($_IP != "") { $ipnum = sprintf("%u", ip2long($_IP)); $dbc = new DBConnection(); # Read-only, to slave! $dbh = $dbc->connect(); $sql = "SELECT ccode FROM geoip WHERE $ipnum BETWEEN start AND end"; $result = mysql_query($sql, $dbh); if($myrow = mysql_fetch_array($result)) { $rValue = $myrow['ccode']; } $dbc->disconnect(); $dbh = null; $dbc = null; $result = null; $myrow = null; } return $rValue; } /** @author droy * @since version - Apr 16,2007 * @param String _IP IP address to examine * @return Boolean IP is a valid public IP * */ function isValidPublicIP($_IP) { if(!preg_match('/^\d+\.\d+\.\d+\.\d+/', $_IP)) { return false; } if (substr_count($_IP, '.') > 3) { return false; } if (strpos($_IP, '.') == 0 || strrpos($_IP, '.') == (strlen($_IP)-1)) { return false; } $parts = explode('.', $_IP); foreach ($parts as $part) { if ($part > 255) { return false; } } switch($parts[0]) { case 0: return false; break; case 10: return false; break; case 127: return false; break; case 172: if($parts[1] >= 16 && $parts[1] <= 32) { return false; } break; case 192: if($parts[1] == 168) { return false; } break; } if($parts[0] > 223) { return false; } return true; } /** * Returns true if user-agent appears to be a machine * @author Denis Roy * @see download.eclipse.org/errors/404.php * @since 2014-11-18 * @return boolean * */ function isMachineBrowser() { $browser = $_SERVER['HTTP_USER_AGENT']; $rValue = false; if(strpos($browser, "Jakarta") !== FALSE || strpos($browser, "Java/") !== FALSE || strpos($browser, "Slurp") !== FALSE || stripos($browser, "bot") !== FALSE || strpos($browser, "bing") !== FALSE || stripos($browser, "Googlebot/") !== FALSE || stripos($browser, "apacheHttpClient") !== FALSE || stripos($browser, "Apache-HttpClient/") !== FALSE || stripos($browser, "spider") !== FALSE || strpos($browser, "Apache-Maven/") !== FALSE || strpos($browser, "Apache Ivy/") !== FALSE || strpos($browser, "Apache Archiva/") !== FALSE || strpos($browser, "Artifactory/") !== FALSE || strpos($browser, "Aether") !== FALSE || strpos($browser, "m2e/") !== FALSE || strpos($browser, "Debian APT/") !== FALSE || strpos($browser, "developer fusion") !== FALSE || strpos($browser, "netBeans") !== FALSE ) { $rValue = true; } return $rValue; } function isExcluded($filename) { $exclude_array = explode(" ", $this->exclude_string); for($i = 0; $i < count($exclude_array); $i++) { # replace dot with \. since rsync considers it a dot $exclude_array[$i] = str_replace(".", "\.", $exclude_array[$i]); # replace leading and ending * $exclude_array[$i] = preg_replace('(^\*|\*$)', "", $exclude_array[$i]); $exclude_array[$i] = str_replace("*", ".*", $exclude_array[$i]); if(preg_match("#" . $exclude_array[$i] . "#", $filename)) { return true; break; } } return false; } /** * Run Stats query, return results as JSON * @param string $filename * @param string $view_date * @param string $view * @param string $group * @param string $datefrom * @param string $dateto * @return string JSON string * @since 2015-06-19 * @author droy */ function getStatsJSON($filename=null, $view_date=null, $view=null, $group=null, $datefrom=null, $dateto=null) { $App = new App(); $dateQuery = false; if($view == "") { $view = "sum"; } $WHERE = ""; $GROUPBY = ""; $FILESPEC = "IDX.file_name"; if($view_date == "today") { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " LEFT(DOW.download_date,10) = CURDATE()"; $dateQuery = true; } if($view_date == "yesterday") { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " LEFT(DOW.download_date,10) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)"; $dateQuery = true; } if($view_date == "L7") { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " DOW.download_date > DATE_SUB(CURDATE(), INTERVAL 8 day)"; $dateQuery = true; } if($view_date == "L30") { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " DOW.download_date > DATE_SUB(CURDATE(), INTERVAL 31 day)"; $dateQuery = true; } if($datefrom != "" && $dateto != "") { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " DOW.download_date >= '$datefrom' AND DOW.download_date < '$dateto 23:59:59'"; $dateQuery = true; } if($datefrom != "" && $dateto == "") { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " DOW.download_date >= '$datefrom'"; $dateQuery = true; } if($datefrom == "" && $dateto != "") { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= "DOW.download_date <= '$dateto 23:59:59'"; $dateQuery = true; } if($group != 1) { $GROUPBY = " IDX.file_name"; } else { $FILESPEC =" \"File Group\" AS file_name"; } if($view == "daily") { if($GROUPBY != "") { $GROUPBY .= ","; } $GROUPBY .= " LEFT(DOW.download_date,10)"; } if($view == "ccode") { if($GROUPBY != "") { $GROUPBY .= ","; } $GROUPBY .= " DOW.ccode"; } # Connect to database $dbc = new DBConnection(); $now = $this->microtime_float(); $dbh = $dbc->connect(); # fetch oldest stat and total records $sql_info = "SELECT LEFT(MIN(download_date),10) as OldestDate, MAX(download_date) AS NewestDate, COUNT(*) AS RecordCount FROM downloads"; $rs_info = mysql_query($sql_info, $dbh); $myrow_info = mysql_fetch_assoc($rs_info); $intTotalStats = number_format($myrow_info['RecordCount']); $sinceDate = $myrow_info['OldestDate']; $toDate = $myrow_info['NewestDate']; # Fetch the ID's if it's a date-based query $aFileID = array(); $file_id_csv = ""; if($filename != "") { $fileCount = 0; $sql = "SELECT IDX.file_id FROM download_file_index AS IDX WHERE IDX.file_name LIKE " . $App->returnQuotedString("%" . $filename . "%"); $rs = mysql_query($sql, $dbh); while($myrow = mysql_fetch_assoc($rs)) { array_push($aFileID, $myrow['file_id']); $fileCount++; } $file_id_csv = implode(",", $aFileID); if(($fileCount > 5000 && $dateQuery) || ($fileCount > 10000 && !$dateQuery)) { die ("Your search includes too many files ($fileCount). Please refine your search."); } } if($filename != "" && !$dateQuery) { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " IDX.file_name LIKE " . $App->returnQuotedString("%" . $filename . "%"); } if($dateQuery) { $WHERE = $App->addAndIfNotNull($WHERE); $WHERE .= " IDX.file_id IN ($file_id_csv)"; } if($WHERE != "") { $WHERE = " WHERE " . $WHERE; } if($GROUPBY != "") { $GROUPBY = " GROUP BY " . $GROUPBY; } /* * End: Build query filter criteria */ /* * Choose the appropriate query, based on the view * */ if($view == "sum") { if(!$dateQuery) { # simplified query based on the download_file_index only if($group == 1) { $sql = "SELECT $FILESPEC, SUM(download_count) AS file_count FROM download_file_index AS IDX " . $WHERE; } else { $sql = "SELECT $FILESPEC, download_count AS file_count FROM download_file_index AS IDX " . $WHERE . $GROUPBY . " ORDER BY file_count DESC"; } } else { $sql = "SELECT $FILESPEC, COUNT(DOW.file_id) AS file_count FROM download_file_index AS IDX LEFT JOIN downloads AS DOW ON DOW.file_id = IDX.file_id" . $WHERE . $GROUPBY . " ORDER BY file_count DESC"; } } if($view == "daily" ) { $sql = "SELECT $FILESPEC, LEFT(DOW.download_date,10) AS download_date, COUNT(DOW.file_id) AS file_count FROM download_file_index AS IDX LEFT JOIN downloads AS DOW ON DOW.file_id = IDX.file_id " . $WHERE . $GROUPBY . "ORDER BY IDX.file_name, DOW.download_date DESC"; # $inc_file = "inc/en_stats_daily.php"; } if($view == "ccode") { $ORDERBY = " ORDER BY IDX.file_name, file_count DESC"; if($group == 1) { $ORDERBY = " ORDER BY file_count DESC"; } $sql = "SELECT $FILESPEC, DOW.ccode, COU.en_description AS CountryDescription, COUNT(DOW.file_id) AS file_count FROM download_file_index AS IDX LEFT JOIN downloads AS DOW ON DOW.file_id = IDX.file_id LEFT JOIN SYS_countries AS COU ON COU.ccode = DOW.ccode " . $WHERE . $GROUPBY . $ORDERBY; # $inc_file = "inc/en_stats_ccode.php"; } # Bypass query if no filename specified if($filename == "") { $sql = "SELECT 'Please specify a file' AS file_name, '' AS file_count"; } $rs = mysql_query($sql, $dbh); $querytime = $this->microtime_float() - $now; # build JSON payload $rValue = new stdClass(); $rValue->totalStats = $intTotalStats; $rValue->sinceDate = $sinceDate; $rValue->toDate = $toDate; $rValue->queryTime = $querytime; $rows = array(); while($r = mysql_fetch_assoc($rs)) { $rows[] = $r; } $rValue->rows = $rows; # Free up some memory from the hoggers unset($rows, $rs, $rs_info, $aFileID); $dbc->disconnect(); return json_encode($rValue); } function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } } ?>