diff --git a/app/src/Enum/SocialMediaEnum.php b/app/src/Enum/SocialMediaEnum.php
new file mode 100644
index 0000000000..d8d8ef1d30
--- /dev/null
+++ b/app/src/Enum/SocialMediaEnum.php
@@ -0,0 +1,31 @@
+ "/(?:{$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",
+ };
+ }
+}
diff --git a/src/conf/agent-types.php b/src/conf/agent-types.php
index 941493836f..aede7bffea 100644
--- a/src/conf/agent-types.php
+++ b/src/conf/agent-types.php
@@ -1,6 +1,7 @@
"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(
@@ -458,23 +471,23 @@
'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(
@@ -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(
@@ -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(
@@ -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
diff --git a/src/conf/event-types.php b/src/conf/event-types.php
index 6512bfa89b..1a462696d8 100644
--- a/src/conf/event-types.php
+++ b/src/conf/event-types.php
@@ -1,5 +1,6 @@
"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(
@@ -97,71 +110,83 @@
'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(
diff --git a/src/conf/opportunity-types.php b/src/conf/opportunity-types.php
index 5c00780348..a4ae7b0dfc 100644
--- a/src/conf/opportunity-types.php
+++ b/src/conf/opportunity-types.php
@@ -1,5 +1,6 @@
"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(
@@ -127,23 +140,23 @@ function compareNamesOpportunity ($item1, $item2) {
'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(
@@ -153,21 +166,21 @@ function compareNamesOpportunity ($item1, $item2) {
"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(
@@ -177,9 +190,9 @@ function compareNamesOpportunity ($item1, $item2) {
"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(
@@ -189,9 +202,21 @@ function compareNamesOpportunity ($item1, $item2) {
"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
),
'registrationSeals' => array(
diff --git a/src/conf/project-types.php b/src/conf/project-types.php
index e977b53270..74d53d64ab 100644
--- a/src/conf/project-types.php
+++ b/src/conf/project-types.php
@@ -1,6 +1,7 @@
"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(
@@ -90,23 +103,23 @@ function compareNamesProject($a, $b){
'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(
@@ -116,21 +129,21 @@ function compareNamesProject($a, $b){
"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(
@@ -140,9 +153,9 @@ function compareNamesProject($a, $b){
"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(
@@ -152,9 +165,21 @@ function compareNamesProject($a, $b){
"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
),
diff --git a/src/conf/space-types.php b/src/conf/space-types.php
index df2d476a86..2f81cf0e34 100644
--- a/src/conf/space-types.php
+++ b/src/conf/space-types.php
@@ -1,5 +1,6 @@
"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(
@@ -466,23 +479,23 @@ function ordenaSubcategorias(&$array) {
'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(
@@ -492,21 +505,21 @@ function ordenaSubcategorias(&$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",
'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(
@@ -516,9 +529,9 @@ function ordenaSubcategorias(&$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' => "iddocanal",
+ 'placeholder' => "Url ou id do canal",
'available_for_opportunities' => true
),
'pinterest' => array(
@@ -528,9 +541,21 @@ function ordenaSubcategorias(&$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
),
diff --git a/src/core/Utils.php b/src/core/Utils.php
index e1387c21be..7aefae4cfd 100644
--- a/src/core/Utils.php
+++ b/src/core/Utils.php
@@ -2,6 +2,8 @@
namespace MapasCulturais;
+use App\Enum\SocialMediaEnum;
+
class Utils {
static function removeAccents($string) {
if (!preg_match('/[\x80-\xff]/', $string))
@@ -181,24 +183,33 @@ static function formatCnpjCpf($value) {
*
* @return string|null
*/
- static function parseSocialMediaUser(string $domain, ?string $value) : string|null {
- $result = null;
-
- if($value){
-
- $domain = preg_quote($domain);
-
- $_value = trim($value);
- $_value = preg_replace("~^(?:https?:\/\/)?(?:www\.)?~i", "", $_value);
- $_value = rtrim($_value, '/');
-
- if (preg_match("/(?:{$domain})\/(profile\.php\?id=)?([\w\d\.]+)/i", $_value, $matches)) {
- $result = $matches[2];
- } else if(preg_match("/^@?([\w\d\.]+)$/i", $_value, $matches)){
- $result = $matches[1];
- }
+ static function parseSocialMediaUser(SocialMediaEnum $domain, ?string $value) : string|null
+ {
+ if (true === empty($value)) {
+ return null;
+ }
+
+ $domainRegex = $domain->getParsingRegex();
+
+ $_value = trim($value);
+ $_value = preg_replace("~^(?:https?:\/\/)?(?:www\.)?~i", "", $_value);
+ $_value = rtrim($_value, '/');
+
+ if (false === preg_match($domainRegex, $_value, $matches)) {
+ return null;
}
- return $result;
+ return match ($domain) {
+ SocialMediaEnum::SPOTIFY => self::formatSpotifyUser($matches),
+ default => end($matches),
+ };
+ }
+
+ private static function formatSpotifyUser(array $matches): string
+ {
+ $type = empty($matches[1]) ? $matches[3] : $matches[1];
+ $id = empty($matches[2]) ? $matches[4] : $matches[2];
+
+ return "$type/$id";
}
}
diff --git a/src/modules/Components/assets/js/components-base/Utils.js b/src/modules/Components/assets/js/components-base/Utils.js
index 9d2fb824b3..8bdda52f6b 100644
--- a/src/modules/Components/assets/js/components-base/Utils.js
+++ b/src/modules/Components/assets/js/components-base/Utils.js
@@ -256,6 +256,17 @@ globalThis.Utils = {
},
buildSocialMediaLink(entity, socialMedia){
- return "https://" + socialMedia + ".com/" + entity[socialMedia];
+ let baseUrl = "https://" + socialMedia + ".com/";
+
+ switch (socialMedia) {
+ case 'linkedin':
+ baseUrl = "https://www.linkedin.com/in/";
+ break;
+ case 'spotify':
+ baseUrl = `https://open.spotify.com/`;
+ break;
+ }
+
+ return baseUrl + entity[socialMedia];
}
}
\ No newline at end of file
diff --git a/src/modules/Components/components/mc-icon/init.php b/src/modules/Components/components/mc-icon/init.php
index 1b55c40e51..ee7aea9bd4 100644
--- a/src/modules/Components/components/mc-icon/init.php
+++ b/src/modules/Components/components/mc-icon/init.php
@@ -21,10 +21,11 @@
'pinterest' => 'fa6-brands:pinterest-p',
'spotify' => 'akar-icons:spotify-fill',
'telegram' => 'cib:telegram-plane',
- 'twitter' => 'akar-icons:twitter-fill',
+ 'x' => 'fa6-brands:x-twitter',
'whatsapp' => 'akar-icons:whatsapp-fill',
'vimeo' => 'brandico:vimeo',
'youtube' => 'akar-icons:youtube-fill',
+ 'tiktok' => 'bxl:tiktok',
// IMPORTANTE: manter ordem alfabética
diff --git a/src/modules/Components/components/mc-share-links/template.php b/src/modules/Components/components/mc-share-links/template.php
index f28f3a1286..18fa038bec 100644
--- a/src/modules/Components/components/mc-share-links/template.php
+++ b/src/modules/Components/components/mc-share-links/template.php
@@ -12,8 +12,8 @@
-->