# Gerando certificados personalizados para os selos

## Gerando certificados personalizados para os selos

A criação de modelo de certificado de selos para impressão passa pela criação de um plugin que implemente o template do certificado, além da habilitação do plugin base da funcionalidade.

#### Plugin SealModel

O primeiro passo para criar o certificado é habilitar o plugin [SealModelTab](https://github.com/mapasculturais/mapasculturais/tree/master/src/protected/application/plugins/SealModelTab), que implementa um aba na configuração dos selos para que o administrador escolha um modelo de selo a ser utilizado para impressão dos certificados. Adicione a linha à chave `plugins` do seu arquivo de configuração:

```
    'plugins' => [
        . 
        . 
        . 
        'SealModelTab' => ['namespace' => 'SealModelTab' ],
    ]
```

Este plugin também disponibiliza uma classe abstrata chamada `SealModelTab\SealModelTemplatePlugin` para implementação de modelos de certificados.

## Implementando plugin do certificado

Para implementar o certificado, crie um plugin chamado `MeuCertificado` que extende a classe `SealModelTab\SealModelTemplatePlugin` e implementa o método `getModelData`:

```
// arquivo MeuCertificado/Plugin.php
<?php
namespace MeuCertificado;

class Plugin extends \SealModelTab\SealModelTemplatePlugin
{
    function __construct($config = []) {
      $config += [
         'logo-site' => 'img/marca-da-org.png'
      ];

      parent::__construct($config);
   }

    function getModelData(){
        return [
            'label'=> 'Meu modelo de certificado',
            'name' => 'MeuCertificado',
            'css' => 'meu-certificado--styles.css',
            'background' => 'meu-certificado--bg.jpg',
            'preview' => 'meu-certificado--preview.png'
        ];
    }
}
```

o template html do certificado deve estar no arquivo `printsealrelation.php` na pasta do plugin:

```
// arquivo MeuCertificado/printsealrelation.php
<?php
$plugin = $app->plugins['MeuCertificado'];
?>
<div id="certificate--meu-certificado">
    <img class="cert-background" src="<?php $view->asset('img/meu-certificado--bg.jpg') ?>"/>
    <p class="certificate-content"><?php echo nl2br($msg) ?></p>
    <div class="footer">
        <div class="entity-url">
            <a href="<?= $relation->owner->singleUrl; ?>" title="<?= $relation->owner->name ?>">
                <?= $relation->owner->singleUrl; ?>
            </a>
        </div>
        <div class="footer-signatures">
            <div class="certificate-seal-owner">
                <p><?php echo $relation->seal->owner->name; ?><br>
                <?php echo $relation->seal->owner->shortDescription; ?></p>
            </div>
            <?php if ($avatar = $relation->seal->avatar): ?>
                <div class="footer-img certificate-seal-avatar">
                    <img src="<?php echo $avatar->url; ?>"
                        alt="<?php echo $relation->seal->name ?>">
                </div>
            <?php endif; ?>
            <div class="footer-img certificate-logo-site">
                <!-- essa imagem pode variar de acordo com o tema, por isso opção na config -->
                <img src="<?php $view->asset($plugin->config['logo-site'], true, true) ?>">
            </div>
        </div>
    </div>
</div>
```

crie os seguintes arquivos para completar o template do certificado:

* `assets/img/meu-certificado--bg.jpg`
* `assets/img/meu-certificado--preview.png`
* `assets/css/meu-certificado--styles.css`

```css
#certificate--meu-certificado {
    width: 1250px;
    background-size: contain;
    background-repeat: no-repeat;
    height: 100%;
    overflow: hidden;
    margin: auto;
}
#certificate--meu-certificado img.cert-background {
    position: absolute;
    z-index: -1;
    width: 1250px;
}
#certificate--meu-certificado p.certificate-content {
    margin: 220px 212px 0 90px;
    font-size: 22px;
    line-height: 2.2rem;
    text-align: justify;
    height: 505px;
}
#certificate--meu-certificado p.certificate-content span.entity-name {
    font-size: 22px;
    font-style: italic;
}
#certificate--meu-certificado .footer {
    width: 100%;
}
#certificate--meu-certificado .footer .entity-url {
    margin-left: 160px;
    margin-top: 95px;
    width: 240px;
    font-size: 13px;
    overflow: visible;
}
#certificate--meu-certificado .footer .footer-signatures {
    width: 730px;
    text-align: center;
    float: right;
    position: absolute;
    margin-top: -20px;
}
#certificate--meu-certificado .footer .footer-signatures div {
    display: inline;
}
#certificate--meu-certificado .footer .footer-signatures div.certificate-seal-owner p {
    margin-bottom: 0px;
    height: 50px;
}
#certificate--meu-certificado .footer div {
    position: relative;
    vertical-align: bottom;
    display: inline-block;
}
#certificate--meu-certificado .footer div.footer-img {
    margin: 0 7px;
}
#certificate--meu-certificado .footer div.footer-img > img {
    height: 82px;
}
```

com o código do modelo pronto, habilite o plugin:

```
        'plugins' => [
        . 
        . 
        . 
        'SealModelTab' => ['namespace' => 'SealModelTab' ],
        'MeuCertificado' => [
            'namespace' => 'MeuCertificado',
            'config' => [
                'logo-site' => 'img/logo-secult.png'
            ]
        ],
    ]
```

## Criando um selo

Para testar o certificado criado, deve-se criar um selo preenchendo todos os campos obrigatórios e escolhendo o modelo criado na aba ***Modelos***, lembrando que somente administradores podem criar selos.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mapasculturais.gitbook.io/documentacao-para-desenvolvedores/livro-de-receitas/gerando-certificados-personalizados-para-os-selos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
