diff --git a/app/Http/Controllers/UserStatisticsController.php b/app/Http/Controllers/UserStatisticsController.php new file mode 100644 index 0000000000..1a6fb86f95 --- /dev/null +++ b/app/Http/Controllers/UserStatisticsController.php @@ -0,0 +1,117 @@ +json(['error' => 'Project name is not set.'], 400); + } + + $this->setProjectByName($_GET['project']); + + // Handle optional date argument. + if (isset($_GET['date'])) { + $date = htmlspecialchars($_GET['date']); + } else { + $date = date(FMT_DATE); + } + + $response = begin_JSON_response(); + get_dashboard_JSON($this->project->Name, $date, $response); + $response['title'] = 'Developer Statistics'; + $response['showcalendar'] = 1; + + // Get the requested date range. + // Default to 'week' for unexpected range values. + $range = 'week'; + if (isset($_GET['range'])) { + $range = $_GET['range']; + } + if ($range !== 'day' && $range !== 'week' && $range !== 'month' && + $range !== 'year') { + $range = 'week'; + } + $response['range'] = $range; + + // Set up links from this page. + $menu = array(); + $menu['back'] = "index.php?project={$this->project->Name}&date=$date"; + $nextdate = $response['nextdate']; + $menu['next'] = "userStatistics.php?project={$this->project->Name}&date=$nextdate&range=$range"; + $prevdate = $response['previousdate']; + $menu['previous'] = "userStatistics.php?project={$this->project->Name}&date=$prevdate&range=$range"; + $menu['current'] = "userStatistics.php?project={$this->project->Name}&range=$range"; + $response['menu'] = $menu; + + // Set $timestamp to the end of the requested testing day so that changes + // that occurred during this day will be included. + $timestamp = $response['unixtimestamp'] + 3600 * 24; + $beginning_UTCDate = gmdate(FMT_DATETIME, strtotime("-1 $range", $timestamp)); + $end_UTCDate = gmdate(FMT_DATETIME, $timestamp); + + // Lookup stats for this time period. + $pdo = get_link_identifier()->getPdo(); + $stmt = $pdo->prepare( + 'SELECT * FROM userstatistics + WHERE checkindate<:end AND checkindate>=:beginning + AND projectid=:projectid'); + $stmt->bindParam(':end', $end_UTCDate); + $stmt->bindParam(':beginning', $beginning_UTCDate); + $stmt->bindParam(':projectid', $this->project->Id); + pdo_execute($stmt); + + $users = array(); + while ($row = $stmt->fetch()) { + if (array_key_exists($row['userid'], $users)) { + $user = $users[$row['userid']]; + } else { + $user = array(); + $user['nfailedwarnings'] = 0; + $user['nfixedwarnings'] = 0; + $user['nfailederrors'] = 0; + $user['nfixederrors'] = 0; + $user['nfailedtests'] = 0; + $user['nfixedtests'] = 0; + $user['totalbuilds'] = 0; + $user['totalupdatedfiles'] = 0; + } + $user['nfailedwarnings'] += $row['nfailedwarnings']; + $user['nfixedwarnings'] += $row['nfixedwarnings']; + $user['nfailederrors'] += $row['nfailederrors']; + $user['nfixederrors'] += $row['nfixederrors']; + $user['nfailedtests'] += $row['nfailedtests']; + $user['nfixedtests'] += $row['nfixedtests']; + $user['totalbuilds'] += $row['totalbuilds']; + $user['totalupdatedfiles'] += $row['totalupdatedfiles']; + $users[$row['userid']] = $user; + } + + // Generate the response used to render the main table of this page. + $users_response = array(); + foreach ($users as $key => $user) { + $user_response = array(); + $user_obj = User::where('id', $key)->first(); + $user_response['name'] = $user_obj->full_name; + $user_response['id'] = $key; + $user_response['failed_errors'] = $user['nfailederrors']; + $user_response['fixed_errors'] = $user['nfixederrors']; + $user_response['failed_warnings'] = $user['nfailedwarnings']; + $user_response['fixed_warnings'] = $user['nfixedwarnings']; + $user_response['failed_tests'] = $user['nfailedtests']; + $user_response['fixed_tests'] = $user['nfixedtests']; + $user_response['totalupdatedfiles'] = $user['totalupdatedfiles']; + $users_response[] = $user_response; + } + $response['users'] = $users_response; + $pageTimer->end($response); + return response()->json(cast_data_for_JSON($response)); + } +} diff --git a/app/cdash/public/api/v1/userStatistics.php b/app/cdash/public/api/v1/userStatistics.php deleted file mode 100644 index 88f52247c6..0000000000 --- a/app/cdash/public/api/v1/userStatistics.php +++ /dev/null @@ -1,154 +0,0 @@ -getPdo(); -$stmt = $pdo->prepare( - 'SELECT * FROM userstatistics - WHERE checkindate<:end AND checkindate>=:beginning - AND projectid=:projectid'); -$stmt->bindParam(':end', $end_UTCDate); -$stmt->bindParam(':beginning', $beginning_UTCDate); -$stmt->bindParam(':projectid', $projectid); -pdo_execute($stmt); - -$users = array(); -while ($row = $stmt->fetch()) { - if (array_key_exists($row['userid'], $users)) { - $user = $users[$row['userid']]; - } else { - $user = array(); - $user['nfailedwarnings'] = 0; - $user['nfixedwarnings'] = 0; - $user['nfailederrors'] = 0; - $user['nfixederrors'] = 0; - $user['nfailedtests'] = 0; - $user['nfixedtests'] = 0; - $user['totalbuilds'] = 0; - $user['totalupdatedfiles'] = 0; - } - $user['nfailedwarnings'] += $row['nfailedwarnings']; - $user['nfixedwarnings'] += $row['nfixedwarnings']; - $user['nfailederrors'] += $row['nfailederrors']; - $user['nfixederrors'] += $row['nfixederrors']; - $user['nfailedtests'] += $row['nfailedtests']; - $user['nfixedtests'] += $row['nfixedtests']; - $user['totalbuilds'] += $row['totalbuilds']; - $user['totalupdatedfiles'] += $row['totalupdatedfiles']; - $users[$row['userid']] = $user; -} - -// Generate the response used to render the main table of this page. -$users_response = array(); -foreach ($users as $key => $user) { - $user_response = array(); - $user_obj = User::where('id', $key)->first(); - $user_response['name'] = $user_obj->full_name; - $user_response['id'] = $key; - $user_response['failed_errors'] = $user['nfailederrors']; - $user_response['fixed_errors'] = $user['nfixederrors']; - $user_response['failed_warnings'] = $user['nfailedwarnings']; - $user_response['fixed_warnings'] = $user['nfixedwarnings']; - $user_response['failed_tests'] = $user['nfailedtests']; - $user_response['fixed_tests'] = $user['nfixedtests']; - $user_response['totalupdatedfiles'] = $user['totalupdatedfiles']; - $users_response[] = $user_response; -} -$response['users'] = $users_response; -$pageTimer->end($response); -echo json_encode(cast_data_for_JSON($response)); diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index d335d7d4f6..87acf43f25 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -957,6 +957,30 @@ parameters: count: 1 path: app/Http/Controllers/UserController.php + - + message: """ + #^Call to deprecated function get_link_identifier\\(\\)\\: + 04/22/2023$# + """ + count: 1 + path: app/Http/Controllers/UserStatisticsController.php + + - + message: """ + #^Call to deprecated function pdo_execute\\(\\)\\: + v2\\.5\\.0 01/22/2018$# + """ + count: 1 + path: app/Http/Controllers/UserStatisticsController.php + + - + message: """ + #^Call to deprecated method getPdo\\(\\) of class CDash\\\\Database\\: + 04/22/2023 Use Laravel query builder or Eloquent instead$# + """ + count: 1 + path: app/Http/Controllers/UserStatisticsController.php + - message: "#^PHPDoc type array of property App\\\\Http\\\\Kernel\\:\\:\\$middleware is not the same as PHPDoc type array\\ of overridden property Illuminate\\\\Foundation\\\\Http\\\\Kernel\\:\\:\\$middleware\\.$#" count: 1 @@ -17470,30 +17494,6 @@ parameters: count: 1 path: app/cdash/public/api/v1/testSummary.php - - - message: """ - #^Call to deprecated function get_link_identifier\\(\\)\\: - 04/22/2023$# - """ - count: 1 - path: app/cdash/public/api/v1/userStatistics.php - - - - message: """ - #^Call to deprecated function pdo_execute\\(\\)\\: - v2\\.5\\.0 01/22/2018$# - """ - count: 1 - path: app/cdash/public/api/v1/userStatistics.php - - - - message: """ - #^Call to deprecated method getPdo\\(\\) of class CDash\\\\Database\\: - 04/22/2023 Use Laravel query builder or Eloquent instead$# - """ - count: 1 - path: app/cdash/public/api/v1/userStatistics.php - - message: """ #^Call to deprecated function pdo_real_escape_numeric\\(\\)\\: diff --git a/routes/api.php b/routes/api.php index 54448e1024..3ca0a6474f 100755 --- a/routes/api.php +++ b/routes/api.php @@ -24,6 +24,8 @@ Route::get('/v1/user.php', 'UserController@userPageContent'); +Route::get('/v1/userStatistics.php', 'UserStatisticsController@api'); + Route::middleware(['auth'])->group(function () { Route::post('/authtokens/create', 'AuthTokenController@createToken'); Route::delete('/authtokens/delete/{token_hash}', 'AuthTokenController@deleteToken');