#!/usr/bin/env php $languages) { if (count($languages) === 0 || (count($languages) === 1 && empty($languages[0]))) continue; if ($name === 'Dan Brown (ssddanbrown)' || $name === 'Name') continue; $output .= $name . $reportDelimiter . implode('; ', $languages) . "\n"; } file_put_contents($reportLocation, $output); } function mergeCsvDataIntoReportMap(array &$reportMap, array $csvData, string $reportDelimiter) { foreach ($csvData as $csvLine) { $name = $csvLine['Name']; $name = str_replace($reportDelimiter, '', $name); $languages = explode('; ', $csvLine['Languages']); if (isset($reportMap[$name])) { $languages = array_unique(array_merge($languages, $reportMap[$name])); } $reportMap[$name] = $languages; } } function loadExistingReportIntoMap($reportDelimiter, $reportLocation) { try { $reportData = file_get_contents($reportLocation); } catch (Exception $exception) { $reportData = ''; } $reportLines = explode("\n", $reportData); $reportMap = []; foreach ($reportLines as $reportLine) { if (empty($reportLine)) continue; [$name, $langs] = explode($reportDelimiter, $reportLine); $splitLangs = explode('; ', $langs); $reportMap[$name] = $splitLangs; } return $reportMap; } function exportTopMembersReport($key) { $result = makeMemberExportReport($key); $exportHash = $result->hash; $csv = downloadMemberReport($exportHash, $key); return $csv; } function makeMemberExportReport(string $key) { $url = 'https://api.crowdin.com/api/project/bookstack/reports/top-members/export'; $postData = [ 'date_from' => '2019-10-01', 'date_to' => date('Y-m-d'), 'format' => 'csv', 'json' => true, 'key' => $key, ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); if ($error) { throw new Exception($error); } curl_close($ch); $data = json_decode($result); return $data; } function downloadMemberReport(string $exportHash, string $key) { $params = [ 'hash' => $exportHash, 'key' => $key ]; $url = 'https://api.crowdin.com/api/project/bookstack/reports/top-members/download'; $url .= '?' . http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } /** * Convert a comma separated string into an associated array. * @link http://gist.github.com/385876 (Modified) * @author Jay Williams (Modified) * @copyright Copyright (c) 2010, Jay Williams (Modified) * @license http://www.opensource.org/licenses/mit-license.php MIT License */ function csv_to_array(string $csvString): array { $header = null; $data = []; $lines = explode("\n", trim($csvString)); foreach ($lines as $line) { $csvLine = str_getcsv($line); if (!$header) { $header = $csvLine; } else { $data[] = array_combine($header, $csvLine); } } return $data; }