Skip to content

Commit

Permalink
Standardize social media fields to accept both URLs and usernames.
Browse files Browse the repository at this point in the history
  • Loading branch information
TalysonSoares committed Jul 30, 2024
1 parent 4b9d244 commit ec1618e
Show file tree
Hide file tree
Showing 13 changed files with 328 additions and 128 deletions.
31 changes: 31 additions & 0 deletions app/src/Enum/SocialMediaEnum.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace App\Enum;

enum SocialMediaEnum: string
{
case FACEBOOK = 'facebook.com';
case INSTAGRAM = 'instagram.com';
case LINKEDIN = 'linkedin.com';
case PINTEREST = 'pinterest.com';
case SPOTIFY = 'spotify.com';
case X = 'x.com';
case VIMEO = 'vimeo.com';
case YOUTUBE = 'youtube.com';
case TIKTOK = 'tiktok.com';

public function getParsingRegex(): string
{
return match ($this) {
self::FACEBOOK, self::INSTAGRAM, self::PINTEREST, self::VIMEO => "/(?:{$this->value}\/(?:profile\.php\?id=)?|^)([\w\d\.]+)$/i",

self::X, self::YOUTUBE, self::TIKTOK => "/(?:{$this->value}\/|^)(@?[\w\d\.]+)$/i",

self::LINKEDIN => "/(?:{$this->value}\/in\/|^)([\w\d-]+)$/i",

self::SPOTIFY => "/(?:open\.)?spotify\.com\/(?:intl-\w+\/)?(?:(user|artist)\/([\w\d]+))|^(user|artist)\/([\w\d]+)$/i",
};
}
}
63 changes: 44 additions & 19 deletions src/conf/agent-types.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

use MapasCulturais\Utils;
use App\Enum\SocialMediaEnum;
use MapasCulturais\Utils;

/**
* See https://github.com/Respect/Validation to know how to write validations
Expand Down Expand Up @@ -433,48 +434,60 @@
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Facebook'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('facebook.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::FACEBOOK, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('facebook.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL válida ou o nome ou id do usuário.")
),
'placeholder' => "nomedousuario ou iddousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'twitter' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Twitter'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('twitter.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::X, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('twitter.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
"v::oneOf(v::urlDomain('x.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'x' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('X'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser(SocialMediaEnum::X, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('x.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'instagram' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Instagram'),
'available_for_opportunities' => true,
'serialize' =>function($value){
return Utils::parseSocialMediaUser('instagram.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::INSTAGRAM, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('instagram.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
),
'linkedin' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Linkedin'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('linkedin.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::LINKEDIN, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('linkedin.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'vimeo' => array(
Expand All @@ -484,21 +497,21 @@
"v::oneOf(v::urlDomain('vimeo.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('vimeo.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::VIMEO, $value);
},
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'spotify' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Spotify'),
'validations' => array(
"v::oneOf(v::urlDomain('spotify.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
"v::oneOf(v::urlDomain('spotify.com'), v::regex('/(?:open\.)?spotify\.com\/(?:intl-\w+\/)?(?:(user|artist)\/([\w\d]+))|^(user|artist)\/([\w\d]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('spotify.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::SPOTIFY, $value);
},
'placeholder' => "nomedousuario",
'placeholder' => "Url ou user/id ou artist/id",
'available_for_opportunities' => true
),
'youtube' => array(
Expand All @@ -508,9 +521,9 @@
"v::oneOf(v::urlDomain('youtube.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('youtube.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::YOUTUBE, $value);
},
'placeholder' => "iddocanal",
'placeholder' => "Url ou id do canal",
'available_for_opportunities' => true
),
'pinterest' => array(
Expand All @@ -520,9 +533,21 @@
"v::oneOf(v::urlDomain('pinterest.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('pinterest.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::PINTEREST, $value);
},
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'tiktok' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('TikTok'),
'validations' => array(
"v::oneOf(v::urlDomain('tiktok.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser(SocialMediaEnum::TIKTOK, $value);
},
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
// DADOS BANCÁRIOS
Expand Down
69 changes: 47 additions & 22 deletions src/conf/event-types.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?php

use App\Enum\SocialMediaEnum;
use MapasCulturais\Utils;
/**
* See https://github.com/Respect/Validation to know how to write validations
Expand Down Expand Up @@ -72,96 +73,120 @@
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Facebook'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('facebook.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::FACEBOOK, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('facebook.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL válida ou o nome ou id do usuário.")
),
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'twitter' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Twitter'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('twitter.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::X, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('twitter.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
"v::oneOf(v::urlDomain('x.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'x' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('X'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser(SocialMediaEnum::X, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('x.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'instagram' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Instagram'),
'available_for_opportunities' => true,
'serialize' =>function($value){
return Utils::parseSocialMediaUser('instagram.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::INSTAGRAM, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('instagram.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
),
'linkedin' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Linkedin'),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('linkedin.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::LINKEDIN, $value);
},
'validations' => array(
"v::oneOf(v::urlDomain('linkedin.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'vimeo' => array(
'type' => "socialMedia",
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Vimeo'),
'validations' => array(
"v::oneOf(v::urlDomain('vimeo.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('vimeo.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::VIMEO, $value);
},
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'spotify' => array(
'type' => "socialMedia",
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Spotify'),
'validations' => array(
"v::oneOf(v::urlDomain('spotify.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
"v::oneOf(v::urlDomain('spotify.com'), v::regex('/(?:open\.)?spotify\.com\/(?:intl-\w+\/)?(?:(user|artist)\/([\w\d]+))|^(user|artist)\/([\w\d]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('spotify.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::SPOTIFY, $value);
},
'placeholder' => "nomedousuario",
'placeholder' => "Url ou user/id ou artist/id",
'available_for_opportunities' => true
),
'youtube' => array(
'type' => "socialMedia",
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('YouTube'),
'validations' => array(
"v::oneOf(v::urlDomain('youtube.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('youtube.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::YOUTUBE, $value);
},
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do canal",
'available_for_opportunities' => true
),
'pinterest' => array(
'type' => "socialMedia",
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('Pinterest'),
'validations' => array(
"v::oneOf(v::urlDomain('pinterest.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser('pinterest.com', $value);
return Utils::parseSocialMediaUser(SocialMediaEnum::PINTEREST, $value);
},
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'tiktok' => array(
'type' => "socialMedia",
'label' => \MapasCulturais\i::__('TikTok'),
'validations' => array(
"v::oneOf(v::urlDomain('tiktok.com'), v::regex('/^@?([\w\d\.]+)$/i'))" => \MapasCulturais\i::__("O valor deve ser uma URL ou usuário válido.")
),
'serialize' =>function($value){
return Utils::parseSocialMediaUser(SocialMediaEnum::TIKTOK, $value);
},
'placeholder' => "nomedousuario",
'placeholder' => "Url ou id do usuário",
'available_for_opportunities' => true
),
'event_attendance' => array(
Expand Down
Loading

0 comments on commit ec1618e

Please sign in to comment.