Skip to content

Commit

Permalink
Versão 1.1.1 - Organização de Pastas e melhorias no autocomplete do M…
Browse files Browse the repository at this point in the history
…useusBR.
  • Loading branch information
mateuswetah committed Aug 7, 2024
1 parent 3379e2d commit 4940c35
Show file tree
Hide file tree
Showing 10 changed files with 681 additions and 638 deletions.
640 changes: 9 additions & 631 deletions functions.php

Large diffs are not rendered by default.

308 changes: 308 additions & 0 deletions inc/admin-tweaks.php

Large diffs are not rendered by default.

178 changes: 178 additions & 0 deletions inc/preset-atividade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
<?php

/**
* Funções com a lógica para fazer com que uma nova atividade criada puxe
* os dados possíveis da Instituição que a criou.
*/

/**
* Define automaticamente o relacionamento da instituição com a atividade
*/
function cne_preset_atividade_instituicao($item) {
if ( $item instanceof \Tainacan\Entities\Item ) {
$collection_id = $item->get_collection_id();

if ( $collection_id !== cne_get_instituicoes_collection_id() ) {

$referer_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
if ( !empty($referer_url) ) {

$query_string = parse_url($referer_url, PHP_URL_QUERY);
parse_str($query_string, $params);
$from_instituicao = $params['from-instituicao'];

if ( $from_instituicao && is_numeric($from_instituicao) ) {

$instituicao_metadatum = new \Tainacan\Entities\Metadatum( cne_get_instituicoes_relationship_metadata_id() );

if ( $instituicao_metadatum instanceof \Tainacan\Entities\Metadatum ) {

$new_instituicao_item_metadatum = new \Tainacan\Entities\Item_Metadata_Entity( $item, $instituicao_metadatum );

if ( !$new_instituicao_item_metadatum->has_value() ) {
$new_instituicao_item_metadatum->set_value( $from_instituicao );

if ( $new_instituicao_item_metadatum->validate() ) {
\Tainacan\Repositories\Item_Metadata::get_instance()->insert( $new_instituicao_item_metadatum );

cne_preset_atividade_data_from_instituicao($item, $from_instituicao);
}
}
}
}
}
}
}
};
add_action('tainacan-insert', 'cne_preset_atividade_instituicao', 10, 1);

/**
* Pré-preenche os metadados da atividade com os dados da instituição
*/
function cne_preset_atividade_data_from_instituicao($item_atividade, $instituicao_id) {

$metadata_mapping = [
'109029' => '38402',// Região (Instituição) => Região (Atividade)
'109034' => '38396', // Estado
'109040' => '38390', // Cidade
'109045' => '38386', // Bairro
'109053' => '38388', // Endereço
'109057' => '38384', // Complemento
'109065' => '85235', // CEP
'109049' => '38382', // Número
'85237' => '85237', // Plus Code
'109069' => '85239', // Geo Localização

'85081' => '85081', // Telefone
'85083' => '85083', // Telefone privado
'85087' => '85087', // E-mail
'85089' => '85089', // E-mail privado
'85103' => '85103', // Site
'85282' => '85282', // Redes Sociais
];

$child_metadata_mapping = [
'85286' => '85286', // ... => Facebook
'85309' => '85309', // ... => YouTube
'85303' => '85303', // ... => Instagram
'85316' => '85316', // ... => TikTok
'85295' => '85295', // ... => Twitter
'85421' => '85421' // ... => Outra rede social
];

$tainacan_items_repository = \Tainacan\Repositories\Items::get_instance();
$item_instituicao = $tainacan_items_repository->fetch($instituicao_id, cne_get_instituicoes_collection_id());

if ( $item_instituicao instanceof \Tainacan\Entities\Item ) {

// Percorre os metadados da instituição e copia para a atividade
foreach($metadata_mapping as $instituicao_metadatum_id => $atividade_metadatum_id) {

$instituicao_metadatum = new \Tainacan\Entities\Metadatum( $instituicao_metadatum_id );
$atividade_metadatum = new \Tainacan\Entities\Metadatum( $atividade_metadatum_id );

// Verifica se os dois objetos de metadados foram montados corretamente
if ( $instituicao_metadatum instanceof \Tainacan\Entities\Metadatum && $atividade_metadatum instanceof \Tainacan\Entities\Metadatum ) {

$instituicao_item_metadatum = new \Tainacan\Entities\Item_Metadata_Entity( $item_instituicao, $instituicao_metadatum );

if ( $instituicao_item_metadatum->has_value() ) {

$atividade_item_metadatum = new \Tainacan\Entities\Item_Metadata_Entity( $item_atividade, $atividade_metadatum );

// Insere o valor no metadado apenas se ele ainda não tiver sido preenchido
if ( !$atividade_item_metadatum->has_value() ) {

// No caso do metadado composto, percorre o vetor de metadados filhos
if ( $instituicao_metadatum->get_metadata_type() == 'Tainacan\Metadata_Types\Compound' && $atividade_metadatum->get_metadata_type() == 'Tainacan\Metadata_Types\Compound' ) {

if ( !$instituicao_metadatum->is_multiple() ) {

$instituicao_child_item_metadata = $instituicao_item_metadatum->get_value();

$parent_meta_id = null;
foreach ($instituicao_child_item_metadata as $child_instituicao_metadatum_id => $instituicao_child_item_metadatum) {
$atividade_child_metadatum = false;

if ( $instituicao_child_item_metadatum->has_value() ) {

$atividade_child_metadatum = new \Tainacan\Entities\Metadatum( $child_metadata_mapping[$child_instituicao_metadatum_id] );

if ( $atividade_child_metadatum instanceof \Tainacan\Entities\Metadatum ) {
$atividade_child_item_metadatum = new \Tainacan\Entities\Item_Metadata_Entity( $item_atividade, $atividade_child_metadatum, null, $parent_meta_id );
$atividade_child_item_metadatum->set_value( $instituicao_child_item_metadatum->get_value() );

if ( $atividade_child_item_metadatum->validate() ) {
$updated_atividade_child_metadum = \Tainacan\Repositories\Item_Metadata::get_instance()->insert( $atividade_child_item_metadatum );
$parent_meta_id = $updated_atividade_child_metadum->get_parent_meta_id();
}
}
}
}
}
} else {

if (
$instituicao_metadatum->get_metadata_type() == 'Tainacan\Metadata_Types\Taxonomy' &&
$atividade_metadatum->get_metadata_type() == 'Tainacan\Metadata_Types\Taxonomy'
) {

$terms = $instituicao_item_metadatum->get_value();

if ( false == $terms || null == $terms )
continue;

if ( is_array( $terms ) ) {
$terms = array_map( function($term) {
return is_object($term) && $term instanceof \Tainacan\Entities\Term ? $term->get_name() : null;
}, $terms );
$terms = array_filter( $terms, function($term) {
return null != $term && !empty($term);
});
} else {
$terms = is_object($terms) && $terms instanceof \Tainacan\Entities\Term ? $terms->get_name() : null;
}

if ( false == $terms || null == $terms || empty($terms) || !count($terms) )
continue;

$atividade_item_metadatum->set_value( $terms );

if ( $atividade_item_metadatum->validate() ) {
\Tainacan\Repositories\Item_Metadata::get_instance()->insert( $atividade_item_metadatum );
}

} else {
$atividade_item_metadatum->set_value( $instituicao_item_metadatum->get_value() );

if ( $atividade_item_metadatum->validate() ) {
\Tainacan\Repositories\Item_Metadata::get_instance()->insert( $atividade_item_metadatum );
}
}
}
}
}
}
}
}
}
175 changes: 175 additions & 0 deletions inc/theme-tweaks.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
<?php

/**
* Alterações gerais feitas pelo tema que impactam na parte pública do site
*/

/**
* Carregas estilos básicos do tema
*/
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );

wp_enqueue_style( 'cne-tainacan-icons', get_stylesheet_directory_uri() . '/assets/css/icons-tweaks.css', array(), wp_get_theme()->get('Version') );
wp_enqueue_style( 'view-mode-cnegrid', get_stylesheet_directory_uri() . '/assets/css/view-mode-cnegrid.css', array(), wp_get_theme()->get('Version') );

if ( is_page( 'cadastro' ) )
wp_enqueue_script( 'cne-register-form-script', get_stylesheet_directory_uri() . '/assets/js/register-form.js', array(), wp_get_theme()->get('Version'), true );

if ( is_singular() && cne_get_instituicoes_collection_post_type() == get_post_type() )
wp_enqueue_style( 'cne-instituicao-single', get_stylesheet_directory_uri() . '/assets/css/instituicao-single.css', array(), wp_get_theme()->get('Version') );

if ( is_singular() && cne_is_post_type_a_tainacan_collection( get_post_type() ) && cne_get_instituicoes_collection_post_type() != get_post_type() )
wp_enqueue_style( 'cne-atividade-single', get_stylesheet_directory_uri() . '/assets/css/atividade-single.css', array(), wp_get_theme()->get('Version') );

wp_enqueue_style( 'cne-style', get_stylesheet_uri(), array(), wp_get_theme()->get('Version') );
});

/**
* Lista somente os itens das coleções de eventos no nível repositório (Página da Agenda Cultural)
*/
function cne_fetch_args_posts_items_repository( $args, $entity ) {

if ( $entity !== 'items' || !isset($args['post_type']) || count($args['post_type']) <= 1 )
return $args;

$referer_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
if ( !empty($referer_url) ) {
$path_string = parse_url($referer_url, PHP_URL_PATH);

if ( $path_string === '/itens/' || $path_string === '/items/') {
$args['post_type'] = array_filter(
$args['post_type'],
function($collection_post_type) {
return $collection_post_type !== cne_get_instituicoes_collection_post_type();
}
);
}
}

return $args;
}
add_filter( 'tainacan-fetch-args', 'cne_fetch_args_posts_items_repository', 11, 2 );

/* Registra modos de visualização Tainacan para o VisiteMuseus */
function cne_register_tainacan_view_modes() {
if ( function_exists( 'tainacan_register_view_mode' ) ) {

// Cartão de Atividades
tainacan_register_view_mode('cnegrid', array(
'label' => 'Cartão do Visite Museus',
'description' => 'Uma grade de itens de atividades e instituições feita para o VisiteMUSEUS',
'icon' => '<span class="icon"><i class="tainacan-icon tainacan-icon-viewcards tainacan-icon-1-25em"></i></span>',
'dynamic_metadata' => false,
'template' => get_stylesheet_directory() . '/tainacan/view-mode-cnegrid.php'
));

// Cartão de Instituição
tainacan_register_view_mode('cnegrid2', array(
'label' => 'Cartão de instituição',
'description' => 'Uma grade de itens de instituições feita para o VisiteMUSEUS',
'icon' => '<span class="icon"><i class="tainacan-icon tainacan-icon-viewrecords tainacan-icon-1-25em"></i></span>',
'dynamic_metadata' => false,
'template' => get_stylesheet_directory() . '/tainacan/view-mode-cnegrid.php'
));
}
}
add_action( 'after_setup_theme', 'cne_register_tainacan_view_modes' );

/* Define o novo cartões do VisiteMuseus como modo de visualização padrão */
function cne_set_default_view_mode($default) {
if ( !is_admin() )
return 'cnegrid';

return $default;
}
add_filter( 'tainacan-default-view-mode-for-themes', 'cne_set_default_view_mode', 10, 1 );

/* Permite que apenas os cartões do VisiteMuseus estejam disponíveis como modos de visualição */
function cne_set_enabled_view_modes($registered_view_modes_slugs) {

if ( !is_admin() )
return [ 'cnegrid', 'cnegrid2' ];

return $registered_view_modes_slugs;
}
add_filter( 'tainacan-enabled-view-modes-for-themes', 'cne_set_enabled_view_modes', 10, 1 );

/**
* Adiciona a informação do post type nos cartões da busca. Isso ajuda a diferenciar
* os tipos de conteúdo nas listagens genéricas
*/
function cne_add_post_type_to_card() {
if ( is_search() ) {
$post_type_object = get_post_type_object( get_post_type() );

if ( !$post_type_object )
return;

if ( !$post_type_object->labels || !$post_type_object->labels->singular_name )
return;

$post_type_label = $post_type_object->labels->singular_name;
?>
<ul class="entry-meta" data-type="simple:slash" data-id="meta_2">
<li class="meta-post-type" itemprop="type">
<span itemprop="name"> <?php echo $post_type_label; ?></span>
</li>
</ul>
<?php
}
}
add_action('blocksy:loop:card:end', 'cne_add_post_type_to_card', 10);

/**
* Adiciona classes ao body para identificar se o usuário está filtrando por uma coleção.
* Com esta classe conseguimos esconder os filtros de data (nível repositório) no contexto
* das listas de itens de termos usados pelas instituições.
*/
function cne_add_collection_id_filtering_to_body_class( $classes ) {
$current_metaquery = isset($_GET['metaquery']) ? $_GET['metaquery'] : false;

if ( !$current_metaquery || !count( $current_metaquery ) )
return $classes;

foreach( $current_metaquery as $metaquery ) {
if ( isset($metaquery['value']) && isset($metaquery['key']) && $metaquery['key'] === 'collection_id' ) {
if ( is_array( $metaquery['value'] ) ) {
foreach ($metaquery['value'] as $value) {
$classes[] = 'filtered-by-collection-' . $value;
}
} else {
$classes[] = 'filtered-by-collection-' . $metaquery['value'];
}

break;
}
}

return $classes;
}
add_filter( 'body_class', 'cne_add_collection_id_filtering_to_body_class' );

/**
* Muda ícone de conta que aparece no cabeçalho do site
*/
add_filter('blocksy:header:account:icons', function ($icon) {
$icon['type-1'] = '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_669_2704" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24">
<rect width="24" height="24" fill="var(--theme-icon-color, var(--theme-text-color))"/>
</mask>
<g mask="url(#mask0_669_2704)">
<path d="M5 17V10H7V17H5ZM11 17V10H13V17H11ZM2 21V19H22V21H2ZM17 17V10H19V17H17ZM2 8V6L12 1L22 6V8H2ZM6.45 6H17.55L12 3.25L6.45 6Z" fill="var(--theme-icon-color, var(--theme-text-color))"/>
</g>
</svg>';
return $icon;
});

/* Desabilita os recursos de Google fontes do Blocksy já que ele não é necessário */
add_filter('blocksy:typography:google:use-remote', function () {
return false;
});
add_filter('blocksy_typography_font_sources', function ($sources) {
unset($sources['google']);
return $sources;
});
2 changes: 1 addition & 1 deletion museusbr-fetcher/build/index.asset.php
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-notices'), 'version' => '9ee7187f0b62ec0b9352');
<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-notices'), 'version' => '031d2fea3e141c90d75a');
2 changes: 1 addition & 1 deletion museusbr-fetcher/build/index.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions museusbr-fetcher/src/components/museus-fetcher-modal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const MuseusFetcherModal = () => {
setMuseus,
museuSelecionado,
setMuseuSelecionado,
fetchMuseusFromMuseusBR,
fetchMuseusFromMuseusBRDebounced,
prepareItemToCreateInstituicao,
isFetchingMuseus,
isCreatingInstituicao
Expand Down Expand Up @@ -45,8 +45,8 @@ const MuseusFetcherModal = () => {
museus={ museus }
setMuseus={ setMuseus }
fetchMuseus={ _.debounce((inputValue) => {
fetchMuseusFromMuseusBR(inputValue);
}, 500)} />
fetchMuseusFromMuseusBRDebounced(inputValue);
}, 300)} />
</FlexBlock>
<FlexItem>
{ isFetchingMuseus ? <Spinner /> : <span style={{ width: '45px', display: 'block' }}></span> }
Expand Down
2 changes: 1 addition & 1 deletion museusbr-fetcher/src/components/museusbr-autocomplete.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const MuseusBRAutocomplete = ( {
<ComboboxControl
__next40pxDefaultSize={ true }
__experimentalRenderItem={ ({ item }) => <MuseuItemCard item={ item } /> }
label={ 'Pesquise um museu' }
label={ 'Pesquise pelo nome do museu como está no MuseusBR' }
options={ museus }
onFilterValueChange={ ( inputValue) => fetchMuseus(inputValue) }
value={ museuSelecionado ? museuSelecionado.label : '' }
Expand Down
Loading

0 comments on commit 4940c35

Please sign in to comment.