1
0
Fork 0
mirror of synced 2024-07-06 23:21:05 +12:00

Improve employee detection

This commit is contained in:
Matej Bačo 2023-04-27 10:24:53 +02:00
parent 837cebcdda
commit db472b19c7
3 changed files with 244 additions and 22 deletions

View file

@ -1 +1,32 @@
["eldad@appwrite.io","christy@appwrite.io","torsten@appwrite.io","damodar@appwrite.io","bradley@appwrite.io","jake@appwrite.io","sara@appwrite.io","matej@appwrite.io","aditya@appwrite.io","wess@appwrite.io","may@appwrite.io","elad@appwrite.io","vincent@appwrite.io","haimantika@appwrite.io","chen@appwrite.io","tessa@appwrite.io","shimon@appwrite.io","shmuel@appwrite.io","arman@appwrite.io","carla@appwrite.io","emma@appwrite.io","dylan@appwrite.io","steven@appwrite.io","jyoti@appwrite.io","jade@appwrite.io","khushboo@appwrite.io","thomas@appwrite.io","holly@appwrite.io","laura@appwrite.io","caio@appwrite.io"]
{
"eldad@appwrite.io": { "memberSince": "2020-10-15", "spot": "0", "gitHub": "eldadfux" },
"christy@appwrite.io": { "memberSince": "2020-12-01", "spot": "1", "gitHub": "https://github.com/christyjacob4" },
"torsten@appwrite.io": { "memberSince": "2020-12-28", "spot": "2", "gitHub": "https://github.com/torstendittmann " },
"damodar@appwrite.io": { "memberSince": "2021-01-02", "spot": "3", "gitHub": "https://github.com/lohanidamodar" },
"bradley@appwrite.io": { "memberSince": "2021-05-21", "spot": "5", "gitHub": "https://github.com/PineappleIOnic" },
"jake@appwrite.io": { "memberSince": "2021-06-28", "spot": "6", "gitHub": "https://github.com/abnegate" },
"sara@appwrite.io": { "memberSince": "2021-08-16", "spot": "7", "gitHub": "https://github.com/sarakaandorp" },
"matej@appwrite.io": { "memberSince": "2021-08-23", "spot": "8", "gitHub": "meldiron" },
"aditya@appwrite.io": { "memberSince": "2021-09-01", "spot": "9", "gitHub": "https://github.com/adityaoberai" },
"wess@appwrite.io": { "memberSince": "2021-11-08", "spot": "12", "gitHub": "https://github.com/wess" },
"may@appwrite.io": { "memberSince": "2021-11-28", "spot": "14", "gitHub": "https://github.com/MayEnder" },
"elad@appwrite.io": { "memberSince": "2021-12-19", "spot": "15", "gitHub": "https://github.com/elad2412" },
"vincent@appwrite.io": { "memberSince": "2022-01-01", "spot": "16", "gitHub": "https://github.com/gewenyu99" },
"haimantika@appwrite.io": { "memberSince": "2022-04-01", "spot": "18", "gitHub": "https://github.com/Haimantika" },
"chen@appwrite.io": { "memberSince": "2022-01-24", "spot": "19", "gitHub": "https://github.com/chenparnasa" },
"tessa@appwrite.io": { "memberSince": "2022-04-21", "spot": "20", "gitHub": "https://github.com/tessamero" },
"shimon@appwrite.io": { "memberSince": "2022-05-01", "spot": "23", "gitHub": "https://github.com/shimonewman" },
"shmuel@appwrite.io": { "memberSince": "2022-03-20", "spot": "24", "gitHub": "https://github.com/fogelito" },
"arman@appwrite.io": { "memberSince": "2022-04-04", "spot": "25", "gitHub": "https://github.com/ArmanNik" },
"carla@appwrite.io": { "memberSince": "2022-04-04", "spot": "26", "gitHub": "https://github.com/heyCarla" },
"emma@appwrite.io": { "memberSince": "2022-05-08", "spot": "27", "gitHub": "https://github.com/emmacarpagnano1" },
"dylan@appwrite.io": { "memberSince": "2022-05-09", "spot": "28", "gitHub": "https://github.com/DylanG-64" },
"steven@appwrite.io": { "memberSince": "2022-07-01", "spot": "30", "gitHub": "https://github.com/stnguyen90" },
"jyoti@appwrite.io": { "memberSince": "2022-10-24", "spot": "31", "gitHub": "https://github.com/joeyouss" },
"jade@appwrite.io": { "memberSince": "2022-10-31", "spot": "32", "gitHub": "https://github.com/dajebp" },
"khushboo@appwrite.io": { "memberSince": "2021-11-08", "spot": "13", "gitHub": "https://github.com/vermakhushboo" },
"thomas@appwrite.io": { "memberSince": "2022-11-03", "spot": "34", "gitHub": "https://github.com/TGlide/" },
"holly@appwrite.io": { "memberSince": "2022-12-05", "spot": "35", "gitHub": "" },
"laura@appwrite.io": { "memberSince": "2023-01-25", "spot": "36", "gitHub": "https://github.com/LauraDuRy" },
"caio@appwrite.io": { "memberSince": "2023-03-27", "spot": "37", "gitHub": "https://github.com/ariascaio" }
}

View file

@ -1 +1,9 @@
["kinmount_turonian@rnlay.com","chlorofluorocarbons_vahan@rnlay.com","emilia@emilia.codes","codewithsimon@gmail.com","a.stephensimon@outlook.com","lucasaudart@gmail.com","bishwajeet.techmaster@gmail.com","alves.mckl@gmail.com","hidianapham@gmail.com","tkarmakar27112000@gmail.com"]
{
"bishwajeet.techmaster@gmail.com": { "memberSince": "2023-02-07" },
"lucasaudart@gmail.com": { "memberSince": "2023-02-07" },
"tkarmakar27112000@gmail.com": { "memberSince": "2023-02-07" },
"alves.mckl@gmail.com": { "memberSince": "2023-02-07" },
"emilia@emilia.codes": { "memberSince": "2023-02-07" },
"a.stephensimon@outlook.com": { "memberSince": "2023-02-07" },
"hidianapham@gmail.com": { "memberSince": "2023-02-07" }
}

View file

@ -91,7 +91,7 @@ $getUserGitHub = function (Document $user, Document $project, Database $dbForPro
$dbForProject->deleteCachedDocument('users', $user->getId());
} catch (Throwable $err) {
// Race contition
// TODO: Fix Race contition
$sessions = $user->getAttribute('sessions', []);
$session = $sessions[0] ?? new Document();
$accessToken = $session->getAttribute('providerAccessToken');
@ -514,10 +514,25 @@ App::get('/v1/cards/cloud')
$githubName = $gitHub['name'] ?? '';
$githubId = $gitHub['id'] ?? '';
$isHero = \in_array($email, $heroes);
$isHero = \array_key_exists($email, $heroes);
$isContributor = \in_array($githubId, $contributors);
$isEmployee = \in_array($email, $employees);
$employeeNumber = $isEmployee ? \array_search($email, $employees) : '';
$isEmployee = \array_key_exists($email, $employees);
$employeeNumber = $isEmployee ? $employees[$email]['spot'] : '';
if ($isHero) {
$createdAt = new \DateTime($heroes[$email]['memberSince'] ?? '');
} else if ($isEmployee) {
$createdAt = new \DateTime($employees[$email]['memberSince'] ?? '');
}
if (!$isEmployee) {
$employeeGitHub = \array_search(\strtolower($githubName), \array_map(fn ($employee) => \strtolower($employee['gitHub']) ?? '', $employees));
if (!empty($employeeGitHub)) {
$isEmployee = true;
$employeeNumber = $isEmployee ? $employees[$employeeGitHub]['spot'] : '';
$createdAt = new \DateTime($employees[$employeeGitHub]['memberSince'] ?? '');
}
}
$isPlatinum = $user->getInternalId() % 100 === 0;
} else {
@ -537,6 +552,21 @@ App::get('/v1/cards/cloud')
$isPlatinum = $mock === 'platinum';
}
if ($isEmployee) {
$isContributor = false;
$isHero = false;
}
if ($isHero) {
$isContributor = false;
$isEmployee = false;
}
if ($isContributor) {
$isHero = false;
$isEmployee = false;
}
$isGolden = $isEmployee || $isHero || $isContributor;
$isPlatinum = $isGolden ? false : $isPlatinum;
$memberSince = \strtoupper('Member since ' . $createdAt->format('M') . ' ' . $createdAt->format('d') . ', ' . $createdAt->format('o'));
@ -622,7 +652,7 @@ App::get('/v1/cards/cloud')
$text->setFillColor(new \ImagickPixel($isGolden || $isPlatinum ? '#FFFFFF' : '#FFB9CC'));
$text->setFontSize(28);
$text->setFontWeight(600);
$text->setTextKerning(1.08);
$text->setTextKerning(1.12);
$baseImage->annotateImage($text, 512, 550, 0, \strtoupper($memberSince));
if (!empty($githubName)) {
@ -687,9 +717,9 @@ App::get('/v1/cards/cloud-back')
$gitHub = $getUserGitHub($user, $project, $dbForProject);
$githubId = $gitHub['id'] ?? '';
$isHero = \in_array($email, $heroes);
$isHero = \array_key_exists($email, $heroes);
$isContributor = \in_array($githubId, $contributors);
$isEmployee = \in_array($email, $employees);
$isEmployee = \array_key_exists($email, $employees);
$isGolden = $isEmployee || $isHero || $isContributor;
$isPlatinum = $user->getInternalId() % 100 === 0;
@ -739,7 +769,7 @@ App::get('/v1/cards/cloud-og')
->label('docs', false)
->label('origin', '*')
->param('userId', '', new UID(), 'User ID.', true)
->param('mock', '', new WhiteList(['employee', 'employee-2digit', 'employee-3digit', 'hero', 'contributor', 'normal', 'platinum', 'normal-no-github', 'normal-long', 'normal-bg2', 'normal-bg3', 'normal-right', 'platinum-right', 'golden-right']), 'Mocking behaviour.', true)
->param('mock', '', new WhiteList(['employee', 'employee-2digit', 'employee-3digit', 'hero', 'contributor', 'normal', 'platinum', 'normal-no-github', 'normal-long', 'normal-bg2', 'normal-bg3', 'normal-right', 'platinum-right', 'hero-right', 'contributor-right', 'employee-right']), 'Mocking behaviour.', true)
->param('width', 0, new Range(0, 1024), 'Resize image card width, Pass an integer between 0 to 1024.', true)
->param('height', 0, new Range(0, 1024), 'Resize image card height, Pass an integer between 0 to 1024.', true)
->inject('user')
@ -770,10 +800,25 @@ App::get('/v1/cards/cloud-og')
$githubName = $gitHub['name'] ?? '';
$githubId = $gitHub['id'] ?? '';
$isHero = \in_array($email, $heroes);
$isHero = \array_key_exists($email, $heroes);
$isContributor = \in_array($githubId, $contributors);
$isEmployee = \in_array($email, $employees);
$employeeNumber = $isEmployee ? \array_search($email, $employees) : '';
$isEmployee = \array_key_exists($email, $employees);
$employeeNumber = $isEmployee ? $employees[$email]['spot'] : '';
if ($isHero) {
$createdAt = new \DateTime($heroes[$email]['memberSince'] ?? '');
} else if ($isEmployee) {
$createdAt = new \DateTime($employees[$email]['memberSince'] ?? '');
}
if (!$isEmployee) {
$employeeGitHub = \array_search(\strtolower($githubName), \array_map(fn ($employee) => \strtolower($employee['gitHub']) ?? '', $employees));
if (!empty($employeeGitHub)) {
$isEmployee = true;
$employeeNumber = $isEmployee ? $employees[$employeeGitHub]['spot'] : '';
$createdAt = new \DateTime($employees[$employeeGitHub]['memberSince'] ?? '');
}
}
$isPlatinum = $user->getInternalId() % 100 === 0;
} else {
@ -782,11 +827,12 @@ App::get('/v1/cards/cloud-og')
$name = $mock === 'normal-long' ? 'Sir First Walter O\'Brian Junior' : 'Walter O\'Brian';
$createdAt = new \DateTime('now');
$githubName = $mock === 'normal-no-github' ? '' : ($mock === 'normal-long' ? 'sir-first-walterobrian-junior' : 'walterobrian');
$isHero = $mock === 'hero';
$isContributor = $mock === 'contributor';
$isHero = \str_starts_with($mock, 'hero');
$isContributor = \str_starts_with($mock, 'contributor');
$isEmployee = \str_starts_with($mock, 'employee');
$employeeNumber = match ($mock) {
'employee' => '1',
'employee-right' => '1',
'employee-2digit' => '18',
'employee-3digit' => '246',
default => ''
@ -795,6 +841,21 @@ App::get('/v1/cards/cloud-og')
$isPlatinum = $mock === 'platinum';
}
if ($isEmployee) {
$isContributor = false;
$isHero = false;
}
if ($isHero) {
$isContributor = false;
$isEmployee = false;
}
if ($isContributor) {
$isHero = false;
$isEmployee = false;
}
$isGolden = $isEmployee || $isHero || $isContributor;
$isPlatinum = $isGolden ? false : $isPlatinum;
$memberSince = \strtoupper('Member since ' . $createdAt->format('M') . ' ' . $createdAt->format('d') . ', ' . $createdAt->format('o'));
@ -820,20 +881,142 @@ App::get('/v1/cards/cloud-og')
$baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, -20, 710);
}
// TODO: isemployee
// TODO: isContributor
// TODO: isHero
// TODO:
if ($isEmployee) {
$image = new Imagick('public/images/cards/cloud/employee.png');
$image->setGravity(Imagick::GRAVITY_CENTER);
$image->resizeImage(120, 120, Imagick::FILTER_LANCZOS, 1);
$image->rotateImage(new ImagickPixel('#00000000'), $cardVariation === '1' ? -20 : 30);
$baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, $cardVariation === '1' ? 612 : 715, $cardVariation === '1' ? 203 : 425);
$hashtag = new \ImagickDraw();
$hashtag->setTextAlignment(Imagick::ALIGN_LEFT);
$hashtag->setFont("public/fonts/Inter-Bold.ttf");
$hashtag->setFillColor(new \ImagickPixel('#FFFADF'));
$hashtag->setFontSize(20);
$hashtag->setFontWeight(700);
$metricsHashtag = $baseImage->queryFontMetrics($hashtag, '#');
$text = new \ImagickDraw();
$text->setTextAlignment(Imagick::ALIGN_LEFT);
$text->setFont("public/fonts/Inter-Bold.ttf");
$text->setFillColor(new \ImagickPixel('#FFFADF'));
$text->setFontSize(\strlen($employeeNumber) <= 1 ? 36 : 28);
$text->setFontWeight(700);
$metricsText = $baseImage->queryFontMetrics($text, $employeeNumber);
$group = new Imagick();
$groupWidth = $metricsHashtag['textWidth'] + 6 + $metricsText['textWidth'];
$group->newImage($groupWidth, $metricsText['textHeight'], '#00000000');
$group->annotateImage($hashtag, 0, $metricsText['textHeight'], 0, '#');
$group->annotateImage($text, $metricsHashtag['textWidth'] + 6, $metricsText['textHeight'], 0, $employeeNumber);
if ($cardVariation === '1') {
$group->rotateImage(new ImagickPixel('#00000000'), -22);
if(\strlen($employeeNumber) <= 1) {
$baseImage->compositeImage($group, Imagick::COMPOSITE_OVER, 660, 245);
} else {
$baseImage->compositeImage($group, Imagick::COMPOSITE_OVER, 655, 247);
}
} else {
$group->rotateImage(new ImagickPixel('#00000000'), 32);
if(\strlen($employeeNumber) <= 1) {
$baseImage->compositeImage($group, Imagick::COMPOSITE_OVER, 775, 465);
} else {
$baseImage->compositeImage($group, Imagick::COMPOSITE_OVER, 767, 470);
}
}
}
if ($isContributor) {
$image = new Imagick('public/images/cards/cloud/contributor.png');
$image->setGravity(Imagick::GRAVITY_CENTER);
$image->resizeImage(120, 120, Imagick::FILTER_LANCZOS, 1);
$image->rotateImage(new ImagickPixel('#00000000'), $cardVariation === '1' ? -20 : 30);
$baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, $cardVariation === '1' ? 612 : 715, $cardVariation === '1' ? 203 : 425);
}
if ($isHero) {
$image = new Imagick('public/images/cards/cloud/hero.png');
$image->setGravity(Imagick::GRAVITY_CENTER);
$image->resizeImage(120, 120, Imagick::FILTER_LANCZOS, 1);
$image->rotateImage(new ImagickPixel('#00000000'), $cardVariation === '1' ? -20 : 30);
$baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, $cardVariation === '1' ? 612 : 715, $cardVariation === '1' ? 185 : 425);
}
setlocale(LC_ALL, "en_US.utf8");
$name = \iconv("utf-8", "ascii//TRANSLIT", $name);
$memberSince = \iconv("utf-8", "ascii//TRANSLIT", $memberSince);
$githubName = \iconv("utf-8", "ascii//TRANSLIT", $githubName);
$text = new \ImagickDraw();
$text->setTextAlignment(Imagick::ALIGN_CENTER);
$text->setFont("public/fonts/Poppins-Bold.ttf");
$text->setFillColor(new \ImagickPixel('#FFFFFF'));
// TODO: Name
// TODO: memberSince
// TODO: githubName
if (\strlen($name) > 33) {
$name = \substr($name, 0, 33);
}
if (\strlen($name) <= 23) {
$text->setFontSize(48);
} else {
$text->setFontSize(28);
}
$text->setFontWeight(700);
if ($cardVariation === '1') {
$baseImage->annotateImage($text, 550, 600, -22, $name);
} else {
$baseImage->annotateImage($text, 440, 585, 32, $name);
}
$text = new \ImagickDraw();
$text->setTextAlignment(Imagick::ALIGN_CENTER);
$text->setFont("public/fonts/Inter-SemiBold.ttf");
$text->setFillColor(new \ImagickPixel($isGolden || $isPlatinum ? '#FFFFFF' : '#FFB9CC'));
$text->setFontSize(18);
$text->setFontWeight(600);
$text->setTextKerning(1.12);
if ($cardVariation === '1') {
$baseImage->annotateImage($text, 580, 630, -22, $memberSince);
} else {
$baseImage->annotateImage($text, 420, 620, 32, $memberSince);
}
if (!empty($githubName)) {
$text = new \ImagickDraw();
$text->setTextAlignment(Imagick::ALIGN_LEFT);
$text->setFont("public/fonts/Inter-Regular.ttf");
$text->setFillColor(new \ImagickPixel('#FFFFFF'));
$text->setFontSize(26);
$text->setFontWeight(400);
$metrics = $baseImage->queryFontMetrics($text, $githubName);
$image = new Imagick('public/images/cards/cloud/github.png');
$image->setGravity(Imagick::GRAVITY_CENTER);
$image->resizeImage(32, 32, Imagick::FILTER_LANCZOS, 1);
$precisionFix = 5;
$group = new Imagick();
$groupWidth = $metrics['textWidth'] + 32 + 4;
$group->newImage($groupWidth, $metrics['textHeight'], '#00000000');
$group->compositeImage($image, Imagick::COMPOSITE_OVER, 0, 0);
$group->annotateImage($text, 32 + 4, $metrics['textHeight'] - $precisionFix, 0, $githubName);
if ($cardVariation === '1') {
$group->rotateImage(new ImagickPixel('#00000000'), -22);
$baseImage->compositeImage($group, Imagick::COMPOSITE_OVER, 440, 475);
} else {
$group->rotateImage(new ImagickPixel('#00000000'), 32);
$baseImage->compositeImage($group, Imagick::COMPOSITE_OVER, 410, 465);
}
}
if (!empty($width) || !empty($height)) {
$baseImage->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1);